serve-sim 0.1.49 → 0.1.50-beta.145.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/Sources/SimCameraInjector/SimCamFakes.h +1 -0
- package/Sources/SimCameraInjector/SimCamFakes.m +15 -0
- package/Sources/SimCameraInjector/SimCamSwizzles.m +17 -13
- package/Sources/SimDuoHID/main.m +53 -1
- package/dist/middleware.js +46 -46
- package/dist/serve-sim.js +70 -70
- package/dist/simcam/libSimCameraInjector.dylib +0 -0
- package/dist/simduo/serve-sim-duo-hid +0 -0
- package/package.json +1 -1
- package/src/device-session.ts +2 -1
- package/src/duo-state.ts +53 -9
- package/src/native.ts +6 -1
package/dist/middleware.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import{createRequire as
|
|
1
|
+
import{createRequire as u5}from"node:module";var E5=Object.create;var{getPrototypeOf:I5,defineProperty:L9,getOwnPropertyNames:x5}=Object;var w5=Object.prototype.hasOwnProperty;function S5($){return this[$]}var k5,y5,f5=($,Q,Z)=>{var J=$!=null&&typeof $==="object";if(J){var Y=Q?k5??=new WeakMap:y5??=new WeakMap,X=Y.get($);if(X)return X}Z=$!=null?E5(I5($)):{};let K=Q||!$||!$.__esModule?L9(Z,"default",{value:$,enumerable:!0}):Z;for(let V of x5($))if(!w5.call(K,V))L9(K,V,{get:S5.bind($,V),enumerable:!0});if(J)Y.set($,K);return K};var F6=($,Q)=>()=>(Q||$((Q={exports:{}}).exports,Q),Q.exports);var b5=($)=>$;function v5($,Q){this[$]=b5.bind(null,Q)}var h5=($,Q)=>{for(var Z in Q)L9($,Z,{get:Q[Z],enumerable:!0,configurable:!0,set:v5.bind(Q,Z)})};var g5=($,Q)=>()=>($&&(Q=$($=0)),Q);var y6=u5(import.meta.url);var O8=F6((oK,L8)=>{var J6=1000,Y6=J6*60,X6=Y6*60,h0=X6*24,K1=h0*7,W1=h0*365.25;L8.exports=function($,Q){Q=Q||{};var Z=typeof $;if(Z==="string"&&$.length>0)return G1($);else if(Z==="number"&&isFinite($))return Q.long?z1($):V1($);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify($))};function G1($){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*W1;case"weeks":case"week":case"w":return Z*K1;case"days":case"day":case"d":return Z*h0;case"hours":case"hour":case"hrs":case"hr":case"h":return Z*X6;case"minutes":case"minute":case"mins":case"min":case"m":return Z*Y6;case"seconds":case"second":case"secs":case"sec":case"s":return Z*J6;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return Z;default:return}}function V1($){var Q=Math.abs($);if(Q>=h0)return Math.round($/h0)+"d";if(Q>=X6)return Math.round($/X6)+"h";if(Q>=Y6)return Math.round($/Y6)+"m";if(Q>=J6)return Math.round($/J6)+"s";return $+"ms"}function z1($){var Q=Math.abs($);if(Q>=h0)return r6($,Q,h0,"day");if(Q>=X6)return r6($,Q,X6,"hour");if(Q>=Y6)return r6($,Q,Y6,"minute");if(Q>=J6)return r6($,Q,J6,"second");return $+" ms"}function r6($,Q,Z,J){var Y=Q>=Z*1.5;return Math.round($/Z)+" "+J+(Y?"s":"")}});var t9=F6((aK,R8)=>{function B1($){Z.debug=Z,Z.default=Z,Z.coerce=G,Z.disable=K,Z.enable=Y,Z.enabled=V,Z.humanize=O8(),Z.destroy=z,Object.keys($).forEach((W)=>{Z[W]=$[W]}),Z.names=[],Z.skips=[],Z.formatters={};function Q(W){let B=0;for(let N=0;N<W.length;N++)B=(B<<5)-B+W.charCodeAt(N),B|=0;return Z.colors[Math.abs(B)%Z.colors.length]}Z.selectColor=Q;function Z(W){let B,N=null,j,O;function T(...q){if(!T.enabled)return;let A=T,R=Number(new Date),_=R-(B||R);if(A.diff=_,A.prev=B,A.curr=R,B=R,q[0]=Z.coerce(q[0]),typeof q[0]!=="string")q.unshift("%O");let D=0;q[0]=q[0].replace(/%([a-zA-Z%])/g,(F,H)=>{if(F==="%%")return"%";D++;let U=Z.formatters[H];if(typeof U==="function"){let C=q[D];F=U.call(A,C),q.splice(D,1),D--}return F}),Z.formatArgs.call(A,q),(A.log||Z.log).apply(A,q)}if(T.namespace=W,T.useColors=Z.useColors(),T.color=Z.selectColor(W),T.extend=J,T.destroy=Z.destroy,Object.defineProperty(T,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(N!==null)return N;if(j!==Z.namespaces)j=Z.namespaces,O=Z.enabled(W);return O},set:(q)=>{N=q}}),typeof Z.init==="function")Z.init(T);return T}function J(W,B){let N=Z(this.namespace+(typeof B>"u"?":":B)+W);return N.log=this.log,N}function Y(W){Z.save(W),Z.namespaces=W,Z.names=[],Z.skips=[];let B=(typeof W==="string"?W:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let N of B)if(N[0]==="-")Z.skips.push(N.slice(1));else Z.names.push(N)}function X(W,B){let N=0,j=0,O=-1,T=0;while(N<W.length)if(j<B.length&&(B[j]===W[N]||B[j]==="*"))if(B[j]==="*")O=j,T=N,j++;else N++,j++;else if(O!==-1)j=O+1,T++,N=T;else return!1;while(j<B.length&&B[j]==="*")j++;return j===B.length}function K(){let W=[...Z.names,...Z.skips.map((B)=>"-"+B)].join(",");return Z.enable(""),W}function V(W){for(let B of Z.skips)if(X(W,B))return!1;for(let B of Z.names)if(X(W,B))return!0;return!1}function G(W){if(W instanceof Error)return W.stack||W.message;return W}function z(){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}R8.exports=B1});var A8=F6((_8,t6)=>{_8.formatArgs=N1;_8.save=F1;_8.load=M1;_8.useColors=H1;_8.storage=U1();_8.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`.")}})();_8.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 H1(){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 N1($){if($[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+$[0]+(this.useColors?"%c ":" ")+"+"+t6.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)}_8.log=console.debug||console.log||(()=>{});function F1($){try{if($)_8.storage.setItem("debug",$);else _8.storage.removeItem("debug")}catch(Q){}}function M1(){let $;try{$=_8.storage.getItem("debug")||_8.storage.getItem("DEBUG")}catch(Q){}if(!$&&typeof process<"u"&&"env"in process)$=process.env.DEBUG;return $}function U1(){try{return localStorage}catch($){}}t6.exports=t9()(_8);var{formatters:j1}=t6.exports;j1.j=function($){try{return JSON.stringify($)}catch(Q){return"[UnexpectedJSONParseError]: "+Q.message}}});var q8=F6((P8,e6)=>{var P1=y6("tty"),s6=y6("util");P8.init=S1;P8.log=I1;P8.formatArgs=q1;P8.save=x1;P8.load=w1;P8.useColors=D1;P8.destroy=s6.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");P8.colors=[6,2,3,4,5,1];try{let $=(()=>{throw new Error("Cannot require module "+"supports-color");})();if($&&($.stderr||$).level>=2)P8.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($){}P8.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 D1(){return"colors"in P8.inspectOpts?Boolean(P8.inspectOpts.colors):P1.isatty(process.stderr.fd)}function q1($){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+"+e6.exports.humanize(this.diff)+"\x1B[0m")}else $[0]=
|
|
4
|
-
`)}function
|
|
5
|
-
`).map((Q)=>Q.trim()).join(" ")};
|
|
3
|
+
`+X),$.push(Y+"m+"+e6.exports.humanize(this.diff)+"\x1B[0m")}else $[0]=E1()+Q+" "+$[0]}function E1(){if(P8.inspectOpts.hideDate)return"";return new Date().toISOString()+" "}function I1(...$){return process.stderr.write(s6.formatWithOptions(P8.inspectOpts,...$)+`
|
|
4
|
+
`)}function x1($){if($)process.env.DEBUG=$;else delete process.env.DEBUG}function w1(){return process.env.DEBUG}function S1($){$.inspectOpts={};let Q=Object.keys(P8.inspectOpts);for(let Z=0;Z<Q.length;Z++)$.inspectOpts[Q[Z]]=P8.inspectOpts[Q[Z]]}e6.exports=t9()(P8);var{formatters:T8}=e6.exports;T8.o=function($){return this.inspectOpts.colors=this.useColors,s6.inspect($,this.inspectOpts).split(`
|
|
5
|
+
`).map((Q)=>Q.trim()).join(" ")};T8.O=function($){return this.inspectOpts.colors=this.useColors,s6.inspect($,this.inspectOpts)}});var E8=F6((sK,s9)=>{if(typeof process>"u"||process.type==="renderer"||!1||process.__nwjs)s9.exports=A8();else s9.exports=q8()});var X5={};h5(X5,{startCdpServer:()=>h3,startBunCdpServer:()=>c3,listTargets:()=>d3,listDevices:()=>J5});import{createRequire as UJ}from"node:module";import*as u4 from"node:net";import*as c4 from"node:net";import{spawnSync as gJ}from"node:child_process";import*as i4 from"node:tls";import*as t4 from"node:http";function RJ($){return this[$]}function w4($){return $.replace(/[&<>'"]/g,(Q)=>Q==="&"?"&":Q==="<"?"<":Q===">"?">":Q==="'"?"'":""")}function xJ($){let Q="";for(let Z=0;Z<$.length;Z++)Q+=String.fromCharCode($[Z]);return btoa(Q)}function wJ($){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 P$($,Q){if($===null||$===void 0)return`${Q}<string></string>`;if(typeof $==="boolean")return`${Q}<${$?"true":"false"}/>`;if(typeof $==="string")return`${Q}<string>${w4($)}</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>${xJ($)}</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)=>P$(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>${w4(Y)}</key>
|
|
9
|
+
`+P$($[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]),K=Y[Y.length-1];if(K)Z.set(K,X)}return Array.from(Z,([J,Y])=>({socketPath:J,pid:Y}))}async function i4($){let Q=new B9;return new Promise((Z,J)=>{let Y=d4.createConnection({path:$}),X=(K)=>{Q.close(K),J(K)};Y.once("error",X),Y.once("connect",()=>{Y.off("error",X),k$(Y,Q),Z({socket:Y,stream:Q})})})}async function L$($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return H9(J)}function O$($,Q){let Z=S$({Label:"inspect-webkit",...Q}),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function R$($,Q){if($.Error)throw Error(`lockdown ${Q} error: ${String($.Error)}`);if($.Request!==Q)throw Error(`lockdown expected Request=${Q}, got ${String($.Request)}`)}function f4($,Q,Z,J){return new Promise((Y,X)=>{Q();let K=new B9,z=o4.connect({socket:$,cert:Buffer.from(Z.HostCertificate),key:Buffer.from(Z.HostPrivateKey),ca:Buffer.from(Z.RootCertificate),rejectUnauthorized:!1}),G=(V)=>{R0(`${J} tls error:`,V),K.close(V),X(V)};z.once("error",G),z.once("secureConnect",()=>{R0(`${J} tls handshake complete`),z.off("error",G);let V=k$(z,K);Y({socket:z,stream:K,detach:V})})})}class N9{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){R0("connecting usbmux tunnel to lockdown port",y4);let{socket:Z,stream:J,detach:Y}=await k4($.DeviceID,y4),X=new N9(Z,J,Q,$.Properties.SerialNumber,$.DeviceID,Y);R0("sending QueryType"),O$(Z,{Request:"QueryType"});let K=await L$(J);if(R0("QueryType reply:",K),R$(K,"QueryType"),K.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(K.Type)}`);return X}async startSession(){R0("StartSession with HostID",this.pair.HostID),O$(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let $=await L$(this.stream);if(R0("StartSession reply:",$),R$($,"StartSession"),$.EnableSessionSSL){R0("upgrading to TLS");let Q=await f4(this.socket,this.detach,this.pair,"lockdown");this.socket=Q.socket,this.stream=Q.stream,this.detach=Q.detach,R0("TLS upgrade complete")}}async startService($){R0("StartService",$),O$(this.socket,{Request:"StartService",Service:$});let Q=await L$(this.stream);return R0("StartService reply:",Q),R$(Q,"StartService"),{port:Q.Port,enableServiceSSL:Boolean(Q.EnableServiceSSL),service:$}}async connectService($){R0("connecting service tunnel to port",$.port,"ssl=",$.enableServiceSSL);let{socket:Q,stream:Z,detach:J}=await k4(this.deviceID,$.port);if(!$.enableServiceSSL)return{socket:Q,stream:Z};let Y=await f4(Q,J,this.pair,"service");return{socket:Y.socket,stream:Y.stream}}close(){this.socket.end()}}async function gJ($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return SJ(J)}function uJ($,Q){let Z=S$(Q),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function mJ(){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 E6{socket;stream;connectionId=mJ();subscribers=new Set;reading;constructor($,Q){this.socket=$,this.stream=Q,this.reading=(async()=>{try{while(!Q.closed){let Z=await gJ(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((K)=>{if(K.__selector===$)clearTimeout(Y),X(),Z(K)})})}send($,Q){uJ(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 K=X;J.push({appId:Y,bundleId:K.WIRApplicationBundleIdentifierKey,name:K.WIRApplicationNameKey,isProxy:Boolean(K.WIRIsApplicationProxyKey),isActive:Boolean(K.WIRIsApplicationActiveKey),hostAppId:K.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 K=X;Y.push({pageId:Number(K.WIRPageIdentifierKey??0),title:K.WIRTitleKey??"",url:K.WIRURLKey??"",type:K.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 V9{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 K=this.toolRequestMap.get(Q.id);if(K){this.toolRequestMap.delete(Q.id);let z=`target::${K}`;if("error"in Q&&this.filters.has("target::error"))z="target::error";let G=this.filters.get(z);if(!G)return this.sendToTools($);let V=Q;for(let W of G){if(!V)break;V=await W(V)}if(V)this.sendToTools(JSON.stringify(V));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 pJ(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function g($,Q,Z){return $.fireResultToTools(Q.id,Z),Promise.resolve(null)}function cJ($,Q){$.addMessageFilter("tools::Debugger.canSetScriptSource",(Z)=>g($,Z,{result:!1})),$.addMessageFilter("tools::Debugger.setBlackboxPatterns",(Z)=>g($,Z,{})),$.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(Z)=>g($,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)=>g($,Z,{})),$.addMessageFilter("tools::Debugger.setSkipAllPauses",(Z)=>g($,Z,{})),$.addMessageFilter("tools::Debugger.setPauseOnExceptions",(Z)=>{return Promise.resolve(Z)})}function dJ($,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 g($,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)=>g($,Z,{scriptId:null,exceptionDetails:null})),$.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(Z)=>g($,Z,{names:[]})),$.addMessageFilter("tools::Runtime.terminateExecution",(Z)=>g($,Z,{})),$.addMessageFilter("tools::Runtime.getIsolateId",(Z)=>g($,Z,{id:"inspect-webkit"})),$.addMessageFilter("tools::Runtime.getHeapUsage",(Z)=>g($,Z,{usedSize:0,totalSize:0})),$.addMessageFilter("tools::Runtime.discardConsoleEntries",(Z)=>{return Z.method="Console.clearMessages",Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(Z)=>g($,Z,{})),$.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(Z)=>g($,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 nJ($,Q){$.addMessageFilter("tools::Log.startViolationsReport",(Z)=>g($,Z,{})),$.addMessageFilter("tools::Log.stopViolationsReport",(Z)=>g($,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((G)=>({functionName:G.functionName??"",scriptId:G.scriptId??"",url:G.url??"",lineNumber:Number(G.lineNumber??0),columnNumber:Number(G.columnNumber??0)})),K=X.length?{callFrames:X}:void 0,z=Date.now();if(J.source==="console-api"){let G=J.type==="log"?J.level??"log":J.type??"log",V=iJ(G),W=Array.isArray(J.parameters)&&J.parameters.length>0?J.parameters:[{type:"string",value:String(J.text??"")}],H={type:V,args:W,executionContextId:Q.pageExecCtx.id||1,timestamp:z,stackTrace:K};return Q.lastConsoleApiCalled.value=H,$.fireEventToTools("Runtime.consoleAPICalled",H),Promise.resolve(null)}if(J.source==="javascript"&&J.level==="error")return $.fireEventToTools("Runtime.exceptionThrown",{timestamp:z,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:K,exception:{type:"string",value:String(J.text??"")}}}),Promise.resolve(null);return $.fireEventToTools("Log.entryAdded",{entry:{source:J.source??"other",level:oJ(J.level??J.type??"log"),text:String(J.text??""),timestamp:z,url:J.url,lineNumber:J.line,stackTrace:K,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 iJ($){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 oJ($){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 aJ($){let Q=new Set;$.addMessageFilter("tools::DOM.enable",(Z)=>g($,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((K)=>K.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 rJ($){$.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)=>g($,Q,{})),$.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",(Q)=>g($,Q,{})),$.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",(Q)=>g($,Q,{})),$.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",(Q)=>g($,Q,{}))}function tJ($,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 K=await $.callTarget("Runtime.evaluate",{expression:"window.location.href"}),z=await $.callTarget("Runtime.evaluate",{expression:"document.title"});$.fireResultToTools(X.id,{currentIndex:0,entries:[{id:0,url:K.result?.value??"",userTypedURL:K.result?.value??"",title:z.result?.value??"",transitionType:"link"}]})}catch(K){$.fireErrorToTools(X.id,{message:K?.message??String(K)})}return null}),$.addMessageFilter("target::Page.frameNavigated",(X)=>{return r4(X.params?.frame),Promise.resolve(X)}),$.addMessageFilter("target::Page.getResourceTree",(X)=>{return q$(X.result?.frameTree),Promise.resolve(X)}),$.addMessageFilter("tools::Page.getFrameTree",async(X)=>{if(typeof X.id!=="number")return null;try{let K=await $.callTarget("Page.getResourceTree",{}),z=t4(K?.frameTree);q$(z),$.fireResultToTools(X.id,{frameTree:z})}catch(K){$.fireErrorToTools(X.id,{message:K?.message??String(K)})}return null}),$.addMessageFilter("tools::Page.createIsolatedWorld",(X)=>{if(typeof X.id!=="number")return Promise.resolve(null);return g($,X,{executionContextId:Q.pageExecCtx.id||1})});let Z=1;$.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(X)=>g($,X,{identifier:`pptr-${Z++}`})),$.addMessageFilter("tools::WebMCP.enable",(X)=>g($,X,{})),$.addMessageFilter("tools::WebMCP.disable",(X)=>g($,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)=>g($,X,{})),$.addMessageFilter("tools::Page.stopScreencast",(X)=>g($,X,{})),$.addMessageFilter("tools::Page.screencastFrameAck",(X)=>g($,X,{})),$.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(X)=>g($,X,{}));let J="",Y="0.1";$.addMessageFilter("target::Page.frameNavigated",(X)=>{let K=X.params?.frame;if(K)Y=K.id??Y,J=K.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 r4($){if(!$)return;if(!$.securityOrigin)try{$.securityOrigin=new URL($.url??"").origin}catch{$.securityOrigin="://"}if(!$.mimeType)$.mimeType="text/html"}function q$($){if(!$)return;if(r4($.frame),Array.isArray($.childFrames))$.childFrames.forEach(q$)}function t4($){if(!$)return $;let Q={frame:$.frame};if(Array.isArray($.childFrames))Q.childFrames=$.childFrames.map(t4);return Q}function sJ($){$.addMessageFilter("tools::Overlay.enable",(Q)=>g($,Q,{})),$.addMessageFilter("tools::Overlay.disable",(Q)=>g($,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 eJ($){$.addMessageFilter("tools::Emulation.canEmulate",(Q)=>g($,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)=>g($,Q,{})),$.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",(Q)=>g($,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)=>g($,Q,{})),$.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",(Q)=>g($,Q,{}))}function _$($){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 W3($){if(!$)return $;return{...X3,...$,hasPostData:$.postData!=null}}function G3($){if(!$)return $;let Q=0,Z=$.headers??{},J=Z["Content-Length"]??Z["content-length"];if(J!=null)Q=Number(J)||0;return{...K3,...$,fromDiskCache:$.source==="disk-cache",fromServiceWorker:$.source==="service-worker",encodedDataLength:Q}}function V3($,Q){if(!$)return;for(let[Z,J]of Object.entries(Q))if(Z in $&&!(J in $))$[J]=$[Z],delete $[Z]}function z3($){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 H3($,Q){let Z=new Map,J=1e4,Y=1024,X=4194304,K=Promise.resolve(),z=(V)=>{let W=K.then(V,V);return K=W.catch(()=>{}),W};for(let[V,W]of Object.entries($3))$.addMessageFilter(`tools::${V}`,(H)=>{return H.method=W,Promise.resolve(H)});$.addMessageFilter("tools::Network.setCacheDisabled",(V)=>{if(V.params&&"cacheDisabled"in V.params)V.params={disabled:!!V.params.cacheDisabled};return Promise.resolve(V)});let G=async(V)=>{try{let W=await $.callTarget("Page.getCookies",{}),H=Array.isArray(W?.cookies)?W.cookies.map(z3):[];$.fireResultToTools(V.id,{cookies:H})}catch(W){$.fireErrorToTools(V.id,{message:W?.message??String(W)})}return null};$.addMessageFilter("tools::Network.getCookies",G),$.addMessageFilter("tools::Network.getAllCookies",G),$.addMessageFilter("tools::Network.setCookie",(V)=>{let W=V.params??{};return V.method="Page.setCookie",V.params={cookie:{name:W.name,value:W.value,domain:W.domain??"",path:W.path??"/",expires:W.expires??-1,session:!1,httpOnly:!!W.httpOnly,secure:!!W.secure,sameSite:W.sameSite??"None"}},Promise.resolve(V)}),$.addMessageFilter("tools::Network.setCookies",async(V)=>{let W=Array.isArray(V.params?.cookies)?V.params.cookies:[];try{await Promise.all(W.map((H)=>$.callTarget("Page.setCookie",{cookie:H}))),$.fireResultToTools(V.id,{})}catch(H){$.fireErrorToTools(V.id,{message:H?.message??String(H)})}return null}),$.addMessageFilter("tools::Network.deleteCookies",(V)=>{let W=V.params??{},H=W.url??`https://${(W.domain??"").replace(/^\./,"")}${W.path??"/"}`;return V.method="Page.deleteCookie",V.params={cookieName:W.name,url:H},Promise.resolve(V)}),$.addMessageFilter("tools::Network.deleteCookie",(V)=>{return V.method="Page.deleteCookie",Promise.resolve(V)}),$.addMessageFilter("tools::Network.clearBrowserCookies",async(V)=>{try{let W=await $.callTarget("Page.getCookies",{}),H=Array.isArray(W?.cookies)?W.cookies:[];await Promise.all(H.map((N)=>$.callTarget("Page.deleteCookie",{cookieName:N.name,url:`${N.secure?"https":"http"}://${(N.domain??"").replace(/^\./,"")}${N.path??"/"}`}).catch(()=>{}))),$.fireResultToTools(V.id,{})}catch(W){$.fireErrorToTools(V.id,{message:W?.message??String(W)})}return null}),$.addMessageFilter("tools::Network.canEmulateNetworkConditions",(V)=>g($,V,{result:!1})),$.addMessageFilter("tools::Network.setExtraHTTPHeaders",(V)=>g($,V,{})),$.addMessageFilter("tools::Network.setBlockedURLs",(V)=>g($,V,{})),$.addMessageFilter("tools::Network.emulateNetworkConditions",(V)=>g($,V,{})),$.addMessageFilter("tools::Network.setMonitoringXHREnabled",(V)=>g($,V,{})),$.addMessageFilter("tools::Network.getResponseBody",async(V)=>{let W=V.params?.requestId,H=typeof W==="string"?Z.get(W):void 0;if(!H)return $.fireErrorToTools(V.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;if(H.method&&H.method.toUpperCase()!=="GET")return $.fireErrorToTools(V.id,{message:`Network.getResponseBody: cannot recover ${H.method} response body (bridge re-fetch is GET-only)`}),null;if(H.bytes===0)return $.fireResultToTools(V.id,{body:"",base64Encoded:!1}),null;return z(async()=>{try{let N={};for(let[E,F]of Object.entries(H.headers??{})){let B=E.toLowerCase();if(B==="if-none-match"||B==="if-modified-since"||B==="host"||B==="connection")continue;N[E]=String(F)}let j=new AbortController,O=setTimeout(()=>j.abort(),1e4),T;try{T=await fetch(H.url,{headers:N,redirect:"follow",signal:j.signal})}finally{clearTimeout(O)}let q=Number(T.headers.get("content-length")??"");if(Number.isFinite(q)&&q>4194304){$.fireErrorToTools(V.id,{message:`Network.getResponseBody: response too large (${q} bytes > ${"4194304"}) — skipped re-fetch`});try{await T.arrayBuffer()}catch{}return}let A=Buffer.from(await T.arrayBuffer());if(A.byteLength>4194304){$.fireErrorToTools(V.id,{message:`Network.getResponseBody: response too large (${A.byteLength} bytes > 4194304)`});return}let R=((T.headers.get("content-type")??"").split(";")[0]??"").trim(),_=/^(text\/|image\/svg\+xml|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))$/.test(R),D=_?A.toString("utf8"):A.toString("base64");$.fireResultToTools(V.id,{body:D,base64Encoded:!_})}catch(N){$.fireErrorToTools(V.id,{message:`Network.getResponseBody re-fetch failed: ${N?.message??String(N)}`})}}),null});for(let[V,W]of Object.entries(Q3))$.addMessageFilter(`target::${V}`,(H)=>{return V3(H.params,W),Promise.resolve(H)});$.addMessageFilter("target::Network.requestWillBeSent",(V)=>{let W=V.params;if(W){if(Object.assign(W,{...Z3,...W}),W.request=W3(W.request),W.type=_$(W.type),typeof W.requestId==="string"&&typeof W.request?.url==="string"){if(Z.size>=1024){let H=Z.keys().next().value;if(H!==void 0)Z.delete(H)}Z.set(W.requestId,{url:W.request.url,method:W.request.method,headers:W.request.headers,frameId:W.frameId,bytes:0})}}return Promise.resolve(V)}),$.addMessageFilter("target::Network.responseReceived",(V)=>{let W=V.params;if(W)Object.assign(W,{...J3,...W}),W.response=G3(W.response),W.type=_$(W.type);return Promise.resolve(V)}),$.addMessageFilter("target::Network.loadingFinished",(V)=>{let W=V.params;if(W){let H=W.metrics?.responseBodyBytesReceived;if(typeof H==="number"&&W.encodedDataLength==null)W.encodedDataLength=H;if(Object.assign(W,{...Y3,...W}),typeof W.requestId==="string"&&typeof H==="number"){let N=Z.get(W.requestId);if(N&&H>N.bytes)N.bytes=H}}return Promise.resolve(V)}),$.addMessageFilter("target::Network.dataReceived",(V)=>{let W=V.params;if(W&&typeof W.requestId==="string"){let H=Z.get(W.requestId);if(H){let N=Number(W.dataLength)||0;H.bytes+=N}}return Promise.resolve(V)}),$.addMessageFilter("target::Network.loadingFailed",(V)=>{let W=V.params;if(W){if(W.type=_$(W.type),!("canceled"in W))W.canceled=!1}return Promise.resolve(V)}),$.addMessageFilter("target::Network.requestServedFromMemoryCache",(V)=>{if(V.method="Network.requestServedFromCache",V.params)V.params={requestId:V.params.requestId};return Promise.resolve(V)}),$.addMessageFilter("tools::Network.loadNetworkResource",async(V)=>{let W=V.params??{};if(!Q)return $.fireResultToTools(V.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let H=await $.callTarget("Network.loadResource",{frameId:W.frameId,url:W.url}),N=!!H?.content&&(H?.status??0)>=200&&(H?.status??0)<300,j;if(N)j=`network-resource:${W.frameId??""}:${W.url}`,Q.set(j,String(H.content));$.fireResultToTools(V.id,{resource:{success:N,stream:j,httpStatusCode:H?.status,headers:H?.headers,mimeType:H?.mimeType}})}catch(H){$.fireResultToTools(V.id,{resource:{success:!1,netError:2,netErrorName:H?.message??"ERR_FAILED"}})}return null})}function B3($){for(let Q of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])$.addMessageFilter(`tools::${Q}`,(Z)=>g($,Z,{}))}function N3($){$.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 M3($){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 E$($){if(!$)return $;let Q={origin:$.origin==="author"?"regular":$.origin,style:l0($.style),selectorList:C3($.selectorList)};if($.ruleId?.styleSheetId)Q.styleSheetId=$.ruleId.styleSheetId;if(Array.isArray($.groupings))Q.media=$.groupings.map((Z)=>({text:Z.text,sourceURL:Z.sourceURL,source:j3[Z.type]}));return Q}function R3($){let Q={lastNodeId:0},Z=new Map;async function J(Y,X){let K=Z.get(Y);if(!K)try{if(K=(await $.callTarget("CSS.getStyleSheet",{styleSheetId:Y}))?.styleSheet,K)Z.set(Y,K)}catch{}let z=K?.rules??[];for(let G=0;G<z.length;G++)if(F3(z[G]?.style?.range,X))return{styleSheetId:Y,ordinal:G};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=M3(Y.params.header);return Promise.resolve(Y)}),$.addMessageFilter("target::CSS.getInlineStylesForNode",(Y)=>{let X=Y.result;if(X)Y.result={inlineStyle:l0(X.inlineStyle),attributesStyle:l0(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,K]=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:l0(X?.inlineStyle),attributesStyle:l0(X?.attributesStyle),matchedCSSRules:b$(K?.matchedCSSRules),pseudoElements:L3(K?.pseudoElements),inherited:O3(K?.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??[],K=[];for(let z of X)try{let G=await J(z.styleSheetId,z.range),V=await $.callTarget("CSS.setStyleText",{styleId:G,text:z.text});K.push(l0(V?.style)),Z.delete(z.styleSheetId),$.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:z.styleSheetId})}catch{K.push(null)}return $.fireResultToTools(Y.id,{styles:K}),null}),$.addMessageFilter("tools::CSS.setRuleSelector",async(Y)=>{let{styleSheetId:X,range:K,selector:z}=Y.params??{};try{let G=await J(X,K);Y.params={ruleId:G,selector:z}}catch(G){return $.fireErrorToTools(Y.id,{message:G?.message??String(G)}),null}return Y}),$.addMessageFilter("target::CSS.setRuleSelector",(Y)=>{if(Y.result?.rule)Y.result={rule:E$(Y.result.rule)};return Promise.resolve(Y)}),$.addMessageFilter("tools::CSS.addRule",async(Y)=>{let X=Y.params??{},K=String(X.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let z=await $.callTarget("CSS.addRule",{contextNodeId:Q.lastNodeId,styleSheetId:X.styleSheetId,selector:K});$.fireResultToTools(Y.id,{rule:E$(z?.rule)})}catch(z){$.fireErrorToTools(Y.id,{message:z?.message??String(z)})}return null})}function A3($){$.addMessageFilter("tools::Browser.getVersion",(Q)=>g($,Q,_3)),$.addMessageFilter("tools::Browser.getWindowForTarget",(Q)=>g($,Q,{windowId:1,bounds:{}})),$.addMessageFilter("tools::Browser.setWindowBounds",(Q)=>g($,Q,{}))}function P3($){switch($){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function D3($){let Q=async(Z)=>{let J=Z.params??{},Y=P3(J.type);if(!Y)return $.fireResultToTools(Z.id,{}),null;let X=Y==="click"?["mousedown","click","mouseup"]:[Y];try{for(let K of X){let z={x:Number(J.x)||0,y:Number(J.y)||0,modifiers:Number(J.modifiers)||0,button:J.button??"none",type:K},G=`(${T3}, __sd_simulate(${JSON.stringify(z)}))`;await $.callTarget("Runtime.evaluate",{expression:G})}$.fireResultToTools(Z.id,{})}catch(K){$.fireErrorToTools(Z.id,{message:K?.message??String(K)})}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 E3($){let Q=new Map;return $.addMessageFilter("tools::IO.read",(Z)=>{let J=String(Z.params?.handle??""),Y=Number(Z.params?.size)||q3,X=Number(Z.params?.offset)||0,K=Q.get(J);if(K===void 0)return $.fireResultToTools(Z.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let z=K.slice(X,X+Y),G=X+Y>=K.length;return $.fireResultToTools(Z.id,{data:z,eof:G,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 I3($){$.addMessageFilter("tools::Accessibility.enable",(Q)=>g($,Q,{})),$.addMessageFilter("tools::Accessibility.disable",(Q)=>g($,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??{},K={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:[K]})}catch(Y){$.fireResultToTools(Q.id,{nodes:[]})}return null})}function S3($){for(let[Z,J]of Object.entries(w3))$.addMessageFilter(`tools::${Z}`,(Y)=>g($,Y,J));for(let Z of x3)for(let J of["enable","disable"])$.addMessageFilter(`tools::${Z}.${J}`,(Y)=>g($,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)=>g($,Y,J))}function I$($){let Q=pJ();S3($);let Z=E3($);cJ($,Q),dJ($,Q),nJ($,Q),aJ($),rJ($),tJ($,Q),sJ($),eJ($),H3($,Z),B3($),N3($),R3($),A3($),D3($),I3($)}function e4($){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 G6($){return $.replace(/[&<>"']/g,(Q)=>k3[Q])}function $5($){return s4.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 A$(Z,X)}if(J.pathname==="/json"||J.pathname==="/json/list")return A$(Z,$.listTargets(Y));if(J.pathname==="/json/protocol")return A$(Z,{});if(J.pathname==="/")return y3(Z,$,Y);Z.writeHead(404,{"content-type":"text/plain"}),Z.end("not found")})}function A$($,Q,Z=200){$.writeHead(Z,{"content-type":"application/json; charset=utf-8"}),$.end(JSON.stringify(Q))}function y3($,Q,Z){let J=Q.listTargets(Z),Y=J.map((G)=>`<li><strong>${G6(G.title||G.url||G.id)}</strong><br><small>${G6(G.url)}</small><br><small>copy & paste into Chrome's address bar:</small><br><code style="user-select:all">${G6(G.devtoolsFrontendUrl)}</code></li>`).join(""),X=`inspect-webkit${Q.brand?` (${Q.brand})`:""}`,K=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">${G6(Z)}</code>.</p>`,z=`<!doctype html><meta charset=utf-8><title>${G6(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>${G6(X)} — ${J.length} target${J.length===1?"":"s"}</h1>`+K+`<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(z)}function Q5($,Q,Z){return new Promise((J,Y)=>{$.once("error",(K)=>{if(K.port==null)K.port=Z;if(K.host==null)K.host=Q;Y(K)});let X=Q==="localhost"||Q==="::1"||Q==="127.0.0.1"?"::":Q;$.listen({port:Z,host:X,ipv6Only:!1},()=>{$.off("error",Y),J()})})}function Z5($){let Q=!process.env.NO_COLOR&&process.stderr.isTTY===!0,Z=(G,V)=>Q?`\x1B[${G}m${V}\x1B[0m`:V,J=(G)=>Z("1",G),Y=(G)=>Z("2",G),X=(G)=>Z("36",G),K=(G)=>Z("32",G),z=`http://${$.host}:${$.port}`;console.error(`${K("●")} ${J(`${$.brand} CDP`)} ${X(z)}`),console.error(` ${Y("chrome")} chrome://inspect → ${$.host}:${$.port}`),console.error(` ${Y("vscode")} "type": "chrome", "port": ${$.port}`)}function f3($,Q){let Z=!!process.env.INSPECT_WEBKIT_DEBUG,J=new Map,Y=!1,X=!1,K=!1,z=new Map,G=null;function V(_){if($.readyState!==1)return;let D=JSON.stringify(_);if(Z)console.error(`[browser] tools<< ${D.slice(0,240)}`);$.send(D)}function W(_,D){let E={method:_,params:D};if(G)E.sessionId=G;V(E)}function H(_,D){return{targetId:_.targetId,type:_.type==="page"?"page":_.type||"other",title:_.title||"",url:_.url||"",attached:D,canAccessOpener:!1,browserContextId:"default"}}function N(_){for(let D of J.values())if(D.targetId===_)return!0;return!1}function j(_,D){let E=Q.listEntries().find((C)=>C.targetId===_);if(!E)return null;let F=crypto.randomUUID(),B=(C)=>{let I;try{I=JSON.parse(C)}catch{return}I.sessionId=F,V(I)},U=Q.createPageSession(_,B);if(!U)return null;return J.set(F,{handle:U,targetId:_}),W("Target.attachedToTarget",{sessionId:F,targetInfo:H(E,!0),waitingForDebugger:D}),{sessionId:F,entry:E}}function O(_){let D=J.get(_);if(!D)return!1;try{D.handle.close()}catch{}return J.delete(_),W("Target.detachedFromTarget",{sessionId:_,targetId:D.targetId}),!0}function T(){let _=Q.listEntries(),D=new Set;for(let E of _){D.add(E.targetId);let F=z.get(E.targetId);if(!F){if(z.set(E.targetId,E),Y)W("Target.targetCreated",{targetInfo:H(E,N(E.targetId))});if(X&&!N(E.targetId))j(E.targetId,K)}else if(F.title!==E.title||F.url!==E.url){if(z.set(E.targetId,E),Y)W("Target.targetInfoChanged",{targetInfo:H(E,N(E.targetId))})}}for(let E of[...z.keys()]){if(D.has(E))continue;z.delete(E);for(let[F,B]of J)if(B.targetId===E)O(F);if(Y)W("Target.targetDestroyed",{targetId:E})}}let q=setInterval(T,Q.refreshMs??1000);function A(_,D){if(_)D.sessionId=_;V(D)}function R(_,D){let{id:E,method:F}=_,B=_.params??{};switch(F){case"Browser.getVersion":return A(D,{id:E,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(!G)G=crypto.randomUUID();return A(D,{id:E,result:{sessionId:G}})}case"Target.setDiscoverTargets":{if(Y=!!B.discover,Y)for(let U of Q.listEntries())z.set(U.targetId,U),W("Target.targetCreated",{targetInfo:H(U,N(U.targetId))});if(typeof E==="number")A(D,{id:E,result:{}});return}case"Target.getTargets":{let U=Q.listEntries().map((C)=>H(C,N(C.targetId)));return A(D,{id:E,result:{targetInfos:U}})}case"Target.setAutoAttach":{if(X=!!B.autoAttach,K=!!B.waitForDebuggerOnStart,X){for(let U of Q.listEntries())if(!N(U.targetId))j(U.targetId,K)}if(typeof E==="number")A(D,{id:E,result:{}});return}case"Target.attachToTarget":{for(let[C,I]of J)if(I.targetId===B.targetId){if(typeof E==="number")A(D,{id:E,result:{sessionId:C}});return}let U=j(B.targetId,!1);if(!U){if(typeof E==="number")A(D,{id:E,error:{code:-32000,message:"No target with given id found"}});return}if(typeof E==="number")A(D,{id:E,result:{sessionId:U.sessionId}});return}case"Target.detachFromTarget":{if(O(B.sessionId),typeof E==="number")A(D,{id:E,result:{}});return}case"Target.sendMessageToTarget":{let U=J.get(B.sessionId);if(U)U.handle.onMessageFromTools(B.message);if(typeof E==="number")A(D,{id:E,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof E==="number")A(D,{id:E,result:{}});return;case"Target.getBrowserContexts":{if(typeof E==="number")A(D,{id:E,result:{browserContextIds:["default"]}});return}}if(typeof E==="number")A(D,{id:E,error:{code:-32601,message:`Browser-level method '${F??"?"}' not implemented`}})}$.on("message",(_,D)=>{let E=D?new TextDecoder().decode(_):_.toString();if(Z)console.error(`[browser] tools>> ${E.slice(0,240)}`);let F;try{F=JSON.parse(E)}catch{return}if(typeof F.sessionId==="string"){if(F.sessionId===G){let C={...F};return delete C.sessionId,R(C,F.sessionId)}let B=J.get(F.sessionId);if(!B){if(typeof F.id==="number")V({id:F.id,sessionId:F.sessionId,error:{code:-32000,message:`Session ${F.sessionId} not found`}});return}let U={...F};delete U.sessionId,B.handle.onMessageFromTools(JSON.stringify(U));return}R(F,void 0)}),$.on("close",()=>{clearInterval(q);for(let[,_]of J)try{_.handle.close()}catch{}J.clear()})}async function v3($={}){let Q=$.port??9222,Z=$.host??"localhost",J=await h3();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,K=new Map;for(let F of J)K.set(F,[]),X.set(F,new Set),F.wi.subscribe((B)=>{let{__selector:U,__argument:C}=B;if(!U||!C)return;if(U==="_rpc_reportConnectedApplicationList:"){let I=C.WIRApplicationDictionaryKey??{},x=Object.entries(I).map(([P,M])=>({appId:P,bundleId:M.WIRApplicationBundleIdentifierKey,name:M.WIRApplicationNameKey??M.WIRApplicationBundleIdentifierKey??P,isProxy:Boolean(M.WIRIsApplicationProxyKey)}));K.set(F,x);let y=X.get(F);for(let P of x){if(P.isProxy||y.has(P.appId))continue;y.add(P.appId),F.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:P.appId})}}else if(U==="_rpc_applicationConnected:"){let I=C,x=K.get(F)??[];if(!x.find((y)=>y.appId===I.WIRApplicationIdentifierKey))x.push({appId:I.WIRApplicationIdentifierKey,bundleId:I.WIRApplicationBundleIdentifierKey,name:I.WIRApplicationNameKey??I.WIRApplicationBundleIdentifierKey,isProxy:Boolean(I.WIRIsApplicationProxyKey)}),K.set(F,x);if(!I.WIRIsApplicationProxyKey){let y=X.get(F);if(!y.has(I.WIRApplicationIdentifierKey))y.add(I.WIRApplicationIdentifierKey),F.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:I.WIRApplicationIdentifierKey})}}else if(U==="_rpc_applicationDisconnected:"){let I=K.get(F)??[];K.set(F,I.filter((x)=>x.appId!==C.WIRApplicationIdentifierKey)),Y.delete(`${F.id}:${C.WIRApplicationIdentifierKey}`)}else if(U==="_rpc_applicationSentListing:"){let I=C.WIRApplicationIdentifierKey,x=C.WIRListingKey??{},y=new Map;for(let[P,M]of Object.entries(x))y.set(P,{pageId:Number(M.WIRPageIdentifierKey??0),title:M.WIRTitleKey??"",url:M.WIRURLKey??"",type:M.WIRTypeKey??"",connectionId:typeof M.WIRConnectionIdentifierKey==="string"?M.WIRConnectionIdentifierKey:null});Y.set(`${F.id}:${I}`,y)}}),F.wi.send("_rpc_reportIdentifier:",{}),F.wi.send("_rpc_getConnectedApplications:",{});let z=setInterval(()=>{for(let F of J){let B=K.get(F)??[];for(let U of B){if(U.isProxy)continue;F.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:U.appId})}}},b3),G=new Map;function V(){let F=[];for(let B of J){let U=K.get(B)??[];for(let C of U){if(C.isProxy)continue;let I=Y.get(`${B.id}:${C.appId}`);if(!I)continue;for(let x of I.values()){let y=!!x.connectionId&&x.connectionId!==B.wi.connection;F.push({targetId:`${B.id}:${C.appId}:${x.pageId}`,source:B,appId:C.appId,appName:C.name,bundleId:C.bundleId,pageId:x.pageId,title:x.title,url:x.url,type:x.type,inUseByOtherInspector:y})}}}return F}let W=crypto.randomUUID(),H=$5({brand:"",version:(F)=>({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://${F}/devtools/browser/${W}`}),listTargets:(F)=>V().map((B)=>e4({reqHost:F,id:B.targetId,description:`${B.source.label}${B.bundleId?` (${B.bundleId})`:""}`,title:B.title||B.appName,url:/^https?:/i.test(B.url)?B.url:"about:blank",type:v4(B.type)}))}),N=new a4.default({noServer:!0}),j=`/devtools/browser/${W}`;H.on("upgrade",(F,B,U)=>{let C=new URL(F.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${C.pathname}`),C.pathname===j){N.handleUpgrade(F,B,U,(x)=>{f3(x,{listEntries:()=>V().map((y)=>({targetId:y.targetId,type:v4(y.type),title:y.title||y.appName,url:y.url})),createPageSession:(y,P)=>{let M=V().find((f)=>f.targetId===y);if(!M)return null;return O(M,P)}})});return}if(!C.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${C.pathname}`),B.destroy();return}let I=decodeURIComponent(C.pathname.slice(15));N.handleUpgrade(F,B,U,(x)=>{E(x,I)})});function O(F,B){let U=crypto.randomUUID(),I=new V9({readyState:1,send:(P)=>B(P)},F.source.wi,F.appId,F.pageId,U);I$(I),G.set(U,I);let x=!!process.env.INSPECT_WEBKIT_DEBUG,y=F.source.wi.subscribe((P)=>{if(P.__selector!=="_rpc_applicationSentData:")return;let M=P.__argument;if(!M)return;if(M.WIRDestinationKey&&M.WIRDestinationKey!==U)return;if(M.WIRApplicationIdentifierKey!==F.appId)return;if(M.WIRPageIdentifierKey!==void 0&&Number(M.WIRPageIdentifierKey)!==F.pageId)return;let f=M.WIRMessageDataKey??M.WIRSocketDataKey;if(!f)return;let v=typeof f==="string"?f:new TextDecoder().decode(f);if(x)console.error(`[cdp] target>> ${v.slice(0,240)}`);I.onMessageFromTarget(v)});return F.source.wi.forwardSocketSetup(F.appId,F.pageId,U),console.error(`# devtools attached: ${F.source.label} :: ${F.appName} :: ${F.title||F.url}`),{onMessageFromTools(P){if(x)console.error(`[cdp] tools>> ${P.slice(0,300)}`);I.onMessageFromTools(P)},close(){y();try{I.wi.forwardDidClose(I.appId,I.pageId,I.senderKey)}catch{}G.delete(I.senderKey)}}}let T=new Map,q=8000;function A(F){let B=T.get(F);if(B)return B;let U=V().find((f)=>f.targetId===F);if(!U)return null;let C=crypto.randomUUID(),x=new V9({readyState:1,send:()=>{}},U.source.wi,U.appId,U.pageId,C);I$(x),G.set(C,x);let y=U.source.wi.subscribe((f)=>{if(f.__selector!=="_rpc_applicationSentData:")return;let v=f.__argument;if(!v)return;if(v.WIRDestinationKey&&v.WIRDestinationKey!==C)return;if(v.WIRApplicationIdentifierKey!==U.appId)return;if(v.WIRPageIdentifierKey!==void 0&&Number(v.WIRPageIdentifierKey)!==U.pageId)return;let n=v.WIRMessageDataKey??v.WIRSocketDataKey;if(!n)return;let S=typeof n==="string"?n:new TextDecoder().decode(n);x.onMessageFromTarget(S)});U.source.wi.forwardSocketSetup(U.appId,U.pageId,C);let P=Promise.race([x.callTarget("DOM.getDocument",{depth:0}).then((f)=>f?.root?.nodeId),new Promise((f,v)=>setTimeout(()=>v(Error("DOM.getDocument timeout")),5000))]),M={cdp:x,rootNodeIdPromise:P,idleTimer:null,close(){if(M.idleTimer)clearTimeout(M.idleTimer);y();try{x.wi.forwardDidClose(x.appId,x.pageId,x.senderKey)}catch{}G.delete(C),T.delete(F)}};return T.set(F,M),P.catch(()=>M.close()),M}function R(F){if(F.idleTimer)clearTimeout(F.idleTimer);F.idleTimer=setTimeout(()=>F.close(),q)}function _(F){if(F){T.get(F)?.close();return}for(let B of T.values())B.close()}async function D(F,B){let U=A(F);if(!U)return;R(U);try{if(B){let C=await U.rootNodeIdPromise;if(!C)return;await U.cdp.callTarget("DOM.highlightNode",{nodeId:C,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 U.cdp.callTarget("DOM.hideHighlight",{})}catch{U.close()}}function E(F,B){let U=V().find((y)=>y.targetId===B);if(!U){console.error(`# ws closed: unknown target ${B} (known: ${V().map((y)=>y.targetId).join(", ")||"none"})`),F.close(1011,`unknown target ${B}`);return}let C=O(U,(y)=>{if(F.readyState===1)F.send(y)}),I=!0;F.on("pong",()=>{I=!0});let x=setInterval(()=>{if(!I){try{F.terminate()}catch{}return}I=!1;try{F.ping()}catch{}},15000);F.on("message",(y,P)=>{let M=P?new TextDecoder().decode(y):y.toString();C.onMessageFromTools(M)}),F.on("close",()=>{clearInterval(x),C.close()})}return await Q5(H,Z,Q),Z5({brand:"safari",host:Z,port:Q}),{stop(){clearInterval(z);for(let F of T.values())F.close();N.close(),H.close();for(let F of J)try{F.wi.close(),F.lockdown?.close()}catch{}},getTargets(){return V()},highlightTarget(F,B){return D(F,B)},releaseHighlight(F){_(F)}}}async function h3(){let[$,Q]=await Promise.all([g3(),m3()]);return[...$,...Q]}async function g3(){let $=[];try{$=await p4()}catch(Z){return console.error(`warn: usbmux: ${Z.message}`),[]}return(await Promise.all($.map(u3))).filter((Z)=>Z!==null)}async function u3($){try{let Q=await c4($.Properties.SerialNumber),Z=await N9.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),K=new E6(Y,X);return await K.reportIdentifier(),{kind:"device",id:`device:${$.Properties.SerialNumber}`,label:`device:${$.Properties.SerialNumber.slice(0,8)}`,wi:K,lockdown:Z}}catch(Q){return console.error(`warn: device ${$.Properties.SerialNumber}: ${Q.message}`),null}}async function m3(){let $=[];try{$=await n4()}catch(Z){return console.error(`warn: simulator discovery: ${Z.message}`),[]}return(await Promise.all($.map(l3))).filter((Z)=>Z!==null)}async function l3($){try{let{socket:Q,stream:Z}=await i4($.socketPath),J=new E6(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 v4($){switch($){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class J5{url;ws;handlers=new Set;openPromise;constructor($){this.url=$,this.ws=new b4($),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!==b4.OPEN)return;this.ws.send(new TextDecoder().decode(J))}forwardDidClose($,Q,Z){}close(){try{this.ws.close()}catch{}}}async function p3($){let Q=$.port??9223,Z=$.host??"localhost",{upstreams:J}=$,Y=$5({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(z)=>J.map((G)=>e4({reqHost:z,id:encodeURIComponent(G.url),description:G.label??"bun",title:G.label??G.url,url:G.url,type:"node"}))}),X=new a4.default({noServer:!0});Y.on("upgrade",(z,G,V)=>{let W=new URL(z.url??"/","http://placeholder");if(!W.pathname.startsWith("/devtools/page/")){G.destroy();return}let H=decodeURIComponent(W.pathname.slice(15)),N=J.find((j)=>j.url===H);if(!N){G.destroy();return}X.handleUpgrade(z,G,V,(j)=>{K(j,N).catch((O)=>{console.error(`# bun attach failed: ${O.message}`);try{j.close(1011,O.message)}catch{}})})});async function K(z,G){let V=!!process.env.INSPECT_WEBKIT_DEBUG,W=new J5(G.url);await W.ready();let H=crypto.randomUUID(),N=new V9(z,W,"bun",0,H);I$(N);let j=W.onFrame((O)=>{if(V)console.error(`[bun] target>> ${O.slice(0,240)}`);N.onMessageFromTarget(O)});z.on("message",(O,T)=>{let q=T?new TextDecoder().decode(O):O.toString();if(V)console.error(`[bun] tools>> ${q.slice(0,300)}`);N.onMessageFromTools(q)}),z.on("close",()=>{j(),W.close()}),console.error(`# devtools attached: ${G.label??G.url}`)}return await Q5(Y,Z,Q),Z5({brand:"bun",host:Z,port:Q}),{stop(){X.close(),Y.close()},getTargets(){return J.slice()}}}async function Y5(){return p4()}async function c3(){let[$,Q]=await Promise.all([d3(),n3()]);return[...$.flat(),...Q.flat()]}async function d3(){let $=await Y5();return Promise.all($.map(i3))}async function n3(){let $=await n4();return Promise.all($.map(o3))}async function i3($){let Q=null;try{return Q=await a3($),await X5(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 o3($){let Q=null;try{let{socket:Z,stream:J}=await i4($.socketPath);return Q=new E6(Z,J),await Q.reportIdentifier(),await X5(Q,{source:"simulator",udid:`sim:${$.pid}`})}catch(Z){return console.error(`warn: simulator (${$.socketPath}): ${Z.message}`),[]}finally{Q?.close()}}async function a3($){let Q=await c4($.Properties.SerialNumber),Z=await N9.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),K=new E6(Y,X);return await K.reportIdentifier(),{client:K,lockdown:Z}}async function X5($,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 K=Z[X];for(let z of J[X])Y.push({...Q,appId:K.appId,appName:K.name??K.bundleId??K.appId,bundleId:K.bundleId,pageId:z.pageId,title:z.title,url:z.url,type:z.type})}return Y}var UJ,jJ,w4,CJ,LJ,RJ,_J,S0=($,Q,Z)=>{var J=$!=null&&typeof $==="object";if(J){var Y=Q?RJ??=new WeakMap:_J??=new WeakMap,X=Y.get($);if(X)return X}Z=$!=null?UJ(jJ($)):{};let K=Q||!$||!$.__esModule?w4(Z,"default",{value:$,enumerable:!0}):Z;for(let z of CJ($))if(!LJ.call(K,z))w4(K,z,{get:OJ.bind($,z),enumerable:!0});if(J)Y.set($,K);return K},j0=($,Q)=>()=>(Q||$((Q={exports:{}}).exports,Q),Q.exports),W0,k0,z9,AJ,D6,q6,h4,g4,TJ,x$,w$,PJ,u4,DJ,qJ=`<?xml version="1.0" encoding="UTF-8"?>
|
|
12
|
+
${Q}</dict>`}function k$($){let Q=P$($,"");return new TextEncoder().encode(EJ+Q+IJ)}class m4{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 D$($,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=wJ($.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?q$(Y.name):D$($,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 K=$.nextTag();if(!K)throw Error("unterminated <dict>");J[X]=K.selfClose?q$(K.name):D$($,K.name)}}default:throw Error(`unknown plist tag <${Q}>`)}}function q$($){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 B9($){let Q=typeof $==="string"?$:new TextDecoder().decode($),Z=new m4(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?q$(J.name):D$(Z,J.name)}function m0($,Q,Z){let J=0;for(let Y=0;Y<Z;Y++)J=J*256+$[Q+Y];return J}function SJ($){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=m0($,Z+8,8),K=m0($,Z+16,8),V=m0($,Z+24,8),G=Array(X);for(let B=0;B<X;B++)G[B]=m0($,V+B*J,J);function z(B){return m0($,B,Y)}function W(B){let N=G[B],j=$[N],O=j>>4,T=j&15;function q(A){if(T!==15)return{len:T,next:A};let R=$[A];if((R&240)!==16)throw Error("expected int marker for length");let _=1<<(R&15);return{len:m0($,A+1,_),next:A+1+_}}switch(O){case 0:if(T===0)return null;if(T===8)return!1;if(T===9)return!0;if(T===15)return null;throw Error(`unknown singleton ${T}`);case 1:{let A=1<<T,R=m0($,N+1,A);if(A===8&&R>Number.MAX_SAFE_INTEGER)return BigInt(R);return R}case 2:{let A=1<<T,R=new DataView($.buffer,$.byteOffset+N+1,A);return A===4?R.getFloat32(0,!1):R.getFloat64(0,!1)}case 3:{let R=new DataView($.buffer,$.byteOffset+N+1,8).getFloat64(0,!1);return new Date(Date.UTC(2001,0,1)+R*1000)}case 4:{let{len:A,next:R}=q(N+1);return $.slice(R,R+A)}case 5:{let{len:A,next:R}=q(N+1);return new TextDecoder("ascii").decode($.slice(R,R+A))}case 6:{let{len:A,next:R}=q(N+1),_=$.slice(R,R+A*2),D=new Uint8Array(_.length);for(let E=0;E<_.length;E+=2)D[E]=_[E+1],D[E+1]=_[E];return new TextDecoder("utf-16le").decode(D)}case 10:{let{len:A,next:R}=q(N+1),_=[];for(let D=0;D<A;D++)_.push(W(z(R+D*Y)));return _}case 13:{let{len:A,next:R}=q(N+1),_={};for(let D=0;D<A;D++){let E=W(z(R+D*Y)),F=W(z(R+(A+D)*Y));if(typeof E!=="string")throw Error(`non-string dict key: ${typeof E}`);_[E]=F}return _}default:throw Error(`unknown bplist marker 0x${j.toString(16)} at ${N}`)}}return W(K)}function kJ($){if($.length>=8){if(new TextDecoder().decode($.slice(0,8))==="bplist00")return SJ($)}return B9($)}class H9{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 y$($,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 f$(){let $=new H9;return new Promise((Q,Z)=>{let J=u4.createConnection({path:bJ}),Y=(X)=>{$.close(X),Z(X)};J.once("error",Y),J.once("connect",()=>{J.off("error",Y);let X=y$(J,$);Q({socket:J,stream:$,detach:X})})})}async function vJ($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!0);return(await $.read(Z-4)).slice(12)}function hJ($,Q,Z){let J=16+Z.length,Y=new Uint8Array(16),X=new DataView(Y.buffer);X.setUint32(0,J,!0),X.setUint32(4,yJ,!0),X.setUint32(8,fJ,!0),X.setUint32(12,Q,!0),$.write(Y),$.write(Z)}async function b$($,Q,Z,J){let Y=k$({ClientVersionString:"inspect-webkit-1.0",ProgName:"inspect-webkit",kLibUSBMuxVersion:3,...J});hJ($,Z,Y);let X=await vJ(Q);return B9(X)}async function l4(){let{socket:$,stream:Q}=await f$();try{return(await b$($,Q,1,{MessageType:"ListDevices"})).DeviceList??[]}finally{$.end()}}async function p4($){let{socket:Q,stream:Z}=await f$();try{let Y=(await b$(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 B9(Y)}finally{Q.end()}}async function S4($,Q){let{socket:Z,stream:J,detach:Y}=await f$(),X=(Q&255)<<8|Q>>8&255,K=await b$(Z,J,1,{MessageType:"Connect",DeviceID:$,PortNumber:X});if(K.MessageType!=="Result"||K.Number!==0){Z.end();let V=K.Number??"?";throw Error(`Connect to device ${$} port ${Q} failed (code ${V})`)}return{socket:Z,stream:J,detach:Y}}async function d4(){let $=gJ("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]),K=Y[Y.length-1];if(K)Z.set(K,X)}return Array.from(Z,([J,Y])=>({socketPath:J,pid:Y}))}async function n4($){let Q=new H9;return new Promise((Z,J)=>{let Y=c4.createConnection({path:$}),X=(K)=>{Q.close(K),J(K)};Y.once("error",X),Y.once("connect",()=>{Y.off("error",X),y$(Y,Q),Z({socket:Y,stream:Q})})})}async function O$($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return B9(J)}function R$($,Q){let Z=k$({Label:"inspect-webkit",...Q}),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function _$($,Q){if($.Error)throw Error(`lockdown ${Q} error: ${String($.Error)}`);if($.Request!==Q)throw Error(`lockdown expected Request=${Q}, got ${String($.Request)}`)}function y4($,Q,Z,J){return new Promise((Y,X)=>{Q();let K=new H9,V=i4.connect({socket:$,cert:Buffer.from(Z.HostCertificate),key:Buffer.from(Z.HostPrivateKey),ca:Buffer.from(Z.RootCertificate),rejectUnauthorized:!1}),G=(z)=>{R0(`${J} tls error:`,z),K.close(z),X(z)};V.once("error",G),V.once("secureConnect",()=>{R0(`${J} tls handshake complete`),V.off("error",G);let z=y$(V,K);Y({socket:V,stream:K,detach:z})})})}class N9{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){R0("connecting usbmux tunnel to lockdown port",k4);let{socket:Z,stream:J,detach:Y}=await S4($.DeviceID,k4),X=new N9(Z,J,Q,$.Properties.SerialNumber,$.DeviceID,Y);R0("sending QueryType"),R$(Z,{Request:"QueryType"});let K=await O$(J);if(R0("QueryType reply:",K),_$(K,"QueryType"),K.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(K.Type)}`);return X}async startSession(){R0("StartSession with HostID",this.pair.HostID),R$(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let $=await O$(this.stream);if(R0("StartSession reply:",$),_$($,"StartSession"),$.EnableSessionSSL){R0("upgrading to TLS");let Q=await y4(this.socket,this.detach,this.pair,"lockdown");this.socket=Q.socket,this.stream=Q.stream,this.detach=Q.detach,R0("TLS upgrade complete")}}async startService($){R0("StartService",$),R$(this.socket,{Request:"StartService",Service:$});let Q=await O$(this.stream);return R0("StartService reply:",Q),_$(Q,"StartService"),{port:Q.Port,enableServiceSSL:Boolean(Q.EnableServiceSSL),service:$}}async connectService($){R0("connecting service tunnel to port",$.port,"ssl=",$.enableServiceSSL);let{socket:Q,stream:Z,detach:J}=await S4(this.deviceID,$.port);if(!$.enableServiceSSL)return{socket:Q,stream:Z};let Y=await y4(Q,J,this.pair,"service");return{socket:Y.socket,stream:Y.stream}}close(){this.socket.end()}}async function uJ($){let Q=await $.read(4),Z=new DataView(Q.buffer,Q.byteOffset,4).getUint32(0,!1),J=await $.read(Z);return kJ(J)}function mJ($,Q){let Z=k$(Q),J=new Uint8Array(4);new DataView(J.buffer).setUint32(0,Z.length,!1),$.write(J),$.write(Z)}function lJ(){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 E6{socket;stream;connectionId=lJ();subscribers=new Set;reading;constructor($,Q){this.socket=$,this.stream=Q,this.reading=(async()=>{try{while(!Q.closed){let Z=await uJ(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((K)=>{if(K.__selector===$)clearTimeout(Y),X(),Z(K)})})}send($,Q){mJ(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 K=X;J.push({appId:Y,bundleId:K.WIRApplicationBundleIdentifierKey,name:K.WIRApplicationNameKey,isProxy:Boolean(K.WIRIsApplicationProxyKey),isActive:Boolean(K.WIRIsApplicationActiveKey),hostAppId:K.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 K=X;Y.push({pageId:Number(K.WIRPageIdentifierKey??0),title:K.WIRTitleKey??"",url:K.WIRURLKey??"",type:K.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 V9{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 K=this.toolRequestMap.get(Q.id);if(K){this.toolRequestMap.delete(Q.id);let V=`target::${K}`;if("error"in Q&&this.filters.has("target::error"))V="target::error";let G=this.filters.get(V);if(!G)return this.sendToTools($);let z=Q;for(let W of G){if(!z)break;z=await W(z)}if(z)this.sendToTools(JSON.stringify(z));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 cJ(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function g($,Q,Z){return $.fireResultToTools(Q.id,Z),Promise.resolve(null)}function dJ($,Q){$.addMessageFilter("tools::Debugger.canSetScriptSource",(Z)=>g($,Z,{result:!1})),$.addMessageFilter("tools::Debugger.setBlackboxPatterns",(Z)=>g($,Z,{})),$.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(Z)=>g($,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)=>g($,Z,{})),$.addMessageFilter("tools::Debugger.setSkipAllPauses",(Z)=>g($,Z,{})),$.addMessageFilter("tools::Debugger.setPauseOnExceptions",(Z)=>{return Promise.resolve(Z)})}function nJ($,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 g($,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)=>g($,Z,{scriptId:null,exceptionDetails:null})),$.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(Z)=>g($,Z,{names:[]})),$.addMessageFilter("tools::Runtime.terminateExecution",(Z)=>g($,Z,{})),$.addMessageFilter("tools::Runtime.getIsolateId",(Z)=>g($,Z,{id:"inspect-webkit"})),$.addMessageFilter("tools::Runtime.getHeapUsage",(Z)=>g($,Z,{usedSize:0,totalSize:0})),$.addMessageFilter("tools::Runtime.discardConsoleEntries",(Z)=>{return Z.method="Console.clearMessages",Promise.resolve(Z)}),$.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(Z)=>g($,Z,{})),$.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(Z)=>g($,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 iJ($,Q){$.addMessageFilter("tools::Log.startViolationsReport",(Z)=>g($,Z,{})),$.addMessageFilter("tools::Log.stopViolationsReport",(Z)=>g($,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((G)=>({functionName:G.functionName??"",scriptId:G.scriptId??"",url:G.url??"",lineNumber:Number(G.lineNumber??0),columnNumber:Number(G.columnNumber??0)})),K=X.length?{callFrames:X}:void 0,V=Date.now();if(J.source==="console-api"){let G=J.type==="log"?J.level??"log":J.type??"log",z=oJ(G),W=Array.isArray(J.parameters)&&J.parameters.length>0?J.parameters:[{type:"string",value:String(J.text??"")}],B={type:z,args:W,executionContextId:Q.pageExecCtx.id||1,timestamp:V,stackTrace:K};return Q.lastConsoleApiCalled.value=B,$.fireEventToTools("Runtime.consoleAPICalled",B),Promise.resolve(null)}if(J.source==="javascript"&&J.level==="error")return $.fireEventToTools("Runtime.exceptionThrown",{timestamp:V,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:K,exception:{type:"string",value:String(J.text??"")}}}),Promise.resolve(null);return $.fireEventToTools("Log.entryAdded",{entry:{source:J.source??"other",level:aJ(J.level??J.type??"log"),text:String(J.text??""),timestamp:V,url:J.url,lineNumber:J.line,stackTrace:K,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 oJ($){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 aJ($){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 rJ($){let Q=new Set;$.addMessageFilter("tools::DOM.enable",(Z)=>g($,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((K)=>K.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 tJ($){$.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)=>g($,Q,{})),$.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",(Q)=>g($,Q,{})),$.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",(Q)=>g($,Q,{})),$.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",(Q)=>g($,Q,{}))}function sJ($,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 K=await $.callTarget("Runtime.evaluate",{expression:"window.location.href"}),V=await $.callTarget("Runtime.evaluate",{expression:"document.title"});$.fireResultToTools(X.id,{currentIndex:0,entries:[{id:0,url:K.result?.value??"",userTypedURL:K.result?.value??"",title:V.result?.value??"",transitionType:"link"}]})}catch(K){$.fireErrorToTools(X.id,{message:K?.message??String(K)})}return null}),$.addMessageFilter("target::Page.frameNavigated",(X)=>{return a4(X.params?.frame),Promise.resolve(X)}),$.addMessageFilter("target::Page.getResourceTree",(X)=>{return E$(X.result?.frameTree),Promise.resolve(X)}),$.addMessageFilter("tools::Page.getFrameTree",async(X)=>{if(typeof X.id!=="number")return null;try{let K=await $.callTarget("Page.getResourceTree",{}),V=r4(K?.frameTree);E$(V),$.fireResultToTools(X.id,{frameTree:V})}catch(K){$.fireErrorToTools(X.id,{message:K?.message??String(K)})}return null}),$.addMessageFilter("tools::Page.createIsolatedWorld",(X)=>{if(typeof X.id!=="number")return Promise.resolve(null);return g($,X,{executionContextId:Q.pageExecCtx.id||1})});let Z=1;$.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(X)=>g($,X,{identifier:`pptr-${Z++}`})),$.addMessageFilter("tools::WebMCP.enable",(X)=>g($,X,{})),$.addMessageFilter("tools::WebMCP.disable",(X)=>g($,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)=>g($,X,{})),$.addMessageFilter("tools::Page.stopScreencast",(X)=>g($,X,{})),$.addMessageFilter("tools::Page.screencastFrameAck",(X)=>g($,X,{})),$.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(X)=>g($,X,{}));let J="",Y="0.1";$.addMessageFilter("target::Page.frameNavigated",(X)=>{let K=X.params?.frame;if(K)Y=K.id??Y,J=K.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 a4($){if(!$)return;if(!$.securityOrigin)try{$.securityOrigin=new URL($.url??"").origin}catch{$.securityOrigin="://"}if(!$.mimeType)$.mimeType="text/html"}function E$($){if(!$)return;if(a4($.frame),Array.isArray($.childFrames))$.childFrames.forEach(E$)}function r4($){if(!$)return $;let Q={frame:$.frame};if(Array.isArray($.childFrames))Q.childFrames=$.childFrames.map(r4);return Q}function eJ($){$.addMessageFilter("tools::Overlay.enable",(Q)=>g($,Q,{})),$.addMessageFilter("tools::Overlay.disable",(Q)=>g($,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 $3($){$.addMessageFilter("tools::Emulation.canEmulate",(Q)=>g($,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)=>g($,Q,{})),$.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",(Q)=>g($,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)=>g($,Q,{})),$.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",(Q)=>g($,Q,{}))}function A$($){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 G3($){if(!$)return $;return{...K3,...$,hasPostData:$.postData!=null}}function V3($){if(!$)return $;let Q=0,Z=$.headers??{},J=Z["Content-Length"]??Z["content-length"];if(J!=null)Q=Number(J)||0;return{...W3,...$,fromDiskCache:$.source==="disk-cache",fromServiceWorker:$.source==="service-worker",encodedDataLength:Q}}function z3($,Q){if(!$)return;for(let[Z,J]of Object.entries(Q))if(Z in $&&!(J in $))$[J]=$[Z],delete $[Z]}function B3($){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 H3($,Q){let Z=new Map,J=1e4,Y=1024,X=4194304,K=Promise.resolve(),V=(z)=>{let W=K.then(z,z);return K=W.catch(()=>{}),W};for(let[z,W]of Object.entries(Q3))$.addMessageFilter(`tools::${z}`,(B)=>{return B.method=W,Promise.resolve(B)});$.addMessageFilter("tools::Network.setCacheDisabled",(z)=>{if(z.params&&"cacheDisabled"in z.params)z.params={disabled:!!z.params.cacheDisabled};return Promise.resolve(z)});let G=async(z)=>{try{let W=await $.callTarget("Page.getCookies",{}),B=Array.isArray(W?.cookies)?W.cookies.map(B3):[];$.fireResultToTools(z.id,{cookies:B})}catch(W){$.fireErrorToTools(z.id,{message:W?.message??String(W)})}return null};$.addMessageFilter("tools::Network.getCookies",G),$.addMessageFilter("tools::Network.getAllCookies",G),$.addMessageFilter("tools::Network.setCookie",(z)=>{let W=z.params??{};return z.method="Page.setCookie",z.params={cookie:{name:W.name,value:W.value,domain:W.domain??"",path:W.path??"/",expires:W.expires??-1,session:!1,httpOnly:!!W.httpOnly,secure:!!W.secure,sameSite:W.sameSite??"None"}},Promise.resolve(z)}),$.addMessageFilter("tools::Network.setCookies",async(z)=>{let W=Array.isArray(z.params?.cookies)?z.params.cookies:[];try{await Promise.all(W.map((B)=>$.callTarget("Page.setCookie",{cookie:B}))),$.fireResultToTools(z.id,{})}catch(B){$.fireErrorToTools(z.id,{message:B?.message??String(B)})}return null}),$.addMessageFilter("tools::Network.deleteCookies",(z)=>{let W=z.params??{},B=W.url??`https://${(W.domain??"").replace(/^\./,"")}${W.path??"/"}`;return z.method="Page.deleteCookie",z.params={cookieName:W.name,url:B},Promise.resolve(z)}),$.addMessageFilter("tools::Network.deleteCookie",(z)=>{return z.method="Page.deleteCookie",Promise.resolve(z)}),$.addMessageFilter("tools::Network.clearBrowserCookies",async(z)=>{try{let W=await $.callTarget("Page.getCookies",{}),B=Array.isArray(W?.cookies)?W.cookies:[];await Promise.all(B.map((N)=>$.callTarget("Page.deleteCookie",{cookieName:N.name,url:`${N.secure?"https":"http"}://${(N.domain??"").replace(/^\./,"")}${N.path??"/"}`}).catch(()=>{}))),$.fireResultToTools(z.id,{})}catch(W){$.fireErrorToTools(z.id,{message:W?.message??String(W)})}return null}),$.addMessageFilter("tools::Network.canEmulateNetworkConditions",(z)=>g($,z,{result:!1})),$.addMessageFilter("tools::Network.setExtraHTTPHeaders",(z)=>g($,z,{})),$.addMessageFilter("tools::Network.setBlockedURLs",(z)=>g($,z,{})),$.addMessageFilter("tools::Network.emulateNetworkConditions",(z)=>g($,z,{})),$.addMessageFilter("tools::Network.setMonitoringXHREnabled",(z)=>g($,z,{})),$.addMessageFilter("tools::Network.getResponseBody",async(z)=>{let W=z.params?.requestId,B=typeof W==="string"?Z.get(W):void 0;if(!B)return $.fireErrorToTools(z.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;if(B.method&&B.method.toUpperCase()!=="GET")return $.fireErrorToTools(z.id,{message:`Network.getResponseBody: cannot recover ${B.method} response body (bridge re-fetch is GET-only)`}),null;if(B.bytes===0)return $.fireResultToTools(z.id,{body:"",base64Encoded:!1}),null;return V(async()=>{try{let N={};for(let[E,F]of Object.entries(B.headers??{})){let H=E.toLowerCase();if(H==="if-none-match"||H==="if-modified-since"||H==="host"||H==="connection")continue;N[E]=String(F)}let j=new AbortController,O=setTimeout(()=>j.abort(),1e4),T;try{T=await fetch(B.url,{headers:N,redirect:"follow",signal:j.signal})}finally{clearTimeout(O)}let q=Number(T.headers.get("content-length")??"");if(Number.isFinite(q)&&q>4194304){$.fireErrorToTools(z.id,{message:`Network.getResponseBody: response too large (${q} bytes > ${"4194304"}) — skipped re-fetch`});try{await T.arrayBuffer()}catch{}return}let A=Buffer.from(await T.arrayBuffer());if(A.byteLength>4194304){$.fireErrorToTools(z.id,{message:`Network.getResponseBody: response too large (${A.byteLength} bytes > 4194304)`});return}let R=((T.headers.get("content-type")??"").split(";")[0]??"").trim(),_=/^(text\/|image\/svg\+xml|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))$/.test(R),D=_?A.toString("utf8"):A.toString("base64");$.fireResultToTools(z.id,{body:D,base64Encoded:!_})}catch(N){$.fireErrorToTools(z.id,{message:`Network.getResponseBody re-fetch failed: ${N?.message??String(N)}`})}}),null});for(let[z,W]of Object.entries(Z3))$.addMessageFilter(`target::${z}`,(B)=>{return z3(B.params,W),Promise.resolve(B)});$.addMessageFilter("target::Network.requestWillBeSent",(z)=>{let W=z.params;if(W){if(Object.assign(W,{...J3,...W}),W.request=G3(W.request),W.type=A$(W.type),typeof W.requestId==="string"&&typeof W.request?.url==="string"){if(Z.size>=1024){let B=Z.keys().next().value;if(B!==void 0)Z.delete(B)}Z.set(W.requestId,{url:W.request.url,method:W.request.method,headers:W.request.headers,frameId:W.frameId,bytes:0})}}return Promise.resolve(z)}),$.addMessageFilter("target::Network.responseReceived",(z)=>{let W=z.params;if(W)Object.assign(W,{...Y3,...W}),W.response=V3(W.response),W.type=A$(W.type);return Promise.resolve(z)}),$.addMessageFilter("target::Network.loadingFinished",(z)=>{let W=z.params;if(W){let B=W.metrics?.responseBodyBytesReceived;if(typeof B==="number"&&W.encodedDataLength==null)W.encodedDataLength=B;if(Object.assign(W,{...X3,...W}),typeof W.requestId==="string"&&typeof B==="number"){let N=Z.get(W.requestId);if(N&&B>N.bytes)N.bytes=B}}return Promise.resolve(z)}),$.addMessageFilter("target::Network.dataReceived",(z)=>{let W=z.params;if(W&&typeof W.requestId==="string"){let B=Z.get(W.requestId);if(B){let N=Number(W.dataLength)||0;B.bytes+=N}}return Promise.resolve(z)}),$.addMessageFilter("target::Network.loadingFailed",(z)=>{let W=z.params;if(W){if(W.type=A$(W.type),!("canceled"in W))W.canceled=!1}return Promise.resolve(z)}),$.addMessageFilter("target::Network.requestServedFromMemoryCache",(z)=>{if(z.method="Network.requestServedFromCache",z.params)z.params={requestId:z.params.requestId};return Promise.resolve(z)}),$.addMessageFilter("tools::Network.loadNetworkResource",async(z)=>{let W=z.params??{};if(!Q)return $.fireResultToTools(z.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let B=await $.callTarget("Network.loadResource",{frameId:W.frameId,url:W.url}),N=!!B?.content&&(B?.status??0)>=200&&(B?.status??0)<300,j;if(N)j=`network-resource:${W.frameId??""}:${W.url}`,Q.set(j,String(B.content));$.fireResultToTools(z.id,{resource:{success:N,stream:j,httpStatusCode:B?.status,headers:B?.headers,mimeType:B?.mimeType}})}catch(B){$.fireResultToTools(z.id,{resource:{success:!1,netError:2,netErrorName:B?.message??"ERR_FAILED"}})}return null})}function N3($){for(let Q of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])$.addMessageFilter(`tools::${Q}`,(Z)=>g($,Z,{}))}function F3($){$.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 U3($){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 I$($){if(!$)return $;let Q={origin:$.origin==="author"?"regular":$.origin,style:l0($.style),selectorList:L3($.selectorList)};if($.ruleId?.styleSheetId)Q.styleSheetId=$.ruleId.styleSheetId;if(Array.isArray($.groupings))Q.media=$.groupings.map((Z)=>({text:Z.text,sourceURL:Z.sourceURL,source:C3[Z.type]}));return Q}function _3($){let Q={lastNodeId:0},Z=new Map;async function J(Y,X){let K=Z.get(Y);if(!K)try{if(K=(await $.callTarget("CSS.getStyleSheet",{styleSheetId:Y}))?.styleSheet,K)Z.set(Y,K)}catch{}let V=K?.rules??[];for(let G=0;G<V.length;G++)if(M3(V[G]?.style?.range,X))return{styleSheetId:Y,ordinal:G};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=U3(Y.params.header);return Promise.resolve(Y)}),$.addMessageFilter("target::CSS.getInlineStylesForNode",(Y)=>{let X=Y.result;if(X)Y.result={inlineStyle:l0(X.inlineStyle),attributesStyle:l0(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,K]=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:l0(X?.inlineStyle),attributesStyle:l0(X?.attributesStyle),matchedCSSRules:v$(K?.matchedCSSRules),pseudoElements:O3(K?.pseudoElements),inherited:R3(K?.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??[],K=[];for(let V of X)try{let G=await J(V.styleSheetId,V.range),z=await $.callTarget("CSS.setStyleText",{styleId:G,text:V.text});K.push(l0(z?.style)),Z.delete(V.styleSheetId),$.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:V.styleSheetId})}catch{K.push(null)}return $.fireResultToTools(Y.id,{styles:K}),null}),$.addMessageFilter("tools::CSS.setRuleSelector",async(Y)=>{let{styleSheetId:X,range:K,selector:V}=Y.params??{};try{let G=await J(X,K);Y.params={ruleId:G,selector:V}}catch(G){return $.fireErrorToTools(Y.id,{message:G?.message??String(G)}),null}return Y}),$.addMessageFilter("target::CSS.setRuleSelector",(Y)=>{if(Y.result?.rule)Y.result={rule:I$(Y.result.rule)};return Promise.resolve(Y)}),$.addMessageFilter("tools::CSS.addRule",async(Y)=>{let X=Y.params??{},K=String(X.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let V=await $.callTarget("CSS.addRule",{contextNodeId:Q.lastNodeId,styleSheetId:X.styleSheetId,selector:K});$.fireResultToTools(Y.id,{rule:I$(V?.rule)})}catch(V){$.fireErrorToTools(Y.id,{message:V?.message??String(V)})}return null})}function T3($){$.addMessageFilter("tools::Browser.getVersion",(Q)=>g($,Q,A3)),$.addMessageFilter("tools::Browser.getWindowForTarget",(Q)=>g($,Q,{windowId:1,bounds:{}})),$.addMessageFilter("tools::Browser.setWindowBounds",(Q)=>g($,Q,{}))}function D3($){switch($){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function q3($){let Q=async(Z)=>{let J=Z.params??{},Y=D3(J.type);if(!Y)return $.fireResultToTools(Z.id,{}),null;let X=Y==="click"?["mousedown","click","mouseup"]:[Y];try{for(let K of X){let V={x:Number(J.x)||0,y:Number(J.y)||0,modifiers:Number(J.modifiers)||0,button:J.button??"none",type:K},G=`(${P3}, __sd_simulate(${JSON.stringify(V)}))`;await $.callTarget("Runtime.evaluate",{expression:G})}$.fireResultToTools(Z.id,{})}catch(K){$.fireErrorToTools(Z.id,{message:K?.message??String(K)})}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 I3($){let Q=new Map;return $.addMessageFilter("tools::IO.read",(Z)=>{let J=String(Z.params?.handle??""),Y=Number(Z.params?.size)||E3,X=Number(Z.params?.offset)||0,K=Q.get(J);if(K===void 0)return $.fireResultToTools(Z.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let V=K.slice(X,X+Y),G=X+Y>=K.length;return $.fireResultToTools(Z.id,{data:V,eof:G,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 x3($){$.addMessageFilter("tools::Accessibility.enable",(Q)=>g($,Q,{})),$.addMessageFilter("tools::Accessibility.disable",(Q)=>g($,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??{},K={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:[K]})}catch(Y){$.fireResultToTools(Q.id,{nodes:[]})}return null})}function k3($){for(let[Z,J]of Object.entries(S3))$.addMessageFilter(`tools::${Z}`,(Y)=>g($,Y,J));for(let Z of w3)for(let J of["enable","disable"])$.addMessageFilter(`tools::${Z}.${J}`,(Y)=>g($,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)=>g($,Y,J))}function x$($){let Q=cJ();k3($);let Z=I3($);dJ($,Q),nJ($,Q),iJ($,Q),rJ($),tJ($),sJ($,Q),eJ($),$3($),H3($,Z),N3($),F3($),_3($),T3($),q3($),x3($)}function s4($){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 G6($){return $.replace(/[&<>"']/g,(Q)=>y3[Q])}function e4($){return t4.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 T$(Z,X)}if(J.pathname==="/json"||J.pathname==="/json/list")return T$(Z,$.listTargets(Y));if(J.pathname==="/json/protocol")return T$(Z,{});if(J.pathname==="/")return f3(Z,$,Y);Z.writeHead(404,{"content-type":"text/plain"}),Z.end("not found")})}function T$($,Q,Z=200){$.writeHead(Z,{"content-type":"application/json; charset=utf-8"}),$.end(JSON.stringify(Q))}function f3($,Q,Z){let J=Q.listTargets(Z),Y=J.map((G)=>`<li><strong>${G6(G.title||G.url||G.id)}</strong><br><small>${G6(G.url)}</small><br><small>copy & paste into Chrome's address bar:</small><br><code style="user-select:all">${G6(G.devtoolsFrontendUrl)}</code></li>`).join(""),X=`inspect-webkit${Q.brand?` (${Q.brand})`:""}`,K=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">${G6(Z)}</code>.</p>`,V=`<!doctype html><meta charset=utf-8><title>${G6(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>${G6(X)} — ${J.length} target${J.length===1?"":"s"}</h1>`+K+`<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(V)}function $5($,Q,Z){return new Promise((J,Y)=>{$.once("error",(K)=>{if(K.port==null)K.port=Z;if(K.host==null)K.host=Q;Y(K)});let X=Q==="localhost"||Q==="::1"||Q==="127.0.0.1"?"::":Q;$.listen({port:Z,host:X,ipv6Only:!1},()=>{$.off("error",Y),J()})})}function Q5($){let Q=!process.env.NO_COLOR&&process.stderr.isTTY===!0,Z=(G,z)=>Q?`\x1B[${G}m${z}\x1B[0m`:z,J=(G)=>Z("1",G),Y=(G)=>Z("2",G),X=(G)=>Z("36",G),K=(G)=>Z("32",G),V=`http://${$.host}:${$.port}`;console.error(`${K("●")} ${J(`${$.brand} CDP`)} ${X(V)}`),console.error(` ${Y("chrome")} chrome://inspect → ${$.host}:${$.port}`),console.error(` ${Y("vscode")} "type": "chrome", "port": ${$.port}`)}function b3($,Q){let Z=!!process.env.INSPECT_WEBKIT_DEBUG,J=new Map,Y=!1,X=!1,K=!1,V=new Map,G=null;function z(_){if($.readyState!==1)return;let D=JSON.stringify(_);if(Z)console.error(`[browser] tools<< ${D.slice(0,240)}`);$.send(D)}function W(_,D){let E={method:_,params:D};if(G)E.sessionId=G;z(E)}function B(_,D){return{targetId:_.targetId,type:_.type==="page"?"page":_.type||"other",title:_.title||"",url:_.url||"",attached:D,canAccessOpener:!1,browserContextId:"default"}}function N(_){for(let D of J.values())if(D.targetId===_)return!0;return!1}function j(_,D){let E=Q.listEntries().find((C)=>C.targetId===_);if(!E)return null;let F=crypto.randomUUID(),H=(C)=>{let I;try{I=JSON.parse(C)}catch{return}I.sessionId=F,z(I)},U=Q.createPageSession(_,H);if(!U)return null;return J.set(F,{handle:U,targetId:_}),W("Target.attachedToTarget",{sessionId:F,targetInfo:B(E,!0),waitingForDebugger:D}),{sessionId:F,entry:E}}function O(_){let D=J.get(_);if(!D)return!1;try{D.handle.close()}catch{}return J.delete(_),W("Target.detachedFromTarget",{sessionId:_,targetId:D.targetId}),!0}function T(){let _=Q.listEntries(),D=new Set;for(let E of _){D.add(E.targetId);let F=V.get(E.targetId);if(!F){if(V.set(E.targetId,E),Y)W("Target.targetCreated",{targetInfo:B(E,N(E.targetId))});if(X&&!N(E.targetId))j(E.targetId,K)}else if(F.title!==E.title||F.url!==E.url){if(V.set(E.targetId,E),Y)W("Target.targetInfoChanged",{targetInfo:B(E,N(E.targetId))})}}for(let E of[...V.keys()]){if(D.has(E))continue;V.delete(E);for(let[F,H]of J)if(H.targetId===E)O(F);if(Y)W("Target.targetDestroyed",{targetId:E})}}let q=setInterval(T,Q.refreshMs??1000);function A(_,D){if(_)D.sessionId=_;z(D)}function R(_,D){let{id:E,method:F}=_,H=_.params??{};switch(F){case"Browser.getVersion":return A(D,{id:E,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(!G)G=crypto.randomUUID();return A(D,{id:E,result:{sessionId:G}})}case"Target.setDiscoverTargets":{if(Y=!!H.discover,Y)for(let U of Q.listEntries())V.set(U.targetId,U),W("Target.targetCreated",{targetInfo:B(U,N(U.targetId))});if(typeof E==="number")A(D,{id:E,result:{}});return}case"Target.getTargets":{let U=Q.listEntries().map((C)=>B(C,N(C.targetId)));return A(D,{id:E,result:{targetInfos:U}})}case"Target.setAutoAttach":{if(X=!!H.autoAttach,K=!!H.waitForDebuggerOnStart,X){for(let U of Q.listEntries())if(!N(U.targetId))j(U.targetId,K)}if(typeof E==="number")A(D,{id:E,result:{}});return}case"Target.attachToTarget":{for(let[C,I]of J)if(I.targetId===H.targetId){if(typeof E==="number")A(D,{id:E,result:{sessionId:C}});return}let U=j(H.targetId,!1);if(!U){if(typeof E==="number")A(D,{id:E,error:{code:-32000,message:"No target with given id found"}});return}if(typeof E==="number")A(D,{id:E,result:{sessionId:U.sessionId}});return}case"Target.detachFromTarget":{if(O(H.sessionId),typeof E==="number")A(D,{id:E,result:{}});return}case"Target.sendMessageToTarget":{let U=J.get(H.sessionId);if(U)U.handle.onMessageFromTools(H.message);if(typeof E==="number")A(D,{id:E,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof E==="number")A(D,{id:E,result:{}});return;case"Target.getBrowserContexts":{if(typeof E==="number")A(D,{id:E,result:{browserContextIds:["default"]}});return}}if(typeof E==="number")A(D,{id:E,error:{code:-32601,message:`Browser-level method '${F??"?"}' not implemented`}})}$.on("message",(_,D)=>{let E=D?new TextDecoder().decode(_):_.toString();if(Z)console.error(`[browser] tools>> ${E.slice(0,240)}`);let F;try{F=JSON.parse(E)}catch{return}if(typeof F.sessionId==="string"){if(F.sessionId===G){let C={...F};return delete C.sessionId,R(C,F.sessionId)}let H=J.get(F.sessionId);if(!H){if(typeof F.id==="number")z({id:F.id,sessionId:F.sessionId,error:{code:-32000,message:`Session ${F.sessionId} not found`}});return}let U={...F};delete U.sessionId,H.handle.onMessageFromTools(JSON.stringify(U));return}R(F,void 0)}),$.on("close",()=>{clearInterval(q);for(let[,_]of J)try{_.handle.close()}catch{}J.clear()})}async function h3($={}){let Q=$.port??9222,Z=$.host??"localhost",J=await g3();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,K=new Map;for(let F of J)K.set(F,[]),X.set(F,new Set),F.wi.subscribe((H)=>{let{__selector:U,__argument:C}=H;if(!U||!C)return;if(U==="_rpc_reportConnectedApplicationList:"){let I=C.WIRApplicationDictionaryKey??{},x=Object.entries(I).map(([P,M])=>({appId:P,bundleId:M.WIRApplicationBundleIdentifierKey,name:M.WIRApplicationNameKey??M.WIRApplicationBundleIdentifierKey??P,isProxy:Boolean(M.WIRIsApplicationProxyKey)}));K.set(F,x);let y=X.get(F);for(let P of x){if(P.isProxy||y.has(P.appId))continue;y.add(P.appId),F.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:P.appId})}}else if(U==="_rpc_applicationConnected:"){let I=C,x=K.get(F)??[];if(!x.find((y)=>y.appId===I.WIRApplicationIdentifierKey))x.push({appId:I.WIRApplicationIdentifierKey,bundleId:I.WIRApplicationBundleIdentifierKey,name:I.WIRApplicationNameKey??I.WIRApplicationBundleIdentifierKey,isProxy:Boolean(I.WIRIsApplicationProxyKey)}),K.set(F,x);if(!I.WIRIsApplicationProxyKey){let y=X.get(F);if(!y.has(I.WIRApplicationIdentifierKey))y.add(I.WIRApplicationIdentifierKey),F.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:I.WIRApplicationIdentifierKey})}}else if(U==="_rpc_applicationDisconnected:"){let I=K.get(F)??[];K.set(F,I.filter((x)=>x.appId!==C.WIRApplicationIdentifierKey)),Y.delete(`${F.id}:${C.WIRApplicationIdentifierKey}`)}else if(U==="_rpc_applicationSentListing:"){let I=C.WIRApplicationIdentifierKey,x=C.WIRListingKey??{},y=new Map;for(let[P,M]of Object.entries(x))y.set(P,{pageId:Number(M.WIRPageIdentifierKey??0),title:M.WIRTitleKey??"",url:M.WIRURLKey??"",type:M.WIRTypeKey??"",connectionId:typeof M.WIRConnectionIdentifierKey==="string"?M.WIRConnectionIdentifierKey:null});Y.set(`${F.id}:${I}`,y)}}),F.wi.send("_rpc_reportIdentifier:",{}),F.wi.send("_rpc_getConnectedApplications:",{});let V=setInterval(()=>{for(let F of J){let H=K.get(F)??[];for(let U of H){if(U.isProxy)continue;F.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:U.appId})}}},v3),G=new Map;function z(){let F=[];for(let H of J){let U=K.get(H)??[];for(let C of U){if(C.isProxy)continue;let I=Y.get(`${H.id}:${C.appId}`);if(!I)continue;for(let x of I.values()){let y=!!x.connectionId&&x.connectionId!==H.wi.connection;F.push({targetId:`${H.id}:${C.appId}:${x.pageId}`,source:H,appId:C.appId,appName:C.name,bundleId:C.bundleId,pageId:x.pageId,title:x.title,url:x.url,type:x.type,inUseByOtherInspector:y})}}}return F}let W=crypto.randomUUID(),B=e4({brand:"",version:(F)=>({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://${F}/devtools/browser/${W}`}),listTargets:(F)=>z().map((H)=>s4({reqHost:F,id:H.targetId,description:`${H.source.label}${H.bundleId?` (${H.bundleId})`:""}`,title:H.title||H.appName,url:/^https?:/i.test(H.url)?H.url:"about:blank",type:b4(H.type)}))}),N=new o4.default({noServer:!0}),j=`/devtools/browser/${W}`;B.on("upgrade",(F,H,U)=>{let C=new URL(F.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${C.pathname}`),C.pathname===j){N.handleUpgrade(F,H,U,(x)=>{b3(x,{listEntries:()=>z().map((y)=>({targetId:y.targetId,type:b4(y.type),title:y.title||y.appName,url:y.url})),createPageSession:(y,P)=>{let M=z().find((f)=>f.targetId===y);if(!M)return null;return O(M,P)}})});return}if(!C.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${C.pathname}`),H.destroy();return}let I=decodeURIComponent(C.pathname.slice(15));N.handleUpgrade(F,H,U,(x)=>{E(x,I)})});function O(F,H){let U=crypto.randomUUID(),I=new V9({readyState:1,send:(P)=>H(P)},F.source.wi,F.appId,F.pageId,U);x$(I),G.set(U,I);let x=!!process.env.INSPECT_WEBKIT_DEBUG,y=F.source.wi.subscribe((P)=>{if(P.__selector!=="_rpc_applicationSentData:")return;let M=P.__argument;if(!M)return;if(M.WIRDestinationKey&&M.WIRDestinationKey!==U)return;if(M.WIRApplicationIdentifierKey!==F.appId)return;if(M.WIRPageIdentifierKey!==void 0&&Number(M.WIRPageIdentifierKey)!==F.pageId)return;let f=M.WIRMessageDataKey??M.WIRSocketDataKey;if(!f)return;let v=typeof f==="string"?f:new TextDecoder().decode(f);if(x)console.error(`[cdp] target>> ${v.slice(0,240)}`);I.onMessageFromTarget(v)});return F.source.wi.forwardSocketSetup(F.appId,F.pageId,U),console.error(`# devtools attached: ${F.source.label} :: ${F.appName} :: ${F.title||F.url}`),{onMessageFromTools(P){if(x)console.error(`[cdp] tools>> ${P.slice(0,300)}`);I.onMessageFromTools(P)},close(){y();try{I.wi.forwardDidClose(I.appId,I.pageId,I.senderKey)}catch{}G.delete(I.senderKey)}}}let T=new Map,q=8000;function A(F){let H=T.get(F);if(H)return H;let U=z().find((f)=>f.targetId===F);if(!U)return null;let C=crypto.randomUUID(),x=new V9({readyState:1,send:()=>{}},U.source.wi,U.appId,U.pageId,C);x$(x),G.set(C,x);let y=U.source.wi.subscribe((f)=>{if(f.__selector!=="_rpc_applicationSentData:")return;let v=f.__argument;if(!v)return;if(v.WIRDestinationKey&&v.WIRDestinationKey!==C)return;if(v.WIRApplicationIdentifierKey!==U.appId)return;if(v.WIRPageIdentifierKey!==void 0&&Number(v.WIRPageIdentifierKey)!==U.pageId)return;let n=v.WIRMessageDataKey??v.WIRSocketDataKey;if(!n)return;let S=typeof n==="string"?n:new TextDecoder().decode(n);x.onMessageFromTarget(S)});U.source.wi.forwardSocketSetup(U.appId,U.pageId,C);let P=Promise.race([x.callTarget("DOM.getDocument",{depth:0}).then((f)=>f?.root?.nodeId),new Promise((f,v)=>setTimeout(()=>v(Error("DOM.getDocument timeout")),5000))]),M={cdp:x,rootNodeIdPromise:P,idleTimer:null,close(){if(M.idleTimer)clearTimeout(M.idleTimer);y();try{x.wi.forwardDidClose(x.appId,x.pageId,x.senderKey)}catch{}G.delete(C),T.delete(F)}};return T.set(F,M),P.catch(()=>M.close()),M}function R(F){if(F.idleTimer)clearTimeout(F.idleTimer);F.idleTimer=setTimeout(()=>F.close(),q)}function _(F){if(F){T.get(F)?.close();return}for(let H of T.values())H.close()}async function D(F,H){let U=A(F);if(!U)return;R(U);try{if(H){let C=await U.rootNodeIdPromise;if(!C)return;await U.cdp.callTarget("DOM.highlightNode",{nodeId:C,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 U.cdp.callTarget("DOM.hideHighlight",{})}catch{U.close()}}function E(F,H){let U=z().find((y)=>y.targetId===H);if(!U){console.error(`# ws closed: unknown target ${H} (known: ${z().map((y)=>y.targetId).join(", ")||"none"})`),F.close(1011,`unknown target ${H}`);return}let C=O(U,(y)=>{if(F.readyState===1)F.send(y)}),I=!0;F.on("pong",()=>{I=!0});let x=setInterval(()=>{if(!I){try{F.terminate()}catch{}return}I=!1;try{F.ping()}catch{}},15000);F.on("message",(y,P)=>{let M=P?new TextDecoder().decode(y):y.toString();C.onMessageFromTools(M)}),F.on("close",()=>{clearInterval(x),C.close()})}return await $5(B,Z,Q),Q5({brand:"safari",host:Z,port:Q}),{stop(){clearInterval(V);for(let F of T.values())F.close();N.close(),B.close();for(let F of J)try{F.wi.close(),F.lockdown?.close()}catch{}},getTargets(){return z()},highlightTarget(F,H){return D(F,H)},releaseHighlight(F){_(F)}}}async function g3(){let[$,Q]=await Promise.all([u3(),l3()]);return[...$,...Q]}async function u3(){let $=[];try{$=await l4()}catch(Z){return console.error(`warn: usbmux: ${Z.message}`),[]}return(await Promise.all($.map(m3))).filter((Z)=>Z!==null)}async function m3($){try{let Q=await p4($.Properties.SerialNumber),Z=await N9.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),K=new E6(Y,X);return await K.reportIdentifier(),{kind:"device",id:`device:${$.Properties.SerialNumber}`,label:`device:${$.Properties.SerialNumber.slice(0,8)}`,wi:K,lockdown:Z}}catch(Q){return console.error(`warn: device ${$.Properties.SerialNumber}: ${Q.message}`),null}}async function l3(){let $=[];try{$=await d4()}catch(Z){return console.error(`warn: simulator discovery: ${Z.message}`),[]}return(await Promise.all($.map(p3))).filter((Z)=>Z!==null)}async function p3($){try{let{socket:Q,stream:Z}=await n4($.socketPath),J=new E6(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 b4($){switch($){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class Z5{url;ws;handlers=new Set;openPromise;constructor($){this.url=$,this.ws=new f4($),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!==f4.OPEN)return;this.ws.send(new TextDecoder().decode(J))}forwardDidClose($,Q,Z){}close(){try{this.ws.close()}catch{}}}async function c3($){let Q=$.port??9223,Z=$.host??"localhost",{upstreams:J}=$,Y=e4({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(V)=>J.map((G)=>s4({reqHost:V,id:encodeURIComponent(G.url),description:G.label??"bun",title:G.label??G.url,url:G.url,type:"node"}))}),X=new o4.default({noServer:!0});Y.on("upgrade",(V,G,z)=>{let W=new URL(V.url??"/","http://placeholder");if(!W.pathname.startsWith("/devtools/page/")){G.destroy();return}let B=decodeURIComponent(W.pathname.slice(15)),N=J.find((j)=>j.url===B);if(!N){G.destroy();return}X.handleUpgrade(V,G,z,(j)=>{K(j,N).catch((O)=>{console.error(`# bun attach failed: ${O.message}`);try{j.close(1011,O.message)}catch{}})})});async function K(V,G){let z=!!process.env.INSPECT_WEBKIT_DEBUG,W=new Z5(G.url);await W.ready();let B=crypto.randomUUID(),N=new V9(V,W,"bun",0,B);x$(N);let j=W.onFrame((O)=>{if(z)console.error(`[bun] target>> ${O.slice(0,240)}`);N.onMessageFromTarget(O)});V.on("message",(O,T)=>{let q=T?new TextDecoder().decode(O):O.toString();if(z)console.error(`[bun] tools>> ${q.slice(0,300)}`);N.onMessageFromTools(q)}),V.on("close",()=>{j(),W.close()}),console.error(`# devtools attached: ${G.label??G.url}`)}return await $5(Y,Z,Q),Q5({brand:"bun",host:Z,port:Q}),{stop(){X.close(),Y.close()},getTargets(){return J.slice()}}}async function J5(){return l4()}async function d3(){let[$,Q]=await Promise.all([n3(),i3()]);return[...$.flat(),...Q.flat()]}async function n3(){let $=await J5();return Promise.all($.map(o3))}async function i3(){let $=await d4();return Promise.all($.map(a3))}async function o3($){let Q=null;try{return Q=await r3($),await Y5(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 a3($){let Q=null;try{let{socket:Z,stream:J}=await n4($.socketPath);return Q=new E6(Z,J),await Q.reportIdentifier(),await Y5(Q,{source:"simulator",udid:`sim:${$.pid}`})}catch(Z){return console.error(`warn: simulator (${$.socketPath}): ${Z.message}`),[]}finally{Q?.close()}}async function r3($){let Q=await p4($.Properties.SerialNumber),Z=await N9.open($,Q);await Z.startSession();let J=await Z.startService("com.apple.webinspector"),{socket:Y,stream:X}=await Z.connectService(J),K=new E6(Y,X);return await K.reportIdentifier(),{client:K,lockdown:Z}}async function Y5($,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 K=Z[X];for(let V of J[X])Y.push({...Q,appId:K.appId,appName:K.name??K.bundleId??K.appId,bundleId:K.bundleId,pageId:V.pageId,title:V.title,url:V.url,type:V.type})}return Y}var jJ,CJ,x4,LJ,OJ,_J,AJ,S0=($,Q,Z)=>{var J=$!=null&&typeof $==="object";if(J){var Y=Q?_J??=new WeakMap:AJ??=new WeakMap,X=Y.get($);if(X)return X}Z=$!=null?jJ(CJ($)):{};let K=Q||!$||!$.__esModule?x4(Z,"default",{value:$,enumerable:!0}):Z;for(let V of LJ($))if(!OJ.call(K,V))x4(K,V,{get:RJ.bind($,V),enumerable:!0});if(J)Y.set($,K);return K},j0=($,Q)=>()=>(Q||$((Q={exports:{}}).exports,Q),Q.exports),W0,k0,z9,TJ,D6,q6,v4,h4,PJ,w$,S$,DJ,g4,qJ,EJ=`<?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
|
+
`,IJ=`
|
|
18
18
|
</plist>
|
|
19
|
-
`,
|
|
19
|
+
`,yJ=1,fJ=8,bJ="/var/run/usbmuxd",k4=62078,R0=(...$)=>{if(process.env.INSPECT_WEBKIT_DEBUG)console.error("[lockdown]",...$)},$G,QG,ZG,JG,YG,XG,pJ,o4,f4,Q3,Z3,J3,Y3,X3,K3,W3,M3=($,Q)=>!!$&&!!Q&&$.startLine===Q.startLine&&$.endLine===Q.endLine&&$.startColumn===Q.startColumn&&$.endColumn===Q.endColumn,j3=($)=>$&&{name:$.name,value:$.value,text:$.text,implicit:$.implicit,parsedOk:$.parsedOk!==!1,important:!!$.priority,disabled:$.status==="disabled",range:$.range},l0=($)=>$&&{styleSheetId:$.styleId?.styleSheetId,cssText:$.cssText,range:$.range,shorthandEntries:$.shorthandEntries??[],cssProperties:Array.isArray($.cssProperties)?$.cssProperties.map(j3):[]},C3,L3=($)=>$&&{text:$.text,selectors:Array.isArray($.selectors)?$.selectors.map((Q)=>({text:Q.text,range:Q.range??$.range})):[]},v$=($)=>Array.isArray($)?$.map((Q)=>({matchingSelectors:Q.matchingSelectors,rule:I$(Q.rule)})):[],O3=($)=>Array.isArray($)?$.map((Q)=>({pseudoType:Q.pseudoId,matches:v$(Q.matches)})):[],R3=($)=>Array.isArray($)?$.map((Q)=>({inlineStyle:l0(Q.inlineStyle),matchedCSSRules:v$(Q.matchedCSSRules)})):[],A3,P3=`
|
|
20
20
|
function __sd_simulate(p){
|
|
21
21
|
var el = document.elementFromPoint(p.x, p.y);
|
|
22
22
|
if (!el) return false;
|
|
@@ -31,36 +31,36 @@ function __sd_simulate(p){
|
|
|
31
31
|
});
|
|
32
32
|
el.dispatchEvent(ev);
|
|
33
33
|
return true;
|
|
34
|
-
}`,q3=65536,x3,w3,k3,b3=1500;var W5=u5(()=>{UJ=Object.create,jJ=Object.getPrototypeOf,w4=Object.defineProperty,CJ=Object.getOwnPropertyNames,LJ=Object.prototype.hasOwnProperty;W0=MJ(import.meta.url),k0=j0(($,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:()=>{}}}),z9=j0(($,Q)=>{var{EMPTY_BUFFER:Z}=k0(),J=Buffer[Symbol.species];function Y(V,W){if(V.length===0)return Z;if(V.length===1)return V[0];let H=Buffer.allocUnsafe(W),N=0;for(let j=0;j<V.length;j++){let O=V[j];H.set(O,N),N+=O.length}if(N<W)return new J(H.buffer,H.byteOffset,N);return H}function X(V,W,H,N,j){for(let O=0;O<j;O++)H[N+O]=V[O]^W[O&3]}function K(V,W){for(let H=0;H<V.length;H++)V[H]^=W[H&3]}function z(V){if(V.length===V.buffer.byteLength)return V.buffer;return V.buffer.slice(V.byteOffset,V.byteOffset+V.length)}function G(V){if(G.readOnly=!0,Buffer.isBuffer(V))return V;let W;if(V instanceof ArrayBuffer)W=new J(V);else if(ArrayBuffer.isView(V))W=new J(V.buffer,V.byteOffset,V.byteLength);else W=Buffer.from(V),G.readOnly=!1;return W}if(Q.exports={concat:Y,mask:X,toArrayBuffer:z,toBuffer:G,unmask:K},!process.env.WS_NO_BUFFER_UTIL)try{let V=(()=>{throw Error("Cannot require module bufferutil")})();Q.exports.mask=function(W,H,N,j,O){if(O<48)X(W,H,N,j,O);else V.mask(W,H,N,j,O)},Q.exports.unmask=function(W,H){if(W.length<32)K(W,H);else V.unmask(W,H)}}catch(V){}}),AJ=j0(($,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}),D6=j0(($,Q)=>{var Z=W0("zlib"),J=z9(),Y=AJ(),{kStatusCode:X}=k0(),K=Buffer[Symbol.species],z=Buffer.from([0,0,255,255]),G=Symbol("permessage-deflate"),V=Symbol("total-length"),W=Symbol("callback"),H=Symbol("buffers"),N=Symbol("error"),j;class O{constructor(R){if(this._options=R||{},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,!j){let _=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;j=new Y(_)}}static get extensionName(){return"permessage-deflate"}offer(){let R={};if(this._options.serverNoContextTakeover)R.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)R.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)R.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)R.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)R.client_max_window_bits=!0;return R}accept(R){return R=this.normalizeParams(R),this.params=this._isServer?this.acceptAsServer(R):this.acceptAsClient(R),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let R=this._deflate[W];if(this._deflate.close(),this._deflate=null,R)R(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(R){let _=this._options,D=R.find((E)=>{if(_.serverNoContextTakeover===!1&&E.server_no_context_takeover||E.server_max_window_bits&&(_.serverMaxWindowBits===!1||typeof _.serverMaxWindowBits==="number"&&_.serverMaxWindowBits>E.server_max_window_bits)||typeof _.clientMaxWindowBits==="number"&&!E.client_max_window_bits)return!1;return!0});if(!D)throw Error("None of the extension offers can be accepted");if(_.serverNoContextTakeover)D.server_no_context_takeover=!0;if(_.clientNoContextTakeover)D.client_no_context_takeover=!0;if(typeof _.serverMaxWindowBits==="number")D.server_max_window_bits=_.serverMaxWindowBits;if(typeof _.clientMaxWindowBits==="number")D.client_max_window_bits=_.clientMaxWindowBits;else if(D.client_max_window_bits===!0||_.clientMaxWindowBits===!1)delete D.client_max_window_bits;return D}acceptAsClient(R){let _=R[0];if(this._options.clientNoContextTakeover===!1&&_.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!_.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")_.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&_.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return _}normalizeParams(R){return R.forEach((_)=>{Object.keys(_).forEach((D)=>{let E=_[D];if(E.length>1)throw Error(`Parameter "${D}" must have only a single value`);if(E=E[0],D==="client_max_window_bits"){if(E!==!0){let F=+E;if(!Number.isInteger(F)||F<8||F>15)throw TypeError(`Invalid value for parameter "${D}": ${E}`);E=F}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${D}": ${E}`)}else if(D==="server_max_window_bits"){let F=+E;if(!Number.isInteger(F)||F<8||F>15)throw TypeError(`Invalid value for parameter "${D}": ${E}`);E=F}else if(D==="client_no_context_takeover"||D==="server_no_context_takeover"){if(E!==!0)throw TypeError(`Invalid value for parameter "${D}": ${E}`)}else throw Error(`Unknown parameter "${D}"`);_[D]=E})}),R}decompress(R,_,D){j.add((E)=>{this._decompress(R,_,(F,B)=>{E(),D(F,B)})})}compress(R,_,D){j.add((E)=>{this._compress(R,_,(F,B)=>{E(),D(F,B)})})}_decompress(R,_,D){let E=this._isServer?"client":"server";if(!this._inflate){let F=`${E}_max_window_bits`,B=typeof this.params[F]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[F];this._inflate=Z.createInflateRaw({...this._options.zlibInflateOptions,windowBits:B}),this._inflate[G]=this,this._inflate[V]=0,this._inflate[H]=[],this._inflate.on("error",A),this._inflate.on("data",q)}if(this._inflate[W]=D,this._inflate.write(R),_)this._inflate.write(z);this._inflate.flush(()=>{let F=this._inflate[N];if(F){this._inflate.close(),this._inflate=null,D(F);return}let B=J.concat(this._inflate[H],this._inflate[V]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[V]=0,this._inflate[H]=[],_&&this.params[`${E}_no_context_takeover`])this._inflate.reset();D(null,B)})}_compress(R,_,D){let E=this._isServer?"server":"client";if(!this._deflate){let F=`${E}_max_window_bits`,B=typeof this.params[F]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[F];this._deflate=Z.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:B}),this._deflate[V]=0,this._deflate[H]=[],this._deflate.on("data",T)}this._deflate[W]=D,this._deflate.write(R),this._deflate.flush(Z.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let F=J.concat(this._deflate[H],this._deflate[V]);if(_)F=new K(F.buffer,F.byteOffset,F.length-4);if(this._deflate[W]=null,this._deflate[V]=0,this._deflate[H]=[],_&&this.params[`${E}_no_context_takeover`])this._deflate.reset();D(null,F)})}}Q.exports=O;function T(R){this[H].push(R),this[V]+=R.length}function q(R){if(this[V]+=R.length,this[G]._maxPayload<1||this[V]<=this[G]._maxPayload){this[H].push(R);return}this[N]=RangeError("Max payload size exceeded"),this[N].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[N][X]=1009,this.removeListener("data",q),this.reset()}function A(R){if(this[G]._inflate=null,this[N]){this[W](this[N]);return}R[X]=1007,this[W](R)}}),q6=j0(($,Q)=>{var{isUtf8:Z}=W0("buffer"),{hasBlob:J}=k0(),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(G){return G>=1000&&G<=1014&&G!==1004&&G!==1005&&G!==1006||G>=3000&&G<=4999}function K(G){let V=G.length,W=0;while(W<V)if((G[W]&128)===0)W++;else if((G[W]&224)===192){if(W+1===V||(G[W+1]&192)!==128||(G[W]&254)===192)return!1;W+=2}else if((G[W]&240)===224){if(W+2>=V||(G[W+1]&192)!==128||(G[W+2]&192)!==128||G[W]===224&&(G[W+1]&224)===128||G[W]===237&&(G[W+1]&224)===160)return!1;W+=3}else if((G[W]&248)===240){if(W+3>=V||(G[W+1]&192)!==128||(G[W+2]&192)!==128||(G[W+3]&192)!==128||G[W]===240&&(G[W+1]&240)===128||G[W]===244&&G[W+1]>143||G[W]>244)return!1;W+=4}else return!1;return!0}function z(G){return J&&typeof G==="object"&&typeof G.arrayBuffer==="function"&&typeof G.type==="string"&&typeof G.stream==="function"&&(G[Symbol.toStringTag]==="Blob"||G[Symbol.toStringTag]==="File")}if(Q.exports={isBlob:z,isValidStatusCode:X,isValidUTF8:K,tokenChars:Y},Z)Q.exports.isValidUTF8=function(G){return G.length<24?K(G):Z(G)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let G=(()=>{throw Error("Cannot require module utf-8-validate")})();Q.exports.isValidUTF8=function(V){return V.length<32?K(V):G(V)}}catch(G){}}),h4=j0(($,Q)=>{var{Writable:Z}=W0("stream"),J=D6(),{BINARY_TYPES:Y,EMPTY_BUFFER:X,kStatusCode:K,kWebSocket:z}=k0(),{concat:G,toArrayBuffer:V,unmask:W}=z9(),{isValidStatusCode:H,isValidUTF8:N}=q6(),j=Buffer[Symbol.species],O=0,T=1,q=2,A=3,R=4,_=5,D=6;class E extends Z{constructor(F={}){super();this._allowSynchronousEvents=F.allowSynchronousEvents!==void 0?F.allowSynchronousEvents:!0,this._binaryType=F.binaryType||Y[0],this._extensions=F.extensions||{},this._isServer=!!F.isServer,this._maxPayload=F.maxPayload|0,this._skipUTF8Validation=!!F.skipUTF8Validation,this[z]=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=O}_write(F,B,U){if(this._opcode===8&&this._state==O)return U();this._bufferedBytes+=F.length,this._buffers.push(F),this.startLoop(U)}consume(F){if(this._bufferedBytes-=F,F===this._buffers[0].length)return this._buffers.shift();if(F<this._buffers[0].length){let U=this._buffers[0];return this._buffers[0]=new j(U.buffer,U.byteOffset+F,U.length-F),new j(U.buffer,U.byteOffset,F)}let B=Buffer.allocUnsafe(F);do{let U=this._buffers[0],C=B.length-F;if(F>=U.length)B.set(this._buffers.shift(),C);else B.set(new Uint8Array(U.buffer,U.byteOffset,F),C),this._buffers[0]=new j(U.buffer,U.byteOffset+F,U.length-F);F-=U.length}while(F>0);return B}startLoop(F){this._loop=!0;do switch(this._state){case O:this.getInfo(F);break;case T:this.getPayloadLength16(F);break;case q:this.getPayloadLength64(F);break;case A:this.getMask();break;case R:this.getData(F);break;case _:case D:this._loop=!1;return}while(this._loop);if(!this._errored)F()}getInfo(F){if(this._bufferedBytes<2){this._loop=!1;return}let B=this.consume(2);if((B[0]&48)!==0){let C=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");F(C);return}let U=(B[0]&64)===64;if(U&&!this._extensions[J.extensionName]){let C=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");F(C);return}if(this._fin=(B[0]&128)===128,this._opcode=B[0]&15,this._payloadLength=B[1]&127,this._opcode===0){if(U){let C=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");F(C);return}if(!this._fragmented){let C=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");F(C);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let C=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");F(C);return}this._compressed=U}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let C=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");F(C);return}if(U){let C=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");F(C);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let C=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");F(C);return}}else{let C=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");F(C);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(B[1]&128)===128,this._isServer){if(!this._masked){let C=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");F(C);return}}else if(this._masked){let C=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");F(C);return}if(this._payloadLength===126)this._state=T;else if(this._payloadLength===127)this._state=q;else this.haveLength(F)}getPayloadLength16(F){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(F)}getPayloadLength64(F){if(this._bufferedBytes<8){this._loop=!1;return}let B=this.consume(8),U=B.readUInt32BE(0);if(U>Math.pow(2,21)-1){let C=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");F(C);return}this._payloadLength=U*Math.pow(2,32)+B.readUInt32BE(4),this.haveLength(F)}haveLength(F){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let B=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");F(B);return}}if(this._masked)this._state=A;else this._state=R}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=R}getData(F){let B=X;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(B=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)W(B,this._mask)}if(this._opcode>7){this.controlMessage(B,F);return}if(this._compressed){this._state=_,this.decompress(B,F);return}if(B.length)this._messageLength=this._totalPayloadLength,this._fragments.push(B);this.dataMessage(F)}decompress(F,B){this._extensions[J.extensionName].decompress(F,this._fin,(C,I)=>{if(C)return B(C);if(I.length){if(this._messageLength+=I.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let x=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");B(x);return}this._fragments.push(I)}if(this.dataMessage(B),this._state===O)this.startLoop(B)})}dataMessage(F){if(!this._fin){this._state=O;return}let B=this._messageLength,U=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let C;if(this._binaryType==="nodebuffer")C=G(U,B);else if(this._binaryType==="arraybuffer")C=V(G(U,B));else if(this._binaryType==="blob")C=new Blob(U);else C=U;if(this._allowSynchronousEvents)this.emit("message",C,!0),this._state=O;else this._state=D,setImmediate(()=>{this.emit("message",C,!0),this._state=O,this.startLoop(F)})}else{let C=G(U,B);if(!this._skipUTF8Validation&&!N(C)){let I=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");F(I);return}if(this._state===_||this._allowSynchronousEvents)this.emit("message",C,!1),this._state=O;else this._state=D,setImmediate(()=>{this.emit("message",C,!1),this._state=O,this.startLoop(F)})}}controlMessage(F,B){if(this._opcode===8){if(F.length===0)this._loop=!1,this.emit("conclude",1005,X),this.end();else{let U=F.readUInt16BE(0);if(!H(U)){let I=this.createError(RangeError,`invalid status code ${U}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");B(I);return}let C=new j(F.buffer,F.byteOffset+2,F.length-2);if(!this._skipUTF8Validation&&!N(C)){let I=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");B(I);return}this._loop=!1,this.emit("conclude",U,C),this.end()}this._state=O;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",F),this._state=O;else this._state=D,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",F),this._state=O,this.startLoop(B)})}createError(F,B,U,C,I){this._loop=!1,this._errored=!0;let x=new F(U?`Invalid WebSocket frame: ${B}`:B);return Error.captureStackTrace(x,this.createError),x.code=I,x[K]=C,x}}Q.exports=E}),g4=j0(($,Q)=>{var{Duplex:Z}=W0("stream"),{randomFillSync:J}=W0("crypto"),Y=D6(),{EMPTY_BUFFER:X,kWebSocket:K,NOOP:z}=k0(),{isBlob:G,isValidStatusCode:V}=q6(),{mask:W,toBuffer:H}=z9(),N=Symbol("kByteLength"),j=Buffer.alloc(4),O=8192,T,q=O,A=0,R=1,_=2;class D{constructor(B,U,C){if(this._extensions=U||{},C)this._generateMask=C,this._maskBuffer=Buffer.alloc(4);this._socket=B,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=A,this.onerror=z,this[K]=void 0}static frame(B,U){let C,I=!1,x=2,y=!1;if(U.mask){if(C=U.maskBuffer||j,U.generateMask)U.generateMask(C);else{if(q===O){if(T===void 0)T=Buffer.alloc(O);J(T,0,O),q=0}C[0]=T[q++],C[1]=T[q++],C[2]=T[q++],C[3]=T[q++]}y=(C[0]|C[1]|C[2]|C[3])===0,x=6}let P;if(typeof B==="string")if((!U.mask||y)&&U[N]!==void 0)P=U[N];else B=Buffer.from(B),P=B.length;else P=B.length,I=U.mask&&U.readOnly&&!y;let M=P;if(P>=65536)x+=8,M=127;else if(P>125)x+=2,M=126;let f=Buffer.allocUnsafe(I?P+x:x);if(f[0]=U.fin?U.opcode|128:U.opcode,U.rsv1)f[0]|=64;if(f[1]=M,M===126)f.writeUInt16BE(P,2);else if(M===127)f[2]=f[3]=0,f.writeUIntBE(P,4,6);if(!U.mask)return[f,B];if(f[1]|=128,f[x-4]=C[0],f[x-3]=C[1],f[x-2]=C[2],f[x-1]=C[3],y)return[f,B];if(I)return W(B,C,f,x,P),[f];return W(B,C,B,0,P),[f,B]}close(B,U,C,I){let x;if(B===void 0)x=X;else if(typeof B!=="number"||!V(B))throw TypeError("First argument must be a valid error code number");else if(U===void 0||!U.length)x=Buffer.allocUnsafe(2),x.writeUInt16BE(B,0);else{let P=Buffer.byteLength(U);if(P>123)throw RangeError("The message must not be greater than 123 bytes");if(x=Buffer.allocUnsafe(2+P),x.writeUInt16BE(B,0),typeof U==="string")x.write(U,2);else x.set(U,2)}let y={[N]:x.length,fin:!0,generateMask:this._generateMask,mask:C,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==A)this.enqueue([this.dispatch,x,!1,y,I]);else this.sendFrame(D.frame(x,y),I)}ping(B,U,C){let I,x;if(typeof B==="string")I=Buffer.byteLength(B),x=!1;else if(G(B))I=B.size,x=!1;else B=H(B),I=B.length,x=H.readOnly;if(I>125)throw RangeError("The data size must not be greater than 125 bytes");let y={[N]:I,fin:!0,generateMask:this._generateMask,mask:U,maskBuffer:this._maskBuffer,opcode:9,readOnly:x,rsv1:!1};if(G(B))if(this._state!==A)this.enqueue([this.getBlobData,B,!1,y,C]);else this.getBlobData(B,!1,y,C);else if(this._state!==A)this.enqueue([this.dispatch,B,!1,y,C]);else this.sendFrame(D.frame(B,y),C)}pong(B,U,C){let I,x;if(typeof B==="string")I=Buffer.byteLength(B),x=!1;else if(G(B))I=B.size,x=!1;else B=H(B),I=B.length,x=H.readOnly;if(I>125)throw RangeError("The data size must not be greater than 125 bytes");let y={[N]:I,fin:!0,generateMask:this._generateMask,mask:U,maskBuffer:this._maskBuffer,opcode:10,readOnly:x,rsv1:!1};if(G(B))if(this._state!==A)this.enqueue([this.getBlobData,B,!1,y,C]);else this.getBlobData(B,!1,y,C);else if(this._state!==A)this.enqueue([this.dispatch,B,!1,y,C]);else this.sendFrame(D.frame(B,y),C)}send(B,U,C){let I=this._extensions[Y.extensionName],x=U.binary?2:1,y=U.compress,P,M;if(typeof B==="string")P=Buffer.byteLength(B),M=!1;else if(G(B))P=B.size,M=!1;else B=H(B),P=B.length,M=H.readOnly;if(this._firstFragment){if(this._firstFragment=!1,y&&I&&I.params[I._isServer?"server_no_context_takeover":"client_no_context_takeover"])y=P>=I._threshold;this._compress=y}else y=!1,x=0;if(U.fin)this._firstFragment=!0;let f={[N]:P,fin:U.fin,generateMask:this._generateMask,mask:U.mask,maskBuffer:this._maskBuffer,opcode:x,readOnly:M,rsv1:y};if(G(B))if(this._state!==A)this.enqueue([this.getBlobData,B,this._compress,f,C]);else this.getBlobData(B,this._compress,f,C);else if(this._state!==A)this.enqueue([this.dispatch,B,this._compress,f,C]);else this.dispatch(B,this._compress,f,C)}getBlobData(B,U,C,I){this._bufferedBytes+=C[N],this._state=_,B.arrayBuffer().then((x)=>{if(this._socket.destroyed){let P=Error("The socket was closed while the blob was being read");process.nextTick(E,this,P,I);return}this._bufferedBytes-=C[N];let y=H(x);if(!U)this._state=A,this.sendFrame(D.frame(y,C),I),this.dequeue();else this.dispatch(y,U,C,I)}).catch((x)=>{process.nextTick(F,this,x,I)})}dispatch(B,U,C,I){if(!U){this.sendFrame(D.frame(B,C),I);return}let x=this._extensions[Y.extensionName];this._bufferedBytes+=C[N],this._state=R,x.compress(B,C.fin,(y,P)=>{if(this._socket.destroyed){let M=Error("The socket was closed while data was being compressed");E(this,M,I);return}this._bufferedBytes-=C[N],this._state=A,C.readOnly=!1,this.sendFrame(D.frame(P,C),I),this.dequeue()})}dequeue(){while(this._state===A&&this._queue.length){let B=this._queue.shift();this._bufferedBytes-=B[3][N],Reflect.apply(B[0],this,B.slice(1))}}enqueue(B){this._bufferedBytes+=B[3][N],this._queue.push(B)}sendFrame(B,U){if(B.length===2)this._socket.cork(),this._socket.write(B[0]),this._socket.write(B[1],U),this._socket.uncork();else this._socket.write(B[0],U)}}Q.exports=D;function E(B,U,C){if(typeof C==="function")C(U);for(let I=0;I<B._queue.length;I++){let x=B._queue[I],y=x[x.length-1];if(typeof y==="function")y(U)}}function F(B,U,C){E(B,U,C),B.onerror(U)}}),TJ=j0(($,Q)=>{var{kForOnEventAttribute:Z,kListener:J}=k0(),Y=Symbol("kCode"),X=Symbol("kData"),K=Symbol("kError"),z=Symbol("kMessage"),G=Symbol("kReason"),V=Symbol("kTarget"),W=Symbol("kType"),H=Symbol("kWasClean");class N{constructor(R){this[V]=null,this[W]=R}get target(){return this[V]}get type(){return this[W]}}Object.defineProperty(N.prototype,"target",{enumerable:!0}),Object.defineProperty(N.prototype,"type",{enumerable:!0});class j extends N{constructor(R,_={}){super(R);this[Y]=_.code===void 0?0:_.code,this[G]=_.reason===void 0?"":_.reason,this[H]=_.wasClean===void 0?!1:_.wasClean}get code(){return this[Y]}get reason(){return this[G]}get wasClean(){return this[H]}}Object.defineProperty(j.prototype,"code",{enumerable:!0}),Object.defineProperty(j.prototype,"reason",{enumerable:!0}),Object.defineProperty(j.prototype,"wasClean",{enumerable:!0});class O extends N{constructor(R,_={}){super(R);this[K]=_.error===void 0?null:_.error,this[z]=_.message===void 0?"":_.message}get error(){return this[K]}get message(){return this[z]}}Object.defineProperty(O.prototype,"error",{enumerable:!0}),Object.defineProperty(O.prototype,"message",{enumerable:!0});class T extends N{constructor(R,_={}){super(R);this[X]=_.data===void 0?null:_.data}get data(){return this[X]}}Object.defineProperty(T.prototype,"data",{enumerable:!0});var q={addEventListener(R,_,D={}){for(let F of this.listeners(R))if(!D[Z]&&F[J]===_&&!F[Z])return;let E;if(R==="message")E=function(B,U){let C=new T("message",{data:U?B:B.toString()});C[V]=this,A(_,this,C)};else if(R==="close")E=function(B,U){let C=new j("close",{code:B,reason:U.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});C[V]=this,A(_,this,C)};else if(R==="error")E=function(B){let U=new O("error",{error:B,message:B.message});U[V]=this,A(_,this,U)};else if(R==="open")E=function(){let B=new N("open");B[V]=this,A(_,this,B)};else return;if(E[Z]=!!D[Z],E[J]=_,D.once)this.once(R,E);else this.on(R,E)},removeEventListener(R,_){for(let D of this.listeners(R))if(D[J]===_&&!D[Z]){this.removeListener(R,D);break}}};Q.exports={CloseEvent:j,ErrorEvent:O,Event:N,EventTarget:q,MessageEvent:T};function A(R,_,D){if(typeof R==="object"&&R.handleEvent)R.handleEvent.call(R,D);else R.call(_,D)}}),x$=j0(($,Q)=>{var{tokenChars:Z}=q6();function J(K,z,G){if(K[z]===void 0)K[z]=[G];else K[z].push(G)}function Y(K){let z=Object.create(null),G=Object.create(null),V=!1,W=!1,H=!1,N,j,O=-1,T=-1,q=-1,A=0;for(;A<K.length;A++)if(T=K.charCodeAt(A),N===void 0)if(q===-1&&Z[T]===1){if(O===-1)O=A}else if(A!==0&&(T===32||T===9)){if(q===-1&&O!==-1)q=A}else if(T===59||T===44){if(O===-1)throw SyntaxError(`Unexpected character at index ${A}`);if(q===-1)q=A;let _=K.slice(O,q);if(T===44)J(z,_,G),G=Object.create(null);else N=_;O=q=-1}else throw SyntaxError(`Unexpected character at index ${A}`);else if(j===void 0)if(q===-1&&Z[T]===1){if(O===-1)O=A}else if(T===32||T===9){if(q===-1&&O!==-1)q=A}else if(T===59||T===44){if(O===-1)throw SyntaxError(`Unexpected character at index ${A}`);if(q===-1)q=A;if(J(G,K.slice(O,q),!0),T===44)J(z,N,G),G=Object.create(null),N=void 0;O=q=-1}else if(T===61&&O!==-1&&q===-1)j=K.slice(O,A),O=q=-1;else throw SyntaxError(`Unexpected character at index ${A}`);else if(W){if(Z[T]!==1)throw SyntaxError(`Unexpected character at index ${A}`);if(O===-1)O=A;else if(!V)V=!0;W=!1}else if(H)if(Z[T]===1){if(O===-1)O=A}else if(T===34&&O!==-1)H=!1,q=A;else if(T===92)W=!0;else throw SyntaxError(`Unexpected character at index ${A}`);else if(T===34&&K.charCodeAt(A-1)===61)H=!0;else if(q===-1&&Z[T]===1){if(O===-1)O=A}else if(O!==-1&&(T===32||T===9)){if(q===-1)q=A}else if(T===59||T===44){if(O===-1)throw SyntaxError(`Unexpected character at index ${A}`);if(q===-1)q=A;let _=K.slice(O,q);if(V)_=_.replace(/\\/g,""),V=!1;if(J(G,j,_),T===44)J(z,N,G),G=Object.create(null),N=void 0;j=void 0,O=q=-1}else throw SyntaxError(`Unexpected character at index ${A}`);if(O===-1||H||T===32||T===9)throw SyntaxError("Unexpected end of input");if(q===-1)q=A;let R=K.slice(O,q);if(N===void 0)J(z,R,G);else{if(j===void 0)J(G,R,!0);else if(V)J(G,j,R.replace(/\\/g,""));else J(G,j,R);J(z,N,G)}return z}function X(K){return Object.keys(K).map((z)=>{let G=K[z];if(!Array.isArray(G))G=[G];return G.map((V)=>{return[z].concat(Object.keys(V).map((W)=>{let H=V[W];if(!Array.isArray(H))H=[H];return H.map((N)=>N===!0?W:`${W}=${N}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}Q.exports={format:X,parse:Y}}),w$=j0(($,Q)=>{var Z=W0("events"),J=W0("https"),Y=W0("http"),X=W0("net"),K=W0("tls"),{randomBytes:z,createHash:G}=W0("crypto"),{Duplex:V,Readable:W}=W0("stream"),{URL:H}=W0("url"),N=D6(),j=h4(),O=g4(),{isBlob:T}=q6(),{BINARY_TYPES:q,CLOSE_TIMEOUT:A,EMPTY_BUFFER:R,GUID:_,kForOnEventAttribute:D,kListener:E,kStatusCode:F,kWebSocket:B,NOOP:U}=k0(),{EventTarget:{addEventListener:C,removeEventListener:I}}=TJ(),{format:x,parse:y}=x$(),{toBuffer:P}=z9(),M=Symbol("kAborted"),f=[8,13],v=["CONNECTING","OPEN","CLOSING","CLOSED"],n=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class S extends Z{constructor(L,w,m){super();if(this._binaryType=q[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=R,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=S.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,L!==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)m=w,w=[];else w=[w];s(this,L,w,m)}else this._autoPong=m.autoPong,this._closeTimeout=m.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(L){if(!q.includes(L))return;if(this._binaryType=L,this._receiver)this._receiver._binaryType=L}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(L,w,m){let i=new j({allowSynchronousEvents:m.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:m.maxPayload,skipUTF8Validation:m.skipUTF8Validation}),h=new O(L,this._extensions,m.generateMask);if(this._receiver=i,this._sender=h,this._socket=L,i[B]=this,h[B]=this,L[B]=this,i.on("conclude",u),i.on("drain",k),i.on("error",b),i.on("message",c),i.on("ping",$0),i.on("pong",Q0),h.onerror=d,L.setTimeout)L.setTimeout(0);if(L.setNoDelay)L.setNoDelay();if(w.length>0)L.unshift(w);L.on("close",F0),L.on("data",C0),L.on("end",p),L.on("error",H0),this._readyState=S.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=S.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[N.extensionName])this._extensions[N.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=S.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(L,w){if(this.readyState===S.CLOSED)return;if(this.readyState===S.CONNECTING){r(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===S.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=S.CLOSING,this._sender.close(L,w,!this._isServer,(m)=>{if(m)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),X0(this)}pause(){if(this.readyState===S.CONNECTING||this.readyState===S.CLOSED)return;this._paused=!0,this._socket.pause()}ping(L,w,m){if(this.readyState===S.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof L==="function")m=L,L=w=void 0;else if(typeof w==="function")m=w,w=void 0;if(typeof L==="number")L=L.toString();if(this.readyState!==S.OPEN){f0(this,L,m);return}if(w===void 0)w=!this._isServer;this._sender.ping(L||R,w,m)}pong(L,w,m){if(this.readyState===S.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof L==="function")m=L,L=w=void 0;else if(typeof w==="function")m=w,w=void 0;if(typeof L==="number")L=L.toString();if(this.readyState!==S.OPEN){f0(this,L,m);return}if(w===void 0)w=!this._isServer;this._sender.pong(L||R,w,m)}resume(){if(this.readyState===S.CONNECTING||this.readyState===S.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(L,w,m){if(this.readyState===S.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof w==="function")m=w,w={};if(typeof L==="number")L=L.toString();if(this.readyState!==S.OPEN){f0(this,L,m);return}let i={binary:typeof L!=="string",mask:!this._isServer,compress:!0,fin:!0,...w};if(!this._extensions[N.extensionName])i.compress=!1;this._sender.send(L||R,i,m)}terminate(){if(this.readyState===S.CLOSED)return;if(this.readyState===S.CONNECTING){r(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=S.CLOSING,this._socket.destroy()}}Object.defineProperty(S,"CONNECTING",{enumerable:!0,value:v.indexOf("CONNECTING")}),Object.defineProperty(S.prototype,"CONNECTING",{enumerable:!0,value:v.indexOf("CONNECTING")}),Object.defineProperty(S,"OPEN",{enumerable:!0,value:v.indexOf("OPEN")}),Object.defineProperty(S.prototype,"OPEN",{enumerable:!0,value:v.indexOf("OPEN")}),Object.defineProperty(S,"CLOSING",{enumerable:!0,value:v.indexOf("CLOSING")}),Object.defineProperty(S.prototype,"CLOSING",{enumerable:!0,value:v.indexOf("CLOSING")}),Object.defineProperty(S,"CLOSED",{enumerable:!0,value:v.indexOf("CLOSED")}),Object.defineProperty(S.prototype,"CLOSED",{enumerable:!0,value:v.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((L)=>{Object.defineProperty(S.prototype,L,{enumerable:!0})}),["open","error","close","message"].forEach((L)=>{Object.defineProperty(S.prototype,`on${L}`,{enumerable:!0,get(){for(let w of this.listeners(L))if(w[D])return w[E];return null},set(w){for(let m of this.listeners(L))if(m[D]){this.removeListener(L,m);break}if(typeof w!=="function")return;this.addEventListener(L,w,{[D]:!0})}})}),S.prototype.addEventListener=C,S.prototype.removeEventListener=I,Q.exports=S;function s(L,w,m,i){let h={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:A,protocolVersion:f[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...i,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(L._autoPong=h.autoPong,L._closeTimeout=h.closeTimeout,!f.includes(h.protocolVersion))throw RangeError(`Unsupported protocol version: ${h.protocolVersion} (supported versions: ${f.join(", ")})`);let e;if(w instanceof H)e=w;else try{e=new H(w)}catch{throw SyntaxError(`Invalid URL: ${w}`)}if(e.protocol==="http:")e.protocol="ws:";else if(e.protocol==="https:")e.protocol="wss:";L._url=e.href;let i0=e.protocol==="wss:",o0=e.protocol==="ws+unix:",V6;if(e.protocol!=="ws:"&&!i0&&!o0)V6=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(o0&&!e.pathname)V6="The URL's pathname is empty";else if(e.hash)V6="The URL contains a fragment identifier";if(V6){let o=SyntaxError(V6);if(L._redirects===0)throw o;else{Y0(L,o);return}}let c$=i0?443:80,d$=z(16).toString("base64"),n$=i0?J.request:Y.request,z6=new Set,H6;if(h.createConnection=h.createConnection||(i0?V0:Z0),h.defaultPort=h.defaultPort||c$,h.port=e.port||c$,h.host=e.hostname.startsWith("[")?e.hostname.slice(1,-1):e.hostname,h.headers={...h.headers,"Sec-WebSocket-Version":h.protocolVersion,"Sec-WebSocket-Key":d$,Connection:"Upgrade",Upgrade:"websocket"},h.path=e.pathname+e.search,h.timeout=h.handshakeTimeout,h.perMessageDeflate)H6=new N({...h.perMessageDeflate,isServer:!1,maxPayload:h.maxPayload}),h.headers["Sec-WebSocket-Extensions"]=x({[N.extensionName]:H6.offer()});if(m.length){for(let o of m){if(typeof o!=="string"||!n.test(o)||z6.has(o))throw SyntaxError("An invalid or duplicated subprotocol was specified");z6.add(o)}h.headers["Sec-WebSocket-Protocol"]=m.join(",")}if(h.origin)if(h.protocolVersion<13)h.headers["Sec-WebSocket-Origin"]=h.origin;else h.headers.Origin=h.origin;if(e.username||e.password)h.auth=`${e.username}:${e.password}`;if(o0){let o=h.path.split(":");h.socketPath=o[0],h.path=o[1]}let K0;if(h.followRedirects){if(L._redirects===0){L._originalIpc=o0,L._originalSecure=i0,L._originalHostOrSocketPath=o0?h.socketPath:e.host;let o=i&&i.headers;if(i={...i,headers:{}},o)for(let[M0,a0]of Object.entries(o))i.headers[M0.toLowerCase()]=a0}else if(L.listenerCount("redirect")===0){let o=o0?L._originalIpc?h.socketPath===L._originalHostOrSocketPath:!1:L._originalIpc?!1:e.host===L._originalHostOrSocketPath;if(!o||L._originalSecure&&!i0){if(delete h.headers.authorization,delete h.headers.cookie,!o)delete h.headers.host;h.auth=void 0}}if(h.auth&&!i.headers.authorization)i.headers.authorization="Basic "+Buffer.from(h.auth).toString("base64");if(K0=L._req=n$(h),L._redirects)L.emit("redirect",L.url,K0)}else K0=L._req=n$(h);if(h.timeout)K0.on("timeout",()=>{r(L,K0,"Opening handshake has timed out")});if(K0.on("error",(o)=>{if(K0===null||K0[M])return;K0=L._req=null,Y0(L,o)}),K0.on("response",(o)=>{let M0=o.headers.location,a0=o.statusCode;if(M0&&h.followRedirects&&a0>=300&&a0<400){if(++L._redirects>h.maxRedirects){r(L,K0,"Maximum redirects exceeded");return}K0.abort();let B6;try{B6=new H(M0,w)}catch(i$){let r0=SyntaxError(`Invalid URL: ${M0}`);Y0(L,r0);return}s(L,B6,m,i)}else if(!L.emit("unexpected-response",K0,o))r(L,K0,`Unexpected server response: ${o.statusCode}`)}),K0.on("upgrade",(o,M0,a0)=>{if(L.emit("upgrade",o),L.readyState!==S.CONNECTING)return;K0=L._req=null;let B6=o.headers.upgrade;if(B6===void 0||B6.toLowerCase()!=="websocket"){r(L,M0,"Invalid Upgrade header");return}let i$=G("sha1").update(d$+_).digest("base64");if(o.headers["sec-websocket-accept"]!==i$){r(L,M0,"Invalid Sec-WebSocket-Accept header");return}let r0=o.headers["sec-websocket-protocol"],N6;if(r0!==void 0){if(!z6.size)N6="Server sent a subprotocol but none was requested";else if(!z6.has(r0))N6="Server sent an invalid subprotocol"}else if(z6.size)N6="Server sent no subprotocol";if(N6){r(L,M0,N6);return}if(r0)L._protocol=r0;let o$=o.headers["sec-websocket-extensions"];if(o$!==void 0){if(!H6){r(L,M0,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let j9;try{j9=y(o$)}catch(C9){r(L,M0,"Invalid Sec-WebSocket-Extensions header");return}let a$=Object.keys(j9);if(a$.length!==1||a$[0]!==N.extensionName){r(L,M0,"Server indicated an extension that was not requested");return}try{H6.accept(j9[N.extensionName])}catch(C9){r(L,M0,"Invalid Sec-WebSocket-Extensions header");return}L._extensions[N.extensionName]=H6}L.setSocket(M0,a0,{allowSynchronousEvents:h.allowSynchronousEvents,generateMask:h.generateMask,maxPayload:h.maxPayload,skipUTF8Validation:h.skipUTF8Validation})}),h.finishRequest)h.finishRequest(K0,L);else K0.end()}function Y0(L,w){L._readyState=S.CLOSING,L._errorEmitted=!0,L.emit("error",w),L.emitClose()}function Z0(L){return L.path=L.socketPath,X.connect(L)}function V0(L){if(L.path=void 0,!L.servername&&L.servername!=="")L.servername=X.isIP(L.host)?"":L.host;return K.connect(L)}function r(L,w,m){L._readyState=S.CLOSING;let i=Error(m);if(Error.captureStackTrace(i,r),w.setHeader){if(w[M]=!0,w.abort(),w.socket&&!w.socket.destroyed)w.socket.destroy();process.nextTick(Y0,L,i)}else w.destroy(i),w.once("error",L.emit.bind(L,"error")),w.once("close",L.emitClose.bind(L))}function f0(L,w,m){if(w){let i=T(w)?w.size:P(w).length;if(L._socket)L._sender._bufferedBytes+=i;else L._bufferedAmount+=i}if(m){let i=Error(`WebSocket is not open: readyState ${L.readyState} (${v[L.readyState]})`);process.nextTick(m,i)}}function u(L,w){let m=this[B];if(m._closeFrameReceived=!0,m._closeMessage=w,m._closeCode=L,m._socket[B]===void 0)return;if(m._socket.removeListener("data",C0),process.nextTick(t,m._socket),L===1005)m.close();else m.close(L,w)}function k(){let L=this[B];if(!L.isPaused)L._socket.resume()}function b(L){let w=this[B];if(w._socket[B]!==void 0)w._socket.removeListener("data",C0),process.nextTick(t,w._socket),w.close(L[F]);if(!w._errorEmitted)w._errorEmitted=!0,w.emit("error",L)}function l(){this[B].emitClose()}function c(L,w){this[B].emit("message",L,w)}function $0(L){let w=this[B];if(w._autoPong)w.pong(L,!this._isServer,U);w.emit("ping",L)}function Q0(L){this[B].emit("pong",L)}function t(L){L.resume()}function d(L){let w=this[B];if(w.readyState===S.CLOSED)return;if(w.readyState===S.OPEN)w._readyState=S.CLOSING,X0(w);if(this._socket.end(),!w._errorEmitted)w._errorEmitted=!0,w.emit("error",L)}function X0(L){L._closeTimer=setTimeout(L._socket.destroy.bind(L._socket),L._closeTimeout)}function F0(){let L=this[B];if(this.removeListener("close",F0),this.removeListener("data",C0),this.removeListener("end",p),L._readyState=S.CLOSING,!this._readableState.endEmitted&&!L._closeFrameReceived&&!L._receiver._writableState.errorEmitted&&this._readableState.length!==0){let w=this.read(this._readableState.length);L._receiver.write(w)}if(L._receiver.end(),this[B]=void 0,clearTimeout(L._closeTimer),L._receiver._writableState.finished||L._receiver._writableState.errorEmitted)L.emitClose();else L._receiver.on("error",l),L._receiver.on("finish",l)}function C0(L){if(!this[B]._receiver.write(L))this.pause()}function p(){let L=this[B];L._readyState=S.CLOSING,L._receiver.end(),this.end()}function H0(){let L=this[B];if(this.removeListener("error",H0),this.on("error",U),L)L._readyState=S.CLOSING,this.destroy()}}),PJ=j0(($,Q)=>{var Z=w$(),{Duplex:J}=W0("stream");function Y(G){G.emit("close")}function X(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function K(G){if(this.removeListener("error",K),this.destroy(),this.listenerCount("error")===0)this.emit("error",G)}function z(G,V){let W=!0,H=new J({...V,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return G.on("message",function(j,O){let T=!O&&H._readableState.objectMode?j.toString():j;if(!H.push(T))G.pause()}),G.once("error",function(j){if(H.destroyed)return;W=!1,H.destroy(j)}),G.once("close",function(){if(H.destroyed)return;H.push(null)}),H._destroy=function(N,j){if(G.readyState===G.CLOSED){j(N),process.nextTick(Y,H);return}let O=!1;if(G.once("error",function(q){O=!0,j(q)}),G.once("close",function(){if(!O)j(N);process.nextTick(Y,H)}),W)G.terminate()},H._final=function(N){if(G.readyState===G.CONNECTING){G.once("open",function(){H._final(N)});return}if(G._socket===null)return;if(G._socket._writableState.finished){if(N(),H._readableState.endEmitted)H.destroy()}else G._socket.once("finish",function(){N()}),G.close()},H._read=function(){if(G.isPaused)G.resume()},H._write=function(N,j,O){if(G.readyState===G.CONNECTING){G.once("open",function(){H._write(N,j,O)});return}G.send(N,O)},H.on("end",X),H.on("error",K),H}Q.exports=z}),u4=j0(($,Q)=>{var{tokenChars:Z}=q6();function J(Y){let X=new Set,K=-1,z=-1,G=0;for(G;G<Y.length;G++){let W=Y.charCodeAt(G);if(z===-1&&Z[W]===1){if(K===-1)K=G}else if(G!==0&&(W===32||W===9)){if(z===-1&&K!==-1)z=G}else if(W===44){if(K===-1)throw SyntaxError(`Unexpected character at index ${G}`);if(z===-1)z=G;let H=Y.slice(K,z);if(X.has(H))throw SyntaxError(`The "${H}" subprotocol is duplicated`);X.add(H),K=z=-1}else throw SyntaxError(`Unexpected character at index ${G}`)}if(K===-1||z!==-1)throw SyntaxError("Unexpected end of input");let V=Y.slice(K,G);if(X.has(V))throw SyntaxError(`The "${V}" subprotocol is duplicated`);return X.add(V),X}Q.exports={parse:J}}),DJ=j0(($,Q)=>{var Z=W0("events"),J=W0("http"),{Duplex:Y}=W0("stream"),{createHash:X}=W0("crypto"),K=x$(),z=D6(),G=u4(),V=w$(),{CLOSE_TIMEOUT:W,GUID:H,kWebSocket:N}=k0(),j=/^[+/0-9A-Za-z]{22}==$/,O=0,T=1,q=2;class A extends Z{constructor(B,U){super();if(B={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:W,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:V,...B},B.port==null&&!B.server&&!B.noServer||B.port!=null&&(B.server||B.noServer)||B.server&&B.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(B.port!=null)this._server=J.createServer((C,I)=>{let x=J.STATUS_CODES[426];I.writeHead(426,{"Content-Length":x.length,"Content-Type":"text/plain"}),I.end(x)}),this._server.listen(B.port,B.host,B.backlog,U);else if(B.server)this._server=B.server;if(this._server){let C=this.emit.bind(this,"connection");this._removeListeners=R(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(I,x,y)=>{this.handleUpgrade(I,x,y,C)}})}if(B.perMessageDeflate===!0)B.perMessageDeflate={};if(B.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=B,this._state=O}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(B){if(this._state===q){if(B)this.once("close",()=>{B(Error("The server is not running"))});process.nextTick(_,this);return}if(B)this.once("close",B);if(this._state===T)return;if(this._state=T,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(_,this);else this._shouldEmitClose=!0;else process.nextTick(_,this)}else{let U=this._server;this._removeListeners(),this._removeListeners=this._server=null,U.close(()=>{_(this)})}}shouldHandle(B){if(this.options.path){let U=B.url.indexOf("?");if((U!==-1?B.url.slice(0,U):B.url)!==this.options.path)return!1}return!0}handleUpgrade(B,U,C,I){U.on("error",D);let x=B.headers["sec-websocket-key"],y=B.headers.upgrade,P=+B.headers["sec-websocket-version"];if(B.method!=="GET"){F(this,B,U,405,"Invalid HTTP method");return}if(y===void 0||y.toLowerCase()!=="websocket"){F(this,B,U,400,"Invalid Upgrade header");return}if(x===void 0||!j.test(x)){F(this,B,U,400,"Missing or invalid Sec-WebSocket-Key header");return}if(P!==13&&P!==8){F(this,B,U,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(B)){E(U,400);return}let M=B.headers["sec-websocket-protocol"],f=new Set;if(M!==void 0)try{f=G.parse(M)}catch(S){F(this,B,U,400,"Invalid Sec-WebSocket-Protocol header");return}let v=B.headers["sec-websocket-extensions"],n={};if(this.options.perMessageDeflate&&v!==void 0){let S=new z({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let s=K.parse(v);if(s[z.extensionName])S.accept(s[z.extensionName]),n[z.extensionName]=S}catch(s){F(this,B,U,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let S={origin:B.headers[`${P===8?"sec-websocket-origin":"origin"}`],secure:!!(B.socket.authorized||B.socket.encrypted),req:B};if(this.options.verifyClient.length===2){this.options.verifyClient(S,(s,Y0,Z0,V0)=>{if(!s)return E(U,Y0||401,Z0,V0);this.completeUpgrade(n,x,f,B,U,C,I)});return}if(!this.options.verifyClient(S))return E(U,401)}this.completeUpgrade(n,x,f,B,U,C,I)}completeUpgrade(B,U,C,I,x,y,P){if(!x.readable||!x.writable)return x.destroy();if(x[N])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>O)return E(x,503);let f=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${X("sha1").update(U+H).digest("base64")}`],v=new this.options.WebSocket(null,void 0,this.options);if(C.size){let n=this.options.handleProtocols?this.options.handleProtocols(C,I):C.values().next().value;if(n)f.push(`Sec-WebSocket-Protocol: ${n}`),v._protocol=n}if(B[z.extensionName]){let n=B[z.extensionName].params,S=K.format({[z.extensionName]:[n]});f.push(`Sec-WebSocket-Extensions: ${S}`),v._extensions=B}if(this.emit("headers",f,I),x.write(f.concat(`\r
|
|
34
|
+
}`,E3=65536,w3,S3,y3,v3=1500;var K5=g5(()=>{jJ=Object.create,CJ=Object.getPrototypeOf,x4=Object.defineProperty,LJ=Object.getOwnPropertyNames,OJ=Object.prototype.hasOwnProperty;W0=UJ(import.meta.url),k0=j0(($,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:()=>{}}}),z9=j0(($,Q)=>{var{EMPTY_BUFFER:Z}=k0(),J=Buffer[Symbol.species];function Y(z,W){if(z.length===0)return Z;if(z.length===1)return z[0];let B=Buffer.allocUnsafe(W),N=0;for(let j=0;j<z.length;j++){let O=z[j];B.set(O,N),N+=O.length}if(N<W)return new J(B.buffer,B.byteOffset,N);return B}function X(z,W,B,N,j){for(let O=0;O<j;O++)B[N+O]=z[O]^W[O&3]}function K(z,W){for(let B=0;B<z.length;B++)z[B]^=W[B&3]}function V(z){if(z.length===z.buffer.byteLength)return z.buffer;return z.buffer.slice(z.byteOffset,z.byteOffset+z.length)}function G(z){if(G.readOnly=!0,Buffer.isBuffer(z))return z;let W;if(z instanceof ArrayBuffer)W=new J(z);else if(ArrayBuffer.isView(z))W=new J(z.buffer,z.byteOffset,z.byteLength);else W=Buffer.from(z),G.readOnly=!1;return W}if(Q.exports={concat:Y,mask:X,toArrayBuffer:V,toBuffer:G,unmask:K},!process.env.WS_NO_BUFFER_UTIL)try{let z=(()=>{throw Error("Cannot require module bufferutil")})();Q.exports.mask=function(W,B,N,j,O){if(O<48)X(W,B,N,j,O);else z.mask(W,B,N,j,O)},Q.exports.unmask=function(W,B){if(W.length<32)K(W,B);else z.unmask(W,B)}}catch(z){}}),TJ=j0(($,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}),D6=j0(($,Q)=>{var Z=W0("zlib"),J=z9(),Y=TJ(),{kStatusCode:X}=k0(),K=Buffer[Symbol.species],V=Buffer.from([0,0,255,255]),G=Symbol("permessage-deflate"),z=Symbol("total-length"),W=Symbol("callback"),B=Symbol("buffers"),N=Symbol("error"),j;class O{constructor(R){if(this._options=R||{},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,!j){let _=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;j=new Y(_)}}static get extensionName(){return"permessage-deflate"}offer(){let R={};if(this._options.serverNoContextTakeover)R.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)R.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)R.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)R.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)R.client_max_window_bits=!0;return R}accept(R){return R=this.normalizeParams(R),this.params=this._isServer?this.acceptAsServer(R):this.acceptAsClient(R),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let R=this._deflate[W];if(this._deflate.close(),this._deflate=null,R)R(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(R){let _=this._options,D=R.find((E)=>{if(_.serverNoContextTakeover===!1&&E.server_no_context_takeover||E.server_max_window_bits&&(_.serverMaxWindowBits===!1||typeof _.serverMaxWindowBits==="number"&&_.serverMaxWindowBits>E.server_max_window_bits)||typeof _.clientMaxWindowBits==="number"&&!E.client_max_window_bits)return!1;return!0});if(!D)throw Error("None of the extension offers can be accepted");if(_.serverNoContextTakeover)D.server_no_context_takeover=!0;if(_.clientNoContextTakeover)D.client_no_context_takeover=!0;if(typeof _.serverMaxWindowBits==="number")D.server_max_window_bits=_.serverMaxWindowBits;if(typeof _.clientMaxWindowBits==="number")D.client_max_window_bits=_.clientMaxWindowBits;else if(D.client_max_window_bits===!0||_.clientMaxWindowBits===!1)delete D.client_max_window_bits;return D}acceptAsClient(R){let _=R[0];if(this._options.clientNoContextTakeover===!1&&_.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!_.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")_.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&_.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return _}normalizeParams(R){return R.forEach((_)=>{Object.keys(_).forEach((D)=>{let E=_[D];if(E.length>1)throw Error(`Parameter "${D}" must have only a single value`);if(E=E[0],D==="client_max_window_bits"){if(E!==!0){let F=+E;if(!Number.isInteger(F)||F<8||F>15)throw TypeError(`Invalid value for parameter "${D}": ${E}`);E=F}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${D}": ${E}`)}else if(D==="server_max_window_bits"){let F=+E;if(!Number.isInteger(F)||F<8||F>15)throw TypeError(`Invalid value for parameter "${D}": ${E}`);E=F}else if(D==="client_no_context_takeover"||D==="server_no_context_takeover"){if(E!==!0)throw TypeError(`Invalid value for parameter "${D}": ${E}`)}else throw Error(`Unknown parameter "${D}"`);_[D]=E})}),R}decompress(R,_,D){j.add((E)=>{this._decompress(R,_,(F,H)=>{E(),D(F,H)})})}compress(R,_,D){j.add((E)=>{this._compress(R,_,(F,H)=>{E(),D(F,H)})})}_decompress(R,_,D){let E=this._isServer?"client":"server";if(!this._inflate){let F=`${E}_max_window_bits`,H=typeof this.params[F]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[F];this._inflate=Z.createInflateRaw({...this._options.zlibInflateOptions,windowBits:H}),this._inflate[G]=this,this._inflate[z]=0,this._inflate[B]=[],this._inflate.on("error",A),this._inflate.on("data",q)}if(this._inflate[W]=D,this._inflate.write(R),_)this._inflate.write(V);this._inflate.flush(()=>{let F=this._inflate[N];if(F){this._inflate.close(),this._inflate=null,D(F);return}let H=J.concat(this._inflate[B],this._inflate[z]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[z]=0,this._inflate[B]=[],_&&this.params[`${E}_no_context_takeover`])this._inflate.reset();D(null,H)})}_compress(R,_,D){let E=this._isServer?"server":"client";if(!this._deflate){let F=`${E}_max_window_bits`,H=typeof this.params[F]!=="number"?Z.Z_DEFAULT_WINDOWBITS:this.params[F];this._deflate=Z.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:H}),this._deflate[z]=0,this._deflate[B]=[],this._deflate.on("data",T)}this._deflate[W]=D,this._deflate.write(R),this._deflate.flush(Z.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let F=J.concat(this._deflate[B],this._deflate[z]);if(_)F=new K(F.buffer,F.byteOffset,F.length-4);if(this._deflate[W]=null,this._deflate[z]=0,this._deflate[B]=[],_&&this.params[`${E}_no_context_takeover`])this._deflate.reset();D(null,F)})}}Q.exports=O;function T(R){this[B].push(R),this[z]+=R.length}function q(R){if(this[z]+=R.length,this[G]._maxPayload<1||this[z]<=this[G]._maxPayload){this[B].push(R);return}this[N]=RangeError("Max payload size exceeded"),this[N].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[N][X]=1009,this.removeListener("data",q),this.reset()}function A(R){if(this[G]._inflate=null,this[N]){this[W](this[N]);return}R[X]=1007,this[W](R)}}),q6=j0(($,Q)=>{var{isUtf8:Z}=W0("buffer"),{hasBlob:J}=k0(),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(G){return G>=1000&&G<=1014&&G!==1004&&G!==1005&&G!==1006||G>=3000&&G<=4999}function K(G){let z=G.length,W=0;while(W<z)if((G[W]&128)===0)W++;else if((G[W]&224)===192){if(W+1===z||(G[W+1]&192)!==128||(G[W]&254)===192)return!1;W+=2}else if((G[W]&240)===224){if(W+2>=z||(G[W+1]&192)!==128||(G[W+2]&192)!==128||G[W]===224&&(G[W+1]&224)===128||G[W]===237&&(G[W+1]&224)===160)return!1;W+=3}else if((G[W]&248)===240){if(W+3>=z||(G[W+1]&192)!==128||(G[W+2]&192)!==128||(G[W+3]&192)!==128||G[W]===240&&(G[W+1]&240)===128||G[W]===244&&G[W+1]>143||G[W]>244)return!1;W+=4}else return!1;return!0}function V(G){return J&&typeof G==="object"&&typeof G.arrayBuffer==="function"&&typeof G.type==="string"&&typeof G.stream==="function"&&(G[Symbol.toStringTag]==="Blob"||G[Symbol.toStringTag]==="File")}if(Q.exports={isBlob:V,isValidStatusCode:X,isValidUTF8:K,tokenChars:Y},Z)Q.exports.isValidUTF8=function(G){return G.length<24?K(G):Z(G)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let G=(()=>{throw Error("Cannot require module utf-8-validate")})();Q.exports.isValidUTF8=function(z){return z.length<32?K(z):G(z)}}catch(G){}}),v4=j0(($,Q)=>{var{Writable:Z}=W0("stream"),J=D6(),{BINARY_TYPES:Y,EMPTY_BUFFER:X,kStatusCode:K,kWebSocket:V}=k0(),{concat:G,toArrayBuffer:z,unmask:W}=z9(),{isValidStatusCode:B,isValidUTF8:N}=q6(),j=Buffer[Symbol.species],O=0,T=1,q=2,A=3,R=4,_=5,D=6;class E extends Z{constructor(F={}){super();this._allowSynchronousEvents=F.allowSynchronousEvents!==void 0?F.allowSynchronousEvents:!0,this._binaryType=F.binaryType||Y[0],this._extensions=F.extensions||{},this._isServer=!!F.isServer,this._maxPayload=F.maxPayload|0,this._skipUTF8Validation=!!F.skipUTF8Validation,this[V]=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=O}_write(F,H,U){if(this._opcode===8&&this._state==O)return U();this._bufferedBytes+=F.length,this._buffers.push(F),this.startLoop(U)}consume(F){if(this._bufferedBytes-=F,F===this._buffers[0].length)return this._buffers.shift();if(F<this._buffers[0].length){let U=this._buffers[0];return this._buffers[0]=new j(U.buffer,U.byteOffset+F,U.length-F),new j(U.buffer,U.byteOffset,F)}let H=Buffer.allocUnsafe(F);do{let U=this._buffers[0],C=H.length-F;if(F>=U.length)H.set(this._buffers.shift(),C);else H.set(new Uint8Array(U.buffer,U.byteOffset,F),C),this._buffers[0]=new j(U.buffer,U.byteOffset+F,U.length-F);F-=U.length}while(F>0);return H}startLoop(F){this._loop=!0;do switch(this._state){case O:this.getInfo(F);break;case T:this.getPayloadLength16(F);break;case q:this.getPayloadLength64(F);break;case A:this.getMask();break;case R:this.getData(F);break;case _:case D:this._loop=!1;return}while(this._loop);if(!this._errored)F()}getInfo(F){if(this._bufferedBytes<2){this._loop=!1;return}let H=this.consume(2);if((H[0]&48)!==0){let C=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");F(C);return}let U=(H[0]&64)===64;if(U&&!this._extensions[J.extensionName]){let C=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");F(C);return}if(this._fin=(H[0]&128)===128,this._opcode=H[0]&15,this._payloadLength=H[1]&127,this._opcode===0){if(U){let C=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");F(C);return}if(!this._fragmented){let C=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");F(C);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let C=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");F(C);return}this._compressed=U}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let C=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");F(C);return}if(U){let C=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");F(C);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let C=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");F(C);return}}else{let C=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");F(C);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(H[1]&128)===128,this._isServer){if(!this._masked){let C=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");F(C);return}}else if(this._masked){let C=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");F(C);return}if(this._payloadLength===126)this._state=T;else if(this._payloadLength===127)this._state=q;else this.haveLength(F)}getPayloadLength16(F){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(F)}getPayloadLength64(F){if(this._bufferedBytes<8){this._loop=!1;return}let H=this.consume(8),U=H.readUInt32BE(0);if(U>Math.pow(2,21)-1){let C=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");F(C);return}this._payloadLength=U*Math.pow(2,32)+H.readUInt32BE(4),this.haveLength(F)}haveLength(F){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let H=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");F(H);return}}if(this._masked)this._state=A;else this._state=R}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=R}getData(F){let H=X;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(H=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)W(H,this._mask)}if(this._opcode>7){this.controlMessage(H,F);return}if(this._compressed){this._state=_,this.decompress(H,F);return}if(H.length)this._messageLength=this._totalPayloadLength,this._fragments.push(H);this.dataMessage(F)}decompress(F,H){this._extensions[J.extensionName].decompress(F,this._fin,(C,I)=>{if(C)return H(C);if(I.length){if(this._messageLength+=I.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let x=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");H(x);return}this._fragments.push(I)}if(this.dataMessage(H),this._state===O)this.startLoop(H)})}dataMessage(F){if(!this._fin){this._state=O;return}let H=this._messageLength,U=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let C;if(this._binaryType==="nodebuffer")C=G(U,H);else if(this._binaryType==="arraybuffer")C=z(G(U,H));else if(this._binaryType==="blob")C=new Blob(U);else C=U;if(this._allowSynchronousEvents)this.emit("message",C,!0),this._state=O;else this._state=D,setImmediate(()=>{this.emit("message",C,!0),this._state=O,this.startLoop(F)})}else{let C=G(U,H);if(!this._skipUTF8Validation&&!N(C)){let I=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");F(I);return}if(this._state===_||this._allowSynchronousEvents)this.emit("message",C,!1),this._state=O;else this._state=D,setImmediate(()=>{this.emit("message",C,!1),this._state=O,this.startLoop(F)})}}controlMessage(F,H){if(this._opcode===8){if(F.length===0)this._loop=!1,this.emit("conclude",1005,X),this.end();else{let U=F.readUInt16BE(0);if(!B(U)){let I=this.createError(RangeError,`invalid status code ${U}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");H(I);return}let C=new j(F.buffer,F.byteOffset+2,F.length-2);if(!this._skipUTF8Validation&&!N(C)){let I=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");H(I);return}this._loop=!1,this.emit("conclude",U,C),this.end()}this._state=O;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",F),this._state=O;else this._state=D,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",F),this._state=O,this.startLoop(H)})}createError(F,H,U,C,I){this._loop=!1,this._errored=!0;let x=new F(U?`Invalid WebSocket frame: ${H}`:H);return Error.captureStackTrace(x,this.createError),x.code=I,x[K]=C,x}}Q.exports=E}),h4=j0(($,Q)=>{var{Duplex:Z}=W0("stream"),{randomFillSync:J}=W0("crypto"),Y=D6(),{EMPTY_BUFFER:X,kWebSocket:K,NOOP:V}=k0(),{isBlob:G,isValidStatusCode:z}=q6(),{mask:W,toBuffer:B}=z9(),N=Symbol("kByteLength"),j=Buffer.alloc(4),O=8192,T,q=O,A=0,R=1,_=2;class D{constructor(H,U,C){if(this._extensions=U||{},C)this._generateMask=C,this._maskBuffer=Buffer.alloc(4);this._socket=H,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=A,this.onerror=V,this[K]=void 0}static frame(H,U){let C,I=!1,x=2,y=!1;if(U.mask){if(C=U.maskBuffer||j,U.generateMask)U.generateMask(C);else{if(q===O){if(T===void 0)T=Buffer.alloc(O);J(T,0,O),q=0}C[0]=T[q++],C[1]=T[q++],C[2]=T[q++],C[3]=T[q++]}y=(C[0]|C[1]|C[2]|C[3])===0,x=6}let P;if(typeof H==="string")if((!U.mask||y)&&U[N]!==void 0)P=U[N];else H=Buffer.from(H),P=H.length;else P=H.length,I=U.mask&&U.readOnly&&!y;let M=P;if(P>=65536)x+=8,M=127;else if(P>125)x+=2,M=126;let f=Buffer.allocUnsafe(I?P+x:x);if(f[0]=U.fin?U.opcode|128:U.opcode,U.rsv1)f[0]|=64;if(f[1]=M,M===126)f.writeUInt16BE(P,2);else if(M===127)f[2]=f[3]=0,f.writeUIntBE(P,4,6);if(!U.mask)return[f,H];if(f[1]|=128,f[x-4]=C[0],f[x-3]=C[1],f[x-2]=C[2],f[x-1]=C[3],y)return[f,H];if(I)return W(H,C,f,x,P),[f];return W(H,C,H,0,P),[f,H]}close(H,U,C,I){let x;if(H===void 0)x=X;else if(typeof H!=="number"||!z(H))throw TypeError("First argument must be a valid error code number");else if(U===void 0||!U.length)x=Buffer.allocUnsafe(2),x.writeUInt16BE(H,0);else{let P=Buffer.byteLength(U);if(P>123)throw RangeError("The message must not be greater than 123 bytes");if(x=Buffer.allocUnsafe(2+P),x.writeUInt16BE(H,0),typeof U==="string")x.write(U,2);else x.set(U,2)}let y={[N]:x.length,fin:!0,generateMask:this._generateMask,mask:C,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==A)this.enqueue([this.dispatch,x,!1,y,I]);else this.sendFrame(D.frame(x,y),I)}ping(H,U,C){let I,x;if(typeof H==="string")I=Buffer.byteLength(H),x=!1;else if(G(H))I=H.size,x=!1;else H=B(H),I=H.length,x=B.readOnly;if(I>125)throw RangeError("The data size must not be greater than 125 bytes");let y={[N]:I,fin:!0,generateMask:this._generateMask,mask:U,maskBuffer:this._maskBuffer,opcode:9,readOnly:x,rsv1:!1};if(G(H))if(this._state!==A)this.enqueue([this.getBlobData,H,!1,y,C]);else this.getBlobData(H,!1,y,C);else if(this._state!==A)this.enqueue([this.dispatch,H,!1,y,C]);else this.sendFrame(D.frame(H,y),C)}pong(H,U,C){let I,x;if(typeof H==="string")I=Buffer.byteLength(H),x=!1;else if(G(H))I=H.size,x=!1;else H=B(H),I=H.length,x=B.readOnly;if(I>125)throw RangeError("The data size must not be greater than 125 bytes");let y={[N]:I,fin:!0,generateMask:this._generateMask,mask:U,maskBuffer:this._maskBuffer,opcode:10,readOnly:x,rsv1:!1};if(G(H))if(this._state!==A)this.enqueue([this.getBlobData,H,!1,y,C]);else this.getBlobData(H,!1,y,C);else if(this._state!==A)this.enqueue([this.dispatch,H,!1,y,C]);else this.sendFrame(D.frame(H,y),C)}send(H,U,C){let I=this._extensions[Y.extensionName],x=U.binary?2:1,y=U.compress,P,M;if(typeof H==="string")P=Buffer.byteLength(H),M=!1;else if(G(H))P=H.size,M=!1;else H=B(H),P=H.length,M=B.readOnly;if(this._firstFragment){if(this._firstFragment=!1,y&&I&&I.params[I._isServer?"server_no_context_takeover":"client_no_context_takeover"])y=P>=I._threshold;this._compress=y}else y=!1,x=0;if(U.fin)this._firstFragment=!0;let f={[N]:P,fin:U.fin,generateMask:this._generateMask,mask:U.mask,maskBuffer:this._maskBuffer,opcode:x,readOnly:M,rsv1:y};if(G(H))if(this._state!==A)this.enqueue([this.getBlobData,H,this._compress,f,C]);else this.getBlobData(H,this._compress,f,C);else if(this._state!==A)this.enqueue([this.dispatch,H,this._compress,f,C]);else this.dispatch(H,this._compress,f,C)}getBlobData(H,U,C,I){this._bufferedBytes+=C[N],this._state=_,H.arrayBuffer().then((x)=>{if(this._socket.destroyed){let P=Error("The socket was closed while the blob was being read");process.nextTick(E,this,P,I);return}this._bufferedBytes-=C[N];let y=B(x);if(!U)this._state=A,this.sendFrame(D.frame(y,C),I),this.dequeue();else this.dispatch(y,U,C,I)}).catch((x)=>{process.nextTick(F,this,x,I)})}dispatch(H,U,C,I){if(!U){this.sendFrame(D.frame(H,C),I);return}let x=this._extensions[Y.extensionName];this._bufferedBytes+=C[N],this._state=R,x.compress(H,C.fin,(y,P)=>{if(this._socket.destroyed){let M=Error("The socket was closed while data was being compressed");E(this,M,I);return}this._bufferedBytes-=C[N],this._state=A,C.readOnly=!1,this.sendFrame(D.frame(P,C),I),this.dequeue()})}dequeue(){while(this._state===A&&this._queue.length){let H=this._queue.shift();this._bufferedBytes-=H[3][N],Reflect.apply(H[0],this,H.slice(1))}}enqueue(H){this._bufferedBytes+=H[3][N],this._queue.push(H)}sendFrame(H,U){if(H.length===2)this._socket.cork(),this._socket.write(H[0]),this._socket.write(H[1],U),this._socket.uncork();else this._socket.write(H[0],U)}}Q.exports=D;function E(H,U,C){if(typeof C==="function")C(U);for(let I=0;I<H._queue.length;I++){let x=H._queue[I],y=x[x.length-1];if(typeof y==="function")y(U)}}function F(H,U,C){E(H,U,C),H.onerror(U)}}),PJ=j0(($,Q)=>{var{kForOnEventAttribute:Z,kListener:J}=k0(),Y=Symbol("kCode"),X=Symbol("kData"),K=Symbol("kError"),V=Symbol("kMessage"),G=Symbol("kReason"),z=Symbol("kTarget"),W=Symbol("kType"),B=Symbol("kWasClean");class N{constructor(R){this[z]=null,this[W]=R}get target(){return this[z]}get type(){return this[W]}}Object.defineProperty(N.prototype,"target",{enumerable:!0}),Object.defineProperty(N.prototype,"type",{enumerable:!0});class j extends N{constructor(R,_={}){super(R);this[Y]=_.code===void 0?0:_.code,this[G]=_.reason===void 0?"":_.reason,this[B]=_.wasClean===void 0?!1:_.wasClean}get code(){return this[Y]}get reason(){return this[G]}get wasClean(){return this[B]}}Object.defineProperty(j.prototype,"code",{enumerable:!0}),Object.defineProperty(j.prototype,"reason",{enumerable:!0}),Object.defineProperty(j.prototype,"wasClean",{enumerable:!0});class O extends N{constructor(R,_={}){super(R);this[K]=_.error===void 0?null:_.error,this[V]=_.message===void 0?"":_.message}get error(){return this[K]}get message(){return this[V]}}Object.defineProperty(O.prototype,"error",{enumerable:!0}),Object.defineProperty(O.prototype,"message",{enumerable:!0});class T extends N{constructor(R,_={}){super(R);this[X]=_.data===void 0?null:_.data}get data(){return this[X]}}Object.defineProperty(T.prototype,"data",{enumerable:!0});var q={addEventListener(R,_,D={}){for(let F of this.listeners(R))if(!D[Z]&&F[J]===_&&!F[Z])return;let E;if(R==="message")E=function(H,U){let C=new T("message",{data:U?H:H.toString()});C[z]=this,A(_,this,C)};else if(R==="close")E=function(H,U){let C=new j("close",{code:H,reason:U.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});C[z]=this,A(_,this,C)};else if(R==="error")E=function(H){let U=new O("error",{error:H,message:H.message});U[z]=this,A(_,this,U)};else if(R==="open")E=function(){let H=new N("open");H[z]=this,A(_,this,H)};else return;if(E[Z]=!!D[Z],E[J]=_,D.once)this.once(R,E);else this.on(R,E)},removeEventListener(R,_){for(let D of this.listeners(R))if(D[J]===_&&!D[Z]){this.removeListener(R,D);break}}};Q.exports={CloseEvent:j,ErrorEvent:O,Event:N,EventTarget:q,MessageEvent:T};function A(R,_,D){if(typeof R==="object"&&R.handleEvent)R.handleEvent.call(R,D);else R.call(_,D)}}),w$=j0(($,Q)=>{var{tokenChars:Z}=q6();function J(K,V,G){if(K[V]===void 0)K[V]=[G];else K[V].push(G)}function Y(K){let V=Object.create(null),G=Object.create(null),z=!1,W=!1,B=!1,N,j,O=-1,T=-1,q=-1,A=0;for(;A<K.length;A++)if(T=K.charCodeAt(A),N===void 0)if(q===-1&&Z[T]===1){if(O===-1)O=A}else if(A!==0&&(T===32||T===9)){if(q===-1&&O!==-1)q=A}else if(T===59||T===44){if(O===-1)throw SyntaxError(`Unexpected character at index ${A}`);if(q===-1)q=A;let _=K.slice(O,q);if(T===44)J(V,_,G),G=Object.create(null);else N=_;O=q=-1}else throw SyntaxError(`Unexpected character at index ${A}`);else if(j===void 0)if(q===-1&&Z[T]===1){if(O===-1)O=A}else if(T===32||T===9){if(q===-1&&O!==-1)q=A}else if(T===59||T===44){if(O===-1)throw SyntaxError(`Unexpected character at index ${A}`);if(q===-1)q=A;if(J(G,K.slice(O,q),!0),T===44)J(V,N,G),G=Object.create(null),N=void 0;O=q=-1}else if(T===61&&O!==-1&&q===-1)j=K.slice(O,A),O=q=-1;else throw SyntaxError(`Unexpected character at index ${A}`);else if(W){if(Z[T]!==1)throw SyntaxError(`Unexpected character at index ${A}`);if(O===-1)O=A;else if(!z)z=!0;W=!1}else if(B)if(Z[T]===1){if(O===-1)O=A}else if(T===34&&O!==-1)B=!1,q=A;else if(T===92)W=!0;else throw SyntaxError(`Unexpected character at index ${A}`);else if(T===34&&K.charCodeAt(A-1)===61)B=!0;else if(q===-1&&Z[T]===1){if(O===-1)O=A}else if(O!==-1&&(T===32||T===9)){if(q===-1)q=A}else if(T===59||T===44){if(O===-1)throw SyntaxError(`Unexpected character at index ${A}`);if(q===-1)q=A;let _=K.slice(O,q);if(z)_=_.replace(/\\/g,""),z=!1;if(J(G,j,_),T===44)J(V,N,G),G=Object.create(null),N=void 0;j=void 0,O=q=-1}else throw SyntaxError(`Unexpected character at index ${A}`);if(O===-1||B||T===32||T===9)throw SyntaxError("Unexpected end of input");if(q===-1)q=A;let R=K.slice(O,q);if(N===void 0)J(V,R,G);else{if(j===void 0)J(G,R,!0);else if(z)J(G,j,R.replace(/\\/g,""));else J(G,j,R);J(V,N,G)}return V}function X(K){return Object.keys(K).map((V)=>{let G=K[V];if(!Array.isArray(G))G=[G];return G.map((z)=>{return[V].concat(Object.keys(z).map((W)=>{let B=z[W];if(!Array.isArray(B))B=[B];return B.map((N)=>N===!0?W:`${W}=${N}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}Q.exports={format:X,parse:Y}}),S$=j0(($,Q)=>{var Z=W0("events"),J=W0("https"),Y=W0("http"),X=W0("net"),K=W0("tls"),{randomBytes:V,createHash:G}=W0("crypto"),{Duplex:z,Readable:W}=W0("stream"),{URL:B}=W0("url"),N=D6(),j=v4(),O=h4(),{isBlob:T}=q6(),{BINARY_TYPES:q,CLOSE_TIMEOUT:A,EMPTY_BUFFER:R,GUID:_,kForOnEventAttribute:D,kListener:E,kStatusCode:F,kWebSocket:H,NOOP:U}=k0(),{EventTarget:{addEventListener:C,removeEventListener:I}}=PJ(),{format:x,parse:y}=w$(),{toBuffer:P}=z9(),M=Symbol("kAborted"),f=[8,13],v=["CONNECTING","OPEN","CLOSING","CLOSED"],n=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class S extends Z{constructor(L,w,m){super();if(this._binaryType=q[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=R,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=S.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,L!==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)m=w,w=[];else w=[w];s(this,L,w,m)}else this._autoPong=m.autoPong,this._closeTimeout=m.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(L){if(!q.includes(L))return;if(this._binaryType=L,this._receiver)this._receiver._binaryType=L}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(L,w,m){let i=new j({allowSynchronousEvents:m.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:m.maxPayload,skipUTF8Validation:m.skipUTF8Validation}),h=new O(L,this._extensions,m.generateMask);if(this._receiver=i,this._sender=h,this._socket=L,i[H]=this,h[H]=this,L[H]=this,i.on("conclude",u),i.on("drain",k),i.on("error",b),i.on("message",c),i.on("ping",$0),i.on("pong",Q0),h.onerror=d,L.setTimeout)L.setTimeout(0);if(L.setNoDelay)L.setNoDelay();if(w.length>0)L.unshift(w);L.on("close",F0),L.on("data",C0),L.on("end",p),L.on("error",B0),this._readyState=S.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=S.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[N.extensionName])this._extensions[N.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=S.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(L,w){if(this.readyState===S.CLOSED)return;if(this.readyState===S.CONNECTING){r(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===S.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=S.CLOSING,this._sender.close(L,w,!this._isServer,(m)=>{if(m)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),X0(this)}pause(){if(this.readyState===S.CONNECTING||this.readyState===S.CLOSED)return;this._paused=!0,this._socket.pause()}ping(L,w,m){if(this.readyState===S.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof L==="function")m=L,L=w=void 0;else if(typeof w==="function")m=w,w=void 0;if(typeof L==="number")L=L.toString();if(this.readyState!==S.OPEN){f0(this,L,m);return}if(w===void 0)w=!this._isServer;this._sender.ping(L||R,w,m)}pong(L,w,m){if(this.readyState===S.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof L==="function")m=L,L=w=void 0;else if(typeof w==="function")m=w,w=void 0;if(typeof L==="number")L=L.toString();if(this.readyState!==S.OPEN){f0(this,L,m);return}if(w===void 0)w=!this._isServer;this._sender.pong(L||R,w,m)}resume(){if(this.readyState===S.CONNECTING||this.readyState===S.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(L,w,m){if(this.readyState===S.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof w==="function")m=w,w={};if(typeof L==="number")L=L.toString();if(this.readyState!==S.OPEN){f0(this,L,m);return}let i={binary:typeof L!=="string",mask:!this._isServer,compress:!0,fin:!0,...w};if(!this._extensions[N.extensionName])i.compress=!1;this._sender.send(L||R,i,m)}terminate(){if(this.readyState===S.CLOSED)return;if(this.readyState===S.CONNECTING){r(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=S.CLOSING,this._socket.destroy()}}Object.defineProperty(S,"CONNECTING",{enumerable:!0,value:v.indexOf("CONNECTING")}),Object.defineProperty(S.prototype,"CONNECTING",{enumerable:!0,value:v.indexOf("CONNECTING")}),Object.defineProperty(S,"OPEN",{enumerable:!0,value:v.indexOf("OPEN")}),Object.defineProperty(S.prototype,"OPEN",{enumerable:!0,value:v.indexOf("OPEN")}),Object.defineProperty(S,"CLOSING",{enumerable:!0,value:v.indexOf("CLOSING")}),Object.defineProperty(S.prototype,"CLOSING",{enumerable:!0,value:v.indexOf("CLOSING")}),Object.defineProperty(S,"CLOSED",{enumerable:!0,value:v.indexOf("CLOSED")}),Object.defineProperty(S.prototype,"CLOSED",{enumerable:!0,value:v.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((L)=>{Object.defineProperty(S.prototype,L,{enumerable:!0})}),["open","error","close","message"].forEach((L)=>{Object.defineProperty(S.prototype,`on${L}`,{enumerable:!0,get(){for(let w of this.listeners(L))if(w[D])return w[E];return null},set(w){for(let m of this.listeners(L))if(m[D]){this.removeListener(L,m);break}if(typeof w!=="function")return;this.addEventListener(L,w,{[D]:!0})}})}),S.prototype.addEventListener=C,S.prototype.removeEventListener=I,Q.exports=S;function s(L,w,m,i){let h={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:A,protocolVersion:f[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...i,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(L._autoPong=h.autoPong,L._closeTimeout=h.closeTimeout,!f.includes(h.protocolVersion))throw RangeError(`Unsupported protocol version: ${h.protocolVersion} (supported versions: ${f.join(", ")})`);let e;if(w instanceof B)e=w;else try{e=new B(w)}catch{throw SyntaxError(`Invalid URL: ${w}`)}if(e.protocol==="http:")e.protocol="ws:";else if(e.protocol==="https:")e.protocol="wss:";L._url=e.href;let i0=e.protocol==="wss:",o0=e.protocol==="ws+unix:",V6;if(e.protocol!=="ws:"&&!i0&&!o0)V6=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(o0&&!e.pathname)V6="The URL's pathname is empty";else if(e.hash)V6="The URL contains a fragment identifier";if(V6){let a=SyntaxError(V6);if(L._redirects===0)throw a;else{Y0(L,a);return}}let d$=i0?443:80,n$=V(16).toString("base64"),i$=i0?J.request:Y.request,z6=new Set,B6;if(h.createConnection=h.createConnection||(i0?V0:Z0),h.defaultPort=h.defaultPort||d$,h.port=e.port||d$,h.host=e.hostname.startsWith("[")?e.hostname.slice(1,-1):e.hostname,h.headers={...h.headers,"Sec-WebSocket-Version":h.protocolVersion,"Sec-WebSocket-Key":n$,Connection:"Upgrade",Upgrade:"websocket"},h.path=e.pathname+e.search,h.timeout=h.handshakeTimeout,h.perMessageDeflate)B6=new N({...h.perMessageDeflate,isServer:!1,maxPayload:h.maxPayload}),h.headers["Sec-WebSocket-Extensions"]=x({[N.extensionName]:B6.offer()});if(m.length){for(let a of m){if(typeof a!=="string"||!n.test(a)||z6.has(a))throw SyntaxError("An invalid or duplicated subprotocol was specified");z6.add(a)}h.headers["Sec-WebSocket-Protocol"]=m.join(",")}if(h.origin)if(h.protocolVersion<13)h.headers["Sec-WebSocket-Origin"]=h.origin;else h.headers.Origin=h.origin;if(e.username||e.password)h.auth=`${e.username}:${e.password}`;if(o0){let a=h.path.split(":");h.socketPath=a[0],h.path=a[1]}let K0;if(h.followRedirects){if(L._redirects===0){L._originalIpc=o0,L._originalSecure=i0,L._originalHostOrSocketPath=o0?h.socketPath:e.host;let a=i&&i.headers;if(i={...i,headers:{}},a)for(let[M0,a0]of Object.entries(a))i.headers[M0.toLowerCase()]=a0}else if(L.listenerCount("redirect")===0){let a=o0?L._originalIpc?h.socketPath===L._originalHostOrSocketPath:!1:L._originalIpc?!1:e.host===L._originalHostOrSocketPath;if(!a||L._originalSecure&&!i0){if(delete h.headers.authorization,delete h.headers.cookie,!a)delete h.headers.host;h.auth=void 0}}if(h.auth&&!i.headers.authorization)i.headers.authorization="Basic "+Buffer.from(h.auth).toString("base64");if(K0=L._req=i$(h),L._redirects)L.emit("redirect",L.url,K0)}else K0=L._req=i$(h);if(h.timeout)K0.on("timeout",()=>{r(L,K0,"Opening handshake has timed out")});if(K0.on("error",(a)=>{if(K0===null||K0[M])return;K0=L._req=null,Y0(L,a)}),K0.on("response",(a)=>{let M0=a.headers.location,a0=a.statusCode;if(M0&&h.followRedirects&&a0>=300&&a0<400){if(++L._redirects>h.maxRedirects){r(L,K0,"Maximum redirects exceeded");return}K0.abort();let H6;try{H6=new B(M0,w)}catch(o$){let r0=SyntaxError(`Invalid URL: ${M0}`);Y0(L,r0);return}s(L,H6,m,i)}else if(!L.emit("unexpected-response",K0,a))r(L,K0,`Unexpected server response: ${a.statusCode}`)}),K0.on("upgrade",(a,M0,a0)=>{if(L.emit("upgrade",a),L.readyState!==S.CONNECTING)return;K0=L._req=null;let H6=a.headers.upgrade;if(H6===void 0||H6.toLowerCase()!=="websocket"){r(L,M0,"Invalid Upgrade header");return}let o$=G("sha1").update(n$+_).digest("base64");if(a.headers["sec-websocket-accept"]!==o$){r(L,M0,"Invalid Sec-WebSocket-Accept header");return}let r0=a.headers["sec-websocket-protocol"],N6;if(r0!==void 0){if(!z6.size)N6="Server sent a subprotocol but none was requested";else if(!z6.has(r0))N6="Server sent an invalid subprotocol"}else if(z6.size)N6="Server sent no subprotocol";if(N6){r(L,M0,N6);return}if(r0)L._protocol=r0;let a$=a.headers["sec-websocket-extensions"];if(a$!==void 0){if(!B6){r(L,M0,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let j9;try{j9=y(a$)}catch(C9){r(L,M0,"Invalid Sec-WebSocket-Extensions header");return}let r$=Object.keys(j9);if(r$.length!==1||r$[0]!==N.extensionName){r(L,M0,"Server indicated an extension that was not requested");return}try{B6.accept(j9[N.extensionName])}catch(C9){r(L,M0,"Invalid Sec-WebSocket-Extensions header");return}L._extensions[N.extensionName]=B6}L.setSocket(M0,a0,{allowSynchronousEvents:h.allowSynchronousEvents,generateMask:h.generateMask,maxPayload:h.maxPayload,skipUTF8Validation:h.skipUTF8Validation})}),h.finishRequest)h.finishRequest(K0,L);else K0.end()}function Y0(L,w){L._readyState=S.CLOSING,L._errorEmitted=!0,L.emit("error",w),L.emitClose()}function Z0(L){return L.path=L.socketPath,X.connect(L)}function V0(L){if(L.path=void 0,!L.servername&&L.servername!=="")L.servername=X.isIP(L.host)?"":L.host;return K.connect(L)}function r(L,w,m){L._readyState=S.CLOSING;let i=Error(m);if(Error.captureStackTrace(i,r),w.setHeader){if(w[M]=!0,w.abort(),w.socket&&!w.socket.destroyed)w.socket.destroy();process.nextTick(Y0,L,i)}else w.destroy(i),w.once("error",L.emit.bind(L,"error")),w.once("close",L.emitClose.bind(L))}function f0(L,w,m){if(w){let i=T(w)?w.size:P(w).length;if(L._socket)L._sender._bufferedBytes+=i;else L._bufferedAmount+=i}if(m){let i=Error(`WebSocket is not open: readyState ${L.readyState} (${v[L.readyState]})`);process.nextTick(m,i)}}function u(L,w){let m=this[H];if(m._closeFrameReceived=!0,m._closeMessage=w,m._closeCode=L,m._socket[H]===void 0)return;if(m._socket.removeListener("data",C0),process.nextTick(t,m._socket),L===1005)m.close();else m.close(L,w)}function k(){let L=this[H];if(!L.isPaused)L._socket.resume()}function b(L){let w=this[H];if(w._socket[H]!==void 0)w._socket.removeListener("data",C0),process.nextTick(t,w._socket),w.close(L[F]);if(!w._errorEmitted)w._errorEmitted=!0,w.emit("error",L)}function l(){this[H].emitClose()}function c(L,w){this[H].emit("message",L,w)}function $0(L){let w=this[H];if(w._autoPong)w.pong(L,!this._isServer,U);w.emit("ping",L)}function Q0(L){this[H].emit("pong",L)}function t(L){L.resume()}function d(L){let w=this[H];if(w.readyState===S.CLOSED)return;if(w.readyState===S.OPEN)w._readyState=S.CLOSING,X0(w);if(this._socket.end(),!w._errorEmitted)w._errorEmitted=!0,w.emit("error",L)}function X0(L){L._closeTimer=setTimeout(L._socket.destroy.bind(L._socket),L._closeTimeout)}function F0(){let L=this[H];if(this.removeListener("close",F0),this.removeListener("data",C0),this.removeListener("end",p),L._readyState=S.CLOSING,!this._readableState.endEmitted&&!L._closeFrameReceived&&!L._receiver._writableState.errorEmitted&&this._readableState.length!==0){let w=this.read(this._readableState.length);L._receiver.write(w)}if(L._receiver.end(),this[H]=void 0,clearTimeout(L._closeTimer),L._receiver._writableState.finished||L._receiver._writableState.errorEmitted)L.emitClose();else L._receiver.on("error",l),L._receiver.on("finish",l)}function C0(L){if(!this[H]._receiver.write(L))this.pause()}function p(){let L=this[H];L._readyState=S.CLOSING,L._receiver.end(),this.end()}function B0(){let L=this[H];if(this.removeListener("error",B0),this.on("error",U),L)L._readyState=S.CLOSING,this.destroy()}}),DJ=j0(($,Q)=>{var Z=S$(),{Duplex:J}=W0("stream");function Y(G){G.emit("close")}function X(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function K(G){if(this.removeListener("error",K),this.destroy(),this.listenerCount("error")===0)this.emit("error",G)}function V(G,z){let W=!0,B=new J({...z,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return G.on("message",function(j,O){let T=!O&&B._readableState.objectMode?j.toString():j;if(!B.push(T))G.pause()}),G.once("error",function(j){if(B.destroyed)return;W=!1,B.destroy(j)}),G.once("close",function(){if(B.destroyed)return;B.push(null)}),B._destroy=function(N,j){if(G.readyState===G.CLOSED){j(N),process.nextTick(Y,B);return}let O=!1;if(G.once("error",function(q){O=!0,j(q)}),G.once("close",function(){if(!O)j(N);process.nextTick(Y,B)}),W)G.terminate()},B._final=function(N){if(G.readyState===G.CONNECTING){G.once("open",function(){B._final(N)});return}if(G._socket===null)return;if(G._socket._writableState.finished){if(N(),B._readableState.endEmitted)B.destroy()}else G._socket.once("finish",function(){N()}),G.close()},B._read=function(){if(G.isPaused)G.resume()},B._write=function(N,j,O){if(G.readyState===G.CONNECTING){G.once("open",function(){B._write(N,j,O)});return}G.send(N,O)},B.on("end",X),B.on("error",K),B}Q.exports=V}),g4=j0(($,Q)=>{var{tokenChars:Z}=q6();function J(Y){let X=new Set,K=-1,V=-1,G=0;for(G;G<Y.length;G++){let W=Y.charCodeAt(G);if(V===-1&&Z[W]===1){if(K===-1)K=G}else if(G!==0&&(W===32||W===9)){if(V===-1&&K!==-1)V=G}else if(W===44){if(K===-1)throw SyntaxError(`Unexpected character at index ${G}`);if(V===-1)V=G;let B=Y.slice(K,V);if(X.has(B))throw SyntaxError(`The "${B}" subprotocol is duplicated`);X.add(B),K=V=-1}else throw SyntaxError(`Unexpected character at index ${G}`)}if(K===-1||V!==-1)throw SyntaxError("Unexpected end of input");let z=Y.slice(K,G);if(X.has(z))throw SyntaxError(`The "${z}" subprotocol is duplicated`);return X.add(z),X}Q.exports={parse:J}}),qJ=j0(($,Q)=>{var Z=W0("events"),J=W0("http"),{Duplex:Y}=W0("stream"),{createHash:X}=W0("crypto"),K=w$(),V=D6(),G=g4(),z=S$(),{CLOSE_TIMEOUT:W,GUID:B,kWebSocket:N}=k0(),j=/^[+/0-9A-Za-z]{22}==$/,O=0,T=1,q=2;class A extends Z{constructor(H,U){super();if(H={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:W,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:z,...H},H.port==null&&!H.server&&!H.noServer||H.port!=null&&(H.server||H.noServer)||H.server&&H.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(H.port!=null)this._server=J.createServer((C,I)=>{let x=J.STATUS_CODES[426];I.writeHead(426,{"Content-Length":x.length,"Content-Type":"text/plain"}),I.end(x)}),this._server.listen(H.port,H.host,H.backlog,U);else if(H.server)this._server=H.server;if(this._server){let C=this.emit.bind(this,"connection");this._removeListeners=R(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(I,x,y)=>{this.handleUpgrade(I,x,y,C)}})}if(H.perMessageDeflate===!0)H.perMessageDeflate={};if(H.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=H,this._state=O}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(H){if(this._state===q){if(H)this.once("close",()=>{H(Error("The server is not running"))});process.nextTick(_,this);return}if(H)this.once("close",H);if(this._state===T)return;if(this._state=T,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(_,this);else this._shouldEmitClose=!0;else process.nextTick(_,this)}else{let U=this._server;this._removeListeners(),this._removeListeners=this._server=null,U.close(()=>{_(this)})}}shouldHandle(H){if(this.options.path){let U=H.url.indexOf("?");if((U!==-1?H.url.slice(0,U):H.url)!==this.options.path)return!1}return!0}handleUpgrade(H,U,C,I){U.on("error",D);let x=H.headers["sec-websocket-key"],y=H.headers.upgrade,P=+H.headers["sec-websocket-version"];if(H.method!=="GET"){F(this,H,U,405,"Invalid HTTP method");return}if(y===void 0||y.toLowerCase()!=="websocket"){F(this,H,U,400,"Invalid Upgrade header");return}if(x===void 0||!j.test(x)){F(this,H,U,400,"Missing or invalid Sec-WebSocket-Key header");return}if(P!==13&&P!==8){F(this,H,U,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(H)){E(U,400);return}let M=H.headers["sec-websocket-protocol"],f=new Set;if(M!==void 0)try{f=G.parse(M)}catch(S){F(this,H,U,400,"Invalid Sec-WebSocket-Protocol header");return}let v=H.headers["sec-websocket-extensions"],n={};if(this.options.perMessageDeflate&&v!==void 0){let S=new V({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let s=K.parse(v);if(s[V.extensionName])S.accept(s[V.extensionName]),n[V.extensionName]=S}catch(s){F(this,H,U,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let S={origin:H.headers[`${P===8?"sec-websocket-origin":"origin"}`],secure:!!(H.socket.authorized||H.socket.encrypted),req:H};if(this.options.verifyClient.length===2){this.options.verifyClient(S,(s,Y0,Z0,V0)=>{if(!s)return E(U,Y0||401,Z0,V0);this.completeUpgrade(n,x,f,H,U,C,I)});return}if(!this.options.verifyClient(S))return E(U,401)}this.completeUpgrade(n,x,f,H,U,C,I)}completeUpgrade(H,U,C,I,x,y,P){if(!x.readable||!x.writable)return x.destroy();if(x[N])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>O)return E(x,503);let f=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${X("sha1").update(U+B).digest("base64")}`],v=new this.options.WebSocket(null,void 0,this.options);if(C.size){let n=this.options.handleProtocols?this.options.handleProtocols(C,I):C.values().next().value;if(n)f.push(`Sec-WebSocket-Protocol: ${n}`),v._protocol=n}if(H[V.extensionName]){let n=H[V.extensionName].params,S=K.format({[V.extensionName]:[n]});f.push(`Sec-WebSocket-Extensions: ${S}`),v._extensions=H}if(this.emit("headers",f,I),x.write(f.concat(`\r
|
|
35
35
|
`).join(`\r
|
|
36
|
-
`)),x.removeListener("error",D),v.setSocket(x,y,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(v),v.on("close",()=>{if(this.clients.delete(v),this._shouldEmitClose&&!this.clients.size)process.nextTick(_,this)});P(v,I)}}Q.exports=A;function R(
|
|
36
|
+
`)),x.removeListener("error",D),v.setSocket(x,y,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(v),v.on("close",()=>{if(this.clients.delete(v),this._shouldEmitClose&&!this.clients.size)process.nextTick(_,this)});P(v,I)}}Q.exports=A;function R(H,U){for(let C of Object.keys(U))H.on(C,U[C]);return function(){for(let I of Object.keys(U))H.removeListener(I,U[I])}}function _(H){H._state=q,H.emit("close")}function D(){this.destroy()}function E(H,U,C,I){C=C||J.STATUS_CODES[U],I={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(C),...I},H.once("finish",H.destroy),H.end(`HTTP/1.1 ${U} ${J.STATUS_CODES[U]}\r
|
|
37
37
|
`+Object.keys(I).map((x)=>`${x}: ${I[x]}`).join(`\r
|
|
38
38
|
`)+`\r
|
|
39
39
|
\r
|
|
40
|
-
`+C)}function F(
|
|
40
|
+
`+C)}function F(H,U,C,I,x,y){if(H.listenerCount("wsClientError")){let P=Error(x);Error.captureStackTrace(P,F),H.emit("wsClientError",P,C,U)}else E(C,I,x,y)}});$G=S0(DJ(),1),QG=S0(w$(),1),ZG=S0(D6(),1),JG=S0(v4(),1),YG=S0(h4(),1),XG=S0(g4(),1),pJ=S0(S$(),1),o4=S0(qJ(),1),f4=pJ.default;Q3={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},Z3={"Network.requestWillBeSent":{walltime:"wallTime"}},J3={hasUserGesture:!1,redirectHasExtraInfo:!1},Y3={hasExtraInfo:!1},X3={encodedDataLength:0,shouldReportCorbBlocking:!1},K3={initialPriority:"Medium",referrerPolicy:"origin"},W3={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};C3={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};A3={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:""};w3=["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"],S3={"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:[]}};y3={"&":"&","<":"<",">":">",'"':""","'":"'"}});import{readdirSync as t3,readFileSync as s3,existsSync as O5,unlinkSync as e3,watch as $Y}from"fs";import{execSync as w6,spawn as QY,exec as ZY,execFile as n0}from"child_process";import{tmpdir as JY}from"os";import{dirname as YY,join as k6}from"path";import{fileURLToPath as XY}from"url";import{createServer as KY}from"net";import{createHash as WY,randomBytes as GY,timingSafeEqual as VY}from"crypto";import{WebSocket as W5}from"ws";var O9="Accessibility unavailable on this simulator.";import{createRequire as c5}from"module";import{dirname as h6,join as g6}from"path";import{existsSync as d5}from"fs";import{fileURLToPath as X7}from"url";function t$($){return Number.isInteger($)&&$>=224&&$<=231}function R9($,Q,Z){return new Promise((J,Y)=>{let X=setTimeout(()=>Y(Error(`${Z} timed out`)),Q);$.then(()=>{clearTimeout(X),J()},(K)=>{clearTimeout(X),Y(K)})})}class _9{sink;timeoutMs;queue=Promise.resolve();heldModifiers=new Set;closing=!1;discardQueued=!1;closeAttempt;constructor($,Q=250){this.sink=$;this.timeoutMs=Q}key($,Q){if(this.closing)return Promise.resolve();let Z=this.queue.then(async()=>{if(this.discardQueued&&$==="down")return;let J=t$(Q);if(J&&$==="down")this.heldModifiers.add(Q);try{if(await this.sink.key($,Q),J&&$==="up")this.heldModifiers.delete(Q)}finally{if(this.discardQueued&&J&&$==="down")this.heldModifiers.add(Q),await this.releaseModifier(Q)}});return this.queue=Z.catch(()=>{}),Z}drainAndRelease(){if(this.closeAttempt)return this.closeAttempt;this.closing=!0;let $=this.finishClose();return this.closeAttempt=$,$.catch(()=>{if(this.closeAttempt===$)this.closeAttempt=void 0}),$}async releaseModifier($){let Q;for(let Z=0;Z<2;Z++)try{await R9(Promise.resolve().then(()=>this.sink.key("up",$)),this.timeoutMs,"Modifier release"),this.heldModifiers.delete($);return}catch(J){Q=J}throw Q}async finishClose(){let $=[];try{await R9(this.queue,this.timeoutMs,"Keyboard drain")}catch(Z){this.discardQueued=!0,$.push(Z)}let Q=await Promise.allSettled([...this.heldModifiers].map((Z)=>this.releaseModifier(Z)));for(let Z of Q)if(Z.status==="rejected")$.push(Z.reason);try{await R9(Promise.resolve().then(()=>this.sink.close()),this.timeoutMs,"Native keyboard close")}catch(Z){$.push(Z)}if($.length)throw AggregateError($,"Keyboard teardown incomplete")}}function m5($){let Q=$.trim(),Z=/^\d+(\.\d+)?$/.test(Q)?Number(Q):NaN;if(!Number.isFinite(Z)||Z<=0||Z>1000)throw Error(`Invalid max bitrate '${$}': expected Mbps between 0 and 1000 (e.g. 8 or 2.5).`);return Z}function s$($=process.env,Q=console.warn){let Z=$.SERVE_SIM_MAX_BITRATE;if(Z===void 0||Z.trim()==="")return;try{return Math.round(m5(Z)*1e6)}catch(J){Q(`[serve-sim] Ignoring SERVE_SIM_MAX_BITRATE: ${J instanceof Error?J.message:String(J)}`);return}}import{realpathSync as l5,statSync as p5}from"fs";import{homedir as Q7}from"os";import{join as Z7,resolve as J7}from"path";var f6="SERVE_SIM_DEVICE_SET",e$=Z7(Q7(),"Library/Developer/CoreSimulator/Devices"),A9;function D0($){if(A9!==void 0){if($!==void 0)throw Error("--device-set arrived after the device set was settled");return A9.path}let Q=process.env[f6]?.trim(),Z;if($!==void 0)Z=$7($,"--device-set");else if(Q)Z=$7(Q,f6);if(A9={path:Z},Z===void 0)delete process.env[f6];else process.env[f6]=Z;return Z}function $7($,Q){let Z=$.trim(),J=Z==="~"||Z.startsWith("~/")?Z7(Q7(),Z.slice(1)):Z,Y=J7(J),X=!1;try{X=p5(Y).isDirectory()}catch{}if(Z===""||!X)throw Error(`${Q}: invalid device set '${$}': expected an existing directory (a simctl --set path).`);return Y}function b6($,Q){if($===Q)return!0;let Z=(J)=>{try{return l5(J)}catch{return J7(J)}};return Z($??e$)===Z(Q??e$)}function o($){let Q=D0();return Q===void 0?["simctl",...$]:["simctl","--set",Q,...$]}function Y7($){return o(["bootstatus",$])}var n5=c5(import.meta.url),i5=0,o5=1,a5=2,r5=1,t5=2,M6={portrait:1,portraitUpsideDown:2,landscapeRight:3,landscapeLeft:4};function K7(){let $=[g6(h6(process.execPath),"native","serve-sim-native.node"),g6(h6(X7(import.meta.url)),"native","serve-sim-native.node"),g6(h6(X7(import.meta.url)),"..","dist","native","serve-sim-native.node")];for(let Q of $)if(d5(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 v6;function u6(){if(!v6)v6=
|
|
43
|
+
Run \`bun run build.ts\` to build the native addon.`)}function T9(){return g6(h6(K7()),"..","simduo","serve-sim-duo-hid")}var v6;function u6(){if(!v6)v6=n5(K7()),v6.setDeviceSet(D0()??null);return v6}class P9{handle;keys;constructor($){this.handle=new(u6()).SimHID($,T9()),this.keys=new _9(this.handle)}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,K){return this.guard("multiTouch",()=>this.handle.multiTouch($,Q,Z,J,Y,X,K),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.keys.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)}isFoldable(){return this.guard("isFoldable",()=>this.handle.isFoldable(),!1)}close(){return this.keys.drainAndRelease()}pose($,Q){return this.guard("pose",()=>this.handle.pose($,Q),!1)}hinge($){return this.guard("hinge",()=>this.handle.hinge($),!1)}}class D9{handle;constructor($,Q=s$()){this.handle=new(u6()).SimCapture($,Q??null)}start(){return this.handle.start()}setPreferredScreenSize($,Q){return this.handle.setPreferredScreenSize($,Q)}subscribeMjpeg($){return this.handle.subscribe(i5,(Q,Z,J,Y)=>{return $({data:Q,width:Z,height:J})})}subscribeAvcc($){return this.handle.subscribe(o5,(Q,Z,J,Y)=>{return $({data:Q,width:Z,height:J,isDescription:(Y&r5)!==0,isKeyframe:(Y&t5)!==0})})}diagnostics(){if(!this.handle.diagnostics)return Promise.reject(Error("native capture diagnostics unavailable in this build"));return this.handle.diagnostics()}subscribeSize($){return this.handle.subscribe(a5,async(Q,Z,J)=>{await $({width:Z,height:J})})}snapshotJpeg(){return this.handle.snapshotJpeg()}get supportsRecording(){return typeof this.handle.startRecording==="function"&&typeof this.handle.stopRecording==="function"}startRecording($,Q){if(!this.handle.startRecording)return Promise.reject(Error("screen recording unavailable in this native build"));return this.handle.startRecording($,Q.codec,Q.fps,Q.rotation,Q.bitrate??0)}stopRecording(){if(!this.handle.stopRecording)return Promise.reject(Error("screen recording unavailable in this native build"));return this.handle.stopRecording()}stop(){return this.handle.stop()}}function m6($){return u6().axDescribe($)}function l6($){return u6().axFrontmost($)}var q9=500,W7=500,s5=2000,e5=15000;function $Q($){return $[0]?.frame??{x:0,y:0,width:1,height:1}}function QQ($,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 ZQ($){let Q=$Q($),Z=[],J=(Y,X)=>{if(Z.length>=q9)return;let K=Y.frame;if(!QQ(K,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:K});for(let G=0;G<Y.children.length&&Z.length<q9;G++)J(Y.children[G],`${X}.${G}`)};for(let Y=0;Y<$.length&&Z.length<q9;Y++)J($[Y],String(Y));return{screen:{width:Q.width,height:Q.height},elements:Z}}async function JQ($){let Q;try{Q=JSON.parse(await m6($))}catch{return{screen:{width:1,height:1},elements:[],errors:[O9]}}return ZQ(Q)}function YQ($){return $?.errors?.includes(O9)??!1}function XQ($){return $.elements.length>0&&$.screen.width>1&&$.screen.height>1}async function KQ($){let Q=[];try{let Z=await JQ($);if(Z.errors?.length)return Z;if(!XQ(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 WQ($){return`data: ${JSON.stringify($)}
|
|
44
44
|
|
|
45
|
-
`}function
|
|
46
|
-
`);if(N<0)return;try{W(void 0,
|
|
47
|
-
`)})}function
|
|
48
|
-
`,"ascii");function
|
|
45
|
+
`}function GQ({udid:$}){let Q=new Set,Z=null,J=null,Y=W7,X=!1,K=!1,V=()=>{if(K||Q.size===0||Z)return;Z=setTimeout(G,Y)},G=async()=>{if(Z=null,K||X||Q.size===0){V();return}X=!0;try{let z=await KQ($),W=WQ(z);if(W!==J){for(let B of Q)B.write(W);Y=W7}else Y=Math.min(Y*2,s5);if(J=W,YQ(z))Y=e5}finally{X=!1,V()}};return{addClient(z){if(K)return()=>{};if(Q.add(z),J)z.write(J);return G(),()=>{if(Q.delete(z),Q.size===0&&Z)clearTimeout(Z),Z=null}},dispose(){if(K)return;if(K=!0,Z)clearTimeout(Z),Z=null;Q.clear(),J=null}}}function G7(){let $=new Map;return{get(Q){let Z=$.get(Q);if(Z)return Z;let J=GQ({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 FQ}from"crypto";import{existsSync as z7,readFileSync as B7}from"fs";import{join as E9}from"path";import{tmpdir as VQ}from"os";import{join as p6}from"path";import{chmodSync as OX,closeSync as RX,lstatSync as _X,mkdirSync as zQ,openSync as AX,readdirSync as TX,readFileSync as PX,renameSync as BQ,unlinkSync as DX,writeFileSync as HQ,writeSync as qX}from"fs";var t0=p6(VQ(),"serve-sim"),EX=p6(t0,"server.json");function NQ($){return p6(t0,`server-${$}.json`)}function V7($,Q,Z="/",J="127.0.0.1"){let Y=J==="0.0.0.0"||J==="::"?"127.0.0.1":J,X=Z.replace(/^\/+/,"").replace(/\/+$/,""),K=X===""?"":`/${X}`,V=D0();return{...V!==void 0?{deviceSet:V}:{},pid:process.pid,port:Q,device:$,url:`http://${Y}:${Q}`,streamUrl:`http://${Y}:${Q}${K}/helper/${$}/stream.mjpeg`,wsUrl:`ws://${Y}:${Q}${K}/helper/${$}/ws`}}function c6($){zQ(t0,{recursive:!0});let Q=NQ($.device),Z=`${Q}.${process.pid}.tmp`;HQ(Z,JSON.stringify($,null,2)),BQ(Z,Q)}var IX=p6(t0,"exec-tokens");var H7=E9(t0,"simcam"),MQ=3000;function UQ($){return E9(H7,`${$}.pid`)}function jQ($){return E9(H7,`${$}.bundles.json`)}function N7($){return`/tmp/serve-sim-cam-${FQ("sha1").update($).digest("hex").slice(0,12)}.sock`}function CQ($){try{return process.kill($,0),!0}catch{return!1}}function I9($){try{let Q=Number(B7(UQ($),"utf-8").trim());return Number.isInteger(Q)&&Q>0?Q:null}catch{return null}}function LQ($){if(!$||typeof $!=="object"||Array.isArray($))throw Error("invalid camera helper reply");return $}async function OQ($,Q){let Z=N7($);if(!z7(Z))throw Error("camera helper socket not found");let J=await import("net");return new Promise((Y,X)=>{let K=J.createConnection(Z);K.setEncoding("utf8");let V="",G=!1,z,W=(B,N)=>{if(G)return;if(G=!0,z)clearTimeout(z);if(B)X(B);else Y(N??{})};K.on("data",(B)=>{V+=B;let N=V.indexOf(`
|
|
46
|
+
`);if(N<0)return;try{W(void 0,LQ(JSON.parse(V.slice(0,N))))}catch(j){W(j)}K.end()}),K.on("error",W),K.on("close",()=>W(Error("socket closed"))),z=setTimeout(()=>{K.destroy(),W(Error("helper timeout"))},MQ),K.write(JSON.stringify(Q)+`
|
|
47
|
+
`)})}function RQ($){let Q=I9($);return Q!==null&&CQ(Q)&&z7(N7($))}function _Q($){let Q;try{let J=JSON.parse(B7(jQ($),"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=I9($);if(Z===null||Q.helperPid!==Z)return[];return Q.bundleIds.filter((J)=>typeof J==="string")}async function F7($){if(!RQ($))return{udid:$,alive:!1};let Q=I9($),Z=_Q($);try{return{...await OQ($,{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 AQ}from"node:child_process";import{promisify as TQ}from"node:util";var PQ=TQ(AQ),M7=async($)=>(await PQ("/usr/bin/xcrun",$,{timeout:5000})).stdout,x9="com.apple.coredevice.dtuhidd.active";function U7($){return $.trim()===`${x9} 1`}async function j7($,Q=M7){try{let Z=U7(await Q(o(["spawn",$,"notifyutil","-g",x9])));if(Z)console.warn(`[hid] Device Hub has disconnected legacy input. Run serve-sim repair-input -d ${$} before using touch or keyboard. Repair restarts SpringBoard and closes running apps.`);return Z}catch{return}}async function C7($,Q=M7){try{return U7(await Q(o(["spawn",$,"notifyutil","-g",x9])))}catch{return null}}function L7($){let Q="prefix",Z=Buffer.allocUnsafe(4),J=Z,Y=0,X;return{push(K){let V=0;while(V<K.length){let G=Math.min(K.length-V,J.length-Y);if(K.copy(J,Y,V,V+G),V+=G,Y+=G,Y!==J.length)continue;if(Y=0,Q==="prefix"){let z=Z.readUInt32BE(0);if(z<1||z>65536)throw Error("Invalid Duo render header");J=Buffer.allocUnsafe(z),Q="header"}else if(Q==="header"){let{jpegLength:z,...W}=JSON.parse(J.toString());if(!Number.isInteger(z)||z<1||z>32000000)throw Error("Invalid Duo render frame");X=W,J=Buffer.allocUnsafe(z),Q="frame"}else{let z=J;J=Z,Q="prefix",$({jpeg:z,projection:X})}}}}}import{spawn as qQ,execFileSync as EQ}from"node:child_process";import{existsSync as _7}from"node:fs";import{dirname as O7,join as U6}from"node:path";import{fileURLToPath as IQ}from"node:url";import{homedir as DQ}from"node:os";function L0($,Q=DQ()){if(!Q||Q==="/")return $;let Z=Q.replace(/\/+$/,"").replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),J=new RegExp(`${Z}(?![A-Za-z0-9_-])(?!\\.[A-Za-z0-9_-])`,"g"),Y=(X)=>{if(typeof X==="string")return X.replace(J,"~");if(Array.isArray(X))return X.map(Y);if(X&&typeof X==="object")return Object.fromEntries(Object.entries(X).map(([K,V])=>[K,Y(V)]));return X};return Y($)}class z0 extends Error{stage;reason;details;constructor($,Q,Z={}){super(Q);this.stage=$;this.reason=Q;this.details=Z;this.name="DuoRendererError"}}var xQ="SharedFrameworks/DeviceKit.framework/Versions/A/PlugIns/CoreDevicePopDeviceKitExtension.devicekitplugin/Contents/Resources/V68.usdz",wQ=2048;function w9($){return U6($,"..",xQ)}function S9($=process.env,Q=()=>EQ("/usr/bin/xcode-select",["-p"],{encoding:"utf8",timeout:5000}).trim(),Z=_7){let J=$.DEVELOPER_DIR?"DEVELOPER_DIR":"xcode-select",Y;try{Y=$.DEVELOPER_DIR??Q()}catch(K){return{developerDir:null,source:J,modelPath:null,exists:!1,error:K instanceof Error?K.message:String(K)}}let X=w9(Y);return{developerDir:Y,source:J,modelPath:X,exists:Z(X)}}function k9(){let $=U6("simduo","serve-sim-duo-render"),Q=O7(IQ(import.meta.url));return[U6(O7(process.execPath),$),U6(Q,$),U6(Q,"..","dist",$)].find(_7)??null}var R7=new Set;function A7($,Q=console.error){let Z=`${$.stage}\x00${$.reason}`;if(R7.has(Z))return!1;R7.add(Z);let J=L0($.details),Y=Object.entries(J).filter(([,X])=>X!=null&&X!=="").map(([X,K])=>`${X}=${JSON.stringify(K)}`).join(" ");return Q(`[duo-renderer] ${$.stage} failed: ${L0($.reason)}${Y?` (${Y})`:""}`),!0}class y9{onFailure;child;pending;closed=!1;stderrTail="";modelPath;constructor($){this.onFailure=$;let Q=k9();if(!Q)throw new z0("worker_missing","Duo renderer is missing. Rebuild serve-sim.");let Z=S9();if(!Z.developerDir||!Z.modelPath)throw new z0("developer_dir","Could not resolve the selected Xcode (xcode-select -p failed).",{source:Z.source,error:Z.error});if(!Z.exists)throw new z0("model_lookup","The selected Xcode does not include the iPhone Duo 3D model.",{model_path:Z.modelPath,developer_dir:Z.developerDir,source:Z.source});this.modelPath=Z.modelPath,this.child=qQ(Q,[Z.modelPath],{stdio:"pipe"}),this.child.stderr.on("data",(Y)=>{let X=Y.toString();this.stderrTail=(this.stderrTail+X).slice(-wQ),console.error("[duo-renderer]",X.trim())}),this.child.on("error",(Y)=>this.fail(new z0("worker_spawn",`Duo renderer could not start: ${Y.message}`,{executable:Q,code:Y.code,model_path:this.modelPath}))),this.child.stdin.on("error",(Y)=>this.fail(new z0("worker_exit",`Duo renderer input closed: ${Y.message}`,this.exitDetails()))),this.child.on("exit",(Y,X)=>this.fail(new z0("worker_exit","Duo renderer exited",this.exitDetails(Y,X))));let J=L7((Y)=>{let X=this.pending;if(this.pending=void 0,X)clearTimeout(X.timer),X.resolve(Y)});this.child.stdout.on("data",(Y)=>{try{J.push(Y)}catch(X){this.fail(new z0("protocol",`Duo renderer sent a malformed frame: ${X instanceof Error?X.message:String(X)}`,this.exitDetails()))}})}render($,Q,Z,J,Y=!1){if(this.closed||this.pending)return Promise.reject(Error("Duo renderer is unavailable or busy"));return new Promise((X,K)=>{let V=setTimeout(()=>this.fail(new z0("timeout","Duo renderer timed out after 10s",{...this.exitDetails(),jpeg_bytes:$.length,panel:Q,hinge_degrees:Z})),1e4);this.pending={resolve:X,reject:K,timer:V};let G=Buffer.from(JSON.stringify({jpegLength:$.length,panel:Q,hingeDegrees:Z,rollDegrees:J,fullResolution:Y})),z=Buffer.alloc(4);z.writeUInt32BE(G.length),this.child.stdin.write(Buffer.concat([z,G,$]))})}exitDetails($,Q){return{model_path:this.modelPath,...$!==void 0?{exit_code:$}:{},...Q!==void 0?{signal:Q}:{},...this.stderrTail?{stderr_tail:this.stderrTail.trim()}:{}}}fail($){if(this.closed)return;let Q=this.pending;if(this.pending=void 0,Q)clearTimeout(Q.timer),Q.reject($);this.close(),this.onFailure?.($)}close(){if(this.closed)return;this.closed=!0,this.child.stdin.end(),this.child.kill();let $=this.pending;if(this.pending=void 0,$)clearTimeout($.timer),$.reject(Error("Duo renderer closed"))}}var f9=800,SQ=300,T7=180,kQ=11000,yQ=Buffer.from(`\r
|
|
48
|
+
`,"ascii");function fQ($){let Q=new Uint8Array($.byteLength);return Q.set($),Q}function bQ($,Q){if($.byteLength!==Q.byteLength)return!1;return Buffer.from($.buffer,$.byteOffset,$.byteLength).equals(Buffer.from(Q.buffer,Q.byteOffset,Q.byteLength))}function P7($){if($ instanceof z0)return $;let Q=$ instanceof Error?$.message:String($);return new z0("worker_exit",Q)}function vQ($,Q,Z=f9){let J=Math.min(1,Math.max(0,(Q-$.began)/Z));if(J>=1)return $.target;return $.from+($.target-$.from)*(1-(1-J)**3)}class b9{options;renderer;projection;busy=!1;pending=!1;pendingSharpen=!1;settleTimer;rendering;cached;delivered=new WeakSet;foldTimer;rotationTimer;fold;hingeDegrees;viewRoll=0;viewOrientation="portrait";panel="cover";jpeg=null;closed=!1;responses=new Set;starting=new Map;rendererStartedAt=0;rendererReady=!1;lastError;framesPublished=0;lastFrameAt;constructor($){this.options=$}get hinge(){return this.hingeDegrees}get viewOrientationName(){return this.viewOrientation}noteHinge($,Q=performance.now()){this.hingeDegrees=$;let Z=this.fold;if(Z&&Q>=Z.began+f9&&Math.abs($-Z.target)<0.6)this.fold=void 0}beginPose($,Q,Z=performance.now()){clearTimeout(this.foldTimer),this.fold={from:$,target:Q,began:Z},this.tickFold(Z)}cancelPose(){clearTimeout(this.foldTimer),this.fold=void 0,this.requestFrame()}finishPose($){clearTimeout(this.foldTimer),this.fold=void 0,this.hingeDegrees=$,this.requestFrame()}displayAngle($=performance.now()){let Q=this.fold;if(!Q)return this.hingeDegrees??0;return vQ(Q,$)}setPanel($){this.panel=$}onCapturedFrame($){this.jpeg=$,this.requestFrame()}projectionFrame(){if(!this.projection)return null;return Buffer.concat([Buffer.from([131]),Buffer.from(JSON.stringify(this.projection))])}animateRotation($){clearTimeout(this.rotationTimer),this.viewOrientation=$;let Q={portrait:0,landscape_left:-90,portrait_upside_down:-180,landscape_right:90}[$]??0,Z=this.viewRoll,J=(Q-Z+540)%360-180,Y=performance.now(),X=()=>{if(this.closed)return;let K=Math.min(1,(performance.now()-Y)/SQ),V=K*K*(3-2*K);if(this.viewRoll=K===1?Q:Z+J*V,this.requestFrame(),K<1)this.rotationTimer=setTimeout(X,16)};X()}attach($,Q){if(!this.renderer){let Z;try{Z=this.options.createRenderer((J)=>this.onRendererFailure(Z,J))}catch(J){let Y=P7(J);throw this.noteFailure(Y),Y}this.renderer=Z,this.rendererStartedAt=performance.now(),this.rendererReady=!1,this.busy=!1}if(Q){let Z={onFirstFrame:Q.onFirstFrame},J=this.options.firstFrameTimeoutMs??kQ;Z.timer=setTimeout(()=>this.failFirstFrame($,J),J),Z.timer.unref?.(),this.starting.set($,Z)}this.responses.add($),this.requestFrame()}detach($){if(this.clearStart($),this.responses.delete($),this.responses.size)return;clearTimeout(this.settleTimer),this.settleTimer=void 0,this.renderer?.close(),this.renderer=void 0}close(){this.closed=!0,clearTimeout(this.settleTimer),this.settleTimer=void 0,clearTimeout(this.foldTimer),clearTimeout(this.rotationTimer),this.fold=void 0,this.cached=void 0,this.renderer?.close(),this.renderer=void 0;for(let $ of this.starting.keys())this.clearStart($);this.responses.clear()}diagnostics(){return{renderer:this.renderer?this.rendererReady?"ready":"starting":"absent",busy:this.busy,attached:this.responses.size,awaiting_first_frame:this.starting.size,hinge_degrees:this.hingeDegrees??null,panel:this.panel,has_capture_frame:this.jpeg!=null,frames_published:this.framesPublished,last_frame_at:this.lastFrameAt??null,last_error:this.lastError??null}}clearStart($){let Q=this.starting.get($);if(!Q)return;clearTimeout(Q.timer),this.starting.delete($)}failFirstFrame($,Q){if(!this.starting.has($))return;let Z=new z0("first_frame",`No 3D frame within ${Math.round(Q/1000)}s`,{has_capture_frame:this.jpeg!=null,hinge_known:this.hingeDegrees!=null||this.fold!=null,renderer:this.renderer?"running":"absent",render_in_flight:this.busy});this.noteFailure(Z),this.detach($),this.options.onStreamError($,Z)}noteFailure($){this.lastError={at:new Date().toISOString(),stage:$.stage,reason:$.reason},this.options.onRendererEvent?.({phase:"failed",error:$})}onRendererFailure($,Q){if(!$||this.renderer!==$)return;this.renderer=void 0,this.noteFailure(Q);for(let Z of[...this.responses])this.options.onStreamError(Z,Q)}requestFrame($=!1){let Q=this.renderer,Z=this.jpeg;if(this.closed||!this.responses.size||!Q||!Z||this.hingeDegrees==null&&!this.fold)return;let J=this.panel,Y=this.viewRoll,X=this.displayAngle(),K=this.sameFrame(Z,J,X,Y,this.cached)||this.sameFrame(Z,J,X,Y,this.rendering),V=this.cached?.sharpened===!0&&this.sameFrame(Z,J,X,Y,this.cached);if(V)clearTimeout(this.settleTimer),this.settleTimer=void 0;else if(!$&&!K)clearTimeout(this.settleTimer),this.settleTimer=setTimeout(()=>this.requestFrame(!0),T7),this.settleTimer.unref?.();else if(!$&&!this.settleTimer)this.settleTimer=setTimeout(()=>this.requestFrame(!0),T7),this.settleTimer.unref?.();if(!this.busy&&this.sameFrame(Z,J,X,Y,this.cached)&&(V||!$)){this.publishCached();return}if(this.busy){if(this.pending=!0,$)this.pendingSharpen=!0;else if(!K)this.pendingSharpen=!1;return}if(this.busy=!0,this.pending=!1,this.pendingSharpen=!1,$)clearTimeout(this.settleTimer),this.settleTimer=void 0;let G=fQ(Z);this.rendering={jpeg:G,panel:J,angle:X,roll:Y},Q.render(G,J,X,Y,$).then(({jpeg:z,projection:W})=>{if(this.closed||this.renderer!==Q)return;if(!this.rendererReady)this.rendererReady=!0,this.options.onRendererEvent?.({phase:"ready",firstFrameMs:Math.round(performance.now()-this.rendererStartedAt)});if(JSON.stringify(this.projection)!==JSON.stringify(W))this.projection=W,this.options.onProjection(Buffer.concat([Buffer.from([131]),Buffer.from(JSON.stringify(W))]));this.cached={jpeg:G,panel:J,angle:X,roll:Y,png:z,sharpened:$},this.delivered=new WeakSet,this.publishCached()}).catch((z)=>{if(this.renderer!==Q)return;this.renderer=void 0,this.noteFailure(P7(z));for(let W of[...this.responses])this.options.onStreamError(W,z);Q.close()}).finally(()=>{if(this.renderer!==Q)return;if(this.rendering=void 0,this.busy=!1,this.pending){let z=this.pendingSharpen;this.pending=!1,this.pendingSharpen=!1,this.requestFrame(z)}})}sameFrame($,Q,Z,J,Y){return Y!=null&&Y.panel===Q&&Y.angle===Z&&Y.roll===J&&bQ(Y.jpeg,$)}publishCached(){let $=this.cached?.png;if(!$)return;for(let Q of this.responses){if(this.delivered.has(Q))continue;if(!Q.destroyed&&!Q.writableEnded&&Q.writableLength===0){let Z=this.starting.get(Q);if(Z)this.clearStart(Q),Z.onFirstFrame();this.writeFrame(Q,$),this.delivered.add(Q),this.framesPublished++,this.lastFrameAt=new Date().toISOString(),this.options.onFrameDelivered?.(Q)}}}tickFold($=performance.now()){if(clearTimeout(this.foldTimer),this.closed||!this.fold)return;if(this.requestFrame(),$<this.fold.began+f9)this.foldTimer=setTimeout(()=>this.tickFold(),16),this.foldTimer.unref?.()}writeFrame($,Q){let Z=Buffer.from(`--frame\r
|
|
49
49
|
Content-Type: image/png\r
|
|
50
50
|
Content-Length: ${Q.length}\r
|
|
51
51
|
\r
|
|
52
|
-
`,"ascii");$.write(Z),$.write(Q),$.write(
|
|
53
|
-
`);Y=K.pop().slice(-4096);for(let
|
|
54
|
-
`).reverse().find((G)=>
|
|
55
|
-
`);Q=J.pop().slice(-4096);for(let Y of J){let X=gQ(Y);if(this.stopped||X==null||X===this.state.hingeDegrees)continue;this.state={...this.state,hingeDegrees:X},this.onState(this.state),this.refreshOrientation()}}),$.on("error",()=>{}),$.once("close",()=>{if(this.monitor===$)this.monitor=void 0;if(this.stopped)return;this.retry=setTimeout(()=>this.watchHinge(),1000),this.retry.unref()})}close(){this.stopped=!0,clearTimeout(this.panelRetry),this.panelMonitor?.kill(),this.panelSeed?.kill(),clearTimeout(this.retry),clearTimeout(this.poll),this.monitor?.kill(),this.enumeration?.kill()}}var mQ=[{id:"closed",label:"Closed",hingeDegrees:0},{id:"book",label:"Book",hingeDegrees:130},{id:"open",label:"Open",hingeDegrees:180}],q7={width:1398,height:2034},E7={width:2007,height:2853};var lQ=mQ.map(({id:$,label:Q,hingeDegrees:Z})=>pQ($,Q,Z));function pQ($,Q,Z){let J=Z<90,Y=J?q7:E7;return{id:$,label:Q,hingeDegrees:Z,coverActive:J,width:Y.width,height:Y.height}}function d6($){let Q=$.trim().toLowerCase();if(Q==="cover")return d6("closed");if(Q==="inner"||Q==="openflat"||Q==="flat")return d6("open");return lQ.find((Z)=>Z.id===Q)??null}function I7($){if($.primaryPanel)return $.primaryPanel;return($.hingeDegrees??0)<90?"cover":"inner"}function x7($){let Q=$==="cover",Z=Q?q7:E7;return{coverActive:Q,width:Z.width,height:Z.height}}import{createReadStream as HZ}from"fs";import{mkdir as BZ,rm as v0,stat as NZ}from"fs/promises";import{tmpdir as FZ}from"os";import{join as c7}from"path";import{randomUUID as d7}from"crypto";function cQ($){return $==="landscape_left"||$==="landscape_right"}function dQ($){if(!$||$.width<=0||$.height<=0)return null;let Q=cQ($.orientation)||$.width>$.height,Z=Q?Math.max($.width,$.height):Math.min($.width,$.height),J=Q?Math.min($.width,$.height):Math.max($.width,$.height);if(Z===$.width&&J===$.height)return $;return{...$,width:Z,height:J}}function w7($){let Q=dQ($),Z=nQ($?.orientation),J=Math.abs(Z)===90,Y=!!$&&$.width>$.height,X=Z===180||J&&!Y;return{displayConfig:Q,rotationDegrees:X?Z:0,needsCssRotation:X,inputOrientation:X?$?.orientation:void 0}}function nQ($){switch($){case"landscape_left":return 90;case"landscape_right":return-90;case"portrait_upside_down":return 180;default:return 0}}var S7="X-Serve-Sim-Recording",iQ=60,k7=1800000,y7=300000,oQ=new Set(["h264","hevc"]);function f7($){let Q=($.get("codec")??"h264").toLowerCase();if(!oQ.has(Q))return{error:`unsupported codec: ${Q} (h264|hevc)`};let Z=$.get("fps"),J=Z==null?iQ:Number(Z);if(!Number.isInteger(J)||J<1||J>120)return{error:"fps must be an integer 1..120"};let Y=$.get("bitrate"),X;if(Y!=null){if(X=Number(Y),!Number.isInteger(X)||X<1e5||X>500000000)return{error:"bitrate must be an integer in bits/s (100000..500000000)"}}return{codec:Q,fps:J,...X!=null?{bitrate:X}:{}}}function b7($){return w7({width:$.width,height:$.height,orientation:$.orientation??"portrait"}).rotationDegrees}function v7($=new Date){let Q=(J)=>String(J).padStart(2,"0");return`serve-sim-recording-${[$.getFullYear(),Q($.getMonth()+1),Q($.getDate()),Q($.getHours()),Q($.getMinutes()),Q($.getSeconds())].join("-")}.mp4`}var aQ={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,A0=[],g9=new Set;function g7($){for(let Q of g9)try{Q($)}catch{}}function _0($){let Q={...$,id:rQ++,timestamp:$.timestamp??new Date().toISOString(),msg:$.msg??$.summary};if(A0.push(Q),A0.length>500)A0=A0.slice(A0.length-500);return g7(Q),Q}function n6($,Q,Z={}){let J=A0.findIndex((X)=>X.id===$);if(J<0)return null;let Y={...A0[J],...Q,id:$,...Q.summary!=null&&Q.msg==null?{msg:Q.summary}:{}};if(A0[J]=Y,Z.notify!==!1)g7(Y);return Y}function i6($={}){let{device:Q,sinceId:Z}=$,J=tQ($.limit),Y=A0.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 u7($){return g9.add($),()=>g9.delete($)}function m7($,Q,Z,J){let Y=sQ(Z);if(!Y)return null;switch(Q){case 3:{let X=b0(Y.type),K=s0(Y.x),z=s0(Y.y);if(!X||K==null||z==null)return null;return{device:$,source:"hid",kind:"touch",action:X,summary:`Touch ${X} ${e0(K,z)}`,details:h9({...Y,x:K,y:z},J)}}case 4:{let X=b0(Y.button);if(!X)return null;let K=b0(Y.phase)??"press";return{device:$,source:"hid",kind:"button",action:X,summary:K==="press"?`Button ${X}`:`Button ${X} ${K}`,details:{...Y,phase:K}}}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:h9(Y,J)}}case 6:{let X=b0(Y.type),K=s0(Y.usage);if(!X||K==null)return null;let z=$Z(K),G=QZ(K),V={...Y};if(G)delete V.usage,V.key="character",V.redacted=!0;else V.usage=K,V.key=z;return{device:$,source:"hid",kind:"key",action:X,summary:G?`Key ${X} character`:`Key ${X} ${z}`,details:V}}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),K=eQ(Y.enabled);if(!X||K==null)return null;return{device:$,source:"hid",kind:"ca-debug",action:X,summary:`CoreAnimation ${X} ${K?"on":"off"}`,details:{...Y,enabled:K}}}case 9:return{device:$,source:"hid",kind:"memory-warning",action:"trigger",summary:"Memory warning"};case 10:{let X=s0(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=s0(Y.dx),K=s0(Y.dy);if(X==null||K==null)return null;return{device:$,source:"hid",kind:"scroll",action:"wheel",summary:`Scroll ${ZZ(X,K)}`,details:h9({...Y,dx:X,dy:K},J)}}case 12:return{device:$,source:"hid",kind:"software-keyboard",action:"toggle",summary:"Software keyboard"};default:return null}}function l7($,Q){let Z=YZ($);if(Z.length===0)return null;if(XZ(Z))return null;let J=p7(Q?.exitCode),Y=JZ(Q),X=KZ(Z);if(X){let{verb:z,args:G}=X;if(z==="install"&&G.length>=2){let[V]=G;return{device:V,source:"exec",kind:"app",action:"install",status:J,summary:"Install app",details:Y}}if(z==="addmedia"&&G.length>=2){let[V]=G;return{device:V,source:"exec",kind:"media",action:"addmedia",status:J,summary:"Add media",details:Y}}if(z==="launch"&&G.length>=2){let[V,W]=G,H=W==="com.apple.springboard";return{device:V,source:"exec",kind:H?"button":"app",action:H?"home":"launch",status:J,summary:H?"Home":`Launch ${W}`,details:{...Y,bundleId:W}}}if(z==="terminate"&&G.length>=2){let[V,W]=G;return{device:V,source:"exec",kind:"app",action:"terminate",status:J,summary:`Terminate ${W}`,details:{...Y,bundleId:W}}}if(z==="io"&&G.length>=2&&G[1]==="screenshot")return{device:G[0],source:"exec",kind:"screenshot",action:"capture",status:J,summary:"Screenshot",details:Y}}let K=WZ(Z);if(K){let{verb:z,args:G}=K,V=GZ(G);if(z==="button"){let W=j6(G)??"home";return{device:V,source:"exec",kind:"button",action:W,status:J,summary:`Button ${W}`,details:Y}}if(z==="tap"){let[W,H]=G;return{device:V,source:"exec",kind:"tap",action:"tap",status:J,summary:`Tap ${e0(Number(W),Number(H))}`,details:Y}}if(z==="gesture")return{device:V,source:"exec",kind:"gesture",action:"send",status:J,summary:"Gesture",details:Y};if(z==="rotate"){let W=j6(G);return{device:V,source:"exec",kind:"rotate",action:W,status:J,summary:W?`Rotate ${W}`:"Rotate",details:Y}}if(z==="memory-warning")return{device:V,source:"exec",kind:"memory-warning",action:"trigger",status:J,summary:"Memory warning",details:Y};if(z==="ca-debug"){let W=j6(G),H=G.find((N)=>N==="on"||N==="off");return{device:V,source:"exec",kind:"ca-debug",action:W,status:J,summary:`CoreAnimation ${W??"debug"}${H?` ${H}`:""}`,details:Y}}if(z==="camera"){let W=zZ(G);if(W==="status"||W==="list-webcams")return null;return{device:V,source:"exec",kind:"camera",action:W??"start",status:J,summary:W?`Camera ${W}`:"Camera",details:Y}}if(z==="ui"){let W=j6(G);return{device:V,source:"exec",kind:"ui-setting",action:W,status:J,summary:W?`UI ${W}`:"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 tQ($){if(!Number.isFinite($??NaN))return 500;return Math.min(500,Math.max(1,Math.floor($)))}function sQ($){if(!$||typeof $!=="object"||Array.isArray($))return null;return $}function b0($){return typeof $==="string"&&$.length>0?$:null}function s0($){return typeof $==="number"&&Number.isFinite($)?$:null}function eQ($){return typeof $==="boolean"?$:null}function $Z($){if($>=4&&$<=29)return String.fromCharCode(97+$-4);if($>=30&&$<=38)return String($-29);if($===39)return"0";return aQ[$]??`usage ${$}`}function QZ($){return $>=4&&$<=39||$>=44&&$<=56||$>=84&&$<=87||$>=89&&$<=99}function h9($,Q){if(!Q||Q.width<=0||Q.height<=0)return $;return{...$,screen:Q}}function e0($,Q){if(!Number.isFinite($)||!Number.isFinite(Q))return"";return`${u9($)},${u9(Q)}`}function ZZ($,Q){return`${h7($)},${h7(Q)}`}function u9($){return $.toFixed(3).replace(/0+$/,"").replace(/\.$/,"")}function h7($){let Q=u9($);return $>0?`+${Q}`:Q}function p7($){if($==null)return;return $===0?"ok":"error"}function JZ($){return p7($?.exitCode)?{exitCode:$?.exitCode}:{}}function YZ($){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 XZ($){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 KZ($){let Q=$.findIndex((Y)=>Y==="simctl");if(Q<0||$[Q-1]!=="xcrun")return null;let Z=$[Q+1]==="--set"?Q+3:Q+1,J=$[Z];if(!J)return null;return{verb:J,args:$.slice(Z+1)}}function WZ($){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 GZ($){for(let Q=0;Q<$.length;Q++){let Z=$[Q];if((Z==="-d"||Z==="--device")&&$[Q+1])return $[Q+1]}return}function j6($){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 VZ($){if($.includes("--list-webcams"))return"list-webcams";if($.includes("--stop-webcam"))return"stop-webcam";return j6($)}function zZ($){let Q=VZ($);if(Q==="status"||Q==="list-webcams"||Q==="stop-webcam")return Q;return"start"}var MZ=4,UZ=130,jZ=Buffer.from(`\r
|
|
56
|
-
`,"ascii"),
|
|
52
|
+
`,"ascii");$.write(Z),$.write(Q),$.write(yQ)}}import{execFile as hQ,spawn as gQ}from"node:child_process";function uQ($){let Q=/^angle (\d+(?:\.\d+)?)$/.exec($.trim()),Z=Q?Number(Q[1]):NaN;return Number.isFinite(Z)&&Z>=0&&Z<=180?Z:null}function mQ($){let Q={},Z={Portrait:"portrait","Portrait Upside Down":"portrait_upside_down","Landscape Left":"landscape_left","Landscape Right":"landscape_right"};for(let J of $.split(/(?=^\s*\(\d+\)[^\n]*:)/m)){if(!/^\s*Screen Type:\s*Integrated\s*$/m.test(J))continue;let Y=/^\s*Device Name:\s*(\S+)/m.exec(J)?.[1],X=Z[/^\s*UI Orientation:\s*([^\r\n]+)/m.exec(J)?.[1]?.trim()??""];if(!X)continue;if(Y==="primary")Q.cover=X;if(Y==="primary-1")Q.inner=X}return Q}function v9($){if(!/\[(?:com\.apple\.SpringBoard:)?DisplayContentMode\]/.test($))return null;if(/\.cover:pri\b/.test($))return"cover";if(/\.inner:pri\b/.test($))return"inner";return null}class h9{udid;onState;options;stopped=!1;monitor;enumeration;panelMonitor;panelSeed;panelRetry;retry;poll;state={orientations:{}};hingeFailureLogged=!1;spawn;execFile;constructor($,Q,Z){this.udid=$;this.onState=Q;this.options=Z;this.spawn=Z.spawn??gQ,this.execFile=Z.execFile??hQ,this.watchPanels(),this.watchHinge(),this.refreshOrientation()}refreshOrientation(){if(this.stopped||this.enumeration)return;if(this.poll)clearTimeout(this.poll);this.enumeration=this.execFile("/usr/bin/xcrun",o(["io",this.udid,"enumerate"]),{timeout:3000,maxBuffer:1048576},($,Q)=>{if(this.enumeration=void 0,this.stopped)return;if(!$){let Z=mQ(Q);if(JSON.stringify(Z)!==JSON.stringify(this.state.orientations))this.state={...this.state,orientations:Z},this.onState(this.state)}this.poll=setTimeout(()=>this.refreshOrientation(),1000),this.poll.unref()})}watchPanels(){if(this.stopped)return;let $='process == "SpringBoard" AND category == "DisplayContentMode" AND (eventMessage CONTAINS ".cover:pri" OR eventMessage CONTAINS ".inner:pri")',Q=!1,Z=(X)=>{let K=v9(X);if(!K||this.stopped)return;if(K===this.state.primaryPanel)return;this.state={...this.state,primaryPanel:K},this.onState(this.state),this.refreshOrientation()},J=this.spawn("/usr/bin/xcrun",o(["spawn",this.udid,"log","stream","--style","compact","--predicate",$]),{stdio:["ignore","pipe","ignore"]});this.panelMonitor=J;let Y="";J.stdout.setEncoding("utf8"),J.stdout.on("data",(X)=>{Y+=X;let K=Y.split(`
|
|
53
|
+
`);Y=K.pop().slice(-4096);for(let V of K){if(v9(V))Q=!0;Z(V)}}),this.panelSeed=this.execFile("/usr/bin/xcrun",o(["spawn",this.udid,"log","show","--last","boot","--style","compact","--predicate",$]),{timeout:1e4,maxBuffer:4194304},(X,K)=>{if(this.panelSeed=void 0,!X&&!Q){let V=K.split(`
|
|
54
|
+
`).reverse().find((G)=>v9(G));if(V)Z(V)}}),J.on("error",()=>{}),J.once("close",()=>{if(this.panelMonitor===J)this.panelMonitor=void 0;if(this.stopped)return;this.panelRetry=setTimeout(()=>this.watchPanels(),1000),this.panelRetry.unref()})}watchHinge(){if(this.stopped)return;let $;try{$=this.options.duoHelper()}catch(Y){console.error(`[duo] Hinge reader unavailable: ${Y instanceof Error?Y.message:String(Y)}`);return}let Q=this.spawn("/usr/bin/xcrun",o(["spawn",this.udid,$,"watch-angle"]),{stdio:["pipe","pipe","pipe"]});this.monitor=Q;let Z="",J="";Q.stdin.on("error",()=>{}),Q.stderr.setEncoding("utf8"),Q.stderr.on("data",(Y)=>{J=(J+Y).slice(-1024)}),Q.stdout.setEncoding("utf8"),Q.stdout.on("data",(Y)=>{Z+=Y;let X=Z.split(`
|
|
55
|
+
`);Z=X.pop().slice(-4096);for(let K of X){let V=uQ(K);if(this.stopped||V==null||V===this.state.hingeDegrees)continue;this.state={...this.state,hingeDegrees:V},this.onState(this.state),this.refreshOrientation()}}),Q.on("error",()=>{}),Q.once("close",(Y,X)=>{if(this.monitor===Q)this.monitor=void 0;if(this.stopped)return;if(!this.hingeFailureLogged){this.hingeFailureLogged=!0;let K=J.trim()||(X?`signal ${X}`:`exit code ${Y}`);console.error(`[duo] Hinge reader stopped (${K}); retrying.`)}this.retry=setTimeout(()=>this.watchHinge(),1000),this.retry.unref()})}close(){this.stopped=!0,clearTimeout(this.panelRetry),this.panelMonitor?.kill(),this.panelSeed?.kill(),clearTimeout(this.retry),clearTimeout(this.poll),this.monitor?.stdin?.end(),this.monitor?.kill(),this.enumeration?.kill()}}var lQ=[{id:"closed",label:"Closed",hingeDegrees:0},{id:"book",label:"Book",hingeDegrees:130},{id:"open",label:"Open",hingeDegrees:180}],D7={width:1398,height:2034},q7={width:2007,height:2853};var pQ=lQ.map(({id:$,label:Q,hingeDegrees:Z})=>cQ($,Q,Z));function cQ($,Q,Z){let J=Z<90,Y=J?D7:q7;return{id:$,label:Q,hingeDegrees:Z,coverActive:J,width:Y.width,height:Y.height}}function d6($){let Q=$.trim().toLowerCase();if(Q==="cover")return d6("closed");if(Q==="inner"||Q==="openflat"||Q==="flat")return d6("open");return pQ.find((Z)=>Z.id===Q)??null}function E7($){if($.primaryPanel)return $.primaryPanel;return($.hingeDegrees??0)<90?"cover":"inner"}function I7($){let Q=$==="cover",Z=Q?D7:q7;return{coverActive:Q,width:Z.width,height:Z.height}}import{createReadStream as HZ}from"fs";import{mkdir as NZ,rm as v0,stat as FZ}from"fs/promises";import{tmpdir as MZ}from"os";import{join as p7}from"path";import{randomUUID as c7}from"crypto";function dQ($){return $==="landscape_left"||$==="landscape_right"}function nQ($){if(!$||$.width<=0||$.height<=0)return null;let Q=dQ($.orientation)||$.width>$.height,Z=Q?Math.max($.width,$.height):Math.min($.width,$.height),J=Q?Math.min($.width,$.height):Math.max($.width,$.height);if(Z===$.width&&J===$.height)return $;return{...$,width:Z,height:J}}function x7($){let Q=nQ($),Z=iQ($?.orientation),J=Math.abs(Z)===90,Y=!!$&&$.width>$.height,X=Z===180||J&&!Y;return{displayConfig:Q,rotationDegrees:X?Z:0,needsCssRotation:X,inputOrientation:X?$?.orientation:void 0}}function iQ($){switch($){case"landscape_left":return 90;case"landscape_right":return-90;case"portrait_upside_down":return 180;default:return 0}}var w7="X-Serve-Sim-Recording",oQ=60,S7=1800000,k7=300000,aQ=new Set(["h264","hevc"]);function y7($){let Q=($.get("codec")??"h264").toLowerCase();if(!aQ.has(Q))return{error:`unsupported codec: ${Q} (h264|hevc)`};let Z=$.get("fps"),J=Z==null?oQ:Number(Z);if(!Number.isInteger(J)||J<1||J>120)return{error:"fps must be an integer 1..120"};let Y=$.get("bitrate"),X;if(Y!=null){if(X=Number(Y),!Number.isInteger(X)||X<1e5||X>500000000)return{error:"bitrate must be an integer in bits/s (100000..500000000)"}}return{codec:Q,fps:J,...X!=null?{bitrate:X}:{}}}function f7($){return x7({width:$.width,height:$.height,orientation:$.orientation??"portrait"}).rotationDegrees}function b7($=new Date){let Q=(J)=>String(J).padStart(2,"0");return`serve-sim-recording-${[$.getFullYear(),Q($.getMonth()+1),Q($.getDate()),Q($.getHours()),Q($.getMinutes()),Q($.getSeconds())].join("-")}.mp4`}var rQ={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"},tQ=1,A0=[],u9=new Set;function h7($){for(let Q of u9)try{Q($)}catch{}}function _0($){let Q={...$,id:tQ++,timestamp:$.timestamp??new Date().toISOString(),msg:$.msg??$.summary};if(A0.push(Q),A0.length>500)A0=A0.slice(A0.length-500);return h7(Q),Q}function n6($,Q,Z={}){let J=A0.findIndex((X)=>X.id===$);if(J<0)return null;let Y={...A0[J],...Q,id:$,...Q.summary!=null&&Q.msg==null?{msg:Q.summary}:{}};if(A0[J]=Y,Z.notify!==!1)h7(Y);return Y}function i6($={}){let{device:Q,sinceId:Z}=$,J=sQ($.limit),Y=A0.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 g7($){return u9.add($),()=>u9.delete($)}function u7($,Q,Z,J){let Y=eQ(Z);if(!Y)return null;switch(Q){case 3:{let X=b0(Y.type),K=s0(Y.x),V=s0(Y.y);if(!X||K==null||V==null)return null;return{device:$,source:"hid",kind:"touch",action:X,summary:`Touch ${X} ${e0(K,V)}`,details:g9({...Y,x:K,y:V},J)}}case 4:{let X=b0(Y.button);if(!X)return null;let K=b0(Y.phase)??"press";return{device:$,source:"hid",kind:"button",action:X,summary:K==="press"?`Button ${X}`:`Button ${X} ${K}`,details:{...Y,phase:K}}}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:g9(Y,J)}}case 6:{let X=b0(Y.type),K=s0(Y.usage);if(!X||K==null)return null;let V=QZ(K),G=ZZ(K),z={...Y};if(G)delete z.usage,z.key="character",z.redacted=!0;else z.usage=K,z.key=V;return{device:$,source:"hid",kind:"key",action:X,summary:G?`Key ${X} character`:`Key ${X} ${V}`,details:z}}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),K=$Z(Y.enabled);if(!X||K==null)return null;return{device:$,source:"hid",kind:"ca-debug",action:X,summary:`CoreAnimation ${X} ${K?"on":"off"}`,details:{...Y,enabled:K}}}case 9:return{device:$,source:"hid",kind:"memory-warning",action:"trigger",summary:"Memory warning"};case 10:{let X=s0(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=s0(Y.dx),K=s0(Y.dy);if(X==null||K==null)return null;return{device:$,source:"hid",kind:"scroll",action:"wheel",summary:`Scroll ${JZ(X,K)}`,details:g9({...Y,dx:X,dy:K},J)}}case 12:return{device:$,source:"hid",kind:"software-keyboard",action:"toggle",summary:"Software keyboard"};default:return null}}function m7($,Q){let Z=XZ($);if(Z.length===0)return null;if(KZ(Z))return null;let J=l7(Q?.exitCode),Y=YZ(Q),X=WZ(Z);if(X){let{verb:V,args:G}=X;if(V==="install"&&G.length>=2){let[z]=G;return{device:z,source:"exec",kind:"app",action:"install",status:J,summary:"Install app",details:Y}}if(V==="addmedia"&&G.length>=2){let[z]=G;return{device:z,source:"exec",kind:"media",action:"addmedia",status:J,summary:"Add media",details:Y}}if(V==="launch"&&G.length>=2){let[z,W]=G,B=W==="com.apple.springboard";return{device:z,source:"exec",kind:B?"button":"app",action:B?"home":"launch",status:J,summary:B?"Home":`Launch ${W}`,details:{...Y,bundleId:W}}}if(V==="terminate"&&G.length>=2){let[z,W]=G;return{device:z,source:"exec",kind:"app",action:"terminate",status:J,summary:`Terminate ${W}`,details:{...Y,bundleId:W}}}if(V==="io"&&G.length>=2&&G[1]==="screenshot")return{device:G[0],source:"exec",kind:"screenshot",action:"capture",status:J,summary:"Screenshot",details:Y}}let K=GZ(Z);if(K){let{verb:V,args:G}=K,z=VZ(G);if(V==="button"){let W=j6(G)??"home";return{device:z,source:"exec",kind:"button",action:W,status:J,summary:`Button ${W}`,details:Y}}if(V==="tap"){let[W,B]=G;return{device:z,source:"exec",kind:"tap",action:"tap",status:J,summary:`Tap ${e0(Number(W),Number(B))}`,details:Y}}if(V==="gesture")return{device:z,source:"exec",kind:"gesture",action:"send",status:J,summary:"Gesture",details:Y};if(V==="rotate"){let W=j6(G);return{device:z,source:"exec",kind:"rotate",action:W,status:J,summary:W?`Rotate ${W}`:"Rotate",details:Y}}if(V==="memory-warning")return{device:z,source:"exec",kind:"memory-warning",action:"trigger",status:J,summary:"Memory warning",details:Y};if(V==="ca-debug"){let W=j6(G),B=G.find((N)=>N==="on"||N==="off");return{device:z,source:"exec",kind:"ca-debug",action:W,status:J,summary:`CoreAnimation ${W??"debug"}${B?` ${B}`:""}`,details:Y}}if(V==="camera"){let W=BZ(G);if(W==="status"||W==="list-webcams")return null;return{device:z,source:"exec",kind:"camera",action:W??"start",status:J,summary:W?`Camera ${W}`:"Camera",details:Y}}if(V==="ui"){let W=j6(G);return{device:z,source:"exec",kind:"ui-setting",action:W,status:J,summary:W?`UI ${W}`:"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 sQ($){if(!Number.isFinite($??NaN))return 500;return Math.min(500,Math.max(1,Math.floor($)))}function eQ($){if(!$||typeof $!=="object"||Array.isArray($))return null;return $}function b0($){return typeof $==="string"&&$.length>0?$:null}function s0($){return typeof $==="number"&&Number.isFinite($)?$:null}function $Z($){return typeof $==="boolean"?$:null}function QZ($){if($>=4&&$<=29)return String.fromCharCode(97+$-4);if($>=30&&$<=38)return String($-29);if($===39)return"0";return rQ[$]??`usage ${$}`}function ZZ($){return $>=4&&$<=39||$>=44&&$<=56||$>=84&&$<=87||$>=89&&$<=99}function g9($,Q){if(!Q||Q.width<=0||Q.height<=0)return $;return{...$,screen:Q}}function e0($,Q){if(!Number.isFinite($)||!Number.isFinite(Q))return"";return`${m9($)},${m9(Q)}`}function JZ($,Q){return`${v7($)},${v7(Q)}`}function m9($){return $.toFixed(3).replace(/0+$/,"").replace(/\.$/,"")}function v7($){let Q=m9($);return $>0?`+${Q}`:Q}function l7($){if($==null)return;return $===0?"ok":"error"}function YZ($){return l7($?.exitCode)?{exitCode:$?.exitCode}:{}}function XZ($){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 KZ($){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 WZ($){let Q=$.findIndex((Y)=>Y==="simctl");if(Q<0||$[Q-1]!=="xcrun")return null;let Z=$[Q+1]==="--set"?Q+3:Q+1,J=$[Z];if(!J)return null;return{verb:J,args:$.slice(Z+1)}}function GZ($){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 VZ($){for(let Q=0;Q<$.length;Q++){let Z=$[Q];if((Z==="-d"||Z==="--device")&&$[Q+1])return $[Q+1]}return}function j6($){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 zZ($){if($.includes("--list-webcams"))return"list-webcams";if($.includes("--stop-webcam"))return"stop-webcam";return j6($)}function BZ($){let Q=zZ($);if(Q==="status"||Q==="list-webcams"||Q==="stop-webcam")return Q;return"start"}var UZ=4,jZ=130,CZ=Buffer.from(`\r
|
|
56
|
+
`,"ascii"),d7=1000,LZ=0.004;function o6($){return`Drag ${e0($.startX,$.startY)} -> ${e0($.lastX,$.lastY)}`}function n7($){let Q=$.lastX-$.startX,Z=$.lastY-$.startY;return Math.hypot(Q,Z)>LZ}function i7($){return{startX:$.x,startY:$.y,lastX:$.x,lastY:$.y,moveCount:0,edge:$.edge}}function OZ($){return Buffer.from(`--frame\r
|
|
57
57
|
Content-Type: image/jpeg\r
|
|
58
58
|
Content-Length: ${$}\r
|
|
59
59
|
\r
|
|
60
|
-
`,"ascii")}function OZ($){let Q=Buffer.allocUnsafe(5+$.length);return Q.writeUInt32BE($.length+1,0),Q[4]=MZ,Q.set($,5),Q}var RZ={portrait:M6.portrait,portrait_upside_down:M6.portraitUpsideDown,landscape_left:M6.landscapeLeft,landscape_right:M6.landscapeRight};function a7($){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)})}async function r7($,Q){if(await a7($),$.writableEnded||$.destroyed)return!1;if(!Q()||$.writableNeedDrain)await a7($);return!$.writableEnded&&!$.destroyed}function m9(){return{open:0,frames:0,last_frame_at:null,last_error:null}}function _Z($){return{error:"duo_renderer_unavailable",reason:L0($.reason),stage:$.stage,details:L0($.details)}}class t7{udid;dependencies;capture;hid;unsubscribeMjpeg;unsubscribeSize;phase="unstarted";startPromise;width=0;height=0;orientation="portrait";latestJpegBuffer=null;latestJpegLength=0;hidSockets=new Set;duo;duoMonitor;followedCover;primaryDuoPanel;poseQueue=Promise.resolve();duoStateQueue=Promise.resolve();streamResponses=new Set;touchGestureLog;streamHealth={mjpeg:m9(),avcc:m9(),"3d":m9()};deviceHubShadowed;recording;rendererFailureEvent;constructor($,Q){this.udid=$;this.dependencies=Q;this.hid=Q?.hid??new T9($),this.capture=Q?.capture??new P9($),this.duo=new f9({createRenderer:(Z)=>Q?.createDuoRenderer?Q.createDuoRenderer(Z):new k9(Z),onProjection:(Z)=>{for(let J of this.hidSockets)J.send(Z)},onStreamError:(Z,J)=>this.handleStreamError(Z,J,"3d"),onRendererEvent:(Z)=>this.recordRendererEvent(Z),onFrameDelivered:()=>this.noteStreamFrame("3d")})}start(){if(this.phase==="stopped")return Promise.reject(Error(`Device session ${this.udid} is closed`));if(this.startPromise)return this.startPromise;this.phase="starting";let $=(async()=>{if(await this.capture.start(),this.isStopped())throw Error(`Device session ${this.udid} closed while starting`);let Q=await this.capture.subscribeSize((Z)=>this.onScreenSize(Z.width,Z.height));if(this.isStopped())throw await Q(),Error(`Device session ${this.udid} closed while starting`);if(this.unsubscribeSize=Q,this.phase="running",await this.hid.isFoldable?.()&&!this.isStopped()){let Z=await this.capture.subscribeMjpeg((Y)=>this.onSharedMjpegFrame(Y));if(this.isStopped()){await Z();return}if(this.unsubscribeMjpeg=Z,!this.dependencies?.createDuoMonitor)U7(this.udid).then((Y)=>{this.deviceHubShadowed=Y});let J=this.dependencies?.createDuoMonitor??((Y,X)=>new v9(Y,X));this.duoMonitor=J(this.udid,(Y)=>{this.followDuoState(Y).catch((X)=>{console.error("[duo] State update failed:",X)})})}})().catch((Q)=>{if(this.phase==="starting")this.phase="failed";throw Q});return $.catch(()=>{}),this.startPromise=$,$}isStopped(){return this.phase==="stopped"}close(){if(this.phase==="stopped")return;this.phase="stopped",this.duo.close(),this.duoMonitor?.close();for(let $ of this.hidSockets)this.runCleanup("HID socket close",()=>$.close());for(let $ of this.streamResponses)this.runCleanup("stream response close",()=>{$.destroy()});if(this.streamResponses.clear(),this.unsubscribeMjpeg)this.runCleanup("shared MJPEG unsubscribe",this.unsubscribeMjpeg);if(this.unsubscribeSize)this.runCleanup("size unsubscribe",this.unsubscribeSize);if(this.hidSockets.clear(),this.recording){let $=this.recording;if(this.recording=void 0,$.limitTimer)clearTimeout($.limitTimer);if($.holdTimer)clearTimeout($.holdTimer);if($.phase!=="stopping"){let Q=$.finalizing?.catch(()=>{})??Promise.resolve();this.runCleanup("recording cleanup",()=>Q.then(()=>v0($.path,{force:!0})))}}this.runCleanup("HID close",()=>this.hid.close?.()),this.runCleanup("capture stop",()=>this.capture.stop())}followDuoState($){let Q=this.duoStateQueue.then(()=>this.applyDuoState($));return this.duoStateQueue=Q.catch(()=>{}),Q}activePanel(){return I7({primaryPanel:this.primaryDuoPanel,hingeDegrees:this.duo.hinge})}async applyDuoState($){if(this.isStopped())return;if($.hingeDegrees!=null)this.duo.noteHinge($.hingeDegrees);if($.primaryPanel)this.primaryDuoPanel=$.primaryPanel;let Q=this.activePanel(),Z=x7(Q);if(($.hingeDegrees!=null||$.primaryPanel)&&Q==="cover"!==this.followedCover)await this.capture.setPreferredScreenSize(Z.width,Z.height),this.followedCover=Q==="cover";let J=$.orientations[Q];if(J)this.orientation=J;this.duo.setPanel(Q),this.broadcastConfig(),this.duo.requestFrame()}onScreenSize($,Q){if($===this.width&&Q===this.height)return;this.width=$,this.height=Q,this.broadcastConfig()}async onSharedMjpegFrame($){let{width:Q,height:Z,data:J}=$;if(this.onScreenSize(Q,Z),!this.latestJpegBuffer||this.latestJpegBuffer.length<J.length){let X=this.latestJpegBuffer?.length??0;this.latestJpegBuffer=Buffer.allocUnsafe(Math.max(J.length,X*2))}this.latestJpegBuffer.set(J,0),this.latestJpegLength=J.length;let Y=this.latestJpeg();if(Y)this.duo.onCapturedFrame(Y)}latestJpeg(){if(!this.latestJpegBuffer)return null;return this.latestJpegBuffer.subarray(0,this.latestJpegLength)}sharedJpegCopy(){let $=this.unsubscribeMjpeg?this.latestJpeg():null;return $?Buffer.from($):null}async seedJpeg(){let $=this.sharedJpegCopy();if($)return $;try{return await this.capture.snapshotJpeg()}catch{return null}}writeMjpegFrame($,Q){let Z=$.write(LZ(Q.length)),J=$.write(Q),Y=$.write(jZ);return Z&&J&&Y}handleDuoMjpeg($,Q){(async()=>{if(await this.start(),Q.destroyed||Q.writableEnded)return;if(!await this.hid.isFoldable?.()){this.sendJson(Q,400,{error:"This device has no Duo model"});return}let Z=new URL($.url??"","http://x").searchParams.get("raw")==="1";if(!this.trackStreamResponse(Q,"3d"))return;this.duo.setPanel(this.activePanel()),Q.once("close",()=>this.duo.detach(Q)),this.duo.attach(Q,{onFirstFrame:()=>{Q.writeHead(200,{"Content-Type":Z?"application/octet-stream":"multipart/x-mixed-replace; boundary=frame","Cache-Control":"no-store"})}})})().catch((Z)=>this.handleStreamError(Q,Z,"3d"))}handleMjpeg($,Q){this.serveMjpeg($,Q).catch((Z)=>this.handleStreamError(Q,Z,"mjpeg"))}async serveMjpeg($,Q){if(await this.start(),Q.writableEnded||Q.destroyed)return;let Z=new URL($.url??"","http://x").searchParams.get("raw")==="1";if(Q.writeHead(200,{"Content-Type":Z?"application/octet-stream":"multipart/x-mixed-replace; boundary=frame","Cache-Control":"no-cache, no-store",Connection:"keep-alive"}),!this.trackStreamResponse(Q,"mjpeg"))return;let J=!1,Y=0,X=null,K=0,z=(N)=>{if(!X||X.length<N.length)X=Buffer.allocUnsafe(Math.max(N.length,(X?.length??0)*2));X.set(N,0),K=N.length},G=async(N)=>{if(J||Q.writableEnded||Q.destroyed)return;J=!0;try{if(await r7(Q,()=>this.writeMjpegFrame(Q,N)))Y=Date.now(),this.noteStreamFrame("mjpeg")}catch(j){if(!Q.destroyed)Q.destroy(j instanceof Error?j:Error(String(j)))}finally{J=!1}},V=this.sharedJpegCopy();if(V)z(V),await G(V);let W=await this.capture.subscribeMjpeg(async(N)=>{z(N.data),await G(N.data)}),H=setInterval(()=>{if(Q.writableEnded||Q.destroyed)return;if(Date.now()-Y<n7)return;if(X)G(Buffer.from(X.subarray(0,K)))},n7);this.bindSubscription(Q,async()=>{clearInterval(H),await W()})}handleAvcc($,Q){this.serveAvcc(Q).catch((Z)=>this.handleStreamError(Q,Z,"avcc"))}async serveAvcc($){if(await this.start(),$.writableEnded||$.destroyed)return;if($.writeHead(200,{"Content-Type":"application/octet-stream","Cache-Control":"no-cache, no-store",Connection:"keep-alive"}),!this.trackStreamResponse($,"avcc"))return;let Q=!1;this.seedJpeg().then((J)=>{if(J&&!Q&&!$.writableEnded&&!$.destroyed)$.write(OZ(J))});let Z=await this.capture.subscribeAvcc(async(J)=>{Q=!0,await r7($,()=>$.write(J.data)),this.noteStreamFrame("avcc")});this.bindSubscription($,Z)}handleConfig($,Q){this.sendJson(Q,200,this.screenConfig())}handleHealth($,Q){this.sendJson(Q,200,{status:"ok"})}handleAx($,Q){return this.serveAxJson(Q,()=>m6(this.udid),"ax_unavailable")}handleForeground($,Q){return this.serveAxJson(Q,()=>l6(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)})}}recordingStatus(){let $=this.recording;if(!$)return{recording:!1};let Q=$.finalizing&&$.phase==="recording";return{recording:!0,startedAt:$.startedAt,...Q?{limitReached:!0}:{},...Q&&$.heldAt!=null?{holdExpiresAt:new Date($.heldAt+this.recordingHoldMs()).toISOString()}:{}}}recordingHoldMs(){return this.dependencies?.recordingHoldMs??y7}async discardExpiredHold(){let $=this.recording;if(!$||!$.holdExpired||$.phase!=="recording")return;this.recording=void 0,console.error(`[record] ${this.udid}: discarding the uncollected recording held at the duration limit`),await $.finalizing?.catch(()=>{}),await v0($.path,{force:!0}).catch(()=>{})}async handleRecording($,Q,Z){let J=($.method??"GET").toUpperCase();if(Z==="status"){this.sendJson(Q,200,this.recordingStatus());return}if(J!=="POST"){Q.setHeader("Allow","POST"),this.sendJson(Q,405,{error:"method_not_allowed"});return}try{if(Z==="start")await this.startRecording($,Q);else await this.stopRecording($,Q)}catch(Y){if(Q.headersSent||Q.writableEnded){Q.destroy();return}this.sendJson(Q,500,{error:"recording_failed",message:L0(Y instanceof Error?Y.message:String(Y))})}}async startRecording($,Q){if(!this.capture.startRecording||!this.capture.stopRecording||this.capture.supportsRecording===!1){this.sendJson(Q,501,{error:"recording_unsupported",message:"This native build cannot record"});return}let Z=f7(new URL($.url??"","http://x").searchParams);if("error"in Z){this.sendJson(Q,400,{error:"invalid_recording_options",message:Z.error});return}if(await this.discardExpiredHold(),this.recording){this.sendJson(Q,409,{error:"already_recording",...this.recordingStatus()});return}let J=c7(FZ(),"serve-sim-recordings"),Y=c7(J,`${this.udid}-${d7()}.mp4`),X=new Date().toISOString(),K=d7(),z={path:Y,startedAt:X,token:K,phase:"starting"};this.recording=z;let G=()=>{this.runCleanup("recording cleanup",()=>v0(Y,{force:!0})),this.sendJson(Q,409,{error:"session_closed",message:"The device session closed while the recording was starting"})};try{await this.start(),await BZ(J,{recursive:!0}),await this.capture.startRecording(Y,{...Z,rotation:b7(this.screenConfig())})}catch(W){if(this.recording!==z)return G();throw this.recording=void 0,await v0(Y,{force:!0}).catch(()=>{}),W}if(this.recording!==z)return G();z.phase="recording";let V=this.dependencies?.maxRecordingMs??k7;z.limitTimer=setTimeout(()=>{if(this.recording!==z||z.phase!=="recording")return;console.error(`[record] ${this.udid}: reached the ${Math.round(V/60000)} min limit; finalizing`),this.finalizeRecording(z).catch((W)=>{console.error(`[record] ${this.udid}: finalize at the duration limit failed:`,W instanceof Error?W.message:W)}).finally(()=>this.holdForOwner(z))},V),z.limitTimer.unref?.(),this.sendJson(Q,200,{recording:!0,startedAt:X,token:K})}holdForOwner($){if(this.recording!==$||$.phase!=="recording")return;$.heldAt=Date.now(),$.holdTimer=setTimeout(()=>{if($.holdTimer=void 0,this.recording!==$||$.phase!=="recording")return;$.holdExpired=!0,console.error(`[record] ${this.udid}: the recording held at the duration limit is now available to any client`)},this.recordingHoldMs()),$.holdTimer.unref?.()}finalizeRecording($){if($.limitTimer)clearTimeout($.limitTimer);return $.limitTimer=void 0,$.finalizing??=this.capture.stopRecording(),$.finalizing}async stopRecording($,Q){let Z=this.recording;if(!Z||Z.phase!=="recording"||!this.capture.stopRecording){this.sendJson(Q,409,{error:"not_recording",...this.recordingStatus()});return}if(Z.finalizing&&!Z.holdExpired&&new URL($.url??"","http://x").searchParams.get("token")!==Z.token){this.sendJson(Q,409,{error:"not_owner",message:"This recording hit the time limit and is held for the client that started it"+(Z.heldAt!=null?` until ${new Date(Z.heldAt+this.recordingHoldMs()).toLocaleTimeString()}`:""),...this.recordingStatus()});return}if(Z.holdTimer)clearTimeout(Z.holdTimer);Z.holdTimer=void 0,Z.phase="stopping";let J=$.aborted||Q.destroyed,Y=()=>{J=!0};$.once("aborted",Y),Q.once("close",Y);let X=()=>{$.off("aborted",Y),Q.off("close",Y)},K,z;try{K=await this.finalizeRecording(Z),{size:z}=await NZ(Z.path)}catch(G){throw await v0(Z.path,{force:!0}).catch(()=>{}),G}finally{if(X(),this.recording===Z)this.recording=void 0}if(J||$.aborted||Q.destroyed||$.socket?.destroyed){await v0(Z.path,{force:!0}).catch(()=>{});return}Q.writeHead(200,{"Content-Type":"video/mp4","Content-Length":String(z),"Content-Disposition":`attachment; filename="${v7()}"`,"Cache-Control":"no-store",[S7]:AZ(K)}),await new Promise((G)=>{let V=HZ(Z.path),W=()=>{V.destroy(),v0(Z.path,{force:!0}).finally(G)};V.once("error",()=>{Q.destroy(),W()}),Q.once("close",W),V.pipe(Q)})}attachHidSocket($){this.hidSockets.add($);let Q=this.configFrame(),Z=this.duo.projectionFrame();if(Z)$.send(Z);if(Q)$.send(Q);$.on("message",(J)=>{let Y=Buffer.isBuffer(J)?J:Buffer.from(J);if(Y[0]===14)this.poseQueue=this.poseQueue.then(async()=>{if(this.isStopped())return;let X=!1;try{X=await this.handleHidMessage(Y)===!0}catch(K){console.error("[hid] Pose failed:",K)}if(this.hidSockets.has($))$.send(Buffer.concat([Buffer.from([14]),Buffer.from(JSON.stringify({ok:X}))]))}).catch((X)=>{console.error("[hid] Pose reply failed:",X)});else this.handleHidMessage(Y).catch((X)=>{console.error("[hid] Input failed:",X)})}),$.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 K=J();if(K)this.recordTouchEvent(K),this.hid.touch(K.type,K.x,K.y,Y,X,K.edge??0);break}case 4:{let K=J();if(!K)break;if(this.recordHidEvent(Q,K),K.page!=null&&K.usage!=null)this.hid.buttonHid(K.page,K.usage,K.phase??"press");else this.hid.button(K.button);break}case 5:{let K=J();if(K)this.recordHidEvent(Q,K),this.hid.multiTouch(K.type,K.x1,K.y1,K.x2,K.y2,Y,X);break}case 6:{let K=J();if(K)this.recordHidEvent(Q,K),this.hid.key(K.type,K.usage);break}case 7:{let K=J();if(!K)break;let z=RZ[K.orientation];if(z!=null&&await this.hid.orientation(z)){if(this.recordHidEvent(Q,K),K.orientation!==this.orientation||K.orientation!==this.duo.viewOrientationName){if(this.duo.hinge==null)this.orientation=K.orientation;this.duo.animateRotation(K.orientation),this.duoMonitor?.refreshOrientation(),this.broadcastConfig(),this.duo.requestFrame()}}break}case 8:{let K=J();if(K)this.recordHidEvent(Q,K),this.hid.caDebug(K.option,K.enabled);break}case 9:this.recordHidEvent(Q,{}),this.hid.memoryWarning();break;case 10:{let K=J();if(K)this.recordHidEvent(Q,K),this.hid.digitalCrown(K.delta);break}case 11:{let K=J();if(K)this.recordHidEvent(Q,K),this.hid.scroll(K.dx*Y,K.dy*X,Y,X,K.x,K.y);break}case 12:this.recordHidEvent(Q,{}),this.hid.softwareKeyboard();break;case 13:{let K=J();if(!K)break;let z=Number(K.width),G=Number(K.height);if(!Number.isFinite(z)||!Number.isFinite(G))break;this.recordHidEvent(Q,K),await this.capture.setPreferredScreenSize(Math.round(z),Math.round(G));break}case 14:{let K=J();if(!K)break;if(this.recordHidEvent(Q,K),typeof K.pose==="string"&&K.pose.trim()){let z=d6(K.pose);if(!z)break;let G=this.duo.displayAngle();if(this.duo.beginPose(G,z.hingeDegrees),!await this.hid.pose(K.pose,G)){this.duo.cancelPose();break}return this.duo.finishPose(z.hingeDegrees),await this.followDuoState({hingeDegrees:z.hingeDegrees,orientations:{}}),this.duoMonitor?.refreshOrientation(),this.broadcastConfig(),this.duo.requestFrame(),!0}else if(typeof K.hinge==="number"&&Number.isFinite(K.hinge)&&K.hinge>=0&&K.hinge<=180){if(!await this.hid.hinge(K.hinge))break;return this.duo.cancelPose(),await this.followDuoState({hingeDegrees:K.hinge,orientations:{}}),this.duoMonitor?.refreshOrientation(),this.broadcastConfig(),this.duo.requestFrame(),!0}break}}}recordTouchEvent($){if($.type==="begin"){this.touchGestureLog=o7($);return}if($.type==="move"){let Q=this.touchGestureLog;if(!Q)Q=o7($),this.touchGestureLog=Q;if(Q.lastX=$.x,Q.lastY=$.y,Q.moveCount++,$.edge!=null)Q.edge=$.edge;if(i7(Q))if(Q.eventId==null){let Z=_0({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:o6(Q),details:this.touchGestureDetails(Q,"drag","move")});Q.eventId=Z.id}else n6(Q.eventId,{kind:"drag",action:"drag",summary:o6(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&&i7(Q))if(Q.eventId==null)_0({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:o6(Q),details:this.touchGestureDetails(Q,"drag","end")});else n6(Q.eventId,{kind:"drag",action:"drag",summary:o6(Q),details:this.touchGestureDetails(Q,"drag","end")});else _0({device:this.udid,source:"hid",kind:"tap",action:"tap",summary:`Tap ${e0($.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=m7(this.udid,$,Q,this.eventLogScreen());if(Z)_0(Z)}screenConfig(){let $=this.duo.hinge;return{width:this.width,height:this.height,orientation:this.orientation,...$==null?{}:{hingeDegrees:$,duoViewOrientation:this.duo.viewOrientationName}}}configFrame(){if(this.width===0&&this.height===0)return null;return Buffer.concat([Buffer.from([UZ]),Buffer.from(JSON.stringify(this.screenConfig()))])}broadcastConfig(){let $=this.configFrame();if(!$)return;for(let Q of this.hidSockets)Q.send($)}bindSubscription($,Q){let Z=!1,J=()=>{if(Z)return;Z=!0,this.streamResponses.delete($),this.runCleanup("stream unsubscribe",Q)};if($.writableEnded||$.destroyed){J();return}$.once("close",J),$.once("error",J)}trackStreamResponse($,Q){if(this.isStopped()||$.writableEnded||$.destroyed){if(!$.writableEnded&&!$.destroyed)$.destroy();return!1}this.streamResponses.add($),this.streamHealth[Q].open++;let Z=()=>{if($.off("close",Z),$.off("error",Z),this.streamResponses.delete($))this.streamHealth[Q].open--};return $.once("close",Z),$.once("error",Z),!0}runCleanup($,Q){try{Promise.resolve(Q()).catch((Z)=>this.logCleanupError($,Z))}catch(Z){this.logCleanupError($,Z)}}logCleanupError($,Q){console.error(`[capture] ${$} failed for ${this.udid}:`,Q instanceof Error?Q.message:Q)}noteStreamFrame($){let Q=this.streamHealth[$];Q.frames++,Q.last_frame_at=new Date().toISOString()}recordRendererEvent($){if($.phase==="ready"){this.rendererFailureEvent=void 0,_0({device:this.udid,source:"capture",kind:"duo.renderer",action:"ready",status:"ok",summary:`Duo renderer ready (${$.firstFrameMs} ms to first frame)`,details:{phase:"ready","duo.first_frame_ms":$.firstFrameMs}});return}let{error:Q}=$;_7(Q);let Z=`${Q.stage}\x00${Q.reason}`,J=L0(Q.reason),Y={phase:"failed",stage:Q.stage,reason:J,...L0(Q.details)},X=this.rendererFailureEvent;if(X?.key===Z&&n6(X.id,{details:{...Y,count:X.count+1}})){X.count++;return}let K=_0({device:this.udid,source:"capture",kind:"duo.renderer",action:"failed",status:"error",summary:`Duo renderer ${Q.stage} failed: ${J}`,details:{...Y,count:1}});this.rendererFailureEvent={id:K.id,key:Z,count:1}}async diagnostics(){let $=null;if(this.capture.diagnostics)try{$=JSON.parse(await this.capture.diagnostics())}catch(Q){$={error:Q instanceof Error?Q.message:String(Q)}}else $={error:"native capture diagnostics unavailable in this build"};return{udid:this.udid,phase:this.phase,screen:this.screenConfig(),streams:structuredClone(this.streamHealth),native:$,duo:{...this.duo.diagnostics(),primary_panel:this.primaryDuoPanel??null,active_panel:this.activePanel(),followed_cover:this.followedCover??null},hid:{device_hub_input_shadowed:this.deviceHubShadowed??null,sockets:this.hidSockets.size}}}handleStreamError($,Q,Z){let J=L0(Q instanceof Error?Q.message:String(Q));if(Z)this.streamHealth[Z].last_error={at:new Date().toISOString(),message:J,...Q instanceof z0?{stage:Q.stage}:{}};if($.writableEnded||$.destroyed)return;if(Q instanceof z0&&!$.headersSent){this.sendJson($,503,_Z(Q));return}if($.headersSent){$.destroy(Q instanceof Error?Q:Error(String(Q)));return}this.sendJson($,503,{error:"capture_unavailable",message:J})}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)}),$.end(J)}}var q0=new Map;function s7($){if($){let Q=q0.get($);return Q?[Q]:[]}return[...q0.values()]}function l9($){let Q=q0.get($);if(!Q){let Z=new t7($);Q=Z,q0.set($,Z),Z.start().catch(()=>{if(q0.get($)!==Z)return;q0.delete($),Z.close()})}return Q}function p9($){let Q=q0.get($);if(Q)Q.close(),q0.delete($)}function AZ($){let Q;try{Q=JSON.parse($)}catch{return"{}"}return delete Q.path,JSON.stringify(Q).replace(/[^\x20-\x7e]/g,"")}import{execFile as TZ}from"node:child_process";import{closeSync as AK,existsSync as PZ,openSync as TK,readdirSync as DZ,readFileSync as qZ,readSync as PK,statSync as DK}from"node:fs";import{dirname as EZ,join as $6}from"node:path";import{fileURLToPath as IZ}from"node:url";var xZ=1;var e7=($,Q)=>new Promise((Z)=>{TZ($,Q,{timeout:5000,maxBuffer:4194304},(J,Y)=>{Z(J?null:String(Y).trim())})});function wZ(){return"0.1.49"}function SZ($){let Q=/^(.*?\.app)\/Contents\/Developer\/?$/.exec($);return Q?Q[1]:null}async function kZ($){let Q=new Set,Z=await $("/usr/bin/mdfind",["kMDItemCFBundleIdentifier == 'com.apple.dt.Xcode'"]);for(let J of Z?.split(`
|
|
61
|
-
`)??[])if(J.trim().endsWith(".app"))Q.add(J.trim());try{for(let J of
|
|
62
|
-
`).map((q)=>/^\s*(\d+)\s+(.*\/DeviceHub\.app\/Contents\/MacOS\/\S+)/.exec(q)).filter((q)=>q!=null).map((q)=>{let A=q[2],R=/^(.*?\.app)\/Contents\/Applications\/DeviceHub\.app\//.exec(A)?.[1]??null;return{pid:Number(q[1]),executable:A,xcode:R,matches_selected:R!=null&&R===
|
|
63
|
-
`).map((J)=>parseInt(J,10)).filter((J)=>Number.isFinite(J)&&J!==Z)}catch{return[]}}var L6=b5(I8(),1),sK=L6.default("serve-sim:cli"),g1=L6.default("serve-sim:helper"),s9=L6.default("serve-sim:state"),O6=L6.default("serve-sim:mw");var p1=/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i;function c1($){return p1.test($)}function d1($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function n1($){return/serve-sim(?:-bin)?/.test($)}function i1($){try{return l1(`/proc/${$}/cmdline`,"utf8").split(String.fromCharCode(0)).join(" ").trim()}catch{}try{return u1("ps",["-p",String($),"-o","args="],{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:1000}).trim()}catch{return null}}function x8($,Q={}){let Z=Q.isAlive??d1,J=Q.portHolders??L8,Y=Q.commandLine??i1;if(Z($.pid))return $;for(let X of J($.port)){if(X===process.pid||!Z(X))continue;let K=Y(X);if(K==null||!n1(K))continue;return s9("recovered helper for %s via port %d pid %d (recorded pid %d was dead)",$.device,$.port,X,$.pid),{...$,pid:X}}return null}function w8($){try{c6($)}catch(Q){s9("failed to rewrite recovered state for %s: %o",$.device,Q)}}function S8($){return $?m1("sha256").update($).digest("hex"):void 0}function k8($,Q,Z,J){if(!b6($.deviceSet,J))return"keep";if(Q&&c1($.device)&&!Q.has($.device))return $.pid===Z?"recycle-self":"recycle-helper";return"keep"}import{execFileSync as $9}from"child_process";import{createHash as c8}from"crypto";import{existsSync as N0,mkdirSync as d8,readdirSync as o1,readFileSync as P0,renameSync as n8,statSync as i8,unlinkSync as h8}from"fs";import{tmpdir as o8}from"os";import{basename as a8,dirname as Q9,join as J0}from"path";import{inflateSync as a1}from"zlib";function y8($){if($.length===0)return null;return $.reduce((Q,Z)=>Z.width*Z.height<Q.width*Q.height?Z:Q)}function f8($){if($.length!==2)return $.map(()=>"display");return $[0]<=$[1]?["cover","inner"]:["inner","cover"]}function b8($,Q="Display"){switch($){case"cover":return"Cover";case"inner":return"Inner";default:return Q}}function v8($){let Q=$$($$($).capabilities??$),Z=Array.isArray(Q.displays)?Q.displays:[],J=[];for(let Y of Z){let X=$$(Y);if(R6(X.displayType)!=="integrated")continue;if(X.hasDigitizer!==!0)continue;let K=R6(X.chromeIdentifier);if(!K)continue;let z=e9(X.width),G=e9(X.height);if(!z||!G||z<=0||G<=0)continue;let V=e9(X.scale),W=R6(X.deviceName)??(typeof X.screenID==="number"?`screen-${X.screenID}`:`display-${J.length}`);J.push({id:W,label:R6(X.displayName)??W,chromeIdentifier:K,mask:R6(X.framebufferMaskIdentifier),width:z,height:G,logicalScreenSize:V&&V>0?{width:z/V,height:G/V}:null})}return J}function e9($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="string"&&$.trim()){let Q=Number($);return Number.isFinite(Q)?Q:null}return null}function R6($){return typeof $==="string"&&$?$:null}function $$($){return $&&typeof $==="object"&&!Array.isArray($)?$:{}}var V$="/Library/Developer/CoreSimulator/Profiles/DeviceTypes",r8="/Library/Developer/DeviceKit/Chrome",g8="com.apple.dt.devicekit.chrome.",u8=J0(o8(),"serve-sim-devicekit-chrome"),m8=J0(o8(),"serve-sim-device-placeholder-assets"),x0="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle/Contents/Resources",r1="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/CoreTypes-0006.bundle/Contents/Resources",l8={"vision-pro":{paths:[J0(x0,"com.apple.vision-pro.icns"),J0(r1,"com.apple.visionpro.icns")]},"iphone-17e":{paths:[J0(x0,"com.apple.iphone-16-e-1.icns")]},"ipad-air-11-inch-m4":{paths:[J0(x0,"com.apple.ipad-air-m3-1.icns")]},"ipad-air-13-inch-m4":{paths:[J0(x0,"com.apple.ipad-air-m3-1.icns")]}},Q$=null,Z$=new Map,J$=new Map,Y$=new Map,X$=new Map,K$=null,W$=new Map;function A6($){return $.startsWith(g8)?$.slice(g8.length):$}function z$($){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]),K=Number(Z[4]),z=Math.abs(X-J),G=Math.abs(K-Y);return z>0&&G>0?{width:z,height:G}:null}function t1($,Q){let Z=N2($);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=J0(Y,`${J}.pdf`);if(!N0(X))return null;let K=z$(P0(X));if(!K)return null;let z=F2(Q);return{width:K.width/z,height:K.height/z}}function H$($){let Q=J9($);if(Y$.has(Q))return Y$.get(Q)??[];let Z=Q2(Q);return Y$.set(Q,Z),Z}function t8($){let Q=H$($);if(Q.length>0)return y8(Q)?.chrome??null;let Z=J9($),J=Z;if(J$.has(J))return J$.get(J)??null;let Y=Z2(Z);return J$.set(J,Y),Y}function s8($){let Q=J9($);if(X$.has(Q))return X$.get(Q)??null;let Z=s1($);return X$.set(Q,Z),Z}function s1($){let Q=Y2($),Z=Q?J4(Q):null,J=X2(Z)??K2($.name);if(!J)return null;let Y=Q4(J);return Y?{name:J,width:Y.width,height:Y.height}:null}function e8($,Q){let Z=A6($.searchParams.get("chrome")??""),J=$.searchParams.get("image")??"";if(!/^[A-Za-z0-9_-]+$/.test(Z)||!J){K6(Q,400,"Invalid chrome asset request");return}let Y=K4(Z);if(!Y||!Y.allowedImages.has(J)||J.includes("/")){K6(Q,404,"Chrome asset not found");return}let X=N$(Z,J);if(!N0(X)){K6(Q,404,"Chrome asset not found");return}try{let K=W4(Z,J,X),z=P0(K);Q.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(z.byteLength)}),Q.end(z)}catch(K){K6(Q,500,K instanceof Error?K.message:"Failed to render chrome asset")}}function $4($,Q){let Z=$.searchParams.get("name")??"";try{let J=Q4(Z);if(!J){K6(Q,404,"Placeholder asset not found");return}let Y=P0(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){K6(Q,500,J instanceof Error?J.message:"Failed to render placeholder asset")}}function Q4($){if(!/^[A-Za-z0-9._-]+$/.test($))return null;if(W$.has($))return W$.get($)??null;let Q=e1($),Z=Q?M2($,Q):null;return W$.set($,Z),Z}function e1($){let Z=$2($)?.paths.find((Y)=>N0(Y));if(Z)return Z;if(!X4().some((Y)=>Y.iconName===$))return null;let J=J0(x0,`${$}.icns`);return N0(J)?J:null}function $2($){return Object.prototype.hasOwnProperty.call(l8,$)?l8[$]:null}function Q2($){let Q=B$($);if(!N0(Q))return[];let Z=Q9(Q),J=_6(J0(Z,"capabilities.plist")),Y=v8(J);if(Y.length===0)return[];let X=f8(Y.map((z)=>z.width*z.height)),K=[];for(let z=0;z<Y.length;z++){let G=Y[z],V=Z4(A6(G.chromeIdentifier),Y4(Z,G.mask),G.logicalScreenSize);if(!V)continue;let W=X[z]??"display";K.push({id:G.id,role:W,name:b8(W,G.label),width:G.width,height:G.height,chrome:V})}return K}function Z2($){let Q=B$($);if(!N0(Q))return null;let Z=J4(Q);if(!Z?.chromeIdentifier)return null;return Z4(Z.chromeIdentifier,Z.framebufferMaskSize,Z.screenSize)}function Z4($,Q,Z){let J=K4($);if(!J)return null;let Y=null;if(J.compositeImage)Y=G$(J.identifier,J.compositeImage);let X=J.compositeImage?C2(J.identifier,J.compositeImage):null,K=(X&&Q?j2(Q,X):null)??Z??(Y?{width:Y.width-J.insets.left-J.insets.right,height:Y.height-J.insets.top-J.insets.bottom}:null);if(!K||K.width<=0||K.height<=0)return null;let z=Y??{width:K.width+J.insets.left+J.insets.right,height:K.height+J.insets.top+J.insets.bottom},G={x:J.devicePadding.left,y:J.devicePadding.top,width:z.width,height:z.height},V={width:z.width+J.devicePadding.left+J.devicePadding.right,height:z.height+J.devicePadding.top+J.devicePadding.bottom},W={x:G.x+(z.width-K.width)/2,y:G.y+(z.height-K.height)/2,width:K.width,height:K.height},H=X?Math.max(0,X.radius-(X.width-K.width)/2):J.innerCornerRadius,N=J.slice?G$(J.identifier,J.slice.topLeft):null,j=J.identifier.startsWith("watch"),O=J.buttons.flatMap((T)=>{let q=G$(J.identifier,T.image);if(!q)return[];let A=z2(T,q,z,J.devicePadding),R={x:q.width>0?(T.rolloverOffset.x-T.normalOffset.x)/q.width:0,y:q.height>0?(T.rolloverOffset.y-T.normalOffset.y)/q.height:0};return[{name:T.name,image:T.image,imageDown:T.imageDown,onTop:T.onTop||j,frame:{...A,...q},hover:R,usagePage:T.usagePage,usage:T.usage}]});return{identifier:J.identifier,frame:V,body:G,screen:W,insets:J.insets,outerCornerRadius:J.outerCornerRadius,innerCornerRadius:J.innerCornerRadius,screenRadius:H,compositeImage:J.compositeImage,slice:J.slice,corner:N,buttons:O}}function J4($){let Q=_6($);if(!Q)return null;let Z=typeof Q.chromeIdentifier==="string"?Q.chromeIdentifier:null,J=Z?A6(Z):null;return{chromeIdentifier:J,modelIdentifier:typeof Q.modelIdentifier==="string"?Q.modelIdentifier:null,productClass:typeof Q.productClass==="string"?Q.productClass:null,screenSize:J?t1({...Q,__profileDir:Q9($)},J):null,framebufferMaskSize:J2({...Q,__profileDir:Q9($)})}}function J2($){let Q=typeof $.framebufferMask==="string"?$.framebufferMask:null,Z=typeof $.__profileDir==="string"?$.__profileDir:null;if(!Q||!Z)return null;return Y4(Z,Q)}function Y4($,Q){if(!Q)return null;let Z=J0($,`${Q}.pdf`);if(!N0(Z))return null;return z$(P0(Z))}function J9($){return H2($.deviceTypeIdentifier)??$.name}function Y2($){let Q=B$(J9($));return N0(Q)?Q:null}function B$($){return J0(V$,`${$}.simdevicetype`,"Contents","Resources","profile.plist")}function X2($){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 X4())if(Z.modelCodes.some((J)=>Q.has(J)))return Z.iconName;return null}function K2($){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 X4(){if(K$)return K$;let $=_6(J0(x0,"MobileDevices-Info.plist"))??_6(J0(Q9(x0),"Info.plist")),Q=Array.isArray($?.UTExportedTypeDeclarations)?$.UTExportedTypeDeclarations:[],Z=[];for(let J of Q){let Y=O0(J),X=B0(Y.UTTypeIconFile);if(!X||!X.endsWith(".icns"))continue;let K=J0(x0,X);if(!N0(K))continue;let G=O0(Y.UTTypeTagSpecification)["com.apple.device-model-code"],V=Array.isArray(G)?G.filter((W)=>typeof W==="string"&&W.length>0):[];if(V.length===0)continue;Z.push({description:B0(Y.UTTypeDescription)??"",iconFile:X,iconName:a8(X,".icns"),modelCodes:V})}return K$=Z,Z}function K4($){let Q=A6($);if(!/^[A-Za-z0-9_-]+$/.test(Q))return null;if(Z$.has(Q))return Z$.get(Q)??null;let Z=J0(r8,`${Q}.devicechrome`,"Contents","Resources","chrome.json"),J=null;try{let Y=JSON.parse(P0(Z,"utf-8"));J=W2(Y)}catch{J=null}return Z$.set(Q,J),J}function W2($){let Q=typeof $.identifier==="string"?$.identifier:null;if(!Q)return null;let Z=A6(Q),J=O0($.images),Y=O0(J.sizing),X=O0($.paths),K=T0(O0(X.simpleOutsideBorder).cornerRadiusX),z={top:T0(Y.topHeight),left:T0(Y.leftWidth),bottom:T0(Y.bottomHeight),right:T0(Y.rightWidth)},G=O0(J.devicePadding),V={top:T0(G.top),left:T0(G.left),bottom:T0(G.bottom),right:T0(G.right)},W=typeof J.composite==="string"?J.composite:null,H=G2(J),N=Array.isArray($.inputs)?$.inputs.flatMap((O)=>{let T=V2(O0(O));return T?[T]:[]}):[],j=new Set;for(let O of Object.values(J))if(typeof O==="string")j.add(O);for(let O of N)j.add(O.image);if(Array.isArray($.inputs))for(let O of $.inputs){let T=O0(O);if(typeof T.imageDown==="string")j.add(T.imageDown)}return{identifier:Z,insets:z,devicePadding:V,outerCornerRadius:K,innerCornerRadius:Math.max(K-Math.max(z.left,z.top),0),compositeImage:W,slice:H,buttons:N,allowedImages:j}}function G2($){let Q=B0($.topLeft),Z=B0($.top),J=B0($.topRight),Y=B0($.right),X=B0($.bottomRight),K=B0($.bottom),z=B0($.bottomLeft),G=B0($.left);if(!Q||!Z||!J||!Y||!X||!K||!z||!G)return null;return{topLeft:Q,top:Z,topRight:J,right:Y,bottomRight:X,bottom:K,bottomLeft:z,left:G}}function V2($){let Q=B0($.name),Z=B0($.image);if(!Q||!Z)return null;let J=B0($.anchor),Y=B0($.align),X=O0($.offsets),K=p8(O0(X.normal)),z=p8(O0(X.rollover));return{name:Q,image:Z,imageDown:B0($.imageDown),onTop:$.onTop===!0,anchor:J==="right"||J==="top"||J==="bottom"?J:"left",align:Y==="trailing"?"trailing":"leading",normalOffset:K??z??{x:0,y:0},rolloverOffset:z??K??{x:0,y:0},usagePage:w0($.usagePage),usage:w0($.usage)}}function z2($,Q,Z,J){let{left:Y,top:X}=J,K=2*$.normalOffset.x-$.rolloverOffset.x,z=2*$.normalOffset.y-$.rolloverOffset.y,G=$.align==="trailing"?Y+Z.width+K-Q.width:Y+K;switch($.anchor){case"left":return{x:Y+$.rolloverOffset.x-Q.width/2,y:X+$.rolloverOffset.y};case"right":return{x:Y+Z.width+K,y:X+z};case"top":return{x:G,y:X+z-Q.height};case"bottom":return{x:G,y:X+Z.height+z}}}function H2($){if(!$)return null;if(!Q$)Q$=B2();return Q$.get($)??null}function B2(){let $=new Map;try{for(let Q of o1(V$)){if(!Q.endsWith(".simdevicetype"))continue;let Z=J0(V$,Q),J=_6(J0(Z,"Contents","Info.plist")),Y=typeof J?.CFBundleIdentifier==="string"?J.CFBundleIdentifier:null,X=typeof J?.CFBundleName==="string"?J.CFBundleName:a8(Q,".simdevicetype");if(Y)$.set(Y,X)}}catch{}return $}function _6($){try{let Q=$9("plutil",["-convert","json","-o","-",$],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:2000});return JSON.parse(Q)}catch{return null}}function N2($){let Q=w0($.mainScreenWidth),Z=w0($.mainScreenHeight),J=w0($.mainScreenScale);if(!Q||!Z||!J||J<=0)return null;return{width:Q/J,height:Z/J}}function F2($){if($.startsWith("phone"))return 3;if($.startsWith("tablet"))return 2;if($.startsWith("watch"))return 2;return 1}function G$($,Q){let Z=N$($,Q);if(!N0(Z))return null;return z$(P0(Z))}function N$($,Q){return J0(r8,`${$}.devicechrome`,"Contents","Resources",`${Q}.pdf`)}function W4($,Q,Z){d8(u8,{recursive:!0});let J=i8(Z),Y=c8("sha1").update($).update("\x00").update(Q).update("\x00").update(String(J.mtimeMs)).update("\x00").update(String(J.size)).digest("hex"),X=J0(u8,`${$}-${Y}.png`);if(N0(X))return X;let K=`${X}.${process.pid}.tmp`;return $9("sips",["-s","format","png",Z,"--out",K],{stdio:["ignore","ignore","ignore"],timeout:1e4}),n8(K,X),X}function M2($,Q){d8(m8,{recursive:!0});let Z=i8(Q),J=c8("sha1").update($).update("\x00").update(Q).update("\x00").update(String(Z.mtimeMs)).update("\x00").update(String(Z.size)).digest("hex"),Y=J0(m8,`${$}-${J}.png`);if(N0(Y)){let z=Z9(P0(Y));return{sourcePath:Q,pngPath:Y,width:z.width,height:z.height}}let X=`${Y}.${process.pid}.tmp`,K=`${Y}.${process.pid}.raw.png`;try{$9("sips",["-s","format","png",Q,"--out",K],{stdio:["ignore","ignore","ignore"],timeout:1e4});let z=P0(K),G=U2(z)??{x:0,y:0,...Z9(z)};return $9("sips",["-c",String(G.height),String(G.width),"--cropOffset",String(G.y),String(G.x),"-s","format","png",Q,"--out",X],{stdio:["ignore","ignore","ignore"],timeout:1e4}),n8(X,Y),{sourcePath:Q,pngPath:Y,width:G.width,height:G.height}}finally{try{if(N0(K))h8(K)}catch{}try{if(N0(X))h8(X)}catch{}}}function Z9($){if($.byteLength<24||$[0]!==137||$.toString("ascii",1,4)!=="PNG")throw Error("Invalid PNG placeholder asset");return{width:$.readUInt32BE(16),height:$.readUInt32BE(20)}}function G4($,Q){let{width:Z,height:J}=Z9($),Y=8,X=0,K=0,z=[];while(Y<$.byteLength){let T=$.readUInt32BE(Y);Y+=4;let q=$.toString("ascii",Y,Y+4);Y+=4;let A=$.subarray(Y,Y+T);if(Y+=T+4,q==="IHDR")X=A[8]??0,K=A[9]??0;else if(q==="IDAT")z.push(A);else if(q==="IEND")break}let G=K===6?4:K===4?2:0;if(X!==8||G===0||z.length===0)return null;let V=K===6,W=a1(Buffer.concat(z)),H=Z*G,N=new Uint8Array(Z*J),j=Buffer.alloc(H),O=0;for(let T=0;T<J;T++){let q=W[O++]??0,A=Buffer.from(W.subarray(O,O+H));O+=H,O2(A,j,G,q);for(let R=0;R<Z;R++){let _=R*G,D=A[_]??0,E=V?A[_+1]??0:D,F=V?A[_+2]??0:D,B=A[_+G-1]??0;if(Q(D,E,F,B))N[T*Z+R]=1}j=A}return{width:Z,height:J,mask:N}}function U2($){let{width:Q,height:Z}=Z9($),J=G4($,(G,V,W,H)=>H>0);if(!J)return{x:0,y:0,width:Q,height:Z};let Y=Q,X=Z,K=-1,z=-1;for(let G=0;G<Z;G++)for(let V=0;V<Q;V++){if(!J.mask[G*Q+V])continue;if(V<Y)Y=V;if(G<X)X=G;if(V>K)K=V;if(G>z)z=G}if(K<Y||z<X)return{x:0,y:0,width:Q,height:Z};return{x:Y,y:X,width:K-Y+1,height:z-X+1}}function j2($,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 C2($,Q){let Z=L2($,Q);if(!Z)return null;let J=G4(Z,(R,_,D,E)=>E>200&&R<30&&_<30&&D<30);if(!J)return null;let{width:Y,height:X,mask:K}=J,z=Math.floor(Y/2),G=Math.floor(X/2),V=(R,_)=>R>=0&&_>=0&&R<Y&&_<X&&K[_*Y+R]===1;if(!V(z,G))return null;let W=z;while(W>0&&V(W-1,G))W--;let H=z;while(H<Y-1&&V(H+1,G))H++;let N=G;while(N>0&&V(z,N-1))N--;let j=G;while(j<X-1&&V(z,j+1))j++;let O=j-N,T=(R,_)=>{let D=0;while(D<O&&!V(R,_?N+D:j-D))D++;return D},q=[T(W,!0),T(H,!0),T(W,!1),T(H,!1)],A=q.reduce((R,_)=>R+_,0)/q.length;return{x:W,y:N,width:H-W+1,height:j-N+1,radius:A}}function L2($,Q){let Z=N$($,Q);if(!N0(Z))return null;try{return P0(W4($,Q,Z))}catch{return null}}function O2($,Q,Z,J){for(let Y=0;Y<$.byteLength;Y++){let X=Y>=Z?$[Y-Z]:0,K=Q[Y]??0,z=Y>=Z?Q[Y-Z]:0;switch(J){case 0:break;case 1:$[Y]=$[Y]+X&255;break;case 2:$[Y]=$[Y]+K&255;break;case 3:$[Y]=$[Y]+Math.floor((X+K)/2)&255;break;case 4:$[Y]=$[Y]+R2(X,K,z)&255;break;default:throw Error(`Unsupported PNG filter ${J}`)}}}function R2($,Q,Z){let J=$+Q-Z,Y=Math.abs(J-$),X=Math.abs(J-Q),K=Math.abs(J-Z);if(Y<=X&&Y<=K)return $;return X<=K?Q:Z}function K6($,Q,Z){$.writeHead(Q,{"Content-Type":"application/json","Cache-Control":"no-store"}),$.end(JSON.stringify({ok:!1,error:Z}))}function T0($){return w0($)??0}function w0($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="string"&&$.trim()){let Q=Number($);return Number.isFinite(Q)?Q:null}return null}function B0($){return typeof $==="string"&&$?$:null}function O0($){return $&&typeof $==="object"&&!Array.isArray($)?$:{}}function p8($){let Q=w0($.x),Z=w0($.y);return Q===null||Z===null?null:{x:Q,y:Z}}import{exec as _2}from"child_process";import{timingSafeEqual as A2}from"crypto";import{request as T2}from"http";import{WebSocketServer as P2}from"ws";var D2=1e4,q2=4194304,Y9="exec disabled; start with --allow-exec",V4="exec requires the exec token",E2="host actions are only available to loopback clients";function I2($){for(let Q=0;Q<$.length;Q++){let Z=$.charCodeAt(Q);if(Z<=31||Z===127)return!0}return/\s/.test($)}function x2($,Q){if(!Q||typeof $!=="string")return!1;let Z=Buffer.from($),J=Buffer.from(Q);return Z.length===J.length&&A2(Z,J)}function z4($){return I0($)&&Z6($)}function w2($,Q,Z,J,Y){let X=!1,K=!1,z=new Map,G=Z.ssePrefixes??[],V=(N)=>{if($.readyState===$.OPEN)$.send(JSON.stringify(N))},W=setTimeout(()=>{if(!X)$.close()},D2);W.unref?.();let H=(N,j)=>{if(z.has(N))return;let O=j.split("?")[0];if(!j.startsWith("/")||I2(j)||!G.some((q)=>O===q)){V({sub:N,end:!0,error:"path not allowed"});return}if(!Q){V({sub:N,end:!0,error:"no local port"});return}let T;try{T=T2({host:"127.0.0.1",port:Q,path:j,headers:{accept:"text/event-stream"}},(q)=>{q.on("data",(A)=>V({sub:N,data:A.toString("utf-8")})),q.on("end",()=>{z.delete(N),V({sub:N,end:!0})})})}catch{V({sub:N,end:!0,error:"bad path"});return}T.on("error",()=>{z.delete(N),V({sub:N,end:!0})}),T.end(),z.set(N,{destroy:()=>T.destroy()})};$.on("message",(N)=>{let j;try{j=JSON.parse(N.toString())}catch{return}if(!X){X=!0,K=x2(j.token,Z.execToken),clearTimeout(W),V({ready:!0});return}if(typeof j.unsub==="number"){z.get(j.unsub)?.destroy(),z.delete(j.unsub);return}if(typeof j.sub==="number"&&typeof j.path==="string"){H(j.sub,j.path);return}if(typeof j.id==="number"&&j.rpc!==void 0){let{id:q}=j;if(!Z.onRpcRequest){V({id:q,error:"rpc requests not supported"});return}if(!Y){V({id:q,error:E2});return}Z.onRpcRequest(j.rpc).then((A)=>V({...A,id:q})).catch((A)=>V({id:q,error:A instanceof Error?A.message:String(A)}));return}if(typeof j.id==="number"&&j.ui!==void 0){let{id:q}=j;if(!Z.onUiRequest){V({id:q,error:"ui requests not supported"});return}Z.onUiRequest(j.ui).then((A)=>V({id:q,...A})).catch((A)=>V({id:q,error:A instanceof Error?A.message:String(A)}));return}if(typeof j.id!=="number"||typeof j.command!=="string"||!j.command)return;let{id:O,command:T}=j;if(!Z.allowExec){V({id:O,stdout:"",stderr:Y9,exitCode:126,error:Y9});return}if(!J){V({id:O,stdout:"",stderr:"exec is only available to loopback clients",exitCode:126});return}if(!K){V({id:O,stdout:"",stderr:V4,exitCode:126,error:V4});return}_2(T,{maxBuffer:16777216},(q,A,R)=>{let _={id:O,stdout:A.toString(),stderr:R.toString(),exitCode:q?q.code??1:0};try{Z.onCommandResult?.(T,_)}catch{}V(_)})}),$.on("error",()=>$.close()),$.on("close",()=>{clearTimeout(W);for(let N of z.values())N.destroy();z.clear()})}function H4($){let Q=new P2({noServer:!0,maxPayload:q2});return function(J,Y,X){let K=J.url??"",z=K.indexOf("?"),G=z===-1?K:K.slice(0,z);if(G!==$.path&&G!==`${$.path}/`)return!1;if(Q6(J)!=="same")return Y.destroy(),!0;let V=($.allowShell??z4)(J),W=($.allowRpc??z4)(J),H=$.serverPort?.()||Y.localPort||void 0;return Q.handleUpgrade(J,Y,X,(N)=>{w2(N,H,$,V,W)}),!0}}import{execFile as l2}from"child_process";import{randomUUID as p2}from"crypto";import{closeSync as c2,constants as d2,fstatSync as n2,lstatSync as O4,openSync as i2,readFileSync as R4,unlinkSync as _4,writeSync as o2}from"fs";import{homedir as a2}from"os";import{basename as r2,dirname as t2,join as W9}from"path";var B4=[{key:"camera",label:"Camera"},{key:"microphone",label:"Microphone"},{key:"photos",label:"Photos"},{key:"photos-add",label:"Add to Photos"},{key:"contacts",label:"Contacts"},{key:"calendar",label:"Calendar"},{key:"reminders",label:"Reminders"},{key:"location",label:"Location"},{key:"location-always",label:"Location (Always)"},{key:"notifications",label:"Notifications"},{key:"motion",label:"Motion"},{key:"media-library",label:"Media Library"},{key:"siri",label:"Siri"}];function S2($){return`'${$.replace(/'/g,"'\\''")}'`}function N4($){return $.map(S2).join(" ")}import{execFile as k2}from"child_process";import{existsSync as M4}from"fs";import{join as F$,resolve as y2}from"path";var M$=C8(import.meta.url),U4=["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"],f2=["none","grayscale","red-green","green-red","blue-yellow"],b2={protanopia:"red-green",deuteranopia:"green-red",tritanopia:"blue-yellow"},T6=["on","off"],v2=new Set(["on","true","enabled","1","yes"]),h2=new Set(["off","false","disabled","0","no"]),u0={appearance:{via:"appearance",values:["light","dark"]},"liquid-glass":{via:"ax",values:["clear","tinted"]},"color-filter":{via:"ax",values:f2,aliases:b2},"text-size":{via:"content_size",values:U4,extraValues:["increment","decrement"]},"reduce-motion":{via:"ax",values:T6,toggle:!0},"increase-contrast":{via:"increase_contrast",values:T6,toggle:!0},"show-borders":{via:"ax",values:T6,toggle:!0},"reduce-transparency":{via:"ax",values:T6,toggle:!0},voiceover:{via:"ax",values:T6,toggle:!0}};function j4($,Q){let Z=u0[$];if(!Z)return null;let J=Q.toLowerCase();if(Z.toggle){if(v2.has(J))return"on";if(h2.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 F4(){let $=[F$(M$,"..","dist","simax","serve-sim-ax-settings"),F$(M$,"simax","serve-sim-ax-settings")];for(let Q of $)if(M4(Q))return y2(Q);return null}var X9=null;function g2(){return X9??=(async()=>{let $=F4();if($)return $;let Q=F$(M$,"..","Sources","SimAXSettings","build.sh");if(!M4(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 U$("bash",[Q]);let Z=F4();if(!Z)throw Error("Build succeeded but sim-ax-settings not found.");return Z})(),X9.catch(()=>{X9=null}),X9}function U$($,Q){return new Promise((Z,J)=>{k2($,Q,{encoding:"utf-8",maxBuffer:4194304},(Y,X,K)=>{if(Y)J(Error(String(K).trim()||Y.message));else Z(String(X).trim())})})}function C4($,Q,Z){let J=a(["ui",$,Q]);if(Z!==void 0)J.push(Z);return U$("xcrun",J)}async function j$($,...Q){let Z=await g2();return U$("xcrun",a(["spawn",$,Z,...Q]))}function u2($){return $==="enabled"?"on":"off"}function m2($){return $==="on"?"enabled":"disabled"}async function C$($,Q){let Z=u0[Q];if(!Z)throw Error(`unknown option: ${Q}`);if(Z.via==="ax")return j$($,"get",Q);let J=(await C4($,Z.via)).toLowerCase();return Z.toggle?u2(J):J}async function K9($,Q,Z){let J=u0[Q];if(!J)throw Error(`unknown option: ${Q}`);if(J.via==="ax"){await j$($,"set",Q,Z);return}await C4($,J.via,J.toggle?m2(Z):Z)}async function L4($){let Q=Object.entries(u0).filter(([,X])=>X.via!=="ax"),[Z,...J]=await Promise.all([j$($,"status").then((X)=>JSON.parse(X)).catch(()=>({})),...Q.map(([X])=>C$($,X).catch(()=>"unsupported"))]),Y={};for(let[X,K]of Object.entries(u0))if(K.via==="ax")Y[X]=Z[X]??"unsupported";return Q.forEach(([X],K)=>{Y[X]=J[K]}),Y}var vW=`Usage: serve-sim ui [status] [--json] [-d udid]
|
|
60
|
+
`,"ascii")}function RZ($){let Q=Buffer.allocUnsafe(5+$.length);return Q.writeUInt32BE($.length+1,0),Q[4]=UZ,Q.set($,5),Q}var _Z={portrait:M6.portrait,portrait_upside_down:M6.portraitUpsideDown,landscape_left:M6.landscapeLeft,landscape_right:M6.landscapeRight};function o7($){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)})}async function a7($,Q){if(await o7($),$.writableEnded||$.destroyed)return!1;if(!Q()||$.writableNeedDrain)await o7($);return!$.writableEnded&&!$.destroyed}function l9(){return{open:0,frames:0,last_frame_at:null,last_error:null}}function AZ($){return{error:"duo_renderer_unavailable",reason:L0($.reason),stage:$.stage,details:L0($.details)}}class r7{udid;dependencies;capture;hid;unsubscribeMjpeg;unsubscribeSize;phase="unstarted";startPromise;width=0;height=0;orientation="portrait";latestJpegBuffer=null;latestJpegLength=0;hidSockets=new Set;duo;duoMonitor;followedCover;primaryDuoPanel;poseQueue=Promise.resolve();duoStateQueue=Promise.resolve();streamResponses=new Set;touchGestureLog;streamHealth={mjpeg:l9(),avcc:l9(),"3d":l9()};deviceHubShadowed;recording;rendererFailureEvent;constructor($,Q){this.udid=$;this.dependencies=Q;this.hid=Q?.hid??new P9($),this.capture=Q?.capture??new D9($),this.duo=new b9({createRenderer:(Z)=>Q?.createDuoRenderer?Q.createDuoRenderer(Z):new y9(Z),onProjection:(Z)=>{for(let J of this.hidSockets)J.send(Z)},onStreamError:(Z,J)=>this.handleStreamError(Z,J,"3d"),onRendererEvent:(Z)=>this.recordRendererEvent(Z),onFrameDelivered:()=>this.noteStreamFrame("3d")})}start(){if(this.phase==="stopped")return Promise.reject(Error(`Device session ${this.udid} is closed`));if(this.startPromise)return this.startPromise;this.phase="starting";let $=(async()=>{if(await this.capture.start(),this.isStopped())throw Error(`Device session ${this.udid} closed while starting`);let Q=await this.capture.subscribeSize((Z)=>this.onScreenSize(Z.width,Z.height));if(this.isStopped())throw await Q(),Error(`Device session ${this.udid} closed while starting`);if(this.unsubscribeSize=Q,this.phase="running",await this.hid.isFoldable?.()&&!this.isStopped()){let Z=await this.capture.subscribeMjpeg((Y)=>this.onSharedMjpegFrame(Y));if(this.isStopped()){await Z();return}if(this.unsubscribeMjpeg=Z,!this.dependencies?.createDuoMonitor)j7(this.udid).then((Y)=>{this.deviceHubShadowed=Y});let J=this.dependencies?.createDuoMonitor??((Y,X)=>new h9(Y,X,{duoHelper:T9}));this.duoMonitor=J(this.udid,(Y)=>{this.followDuoState(Y).catch((X)=>{console.error("[duo] State update failed:",X)})})}})().catch((Q)=>{if(this.phase==="starting")this.phase="failed";throw Q});return $.catch(()=>{}),this.startPromise=$,$}isStopped(){return this.phase==="stopped"}close(){if(this.phase==="stopped")return;this.phase="stopped",this.duo.close(),this.duoMonitor?.close();for(let $ of this.hidSockets)this.runCleanup("HID socket close",()=>$.close());for(let $ of this.streamResponses)this.runCleanup("stream response close",()=>{$.destroy()});if(this.streamResponses.clear(),this.unsubscribeMjpeg)this.runCleanup("shared MJPEG unsubscribe",this.unsubscribeMjpeg);if(this.unsubscribeSize)this.runCleanup("size unsubscribe",this.unsubscribeSize);if(this.hidSockets.clear(),this.recording){let $=this.recording;if(this.recording=void 0,$.limitTimer)clearTimeout($.limitTimer);if($.holdTimer)clearTimeout($.holdTimer);if($.phase!=="stopping"){let Q=$.finalizing?.catch(()=>{})??Promise.resolve();this.runCleanup("recording cleanup",()=>Q.then(()=>v0($.path,{force:!0})))}}this.runCleanup("HID close",()=>this.hid.close?.()),this.runCleanup("capture stop",()=>this.capture.stop())}followDuoState($){let Q=this.duoStateQueue.then(()=>this.applyDuoState($));return this.duoStateQueue=Q.catch(()=>{}),Q}activePanel(){return E7({primaryPanel:this.primaryDuoPanel,hingeDegrees:this.duo.hinge})}async applyDuoState($){if(this.isStopped())return;if($.hingeDegrees!=null)this.duo.noteHinge($.hingeDegrees);if($.primaryPanel)this.primaryDuoPanel=$.primaryPanel;let Q=this.activePanel(),Z=I7(Q);if(($.hingeDegrees!=null||$.primaryPanel)&&Q==="cover"!==this.followedCover)await this.capture.setPreferredScreenSize(Z.width,Z.height),this.followedCover=Q==="cover";let J=$.orientations[Q];if(J)this.orientation=J;this.duo.setPanel(Q),this.broadcastConfig(),this.duo.requestFrame()}onScreenSize($,Q){if($===this.width&&Q===this.height)return;this.width=$,this.height=Q,this.broadcastConfig()}async onSharedMjpegFrame($){let{width:Q,height:Z,data:J}=$;if(this.onScreenSize(Q,Z),!this.latestJpegBuffer||this.latestJpegBuffer.length<J.length){let X=this.latestJpegBuffer?.length??0;this.latestJpegBuffer=Buffer.allocUnsafe(Math.max(J.length,X*2))}this.latestJpegBuffer.set(J,0),this.latestJpegLength=J.length;let Y=this.latestJpeg();if(Y)this.duo.onCapturedFrame(Y)}latestJpeg(){if(!this.latestJpegBuffer)return null;return this.latestJpegBuffer.subarray(0,this.latestJpegLength)}sharedJpegCopy(){let $=this.unsubscribeMjpeg?this.latestJpeg():null;return $?Buffer.from($):null}async seedJpeg(){let $=this.sharedJpegCopy();if($)return $;try{return await this.capture.snapshotJpeg()}catch{return null}}writeMjpegFrame($,Q){let Z=$.write(OZ(Q.length)),J=$.write(Q),Y=$.write(CZ);return Z&&J&&Y}handleDuoMjpeg($,Q){(async()=>{if(await this.start(),Q.destroyed||Q.writableEnded)return;if(!await this.hid.isFoldable?.()){this.sendJson(Q,400,{error:"This device has no Duo model"});return}let Z=new URL($.url??"","http://x").searchParams.get("raw")==="1";if(!this.trackStreamResponse(Q,"3d"))return;this.duo.setPanel(this.activePanel()),Q.once("close",()=>this.duo.detach(Q)),this.duo.attach(Q,{onFirstFrame:()=>{Q.writeHead(200,{"Content-Type":Z?"application/octet-stream":"multipart/x-mixed-replace; boundary=frame","Cache-Control":"no-store"})}})})().catch((Z)=>this.handleStreamError(Q,Z,"3d"))}handleMjpeg($,Q){this.serveMjpeg($,Q).catch((Z)=>this.handleStreamError(Q,Z,"mjpeg"))}async serveMjpeg($,Q){if(await this.start(),Q.writableEnded||Q.destroyed)return;let Z=new URL($.url??"","http://x").searchParams.get("raw")==="1";if(Q.writeHead(200,{"Content-Type":Z?"application/octet-stream":"multipart/x-mixed-replace; boundary=frame","Cache-Control":"no-cache, no-store",Connection:"keep-alive"}),!this.trackStreamResponse(Q,"mjpeg"))return;let J=!1,Y=0,X=null,K=0,V=(N)=>{if(!X||X.length<N.length)X=Buffer.allocUnsafe(Math.max(N.length,(X?.length??0)*2));X.set(N,0),K=N.length},G=async(N)=>{if(J||Q.writableEnded||Q.destroyed)return;J=!0;try{if(await a7(Q,()=>this.writeMjpegFrame(Q,N)))Y=Date.now(),this.noteStreamFrame("mjpeg")}catch(j){if(!Q.destroyed)Q.destroy(j instanceof Error?j:Error(String(j)))}finally{J=!1}},z=this.sharedJpegCopy();if(z)V(z),await G(z);let W=await this.capture.subscribeMjpeg(async(N)=>{V(N.data),await G(N.data)}),B=setInterval(()=>{if(Q.writableEnded||Q.destroyed)return;if(Date.now()-Y<d7)return;if(X)G(Buffer.from(X.subarray(0,K)))},d7);this.bindSubscription(Q,async()=>{clearInterval(B),await W()})}handleAvcc($,Q){this.serveAvcc(Q).catch((Z)=>this.handleStreamError(Q,Z,"avcc"))}async serveAvcc($){if(await this.start(),$.writableEnded||$.destroyed)return;if($.writeHead(200,{"Content-Type":"application/octet-stream","Cache-Control":"no-cache, no-store",Connection:"keep-alive"}),!this.trackStreamResponse($,"avcc"))return;let Q=!1;this.seedJpeg().then((J)=>{if(J&&!Q&&!$.writableEnded&&!$.destroyed)$.write(RZ(J))});let Z=await this.capture.subscribeAvcc(async(J)=>{Q=!0,await a7($,()=>$.write(J.data)),this.noteStreamFrame("avcc")});this.bindSubscription($,Z)}handleConfig($,Q){this.sendJson(Q,200,this.screenConfig())}handleHealth($,Q){this.sendJson(Q,200,{status:"ok"})}handleAx($,Q){return this.serveAxJson(Q,()=>m6(this.udid),"ax_unavailable")}handleForeground($,Q){return this.serveAxJson(Q,()=>l6(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)})}}recordingStatus(){let $=this.recording;if(!$)return{recording:!1};let Q=$.finalizing&&$.phase==="recording";return{recording:!0,startedAt:$.startedAt,...Q?{limitReached:!0}:{},...Q&&$.heldAt!=null?{holdExpiresAt:new Date($.heldAt+this.recordingHoldMs()).toISOString()}:{}}}recordingHoldMs(){return this.dependencies?.recordingHoldMs??k7}async discardExpiredHold(){let $=this.recording;if(!$||!$.holdExpired||$.phase!=="recording")return;this.recording=void 0,console.error(`[record] ${this.udid}: discarding the uncollected recording held at the duration limit`),await $.finalizing?.catch(()=>{}),await v0($.path,{force:!0}).catch(()=>{})}async handleRecording($,Q,Z){let J=($.method??"GET").toUpperCase();if(Z==="status"){this.sendJson(Q,200,this.recordingStatus());return}if(J!=="POST"){Q.setHeader("Allow","POST"),this.sendJson(Q,405,{error:"method_not_allowed"});return}try{if(Z==="start")await this.startRecording($,Q);else await this.stopRecording($,Q)}catch(Y){if(Q.headersSent||Q.writableEnded){Q.destroy();return}this.sendJson(Q,500,{error:"recording_failed",message:L0(Y instanceof Error?Y.message:String(Y))})}}async startRecording($,Q){if(!this.capture.startRecording||!this.capture.stopRecording||this.capture.supportsRecording===!1){this.sendJson(Q,501,{error:"recording_unsupported",message:"This native build cannot record"});return}let Z=y7(new URL($.url??"","http://x").searchParams);if("error"in Z){this.sendJson(Q,400,{error:"invalid_recording_options",message:Z.error});return}if(await this.discardExpiredHold(),this.recording){this.sendJson(Q,409,{error:"already_recording",...this.recordingStatus()});return}let J=p7(MZ(),"serve-sim-recordings"),Y=p7(J,`${this.udid}-${c7()}.mp4`),X=new Date().toISOString(),K=c7(),V={path:Y,startedAt:X,token:K,phase:"starting"};this.recording=V;let G=()=>{this.runCleanup("recording cleanup",()=>v0(Y,{force:!0})),this.sendJson(Q,409,{error:"session_closed",message:"The device session closed while the recording was starting"})};try{await this.start(),await NZ(J,{recursive:!0}),await this.capture.startRecording(Y,{...Z,rotation:f7(this.screenConfig())})}catch(W){if(this.recording!==V)return G();throw this.recording=void 0,await v0(Y,{force:!0}).catch(()=>{}),W}if(this.recording!==V)return G();V.phase="recording";let z=this.dependencies?.maxRecordingMs??S7;V.limitTimer=setTimeout(()=>{if(this.recording!==V||V.phase!=="recording")return;console.error(`[record] ${this.udid}: reached the ${Math.round(z/60000)} min limit; finalizing`),this.finalizeRecording(V).catch((W)=>{console.error(`[record] ${this.udid}: finalize at the duration limit failed:`,W instanceof Error?W.message:W)}).finally(()=>this.holdForOwner(V))},z),V.limitTimer.unref?.(),this.sendJson(Q,200,{recording:!0,startedAt:X,token:K})}holdForOwner($){if(this.recording!==$||$.phase!=="recording")return;$.heldAt=Date.now(),$.holdTimer=setTimeout(()=>{if($.holdTimer=void 0,this.recording!==$||$.phase!=="recording")return;$.holdExpired=!0,console.error(`[record] ${this.udid}: the recording held at the duration limit is now available to any client`)},this.recordingHoldMs()),$.holdTimer.unref?.()}finalizeRecording($){if($.limitTimer)clearTimeout($.limitTimer);return $.limitTimer=void 0,$.finalizing??=this.capture.stopRecording(),$.finalizing}async stopRecording($,Q){let Z=this.recording;if(!Z||Z.phase!=="recording"||!this.capture.stopRecording){this.sendJson(Q,409,{error:"not_recording",...this.recordingStatus()});return}if(Z.finalizing&&!Z.holdExpired&&new URL($.url??"","http://x").searchParams.get("token")!==Z.token){this.sendJson(Q,409,{error:"not_owner",message:"This recording hit the time limit and is held for the client that started it"+(Z.heldAt!=null?` until ${new Date(Z.heldAt+this.recordingHoldMs()).toLocaleTimeString()}`:""),...this.recordingStatus()});return}if(Z.holdTimer)clearTimeout(Z.holdTimer);Z.holdTimer=void 0,Z.phase="stopping";let J=$.aborted||Q.destroyed,Y=()=>{J=!0};$.once("aborted",Y),Q.once("close",Y);let X=()=>{$.off("aborted",Y),Q.off("close",Y)},K,V;try{K=await this.finalizeRecording(Z),{size:V}=await FZ(Z.path)}catch(G){throw await v0(Z.path,{force:!0}).catch(()=>{}),G}finally{if(X(),this.recording===Z)this.recording=void 0}if(J||$.aborted||Q.destroyed||$.socket?.destroyed){await v0(Z.path,{force:!0}).catch(()=>{});return}Q.writeHead(200,{"Content-Type":"video/mp4","Content-Length":String(V),"Content-Disposition":`attachment; filename="${b7()}"`,"Cache-Control":"no-store",[w7]:TZ(K)}),await new Promise((G)=>{let z=HZ(Z.path),W=()=>{z.destroy(),v0(Z.path,{force:!0}).finally(G)};z.once("error",()=>{Q.destroy(),W()}),Q.once("close",W),z.pipe(Q)})}attachHidSocket($){this.hidSockets.add($);let Q=this.configFrame(),Z=this.duo.projectionFrame();if(Z)$.send(Z);if(Q)$.send(Q);$.on("message",(J)=>{let Y=Buffer.isBuffer(J)?J:Buffer.from(J);if(Y[0]===14)this.poseQueue=this.poseQueue.then(async()=>{if(this.isStopped())return;let X=!1;try{X=await this.handleHidMessage(Y)===!0}catch(K){console.error("[hid] Pose failed:",K)}if(this.hidSockets.has($))$.send(Buffer.concat([Buffer.from([14]),Buffer.from(JSON.stringify({ok:X}))]))}).catch((X)=>{console.error("[hid] Pose reply failed:",X)});else this.handleHidMessage(Y).catch((X)=>{console.error("[hid] Input failed:",X)})}),$.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 K=J();if(K)this.recordTouchEvent(K),this.hid.touch(K.type,K.x,K.y,Y,X,K.edge??0);break}case 4:{let K=J();if(!K)break;if(this.recordHidEvent(Q,K),K.page!=null&&K.usage!=null)this.hid.buttonHid(K.page,K.usage,K.phase??"press");else this.hid.button(K.button);break}case 5:{let K=J();if(K)this.recordHidEvent(Q,K),this.hid.multiTouch(K.type,K.x1,K.y1,K.x2,K.y2,Y,X);break}case 6:{let K=J();if(K)this.recordHidEvent(Q,K),this.hid.key(K.type,K.usage);break}case 7:{let K=J();if(!K)break;let V=_Z[K.orientation];if(V!=null&&await this.hid.orientation(V)){if(this.recordHidEvent(Q,K),K.orientation!==this.orientation||K.orientation!==this.duo.viewOrientationName){if(this.duo.hinge==null)this.orientation=K.orientation;this.duo.animateRotation(K.orientation),this.duoMonitor?.refreshOrientation(),this.broadcastConfig(),this.duo.requestFrame()}}break}case 8:{let K=J();if(K)this.recordHidEvent(Q,K),this.hid.caDebug(K.option,K.enabled);break}case 9:this.recordHidEvent(Q,{}),this.hid.memoryWarning();break;case 10:{let K=J();if(K)this.recordHidEvent(Q,K),this.hid.digitalCrown(K.delta);break}case 11:{let K=J();if(K)this.recordHidEvent(Q,K),this.hid.scroll(K.dx*Y,K.dy*X,Y,X,K.x,K.y);break}case 12:this.recordHidEvent(Q,{}),this.hid.softwareKeyboard();break;case 13:{let K=J();if(!K)break;let V=Number(K.width),G=Number(K.height);if(!Number.isFinite(V)||!Number.isFinite(G))break;this.recordHidEvent(Q,K),await this.capture.setPreferredScreenSize(Math.round(V),Math.round(G));break}case 14:{let K=J();if(!K)break;if(this.recordHidEvent(Q,K),typeof K.pose==="string"&&K.pose.trim()){let V=d6(K.pose);if(!V)break;let G=this.duo.displayAngle();if(this.duo.beginPose(G,V.hingeDegrees),!await this.hid.pose(K.pose,G)){this.duo.cancelPose();break}return this.duo.finishPose(V.hingeDegrees),await this.followDuoState({hingeDegrees:V.hingeDegrees,orientations:{}}),this.duoMonitor?.refreshOrientation(),this.broadcastConfig(),this.duo.requestFrame(),!0}else if(typeof K.hinge==="number"&&Number.isFinite(K.hinge)&&K.hinge>=0&&K.hinge<=180){if(!await this.hid.hinge(K.hinge))break;return this.duo.cancelPose(),await this.followDuoState({hingeDegrees:K.hinge,orientations:{}}),this.duoMonitor?.refreshOrientation(),this.broadcastConfig(),this.duo.requestFrame(),!0}break}}}recordTouchEvent($){if($.type==="begin"){this.touchGestureLog=i7($);return}if($.type==="move"){let Q=this.touchGestureLog;if(!Q)Q=i7($),this.touchGestureLog=Q;if(Q.lastX=$.x,Q.lastY=$.y,Q.moveCount++,$.edge!=null)Q.edge=$.edge;if(n7(Q))if(Q.eventId==null){let Z=_0({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:o6(Q),details:this.touchGestureDetails(Q,"drag","move")});Q.eventId=Z.id}else n6(Q.eventId,{kind:"drag",action:"drag",summary:o6(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&&n7(Q))if(Q.eventId==null)_0({device:this.udid,source:"hid",kind:"drag",action:"drag",summary:o6(Q),details:this.touchGestureDetails(Q,"drag","end")});else n6(Q.eventId,{kind:"drag",action:"drag",summary:o6(Q),details:this.touchGestureDetails(Q,"drag","end")});else _0({device:this.udid,source:"hid",kind:"tap",action:"tap",summary:`Tap ${e0($.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=u7(this.udid,$,Q,this.eventLogScreen());if(Z)_0(Z)}screenConfig(){let $=this.duo.hinge;return{width:this.width,height:this.height,orientation:this.orientation,...$==null?{}:{hingeDegrees:$,duoViewOrientation:this.duo.viewOrientationName}}}configFrame(){if(this.width===0&&this.height===0)return null;return Buffer.concat([Buffer.from([jZ]),Buffer.from(JSON.stringify(this.screenConfig()))])}broadcastConfig(){let $=this.configFrame();if(!$)return;for(let Q of this.hidSockets)Q.send($)}bindSubscription($,Q){let Z=!1,J=()=>{if(Z)return;Z=!0,this.streamResponses.delete($),this.runCleanup("stream unsubscribe",Q)};if($.writableEnded||$.destroyed){J();return}$.once("close",J),$.once("error",J)}trackStreamResponse($,Q){if(this.isStopped()||$.writableEnded||$.destroyed){if(!$.writableEnded&&!$.destroyed)$.destroy();return!1}this.streamResponses.add($),this.streamHealth[Q].open++;let Z=()=>{if($.off("close",Z),$.off("error",Z),this.streamResponses.delete($))this.streamHealth[Q].open--};return $.once("close",Z),$.once("error",Z),!0}runCleanup($,Q){try{Promise.resolve(Q()).catch((Z)=>this.logCleanupError($,Z))}catch(Z){this.logCleanupError($,Z)}}logCleanupError($,Q){console.error(`[capture] ${$} failed for ${this.udid}:`,Q instanceof Error?Q.message:Q)}noteStreamFrame($){let Q=this.streamHealth[$];Q.frames++,Q.last_frame_at=new Date().toISOString()}recordRendererEvent($){if($.phase==="ready"){this.rendererFailureEvent=void 0,_0({device:this.udid,source:"capture",kind:"duo.renderer",action:"ready",status:"ok",summary:`Duo renderer ready (${$.firstFrameMs} ms to first frame)`,details:{phase:"ready","duo.first_frame_ms":$.firstFrameMs}});return}let{error:Q}=$;A7(Q);let Z=`${Q.stage}\x00${Q.reason}`,J=L0(Q.reason),Y={phase:"failed",stage:Q.stage,reason:J,...L0(Q.details)},X=this.rendererFailureEvent;if(X?.key===Z&&n6(X.id,{details:{...Y,count:X.count+1}})){X.count++;return}let K=_0({device:this.udid,source:"capture",kind:"duo.renderer",action:"failed",status:"error",summary:`Duo renderer ${Q.stage} failed: ${J}`,details:{...Y,count:1}});this.rendererFailureEvent={id:K.id,key:Z,count:1}}async diagnostics(){let $=null;if(this.capture.diagnostics)try{$=JSON.parse(await this.capture.diagnostics())}catch(Q){$={error:Q instanceof Error?Q.message:String(Q)}}else $={error:"native capture diagnostics unavailable in this build"};return{udid:this.udid,phase:this.phase,screen:this.screenConfig(),streams:structuredClone(this.streamHealth),native:$,duo:{...this.duo.diagnostics(),primary_panel:this.primaryDuoPanel??null,active_panel:this.activePanel(),followed_cover:this.followedCover??null},hid:{device_hub_input_shadowed:this.deviceHubShadowed??null,sockets:this.hidSockets.size}}}handleStreamError($,Q,Z){let J=L0(Q instanceof Error?Q.message:String(Q));if(Z)this.streamHealth[Z].last_error={at:new Date().toISOString(),message:J,...Q instanceof z0?{stage:Q.stage}:{}};if($.writableEnded||$.destroyed)return;if(Q instanceof z0&&!$.headersSent){this.sendJson($,503,AZ(Q));return}if($.headersSent){$.destroy(Q instanceof Error?Q:Error(String(Q)));return}this.sendJson($,503,{error:"capture_unavailable",message:J})}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)}),$.end(J)}}var q0=new Map;function t7($){if($){let Q=q0.get($);return Q?[Q]:[]}return[...q0.values()]}function p9($){let Q=q0.get($);if(!Q){let Z=new r7($);Q=Z,q0.set($,Z),Z.start().catch(()=>{if(q0.get($)!==Z)return;q0.delete($),Z.close()})}return Q}function c9($){let Q=q0.get($);if(Q)Q.close(),q0.delete($)}function TZ($){let Q;try{Q=JSON.parse($)}catch{return"{}"}return delete Q.path,JSON.stringify(Q).replace(/[^\x20-\x7e]/g,"")}import{execFile as PZ}from"node:child_process";import{closeSync as TK,existsSync as DZ,openSync as PK,readdirSync as qZ,readFileSync as EZ,readSync as DK,statSync as qK}from"node:fs";import{dirname as IZ,join as $6}from"node:path";import{fileURLToPath as xZ}from"node:url";var wZ=1;var s7=($,Q)=>new Promise((Z)=>{PZ($,Q,{timeout:5000,maxBuffer:4194304},(J,Y)=>{Z(J?null:String(Y).trim())})});function SZ(){return"0.1.50-beta.145.1"}function kZ($){let Q=/^(.*?\.app)\/Contents\/Developer\/?$/.exec($);return Q?Q[1]:null}async function yZ($){let Q=new Set,Z=await $("/usr/bin/mdfind",["kMDItemCFBundleIdentifier == 'com.apple.dt.Xcode'"]);for(let J of Z?.split(`
|
|
61
|
+
`)??[])if(J.trim().endsWith(".app"))Q.add(J.trim());try{for(let J of qZ("/Applications"))if(/^Xcode.*\.app$/.test(J))Q.add($6("/Applications",J))}catch{}return[...Q].sort()}async function e7($={}){let Q=$.probe??s7,Z=$.env??process.env,J=$.exists??DZ,[Y,X,K,V,G,z]=await Promise.all([Q("/usr/bin/sw_vers",["-productVersion"]),Q("/usr/bin/sw_vers",["-buildVersion"]),Q("/usr/sbin/sysctl",["-n","machdep.cpu.brand_string"]),Q("/usr/bin/xcode-select",["-p"]),Q("/usr/bin/xcodebuild",["-version"]),Q("/bin/ps",["-axo","pid=,command="])]),W=Z.DEVELOPER_DIR??V,B=W?kZ(W):null,N=await($.listXcodes?$.listXcodes():yZ(Q)),j=await Promise.all(N.map(async(q)=>{let A=await Q("/usr/bin/defaults",["read",$6(q,"Contents","Info"),"CFBundleShortVersionString"]),R=await Q("/usr/bin/defaults",["read",$6(q,"Contents","version"),"ProductBuildVersion"]);return{path:q,version:A,build:R,selected:q===B,has_device_hub:J($6(q,"Contents","Applications","DeviceHub.app")),has_duo_model:J(w9($6(q,"Contents","Developer")))}})),O=(z??"").split(`
|
|
62
|
+
`).map((q)=>/^\s*(\d+)\s+(.*\/DeviceHub\.app\/Contents\/MacOS\/\S+)/.exec(q)).filter((q)=>q!=null).map((q)=>{let A=q[2],R=/^(.*?\.app)\/Contents\/Applications\/DeviceHub\.app\//.exec(A)?.[1]??null;return{pid:Number(q[1]),executable:A,xcode:R,matches_selected:R!=null&&R===B}}),T=S9(Z,()=>{if(!V)throw Error("xcode-select -p failed");return V},J);return{macos:{version:Y,build:X},chip:K,arch:process.arch,node:process.version,xcode:{xcode_select:V,developer_dir_env:Z.DEVELOPER_DIR??null,effective_developer_dir:W,xcodebuild_version:G,installed:j},device_hub:{processes:O},duo_renderer:{executable:k9(),model_path:T.modelPath,model_source:T.source,model_found:T.exists,...T.error?{model_error:T.error}:{}}}}async function $8($,Q=s7){let Z=await Q("/usr/bin/xcrun",o(["list","devices","-j"])),J=null;try{let Y=JSON.parse(Z??"{}");for(let[X,K]of Object.entries(Y.devices??{})){let V=K.find((G)=>G.udid===$);if(V){J={name:V.name,state:V.state,runtime:X,device_type:V.deviceTypeIdentifier??null};break}}}catch{}return{udid:$,...J??{error:"not found in simctl list"},device_hub_input_shadowed:await C7($,async(Y)=>{let X=await Q("/usr/bin/xcrun",Y);if(X==null)throw Error("probe failed");return X})}}function Q8($){return!!$&&typeof $==="object"&&!Array.isArray($)}function fZ($){if(!Q8($))return $;let Q={...$};if(Array.isArray($.errors)){let Z=new Map;for(let J of $.errors){let Y=Z.get(J.codec);if(!Y){Z.set(J.codec,{...J});continue}let X=J.last_at>Y.last_at?J:Y;Z.set(J.codec,{...X,count:Y.count+J.count,first_at:J.first_at<Y.first_at?J.first_at:Y.first_at,last_at:X.last_at,variants:(Y.variants??1)+1})}Q.errors=[...Z.values()].sort((J,Y)=>J.last_at<Y.last_at?1:J.last_at>Y.last_at?-1:0)}if(Array.isArray($.sessions)){let Z=new Map;for(let J of $.sessions){let Y=Z.get(J.codec),X=(Y?.session_count??0)+1;Z.set(J.codec,{...!Y||J.at>=Y.at?J:Y,session_count:X})}Q.sessions=[...Z.values()].sort((J,Y)=>J.at<Y.at?-1:J.at>Y.at?1:0)}return Q}function bZ($){let Q=$.native;if(!Q8(Q)||!("encoders"in Q))return $;return{...$,native:{...Q,encoders:fZ(Q.encoders)}}}function Z8($){let Q={schema_version:wZ,generated_at:($.now??new Date).toISOString(),serve_sim:{version:SZ(),pid:process.pid},host:$.host,devices:$.devices??[],sessions:($.sessions??[]).map(bZ),event_log:$.event_log??[],...$.server?{server:$.server}:{},...$.crash_reports?{crash_reports:$.crash_reports}:{}};return L0(Q,$.home)}function J8($){let Q=$.now??Date.now,Z=$.burst,J=Q();return{take(){let Y=Q();if(Z=Math.min($.burst,Z+(Y-J)/$.refillMs),J=Y,Z>=1)return Z-=1,{ok:!0};return{ok:!1,retryAfterMs:Math.ceil((1-Z)*$.refillMs)}}}}function Y8($,Q=Date.now){let Z=new Map;return{get(J,Y){let X=Q(),K=Z.get(J);if(K&&X-K.at<$)return K.value;for(let[z,W]of Z)if(X-W.at>=$)Z.delete(z);let V=Y(),G={at:X,value:V};return Z.set(J,G),V.catch(()=>{if(Z.get(J)===G)Z.delete(J)}),V}}}import{WebSocket as vZ}from"ws";var hZ=Array.from({length:10},($,Q)=>8081+Q),gZ=new Set(["host.exp.Exponent"]);function d9($){return!gZ.has($)}var K8=1000,W8=1200,bK=K8+W8,X8=2;function uZ($){let Q=new Map;for(let Z of $){if(!Z.appId)continue;let J=Z.reactNative?.logicalDeviceId??Z.deviceName??Z.appId;Q.set(J,Z.deviceName)}return Q}function G8($,Q,Z){return $.some((J)=>J.appId===Q&&J.deviceName===Z)}function mZ($,Q,Z){if(!G8($,Q,Z))return!1;let J=uZ($);return J.size===1&&[...J.values()][0]===Z}function V8($,Q){let Z=[...$],J=Z.find((X)=>X.udid===Q)?.name;if(!J)return;return Z.some((X)=>X.udid!==Q&&X.name===J&&X.state==="Booted")?void 0:J}async function lZ($){let Q=await fetch($,{signal:AbortSignal.timeout(800)});if(!Q.ok)throw Error(`HTTP ${Q.status}`);return Q.json()}function pZ($){if(!$||typeof $!=="object")return[];return Object.entries($).filter(([,Q])=>cZ(Q)).map(([Q])=>Q)}function cZ($){if(typeof $==="string")return new URLSearchParams($).has("role");if($&&typeof $==="object")return $.role!=null;return!1}function dZ($,{peersTimeoutMs:Q=500,timeoutMs:Z=W8}={}){return new Promise((J)=>{let Y=new vZ(`ws://127.0.0.1:${$}/message`),X=`serve-sim-peers-${Date.now()}`,K,V=!1,G=null,z=(N)=>{if(V)return;V=!0,clearTimeout(W),clearTimeout(K),J(N);try{Y.close()}catch{}},W=setTimeout(()=>z(G??"failed"),Z),B=(N,j)=>{if(V||G)return;clearTimeout(K),G=j,Y.send(JSON.stringify({version:X8,...N}),(O)=>z(O?"failed":j))};Y.on("open",()=>{Y.send(JSON.stringify({version:X8,id:X,method:"getpeers",target:"server"})),K=setTimeout(()=>B({method:"reload"},"broadcast"),Q)}),Y.on("message",(N)=>{let j;try{j=JSON.parse(N.toString())}catch{return}if(j.id!==X||G)return;if(j.error!==void 0&&j.result===void 0){B({method:"reload"},"broadcast");return}let O=pZ(j.result);if(O.length===1)B({method:"reload",target:O[0]},"targeted");else z(O.length===0?"failed":"ambiguous")}),Y.on("error",()=>z(G??"failed"))})}async function nZ($,Q){let Z=await Promise.all($.map(async(Y)=>{try{let X=await Q(`http://127.0.0.1:${Y}/json/list`);return Array.isArray(X)?X:null}catch{return null}})),J=new Map;return $.forEach((Y,X)=>{if(Z[X])J.set(Y,Z[X])}),J}async function z8($,Q,Z=hZ,{fetchJson:J=lZ,sendReload:Y=(K)=>dZ(K),lookupBudgetMs:X=K8}={}){if(!d9($))return{sent:!1,reason:"unsupported-app"};let K,V=await Promise.race([Promise.all([Promise.resolve(Q).catch(()=>null),nZ(Z,J)]),new Promise((O)=>{K=setTimeout(()=>O(null),X)})]).finally(()=>clearTimeout(K));if(!V)return{sent:!1,reason:"timeout"};let[G,z]=V;if(!G)return{sent:!1,reason:"unknown-device"};let W=[...z].filter(([,O])=>G8(O,$,G));if(W.length===0)return{sent:!1,reason:"no-metro"};let B=W.map(([O])=>O);if(W.length>1||!mZ(W[0][1],$,G))return{sent:!1,reason:"ambiguous",ports:B};let N=B[0],j=await Y(N);if(j==="targeted"||j==="broadcast")return{sent:!0,port:N,targeted:j==="targeted"};return{sent:!1,reason:j==="ambiguous"?"ambiguous":"send-failed",ports:B}}import{execFileSync as m1}from"child_process";import{createHash as l1}from"crypto";import{readFileSync as p1,unlinkSync as YW}from"fs";import{fileURLToPath as Z1}from"url";import{dirname as J1}from"path";import{createHash as H8,timingSafeEqual as iZ}from"crypto";var N8="SERVE_SIM_AUTH_TOKEN",n9="serve_sim_auth",F8="x-serve-sim-auth",oZ=new Set(["forwarded","via","x-real-ip","x-client-ip","x-cluster-client-ip","true-client-ip","fastly-client-ip","cf-connecting-ip","cf-ray"]),aZ=["x-forwarded-","tailscale-","ngrok-","x-original-forwarded"],rZ=new Map;function E0($){return Array.isArray($)?$[0]:$}function i9($){let Q=$.socket;if(!Q)return;let Z=Q.remoteAddress;if(Z&&o9(Z)&&typeof Q.remotePort==="number"){let J=rZ.get(Q.remotePort);if(J)return J}return Z}function o9($){if(!$)return!1;let Q=$.toLowerCase();if(Q==="::1"||Q==="0:0:0:0:0:0:0:1")return!0;let Z=Q.startsWith("::ffff:")?Q.slice(7):Q;return/^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(Z)}function tZ($){if(!$)return;try{return new URL(`http://${$}`).hostname.toLowerCase()}catch{return}}function M8($){if(!$)return!1;if($==="localhost"||$==="[::1]")return!0;return o9($)}function sZ($){for(let Q of Object.keys($)){let Z=Q.toLowerCase();if(oZ.has(Z))return!0;if(aZ.some((J)=>Z.startsWith(J)))return!0}return!1}function eZ($){return o9(i9($))&&!sZ($.headers)}function I0($){if(!eZ($))return!1;return M8(tZ(E0($.headers.host)))}function Q6($){let Q=E0($.headers.origin);if(!Q)return"absent";try{let Z=new URL(Q);if(Z.protocol!=="http:"&&Z.protocol!=="https:")return"cross";let J=Z.host.toLowerCase();return[E0($.headers.host),E0($.headers["x-forwarded-host"])?.split(",")[0]?.trim()].some((X)=>!!X&&X.toLowerCase()===J)?"same":"cross"}catch{return"cross"}}function Z6($){let Q=E0($.headers.origin);if(!Q)return!1;try{let Z=new URL(Q);if(Z.protocol!=="http:"&&Z.protocol!=="https:")return!1;if(Z.host.toLowerCase()!==(E0($.headers.host)??"").toLowerCase())return!1;return M8(Z.hostname.toLowerCase())}catch{return!1}}function B8($){return H8("sha256").update($).digest()}function a6($,Q){return iZ(B8($),B8(Q))}function a9($){return H8("sha256").update(`serve-sim-auth-cookie:${$}`).digest("base64url")}function $1($,Q){if(!$)return;for(let Z of $.split(";")){let J=Z.indexOf("=");if(J===-1)continue;if(Z.slice(0,J).trim()===Q)return Z.slice(J+1).trim()}return}function Q1($,Q){let Z=E0($.headers.authorization)??"",J=/^Bearer\s+(.+)$/i.exec(Z)?.[1]?.trim();if(J&&a6(J,Q))return!0;let Y=$1(E0($.headers.cookie),n9);return!!Y&&a6(Y,a9(Q))}function r9($,Q){if(!Q)return{ok:!1,status:403,message:`Remote access is disabled. Start serve-sim with --auth-token <token> (or ${N8}) and send it as "Authorization: Bearer <token>".`};if(Q1($,Q))return{ok:!0};return{ok:!1,status:401,message:"Missing or invalid serve-sim auth token."}}function U8($){let Q=($??process.env[N8]??"").trim();return Q===""?void 0:Q}function j8($){return J1(Z1($))}import{execSync as X1}from"child_process";function C8($){try{let Q=X1(`lsof -ti tcp:${$} -sTCP:LISTEN`,{encoding:"utf-8",stdio:"pipe"}).trim();if(!Q)return[];let Z=process.pid;return Q.split(`
|
|
63
|
+
`).map((J)=>parseInt(J,10)).filter((J)=>Number.isFinite(J)&&J!==Z)}catch{return[]}}var L6=f5(E8(),1),eK=L6.default("serve-sim:cli"),u1=L6.default("serve-sim:helper"),e9=L6.default("serve-sim:state"),O6=L6.default("serve-sim:mw");var c1=/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i;function d1($){return c1.test($)}function n1($){if(!Number.isInteger($)||$<=0)return!1;try{return process.kill($,0),!0}catch{return!1}}function i1($){return/serve-sim(?:-bin)?/.test($)}function o1($){try{return p1(`/proc/${$}/cmdline`,"utf8").split(String.fromCharCode(0)).join(" ").trim()}catch{}try{return m1("ps",["-p",String($),"-o","args="],{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:1000}).trim()}catch{return null}}function I8($,Q={}){let Z=Q.isAlive??n1,J=Q.portHolders??C8,Y=Q.commandLine??o1;if(Z($.pid))return $;for(let X of J($.port)){if(X===process.pid||!Z(X))continue;let K=Y(X);if(K==null||!i1(K))continue;return e9("recovered helper for %s via port %d pid %d (recorded pid %d was dead)",$.device,$.port,X,$.pid),{...$,pid:X}}return null}function x8($){try{c6($)}catch(Q){e9("failed to rewrite recovered state for %s: %o",$.device,Q)}}function w8($){return $?l1("sha256").update($).digest("hex"):void 0}function S8($,Q,Z,J){if(!b6($.deviceSet,J))return"keep";if(Q&&d1($.device)&&!Q.has($.device))return $.pid===Z?"recycle-self":"recycle-helper";return"keep"}import{execFileSync as $9}from"child_process";import{createHash as p8}from"crypto";import{existsSync as N0,mkdirSync as c8,readdirSync as a1,readFileSync as P0,renameSync as d8,statSync as n8,unlinkSync as v8}from"fs";import{tmpdir as i8}from"os";import{basename as o8,dirname as Q9,join as J0}from"path";import{inflateSync as r1}from"zlib";function k8($){if($.length===0)return null;return $.reduce((Q,Z)=>Z.width*Z.height<Q.width*Q.height?Z:Q)}function y8($){if($.length!==2)return $.map(()=>"display");return $[0]<=$[1]?["cover","inner"]:["inner","cover"]}function f8($,Q="Display"){switch($){case"cover":return"Cover";case"inner":return"Inner";default:return Q}}function b8($){let Q=Q$(Q$($).capabilities??$),Z=Array.isArray(Q.displays)?Q.displays:[],J=[];for(let Y of Z){let X=Q$(Y);if(R6(X.displayType)!=="integrated")continue;if(X.hasDigitizer!==!0)continue;let K=R6(X.chromeIdentifier);if(!K)continue;let V=$$(X.width),G=$$(X.height);if(!V||!G||V<=0||G<=0)continue;let z=$$(X.scale),W=R6(X.deviceName)??(typeof X.screenID==="number"?`screen-${X.screenID}`:`display-${J.length}`);J.push({id:W,label:R6(X.displayName)??W,chromeIdentifier:K,mask:R6(X.framebufferMaskIdentifier),width:V,height:G,logicalScreenSize:z&&z>0?{width:V/z,height:G/z}:null})}return J}function $$($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="string"&&$.trim()){let Q=Number($);return Number.isFinite(Q)?Q:null}return null}function R6($){return typeof $==="string"&&$?$:null}function Q$($){return $&&typeof $==="object"&&!Array.isArray($)?$:{}}var z$="/Library/Developer/CoreSimulator/Profiles/DeviceTypes",a8="/Library/Developer/DeviceKit/Chrome",h8="com.apple.dt.devicekit.chrome.",g8=J0(i8(),"serve-sim-devicekit-chrome"),u8=J0(i8(),"serve-sim-device-placeholder-assets"),x0="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle/Contents/Resources",t1="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/CoreTypes-0006.bundle/Contents/Resources",m8={"vision-pro":{paths:[J0(x0,"com.apple.vision-pro.icns"),J0(t1,"com.apple.visionpro.icns")]},"iphone-17e":{paths:[J0(x0,"com.apple.iphone-16-e-1.icns")]},"ipad-air-11-inch-m4":{paths:[J0(x0,"com.apple.ipad-air-m3-1.icns")]},"ipad-air-13-inch-m4":{paths:[J0(x0,"com.apple.ipad-air-m3-1.icns")]}},Z$=null,J$=new Map,Y$=new Map,X$=new Map,K$=new Map,W$=null,G$=new Map;function A6($){return $.startsWith(h8)?$.slice(h8.length):$}function B$($){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]),K=Number(Z[4]),V=Math.abs(X-J),G=Math.abs(K-Y);return V>0&&G>0?{width:V,height:G}:null}function s1($,Q){let Z=F2($);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=J0(Y,`${J}.pdf`);if(!N0(X))return null;let K=B$(P0(X));if(!K)return null;let V=M2(Q);return{width:K.width/V,height:K.height/V}}function H$($){let Q=J9($);if(X$.has(Q))return X$.get(Q)??[];let Z=Z2(Q);return X$.set(Q,Z),Z}function r8($){let Q=H$($);if(Q.length>0)return k8(Q)?.chrome??null;let Z=J9($),J=Z;if(Y$.has(J))return Y$.get(J)??null;let Y=J2(Z);return Y$.set(J,Y),Y}function t8($){let Q=J9($);if(K$.has(Q))return K$.get(Q)??null;let Z=e1($);return K$.set(Q,Z),Z}function e1($){let Q=X2($),Z=Q?Z4(Q):null,J=K2(Z)??W2($.name);if(!J)return null;let Y=$4(J);return Y?{name:J,width:Y.width,height:Y.height}:null}function s8($,Q){let Z=A6($.searchParams.get("chrome")??""),J=$.searchParams.get("image")??"";if(!/^[A-Za-z0-9_-]+$/.test(Z)||!J){K6(Q,400,"Invalid chrome asset request");return}let Y=X4(Z);if(!Y||!Y.allowedImages.has(J)||J.includes("/")){K6(Q,404,"Chrome asset not found");return}let X=F$(Z,J);if(!N0(X)){K6(Q,404,"Chrome asset not found");return}try{let K=K4(Z,J,X),V=P0(K);Q.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(V.byteLength)}),Q.end(V)}catch(K){K6(Q,500,K instanceof Error?K.message:"Failed to render chrome asset")}}function e8($,Q){let Z=$.searchParams.get("name")??"";try{let J=$4(Z);if(!J){K6(Q,404,"Placeholder asset not found");return}let Y=P0(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){K6(Q,500,J instanceof Error?J.message:"Failed to render placeholder asset")}}function $4($){if(!/^[A-Za-z0-9._-]+$/.test($))return null;if(G$.has($))return G$.get($)??null;let Q=$2($),Z=Q?U2($,Q):null;return G$.set($,Z),Z}function $2($){let Z=Q2($)?.paths.find((Y)=>N0(Y));if(Z)return Z;if(!Y4().some((Y)=>Y.iconName===$))return null;let J=J0(x0,`${$}.icns`);return N0(J)?J:null}function Q2($){return Object.prototype.hasOwnProperty.call(m8,$)?m8[$]:null}function Z2($){let Q=N$($);if(!N0(Q))return[];let Z=Q9(Q),J=_6(J0(Z,"capabilities.plist")),Y=b8(J);if(Y.length===0)return[];let X=y8(Y.map((V)=>V.width*V.height)),K=[];for(let V=0;V<Y.length;V++){let G=Y[V],z=Q4(A6(G.chromeIdentifier),J4(Z,G.mask),G.logicalScreenSize);if(!z)continue;let W=X[V]??"display";K.push({id:G.id,role:W,name:f8(W,G.label),width:G.width,height:G.height,chrome:z})}return K}function J2($){let Q=N$($);if(!N0(Q))return null;let Z=Z4(Q);if(!Z?.chromeIdentifier)return null;return Q4(Z.chromeIdentifier,Z.framebufferMaskSize,Z.screenSize)}function Q4($,Q,Z){let J=X4($);if(!J)return null;let Y=null;if(J.compositeImage)Y=V$(J.identifier,J.compositeImage);let X=J.compositeImage?L2(J.identifier,J.compositeImage):null,K=(X&&Q?C2(Q,X):null)??Z??(Y?{width:Y.width-J.insets.left-J.insets.right,height:Y.height-J.insets.top-J.insets.bottom}:null);if(!K||K.width<=0||K.height<=0)return null;let V=Y??{width:K.width+J.insets.left+J.insets.right,height:K.height+J.insets.top+J.insets.bottom},G={x:J.devicePadding.left,y:J.devicePadding.top,width:V.width,height:V.height},z={width:V.width+J.devicePadding.left+J.devicePadding.right,height:V.height+J.devicePadding.top+J.devicePadding.bottom},W={x:G.x+(V.width-K.width)/2,y:G.y+(V.height-K.height)/2,width:K.width,height:K.height},B=X?Math.max(0,X.radius-(X.width-K.width)/2):J.innerCornerRadius,N=J.slice?V$(J.identifier,J.slice.topLeft):null,j=J.identifier.startsWith("watch"),O=J.buttons.flatMap((T)=>{let q=V$(J.identifier,T.image);if(!q)return[];let A=B2(T,q,V,J.devicePadding),R={x:q.width>0?(T.rolloverOffset.x-T.normalOffset.x)/q.width:0,y:q.height>0?(T.rolloverOffset.y-T.normalOffset.y)/q.height:0};return[{name:T.name,image:T.image,imageDown:T.imageDown,onTop:T.onTop||j,frame:{...A,...q},hover:R,usagePage:T.usagePage,usage:T.usage}]});return{identifier:J.identifier,frame:z,body:G,screen:W,insets:J.insets,outerCornerRadius:J.outerCornerRadius,innerCornerRadius:J.innerCornerRadius,screenRadius:B,compositeImage:J.compositeImage,slice:J.slice,corner:N,buttons:O}}function Z4($){let Q=_6($);if(!Q)return null;let Z=typeof Q.chromeIdentifier==="string"?Q.chromeIdentifier:null,J=Z?A6(Z):null;return{chromeIdentifier:J,modelIdentifier:typeof Q.modelIdentifier==="string"?Q.modelIdentifier:null,productClass:typeof Q.productClass==="string"?Q.productClass:null,screenSize:J?s1({...Q,__profileDir:Q9($)},J):null,framebufferMaskSize:Y2({...Q,__profileDir:Q9($)})}}function Y2($){let Q=typeof $.framebufferMask==="string"?$.framebufferMask:null,Z=typeof $.__profileDir==="string"?$.__profileDir:null;if(!Q||!Z)return null;return J4(Z,Q)}function J4($,Q){if(!Q)return null;let Z=J0($,`${Q}.pdf`);if(!N0(Z))return null;return B$(P0(Z))}function J9($){return H2($.deviceTypeIdentifier)??$.name}function X2($){let Q=N$(J9($));return N0(Q)?Q:null}function N$($){return J0(z$,`${$}.simdevicetype`,"Contents","Resources","profile.plist")}function K2($){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 Y4())if(Z.modelCodes.some((J)=>Q.has(J)))return Z.iconName;return null}function W2($){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 Y4(){if(W$)return W$;let $=_6(J0(x0,"MobileDevices-Info.plist"))??_6(J0(Q9(x0),"Info.plist")),Q=Array.isArray($?.UTExportedTypeDeclarations)?$.UTExportedTypeDeclarations:[],Z=[];for(let J of Q){let Y=O0(J),X=H0(Y.UTTypeIconFile);if(!X||!X.endsWith(".icns"))continue;let K=J0(x0,X);if(!N0(K))continue;let G=O0(Y.UTTypeTagSpecification)["com.apple.device-model-code"],z=Array.isArray(G)?G.filter((W)=>typeof W==="string"&&W.length>0):[];if(z.length===0)continue;Z.push({description:H0(Y.UTTypeDescription)??"",iconFile:X,iconName:o8(X,".icns"),modelCodes:z})}return W$=Z,Z}function X4($){let Q=A6($);if(!/^[A-Za-z0-9_-]+$/.test(Q))return null;if(J$.has(Q))return J$.get(Q)??null;let Z=J0(a8,`${Q}.devicechrome`,"Contents","Resources","chrome.json"),J=null;try{let Y=JSON.parse(P0(Z,"utf-8"));J=G2(Y)}catch{J=null}return J$.set(Q,J),J}function G2($){let Q=typeof $.identifier==="string"?$.identifier:null;if(!Q)return null;let Z=A6(Q),J=O0($.images),Y=O0(J.sizing),X=O0($.paths),K=T0(O0(X.simpleOutsideBorder).cornerRadiusX),V={top:T0(Y.topHeight),left:T0(Y.leftWidth),bottom:T0(Y.bottomHeight),right:T0(Y.rightWidth)},G=O0(J.devicePadding),z={top:T0(G.top),left:T0(G.left),bottom:T0(G.bottom),right:T0(G.right)},W=typeof J.composite==="string"?J.composite:null,B=V2(J),N=Array.isArray($.inputs)?$.inputs.flatMap((O)=>{let T=z2(O0(O));return T?[T]:[]}):[],j=new Set;for(let O of Object.values(J))if(typeof O==="string")j.add(O);for(let O of N)j.add(O.image);if(Array.isArray($.inputs))for(let O of $.inputs){let T=O0(O);if(typeof T.imageDown==="string")j.add(T.imageDown)}return{identifier:Z,insets:V,devicePadding:z,outerCornerRadius:K,innerCornerRadius:Math.max(K-Math.max(V.left,V.top),0),compositeImage:W,slice:B,buttons:N,allowedImages:j}}function V2($){let Q=H0($.topLeft),Z=H0($.top),J=H0($.topRight),Y=H0($.right),X=H0($.bottomRight),K=H0($.bottom),V=H0($.bottomLeft),G=H0($.left);if(!Q||!Z||!J||!Y||!X||!K||!V||!G)return null;return{topLeft:Q,top:Z,topRight:J,right:Y,bottomRight:X,bottom:K,bottomLeft:V,left:G}}function z2($){let Q=H0($.name),Z=H0($.image);if(!Q||!Z)return null;let J=H0($.anchor),Y=H0($.align),X=O0($.offsets),K=l8(O0(X.normal)),V=l8(O0(X.rollover));return{name:Q,image:Z,imageDown:H0($.imageDown),onTop:$.onTop===!0,anchor:J==="right"||J==="top"||J==="bottom"?J:"left",align:Y==="trailing"?"trailing":"leading",normalOffset:K??V??{x:0,y:0},rolloverOffset:V??K??{x:0,y:0},usagePage:w0($.usagePage),usage:w0($.usage)}}function B2($,Q,Z,J){let{left:Y,top:X}=J,K=2*$.normalOffset.x-$.rolloverOffset.x,V=2*$.normalOffset.y-$.rolloverOffset.y,G=$.align==="trailing"?Y+Z.width+K-Q.width:Y+K;switch($.anchor){case"left":return{x:Y+$.rolloverOffset.x-Q.width/2,y:X+$.rolloverOffset.y};case"right":return{x:Y+Z.width+K,y:X+V};case"top":return{x:G,y:X+V-Q.height};case"bottom":return{x:G,y:X+Z.height+V}}}function H2($){if(!$)return null;if(!Z$)Z$=N2();return Z$.get($)??null}function N2(){let $=new Map;try{for(let Q of a1(z$)){if(!Q.endsWith(".simdevicetype"))continue;let Z=J0(z$,Q),J=_6(J0(Z,"Contents","Info.plist")),Y=typeof J?.CFBundleIdentifier==="string"?J.CFBundleIdentifier:null,X=typeof J?.CFBundleName==="string"?J.CFBundleName:o8(Q,".simdevicetype");if(Y)$.set(Y,X)}}catch{}return $}function _6($){try{let Q=$9("plutil",["-convert","json","-o","-",$],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:2000});return JSON.parse(Q)}catch{return null}}function F2($){let Q=w0($.mainScreenWidth),Z=w0($.mainScreenHeight),J=w0($.mainScreenScale);if(!Q||!Z||!J||J<=0)return null;return{width:Q/J,height:Z/J}}function M2($){if($.startsWith("phone"))return 3;if($.startsWith("tablet"))return 2;if($.startsWith("watch"))return 2;return 1}function V$($,Q){let Z=F$($,Q);if(!N0(Z))return null;return B$(P0(Z))}function F$($,Q){return J0(a8,`${$}.devicechrome`,"Contents","Resources",`${Q}.pdf`)}function K4($,Q,Z){c8(g8,{recursive:!0});let J=n8(Z),Y=p8("sha1").update($).update("\x00").update(Q).update("\x00").update(String(J.mtimeMs)).update("\x00").update(String(J.size)).digest("hex"),X=J0(g8,`${$}-${Y}.png`);if(N0(X))return X;let K=`${X}.${process.pid}.tmp`;return $9("sips",["-s","format","png",Z,"--out",K],{stdio:["ignore","ignore","ignore"],timeout:1e4}),d8(K,X),X}function U2($,Q){c8(u8,{recursive:!0});let Z=n8(Q),J=p8("sha1").update($).update("\x00").update(Q).update("\x00").update(String(Z.mtimeMs)).update("\x00").update(String(Z.size)).digest("hex"),Y=J0(u8,`${$}-${J}.png`);if(N0(Y)){let V=Z9(P0(Y));return{sourcePath:Q,pngPath:Y,width:V.width,height:V.height}}let X=`${Y}.${process.pid}.tmp`,K=`${Y}.${process.pid}.raw.png`;try{$9("sips",["-s","format","png",Q,"--out",K],{stdio:["ignore","ignore","ignore"],timeout:1e4});let V=P0(K),G=j2(V)??{x:0,y:0,...Z9(V)};return $9("sips",["-c",String(G.height),String(G.width),"--cropOffset",String(G.y),String(G.x),"-s","format","png",Q,"--out",X],{stdio:["ignore","ignore","ignore"],timeout:1e4}),d8(X,Y),{sourcePath:Q,pngPath:Y,width:G.width,height:G.height}}finally{try{if(N0(K))v8(K)}catch{}try{if(N0(X))v8(X)}catch{}}}function Z9($){if($.byteLength<24||$[0]!==137||$.toString("ascii",1,4)!=="PNG")throw Error("Invalid PNG placeholder asset");return{width:$.readUInt32BE(16),height:$.readUInt32BE(20)}}function W4($,Q){let{width:Z,height:J}=Z9($),Y=8,X=0,K=0,V=[];while(Y<$.byteLength){let T=$.readUInt32BE(Y);Y+=4;let q=$.toString("ascii",Y,Y+4);Y+=4;let A=$.subarray(Y,Y+T);if(Y+=T+4,q==="IHDR")X=A[8]??0,K=A[9]??0;else if(q==="IDAT")V.push(A);else if(q==="IEND")break}let G=K===6?4:K===4?2:0;if(X!==8||G===0||V.length===0)return null;let z=K===6,W=r1(Buffer.concat(V)),B=Z*G,N=new Uint8Array(Z*J),j=Buffer.alloc(B),O=0;for(let T=0;T<J;T++){let q=W[O++]??0,A=Buffer.from(W.subarray(O,O+B));O+=B,R2(A,j,G,q);for(let R=0;R<Z;R++){let _=R*G,D=A[_]??0,E=z?A[_+1]??0:D,F=z?A[_+2]??0:D,H=A[_+G-1]??0;if(Q(D,E,F,H))N[T*Z+R]=1}j=A}return{width:Z,height:J,mask:N}}function j2($){let{width:Q,height:Z}=Z9($),J=W4($,(G,z,W,B)=>B>0);if(!J)return{x:0,y:0,width:Q,height:Z};let Y=Q,X=Z,K=-1,V=-1;for(let G=0;G<Z;G++)for(let z=0;z<Q;z++){if(!J.mask[G*Q+z])continue;if(z<Y)Y=z;if(G<X)X=G;if(z>K)K=z;if(G>V)V=G}if(K<Y||V<X)return{x:0,y:0,width:Q,height:Z};return{x:Y,y:X,width:K-Y+1,height:V-X+1}}function C2($,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 L2($,Q){let Z=O2($,Q);if(!Z)return null;let J=W4(Z,(R,_,D,E)=>E>200&&R<30&&_<30&&D<30);if(!J)return null;let{width:Y,height:X,mask:K}=J,V=Math.floor(Y/2),G=Math.floor(X/2),z=(R,_)=>R>=0&&_>=0&&R<Y&&_<X&&K[_*Y+R]===1;if(!z(V,G))return null;let W=V;while(W>0&&z(W-1,G))W--;let B=V;while(B<Y-1&&z(B+1,G))B++;let N=G;while(N>0&&z(V,N-1))N--;let j=G;while(j<X-1&&z(V,j+1))j++;let O=j-N,T=(R,_)=>{let D=0;while(D<O&&!z(R,_?N+D:j-D))D++;return D},q=[T(W,!0),T(B,!0),T(W,!1),T(B,!1)],A=q.reduce((R,_)=>R+_,0)/q.length;return{x:W,y:N,width:B-W+1,height:j-N+1,radius:A}}function O2($,Q){let Z=F$($,Q);if(!N0(Z))return null;try{return P0(K4($,Q,Z))}catch{return null}}function R2($,Q,Z,J){for(let Y=0;Y<$.byteLength;Y++){let X=Y>=Z?$[Y-Z]:0,K=Q[Y]??0,V=Y>=Z?Q[Y-Z]:0;switch(J){case 0:break;case 1:$[Y]=$[Y]+X&255;break;case 2:$[Y]=$[Y]+K&255;break;case 3:$[Y]=$[Y]+Math.floor((X+K)/2)&255;break;case 4:$[Y]=$[Y]+_2(X,K,V)&255;break;default:throw Error(`Unsupported PNG filter ${J}`)}}}function _2($,Q,Z){let J=$+Q-Z,Y=Math.abs(J-$),X=Math.abs(J-Q),K=Math.abs(J-Z);if(Y<=X&&Y<=K)return $;return X<=K?Q:Z}function K6($,Q,Z){$.writeHead(Q,{"Content-Type":"application/json","Cache-Control":"no-store"}),$.end(JSON.stringify({ok:!1,error:Z}))}function T0($){return w0($)??0}function w0($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="string"&&$.trim()){let Q=Number($);return Number.isFinite(Q)?Q:null}return null}function H0($){return typeof $==="string"&&$?$:null}function O0($){return $&&typeof $==="object"&&!Array.isArray($)?$:{}}function l8($){let Q=w0($.x),Z=w0($.y);return Q===null||Z===null?null:{x:Q,y:Z}}import{exec as A2}from"child_process";import{timingSafeEqual as T2}from"crypto";import{request as P2}from"http";import{WebSocketServer as D2}from"ws";var q2=1e4,E2=4194304,Y9="exec disabled; start with --allow-exec",G4="exec requires the exec token",I2="host actions are only available to loopback clients";function x2($){for(let Q=0;Q<$.length;Q++){let Z=$.charCodeAt(Q);if(Z<=31||Z===127)return!0}return/\s/.test($)}function w2($,Q){if(!Q||typeof $!=="string")return!1;let Z=Buffer.from($),J=Buffer.from(Q);return Z.length===J.length&&T2(Z,J)}function V4($){return I0($)&&Z6($)}function S2($,Q,Z,J,Y){let X=!1,K=!1,V=new Map,G=Z.ssePrefixes??[],z=(N)=>{if($.readyState===$.OPEN)$.send(JSON.stringify(N))},W=setTimeout(()=>{if(!X)$.close()},q2);W.unref?.();let B=(N,j)=>{if(V.has(N))return;let O=j.split("?")[0];if(!j.startsWith("/")||x2(j)||!G.some((q)=>O===q)){z({sub:N,end:!0,error:"path not allowed"});return}if(!Q){z({sub:N,end:!0,error:"no local port"});return}let T;try{T=P2({host:"127.0.0.1",port:Q,path:j,headers:{accept:"text/event-stream"}},(q)=>{q.on("data",(A)=>z({sub:N,data:A.toString("utf-8")})),q.on("end",()=>{V.delete(N),z({sub:N,end:!0})})})}catch{z({sub:N,end:!0,error:"bad path"});return}T.on("error",()=>{V.delete(N),z({sub:N,end:!0})}),T.end(),V.set(N,{destroy:()=>T.destroy()})};$.on("message",(N)=>{let j;try{j=JSON.parse(N.toString())}catch{return}if(!X){X=!0,K=w2(j.token,Z.execToken),clearTimeout(W),z({ready:!0});return}if(typeof j.unsub==="number"){V.get(j.unsub)?.destroy(),V.delete(j.unsub);return}if(typeof j.sub==="number"&&typeof j.path==="string"){B(j.sub,j.path);return}if(typeof j.id==="number"&&j.rpc!==void 0){let{id:q}=j;if(!Z.onRpcRequest){z({id:q,error:"rpc requests not supported"});return}if(!Y){z({id:q,error:I2});return}Z.onRpcRequest(j.rpc).then((A)=>z({...A,id:q})).catch((A)=>z({id:q,error:A instanceof Error?A.message:String(A)}));return}if(typeof j.id==="number"&&j.ui!==void 0){let{id:q}=j;if(!Z.onUiRequest){z({id:q,error:"ui requests not supported"});return}Z.onUiRequest(j.ui).then((A)=>z({id:q,...A})).catch((A)=>z({id:q,error:A instanceof Error?A.message:String(A)}));return}if(typeof j.id!=="number"||typeof j.command!=="string"||!j.command)return;let{id:O,command:T}=j;if(!Z.allowExec){z({id:O,stdout:"",stderr:Y9,exitCode:126,error:Y9});return}if(!J){z({id:O,stdout:"",stderr:"exec is only available to loopback clients",exitCode:126});return}if(!K){z({id:O,stdout:"",stderr:G4,exitCode:126,error:G4});return}A2(T,{maxBuffer:16777216},(q,A,R)=>{let _={id:O,stdout:A.toString(),stderr:R.toString(),exitCode:q?q.code??1:0};try{Z.onCommandResult?.(T,_)}catch{}z(_)})}),$.on("error",()=>$.close()),$.on("close",()=>{clearTimeout(W);for(let N of V.values())N.destroy();V.clear()})}function z4($){let Q=new D2({noServer:!0,maxPayload:E2});return function(J,Y,X){let K=J.url??"",V=K.indexOf("?"),G=V===-1?K:K.slice(0,V);if(G!==$.path&&G!==`${$.path}/`)return!1;if(Q6(J)!=="same")return Y.destroy(),!0;let z=($.allowShell??V4)(J),W=($.allowRpc??V4)(J),B=$.serverPort?.()||Y.localPort||void 0;return Q.handleUpgrade(J,Y,X,(N)=>{S2(N,B,$,z,W)}),!0}}import{execFile as p2}from"child_process";import{randomUUID as c2}from"crypto";import{closeSync as d2,constants as n2,fstatSync as i2,lstatSync as L4,openSync as o2,readFileSync as O4,unlinkSync as R4,writeSync as a2}from"fs";import{homedir as r2}from"os";import{basename as t2,dirname as s2,join as W9}from"path";var B4=[{key:"camera",label:"Camera"},{key:"microphone",label:"Microphone"},{key:"photos",label:"Photos"},{key:"photos-add",label:"Add to Photos"},{key:"contacts",label:"Contacts"},{key:"calendar",label:"Calendar"},{key:"reminders",label:"Reminders"},{key:"location",label:"Location"},{key:"location-always",label:"Location (Always)"},{key:"notifications",label:"Notifications"},{key:"motion",label:"Motion"},{key:"media-library",label:"Media Library"},{key:"siri",label:"Siri"}];function k2($){return`'${$.replace(/'/g,"'\\''")}'`}function H4($){return $.map(k2).join(" ")}import{execFile as y2}from"child_process";import{existsSync as F4}from"fs";import{join as M$,resolve as f2}from"path";var U$=j8(import.meta.url),M4=["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"],b2=["none","grayscale","red-green","green-red","blue-yellow"],v2={protanopia:"red-green",deuteranopia:"green-red",tritanopia:"blue-yellow"},T6=["on","off"],h2=new Set(["on","true","enabled","1","yes"]),g2=new Set(["off","false","disabled","0","no"]),u0={appearance:{via:"appearance",values:["light","dark"]},"liquid-glass":{via:"ax",values:["clear","tinted"]},"color-filter":{via:"ax",values:b2,aliases:v2},"text-size":{via:"content_size",values:M4,extraValues:["increment","decrement"]},"reduce-motion":{via:"ax",values:T6,toggle:!0},"increase-contrast":{via:"increase_contrast",values:T6,toggle:!0},"show-borders":{via:"ax",values:T6,toggle:!0},"reduce-transparency":{via:"ax",values:T6,toggle:!0},voiceover:{via:"ax",values:T6,toggle:!0}};function U4($,Q){let Z=u0[$];if(!Z)return null;let J=Q.toLowerCase();if(Z.toggle){if(h2.has(J))return"on";if(g2.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 N4(){let $=[M$(U$,"..","dist","simax","serve-sim-ax-settings"),M$(U$,"simax","serve-sim-ax-settings")];for(let Q of $)if(F4(Q))return f2(Q);return null}var X9=null;function u2(){return X9??=(async()=>{let $=N4();if($)return $;let Q=M$(U$,"..","Sources","SimAXSettings","build.sh");if(!F4(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 j$("bash",[Q]);let Z=N4();if(!Z)throw Error("Build succeeded but sim-ax-settings not found.");return Z})(),X9.catch(()=>{X9=null}),X9}function j$($,Q){return new Promise((Z,J)=>{y2($,Q,{encoding:"utf-8",maxBuffer:4194304},(Y,X,K)=>{if(Y)J(Error(String(K).trim()||Y.message));else Z(String(X).trim())})})}function j4($,Q,Z){let J=o(["ui",$,Q]);if(Z!==void 0)J.push(Z);return j$("xcrun",J)}async function C$($,...Q){let Z=await u2();return j$("xcrun",o(["spawn",$,Z,...Q]))}function m2($){return $==="enabled"?"on":"off"}function l2($){return $==="on"?"enabled":"disabled"}async function L$($,Q){let Z=u0[Q];if(!Z)throw Error(`unknown option: ${Q}`);if(Z.via==="ax")return C$($,"get",Q);let J=(await j4($,Z.via)).toLowerCase();return Z.toggle?m2(J):J}async function K9($,Q,Z){let J=u0[Q];if(!J)throw Error(`unknown option: ${Q}`);if(J.via==="ax"){await C$($,"set",Q,Z);return}await j4($,J.via,J.toggle?l2(Z):Z)}async function C4($){let Q=Object.entries(u0).filter(([,X])=>X.via!=="ax"),[Z,...J]=await Promise.all([C$($,"status").then((X)=>JSON.parse(X)).catch(()=>({})),...Q.map(([X])=>L$($,X).catch(()=>"unsupported"))]),Y={};for(let[X,K]of Object.entries(u0))if(K.via==="ax")Y[X]=Z[X]??"unsupported";return Q.forEach(([X],K)=>{Y[X]=J[K]}),Y}var hW=`Usage: serve-sim ui [status] [--json] [-d udid]
|
|
64
64
|
serve-sim ui <option> [-d udid] Print the current value
|
|
65
65
|
serve-sim ui <option> <value> [-d udid] Change the value
|
|
66
66
|
|
|
@@ -69,13 +69,13 @@ Simulator-wide UI options:
|
|
|
69
69
|
liquid-glass clear | tinted
|
|
70
70
|
color-filter none | grayscale | red-green | green-red | blue-yellow
|
|
71
71
|
(protanopia/deuteranopia/tritanopia aliases accepted)
|
|
72
|
-
text-size ${
|
|
72
|
+
text-size ${M4.slice(0,4).join(" | ")} | …
|
|
73
73
|
(12 content-size categories, or increment | decrement)
|
|
74
74
|
reduce-motion on | off
|
|
75
75
|
increase-contrast on | off
|
|
76
76
|
show-borders on | off
|
|
77
77
|
reduce-transparency on | off
|
|
78
|
-
voiceover on | off`;var
|
|
78
|
+
voiceover on | off`;var e2=16777216,$J=524288000,QJ=1048576,ZJ=/^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$/,JJ=/^[A-Za-z0-9][A-Za-z0-9._-]{0,254}$/,YJ="[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}",q4=new RegExp(`^/tmp/serve-sim-(upload|install|camsrc)-${YJ}\\.([a-z0-9]{1,10})$`),XJ=/^serve-sim-screenshot-[0-9A-Za-z-]{1,64}\.png$/,KJ=/^[A-Za-z0-9+/]*={0,2}$/,WJ=["grant","revoke","reset"],GJ=new Set(B4.map(($)=>$.key)),_4=["placeholder","webcam","image","video"],A4=["on","off"],VJ=["primary","primary-1"],T4="installApp requires --allow-exec",zJ=['tell application "System Events" to tell process "Simulator" to set frontmost to true','tell application "System Events" to tell process "Simulator" to perform action "AXRaise" of (first window whose name contains "watchOS")','tell application "System Events" to tell process "Simulator" to click menu item "Home" of menu "Device" of menu bar item "Device" of menu bar 1'];function G0($){throw Error($)}function U0($){let Q=$.udid;if(typeof Q!=="string"||!ZJ.test(Q))G0("invalid udid");return Q}function G9($){let Q=$.bundleId;if(typeof Q!=="string"||!JJ.test(Q))G0("invalid bundle id");return Q}function W6($,Q,Z){let J=$[Q];if(typeof J!=="string"||!Z.includes(J))G0(`invalid ${Q}`);return J}function BJ($){for(let Q=0;Q<$.length;Q++){let Z=$.charCodeAt(Q);if(Z<=31||Z===127)return!0}return!1}function P4($){let Q=$.webcamId;if(Q===void 0||Q==="")return;if(typeof Q!=="string"||Q.length>256||Q.startsWith("-")||BJ(Q))G0("invalid webcamId");return Q}function P6($,Q="path",Z){let J=$[Q],Y=typeof J==="string"?q4.exec(J):null;if(!Y||Z&&!Z.includes(Y[1]))G0(`invalid ${Q}`);return J}function D4($,Q,Z){let J=$[Q];if(typeof J!=="number"||!Number.isFinite(J)||Math.abs(J)>Z)G0(`invalid ${Q}`);return J}function HJ($,Q){if(/\.ts$/.test($))return["bun",[$,...Q]];if(/\.js$/.test($))return["node",[$,...Q]];return[$,Q]}function NJ($,Q){return new Promise((Z)=>{p2($,Q,{maxBuffer:e2,encoding:"utf-8"},(J,Y,X)=>{let K=J?.code;Z({stdout:String(Y??""),stderr:String(X??"")||(J&&typeof K!=="number"?J.message:""),exitCode:J?typeof K==="number"?K:127:0})})})}function FJ(){return new Date().toISOString().replace(/[:.]/g,"-").slice(0,23)}function E4($){let Q=$.run??NJ,Z=()=>W9($.homeDir??r2(),"Desktop"),J=async(W,B)=>{let N=await Q(W,B);try{$.onCommandResult?.(H4([W,...B]),N)}catch{}return N},Y=(W)=>J(...HJ($.serveSimBin,W)),X=async(W)=>{if(!await $.isKnownDevice(W))G0(`unknown or not booted device: ${W}`)},K=(W)=>{let B=W.path;if(typeof B!=="string"||s2(B)!==Z()||!XJ.test(t2(B)))G0("invalid path");return B},V=async(W,B)=>{let N=await J("xcrun",o(["get_app_container",W,B,"app"]));if(N.exitCode!==0)G0(N.stderr.trim()||"App not found on simulator");let j=N.stdout.trim();if(!j)G0("Empty app path");return j},G=(W)=>P6(W,"filePath",["camsrc"]),z={async toggleAppearance(W){let B=U0(W);await X(B);let N=(await L$(B,"appearance")).trim()==="dark"?"light":"dark";return await K9(B,"appearance",N),{appearance:N}},async home(W){let B=U0(W),N=W.watch===!0;if(await X(B),N)return{...await J("osascript",zJ.flatMap((j)=>["-e",j]))};return{...await J("xcrun",o(["launch",B,"com.apple.springboard"]))}},async screenshot(W){let B=U0(W),N=W.display===void 0?void 0:W6(W,"display",VJ);await X(B);let j=W9(Z(),`serve-sim-screenshot-${FJ()}.png`),O=await J("xcrun",o(["io",B,"screenshot",...N?[`--display=${N}`]:[],j]));return{...O,path:O.exitCode===0?j:""}},async screenshotThumbnail(W){let B=K(W),N=`/tmp/serve-sim-screenshot-thumb-${c2()}.png`;try{if((await J("sips",["-Z","320",B,"--out",N])).exitCode!==0)return{data:""};return{data:O4(N).toString("base64")}}catch{return{data:""}}finally{try{R4(N)}catch{}}},async revealScreenshot(W){let B=K(W);return{...await J("open",["-R",B])}},async revealApp(W){let B=U0(W),N=G9(W);return await X(B),{...await J("open",["-R",await V(B,N)])}},async appDetails(W){let B=U0(W),N=G9(W);await X(B);let j=await V(B,N),O=W9(j,"Info.plist"),T=!1;try{T=L4(O).isFile()}catch{}let q=T?await J("plutil",["-convert","json","-o","-",O]):null,A={};if(q?.exitCode===0)try{A=JSON.parse(q.stdout)}catch{}let R,D=(A?.CFBundleIcons?.CFBundlePrimaryIcon??A?.["CFBundleIcons~ipad"]?.CFBundlePrimaryIcon)?.CFBundleIconFiles??A?.CFBundleIconFiles;if(Array.isArray(D)&&D.length>0)R=String(D[D.length-1]);else if(typeof A?.CFBundleIconFile==="string")R=A.CFBundleIconFile;let E=null;if(R&&!R.includes("/")&&R!==".."){let F=[`${R}@3x.png`,`${R}@2x.png`,`${R}.png`,`${R}60x60@3x.png`,`${R}60x60@2x.png`];for(let H of F)try{let U=W9(j,H);if(!L4(U).isFile())continue;E=`data:image/png;base64,${O4(U).toString("base64")}`;break}catch{}}return{appPath:j,displayName:A.CFBundleDisplayName??A.CFBundleName,shortVersion:A.CFBundleShortVersionString,bundleVersion:A.CFBundleVersion,minOS:A.MinimumOSVersion,executable:A.CFBundleExecutable,iconDataUrl:E}},async permissions(W){let B=U0(W),N=G9(W),j=W6(W,"action",WJ),O=W.service;if(typeof O!=="string"||!(GJ.has(O)||O==="all"&&j==="reset"))G0("invalid service");return await X(B),{...await Y(["permissions",j,O,N,"-d",B])}},async cameraListWebcams(){return{...await Y(["camera","--list-webcams"])}},async cameraInject(W){let B=U0(W),N=G9(W),j=W6(W,"source",_4),O=W6(W,"mirror",A4),T=["camera",N,"-d",B,"--quiet"];if(j==="image"||j==="video")T.push("--file",G(W));else if(j==="webcam"){let q=P4(W);T.push("--webcam",...q?[q]:[])}return T.push("--mirror",O),await X(B),{...await Y(T)}},async cameraSwitch(W){let B=U0(W),N=W6(W,"source",_4),j=N==="image"||N==="video",O=["camera","switch",j?"file":N];if(N==="webcam"){let T=P4(W);if(T)O.push(T)}if(j)O.push(G(W));return O.push("-d",B,"--quiet"),await X(B),{...await Y(O)}},async cameraMirror(W){let B=U0(W),N=W6(W,"mirror",A4);return await X(B),{...await Y(["camera","mirror",N,"-d",B,"--quiet"])}},async cameraStop(W){let B=U0(W);return await X(B),{...await Y(["camera","--stop-webcam","-d",B])}},async uploadChunk(W){let B=P6(W);if(!$.allowExec&&q4.exec(B)[1]==="install")G0(T4);let N=W.data;if(typeof N!=="string"||N.length>Math.ceil(QJ/3)*4||!KJ.test(N))G0("invalid data");let j=Buffer.from(N,"base64"),{O_WRONLY:O,O_CREAT:T,O_EXCL:q,O_APPEND:A,O_NOFOLLOW:R}=n2,_=o2(B,W.append===!0?O|A|R:O|T|q|R,384);try{if(i2(_).size+j.length>$J)G0("File too large (max 500MB)");a2(_,j)}finally{d2(_)}return{ok:!0}},async uploadRemove(W){let B=P6(W);try{R4(B)}catch{}return{ok:!0}},async addMedia(W){let B=U0(W),N;try{N=P6(W,"path",["upload"])}catch{N=K(W)}return await X(B),{...await J("xcrun",o(["addmedia",B,N]))}},async installApp(W){if(!$.allowExec)G0(T4);let B=U0(W),N=P6(W,"path",["install"]);if(!N.endsWith(".ipa"))G0("invalid path");return await X(B),{...await J("xcrun",o(["install",B,N]))}},async location(W){let B=U0(W),j=W.lat===void 0&&W.lng===void 0?null:`${D4(W,"lat",90).toFixed(7)},${D4(W,"lng",180).toFixed(7)}`;return await X(B),{...await J("xcrun",o(["location",B,...j?["set",j]:["clear"]]))}}};return async(W)=>{let{method:B,params:N}=W??{};if(typeof B!=="string"||!Object.prototype.hasOwnProperty.call(z,B))G0(`unknown method: ${String(B)}`);let j=N&&typeof N==="object"&&!Array.isArray(N)?N:{};return z[B](j)}}import{createHash as MJ}from"crypto";function I4($){let Z=`(function () {
|
|
79
79
|
var msg = document.getElementById("msg");
|
|
80
80
|
var match = /(?:^#|&)token=([^&]*)/.exec(location.hash);
|
|
81
81
|
var url = new URL(location.href);
|
|
@@ -99,51 +99,51 @@ Simulator-wide UI options:
|
|
|
99
99
|
? "Too many attempts. Wait a minute, then reopen the share link."
|
|
100
100
|
: "Invalid serve-sim auth token.";
|
|
101
101
|
}, function () { msg.textContent = "Could not reach the serve-sim server."; });
|
|
102
|
-
})();`,J=
|
|
102
|
+
})();`,J=MJ("sha256").update(Z).digest("base64"),Y=`<!doctype html><html><head><meta charset="utf-8"><meta name="referrer" content="no-referrer"><title>serve-sim</title></head><body style="font:14px system-ui,sans-serif;padding:2em"><p id="msg">This serve-sim preview requires an auth token.</p><script>${Z}</script></body></html>`,X=`default-src 'none'; script-src 'sha256-${J}'; connect-src 'self'; base-uri 'none'; form-action 'none'; frame-ancestors 'none'`;return{html:Y,csp:X}}var p$=k6(JY(),"serve-sim"),G5,zY="854a02be78c7ffea104cb523636efa991bef5c5b",F9=9222,V5=G7(),BY=1048576,HY=4096,p0=null;function z5($){let Q=new URL($,"http://x").searchParams.get("limit");if(!Q)return;let Z=Number(Q);return Number.isFinite(Z)?Z:void 0}function B5($){let Q=new URL($,"http://x").searchParams.get("since");if(!Q)return;let Z=Number(Q);return Number.isFinite(Z)?Z:void 0}function h$($,Q){try{let Z=m7($,Q);if(Z)_0(Z)}catch{}}var NY=new Set(["host.exp.Exponent","dev.expo.Exponent"]),FY=["Frameworks/React.framework","Frameworks/hermes.framework","Frameworks/Hermes.framework","Frameworks/ExpoModulesCore.framework","main.jsbundle"],MY=/(WidgetRenderer|ExtensionHost|\.extension(\.|$)|Service|PlaceholderApp|InCallService|CallUI|InCallUI|com\.apple\.Preferences\.Cellular|com\.apple\.purplebuddy|com\.apple\.chrono|com\.apple\.shuttle|com\.apple\.usernotificationsui)/i;function H5($){return!MY.test($)}function UY($){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test($)}function jY($){let Q=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/.exec($);if(!Q)return null;return{bundleId:Q[1],pid:parseInt(Q[2],10)}}function N5($,Q){if(NY.has(Q))return Promise.resolve(!0);return new Promise((Z)=>{n0("xcrun",o(["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 K of FY)if(O5(k6(X,K)))return Z(!0);Z(!1)})})}function F5($){return $.trim().replace(/\s+/g," ").toLowerCase()}function wG($,Q){let Z=F5(Q);if(!Z)return null;for(let[J,Y]of Object.entries($))if([Y.CFBundleDisplayName,Y.CFBundleName,Y.CFBundleExecutable].filter((K)=>typeof K==="string").some((K)=>F5(K)===Z))return Y.CFBundleIdentifier||J;return null}var x6={at:0,booted:null};async function R5(){let $=Date.now();if(x6.booted&&$-x6.at<1500)return x6.booted;try{let Q=await new Promise((Y,X)=>{n0("xcrun",o(["list","devices","booted","-j"]),{encoding:"utf-8",timeout:3000},(K,V)=>{if(K)X(K);else Y(V)})}),Z=JSON.parse(Q),J=new Set;for(let Y of Object.values(Z.devices))for(let X of Y)if(X.state==="Booted")J.add(X.udid);return x6={at:$,booted:J},J}catch{return null}}var g$={at:0,udid:null};function CY(){let $=Date.now();if($-g$.at<1500)return g$.udid;let Q=null;try{Q=w6("defaults read com.apple.iphonesimulator CurrentDeviceUDID",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()||null}catch{Q=null}return g$={at:$,udid:Q},Q}async function y0(){let $;try{$=t3(p$).filter((Y)=>Y.startsWith("server-")&&Y.endsWith(".json"))}catch{return[]}let Q=await R5(),Z=D0(),J=[];for(let Y of $){let X=k6(p$,Y);try{let K=JSON.parse(s3(X,"utf-8")),V=I8(K);if(!V){O6("helper pid=%d gone, removing %s",K.pid,X);try{e3(X)}catch{}continue}if(V.pid!==K.pid)x8(V);if(!b6(V.deviceSet,Z))continue;let G=S8(V,Q,process.pid,Z);if(G!=="keep"){if(G==="recycle-self")O6("closing in-process session for shut-down device %s (own pid %d)",V.device,V.pid),c9(V.device);else{O6("asking stale helper pid=%d to exit (device %s no longer booted)",V.pid,V.device);try{process.kill(V.pid,"SIGTERM")}catch{}}continue}J.push(V)}catch{}}return J}function c0($,Q){if(Q)return $.find((Z)=>Z.device===Q)??null;return $[0]??null}function M5($){let Q=$.indexOf("?");if(Q===-1)return null;return new URLSearchParams($.slice(Q+1)).get("device")}function LY($){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),K=Y==null||!/^\d+$/.test(Y)?0:Math.max(Number(Y),0);return{limit:X,offset:K}}function I6($){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 _5($){if(!("authTokenSha256"in $)&&!("allowExec"in $)&&!("deviceSet"in $))return $;let{authTokenSha256:Q,allowExec:Z,deviceSet:J,...Y}=$;return Y}function M9($,Q,Z="",J="http",Y=!1){if($=_5($),!Q)return $;if(!Y){let W;try{W=new URL(`http://${Q}`).hostname}catch{return $}if(W==="localhost"||W==="127.0.0.1"||W==="[::1]")return $;let B=(N)=>N.replace("127.0.0.1",W);return{...$,url:B($.url),streamUrl:B($.streamUrl),wsUrl:B($.wsUrl)}}let V=`${`${Z==="/"?"":Z.replace(/\/+$/,"")}/helper`}/${encodeURIComponent($.device)}`,G=`${J}://${Q}`,z=`${J==="https"?"wss":"ws"}://${Q}`;return{...$,url:`${G}${V}`,streamUrl:`${G}${V}/stream.mjpeg`,wsUrl:`${z}${V}/ws`}}function OY($){return`${$==="/"?"":$}/helper`}function RY($){return`${$==="/"?"":$}/devtools`}function _Y($,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 u$($){try{return new URL($||"/","http://serve-sim.local").pathname}catch{let Q=$.indexOf("?");return Q===-1?$||"/":$.slice(0,Q)||"/"}}function U5($,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","recording","stream.avcc","stream.mjpeg","stream.3d.mjpeg","ws"]),K=Z.searchParams.get("device"),V=Y;if(Y[0]&&!X.has(Y[0]))K=decodeURIComponent(Y[0]),V=Y.slice(1);let G=V.length>0?`/${V.join("/")}`:"/";return Z.searchParams.delete("device"),{device:K,upstreamPath:`${G}${Z.search}`}}var AY="258EAFA5-E914-47DA-95CA-C5AB0DC85B11";function c$($,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 A5($){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 V=$.readBigUInt64BE(Y);if(V>BigInt(Number.MAX_SAFE_INTEGER))throw Error("WebSocket frame too large");J=Number(V),Y+=8}let X=Y;if(Z)Y+=4;if($.length<Y+J)return null;let K=Buffer.from($.subarray(Y,Y+J));if(Z){let V=$.subarray(X,X+4);for(let G=0;G<K.length;G++)K[G]=K[G]^V[G%4]}return{opcode:Q,payload:K,consumed:Y+J}}function S6($,Q,Z=Buffer.alloc(0)){if($.destroyed||!$.writable)return;$.write(c$(Q,Z))}function j5($){let Q=new Uint8Array($.length);return Q.set($),Q}function T5($,Q){let Z=$.headers["sec-websocket-key"];if(typeof Z!=="string")return Q.end(`HTTP/1.1 400 Bad Request\r
|
|
103
103
|
\r
|
|
104
|
-
`),!1;let J=
|
|
104
|
+
`),!1;let J=WY("sha1").update(Z+AY).digest("base64");return Q.write(`HTTP/1.1 101 Switching Protocols\r
|
|
105
105
|
Upgrade: websocket\r
|
|
106
106
|
Connection: Upgrade\r
|
|
107
107
|
Sec-WebSocket-Accept: ${J}\r
|
|
108
108
|
\r
|
|
109
|
-
`),Q.resume(),!0}function AY($,Q,Z,J){if(!P5($,Q))return;let Y=new G5(J);Y.binaryType="arraybuffer";let X=!1,K=!1,z=[],G=Buffer.from(Z),V=()=>{if(K)return;K=!0;try{Y.close()}catch{}try{Q.end(p$(8,Buffer.alloc(0)))}catch{}try{Q.destroy()}catch{}},W=(N)=>{if(X&&Y.readyState===G5.OPEN){Y.send(N.opcode===1?N.payload.toString("utf8"):C5(N.payload));return}z.push({opcode:N.opcode,payload:Buffer.from(N.payload)})},H=()=>{try{while(G.length>0){let N=T5(G);if(!N)break;if(G=G.subarray(N.consumed),N.opcode===8){S6(Q,8,N.payload),V();return}if(N.opcode===9){S6(Q,10,N.payload);continue}if(N.opcode===1||N.opcode===2)W({opcode:N.opcode,payload:N.payload})}}catch{V()}};Y.onopen=()=>{X=!0;for(let N of z)Y.send(N.opcode===1?N.payload.toString("utf8"):C5(N.payload));z=[]},Y.onmessage=(N)=>{let j=N.data,O=typeof j==="string"?Buffer.from(j):Buffer.from(j);S6(Q,typeof j==="string"?1:2,O)},Y.onerror=V,Y.onclose=V,Q.on("data",(N)=>{if(typeof N==="string")N=Buffer.from(N);G=Buffer.concat([G,N]),H()}),Q.on("error",V),Q.on("close",V),H()}async function TY($,Q,Z){if(!MY(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 N7(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)}))}}var PY={host:()=>$8(),device:($)=>Q8($),sessions:($)=>Promise.all(s7($).map((Q)=>Q.diagnostics()))};function DY($={}){let Q=$.sources??PY,Z=Y8({burst:$.burst??5,refillMs:$.refillMs??2000,now:$.now}),J=X8($.cacheTtlMs??2000,$.now),Y=async(X)=>{let K=await Q.sessions(X),z=X?[X]:K.map((W)=>String(W.udid)),[G,V]=await Promise.all([Q.host(),Promise.all(z.map((W)=>Q.device(W)))]);return J8({host:G,devices:V,sessions:K,event_log:i6({device:X,limit:100})})};return async(X,K,z)=>{let G=(W,H,N={})=>{K.writeHead(W,{"Content-Type":"application/json","Cache-Control":"no-store",...N}),K.end(JSON.stringify(H,null,2))};if(!I0(X)){G(403,{error:"loopback_only",message:"Diagnostics are only served to localhost. Run `serve-sim doctor` on the Mac."});return}let V=Z.take();if(!V.ok){let W=Math.max(1,Math.ceil(V.retryAfterMs/1000));G(429,{error:"rate_limited",message:`Too many diagnostics requests; retry in ${W}s.`},{"Retry-After":String(W)});return}try{G(200,await J.get(z??"",()=>Y(z)))}catch(W){G(500,{error:"diagnostics_failed",message:W instanceof Error?W.message:String(W)})}}}function qY($,Q,Z,J){if(!Z)return!1;let Y=J.split("?")[0];if(Y==="/camera/status")return TY($,Q,Z),!0;let X;try{X=l9(Z)}catch{return!1}switch(Y){case"/stream.3d.mjpeg":return X.handleDuoMjpeg($,Q),!0;case"/stream.mjpeg":return X.handleMjpeg($,Q),!0;case"/stream.avcc":return X.handleAvcc($,Q),!0;case"/config":return X.handleConfig($,Q),!0;case"/health":return X.handleHealth($,Q),!0;case"/ax":return X.handleAx($,Q),!0;case"/foreground":return X.handleForeground($,Q),!0;case"/recording":return X.handleRecording($,Q,"status"),!0;case"/recording/start":return X.handleRecording($,Q,"start"),!0;case"/recording/stop":return X.handleRecording($,Q,"stop"),!0;default:return!1}}async function EY($,Q,Z,J={}){if(await new Promise((X)=>n0("xcrun",a(["boot",$]),()=>X())),!await new Promise((X)=>{n0("xcrun",J7($),{timeout:180000},(K)=>X(!K))})){if(!await new Promise((K)=>{n0("xcrun",a(["list","devices","-j"]),(z,G)=>{if(z)return K(!1);try{let V=JSON.parse(G);K(Object.values(V.devices).flat().some((W)=>W.udid===$&&W.state==="Booted"))}catch{K(!1)}})}))return`Device ${$} failed to reach booted state`}return c6({...G7($,Q,Z),...J.authTokenSha256?{authTokenSha256:J.authTokenSha256}:{},...J.allowExec?{allowExec:!0}:{}}),null}function IY($,Q){let Z=[],J=[],Y=Buffer.from(Q),X=!1,K=()=>{if(X)return;X=!0;for(let V of J)V()},z=()=>{K();try{$.end(p$(8,Buffer.alloc(0)))}catch{}try{$.destroy()}catch{}},G=()=>{for(;;){let V;try{V=T5(Y)}catch{z();return}if(!V)return;if(Y=Y.subarray(V.consumed),V.opcode===8)return z();if(V.opcode===9){S6($,10,V.payload);continue}if(V.opcode===1||V.opcode===2)for(let W of Z)W(V.payload)}};if($.on("data",(V)=>{Y=Buffer.concat([Y,V]),G()}),$.on("close",K),$.on("error",K),Q.length)G();return{send(V){S6($,2,V)},on(V,W){if(V==="message")Z.push(W);else J.push(W)},close:z}}function xY($,Q,Z,J){if(!J)return!1;let Y;try{Y=l9(J)}catch{return!1}if(!P5($,Q))return!0;return Y.attachHidSocket(IY(Q,Z)),!0}function u$($,Q,Z,J,Y,X=!1,K){let z=(Q===""?"":Q)+"/grid/api";return{...A5($),basePath:Q,appStateEndpoint:d0(Q,"/appstate",$.device),reloadEndpoint:d0(Q,"/reload",$.device),eventLogEndpoint:d0(Q,"/api/event-log",$.device),eventLogEventsEndpoint:d0(Q,"/api/event-log/events",$.device),diagnosticsEndpoint:d0(Q,"/api/diagnostics",$.device),axEndpoint:d0(Q,"/ax",$.device),cameraStatusEndpoint:`${Q==="/"?"":Q}/helper/${encodeURIComponent($.device)}/camera/status`,devtoolsEndpoint:d0(Q,"/devtools",$.device),serveSimBin:Z,gridApiEndpoint:z,gridStartEndpoint:z+"/start",gridShutdownEndpoint:z+"/shutdown",gridMemoryEndpoint:z+"/memory",previewEndpoint:Q===""?"/":Q,...J?{allowExec:!0}:{},...Y?{codec:Y}:{},...K?{initialState:K}:{},...X?{proxyHelpers:!0}:{}}}async function wY($){return new Promise((Q)=>{let Z=XY();Z.once("error",()=>Q(!1)),Z.once("listening",()=>Z.close(()=>Q(!0))),Z.listen($,"127.0.0.1")})}async function L5($){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((K)=>K.id.startsWith("sim:")).map((K)=>{let G=K.id.split(":")[1],V=K.description?.match(/\(([^)]+)\)/)?.[1];return{id:K.id,title:K.title||K.url||"Untitled",url:/^https?:/i.test(K.url)?K.url:"about:blank",type:K.type||"page",udid:G,bundleId:V}})}}}catch{return null}}async function SY(){if(p0)try{return await(await p0).listTargets(),p0}catch{p0=null}return p0=(async()=>{let{startCdpServer:$}=await Promise.resolve().then(() => (W5(),K5));for(let Q=F9;Q<F9+50;Q++){if(!await wY(Q)){let Z=await L5(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 L5(Q);if(J)return J;continue}throw Z}}throw Error(`No available inspect-webkit port found in ${F9}-${F9+49}`)})().catch(($)=>{throw p0=null,$}),p0}function kY($){return Array.isArray($)?$[0]:$}function D5($){return kY($.headers["x-forwarded-proto"])?.split(",",1)[0]?.trim().toLowerCase()}function yY($){return D5($)==="https"?"wss":"ws"}function U9($){return D5($)==="https"?"https":"http"}function fY($,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 m$=null;function bY($=import.meta.url,Q=R5){try{let Z=JY(YY($));for(let J of[k6(Z,"serve-sim.js"),k6(Z,"..","dist","serve-sim.js")])if(Q(J))return J}catch{}return"serve-sim"}function vY(){if(!m$)m$=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHNjcmlwdD4oZnVuY3Rpb24gYXBwbHlUaGVtZUJlZm9yZVBhaW50KHN0b3JhZ2VLZXksIGRhcmtRdWVyeSkgewogIHZhciBwcmVmZXJlbmNlID0gbnVsbDsKICB0cnkgewogICAgcHJlZmVyZW5jZSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShzdG9yYWdlS2V5KTsKICB9IGNhdGNoIHt9CiAgdmFyIGRhcmsgPSBwcmVmZXJlbmNlID09PSAiZGFyayIgfHwgcHJlZmVyZW5jZSAhPT0gImxpZ2h0IiAmJiAodHlwZW9mIHdpbmRvdy5tYXRjaE1lZGlhICE9PSAiZnVuY3Rpb24iIHx8IHdpbmRvdy5tYXRjaE1lZGlhKGRhcmtRdWVyeSkubWF0Y2hlcyk7CiAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS10aGVtZSIsIGRhcmsgPyAiZGFyayIgOiAibGlnaHQiKTsKfSkoInNlcnZlLXNpbTp0aGVtZSIsIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKTs8L3NjcmlwdD4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLXdoaXRlOiNmZmY7LS1zcGFjaW5nOi4yNXJlbTstLWZvbnQtd2VpZ2h0LW1lZGl1bTo1MDA7LS1mb250LXdlaWdodC1zZW1pYm9sZDo2MDA7LS10cmFja2luZy13aWRlOi4wMjVlbTstLWxlYWRpbmctdGlnaHQ6MS4yNTstLWxlYWRpbmctc251ZzoxLjM3NTstLXJhZGl1cy14czouMTI1cmVtOy0tcmFkaXVzLW1kOi4zNzVyZW07LS1yYWRpdXMtbGc6LjVyZW07LS1yYWRpdXMteGw6Ljc1cmVtOy0tZWFzZS1vdXQ6Y3ViaWMtYmV6aWVyKDAsMCwuMiwxKTstLWVhc2UtaW4tb3V0OmN1YmljLWJlemllciguNCwwLC4yLDEpOy0tYW5pbWF0ZS1zcGluOnNwaW4gMXMgbGluZWFyIGluZmluaXRlOy0tYmx1ci1tZDoxMnB4Oy0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7LS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNCwwLC4yLDEpOy0tZGVmYXVsdC1mb250LWZhbWlseTp2YXIoLS1mb250LXNhbnMpOy0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyk7LS1jb2xvci1wYW5lbDp2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwpOy0tY29sb3ItcGFuZWwtYmc6dmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnKTstLWNvbG9yLXBhbmVsLWJnLXRyYW5zbHVjZW50OnZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc2x1Y2VudCk7LS1jb2xvci1wYW5lbC1vdmVybGF5OnZhcigtLXNlcnZlLXNpbS1wYW5lbC1vdmVybGF5KTstLWNvbG9yLXBhbmVsLWRlZXA6dmFyKC0tc2VydmUtc2ltLXBhbmVsLWRlZXApOy0tY29sb3ItcGFuZWwtaG92ZXI6dmFyKC0tc2VydmUtc2ltLXBhbmVsLWhvdmVyKTstLWNvbG9yLXBhZ2U6dmFyKC0tc2VydmUtc2ltLXBhZ2UpOy0tY29sb3ItaW5rOnZhcigtLXNlcnZlLXNpbS1pbmspOy0tY29sb3ItaW5rLWludmVyc2U6dmFyKC0tc2VydmUtc2ltLWluay1pbnZlcnNlKTstLWNvbG9yLWljb246dmFyKC0tc2VydmUtc2ltLWljb24pOy0tY29sb3ItdGludDp2YXIoLS1zZXJ2ZS1zaW0tdGludCk7LS1jb2xvci1hY2NlbnQ6dmFyKC0tc2VydmUtc2ltLWFjY2VudCk7LS1jb2xvci1zdWNjZXNzLWVtZXJhbGQ6dmFyKC0tc2VydmUtc2ltLXN1Y2Nlc3MtZW1lcmFsZCk7LS1jb2xvci1kYW5nZXI6dmFyKC0tc2VydmUtc2ltLWRhbmdlcik7LS1jb2xvci1kYW5nZXItc29mdDp2YXIoLS1zZXJ2ZS1zaW0tZGFuZ2VyLXNvZnQpOy0tY29sb3Itd2FybmluZzp2YXIoLS1zZXJ2ZS1zaW0td2FybmluZyk7LS1jb2xvci13YXJuaW5nLXNvZnQ6dmFyKC0tc2VydmUtc2ltLXdhcm5pbmctc29mdCk7LS1jb2xvci1jb250cm9sLXNlbGVjdGVkOnZhcigtLXNlcnZlLXNpbS1jb250cm9sLXNlbGVjdGVkKTstLWNvbG9yLWdyYWJiZXI6dmFyKC0tc2VydmUtc2ltLWdyYWJiZXIpOy0tY29sb3ItZ3JhYmJlci1hY3RpdmU6dmFyKC0tc2VydmUtc2ltLWdyYWJiZXItYWN0aXZlKTstLWNvbG9yLW9uLXN1Y2Nlc3M6dmFyKC0tc2VydmUtc2ltLW9uLXN1Y2Nlc3MpOy0tY29sb3Itc3lzdGVtLWljb24tYm9yZGVyOnZhcigtLXNlcnZlLXNpbS1zeXN0ZW0taWNvbi1ib3JkZXIpOy0tY29sb3Itc3lzdGVtLWljb24tZmc6dmFyKC0tc2VydmUtc2ltLXN5c3RlbS1pY29uLWZnKTstLWNvbG9yLWxpdmUtaWNvbjp2YXIoLS1zZXJ2ZS1zaW0tbGl2ZS1pY29uKTstLWNvbG9yLWxpdmUtaWNvbi1hY3RpdmU6dmFyKC0tc2VydmUtc2ltLWxpdmUtaWNvbi1hY3RpdmUpOy0tY29sb3ItbGl2ZS1pY29uLWZnOnZhcigtLXNlcnZlLXNpbS1saXZlLWljb24tZmcpOy0tZm9udC1zeXN0ZW06LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZn19QGxheWVyIGJhc2V7Kiw6YWZ0ZXIsOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6YmFja2Ryb3B7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfWh0bWwsOmhvc3R7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7dGFiLXNpemU6NDtsaW5lLWhlaWdodDoxLjU7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1mb250LWZhbWlseSx1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSIpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtZm9udC12YXJpYXRpb24tc2V0dGluZ3Msbm9ybWFsKTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9aHJ7Y29sb3I6aW5oZXJpdDtib3JkZXItdG9wLXdpZHRoOjFweDtoZWlnaHQ6MH1hYmJyOndoZXJlKFt0aXRsZV0pey13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1he2NvbG9yOmluaGVyaXQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9Y29kZSxrYmQsc2FtcCxwcmV7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5LHVpLW1vbm9zcGFjZSxTRk1vbm8tUmVndWxhcixNZW5sbyxNb25hY28sQ29uc29sYXMsIkxpYmVyYXRpb24gTW9ubyIsIkNvdXJpZXIgTmV3Iixtb25vc3BhY2UpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LW1vbm8tZm9udC1mZWF0dXJlLXNldHRpbmdzLG5vcm1hbCk7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7Zm9udC1zaXplOjFlbX1zbWFsbHtmb250LXNpemU6ODAlfXN1YixzdXB7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowfXN1Yntib3R0b206LS4yNWVtfXN1cHt0b3A6LS41ZW19dGFibGV7dGV4dC1pbmRlbnQ6MDtib3JkZXItY29sb3I6aW5oZXJpdDtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6YXV0b31wcm9ncmVzc3t2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdW1tYXJ5e2Rpc3BsYXk6bGlzdC1pdGVtfW9sLHVsLG1lbnV7bGlzdC1zdHlsZTpub25lfWltZyxzdmcsdmlkZW8sY2FudmFzLGF1ZGlvLGlmcmFtZSxlbWJlZCxvYmplY3R7ZGlzcGxheTpibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9aW1nLHZpZGVve21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvfWJ1dHRvbixpbnB1dCxzZWxlY3Qsb3B0Z3JvdXAsdGV4dGFyZWF7Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTp3aGVyZShzZWxlY3Q6LXdlYmtpdC1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0OmlzKFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LXdlYmtpdC1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06d2hlcmUoc2VsZWN0Oi1tb3otYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257bWFyZ2luLWlubGluZS1lbmQ6NHB4fTo6ZmlsZS1zZWxlY3Rvci1idXR0b257bWFyZ2luLWlubGluZS1lbmQ6NHB4fTo6cGxhY2Vob2xkZXJ7b3BhY2l0eToxfUBzdXBwb3J0cyAoIG5vdCAoLXdlYmtpdC1hcHBlYXJhbmNlOiAtYXBwbGUtcGF5LWJ1dHRvbikpIG9yIChjb250YWluLWludHJpbnNpYy1zaXplOiAxcHgpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y3VycmVudENvbG9yfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7OjpwbGFjZWhvbGRlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsY3VycmVudGNvbG9yIDUwJSx0cmFuc3BhcmVudCl9fX10ZXh0YXJlYXtyZXNpemU6dmVydGljYWx9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1kYXRlLWFuZC10aW1lLXZhbHVle3RleHQtYWxpZ246aW5oZXJpdDttaW4taGVpZ2h0OjFsaH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdHtkaXNwbGF5OmlubGluZS1mbGV4fTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWZpZWxkcy13cmFwcGVye3BhZGRpbmc6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC15ZWFyLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1vbnRoLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWRheS1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1ob3VyLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbnV0ZS1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1zZWNvbmQtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWlsbGlzZWNvbmQtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWVyaWRpZW0tZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bGluZS1oZWlnaHQ6MX06LW1vei11aS1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX1idXR0b257YXBwZWFyYW5jZTpidXR0b259aW5wdXQ6d2hlcmUoW3R5cGU9YnV0dG9uXSxbdHlwZT1yZXNldF0sW3R5cGU9c3VibWl0XSl7YXBwZWFyYW5jZTpidXR0b259Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W2hpZGRlbl06d2hlcmUoOm5vdChbaGlkZGVuPXVudGlsLWZvdW5kXSkpe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBsYXllciB1dGlsaXRpZXN7LlxbY29udGFpbmVyLXR5cGVcOmlubGluZS1zaXplXF17Y29udGFpbmVyLXR5cGU6aW5saW5lLXNpemV9LnBvaW50ZXItZXZlbnRzLWF1dG97cG9pbnRlci1ldmVudHM6YXV0b30ucG9pbnRlci1ldmVudHMtbm9uZXtwb2ludGVyLWV2ZW50czpub25lfS5jb2xsYXBzZXt2aXNpYmlsaXR5OmNvbGxhcHNlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0uZml4ZWR7cG9zaXRpb246Zml4ZWR9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5zdGF0aWN7cG9zaXRpb246c3RhdGljfS5zdGlja3l7cG9zaXRpb246c3RpY2t5fS5pbnNldC0we2luc2V0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LnRvcC0we3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMVwvMnt0b3A6NTAlfS50b3AtMnt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0udG9wLTN7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMyl9LnRvcC1cWzJweFxde3RvcDoycHh9LnRvcC1cW2NhbGNcKDEwMFwlXCs0cHhcKVxde3RvcDpjYWxjKDEwMCUgKyA0cHgpfS50b3AtXFtjYWxjXCgxMDBcJVwrNnB4XClcXXt0b3A6Y2FsYygxMDAlICsgNnB4KX0ucmlnaHQtMHtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5yaWdodC0wXC41e3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5yaWdodC0yXC41e3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucmlnaHQtM3tyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5yaWdodC1cWzlweFxde3JpZ2h0OjlweH0uYm90dG9tLTB7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMCl9LmJvdHRvbS0wXC41e2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uYm90dG9tLTN7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMyl9LmxlZnQtMHtsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LmxlZnQtMVwvMntsZWZ0OjUwJX0ubGVmdC0yXC41e2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5sZWZ0LTN7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS56LTF7ei1pbmRleDoxfS56LTEwe3otaW5kZXg6MTB9LnotMjB7ei1pbmRleDoyMH0uei0zMHt6LWluZGV4OjMwfS56LTM1e3otaW5kZXg6MzV9LnotMzZ7ei1pbmRleDozNn0uei00MHt6LWluZGV4OjQwfS56LTUwe3otaW5kZXg6NTB9LmNvbnRhaW5lcnt3aWR0aDoxMDAlfUBtZWRpYSAobWluLXdpZHRoOjQwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo0MHJlbX19QG1lZGlhIChtaW4td2lkdGg6NDhyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQ4cmVtfX1AbWVkaWEgKG1pbi13aWR0aDo2NHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NjRyZW19fUBtZWRpYSAobWluLXdpZHRoOjgwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo4MHJlbX19QG1lZGlhIChtaW4td2lkdGg6OTZyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjk2cmVtfX0ubS0we21hcmdpbjpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS4tbXgtMXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqLTEpfS5teC0wXC41e21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Lm14LTF7bWFyZ2luLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS4tbXktMnttYXJnaW4tYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSotMil9Lm15LTF7bWFyZ2luLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMSl9Lm10LTBcLjV7bWFyZ2luLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ubXQtMXttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqMSl9Lm10LTJ7bWFyZ2luLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5tdC1cWzNweFxde21hcmdpbi10b3A6M3B4fS5tci1cWzNweFxde21hcmdpbi1yaWdodDozcHh9Lm1sLTBcLjV7bWFyZ2luLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Lm1sLWF1dG97bWFyZ2luLWxlZnQ6YXV0b30uYm94LWJvcmRlcntib3gtc2l6aW5nOmJvcmRlci1ib3h9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmNvbnRlbnRze2Rpc3BsYXk6Y29udGVudHN9LmZsZXh7ZGlzcGxheTpmbGV4fS5ncmlke2Rpc3BsYXk6Z3JpZH0uaGlkZGVue2Rpc3BsYXk6bm9uZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LnRhYmxle2Rpc3BsYXk6dGFibGV9LlxbYXNwZWN0LXJhdGlvXDoxNlwvMTFcXXthc3BlY3QtcmF0aW86MTYvMTF9LnNpemUtMVwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uc2l6ZS0yXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMi41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5zaXplLTNcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnNpemUtNHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5zaXplLTV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uc2l6ZS02e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNik7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNil9LnNpemUtOXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjkpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkpfS5zaXplLVxbMnB4XF17d2lkdGg6MnB4O2hlaWdodDoycHh9LnNpemUtXFsxNHB4XF17d2lkdGg6MTRweDtoZWlnaHQ6MTRweH0uc2l6ZS1cWzE4cHhcXXt3aWR0aDoxOHB4O2hlaWdodDoxOHB4fS5zaXplLVxbMTlweFxde3dpZHRoOjE5cHg7aGVpZ2h0OjE5cHh9LnNpemUtZnVsbHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5oLTJcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0uaC0ze2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5oLTNcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMy41KX0uaC00e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5oLTV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LmgtNVwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1LjUpfS5oLTZ7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNil9LmgtN3toZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0uaC04e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS5oLTEwe2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEwKX0uaC1cWzNweFxde2hlaWdodDozcHh9LmgtXFsxM3B4XF17aGVpZ2h0OjEzcHh9LmgtXFsxNHB4XF17aGVpZ2h0OjE0cHh9LmgtXFsxNnB4XF17aGVpZ2h0OjE2cHh9LmgtXFsxOHB4XF17aGVpZ2h0OjE4cHh9LmgtXFsyMnB4XF17aGVpZ2h0OjIycHh9LmgtXFsyNnB4XF17aGVpZ2h0OjI2cHh9LmgtXFszMHB4XF17aGVpZ2h0OjMwcHh9LmgtZnVsbHtoZWlnaHQ6MTAwJX0uaC1weHtoZWlnaHQ6MXB4fS5oLXNjcmVlbntoZWlnaHQ6MTAwdmh9Lm1heC1oLTkwe21heC1oZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC1oLVxbMjYwcHhcXXttYXgtaGVpZ2h0OjI2MHB4fS5tYXgtaC1cWzMyMHB4XF17bWF4LWhlaWdodDozMjBweH0ubWF4LWgtZnVsbHttYXgtaGVpZ2h0OjEwMCV9Lm1pbi1oLTB7bWluLWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4taC1cWzIycHhcXXttaW4taGVpZ2h0OjIycHh9Lm1pbi1oLVxbMzBweFxde21pbi1oZWlnaHQ6MzBweH0ubWluLWgtXFszNnB4XF17bWluLWhlaWdodDozNnB4fS5taW4taC1cWzQ0cHhcXXttaW4taGVpZ2h0OjQ0cHh9Lm1pbi1oLXB4e21pbi1oZWlnaHQ6MXB4fS53LTF7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0udy0yXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0udy00e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnctNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS53LTZ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0udy03e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNyl9LnctOHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS53LTEwe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTApfS53LTExe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTEpfS53LTIxe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMjEpfS53LTM2e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMzYpfS53LVxbMjJweFxde3dpZHRoOjIycHh9LnctXFszMHB4XF17d2lkdGg6MzBweH0udy1cWzMyXCVcXXt3aWR0aDozMiV9LnctXFszNlwlXF17d2lkdGg6MzYlfS53LVxbNDBcJVxde3dpZHRoOjQwJX0udy1cWzQyXCVcXXt3aWR0aDo0MiV9LnctXFs0NlwlXF17d2lkdGg6NDYlfS53LVxbNDhcJVxde3dpZHRoOjQ4JX0udy1cWzU4XCVcXXt3aWR0aDo1OCV9LnctXFs2MlwlXF17d2lkdGg6NjIlfS53LVxbNjhcJVxde3dpZHRoOjY4JX0udy1cWzcwXCVcXXt3aWR0aDo3MCV9LnctXFs3NFwlXF17d2lkdGg6NzQlfS53LVxbMTIwcHhcXXt3aWR0aDoxMjBweH0udy1cW2NhbGNcKDEwMFwlXCs4cHhcKVxde3dpZHRoOmNhbGMoMTAwJSArIDhweCl9LnctXFttaW5cKDMyMHB4XCxjYWxjXCgxMDB2dy0zMnB4XClcKVxde3dpZHRoOm1pbigzMjBweCwxMDB2dyAtIDMycHgpfS53LWZ1bGx7d2lkdGg6MTAwJX0udy1weHt3aWR0aDoxcHh9Lm1heC13LTkwe21heC13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjkwKX0ubWF4LXctMTIwe21heC13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEyMCl9Lm1heC13LVxbMTUwcHhcXXttYXgtd2lkdGg6MTUwcHh9Lm1heC13LVxbMzYwcHhcXXttYXgtd2lkdGg6MzYwcHh9Lm1heC13LVxbNDIwcHhcXXttYXgtd2lkdGg6NDIwcHh9Lm1heC13LWZ1bGx7bWF4LXdpZHRoOjEwMCV9Lm1pbi13LTB7bWluLXdpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMCl9Lm1pbi13LVxbNTZweFxde21pbi13aWR0aDo1NnB4fS5taW4tdy1cWzIwMHB4XF17bWluLXdpZHRoOjIwMHB4fS5taW4tdy1cWzIyMHB4XF17bWluLXdpZHRoOjIyMHB4fS5taW4tdy1weHttaW4td2lkdGg6MXB4fS5mbGV4LTF7ZmxleDoxfS5zaHJpbmt7ZmxleC1zaHJpbms6MX0uc2hyaW5rLTB7ZmxleC1zaHJpbms6MH0uZ3Jvd3tmbGV4LWdyb3c6MX0uLXRyYW5zbGF0ZS14LTFcLzJ7LS10dy10cmFuc2xhdGUteDpjYWxjKGNhbGMoMS8yKjEwMCUpKi0xKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfS50cmFuc2xhdGUteC0xey0tdHctdHJhbnNsYXRlLXg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfS4tdHJhbnNsYXRlLXktMVwvMnstLXR3LXRyYW5zbGF0ZS15OmNhbGMoY2FsYygxLzIqMTAwJSkqLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9LnRyYW5zZm9ybXt0cmFuc2Zvcm06dmFyKC0tdHctcm90YXRlLXgsKXZhcigtLXR3LXJvdGF0ZS15LCl2YXIoLS10dy1yb3RhdGUteiwpdmFyKC0tdHctc2tldy14LCl2YXIoLS10dy1za2V3LXksKX0uYW5pbWF0ZS1cW2dyaWQtc3Bpbl8wXC43c19saW5lYXJfaW5maW5pdGVcXXthbmltYXRpb246Z3JpZC1zcGluIC43cyBsaW5lYXIgaW5maW5pdGV9LmFuaW1hdGUtXFtncmlkLXNwaW5fMFwuOHNfbGluZWFyX2luZmluaXRlXF17YW5pbWF0aW9uOmdyaWQtc3BpbiAuOHMgbGluZWFyIGluZmluaXRlfS5hbmltYXRlLXNwaW57YW5pbWF0aW9uOnZhcigtLWFuaW1hdGUtc3Bpbil9LmN1cnNvci1jb2wtcmVzaXple2N1cnNvcjpjb2wtcmVzaXplfS5jdXJzb3ItZGVmYXVsdHtjdXJzb3I6ZGVmYXVsdH0uY3Vyc29yLW5vdC1hbGxvd2Vke2N1cnNvcjpub3QtYWxsb3dlZH0uY3Vyc29yLXBvaW50ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmN1cnNvci1wcm9ncmVzc3tjdXJzb3I6cHJvZ3Jlc3N9LmN1cnNvci10ZXh0e2N1cnNvcjp0ZXh0fS50b3VjaC1ub25le3RvdWNoLWFjdGlvbjpub25lfS5yZXNpemV7cmVzaXplOmJvdGh9Lmxpc3Qtbm9uZXtsaXN0LXN0eWxlLXR5cGU6bm9uZX0uYXBwZWFyYW5jZS1ub25le2FwcGVhcmFuY2U6bm9uZX0uXFtncmlkLXRlbXBsYXRlLWNvbHVtbnNcOjFmcl8xZnJfMWZyXF17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnIgMWZyfS5cW2dyaWQtdGVtcGxhdGUtY29sdW1uc1w6YXV0b18xZnJfYXV0b1xde2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmciBhdXRvfS5cW2dyaWQtdGVtcGxhdGUtY29sdW1uc1w6YXV0b19taW5tYXhcKDBcLDFmclwpX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byBtaW5tYXgoMCwxZnIpYXV0b30uZ3JpZC1jb2xzLVxbNTZweF8xZnJfYXV0b1xde2dyaWQtdGVtcGxhdGUtY29sdW1uczo1NnB4IDFmciBhdXRvfS5mbGV4LWNvbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uZmxleC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcH0ucGxhY2UtaXRlbXMtY2VudGVye3BsYWNlLWl0ZW1zOiBjZW50ZXJ9Lml0ZW1zLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6IGNlbnRlcn0uaXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS5qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZ2FwLTBcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5nYXAtMXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0uZ2FwLTFcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uZ2FwLTJ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMil9LmdhcC0yXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmdhcC0ze2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5nYXAtNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uZ2FwLVxbNXB4XF17Z2FwOjVweH0uZ2FwLXB4e2dhcDoxcHh9Lmp1c3RpZnktc2VsZi1lbmR7anVzdGlmeS1zZWxmOmZsZXgtZW5kfS50cnVuY2F0ZXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lm92ZXJmbG93LWhpZGRlbntvdmVyZmxvdzpoaWRkZW59Lm92ZXJmbG93LXktYXV0b3tvdmVyZmxvdy15OmF1dG99LnJvdW5kZWR7Ym9yZGVyLXJhZGl1czouMjVyZW19LnJvdW5kZWQtXFsycHhcXXtib3JkZXItcmFkaXVzOjJweH0ucm91bmRlZC1cWzNweFxde2JvcmRlci1yYWRpdXM6M3B4fS5yb3VuZGVkLVxbNHB4XF17Ym9yZGVyLXJhZGl1czo0cHh9LnJvdW5kZWQtXFs1cHhcXXtib3JkZXItcmFkaXVzOjVweH0ucm91bmRlZC1cWzdweFxde2JvcmRlci1yYWRpdXM6N3B4fS5yb3VuZGVkLVxbOHB4XF17Ym9yZGVyLXJhZGl1czo4cHh9LnJvdW5kZWQtXFs5cHhcXXtib3JkZXItcmFkaXVzOjlweH0ucm91bmRlZC1cWzEwcHhcXXtib3JkZXItcmFkaXVzOjEwcHh9LnJvdW5kZWQtXFsxNHB4XF17Ym9yZGVyLXJhZGl1czoxNHB4fS5yb3VuZGVkLWZ1bGx7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LnJvdW5kZWQtbGd7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtbGcpfS5yb3VuZGVkLW1ke2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLW1kKX0ucm91bmRlZC1ub25le2JvcmRlci1yYWRpdXM6MH0ucm91bmRlZC14bHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy14bCl9LnJvdW5kZWQteHN7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteHMpfS5yb3VuZGVkLXQtXFsxMHB4XF17Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoxMHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjEwcHh9LmJvcmRlcntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItMntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MnB4fS5ib3JkZXItdHtib3JkZXItdG9wLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXRvcC13aWR0aDoxcHh9LmJvcmRlci1ye2JvcmRlci1yaWdodC1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci1yaWdodC13aWR0aDoxcHh9LmJvcmRlci1kYXNoZWR7LS10dy1ib3JkZXItc3R5bGU6ZGFzaGVkO2JvcmRlci1zdHlsZTpkYXNoZWR9LmJvcmRlci1ub25ley0tdHctYm9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXN0eWxlOm5vbmV9LlwhYm9yZGVyLXRpbnRcLzYwe2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci10aW50KSFpbXBvcnRhbnR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXCFib3JkZXItdGludFwvNjB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci10aW50KTYwJSx0cmFuc3BhcmVudCkhaW1wb3J0YW50fX0uYm9yZGVyLVxbXCNhNWI0ZmNcXXtib3JkZXItY29sb3I6I2E1YjRmY30uYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWRhbmdlcil9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMjAlLHRyYW5zcGFyZW50KX19LmJvcmRlci1kYW5nZXJcLzMwe2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci1kYW5nZXIpfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci1kYW5nZXJcLzMwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItZGFuZ2VyKTMwJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItZGFuZ2VyXC80NXtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC80NXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcik0NSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLWRhbmdlclwvNTB7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWRhbmdlcil9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWRhbmdlclwvNTB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpNTAlLHRyYW5zcGFyZW50KX19LmJvcmRlci1pbmt7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWluayl9LmJvcmRlci1pbmtcLzh7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWlua1wvOHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluayk4JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItaW5rXC8xMHtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItaW5rXC8xMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluaykxMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLWlua1wvMTJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWlua1wvMTJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspMTIlLHRyYW5zcGFyZW50KX19LmJvcmRlci1pbmtcLzIwe2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci1pbmtcLzIwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTIwJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItaW5rXC8yNXtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItaW5rXC8yNXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluaykyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLWlua1wvMzB7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWlua1wvMzB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspMzAlLHRyYW5zcGFyZW50KX19LmJvcmRlci1pbmtcL1xbMFwuMDZcXXtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItaW5rXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspNiUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXN5c3RlbS1pY29uLWJvcmRlcntib3JkZXItY29sb3I6dmFyKC0tY29sb3Itc3lzdGVtLWljb24tYm9yZGVyKX0uYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci13YXJuaW5nKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2FybmluZ1wvMjV7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13YXJuaW5nKTI1JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItdC1pbmt7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jb2xvci1pbmspfS5ib3JkZXItdC1pbmtcLzYwe2JvcmRlci10b3AtY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItdC1pbmtcLzYwe2JvcmRlci10b3AtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluayk2MCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXQtaW5rXC85NXtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXQtaW5rXC85NXtib3JkZXItdG9wLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspOTUlLHRyYW5zcGFyZW50KX19LlwhYmctaW5rXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1pbmspIWltcG9ydGFudH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cIWJnLWlua1wvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluaykxMiUsdHJhbnNwYXJlbnQpIWltcG9ydGFudH19LlwhYmctdGludFwvOHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXRpbnQpIWltcG9ydGFudH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cIWJnLXRpbnRcLzh7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItdGludCk4JSx0cmFuc3BhcmVudCkhaW1wb3J0YW50fX0uYmctXFtcIzBhODRmZlxde2JhY2tncm91bmQtY29sb3I6IzBhODRmZn0uYmctXFtyZ2JhXCg5OVwsMTAyXCwyNDFcLDBcLjE4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2MzY2ZjEyZX0uYmctYWNjZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYmctY29udHJvbC1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWNvbnRyb2wtc2VsZWN0ZWQpfS5iZy1kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1kYW5nZXIpfS5iZy1kYW5nZXItc29mdHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWRhbmdlci1zb2Z0KX0uYmctZGFuZ2VyXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWRhbmdlcil9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctZGFuZ2VyXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMTAlLHRyYW5zcGFyZW50KX19LmJnLWdyYWJiZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1ncmFiYmVyKX0uYmctZ3JhYmJlci1hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1ncmFiYmVyLWFjdGl2ZSl9LmJnLWlua3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9LmJnLWlua1wvNntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctaW5rXC82e2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluayk2JSx0cmFuc3BhcmVudCl9fS5iZy1pbmtcLzh7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWlua1wvOHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspOCUsdHJhbnNwYXJlbnQpfX0uYmctaW5rXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctaW5rXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspMTAlLHRyYW5zcGFyZW50KX19LmJnLWlua1wvMTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWlua1wvMTJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTEyJSx0cmFuc3BhcmVudCl9fS5iZy1pbmtcLzE1e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy1pbmtcLzE1e2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluaykxNSUsdHJhbnNwYXJlbnQpfX0uYmctaW5rXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctaW5rXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspMjAlLHRyYW5zcGFyZW50KX19LmJnLWlua1wvNDB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWlua1wvNDB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTQwJSx0cmFuc3BhcmVudCl9fS5iZy1pbmtcL1xbMFwuMDNcXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctaW5rXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTMlLHRyYW5zcGFyZW50KX19LmJnLWlua1wvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy1pbmtcL1xbMFwuMDRcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspNCUsdHJhbnNwYXJlbnQpfX0uYmctaW5rXC9cWzBcLjA2XF17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWlua1wvXFswXC4wNlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluayk2JSx0cmFuc3BhcmVudCl9fS5iZy1pbmtcL1xbMFwuMDhcXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctaW5rXC9cWzBcLjA4XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTglLHRyYW5zcGFyZW50KX19LmJnLWlua1wvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy1pbmtcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspMTIlLHRyYW5zcGFyZW50KX19LmJnLWlua1wvXFswXC4xNlxde2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy1pbmtcL1xbMFwuMTZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspMTYlLHRyYW5zcGFyZW50KX19LmJnLWxpdmUtaWNvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWxpdmUtaWNvbil9LmJnLWxpdmUtaWNvbi1hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1saXZlLWljb24tYWN0aXZlKX0uYmctcGFnZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhZ2UpfS5iZy1wYW5lbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsKX0uYmctcGFuZWwtYmd7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1iZyl9LmJnLXBhbmVsLWJnLXRyYW5zbHVjZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtYmctdHJhbnNsdWNlbnQpfS5iZy1wYW5lbC1kZWVwe2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtZGVlcCl9LmJnLXBhbmVsLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1vdmVybGF5KX0uYmctcGFuZWxcLzkye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwpfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXBhbmVsXC85MntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1wYW5lbCk5MiUsdHJhbnNwYXJlbnQpfX0uYmctc3VjY2Vzcy1lbWVyYWxke2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkKX0uYmctdGludHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXRpbnQpfS5iZy10aW50XC8yMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXRpbnQpfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXRpbnRcLzIye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXRpbnQpMjIlLHRyYW5zcGFyZW50KX19LmJnLXRyYW5zcGFyZW50e2JhY2tncm91bmQtY29sb3I6IzAwMDB9LmJnLXdhcm5pbmdcLzEwe2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itd2FybmluZyl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2FybmluZ1wvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2FybmluZykxMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJnLXdoaXRlXC81MHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LmJnLVxbbGluZWFyLWdyYWRpZW50XCgxNDVkZWdcLHZhclwoLS1zZXJ2ZS1zaW0tc3lzdGVtLWljb24tZnJvbVwpXCx2YXJcKC0tc2VydmUtc2ltLXN5c3RlbS1pY29uLXRvXClcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDE0NWRlZyx2YXIoLS1zZXJ2ZS1zaW0tc3lzdGVtLWljb24tZnJvbSksdmFyKC0tc2VydmUtc2ltLXN5c3RlbS1pY29uLXRvKSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b19ib3R0b21cLHZhclwoLS1zZXJ2ZS1zaW0tcGFuZWxcKV8wXCVcLHZhclwoLS1zZXJ2ZS1zaW0tcGFuZWwtdHJhbnNwYXJlbnRcKV8xMDBcJVwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHZhcigtLXNlcnZlLXNpbS1wYW5lbCkwJSx2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtdHJhbnNwYXJlbnQpMTAwJSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b19yaWdodFwsdmFyXCgtLXNlcnZlLXNpbS1wYW5lbC10cmFuc3BhcmVudFwpXzBcJVwsdmFyXCgtLXNlcnZlLXNpbS1wYW5lbFwpXzU1XCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLXNlcnZlLXNpbS1wYW5lbC10cmFuc3BhcmVudCkwJSx2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwpNTUlKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX3RvcFwsdmFyXCgtLXNlcnZlLXNpbS1wYW5lbFwpXzBcJVwsdmFyXCgtLXNlcnZlLXNpbS1wYW5lbC10cmFuc3BhcmVudFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byB0b3AsdmFyKC0tc2VydmUtc2ltLXBhbmVsKTAlLHZhcigtLXNlcnZlLXNpbS1wYW5lbC10cmFuc3BhcmVudCkxMDAlKX0ub2JqZWN0LWNvbnRhaW57b2JqZWN0LWZpdDpjb250YWlufS5vYmplY3QtY292ZXJ7b2JqZWN0LWZpdDpjb3Zlcn0ucC0we3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucC0wXC41e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnAtMXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnAtM1wuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucC02e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucHgtMFwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHgtMXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weC0xXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHgtMntwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5weC0yXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHgtM3twYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5weC0zXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHgtNHtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5weC01e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqNSl9LnB4LVxbNVwuNXB4XF17cGFkZGluZy1pbmxpbmUtc3RhcnQ6NS41cHg7cGFkZGluZy1pbmxpbmUtZW5kOjUuNXB4fS5weC1cWzdweFxde3BhZGRpbmctaW5saW5lLXN0YXJ0OjdweDtwYWRkaW5nLWlubGluZS1lbmQ6N3B4fS5weS0wXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB5LTF7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weS0xXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5weS0ye3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHktMlwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHktM3twYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMyl9LnB5LTR7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5weS02e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucHktXFsycHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjJweDtwYWRkaW5nLWJsb2NrLWVuZDoycHh9LnB5LVxbM3B4XF17cGFkZGluZy1ibG9jay1zdGFydDozcHg7cGFkZGluZy1ibG9jay1lbmQ6M3B4fS5weS1cWzVweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6NXB4O3BhZGRpbmctYmxvY2stZW5kOjVweH0ucHktXFs3cHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjdweDtwYWRkaW5nLWJsb2NrLWVuZDo3cHh9LnB0LTBcLjV7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB0LTF7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucHQtMlwuNXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnByLTJ7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wci0zXC41e3BhZGRpbmctcmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5wci1cWzI2cHhcXXtwYWRkaW5nLXJpZ2h0OjI2cHh9LnBiLTBcLjV7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnBiLTF7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucGItMVwuNXtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnBiLTJ7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucGItXFsycHhcXXtwYWRkaW5nLWJvdHRvbToycHh9LnBsLTJ7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMil9LnBsLTJcLjV7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucGwtM3twYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucGwtN3twYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0ucGwtXFsyNnB4XF17cGFkZGluZy1sZWZ0OjI2cHh9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LlxbZm9udC1mYW1pbHlcOi1hcHBsZS1zeXN0ZW1cLHN5c3RlbS11aVwsc2Fucy1zZXJpZlxde2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sTm90byBTYW5zLFVidW50dSxDYW50YXJlbGwsSGVsdmV0aWNhIE5ldWUsc2Fucy1zZXJpZn0uZm9udC1cW2luaGVyaXRcXXtmb250LWZhbWlseTppbmhlcml0fS5mb250LW1vbm97Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKX0uZm9udC1zeXN0ZW17Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1zeXN0ZW0pfS50ZXh0LVxbOXB4XF17Zm9udC1zaXplOjlweH0udGV4dC1cWzEwcHhcXXtmb250LXNpemU6MTBweH0udGV4dC1cWzExXC41cHhcXXtmb250LXNpemU6MTEuNXB4fS50ZXh0LVxbMTFweFxde2ZvbnQtc2l6ZToxMXB4fS50ZXh0LVxbMTJweFxde2ZvbnQtc2l6ZToxMnB4fS50ZXh0LVxbMTNweFxde2ZvbnQtc2l6ZToxM3B4fS50ZXh0LVxbMTRweFxde2ZvbnQtc2l6ZToxNHB4fS50ZXh0LVxbMTdweFxde2ZvbnQtc2l6ZToxN3B4fS50ZXh0LVxbMThweFxde2ZvbnQtc2l6ZToxOHB4fS5sZWFkaW5nLVxbMVwuNFxdey0tdHctbGVhZGluZzoxLjQ7bGluZS1oZWlnaHQ6MS40fS5sZWFkaW5nLVxbMVwuNVxdey0tdHctbGVhZGluZzoxLjU7bGluZS1oZWlnaHQ6MS41fS5sZWFkaW5nLVxbMVwuMzVcXXstLXR3LWxlYWRpbmc6MS4zNTtsaW5lLWhlaWdodDoxLjM1fS5sZWFkaW5nLW5vbmV7LS10dy1sZWFkaW5nOjE7bGluZS1oZWlnaHQ6MX0ubGVhZGluZy1zbnVney0tdHctbGVhZGluZzp2YXIoLS1sZWFkaW5nLXNudWcpO2xpbmUtaGVpZ2h0OnZhcigtLWxlYWRpbmctc251Zyl9LmxlYWRpbmctdGlnaHR7LS10dy1sZWFkaW5nOnZhcigtLWxlYWRpbmctdGlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWxlYWRpbmctdGlnaHQpfS5mb250LW1lZGl1bXstLXR3LWZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7Zm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKX0uZm9udC1zZW1pYm9sZHstLXR3LWZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCl9LnRyYWNraW5nLVxbMFwuMWVtXF17LS10dy10cmFja2luZzouMWVtO2xldHRlci1zcGFjaW5nOi4xZW19LnRyYWNraW5nLVxbMFwuMDJlbVxdey0tdHctdHJhY2tpbmc6LjAyZW07bGV0dGVyLXNwYWNpbmc6LjAyZW19LnRyYWNraW5nLVxbMFwuMDRlbVxdey0tdHctdHJhY2tpbmc6LjA0ZW07bGV0dGVyLXNwYWNpbmc6LjA0ZW19LnRyYWNraW5nLVxbMFwuMDZlbVxdey0tdHctdHJhY2tpbmc6LjA2ZW07bGV0dGVyLXNwYWNpbmc6LjA2ZW19LnRyYWNraW5nLVxbMFwuMDhlbVxdey0tdHctdHJhY2tpbmc6LjA4ZW07bGV0dGVyLXNwYWNpbmc6LjA4ZW19LnRyYWNraW5nLXdpZGV7LS10dy10cmFja2luZzp2YXIoLS10cmFja2luZy13aWRlKTtsZXR0ZXItc3BhY2luZzp2YXIoLS10cmFja2luZy13aWRlKX0uYnJlYWstd29yZHN7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS50ZXh0LWVsbGlwc2lze3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LndoaXRlc3BhY2Utbm93cmFwe3doaXRlLXNwYWNlOm5vd3JhcH0uXCF0ZXh0LWlua3tjb2xvcjp2YXIoLS1jb2xvci1pbmspIWltcG9ydGFudH0udGV4dC1cW1wjYTViNGZjXF17Y29sb3I6I2E1YjRmY30udGV4dC1hY2NlbnR7Y29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0udGV4dC1kYW5nZXJ7Y29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyKX0udGV4dC1kYW5nZXItc29mdHtjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXItc29mdCl9LnRleHQtaWNvbntjb2xvcjp2YXIoLS1jb2xvci1pY29uKX0udGV4dC1pbmt7Y29sb3I6dmFyKC0tY29sb3ItaW5rKX0udGV4dC1pbmstNDB7Y29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LWluay00MHtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1jb2xvci1pbmspY2FsYygxMDAlIC0gKDEwMCUgLSA0MCoxJSkqdmFyKC0tc2VydmUtc2ltLXRleHQtaykpLHRyYW5zcGFyZW50KX19LnRleHQtaW5rLTQye2NvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC1pbmstNDJ7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tY29sb3ItaW5rKWNhbGMoMTAwJSAtICgxMDAlIC0gNDIqMSUpKnZhcigtLXNlcnZlLXNpbS10ZXh0LWspKSx0cmFuc3BhcmVudCl9fS50ZXh0LWluay00NXtjb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtaW5rLTQ1e2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWNvbG9yLWluayljYWxjKDEwMCUgLSAoMTAwJSAtIDQ1KjElKSp2YXIoLS1zZXJ2ZS1zaW0tdGV4dC1rKSksdHJhbnNwYXJlbnQpfX0udGV4dC1pbmstNDh7Y29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LWluay00OHtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1jb2xvci1pbmspY2FsYygxMDAlIC0gKDEwMCUgLSA0OCoxJSkqdmFyKC0tc2VydmUtc2ltLXRleHQtaykpLHRyYW5zcGFyZW50KX19LnRleHQtaW5rLTUwe2NvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC1pbmstNTB7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tY29sb3ItaW5rKWNhbGMoMTAwJSAtICgxMDAlIC0gNTAqMSUpKnZhcigtLXNlcnZlLXNpbS10ZXh0LWspKSx0cmFuc3BhcmVudCl9fS50ZXh0LWluay01NXtjb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtaW5rLTU1e2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWNvbG9yLWluayljYWxjKDEwMCUgLSAoMTAwJSAtIDU1KjElKSp2YXIoLS1zZXJ2ZS1zaW0tdGV4dC1rKSksdHJhbnNwYXJlbnQpfX0udGV4dC1pbmstNTh7Y29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LWluay01OHtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1jb2xvci1pbmspY2FsYygxMDAlIC0gKDEwMCUgLSA1OCoxJSkqdmFyKC0tc2VydmUtc2ltLXRleHQtaykpLHRyYW5zcGFyZW50KX19LnRleHQtaW5rLTYwe2NvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC1pbmstNjB7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tY29sb3ItaW5rKWNhbGMoMTAwJSAtICgxMDAlIC0gNjAqMSUpKnZhcigtLXNlcnZlLXNpbS10ZXh0LWspKSx0cmFuc3BhcmVudCl9fS50ZXh0LWluay02NXtjb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtaW5rLTY1e2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWNvbG9yLWluayljYWxjKDEwMCUgLSAoMTAwJSAtIDY1KjElKSp2YXIoLS1zZXJ2ZS1zaW0tdGV4dC1rKSksdHJhbnNwYXJlbnQpfX0udGV4dC1pbmstNzB7Y29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LWluay03MHtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1jb2xvci1pbmspY2FsYygxMDAlIC0gKDEwMCUgLSA3MCoxJSkqdmFyKC0tc2VydmUtc2ltLXRleHQtaykpLHRyYW5zcGFyZW50KX19LnRleHQtaW5rLTc1e2NvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC1pbmstNzV7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tY29sb3ItaW5rKWNhbGMoMTAwJSAtICgxMDAlIC0gNzUqMSUpKnZhcigtLXNlcnZlLXNpbS10ZXh0LWspKSx0cmFuc3BhcmVudCl9fS50ZXh0LWluay04MHtjb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtaW5rLTgwe2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWNvbG9yLWluayljYWxjKDEwMCUgLSAoMTAwJSAtIDgwKjElKSp2YXIoLS1zZXJ2ZS1zaW0tdGV4dC1rKSksdHJhbnNwYXJlbnQpfX0udGV4dC1pbmstODV7Y29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LWluay04NXtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1jb2xvci1pbmspY2FsYygxMDAlIC0gKDEwMCUgLSA4NSoxJSkqdmFyKC0tc2VydmUtc2ltLXRleHQtaykpLHRyYW5zcGFyZW50KX19LnRleHQtaW5rLTkwe2NvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC1pbmstOTB7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tY29sb3ItaW5rKWNhbGMoMTAwJSAtICgxMDAlIC0gOTAqMSUpKnZhcigtLXNlcnZlLXNpbS10ZXh0LWspKSx0cmFuc3BhcmVudCl9fS50ZXh0LWluay05Mntjb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtaW5rLTkye2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWNvbG9yLWluayljYWxjKDEwMCUgLSAoMTAwJSAtIDkyKjElKSp2YXIoLS1zZXJ2ZS1zaW0tdGV4dC1rKSksdHJhbnNwYXJlbnQpfX0udGV4dC1pbmstOTV7Y29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LWluay05NXtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1jb2xvci1pbmspY2FsYygxMDAlIC0gKDEwMCUgLSA5NSoxJSkqdmFyKC0tc2VydmUtc2ltLXRleHQtaykpLHRyYW5zcGFyZW50KX19LnRleHQtaW5rLWludmVyc2V7Y29sb3I6dmFyKC0tY29sb3ItaW5rLWludmVyc2UpfS50ZXh0LWxpdmUtaWNvbi1mZ3tjb2xvcjp2YXIoLS1jb2xvci1saXZlLWljb24tZmcpfS50ZXh0LW9uLXN1Y2Nlc3N7Y29sb3I6dmFyKC0tY29sb3Itb24tc3VjY2Vzcyl9LnRleHQtc3VjY2Vzcy1lbWVyYWxke2NvbG9yOnZhcigtLWNvbG9yLXN1Y2Nlc3MtZW1lcmFsZCl9LnRleHQtc3lzdGVtLWljb24tZmd7Y29sb3I6dmFyKC0tY29sb3Itc3lzdGVtLWljb24tZmcpfS50ZXh0LXdhcm5pbmctc29mdHtjb2xvcjp2YXIoLS1jb2xvci13YXJuaW5nLXNvZnQpfS5sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlfS51cHBlcmNhc2V7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5pdGFsaWN7Zm9udC1zdHlsZTppdGFsaWN9LnRhYnVsYXItbnVtc3stLXR3LW51bWVyaWMtc3BhY2luZzp0YWJ1bGFyLW51bXM7Zm9udC12YXJpYW50LW51bWVyaWM6dmFyKC0tdHctb3JkaW5hbCwpdmFyKC0tdHctc2xhc2hlZC16ZXJvLCl2YXIoLS10dy1udW1lcmljLWZpZ3VyZSwpdmFyKC0tdHctbnVtZXJpYy1zcGFjaW5nLCl2YXIoLS10dy1udW1lcmljLWZyYWN0aW9uLCl9LlxbZm9udC12YXJpYW50LW51bWVyaWNcOnRhYnVsYXItbnVtc1xde2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ubm8tdW5kZXJsaW5le3RleHQtZGVjb3JhdGlvbi1saW5lOm5vbmV9LmFudGlhbGlhc2Vkey13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlfS5vcGFjaXR5LTB7b3BhY2l0eTowfS5vcGFjaXR5LTQwe29wYWNpdHk6LjR9Lm9wYWNpdHktNjB7b3BhY2l0eTouNn0ub3BhY2l0eS0xMDB7b3BhY2l0eToxfS5zaGFkb3d7LS10dy1zaGFkb3c6MCAxcHggM3B4IDAgdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAxYSksMCAxcHggMnB4IC0xcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAxYSk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzFweF8ycHhfcmdiYVwoMFwsMFwsMFwsMFwuMlwpXF17LS10dy1zaGFkb3c6MCAxcHggMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMyk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzFweF8ycHhfcmdiYVwoMFwsMFwsMFwsMFwuMThcKVwsMF82cHhfMThweF9yZ2JhXCgwXCwwXCwwXCwwXC4yOFwpXCxpbnNldF8wXzBfMF8xcHhfY29sb3ItbWl4XChpbl9zcmdiXCx2YXJcKC0tc2VydmUtc2ltLWlua1wpXzZcJVwsdHJhbnNwYXJlbnRcKVxdey0tdHctc2hhZG93OjAgMXB4IDJweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDJlKSwwIDZweCAxOHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNDcpLGluc2V0IDAgMCAwIDFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsdmFyKC0tc2VydmUtc2ltLWluaykpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5zaGFkb3ctXFswXzFweF8ycHhfcmdiYVwoMFwsMFwsMFwsMFwuMThcKVwsMF82cHhfMThweF9yZ2JhXCgwXCwwXCwwXCwwXC4yOFwpXCxpbnNldF8wXzBfMF8xcHhfY29sb3ItbWl4XChpbl9zcmdiXCx2YXJcKC0tc2VydmUtc2ltLWlua1wpXzZcJVwsdHJhbnNwYXJlbnRcKVxdey0tdHctc2hhZG93OjAgMXB4IDJweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDJlKSwwIDZweCAxOHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNDcpLGluc2V0IDAgMCAwIDFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsY29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tc2VydmUtc2ltLWluayk2JSx0cmFuc3BhcmVudCkpfX0uc2hhZG93LVxbMF8xcHhfMnB4X3JnYmFcKDBcLDBcLDBcLDBcLjE4XClcXXstLXR3LXNoYWRvdzowIDFweCAycHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAyZSk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctcGFuZWx7LS10dy1zaGFkb3c6dmFyKC0tc2VydmUtc2ltLXNoYWRvdy1wYW5lbCk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctcG9wb3ZlcnstLXR3LXNoYWRvdzp2YXIoLS1zZXJ2ZS1zaW0tc2hhZG93LXBvcG92ZXIpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0ucmluZywucmluZy0xey0tdHctcmluZy1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpMCAwIDAgY2FsYygxcHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpdmFyKC0tdHctcmluZy1jb2xvcixjdXJyZW50Y29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0ucmluZy0yey0tdHctcmluZy1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpMCAwIDAgY2FsYygycHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpdmFyKC0tdHctcmluZy1jb2xvcixjdXJyZW50Y29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uXFtib3gtc2hhZG93XDowXzBfNnB4X2NvbG9yLW1peFwoaW5fc3JnYlwsdmFyXCgtLXNlcnZlLXNpbS1kYW5nZXJcKV81NVwlXCx0cmFuc3BhcmVudFwpXF17Ym94LXNoYWRvdzowIDAgNnB4IHZhcigtLXNlcnZlLXNpbS1kYW5nZXIpfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbYm94LXNoYWRvd1w6MF8wXzZweF9jb2xvci1taXhcKGluX3NyZ2JcLHZhclwoLS1zZXJ2ZS1zaW0tZGFuZ2VyXClfNTVcJVwsdHJhbnNwYXJlbnRcKVxde2JveC1zaGFkb3c6MCAwIDZweCBjb2xvci1taXgoaW4gc3JnYix2YXIoLS1zZXJ2ZS1zaW0tZGFuZ2VyKTU1JSx0cmFuc3BhcmVudCl9fS5cW2JveC1zaGFkb3dcOjBfMF82cHhfY29sb3ItbWl4XChpbl9zcmdiXCx2YXJcKC0tc2VydmUtc2ltLXN1Y2Nlc3NcKV83MFwlXCx0cmFuc3BhcmVudFwpXF17Ym94LXNoYWRvdzowIDAgNnB4IHZhcigtLXNlcnZlLXNpbS1zdWNjZXNzKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW2JveC1zaGFkb3dcOjBfMF82cHhfY29sb3ItbWl4XChpbl9zcmdiXCx2YXJcKC0tc2VydmUtc2ltLXN1Y2Nlc3NcKV83MFwlXCx0cmFuc3BhcmVudFwpXF17Ym94LXNoYWRvdzowIDAgNnB4IGNvbG9yLW1peChpbiBzcmdiLHZhcigtLXNlcnZlLXNpbS1zdWNjZXNzKTcwJSx0cmFuc3BhcmVudCl9fS5yaW5nLWlua1wvMTB7LS10dy1yaW5nLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsucmluZy1pbmtcLzEwey0tdHctcmluZy1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTEwJSx0cmFuc3BhcmVudCl9fS5yaW5nLXBhbmVsLWJney0tdHctcmluZy1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1iZyl9Lm91dGxpbmV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjFweH0uYmx1cnstLXR3LWJsdXI6Ymx1cig4cHgpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uZ3JheXNjYWxley0tdHctZ3JheXNjYWxlOmdyYXlzY2FsZSgxMDAlKTtmaWx0ZXI6dmFyKC0tdHctYmx1ciwpdmFyKC0tdHctYnJpZ2h0bmVzcywpdmFyKC0tdHctY29udHJhc3QsKXZhcigtLXR3LWdyYXlzY2FsZSwpdmFyKC0tdHctaHVlLXJvdGF0ZSwpdmFyKC0tdHctaW52ZXJ0LCl2YXIoLS10dy1zYXR1cmF0ZSwpdmFyKC0tdHctc2VwaWEsKXZhcigtLXR3LWRyb3Atc2hhZG93LCl9LnNlcGlhey0tdHctc2VwaWE6c2VwaWEoMTAwJSk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5maWx0ZXJ7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5iYWNrZHJvcC1ibHVyey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDhweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1cWzEycHhcXXstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cigxMnB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLVxbMThweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDE4cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItbWR7LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIodmFyKC0tYmx1ci1tZCkpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLXNhdHVyYXRlLTE1MHstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOnNhdHVyYXRlKDE1MCUpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWZpbHRlcnstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS50cmFuc2l0aW9ue3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3Isb3V0bGluZS1jb2xvcix0ZXh0LWRlY29yYXRpb24tY29sb3IsZmlsbCxzdHJva2UsLS10dy1ncmFkaWVudC1mcm9tLC0tdHctZ3JhZGllbnQtdmlhLC0tdHctZ3JhZGllbnQtdG8sb3BhY2l0eSxib3gtc2hhZG93LHRyYW5zZm9ybSx0cmFuc2xhdGUsc2NhbGUscm90YXRlLGZpbHRlciwtd2Via2l0LWJhY2tkcm9wLWZpbHRlcixiYWNrZHJvcC1maWx0ZXIsZGlzcGxheSxjb250ZW50LXZpc2liaWxpdHksb3ZlcmxheSxwb2ludGVyLWV2ZW50czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLVxbYm9yZGVyLWNvbG9yXCxiYWNrZ3JvdW5kXF17dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLVxbd2lkdGhcLGJhY2tncm91bmRcXXt0cmFuc2l0aW9uLXByb3BlcnR5OndpZHRoLGJhY2tncm91bmQ7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1jb2xvcnN7dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcixvdXRsaW5lLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSwtLXR3LWdyYWRpZW50LWZyb20sLS10dy1ncmFkaWVudC12aWEsLS10dy1ncmFkaWVudC10bzt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLW9wYWNpdHl7dHJhbnNpdGlvbi1wcm9wZXJ0eTpvcGFjaXR5O3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LmR1cmF0aW9uLTE1MHstLXR3LWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi1kdXJhdGlvbjouMTVzfS5kdXJhdGlvbi0yMDB7LS10dy1kdXJhdGlvbjouMnM7dHJhbnNpdGlvbi1kdXJhdGlvbjouMnN9LmR1cmF0aW9uLTMwMHstLXR3LWR1cmF0aW9uOi4zczt0cmFuc2l0aW9uLWR1cmF0aW9uOi4zc30uZWFzZS1pbi1vdXR7LS10dy1lYXNlOnZhcigtLWVhc2UtaW4tb3V0KTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS1lYXNlLWluLW91dCl9LmVhc2Utb3V0ey0tdHctZWFzZTp2YXIoLS1lYXNlLW91dCk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tZWFzZS1vdXQpfS5vdXRsaW5lLW5vbmV7LS10dy1vdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1zdHlsZTpub25lfS5zZWxlY3Qtbm9uZXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uc2VsZWN0LXRleHR7LXdlYmtpdC11c2VyLXNlbGVjdDp0ZXh0O3VzZXItc2VsZWN0OnRleHR9LlxbLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXJcOmJsdXJcKDEycHhcKVxdey13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOmJsdXIoMTJweCl9Llxbc2Nyb2xsYmFyLXdpZHRoXDp0aGluXF17c2Nyb2xsYmFyLXdpZHRoOnRoaW59LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4yc1wsYm94LXNoYWRvd18wXC4yc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMnMsYm94LXNoYWRvdyAuMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4zc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuM3N9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xMnNcLGJvcmRlci1jb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjEycyxib3JkZXItY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1wsY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVwsY29sb3JfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cyxjb2xvciAuMTVzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xOHN9LlxbdHJhbnNpdGlvblw6bGVmdF8wXC4xNXNcXXt0cmFuc2l0aW9uOmxlZnQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjEyc1wsYmFja2dyb3VuZF8wXC4xMnNcLGNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246b3BhY2l0eSAuMTJzLGJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTJzXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xNXNfZWFzZVwsYmFja2dyb3VuZF8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLGJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCx0cmFuc2Zvcm1fMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyx0cmFuc2Zvcm0gLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xOHN9LlxbdHJhbnNpdGlvblw6cGFkZGluZ18wXC4yNXNfZWFzZVxde3RyYW5zaXRpb246cGFkZGluZyAuMjVzfS5cW3RyYW5zaXRpb25cOnRyYW5zZm9ybV8wXC4yNXNfZWFzZVwsb3BhY2l0eV8wXC4yc19lYXNlXF17dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjI1cyxvcGFjaXR5IC4yc30uXFt0cmFuc2l0aW9uXDp3aWR0aF8xMjBtc19saW5lYXJcXXt0cmFuc2l0aW9uOndpZHRoIC4xMnMgbGluZWFyfS5ncm91cC1mb2N1cy13aXRoaW5cOm9wYWNpdHktMDppcyg6d2hlcmUoLmdyb3VwKTpmb2N1cy13aXRoaW4gKil7b3BhY2l0eTowfUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6cG9pbnRlci1ldmVudHMtYXV0bzppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtwb2ludGVyLWV2ZW50czphdXRvfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOmhpZGRlbjppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtkaXNwbGF5Om5vbmV9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6dHJhbnNsYXRlLXgtMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXstLXR3LXRyYW5zbGF0ZS14OmNhbGModmFyKC0tc3BhY2luZykqMCk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpvcGFjaXR5LTA6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7b3BhY2l0eTowfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOm9wYWNpdHktMTAwOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope29wYWNpdHk6MX19LnBsYWNlaG9sZGVyXDp0ZXh0LWluay00MDo6cGxhY2Vob2xkZXJ7Y29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5wbGFjZWhvbGRlclw6dGV4dC1pbmstNDA6OnBsYWNlaG9sZGVye2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWNvbG9yLWluayljYWxjKDEwMCUgLSAoMTAwJSAtIDQwKjElKSp2YXIoLS1zZXJ2ZS1zaW0tdGV4dC1rKSksdHJhbnNwYXJlbnQpfX0uZm9jdXMtd2l0aGluXDpiZy1pbmtcLzEwOmZvY3VzLXdpdGhpbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXMtd2l0aGluXDpiZy1pbmtcLzEwOmZvY3VzLXdpdGhpbntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspMTAlLHRyYW5zcGFyZW50KX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItaW5rXC8xNjpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ym9yZGVyLWlua1wvMTY6aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspMTYlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ym9yZGVyLWlua1wvMTg6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJvcmRlci1pbmtcLzE4OmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTE4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci1pbmtcLzIwOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpib3JkZXItaW5rXC8yMDpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluaykyMCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItaW5rXC9cWzBcLjg4XF06aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJvcmRlci1pbmtcL1xbMFwuODhcXTpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluayk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy1pbmtcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy1pbmtcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6YmctaW5rXC8xMjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLWlua1wvMTI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTEyJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLWlua1wvMTg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy1pbmtcLzE4OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluaykxOCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy1pbmtcLzIwOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6YmctaW5rXC8yMDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspMjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6YmctaW5rXC8yNTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLWlua1wvMjU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTI1JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLWlua1wvXFswXC4wNVxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6YmctaW5rXC9cWzBcLjA1XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTUlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6YmctaW5rXC9cWzBcLjA2XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy1pbmtcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspNiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy1pbmtcL1xbMFwuMDdcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLWlua1wvXFswXC4wN1xdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluayk3LjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6YmctaW5rXC9cWzBcLjA5XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy1pbmtcL1xbMFwuMDlcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspOSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy1pbmtcL1xbMFwuODhcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLWlua1wvXFswXC44OFxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluayk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LWluazpob3Zlcntjb2xvcjp2YXIoLS1jb2xvci1pbmspfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtaW5rLTg1OmhvdmVye2NvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOnRleHQtaW5rLTg1OmhvdmVye2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWNvbG9yLWluayljYWxjKDEwMCUgLSAoMTAwJSAtIDg1KjElKSp2YXIoLS1zZXJ2ZS1zaW0tdGV4dC1rKSksdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LWluay05MDpob3Zlcntjb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDp0ZXh0LWluay05MDpob3Zlcntjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1jb2xvci1pbmspY2FsYygxMDAlIC0gKDEwMCUgLSA5MCoxJSkqdmFyKC0tc2VydmUtc2ltLXRleHQtaykpLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC1pbmstaW52ZXJzZTpob3Zlcntjb2xvcjp2YXIoLS1jb2xvci1pbmstaW52ZXJzZSl9fS5mb2N1c1w6Ym9yZGVyLWlua1wvMjQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXNcOmJvcmRlci1pbmtcLzI0OmZvY3Vze2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTI0JSx0cmFuc3BhcmVudCl9fS5mb2N1c1w6YmctaW5rXC9cWzBcLjA4XF06Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzXDpiZy1pbmtcL1xbMFwuMDhcXTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspOCUsdHJhbnNwYXJlbnQpfX0uZm9jdXNcOm91dGxpbmUtbm9uZTpmb2N1c3stLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9LmZvY3VzLXZpc2libGVcOmJnLWlua1wvODpmb2N1cy12aXNpYmxle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy12aXNpYmxlXDpiZy1pbmtcLzg6Zm9jdXMtdmlzaWJsZXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspOCUsdHJhbnNwYXJlbnQpfX0uZm9jdXMtdmlzaWJsZVw6b3BhY2l0eS0xMDA6Zm9jdXMtdmlzaWJsZXtvcGFjaXR5OjF9LmZvY3VzLXZpc2libGVcOlxbb3V0bGluZVw6MVwuNXB4X3NvbGlkX2NvbG9yLW1peFwoaW5fc3JnYlwsdmFyXCgtLXNlcnZlLXNpbS10aW50XClfNTVcJVwsdHJhbnNwYXJlbnRcKVxdOmZvY3VzLXZpc2libGV7b3V0bGluZToxLjVweCBzb2xpZCB2YXIoLS1zZXJ2ZS1zaW0tdGludCl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXMtdmlzaWJsZVw6XFtvdXRsaW5lXDoxXC41cHhfc29saWRfY29sb3ItbWl4XChpbl9zcmdiXCx2YXJcKC0tc2VydmUtc2ltLXRpbnRcKV81NVwlXCx0cmFuc3BhcmVudFwpXF06Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjEuNXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLHZhcigtLXNlcnZlLXNpbS10aW50KTU1JSx0cmFuc3BhcmVudCl9fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lOmZvY3VzLXZpc2libGV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjFweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS0yOmZvY3VzLXZpc2libGV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjJweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1vZmZzZXQtMTpmb2N1cy12aXNpYmxle291dGxpbmUtb2Zmc2V0OjFweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1vZmZzZXQtMjpmb2N1cy12aXNpYmxle291dGxpbmUtb2Zmc2V0OjJweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1vZmZzZXQtNDpmb2N1cy12aXNpYmxle291dGxpbmUtb2Zmc2V0OjRweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1pbmtcLzYwOmZvY3VzLXZpc2libGV7b3V0bGluZS1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXZpc2libGVcOm91dGxpbmUtaW5rXC82MDpmb2N1cy12aXNpYmxle291dGxpbmUtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluayk2MCUsdHJhbnNwYXJlbnQpfX0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS10aW50OmZvY3VzLXZpc2libGV7b3V0bGluZS1jb2xvcjp2YXIoLS1jb2xvci10aW50KX0uYWN0aXZlXDpzY2FsZS1cWzBcLjk3XF06YWN0aXZle3NjYWxlOi45N31AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci1pbmtcLzE4OmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci1pbmtcLzE4OmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspMTglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLWlua1wvMjA6ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLWlua1wvMjA6ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluaykyMCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItaW5rXC9cWzBcLjg4XF06ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLWlua1wvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6YmctaW5rXC9cWzBcLjA2XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLWlua1wvXFswXC4wNlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTYlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6YmctaW5rXC9cWzBcLjA5XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLWlua1wvXFswXC4wOVxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTklLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6YmctaW5rXC9cWzBcLjIyXF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLWlua1wvXFswXC4yMlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTIyJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLWlua1wvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy1pbmtcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluayk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy1wYW5lbC1ob3ZlcjplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtaG92ZXIpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOnRleHQtaW5rOmVuYWJsZWQ6aG92ZXJ7Y29sb3I6dmFyKC0tY29sb3ItaW5rKX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDp0ZXh0LWluay1pbnZlcnNlOmVuYWJsZWQ6aG92ZXJ7Y29sb3I6dmFyKC0tY29sb3ItaW5rLWludmVyc2UpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJyaWdodG5lc3MtXFsxXC4wOFxdOmVuYWJsZWQ6aG92ZXJ7LS10dy1icmlnaHRuZXNzOmJyaWdodG5lc3MoMS4wOCk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfX0uZGlzYWJsZWRcOmN1cnNvci1kZWZhdWx0OmRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5kaXNhYmxlZFw6Y3Vyc29yLW5vdC1hbGxvd2VkOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH0uZGlzYWJsZWRcOnRleHQtaW5rLTQwOmRpc2FibGVke2NvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGlzYWJsZWRcOnRleHQtaW5rLTQwOmRpc2FibGVke2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWNvbG9yLWluayljYWxjKDEwMCUgLSAoMTAwJSAtIDQwKjElKSp2YXIoLS1zZXJ2ZS1zaW0tdGV4dC1rKSksdHJhbnNwYXJlbnQpfX0uZGlzYWJsZWRcOm9wYWNpdHktNDA6ZGlzYWJsZWR7b3BhY2l0eTouNH0uZGlzYWJsZWRcOm9wYWNpdHktNTA6ZGlzYWJsZWR7b3BhY2l0eTouNX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsubW90aW9uLXJlZHVjZVw6dHJhbnNpdGlvbi1ub25le3RyYW5zaXRpb24tcHJvcGVydHk6bm9uZX19QG1lZGlhIChtYXgtd2lkdGg6ODk5Ljk5OXB4KXsubWF4LVxbOTAwcHhcXVw6aGlkZGVue2Rpc3BsYXk6bm9uZX19LlxbXCZcOlw6LW1vei1yYW5nZS1wcm9ncmVzc1xdXDpoLVxbNHB4XF06Oi1tb3otcmFuZ2UtcHJvZ3Jlc3N7aGVpZ2h0OjRweH0uXFtcJlw6XDotbW96LXJhbmdlLXByb2dyZXNzXF1cOnJvdW5kZWQtZnVsbDo6LW1vei1yYW5nZS1wcm9ncmVzc3tib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotbW96LXJhbmdlLXByb2dyZXNzXF1cOmJnLVxbdmFyXCgtLXNsaWRlci1maWxsLWNvbG9yXClcXTo6LW1vei1yYW5nZS1wcm9ncmVzc3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXNsaWRlci1maWxsLWNvbG9yKX0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOnNpemUtXFsxM3B4XF06Oi1tb3otcmFuZ2UtdGh1bWJ7d2lkdGg6MTNweDtoZWlnaHQ6MTNweH0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOnJvdW5kZWQtZnVsbDo6LW1vei1yYW5nZS10aHVtYntib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJvcmRlci1ub25lOjotbW96LXJhbmdlLXRodW1iey0tdHctYm9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXN0eWxlOm5vbmV9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpiZy13aGl0ZTo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOmgtXFs0cHhcXTo6LW1vei1yYW5nZS10cmFja3toZWlnaHQ6NHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6cm91bmRlZC1mdWxsOjotbW96LXJhbmdlLXRyYWNre2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6YmctaW5rXC8yMjo6LW1vei1yYW5nZS10cmFja3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOmJnLWlua1wvMjI6Oi1tb3otcmFuZ2UtdHJhY2t7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTIyJSx0cmFuc3BhcmVudCl9fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOmgtXFs0cHhcXTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7aGVpZ2h0OjRweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja1xdXDpyb3VuZGVkLWZ1bGw6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOlxbYmFja2dyb3VuZFw6bGluZWFyLWdyYWRpZW50XCh0b19yaWdodFwsdmFyXCgtLXNsaWRlci1maWxsLWNvbG9yXClfdmFyXCgtLXNsaWRlci1maWxsXClcLGNvbG9yLW1peFwoaW5fc3JnYlwsdmFyXCgtLXNlcnZlLXNpbS1pbmtcKV8yMlwlXCx0cmFuc3BhcmVudFwpX3ZhclwoLS1zbGlkZXItZmlsbFwpXClcXTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tc2xpZGVyLWZpbGwtY29sb3IpdmFyKC0tc2xpZGVyLWZpbGwpLHZhcigtLXNlcnZlLXNpbS1pbmspdmFyKC0tc2xpZGVyLWZpbGwpKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOlxbYmFja2dyb3VuZFw6bGluZWFyLWdyYWRpZW50XCh0b19yaWdodFwsdmFyXCgtLXNsaWRlci1maWxsLWNvbG9yXClfdmFyXCgtLXNsaWRlci1maWxsXClcLGNvbG9yLW1peFwoaW5fc3JnYlwsdmFyXCgtLXNlcnZlLXNpbS1pbmtcKV8yMlwlXCx0cmFuc3BhcmVudFwpX3ZhclwoLS1zbGlkZXItZmlsbFwpXClcXTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tc2xpZGVyLWZpbGwtY29sb3IpdmFyKC0tc2xpZGVyLWZpbGwpLGNvbG9yLW1peChpbiBzcmdiLHZhcigtLXNlcnZlLXNpbS1pbmspMjIlLHRyYW5zcGFyZW50KXZhcigtLXNsaWRlci1maWxsKSl9fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOi1tdC1cWzRcLjVweFxdOjotd2Via2l0LXNsaWRlci10aHVtYnttYXJnaW4tdG9wOi00LjVweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpzaXplLVxbMTNweFxdOjotd2Via2l0LXNsaWRlci10aHVtYnt3aWR0aDoxM3B4O2hlaWdodDoxM3B4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmFwcGVhcmFuY2Utbm9uZTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YXBwZWFyYW5jZTpub25lfS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOnJvdW5kZWQtZnVsbDo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6Ymctd2hpdGU6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOnNoYWRvdy1cWzBfMXB4XzNweF9yZ2JhXCgwXCwwXCwwXCwwXC40NVwpXF06Oi13ZWJraXQtc2xpZGVyLXRodW1iey0tdHctc2hhZG93OjAgMXB4IDNweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDczKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LlxbXCZcOmRpc2FibGVkXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjgwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbXCZcOmRpc2FibGVkXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1ie2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fS5cW1wmXDpkaXNhYmxlZFw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjgwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbXCZcOmRpc2FibGVkXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19fTpyb290ey0tYnVuY3NzLWxpZ2h0OiA7LS1idW5jc3MtZGFyazppbml0aWFsO2NvbG9yLXNjaGVtZTpkYXJrOy0tc2VydmUtc2ltLWluazojZmZmOy0tc2VydmUtc2ltLWluay1pbnZlcnNlOiMwYTBhMGM7LS1zZXJ2ZS1zaW0tdGV4dC1rOjE7LS1zZXJ2ZS1zaW0tcGFnZTojMGEwYTBhOy0tc2VydmUtc2ltLXBhbmVsOiMxYzFjMWU7LS1zZXJ2ZS1zaW0tcGFuZWwtaG92ZXI6IzJhMmEyYzstLXNlcnZlLXNpbS1wYW5lbC10cmFuc3BhcmVudDojMWMxYzFlMDA7LS1zZXJ2ZS1zaW0tcGFuZWwtYmc6IzE4MTgxODstLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc2x1Y2VudDojMTgxODE4Yzc7LS1zZXJ2ZS1zaW0tcGFuZWwtYmctdHJhbnNwYXJlbnQ6IzE4MTgxODAwOy0tc2VydmUtc2ltLXBhbmVsLW92ZXJsYXk6IzE4MTgxOGE2Oy0tc2VydmUtc2ltLXBhbmVsLWRlZXA6IzExMTExMzstLXNlcnZlLXNpbS1pY29uOiM4ZThlOTM7LS1zZXJ2ZS1zaW0tdGludDojMGE4NGZmOy0tc2VydmUtc2ltLWFjY2VudDojYTViNGZjOy0tc2VydmUtc2ltLXN1Y2Nlc3M6IzRhZGU4MDstLXNlcnZlLXNpbS1zdWNjZXNzLWVtZXJhbGQ6IzM0ZDM5OTstLXNlcnZlLXNpbS1kYW5nZXI6I2Y4NzE3MTstLXNlcnZlLXNpbS1kYW5nZXItc29mdDojZmNhNWE1Oy0tc2VydmUtc2ltLXdhcm5pbmc6I2ZiYmYyNDstLXNlcnZlLXNpbS13YXJuaW5nLXNvZnQ6I2ZjZDM0ZDstLXNlcnZlLXNpbS1jYXV0aW9uOiNlOWExM2I7LS1zZXJ2ZS1zaW0tb24tc3VjY2VzczojMDYyMDE4Oy0tc2VydmUtc2ltLWNvbnRyb2wtc2VsZWN0ZWQ6I2ZmZmZmZjI5Oy0tc2VydmUtc2ltLXJlc2l6ZS1vdXRsaW5lOiMzNDM2M2I7LS1zZXJ2ZS1zaW0tc3lzdGVtLWljb24tYm9yZGVyOiMzYjVmOTk7LS1zZXJ2ZS1zaW0tc3lzdGVtLWljb24tZnJvbTojMjUzYTVmOy0tc2VydmUtc2ltLXN5c3RlbS1pY29uLXRvOiMxNjIxMzI7LS1zZXJ2ZS1zaW0tc3lzdGVtLWljb24tZmc6I2M4ZDdmZjstLXNlcnZlLXNpbS1yZXNpemUtaWRsZTojNjg2ZTc4Oy0tc2VydmUtc2ltLWdyYWJiZXI6IzZlNmU3MjstLXNlcnZlLXNpbS1ncmFiYmVyLWFjdGl2ZTojOWE5YTllOy0tc2VydmUtc2ltLXJlc2l6ZS1ob3ZlcjojYjdiYmMyOy0tc2VydmUtc2ltLXJlc2l6ZS1kcmFnOiNmNGY2ZmE7LS1zZXJ2ZS1zaW0tbGl2ZS1pY29uOiMyMDJiM2E7LS1zZXJ2ZS1zaW0tbGl2ZS1pY29uLWFjdGl2ZTojMjYzNjRjOy0tc2VydmUtc2ltLWxpdmUtaWNvbi1mZzojZDJlN2ZmOy0tc2VydmUtc2ltLXNoYWRvdy1wYW5lbDowIDEycHggNDBweCAjMDAwMDAwOGM7LS1zZXJ2ZS1zaW0tc2hhZG93LXBvcG92ZXI6MCA4cHggMjRweCAjMDAwMDAwNzN9OnJvb3RbZGF0YS10aGVtZT1saWdodF17LS1idW5jc3MtbGlnaHQ6aW5pdGlhbDstLWJ1bmNzcy1kYXJrOiA7Y29sb3Itc2NoZW1lOmxpZ2h0Oy0tc2VydmUtc2ltLWluazojMDAwOy0tc2VydmUtc2ltLWluay1pbnZlcnNlOiNmZmY7LS1zZXJ2ZS1zaW0tdGV4dC1rOi43MjstLXNlcnZlLXNpbS1wYWdlOiNlY2VjZjA7LS1zZXJ2ZS1zaW0tcGFuZWw6I2ZmZjstLXNlcnZlLXNpbS1wYW5lbC1ob3ZlcjojZjJmMmY1Oy0tc2VydmUtc2ltLXBhbmVsLXRyYW5zcGFyZW50OiNmZmYwOy0tc2VydmUtc2ltLXBhbmVsLWJnOiNmNmY2ZjhlYjstLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc2x1Y2VudDojZjZmNmY4Y2M7LS1zZXJ2ZS1zaW0tcGFuZWwtYmctdHJhbnNwYXJlbnQ6I2Y2ZjZmODAwOy0tc2VydmUtc2ltLXBhbmVsLW92ZXJsYXk6I2ZmZmZmZmM3Oy0tc2VydmUtc2ltLXBhbmVsLWRlZXA6I2YyZjJmNTstLXNlcnZlLXNpbS1pY29uOiM2ZTZlNzM7LS1zZXJ2ZS1zaW0tdGludDojMDA3YWZmOy0tc2VydmUtc2ltLWFjY2VudDojNGY0NmU1Oy0tc2VydmUtc2ltLXN1Y2Nlc3M6IzE1ODAzZDstLXNlcnZlLXNpbS1zdWNjZXNzLWVtZXJhbGQ6IzA2NWY0NjstLXNlcnZlLXNpbS1kYW5nZXI6I2M4MWUxZTstLXNlcnZlLXNpbS1kYW5nZXItc29mdDojYjkxYzFjOy0tc2VydmUtc2ltLXdhcm5pbmc6I2I0NTMwOTstLXNlcnZlLXNpbS13YXJuaW5nLXNvZnQ6IzkyNDAwZTstLXNlcnZlLXNpbS1jYXV0aW9uOiNjMjQxMGM7LS1zZXJ2ZS1zaW0tb24tc3VjY2VzczojZmZmOy0tc2VydmUtc2ltLWNvbnRyb2wtc2VsZWN0ZWQ6I2ZmZjstLXNlcnZlLXNpbS1yZXNpemUtb3V0bGluZTojZmZmOy0tc2VydmUtc2ltLXN5c3RlbS1pY29uLWJvcmRlcjojYjljZmYwOy0tc2VydmUtc2ltLXN5c3RlbS1pY29uLWZyb206I2VhZjJmZjstLXNlcnZlLXNpbS1zeXN0ZW0taWNvbi10bzojZDZlNWZiOy0tc2VydmUtc2ltLXN5c3RlbS1pY29uLWZnOiMxZDRmOTk7LS1zZXJ2ZS1zaW0tcmVzaXplLWlkbGU6Izc2NzY3ZTstLXNlcnZlLXNpbS1ncmFiYmVyOiNhMWExYTY7LS1zZXJ2ZS1zaW0tZ3JhYmJlci1hY3RpdmU6IzZlNmU3MzstLXNlcnZlLXNpbS1yZXNpemUtaG92ZXI6IzVmNjA2ODstLXNlcnZlLXNpbS1yZXNpemUtZHJhZzojMmMyYzMwOy0tc2VydmUtc2ltLWxpdmUtaWNvbjojZTNlZWZjOy0tc2VydmUtc2ltLWxpdmUtaWNvbi1hY3RpdmU6I2QyZTRmYjstLXNlcnZlLXNpbS1saXZlLWljb24tZmc6IzBiNGY5ZTstLXNlcnZlLXNpbS1zaGFkb3ctcGFuZWw6MCAwIDAgLjVweCAjMDAwMDAwMGEsMCAxMnB4IDQwcHggIzAwMDAwMDFmOy0tc2VydmUtc2ltLXNoYWRvdy1wb3BvdmVyOjAgMCAwIC41cHggIzAwMDAwMDBhLDAgOHB4IDI0cHggIzAwMDAwMDI0fWh0bWx7YmFja2dyb3VuZDp2YXIoLS1zZXJ2ZS1zaW0tcGFnZSl9QHN1cHBvcnRzIChpbnRlcnBvbGF0ZS1zaXplOiBhbGxvdy1rZXl3b3Jkcyl7OnJvb3R7aW50ZXJwb2xhdGUtc2l6ZTphbGxvdy1rZXl3b3Jkc319ZGV0YWlscy5sZW0tc2VjdGlvbjo6ZGV0YWlscy1jb250ZW50e292ZXJmbG93OmNsaXA7dHJhbnNpdGlvbjpoZWlnaHQgLjIycyBlYXNlLGNvbnRlbnQtdmlzaWJpbGl0eSAuMjJzIGFsbG93LWRpc2NyZXRlO2hlaWdodDowfWRldGFpbHMubGVtLXNlY3Rpb25bb3Blbl06OmRldGFpbHMtY29udGVudHtoZWlnaHQ6YXV0b31kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnl7bGlzdC1zdHlsZTpub25lfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5OmhvdmVye2NvbG9yOnZhcigtLXNlcnZlLXNpbS1pbmspfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeTpob3ZlciAubGVtLWNoZXZyb257Y29sb3I6dmFyKC0tc2VydmUtc2ltLWluaykhaW1wb3J0YW50fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5OmhvdmVyIC5sZW0tY2hldnJvbntjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1zZXJ2ZS1zaW0taW5rKTg1JSx0cmFuc3BhcmVudCkhaW1wb3J0YW50fX0ubGVtLWNoZXZyb257dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjE2cyxjb2xvciAuMTJzfUBjb250YWluZXIgKHdpZHRoPD0yMTBweCl7W2RhdGEtbG9jYXRpb24tc3RhdHVzLXRvdGFsXXtkaXNwbGF5Om5vbmV9fUBrZXlmcmFtZXMgZ3JpZC1zcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZXswJXt0cmFuc2Zvcm06dHJhbnNsYXRlKC0xMDAlKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlKDI1MCUpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1wb3AtaW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEycHgpc2NhbGUoLjk2KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMClzY2FsZSgxKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtcG9wLW91dHswJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMClzY2FsZSgxKX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoOHB4KXNjYWxlKC45Nil9fS5zZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZXthbmltYXRpb246c2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGUgMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZX1bZGF0YS1zb25uZXItdG9hc3Rlcl0uc2VydmUtc2ltLXRvYXN0ZXIgW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXXtib3gtc2hhZG93OnZhcigtLXNlcnZlLXNpbS1zaGFkb3ctcG9wb3Zlcik7Z2FwOjhweDtwYWRkaW5nOjhweCAxMnB4O2ZvbnQtZmFtaWx5OnVpLW1vbm9zcGFjZSxTRk1vbm8tUmVndWxhcixNZW5sbyxtb25vc3BhY2U7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MS40fVtkYXRhLXNvbm5lci10b2FzdGVyXS5zZXJ2ZS1zaW0tdG9hc3RlciBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25de3dpZHRoOjZweDtoZWlnaHQ6NnB4O21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjB9W2RhdGEtc29ubmVyLXRvYXN0ZXJdLnNlcnZlLXNpbS10b2FzdGVyIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY29udGVudF17bWluLXdpZHRoOjB9W2RhdGEtc29ubmVyLXRvYXN0ZXJdLnNlcnZlLXNpbS10b2FzdGVyIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtdGl0bGVde292ZXJmbG93LXdyYXA6YnJlYWstd29yZDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fS5ncmlkLXNodXRkb3duLWJ0bntvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnMsYmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LmdyaWQtdGlsZTpob3ZlciAuZ3JpZC1zaHV0ZG93bi1idG57b3BhY2l0eToxfS5ncmlkLXNodXRkb3duLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKXtiYWNrZ3JvdW5kOnZhcigtLXNlcnZlLXNpbS1kYW5nZXIpO2NvbG9yOnZhcigtLXNlcnZlLXNpbS1pbmspO2JvcmRlci1jb2xvcjp2YXIoLS1zZXJ2ZS1zaW0tZGFuZ2VyKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ncmlkLXNodXRkb3duLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKXtiYWNrZ3JvdW5kOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLXNlcnZlLXNpbS1kYW5nZXIpMjIlLHRyYW5zcGFyZW50KX19LmdyaWQtdGlsZTpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tc2VydmUtc2ltLWluaykhaW1wb3J0YW50fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmdyaWQtdGlsZTpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tc2VydmUtc2ltLWluaykzMCUsdHJhbnNwYXJlbnQpIWltcG9ydGFudH19LmR1by1oYXJkd2FyZS1hbmNob3J7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDt0cmFuc2Zvcm0tb3JpZ2luOjAgMH0uZHVvLWhhcmR3YXJlLXJlZ2lvbntwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmZsZXg7Y3Vyc29yOmRlZmF1bHQ7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczogZmxleC1zdGFydDt3aWR0aDo2MHB4O2hlaWdodDo3OHB4O3RvcDotNjhweDtsZWZ0Oi0zMHB4fS5kdW8taGFyZHdhcmUtcmVnaW9uPmJ1dHRvbntvcGFjaXR5OjA7cG9pbnRlci1ldmVudHM6bm9uZX0uZHVvLWhhcmR3YXJlLXJlZ2lvbjpob3Zlcj5idXR0b24sLmR1by1oYXJkd2FyZS1yZWdpb246Zm9jdXMtd2l0aGluPmJ1dHRvbntvcGFjaXR5OjE7cG9pbnRlci1ldmVudHM6YXV0b31AbWVkaWEgKGhvdmVyOm5vbmUpey5kdW8taGFyZHdhcmUtcmVnaW9uPmJ1dHRvbntvcGFjaXR5OjE7cG9pbnRlci1ldmVudHM6YXV0b319QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7LmR1by1oYXJkd2FyZS1yZWdpb24+YnV0dG9ue3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9fUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcm90YXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJvcmRlci1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctbGVhZGluZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWZvbnQtd2VpZ2h0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctdHJhY2tpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1vcmRpbmFse3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2xhc2hlZC16ZXJve3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctbnVtZXJpYy1maWd1cmV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLXNwYWNpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLWZyYWN0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctcmluZy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJpbmctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXJpbmctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctcmluZy1pbnNldHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXdpZHRoe3N5bnRheDoiPGxlbmd0aD4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6I2ZmZn1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1vdXRsaW5lLXN0eWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTpzb2xpZH1AcHJvcGVydHkgLS10dy1ibHVye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYnJpZ2h0bmVzc3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWNvbnRyYXN0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZ3JheXNjYWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaHVlLXJvdGF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWludmVydHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW9wYWNpdHl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zYXR1cmF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNlcGlhe3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctc2l6ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1icmlnaHRuZXNze3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtY29udHJhc3R7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1ncmF5c2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1odWUtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtaW52ZXJ0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLXNhdHVyYXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atc2VwaWF7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kdXJhdGlvbntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWVhc2V7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1Aa2V5ZnJhbWVzIHNwaW57dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1AbGF5ZXIgcHJvcGVydGllc3tAc3VwcG9ydHMgKCgtd2Via2l0LWh5cGhlbnM6IG5vbmUpIGFuZCAoIG5vdCAobWFyZ2luLXRyaW06IGlubGluZSkpKSBvciAoKC1tb3otb3JpZW50OiBpbmxpbmUpIGFuZCAoIG5vdCAoY29sb3I6cmdiKGZyb20gcmVkIHIgZyBiKSkpKXsqLDpiZWZvcmUsOmFmdGVyLDo6YmFja2Ryb3B7LS10dy10cmFuc2xhdGUteDowOy0tdHctdHJhbnNsYXRlLXk6MDstLXR3LXRyYW5zbGF0ZS16OjA7LS10dy1yb3RhdGUteDppbml0aWFsOy0tdHctcm90YXRlLXk6aW5pdGlhbDstLXR3LXJvdGF0ZS16OmluaXRpYWw7LS10dy1za2V3LXg6aW5pdGlhbDstLXR3LXNrZXcteTppbml0aWFsOy0tdHctYm9yZGVyLXN0eWxlOnNvbGlkOy0tdHctbGVhZGluZzppbml0aWFsOy0tdHctZm9udC13ZWlnaHQ6aW5pdGlhbDstLXR3LXRyYWNraW5nOmluaXRpYWw7LS10dy1vcmRpbmFsOmluaXRpYWw7LS10dy1zbGFzaGVkLXplcm86aW5pdGlhbDstLXR3LW51bWVyaWMtZmlndXJlOmluaXRpYWw7LS10dy1udW1lcmljLXNwYWNpbmc6aW5pdGlhbDstLXR3LW51bWVyaWMtZnJhY3Rpb246aW5pdGlhbDstLXR3LXNoYWRvdzowIDAgIzAwMDA7LS10dy1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LXNoYWRvdy1hbHBoYToxMDAlOy0tdHctaW5zZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctaW5zZXQtc2hhZG93LWFscGhhOjEwMCU7LS10dy1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1pbnNldC1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1yaW5nLWluc2V0OmluaXRpYWw7LS10dy1yaW5nLW9mZnNldC13aWR0aDowcHg7LS10dy1yaW5nLW9mZnNldC1jb2xvcjojZmZmOy0tdHctcmluZy1vZmZzZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LW91dGxpbmUtc3R5bGU6c29saWQ7LS10dy1ibHVyOmluaXRpYWw7LS10dy1icmlnaHRuZXNzOmluaXRpYWw7LS10dy1jb250cmFzdDppbml0aWFsOy0tdHctZ3JheXNjYWxlOmluaXRpYWw7LS10dy1odWUtcm90YXRlOmluaXRpYWw7LS10dy1pbnZlcnQ6aW5pdGlhbDstLXR3LW9wYWNpdHk6aW5pdGlhbDstLXR3LXNhdHVyYXRlOmluaXRpYWw7LS10dy1zZXBpYTppbml0aWFsOy0tdHctZHJvcC1zaGFkb3c6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdy1hbHBoYToxMDAlOy0tdHctZHJvcC1zaGFkb3ctc2l6ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtYmx1cjppbml0aWFsOy0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzczppbml0aWFsOy0tdHctYmFja2Ryb3AtY29udHJhc3Q6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWdyYXlzY2FsZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaW52ZXJ0OmluaXRpYWw7LS10dy1iYWNrZHJvcC1vcGFjaXR5OmluaXRpYWw7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3Atc2VwaWE6aW5pdGlhbDstLXR3LWR1cmF0aW9uOmluaXRpYWw7LS10dy1lYXNlOmluaXRpYWx9fX0KPC9zdHlsZT4KPC9oZWFkPjxib2R5Pgo8ZGl2IGlkPSJyb290Ij48L2Rpdj4KPCEtLV9fU0lNX1BSRVZJRVdfQ09ORklHX18tLT4KPHNjcmlwdCB0eXBlPSJtb2R1bGUiPnZhciB4NSx0LGg4LG40LGgwLGo4LGY4LG04LEgzLE8yLHk1LHA4LE8zLGszLEMzLHU4LE0yPXt9LFcyPVtdLGE0PS9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2ksUjU9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBEMCgkLEope2Zvcih2YXIgUSBpbiBKKSRbUV09SltRXTtyZXR1cm4gJH1mdW5jdGlvbiBNMygkKXskJiYkLnBhcmVudE5vZGUmJiQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCgkKX1mdW5jdGlvbiBsMSgkLEosUSl7dmFyIFosSyxZLHE9e307Zm9yKFkgaW4gSilZPT0ia2V5Ij9aPUpbWV06WT09InJlZiI/Sz1KW1ldOnFbWV09SltZXTtpZihhcmd1bWVudHMubGVuZ3RoPjImJihxLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz94NS5jYWxsKGFyZ3VtZW50cywyKTpRKSx0eXBlb2YgJD09ImZ1bmN0aW9uIiYmJC5kZWZhdWx0UHJvcHMhPW51bGwpZm9yKFkgaW4gJC5kZWZhdWx0UHJvcHMpcVtZXT09PXZvaWQgMCYmKHFbWV09JC5kZWZhdWx0UHJvcHNbWV0pO3JldHVybiBTNSgkLHEsWixLLG51bGwpfWZ1bmN0aW9uIFM1KCQsSixRLFosSyl7dmFyIFk9e3R5cGU6JCxwcm9wczpKLGtleTpRLHJlZjpaLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjpLPT1udWxsPysraDg6SyxfX2k6LTEsX191OjB9O3JldHVybiBLPT1udWxsJiZ0LnZub2RlIT1udWxsJiZ0LnZub2RlKFkpLFl9ZnVuY3Rpb24gajUoKXtyZXR1cm57Y3VycmVudDpudWxsfX1mdW5jdGlvbiBLMSgkKXtyZXR1cm4gJC5jaGlsZHJlbn1mdW5jdGlvbiBuMSgkLEope3RoaXMucHJvcHM9JCx0aGlzLmNvbnRleHQ9Sn1mdW5jdGlvbiBxNSgkLEope2lmKEo9PW51bGwpcmV0dXJuICQuX18/cTUoJC5fXywkLl9faSsxKTpudWxsO2Zvcih2YXIgUTtKPCQuX19rLmxlbmd0aDtKKyspaWYoKFE9JC5fX2tbSl0pIT1udWxsJiZRLl9fZSE9bnVsbClyZXR1cm4gUS5fX2U7cmV0dXJuIHR5cGVvZiAkLnR5cGU9PSJmdW5jdGlvbiI/cTUoJCk6bnVsbH1mdW5jdGlvbiBzNCgkKXtpZigkLl9fUCYmJC5fX2Qpe3ZhciBKPSQuX192LFE9Si5fX2UsWj1bXSxLPVtdLFk9RDAoe30sSik7WS5fX3Y9Si5fX3YrMSx0LnZub2RlJiZ0LnZub2RlKFkpLFczKCQuX19QLFksSiwkLl9fbiwkLl9fUC5uYW1lc3BhY2VVUkksMzImSi5fX3U/W1FdOm51bGwsWixRPT1udWxsP3E1KEopOlEsISEoMzImSi5fX3UpLEspLFkuX192PUouX192LFkuX18uX19rW1kuX19pXT1ZLGk4KFosWSxLKSxKLl9fZT1KLl9fPW51bGwsWS5fX2UhPVEmJmw4KFkpfX1mdW5jdGlvbiBsOCgkKXtpZigoJD0kLl9fKSE9bnVsbCYmJC5fX2MhPW51bGwpcmV0dXJuICQuX19lPSQuX19jLmJhc2U9bnVsbCwkLl9fay5zb21lKGZ1bmN0aW9uKEope2lmKEohPW51bGwmJkouX19lIT1udWxsKXJldHVybiAkLl9fZT0kLl9fYy5iYXNlPUouX19lfSksbDgoJCl9ZnVuY3Rpb24gRjMoJCl7KCEkLl9fZCYmKCQuX19kPSEwKSYmaDAucHVzaCgkKSYmIVAyLl9fcisrfHxqOCE9dC5kZWJvdW5jZVJlbmRlcmluZykmJigoajg9dC5kZWJvdW5jZVJlbmRlcmluZyl8fGY4KShQMil9ZnVuY3Rpb24gUDIoKXt0cnl7Zm9yKHZhciAkLEo9MTtoMC5sZW5ndGg7KWgwLmxlbmd0aD5KJiZoMC5zb3J0KG04KSwkPWgwLnNoaWZ0KCksSj1oMC5sZW5ndGgsczQoJCl9ZmluYWxseXtoMC5sZW5ndGg9UDIuX19yPTB9fWZ1bmN0aW9uIGQ4KCQsSixRLFosSyxZLHEsVixHLEIsTil7dmFyIHosVSxILEYsTCxrLEMsTz1aJiZaLl9fa3x8VzIseT1KLmxlbmd0aDtmb3IoRz10NChRLEosTyxHLHkpLHo9MDt6PHk7eisrKShIPVEuX19rW3pdKSE9bnVsbCYmKFU9SC5fX2khPS0xJiZPW0guX19pXXx8TTIsSC5fX2k9eixrPVczKCQsSCxVLEssWSxxLFYsRyxCLE4pLEY9SC5fX2UsSC5yZWYmJlUucmVmIT1ILnJlZiYmKFUucmVmJiZQMyhVLnJlZixudWxsLEgpLE4ucHVzaChILnJlZixILl9fY3x8RixIKSksTD09bnVsbCYmRiE9bnVsbCYmKEw9RiksKEM9ISEoNCZILl9fdSkpfHxVLl9faz09PUguX19rPyhHPWM4KEgsRywkLEMpLEMmJlUuX19lJiYoVS5fX2U9bnVsbCkpOnR5cGVvZiBILnR5cGU9PSJmdW5jdGlvbiImJmshPT12b2lkIDA/Rz1rOkYmJihHPUYubmV4dFNpYmxpbmcpLEguX191Jj0tNyk7cmV0dXJuIFEuX19lPUwsR31mdW5jdGlvbiB0NCgkLEosUSxaLEspe3ZhciBZLHEsVixHLEIsTj1RLmxlbmd0aCx6PU4sVT0wO2ZvcigkLl9faz1BcnJheShLKSxZPTA7WTxLO1krKykocT1KW1ldKSE9bnVsbCYmdHlwZW9mIHEhPSJib29sZWFuIiYmdHlwZW9mIHEhPSJmdW5jdGlvbiI/KHR5cGVvZiBxPT0ic3RyaW5nInx8dHlwZW9mIHE9PSJudW1iZXIifHx0eXBlb2YgcT09ImJpZ2ludCJ8fHEuY29uc3RydWN0b3I9PVN0cmluZz9xPSQuX19rW1ldPVM1KG51bGwscSxudWxsLG51bGwsbnVsbCk6UjUocSk/cT0kLl9fa1tZXT1TNShLMSx7Y2hpbGRyZW46cX0sbnVsbCxudWxsLG51bGwpOnEuY29uc3RydWN0b3I9PT12b2lkIDAmJnEuX19iPjA/cT0kLl9fa1tZXT1TNShxLnR5cGUscS5wcm9wcyxxLmtleSxxLnJlZj9xLnJlZjpudWxsLHEuX192KTokLl9fa1tZXT1xLEc9WStVLHEuX189JCxxLl9fYj0kLl9fYisxLFY9bnVsbCwoQj1xLl9faT1lNChxLFEsRyx6KSkhPS0xJiYoei0tLChWPVFbQl0pJiYoVi5fX3V8PTIpKSxWPT1udWxsfHxWLl9fdj09bnVsbD8oQj09LTEmJihLPk4/VS0tOks8TiYmVSsrKSx0eXBlb2YgcS50eXBlIT0iZnVuY3Rpb24iJiYocS5fX3V8PTQpKTpCIT1HJiYoQj09Ry0xP1UtLTpCPT1HKzE/VSsrOihCPkc/VS0tOlUrKyxxLl9fdXw9NCkpKTokLl9fa1tZXT1udWxsO2lmKHopZm9yKFk9MDtZPE47WSsrKShWPVFbWV0pIT1udWxsJiYoMiZWLl9fdSk9PTAmJihWLl9fZT09WiYmKFo9cTUoVikpLHI4KFYsVikpO3JldHVybiBafWZ1bmN0aW9uIGM4KCQsSixRLFope3ZhciBLLFk7aWYodHlwZW9mICQudHlwZT09ImZ1bmN0aW9uIil7Zm9yKEs9JC5fX2ssWT0wO0smJlk8Sy5sZW5ndGg7WSsrKUtbWV0mJihLW1ldLl9fPSQsSj1jOChLW1ldLEosUSxaKSk7cmV0dXJuIEp9JC5fX2UhPUomJihaJiYoSiYmJC50eXBlJiYhSi5wYXJlbnROb2RlJiYoSj1xNSgkKSksUS5pbnNlcnRCZWZvcmUoJC5fX2UsSnx8bnVsbCkpLEo9JC5fX2UpO2RvIEo9SiYmSi5uZXh0U2libGluZzt3aGlsZShKIT1udWxsJiZKLm5vZGVUeXBlPT04KTtyZXR1cm4gSn1mdW5jdGlvbiBLMCgkLEope3JldHVybiBKPUp8fFtdLCQ9PW51bGx8fHR5cGVvZiAkPT0iYm9vbGVhbiJ8fChSNSgkKT8kLnNvbWUoZnVuY3Rpb24oUSl7SzAoUSxKKX0pOkoucHVzaCgkKSksSn1mdW5jdGlvbiBlNCgkLEosUSxaKXt2YXIgSyxZLHEsVj0kLmtleSxHPSQudHlwZSxCPUpbUV0sTj1CIT1udWxsJiYoMiZCLl9fdSk9PTA7aWYoQj09PW51bGwmJlY9PW51bGx8fE4mJlY9PUIua2V5JiZHPT1CLnR5cGUpcmV0dXJuIFE7aWYoWj4oTj8xOjApKXtmb3IoSz1RLTEsWT1RKzE7Sz49MHx8WTxKLmxlbmd0aDspaWYoKEI9SltxPUs+PTA/Sy0tOlkrK10pIT1udWxsJiYoMiZCLl9fdSk9PTAmJlY9PUIua2V5JiZHPT1CLnR5cGUpcmV0dXJuIHF9cmV0dXJuLTF9ZnVuY3Rpb24gdjgoJCxKLFEpe0pbMF09PSItIj8kLnNldFByb3BlcnR5KEosUT09bnVsbD8iIjpRKTokW0pdPVE9PW51bGw/IiI6dHlwZW9mIFEhPSJudW1iZXIifHxhNC50ZXN0KEopP1E6USsicHgifWZ1bmN0aW9uIEEyKCQsSixRLFosSyl7dmFyIFkscTskOmlmKEo9PSJzdHlsZSIpaWYodHlwZW9mIFE9PSJzdHJpbmciKSQuc3R5bGUuY3NzVGV4dD1RO2Vsc2V7aWYodHlwZW9mIFo9PSJzdHJpbmciJiYoJC5zdHlsZS5jc3NUZXh0PVo9IiIpLFopZm9yKEogaW4gWilRJiZKIGluIFF8fHY4KCQuc3R5bGUsSiwiIik7aWYoUSlmb3IoSiBpbiBRKVomJlFbSl09PVpbSl18fHY4KCQuc3R5bGUsSixRW0pdKX1lbHNlIGlmKEpbMF09PSJvIiYmSlsxXT09Im4iKVk9SiE9KEo9Si5yZXBsYWNlKHA4LCIkMSIpKSxxPUoudG9Mb3dlckNhc2UoKSxKPXEgaW4gJHx8Sj09Im9uRm9jdXNPdXQifHxKPT0ib25Gb2N1c0luIj9xLnNsaWNlKDIpOkouc2xpY2UoMiksJC5sfHwoJC5sPXt9KSwkLmxbSitZXT1RLFE/Wj9RW3k1XT1aW3k1XTooUVt5NV09TzMsJC5hZGRFdmVudExpc3RlbmVyKEosWT9DMzprMyxZKSk6JC5yZW1vdmVFdmVudExpc3RlbmVyKEosWT9DMzprMyxZKTtlbHNle2lmKEs9PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpSj1KLnJlcGxhY2UoL3hsaW5rKEh8OmgpLywiaCIpLnJlcGxhY2UoL3NOYW1lJC8sInMiKTtlbHNlIGlmKEohPSJ3aWR0aCImJkohPSJoZWlnaHQiJiZKIT0iaHJlZiImJkohPSJsaXN0IiYmSiE9ImZvcm0iJiZKIT0idGFiSW5kZXgiJiZKIT0iZG93bmxvYWQiJiZKIT0icm93U3BhbiImJkohPSJjb2xTcGFuIiYmSiE9InJvbGUiJiZKIT0icG9wb3ZlciImJkogaW4gJCl0cnl7JFtKXT1RPT1udWxsPyIiOlE7YnJlYWsgJH1jYXRjaChWKXt9dHlwZW9mIFE9PSJmdW5jdGlvbiJ8fChRPT1udWxsfHxRPT09ITEmJkpbNF0hPSItIj8kLnJlbW92ZUF0dHJpYnV0ZShKKTokLnNldEF0dHJpYnV0ZShKLEo9PSJwb3BvdmVyIiYmUT09MT8iIjpRKSl9fWZ1bmN0aW9uIGc4KCQpe3JldHVybiBmdW5jdGlvbihKKXtpZih0aGlzLmwpe3ZhciBRPXRoaXMubFtKLnR5cGUrJF07aWYoSltPMl09PW51bGwpSltPMl09TzMrKztlbHNlIGlmKEpbTzJdPFFbeTVdKXJldHVybjtyZXR1cm4gUSh0LmV2ZW50P3QuZXZlbnQoSik6Sil9fX1mdW5jdGlvbiBXMygkLEosUSxaLEssWSxxLFYsRyxCKXt2YXIgTix6LFUsSCxGLEwsayxDLE8seSxFLHcsUyxRMSxnLGg9Si50eXBlO2lmKEouY29uc3RydWN0b3IhPT12b2lkIDApcmV0dXJuIG51bGw7MTI4JlEuX191JiYoRz0hISgzMiZRLl9fdSksWT1bVj1KLl9fZT1RLl9fZV0pLChOPXQuX19iKSYmTihKKTskOmlmKHR5cGVvZiBoPT0iZnVuY3Rpb24iKXRyeXtpZihDPUoucHJvcHMsTz1oLnByb3RvdHlwZSYmaC5wcm90b3R5cGUucmVuZGVyLHk9KE49aC5jb250ZXh0VHlwZSkmJlpbTi5fX2NdLEU9Tj95P3kucHJvcHMudmFsdWU6Ti5fXzpaLFEuX19jP2s9KHo9Si5fX2M9US5fX2MpLl9fPXouX19FOihPP0ouX19jPXo9bmV3IGgoQyxFKTooSi5fX2M9ej1uZXcgbjEoQyxFKSx6LmNvbnN0cnVjdG9yPWgsei5yZW5kZXI9SiQpLHkmJnkuc3ViKHopLHouc3RhdGV8fCh6LnN0YXRlPXt9KSx6Ll9fbj1aLFU9ei5fX2Q9ITAsei5fX2g9W10sei5fc2I9W10pLE8mJnouX19zPT1udWxsJiYoei5fX3M9ei5zdGF0ZSksTyYmaC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMhPW51bGwmJih6Ll9fcz09ei5zdGF0ZSYmKHouX19zPUQwKHt9LHouX19zKSksRDAoei5fX3MsaC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoQyx6Ll9fcykpKSxIPXoucHJvcHMsRj16LnN0YXRlLHouX192PUosVSlPJiZoLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09bnVsbCYmei5jb21wb25lbnRXaWxsTW91bnQhPW51bGwmJnouY29tcG9uZW50V2lsbE1vdW50KCksTyYmei5jb21wb25lbnREaWRNb3VudCE9bnVsbCYmei5fX2gucHVzaCh6LmNvbXBvbmVudERpZE1vdW50KTtlbHNle2lmKE8mJmguZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT1udWxsJiZDIT09SCYmei5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT1udWxsJiZ6LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoQyxFKSxKLl9fdj09US5fX3Z8fCF6Ll9fZSYmei5zaG91bGRDb21wb25lbnRVcGRhdGUhPW51bGwmJnouc2hvdWxkQ29tcG9uZW50VXBkYXRlKEMsei5fX3MsRSk9PT0hMSl7Si5fX3YhPVEuX192JiYoei5wcm9wcz1DLHouc3RhdGU9ei5fX3Msei5fX2Q9ITEpLEouX19lPVEuX19lLEouX19rPVEuX19rLEouX19rLnNvbWUoZnVuY3Rpb24oSSl7SSYmKEkuX189Sil9KSxXMi5wdXNoLmFwcGx5KHouX19oLHouX3NiKSx6Ll9zYj1bXSx6Ll9faC5sZW5ndGgmJnEucHVzaCh6KTticmVhayAkfXouY29tcG9uZW50V2lsbFVwZGF0ZSE9bnVsbCYmei5jb21wb25lbnRXaWxsVXBkYXRlKEMsei5fX3MsRSksTyYmei5jb21wb25lbnREaWRVcGRhdGUhPW51bGwmJnouX19oLnB1c2goZnVuY3Rpb24oKXt6LmNvbXBvbmVudERpZFVwZGF0ZShILEYsTCl9KX1pZih6LmNvbnRleHQ9RSx6LnByb3BzPUMsei5fX1A9JCx6Ll9fZT0hMSx3PXQuX19yLFM9MCxPKXouc3RhdGU9ei5fX3Msei5fX2Q9ITEsdyYmdyhKKSxOPXoucmVuZGVyKHoucHJvcHMsei5zdGF0ZSx6LmNvbnRleHQpLFcyLnB1c2guYXBwbHkoei5fX2gsei5fc2IpLHouX3NiPVtdO2Vsc2UgZG8gei5fX2Q9ITEsdyYmdyhKKSxOPXoucmVuZGVyKHoucHJvcHMsei5zdGF0ZSx6LmNvbnRleHQpLHouc3RhdGU9ei5fX3M7d2hpbGUoei5fX2QmJisrUzwyNSk7ei5zdGF0ZT16Ll9fcyx6LmdldENoaWxkQ29udGV4dCE9bnVsbCYmKFo9RDAoRDAoe30sWiksei5nZXRDaGlsZENvbnRleHQoKSkpLE8mJiFVJiZ6LmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT1udWxsJiYoTD16LmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKEgsRikpLFExPU4hPW51bGwmJk4udHlwZT09PUsxJiZOLmtleT09bnVsbD9vOChOLnByb3BzLmNoaWxkcmVuKTpOLFY9ZDgoJCxSNShRMSk/UTE6W1ExXSxKLFEsWixLLFkscSxWLEcsQiksei5iYXNlPUouX19lLEouX191Jj0tMTYxLHouX19oLmxlbmd0aCYmcS5wdXNoKHopLGsmJih6Ll9fRT16Ll9fPW51bGwpfWNhdGNoKEkpe2lmKEouX192PW51bGwsR3x8WSE9bnVsbClpZihJLnRoZW4pe2ZvcihKLl9fdXw9Rz8xNjA6MTI4O1YmJlYubm9kZVR5cGU9PTgmJlYubmV4dFNpYmxpbmc7KVY9Vi5uZXh0U2libGluZztZW1kuaW5kZXhPZihWKV09bnVsbCxKLl9fZT1WfWVsc2V7Zm9yKGc9WS5sZW5ndGg7Zy0tOylNMyhZW2ddKTtBMyhKKX1lbHNlIEouX19lPVEuX19lLEouX19rPVEuX19rLEkudGhlbnx8QTMoSik7dC5fX2UoSSxKLFEpfWVsc2UgWT09bnVsbCYmSi5fX3Y9PVEuX192PyhKLl9faz1RLl9fayxKLl9fZT1RLl9fZSk6Vj1KLl9fZT0kJChRLl9fZSxKLFEsWixLLFkscSxHLEIpO3JldHVybihOPXQuZGlmZmVkKSYmTihKKSwxMjgmSi5fX3U/dm9pZCAwOlZ9ZnVuY3Rpb24gQTMoJCl7JCYmKCQuX19jJiYoJC5fX2MuX19lPSEwKSwkLl9fayYmJC5fX2suc29tZShBMykpfWZ1bmN0aW9uIGk4KCQsSixRKXtmb3IodmFyIFo9MDtaPFEubGVuZ3RoO1orKylQMyhRW1pdLFFbKytaXSxRWysrWl0pO3QuX19jJiZ0Ll9fYyhKLCQpLCQuc29tZShmdW5jdGlvbihLKXt0cnl7JD1LLl9faCxLLl9faD1bXSwkLnNvbWUoZnVuY3Rpb24oWSl7WS5jYWxsKEspfSl9Y2F0Y2goWSl7dC5fX2UoWSxLLl9fdil9fSl9ZnVuY3Rpb24gbzgoJCl7cmV0dXJuIHR5cGVvZiAkIT0ib2JqZWN0Inx8JD09bnVsbHx8JC5fX2I+MD8kOlI1KCQpPyQubWFwKG84KTpEMCh7fSwkKX1mdW5jdGlvbiAkJCgkLEosUSxaLEssWSxxLFYsRyl7dmFyIEIsTix6LFUsSCxGLEwsaz1RLnByb3BzfHxNMixDPUoucHJvcHMsTz1KLnR5cGU7aWYoTz09InN2ZyI/Sz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciOk89PSJtYXRoIj9LPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjpLfHwoSz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLFkhPW51bGwpe2ZvcihCPTA7QjxZLmxlbmd0aDtCKyspaWYoKEg9WVtCXSkmJiJzZXRBdHRyaWJ1dGUiaW4gSD09ISFPJiYoTz9ILmxvY2FsTmFtZT09TzpILm5vZGVUeXBlPT0zKSl7JD1ILFlbQl09bnVsbDticmVha319aWYoJD09bnVsbCl7aWYoTz09bnVsbClyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoQyk7JD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoSyxPLEMuaXMmJkMpLFYmJih0Ll9fbSYmdC5fX20oSixZKSxWPSExKSxZPW51bGx9aWYoTz09bnVsbClrPT09Q3x8ViYmJC5kYXRhPT1DfHwoJC5kYXRhPUMpO2Vsc2V7aWYoWT1ZJiZ4NS5jYWxsKCQuY2hpbGROb2RlcyksIVYmJlkhPW51bGwpZm9yKGs9e30sQj0wO0I8JC5hdHRyaWJ1dGVzLmxlbmd0aDtCKyspa1soSD0kLmF0dHJpYnV0ZXNbQl0pLm5hbWVdPUgudmFsdWU7Zm9yKEIgaW4gaylIPWtbQl0sQj09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj96PUg6Qj09ImNoaWxkcmVuInx8KEIgaW4gQyl8fEI9PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIEMpfHxCPT0iY2hlY2tlZCImJigiZGVmYXVsdENoZWNrZWQiaW4gQyl8fEEyKCQsQixudWxsLEgsSyk7Zm9yKEIgaW4gQylIPUNbQl0sQj09ImNoaWxkcmVuIj9VPUg6Qj09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj9OPUg6Qj09InZhbHVlIj9GPUg6Qj09ImNoZWNrZWQiP0w9SDpWJiZ0eXBlb2YgSCE9ImZ1bmN0aW9uInx8a1tCXT09PUh8fEEyKCQsQixILGtbQl0sSyk7aWYoTilWfHx6JiYoTi5fX2h0bWw9PXouX19odG1sfHxOLl9faHRtbD09JC5pbm5lckhUTUwpfHwoJC5pbm5lckhUTUw9Ti5fX2h0bWwpLEouX19rPVtdO2Vsc2UgaWYoeiYmKCQuaW5uZXJIVE1MPSIiKSxkOChKLnR5cGU9PSJ0ZW1wbGF0ZSI/JC5jb250ZW50OiQsUjUoVSk/VTpbVV0sSixRLFosTz09ImZvcmVpZ25PYmplY3QiPyJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjpLLFkscSxZP1lbMF06US5fX2smJnE1KFEsMCksVixHKSxZIT1udWxsKWZvcihCPVkubGVuZ3RoO0ItLTspTTMoWVtCXSk7Vnx8KEI9InZhbHVlIixPPT0icHJvZ3Jlc3MiJiZGPT1udWxsPyQucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpOkYhPW51bGwmJihGIT09JFtCXXx8Tz09InByb2dyZXNzIiYmIUZ8fE89PSJvcHRpb24iJiZGIT1rW0JdKSYmQTIoJCxCLEYsa1tCXSxLKSxCPSJjaGVja2VkIixMIT1udWxsJiZMIT0kW0JdJiZBMigkLEIsTCxrW0JdLEspKX1yZXR1cm4gJH1mdW5jdGlvbiBQMygkLEosUSl7dHJ5e2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iKXt2YXIgWj10eXBlb2YgJC5fX3U9PSJmdW5jdGlvbiI7WiYmJC5fX3UoKSxaJiZKPT1udWxsfHwoJC5fX3U9JChKKSl9ZWxzZSAkLmN1cnJlbnQ9Sn1jYXRjaChLKXt0Ll9fZShLLFEpfX1mdW5jdGlvbiByOCgkLEosUSl7dmFyIFosSztpZih0LnVubW91bnQmJnQudW5tb3VudCgkKSwoWj0kLnJlZikmJihaLmN1cnJlbnQmJlouY3VycmVudCE9JC5fX2V8fFAzKFosbnVsbCxKKSksKFo9JC5fX2MpIT1udWxsKXtpZihaLmNvbXBvbmVudFdpbGxVbm1vdW50KXRyeXtaLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2goWSl7dC5fX2UoWSxKKX1aLmJhc2U9Wi5fX1A9bnVsbH1pZihaPSQuX19rKWZvcihLPTA7SzxaLmxlbmd0aDtLKyspWltLXSYmcjgoWltLXSxKLFF8fHR5cGVvZiAkLnR5cGUhPSJmdW5jdGlvbiIpO1F8fE0zKCQuX19lKSwkLl9fYz0kLl9fPSQuX19lPXZvaWQgMH1mdW5jdGlvbiBKJCgkLEosUSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoJCxRKX1mdW5jdGlvbiBSMCgkLEosUSl7dmFyIFosSyxZLHE7Sj09ZG9jdW1lbnQmJihKPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCksdC5fXyYmdC5fXygkLEopLEs9KFo9dHlwZW9mIFE9PSJmdW5jdGlvbiIpP251bGw6USYmUS5fX2t8fEouX19rLFk9W10scT1bXSxXMyhKLCQ9KCFaJiZRfHxKKS5fX2s9bDEoSzEsbnVsbCxbJF0pLEt8fE0yLE0yLEoubmFtZXNwYWNlVVJJLCFaJiZRP1tRXTpLP251bGw6Si5maXJzdENoaWxkP3g1LmNhbGwoSi5jaGlsZE5vZGVzKTpudWxsLFksIVomJlE/UTpLP0suX19lOkouZmlyc3RDaGlsZCxaLHEpLGk4KFksJCxxKX1mdW5jdGlvbiBfMigkLEope1IwKCQsSixfMil9ZnVuY3Rpb24gXzMoJCxKLFEpe3ZhciBaLEssWSxxLFY9RDAoe30sJC5wcm9wcyk7Zm9yKFkgaW4gJC50eXBlJiYkLnR5cGUuZGVmYXVsdFByb3BzJiYocT0kLnR5cGUuZGVmYXVsdFByb3BzKSxKKVk9PSJrZXkiP1o9SltZXTpZPT0icmVmIj9LPUpbWV06VltZXT1KW1ldPT09dm9pZCAwJiZxIT1udWxsP3FbWV06SltZXTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4yJiYoVi5jaGlsZHJlbj1hcmd1bWVudHMubGVuZ3RoPjM/eDUuY2FsbChhcmd1bWVudHMsMik6USksUzUoJC50eXBlLFYsWnx8JC5rZXksS3x8JC5yZWYsbnVsbCl9ZnVuY3Rpb24gTTAoJCl7ZnVuY3Rpb24gSihRKXt2YXIgWixLO3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dHx8KFo9bmV3IFNldCwoSz17fSlbSi5fX2NdPXRoaXMsdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gS30sdGhpcy5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe1o9bnVsbH0sdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oWSl7dGhpcy5wcm9wcy52YWx1ZSE9WS52YWx1ZSYmWi5mb3JFYWNoKGZ1bmN0aW9uKHEpe3EuX19lPSEwLEYzKHEpfSl9LHRoaXMuc3ViPWZ1bmN0aW9uKFkpe1ouYWRkKFkpO3ZhciBxPVkuY29tcG9uZW50V2lsbFVubW91bnQ7WS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe1omJlouZGVsZXRlKFkpLHEmJnEuY2FsbChZKX19KSxRLmNoaWxkcmVufXJldHVybiBKLl9fYz0iX19jQyIrdTgrKyxKLl9fPSQsSi5Qcm92aWRlcj1KLl9fbD0oSi5Db25zdW1lcj1mdW5jdGlvbihRLFope3JldHVybiBRLmNoaWxkcmVuKFopfSkuY29udGV4dFR5cGU9SixKfXg1PVcyLnNsaWNlLHQ9e19fZTpmdW5jdGlvbigkLEosUSxaKXtmb3IodmFyIEssWSxxO0o9Si5fXzspaWYoKEs9Si5fX2MpJiYhSy5fXyl0cnl7aWYoKFk9Sy5jb25zdHJ1Y3RvcikmJlkuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIT1udWxsJiYoSy5zZXRTdGF0ZShZLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigkKSkscT1LLl9fZCksSy5jb21wb25lbnREaWRDYXRjaCE9bnVsbCYmKEsuY29tcG9uZW50RGlkQ2F0Y2goJCxafHx7fSkscT1LLl9fZCkscSlyZXR1cm4gSy5fX0U9S31jYXRjaChWKXskPVZ9dGhyb3cgJH19LGg4PTAsbjQ9ZnVuY3Rpb24oJCl7cmV0dXJuICQhPW51bGwmJiQuY29uc3RydWN0b3I9PT12b2lkIDB9LG4xLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbigkLEope3ZhciBRO1E9dGhpcy5fX3MhPW51bGwmJnRoaXMuX19zIT10aGlzLnN0YXRlP3RoaXMuX19zOnRoaXMuX19zPUQwKHt9LHRoaXMuc3RhdGUpLHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYoJD0kKEQwKHt9LFEpLHRoaXMucHJvcHMpKSwkJiZEMChRLCQpLCQhPW51bGwmJnRoaXMuX192JiYoSiYmdGhpcy5fc2IucHVzaChKKSxGMyh0aGlzKSl9LG4xLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbigkKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLCQmJnRoaXMuX19oLnB1c2goJCksRjModGhpcykpfSxuMS5wcm90b3R5cGUucmVuZGVyPUsxLGgwPVtdLGY4PXR5cGVvZiBQcm9taXNlPT0iZnVuY3Rpb24iP1Byb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSk6c2V0VGltZW91dCxtOD1mdW5jdGlvbigkLEope3JldHVybiAkLl9fdi5fX2ItSi5fX3YuX19ifSxQMi5fX3I9MCxIMz1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDgpLE8yPSJfX2QiK0gzLHk1PSJfX2EiK0gzLHA4PS8oUG9pbnRlckNhcHR1cmUpJHxDYXB0dXJlJC9pLE8zPTAsazM9ZzgoITEpLEMzPWc4KCEwKSx1OD0wO3ZhciBmMCx5MSxEMyxuOCxWNT0wLFo5PVtdLHYxPXQsYTg9djEuX19iLHM4PXYxLl9fcix0OD12MS5kaWZmZWQsZTg9djEuX19jLCQ5PXYxLnVubW91bnQsSjk9djEuX187ZnVuY3Rpb24gRzUoJCxKKXt2MS5fX2gmJnYxLl9faCh5MSwkLFY1fHxKKSxWNT0wO3ZhciBRPXkxLl9fSHx8KHkxLl9fSD17X186W10sX19oOltdfSk7cmV0dXJuICQ+PVEuX18ubGVuZ3RoJiZRLl9fLnB1c2goe30pLFEuX19bJF19ZnVuY3Rpb24gQSgkKXtyZXR1cm4gVjU9MSxuMChYOSwkKX1mdW5jdGlvbiBuMCgkLEosUSl7dmFyIFo9RzUoZjArKywyKTtpZihaLnQ9JCwhWi5fX2MmJihaLl9fPVtRP1EoSik6WDkodm9pZCAwLEopLGZ1bmN0aW9uKFYpe3ZhciBHPVouX19OP1ouX19OWzBdOlouX19bMF0sQj1aLnQoRyxWKTtHIT09QiYmKFouX19OPVtCLFouX19bMV1dLFouX19jLnNldFN0YXRlKHt9KSl9XSxaLl9fYz15MSwheTEuX19mKSl7dmFyIEs9ZnVuY3Rpb24oVixHLEIpe2lmKCFaLl9fYy5fX0gpcmV0dXJuITA7dmFyIE49Wi5fX2MuX19ILl9fLmZpbHRlcihmdW5jdGlvbihVKXtyZXR1cm4gVS5fX2N9KTtpZihOLmV2ZXJ5KGZ1bmN0aW9uKFUpe3JldHVybiFVLl9fTn0pKXJldHVybiFZfHxZLmNhbGwodGhpcyxWLEcsQik7dmFyIHo9Wi5fX2MucHJvcHMhPT1WO3JldHVybiBOLnNvbWUoZnVuY3Rpb24oVSl7aWYoVS5fX04pe3ZhciBIPVUuX19bMF07VS5fXz1VLl9fTixVLl9fTj12b2lkIDAsSCE9PVUuX19bMF0mJih6PSEwKX19KSxZJiZZLmNhbGwodGhpcyxWLEcsQil8fHp9O3kxLl9fZj0hMDt2YXJ7c2hvdWxkQ29tcG9uZW50VXBkYXRlOlksY29tcG9uZW50V2lsbFVwZGF0ZTpxfT15MTt5MS5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKFYsRyxCKXtpZih0aGlzLl9fZSl7dmFyIE49WTtZPXZvaWQgMCxLKFYsRyxCKSxZPU59cSYmcS5jYWxsKHRoaXMsVixHLEIpfSx5MS5zaG91bGRDb21wb25lbnRVcGRhdGU9S31yZXR1cm4gWi5fX058fFouX199ZnVuY3Rpb24gXygkLEope3ZhciBRPUc1KGYwKyssMyk7IXYxLl9fcyYmSTMoUS5fX0gsSikmJihRLl9fPSQsUS51PUoseTEuX19ILl9faC5wdXNoKFEpKX1mdW5jdGlvbiBUMCgkLEope3ZhciBRPUc1KGYwKyssNCk7IXYxLl9fcyYmSTMoUS5fX0gsSikmJihRLl9fPSQsUS51PUoseTEuX19oLnB1c2goUSkpfWZ1bmN0aW9uIFQoJCl7cmV0dXJuIFY1PTUsUjEoZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDokfX0sW10pfWZ1bmN0aW9uIFQyKCQsSixRKXtWNT02LFQwKGZ1bmN0aW9uKCl7aWYodHlwZW9mICQ9PSJmdW5jdGlvbiIpe3ZhciBaPSQoSigpKTtyZXR1cm4gZnVuY3Rpb24oKXskKG51bGwpLFomJnR5cGVvZiBaPT0iZnVuY3Rpb24iJiZaKCl9fWlmKCQpcmV0dXJuICQuY3VycmVudD1KKCksZnVuY3Rpb24oKXtyZXR1cm4gJC5jdXJyZW50PW51bGx9fSxRPT1udWxsP1E6US5jb25jYXQoJCkpfWZ1bmN0aW9uIFIxKCQsSil7dmFyIFE9RzUoZjArKyw3KTtyZXR1cm4gSTMoUS5fX0gsSikmJihRLl9fPSQoKSxRLl9fSD1KLFEuX19oPSQpLFEuX199ZnVuY3Rpb24gUCgkLEope3JldHVybiBWNT04LFIxKGZ1bmN0aW9uKCl7cmV0dXJuICR9LEopfWZ1bmN0aW9uIFcwKCQpe3ZhciBKPXkxLmNvbnRleHRbJC5fX2NdLFE9RzUoZjArKyw5KTtyZXR1cm4gUS5jPSQsSj8oUS5fXz09bnVsbCYmKFEuX189ITAsSi5zdWIoeTEpKSxKLnByb3BzLnZhbHVlKTokLl9ffWZ1bmN0aW9uIEkyKCQsSil7djEudXNlRGVidWdWYWx1ZSYmdjEudXNlRGVidWdWYWx1ZShKP0ooJCk6JCl9ZnVuY3Rpb24gQjUoKXt2YXIgJD1HNShmMCsrLDExKTtpZighJC5fXyl7Zm9yKHZhciBKPXkxLl9fdjtKIT09bnVsbCYmIUouX19tJiZKLl9fIT09bnVsbDspSj1KLl9fO3ZhciBRPUouX19tfHwoSi5fX209WzAsMF0pOyQuX189IlAiK1FbMF0rIi0iK1FbMV0rK31yZXR1cm4gJC5fX31mdW5jdGlvbiBRJCgpe2Zvcih2YXIgJDskPVo5LnNoaWZ0KCk7KXt2YXIgSj0kLl9fSDtpZigkLl9fUCYmSil0cnl7Si5fX2guc29tZShEMiksSi5fX2guc29tZShUMyksSi5fX2g9W119Y2F0Y2goUSl7Si5fX2g9W10sdjEuX19lKFEsJC5fX3YpfX19djEuX19iPWZ1bmN0aW9uKCQpe3kxPW51bGwsYTgmJmE4KCQpfSx2MS5fXz1mdW5jdGlvbigkLEopeyQmJkouX19rJiZKLl9fay5fX20mJigkLl9fbT1KLl9fay5fX20pLEo5JiZKOSgkLEopfSx2MS5fX3I9ZnVuY3Rpb24oJCl7czgmJnM4KCQpLGYwPTA7dmFyIEo9KHkxPSQuX19jKS5fX0g7SiYmKEQzPT09eTE/KEouX19oPVtdLHkxLl9faD1bXSxKLl9fLnNvbWUoZnVuY3Rpb24oUSl7US5fX04mJihRLl9fPVEuX19OKSxRLnU9US5fX049dm9pZCAwfSkpOihKLl9faC5zb21lKEQyKSxKLl9faC5zb21lKFQzKSxKLl9faD1bXSxmMD0wKSksRDM9eTF9LHYxLmRpZmZlZD1mdW5jdGlvbigkKXt0OCYmdDgoJCk7dmFyIEo9JC5fX2M7SiYmSi5fX0gmJihKLl9fSC5fX2gubGVuZ3RoJiYoWjkucHVzaChKKSE9PTEmJm44PT09djEucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHwoKG44PXYxLnJlcXVlc3RBbmltYXRpb25GcmFtZSl8fFokKShRJCkpLEouX19ILl9fLnNvbWUoZnVuY3Rpb24oUSl7US51JiYoUS5fX0g9US51KSxRLnU9dm9pZCAwfSkpLEQzPXkxPW51bGx9LHYxLl9fYz1mdW5jdGlvbigkLEope0ouc29tZShmdW5jdGlvbihRKXt0cnl7US5fX2guc29tZShEMiksUS5fX2g9US5fX2guZmlsdGVyKGZ1bmN0aW9uKFope3JldHVybiFaLl9ffHxUMyhaKX0pfWNhdGNoKFope0ouc29tZShmdW5jdGlvbihLKXtLLl9faCYmKEsuX19oPVtdKX0pLEo9W10sdjEuX19lKFosUS5fX3YpfX0pLGU4JiZlOCgkLEopfSx2MS51bm1vdW50PWZ1bmN0aW9uKCQpeyQ5JiYkOSgkKTt2YXIgSixRPSQuX19jO1EmJlEuX19IJiYoUS5fX0guX18uc29tZShmdW5jdGlvbihaKXt0cnl7RDIoWil9Y2F0Y2goSyl7Sj1LfX0pLFEuX19IPXZvaWQgMCxKJiZ2MS5fX2UoSixRLl9fdikpfTt2YXIgUTk9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT09ImZ1bmN0aW9uIjtmdW5jdGlvbiBaJCgkKXt2YXIgSixRPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KFopLFE5JiZjYW5jZWxBbmltYXRpb25GcmFtZShKKSxzZXRUaW1lb3V0KCQpfSxaPXNldFRpbWVvdXQoUSwzNSk7UTkmJihKPXJlcXVlc3RBbmltYXRpb25GcmFtZShRKSl9ZnVuY3Rpb24gRDIoJCl7dmFyIEo9eTEsUT0kLl9fYzt0eXBlb2YgUT09ImZ1bmN0aW9uIiYmKCQuX19jPXZvaWQgMCxRKCkpLHkxPUp9ZnVuY3Rpb24gVDMoJCl7dmFyIEo9eTE7JC5fX2M9JC5fXygpLHkxPUp9ZnVuY3Rpb24gSTMoJCxKKXtyZXR1cm4hJHx8JC5sZW5ndGghPT1KLmxlbmd0aHx8Si5zb21lKGZ1bmN0aW9uKFEsWil7cmV0dXJuIFEhPT0kW1pdfSl9ZnVuY3Rpb24gWDkoJCxKKXtyZXR1cm4gdHlwZW9mIEo9PSJmdW5jdGlvbiI/SigkKTpKfWZ1bmN0aW9uIFU5KCQsSil7Zm9yKHZhciBRIGluIEopJFtRXT1KW1FdO3JldHVybiAkfWZ1bmN0aW9uIHczKCQsSil7Zm9yKHZhciBRIGluICQpaWYoUSE9PSJfX3NvdXJjZSImJiEoUSBpbiBKKSlyZXR1cm4hMDtmb3IodmFyIFogaW4gSilpZihaIT09Il9fc291cmNlIiYmJFtaXSE9PUpbWl0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gdzIoJCxKKXt2YXIgUT1KKCksWj1BKHt0OntfXzpRLHU6Sn19KSxLPVpbMF0udCxZPVpbMV07cmV0dXJuIFQwKGZ1bmN0aW9uKCl7Sy5fXz1RLEsudT1KLEUzKEspJiZZKHt0Okt9KX0sWyQsUSxKXSksXyhmdW5jdGlvbigpe3JldHVybiBFMyhLKSYmWSh7dDpLfSksJChmdW5jdGlvbigpe0UzKEspJiZZKHt0Okt9KX0pfSxbJF0pLFF9ZnVuY3Rpb24gRTMoJCl7dHJ5e3JldHVybiEoKEo9JC5fXyk9PT0oUT0kLnUoKSkmJihKIT09MHx8MS9KPT0xL1EpfHxKIT1KJiZRIT1RKX1jYXRjaChaKXtyZXR1cm4hMH12YXIgSixRfWZ1bmN0aW9uIEw5KCQpeyQoKX1mdW5jdGlvbiBIOSgkKXtyZXR1cm4gJH1mdW5jdGlvbiBrOSgpe3JldHVyblshMSxMOV19dmFyIEM5PVQwO2Z1bmN0aW9uIGIzKCQsSil7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1KfWZ1bmN0aW9uIGEwKCQsSil7ZnVuY3Rpb24gUShLKXt2YXIgWT10aGlzLnByb3BzLnJlZjtyZXR1cm4gWSE9Sy5yZWYmJlkmJih0eXBlb2YgWT09ImZ1bmN0aW9uIj9ZKG51bGwpOlkuY3VycmVudD1udWxsKSxKPyFKKHRoaXMucHJvcHMsSyl8fFkhPUsucmVmOnczKHRoaXMucHJvcHMsSyl9ZnVuY3Rpb24gWihLKXtyZXR1cm4gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9USxsMSgkLEspfXJldHVybiBaLmRpc3BsYXlOYW1lPSJNZW1vKCIrKCQuZGlzcGxheU5hbWV8fCQubmFtZSkrIikiLFouX19mPVoucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWi50eXBlPSQsWn0oYjMucHJvdG90eXBlPW5ldyBuMSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsYjMucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbigkLEope3JldHVybiB3Myh0aGlzLnByb3BzLCQpfHx3Myh0aGlzLnN0YXRlLEopfTt2YXIgSzk9dC5fX2I7dC5fX2I9ZnVuY3Rpb24oJCl7JC50eXBlJiYkLnR5cGUuX19mJiYkLnJlZiYmKCQucHJvcHMucmVmPSQucmVmLCQucmVmPW51bGwpLEs5JiZLOSgkKX07dmFyIFgkPXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpfHwzOTExO2Z1bmN0aW9uIF8wKCQpe2Z1bmN0aW9uIEooUSl7dmFyIFo9VTkoe30sUSk7cmV0dXJuIGRlbGV0ZSBaLnJlZiwkKFosUS5yZWZ8fG51bGwpfXJldHVybiBKLiQkdHlwZW9mPVgkLEoucmVuZGVyPSQsSi5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD1KLl9fZj0hMCxKLmRpc3BsYXlOYW1lPSJGb3J3YXJkUmVmKCIrKCQuZGlzcGxheU5hbWV8fCQubmFtZSkrIikiLEp9dmFyIFk5PWZ1bmN0aW9uKCQsSil7cmV0dXJuICQ9PW51bGw/bnVsbDpLMChLMCgkKS5tYXAoSikpfSxLJD17bWFwOlk5LGZvckVhY2g6WTksY291bnQ6ZnVuY3Rpb24oJCl7cmV0dXJuICQ/SzAoJCkubGVuZ3RoOjB9LG9ubHk6ZnVuY3Rpb24oJCl7dmFyIEo9SzAoJCk7aWYoSi5sZW5ndGghPT0xKXRocm93IkNoaWxkcmVuLm9ubHkiO3JldHVybiBKWzBdfSx0b0FycmF5OkswfSxZJD10Ll9fZTt0Ll9fZT1mdW5jdGlvbigkLEosUSxaKXtpZigkLnRoZW4pe2Zvcih2YXIgSyxZPUo7WT1ZLl9fOylpZigoSz1ZLl9fYykmJksuX19jKXJldHVybiBKLl9fZT09bnVsbCYmKEouX19lPVEuX19lLEouX19rPVEuX19rKSxLLl9fYygkLEopfVkkKCQsSixRLFopfTt2YXIgcTk9dC51bm1vdW50O2Z1bmN0aW9uIEY5KCQsSixRKXtyZXR1cm4gJCYmKCQuX19jJiYkLl9fYy5fX0gmJigkLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihaKXt0eXBlb2YgWi5fX2M9PSJmdW5jdGlvbiImJlouX19jKCl9KSwkLl9fYy5fX0g9bnVsbCksKCQ9VTkoe30sJCkpLl9fYyE9bnVsbCYmKCQuX19jLl9fUD09PVEmJigkLl9fYy5fX1A9SiksJC5fX2MuX19lPSEwLCQuX19jPW51bGwpLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWil7cmV0dXJuIEY5KFosSixRKX0pKSwkfWZ1bmN0aW9uIEE5KCQsSixRKXtyZXR1cm4gJCYmUSYmKCQuX192PW51bGwsJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gQTkoWixKLFEpfSksJC5fX2MmJiQuX19jLl9fUD09PUomJigkLl9fZSYmUS5hcHBlbmRDaGlsZCgkLl9fZSksJC5fX2MuX19lPSEwLCQuX19jLl9fUD1RKSksJH1mdW5jdGlvbiBFMigpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBPOSgkKXt2YXIgSj0kLl9fJiYkLl9fLl9fYztyZXR1cm4gSiYmSi5fX2EmJkouX19hKCQpfWZ1bmN0aW9uIHEkKCQpe3ZhciBKLFEsWixLPW51bGw7ZnVuY3Rpb24gWShxKXtpZihKfHwoSj0kKCkpLnRoZW4oZnVuY3Rpb24oVil7ViYmKEs9Vi5kZWZhdWx0fHxWKSxaPSEwfSxmdW5jdGlvbihWKXtRPVYsWj0hMH0pLFEpdGhyb3cgUTtpZighWil0aHJvdyBKO3JldHVybiBLP2wxKEsscSk6bnVsbH1yZXR1cm4gWS5kaXNwbGF5TmFtZT0iTGF6eSIsWS5fX2Y9ITAsWX1mdW5jdGlvbiB2NSgpe3RoaXMuaT1udWxsLHRoaXMubD1udWxsfXQudW5tb3VudD1mdW5jdGlvbigkKXt2YXIgSj0kLl9fYztKJiYoSi5fX3o9ITApLEomJkouX19SJiZKLl9fUigpLEomJjMyJiQuX191JiYoJC50eXBlPW51bGwpLHE5JiZxOSgkKX0sKEUyLnByb3RvdHlwZT1uZXcgbjEpLl9fYz1mdW5jdGlvbigkLEope3ZhciBRPUouX19jLFo9dGhpcztaLm89PW51bGwmJihaLm89W10pLFouby5wdXNoKFEpO3ZhciBLPU85KFouX192KSxZPSExLHE9ZnVuY3Rpb24oKXtZfHxaLl9fenx8KFk9ITAsUS5fX1I9bnVsbCxLP0soRyk6RygpKX07US5fX1I9cTt2YXIgVj1RLl9fUDtRLl9fUD1udWxsO3ZhciBHPWZ1bmN0aW9uKCl7aWYoIS0tWi5fX3Upe2lmKFouc3RhdGUuX19hKXt2YXIgQj1aLnN0YXRlLl9fYTtaLl9fdi5fX2tbMF09QTkoQixCLl9fYy5fX1AsQi5fX2MuX19PKX12YXIgTjtmb3IoWi5zZXRTdGF0ZSh7X19hOlouX19iPW51bGx9KTtOPVouby5wb3AoKTspTi5fX1A9VixOLmZvcmNlVXBkYXRlKCl9fTtaLl9fdSsrfHwzMiZKLl9fdXx8Wi5zZXRTdGF0ZSh7X19hOlouX19iPVouX192Ll9fa1swXX0pLCQudGhlbihxLHEpfSxFMi5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LEUyLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCxKKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgUT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxaPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPUY5KHRoaXMuX19iLFEsWi5fX089Wi5fX1ApfXRoaXMuX19iPW51bGx9dmFyIEs9Si5fX2EmJmwxKEsxLG51bGwsJC5mYWxsYmFjayk7cmV0dXJuIEsmJihLLl9fdSY9LTMzKSxbbDEoSzEsbnVsbCxKLl9fYT9udWxsOiQuY2hpbGRyZW4pLEtdfTt2YXIgVjk9ZnVuY3Rpb24oJCxKLFEpe2lmKCsrUVsxXT09PVFbMF0mJiQubC5kZWxldGUoSiksJC5wcm9wcy5yZXZlYWxPcmRlciYmKCQucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCEkLmwuc2l6ZSkpZm9yKFE9JC5pO1E7KXtmb3IoO1EubGVuZ3RoPjM7KVEucG9wKCkoKTtpZihRWzFdPFFbMF0pYnJlYWs7JC5pPVE9UVsyXX19O2Z1bmN0aW9uIFYkKCQpe3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiAkLmNvbnRleHR9LCQuY2hpbGRyZW59ZnVuY3Rpb24gRyQoJCl7dmFyIEo9dGhpcyxRPSQuaDtpZihKLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7UjAobnVsbCxKLnYpLEoudj1udWxsLEouaD1udWxsfSxKLmgmJkouaCE9PVEmJkouY29tcG9uZW50V2lsbFVubW91bnQoKSwhSi52KXtmb3IodmFyIFo9Si5fX3Y7WiE9PW51bGwmJiFaLl9fbSYmWi5fXyE9PW51bGw7KVo9Wi5fXztKLmg9USxKLnY9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpRLGNoaWxkTm9kZXM6W10sX19rOntfX206Wi5fX219LGNvbnRhaW5zOmZ1bmN0aW9uKCl7cmV0dXJuITB9LG5hbWVzcGFjZVVSSTpRLm5hbWVzcGFjZVVSSSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oSyxZKXt0aGlzLmNoaWxkTm9kZXMucHVzaChLKSxKLmguaW5zZXJ0QmVmb3JlKEssWSl9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKEspe3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoSyk+Pj4xLDEpLEouaC5yZW1vdmVDaGlsZChLKX19fVIwKGwxKFYkLHtjb250ZXh0OkouY29udGV4dH0sJC5fX3YpLEoudil9ZnVuY3Rpb24geTMoJCxKKXt2YXIgUT1sMShHJCx7X192OiQsaDpKfSk7cmV0dXJuIFEuY29udGFpbmVySW5mbz1KLFF9KHY1LnByb3RvdHlwZT1uZXcgbjEpLl9fYT1mdW5jdGlvbigkKXt2YXIgSj10aGlzLFE9TzkoSi5fX3YpLFo9Si5sLmdldCgkKTtyZXR1cm4gWlswXSsrLGZ1bmN0aW9uKEspe3ZhciBZPWZ1bmN0aW9uKCl7Si5wcm9wcy5yZXZlYWxPcmRlcj8oWi5wdXNoKEspLFY5KEosJCxaKSk6SygpfTtRP1EoWSk6WSgpfX0sdjUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgSj1LMCgkLmNoaWxkcmVuKTskLnJldmVhbE9yZGVyJiYkLnJldmVhbE9yZGVyWzBdPT09ImIiJiZKLnJldmVyc2UoKTtmb3IodmFyIFE9Si5sZW5ndGg7US0tOyl0aGlzLmwuc2V0KEpbUV0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuICQuY2hpbGRyZW59LHY1LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9djUucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyICQ9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbihKLFEpe1Y5KCQsUSxKKX0pfTt2YXIgTTk9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsQiQ9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLHokPS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sTiQ9L1tBLVowLTldL2csVSQ9dHlwZW9mIGRvY3VtZW50PCJ1IixMJD1mdW5jdGlvbigkKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoJCl9O2Z1bmN0aW9uIEgkKCQsSixRKXtyZXR1cm4gSi5fX2s9PW51bGwmJihKLnRleHRDb250ZW50PSIiKSxSMCgkLEopLHR5cGVvZiBRPT0iZnVuY3Rpb24iJiZRKCksJD8kLl9fYzpudWxsfWZ1bmN0aW9uIGskKCQsSixRKXtyZXR1cm4gXzIoJCxKKSx0eXBlb2YgUT09ImZ1bmN0aW9uIiYmUSgpLCQ/JC5fX2M6bnVsbH1uMS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJjb21wb25lbnRXaWxsVXBkYXRlIl0uZm9yRWFjaChmdW5jdGlvbigkKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobjEucHJvdG90eXBlLCQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1siVU5TQUZFXyIrJF19LHNldDpmdW5jdGlvbihKKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywkLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Sn0pfX0pfSk7dmFyIEc5PXQuZXZlbnQ7dC5ldmVudD1mdW5jdGlvbigkKXtyZXR1cm4gRzkmJigkPUc5KCQpKSwkLnBlcnNpc3Q9ZnVuY3Rpb24oKXt9LCQuaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9LCQuaXNEZWZhdWx0UHJldmVudGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH0sJC5uYXRpdmVFdmVudD0kfTt2YXIgUzMsQyQ9e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LEI5PXQudm5vZGU7dC52bm9kZT1mdW5jdGlvbigkKXt0eXBlb2YgJC50eXBlPT0ic3RyaW5nIiYmZnVuY3Rpb24oSil7dmFye3Byb3BzOlEsdHlwZTpafT1KLEs9e30sWT1aLmluZGV4T2YoIi0iKT09LTE7Zm9yKHZhciBxIGluIFEpe3ZhciBWPVFbcV07aWYoIShxPT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gUSkmJlY9PW51bGx8fFUkJiZxPT09ImNoaWxkcmVuIiYmWj09PSJub3NjcmlwdCJ8fHE9PT0iY2xhc3MifHxxPT09ImNsYXNzTmFtZSIpKXt2YXIgRz1xLnRvTG93ZXJDYXNlKCk7cT09PSJkZWZhdWx0VmFsdWUiJiYidmFsdWUiaW4gUSYmUS52YWx1ZT09bnVsbD9xPSJ2YWx1ZSI6cT09PSJkb3dubG9hZCImJlY9PT0hMD9WPSIiOkc9PT0idHJhbnNsYXRlIiYmVj09PSJubyI/Vj0hMTpHWzBdPT09Im8iJiZHWzFdPT09Im4iP0c9PT0ib25kb3VibGVjbGljayI/cT0ib25kYmxjbGljayI6RyE9PSJvbmNoYW5nZSJ8fFohPT0iaW5wdXQiJiZaIT09InRleHRhcmVhInx8TCQoUS50eXBlKT9HPT09Im9uZm9jdXMiP3E9Im9uZm9jdXNpbiI6Rz09PSJvbmJsdXIiP3E9Im9uZm9jdXNvdXQiOnokLnRlc3QocSkmJihxPUcpOkc9cT0ib25pbnB1dCI6WSYmQiQudGVzdChxKT9xPXEucmVwbGFjZShOJCwiLSQmIikudG9Mb3dlckNhc2UoKTpWPT09bnVsbCYmKFY9dm9pZCAwKSxHPT09Im9uaW5wdXQiJiZLW3E9R10mJihxPSJvbmlucHV0Q2FwdHVyZSIpLEtbcV09Vn19Wj09InNlbGVjdCImJihLLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KEsudmFsdWUpJiYoSy52YWx1ZT1LMChRLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKEIpe0IucHJvcHMuc2VsZWN0ZWQ9Sy52YWx1ZS5pbmRleE9mKEIucHJvcHMudmFsdWUpIT0tMX0pKSxLLmRlZmF1bHRWYWx1ZSE9bnVsbCYmKEsudmFsdWU9SzAoUS5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihCKXtCLnByb3BzLnNlbGVjdGVkPUsubXVsdGlwbGU/Sy5kZWZhdWx0VmFsdWUuaW5kZXhPZihCLnByb3BzLnZhbHVlKSE9LTE6Sy5kZWZhdWx0VmFsdWU9PUIucHJvcHMudmFsdWV9KSkpLFEuY2xhc3MmJiFRLmNsYXNzTmFtZT8oSy5jbGFzcz1RLmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShLLCJjbGFzc05hbWUiLEMkKSk6US5jbGFzc05hbWUmJihLLmNsYXNzPUsuY2xhc3NOYW1lPVEuY2xhc3NOYW1lKSxKLnByb3BzPUt9KCQpLCQuJCR0eXBlb2Y9TTksQjkmJkI5KCQpfTt2YXIgejk9dC5fX3I7dC5fX3I9ZnVuY3Rpb24oJCl7ejkmJno5KCQpLFMzPSQuX19jfTt2YXIgTjk9dC5kaWZmZWQ7dC5kaWZmZWQ9ZnVuY3Rpb24oJCl7TjkmJk45KCQpO3Zhcntwcm9wczpKLF9fZTpRfT0kO1EhPW51bGwmJiQudHlwZT09PSJ0ZXh0YXJlYSImJiJ2YWx1ZSJpbiBKJiZKLnZhbHVlIT09US52YWx1ZSYmKFEudmFsdWU9Si52YWx1ZT09bnVsbD8iIjpKLnZhbHVlKSxTMz1udWxsfTt2YXIgRiQ9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6e2N1cnJlbnQ6e3JlYWRDb250ZXh0OmZ1bmN0aW9uKCQpe3JldHVybiBTMy5fX25bJC5fX2NdLnByb3BzLnZhbHVlfSx1c2VDYWxsYmFjazpQLHVzZUNvbnRleHQ6VzAsdXNlRGVidWdWYWx1ZTpJMix1c2VEZWZlcnJlZFZhbHVlOkg5LHVzZUVmZmVjdDpfLHVzZUlkOkI1LHVzZUltcGVyYXRpdmVIYW5kbGU6VDIsdXNlSW5zZXJ0aW9uRWZmZWN0OkM5LHVzZUxheW91dEVmZmVjdDpUMCx1c2VNZW1vOlIxLHVzZVJlZHVjZXI6bjAsdXNlUmVmOlQsdXNlU3RhdGU6QSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTp3Mix1c2VUcmFuc2l0aW9uOms5fX19O2Z1bmN0aW9uIEEkKCQpe3JldHVybiBsMS5iaW5kKG51bGwsJCl9ZnVuY3Rpb24gYjIoJCl7cmV0dXJuISEkJiYkLiQkdHlwZW9mPT09TTl9ZnVuY3Rpb24gTyQoJCl7cmV0dXJuIGIyKCQpJiYkLnR5cGU9PT1LMX1mdW5jdGlvbiBNJCgkKXtyZXR1cm4hISQmJnR5cGVvZiAkLmRpc3BsYXlOYW1lPT0ic3RyaW5nIiYmJC5kaXNwbGF5TmFtZS5pbmRleE9mKCJNZW1vKCIpPT0wfWZ1bmN0aW9uIFckKCQpe3JldHVybiBiMigkKT9fMy5hcHBseShudWxsLGFyZ3VtZW50cyk6JH1mdW5jdGlvbiBQJCgkKXtyZXR1cm4hISQuX19rJiYoUjAobnVsbCwkKSwhMCl9ZnVuY3Rpb24gXyQoJCl7cmV0dXJuICQmJigkLmJhc2V8fCQubm9kZVR5cGU9PT0xJiYkKXx8bnVsbH12YXIgRCQ9ZnVuY3Rpb24oJCxKKXtyZXR1cm4gJChKKX0sVCQ9ZnVuY3Rpb24oJCxKKXt2YXIgUT10LmRlYm91bmNlUmVuZGVyaW5nO3QuZGVib3VuY2VSZW5kZXJpbmc9ZnVuY3Rpb24oSyl7cmV0dXJuIEsoKX07dmFyIFo9JChKKTtyZXR1cm4gdC5kZWJvdW5jZVJlbmRlcmluZz1RLFp9LEkkPWIyLHY9e3VzZVN0YXRlOkEsdXNlSWQ6QjUsdXNlUmVkdWNlcjpuMCx1c2VFZmZlY3Q6Xyx1c2VMYXlvdXRFZmZlY3Q6VDAsdXNlSW5zZXJ0aW9uRWZmZWN0OkM5LHVzZVRyYW5zaXRpb246azksdXNlRGVmZXJyZWRWYWx1ZTpIOSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTp3MixzdGFydFRyYW5zaXRpb246TDksdXNlUmVmOlQsdXNlSW1wZXJhdGl2ZUhhbmRsZTpUMix1c2VNZW1vOlIxLHVzZUNhbGxiYWNrOlAsdXNlQ29udGV4dDpXMCx1c2VEZWJ1Z1ZhbHVlOkkyLHZlcnNpb246IjE4LjMuMSIsQ2hpbGRyZW46SyQscmVuZGVyOkgkLGh5ZHJhdGU6ayQsdW5tb3VudENvbXBvbmVudEF0Tm9kZTpQJCxjcmVhdGVQb3J0YWw6eTMsY3JlYXRlRWxlbWVudDpsMSxjcmVhdGVDb250ZXh0Ok0wLGNyZWF0ZUZhY3Rvcnk6QSQsY2xvbmVFbGVtZW50OlckLGNyZWF0ZVJlZjpqNSxGcmFnbWVudDpLMSxpc1ZhbGlkRWxlbWVudDpiMixpc0VsZW1lbnQ6SSQsaXNGcmFnbWVudDpPJCxpc01lbW86TSQsZmluZERPTU5vZGU6XyQsQ29tcG9uZW50Om4xLFB1cmVDb21wb25lbnQ6YjMsbWVtbzphMCxmb3J3YXJkUmVmOl8wLGZsdXNoU3luYzpUJCx1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczpEJCxTdHJpY3RNb2RlOksxLFN1c3BlbnNlOkUyLFN1c3BlbnNlTGlzdDp2NSxsYXp5OnEkLF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOkYkfTtmdW5jdGlvbiBXOSgkKXtsZXQgSj1uZXcgVWludDhBcnJheSg2NTUzNiksUT0wLFo9MCxLPTEwMjQsWT1uZXcgVGV4dERlY29kZXIoImxhdGluMSIpLHE9KFUpPT57aWYoUStVLmxlbmd0aD5KLmxlbmd0aCl7aWYoWj4wKUouY29weVdpdGhpbigwLFosUSksUS09WixaPTA7aWYoUStVLmxlbmd0aD5KLmxlbmd0aCl7bGV0IEg9Si5sZW5ndGg7d2hpbGUoSDxRK1UubGVuZ3RoKUgqPTI7bGV0IEY9bmV3IFVpbnQ4QXJyYXkoSCk7Ri5zZXQoSi5zdWJhcnJheSgwLFEpKSxKPUZ9fUouc2V0KFUsUSksUSs9VS5sZW5ndGh9LFY9KFUpPT57bGV0IEg9TWF0aC5taW4oUS00LFUrSyk7Zm9yKGxldCBGPVU7Rjw9SDtGKyspaWYoSltGXT09PTEzJiZKW0YrMV09PT0xMCYmSltGKzJdPT09MTMmJkpbRiszXT09PTEwKXJldHVybiBGO3JldHVybi0xfSxHPShVLEgpPT57bGV0IEY9WS5kZWNvZGUoSi5zdWJhcnJheShVLEgpKSxMPS9jb250ZW50LWxlbmd0aDpccyooXGQrKS9pLmV4ZWMoRik7cmV0dXJuIEw/TnVtYmVyKExbMV0pOm51bGx9LEI9MCxOPShVKT0+e2xldCBIPS0xO2ZvcihsZXQgRj1VO0Y8US0xO0YrKylpZihKW0ZdPT09MjU1JiZKW0YrMV09PT0yMTYpe0g9RjticmVha31pZihIPT09LTEpcmV0dXJuIG51bGw7Zm9yKGxldCBGPU1hdGgubWF4KEgrMixCKTtGPFEtMTtGKyspaWYoSltGXT09PTI1NSYmSltGKzFdPT09MjE3KXJldHVybiBCPTAse3M6SCxlOkYrMn07cmV0dXJuIEI9TWF0aC5tYXgoSCsyLFEtMSksbnVsbH0sej0oKT0+e3doaWxlKFo8USl7bGV0IFU9VihaKTtpZihVPj0wKXtsZXQgRj1HKFosVSk7aWYoRiE9bnVsbCYmRj4wKXtsZXQgTD1VKzQsaz1MK0Y7aWYoUTxrKWJyZWFrOyQoSi5zdWJhcnJheShMLGspKSxaPWs7Y29udGludWV9fWVsc2UgaWYoUS1aPD1LKWJyZWFrO2xldCBIPU4oWik7aWYoIUgpYnJlYWs7JChKLnN1YmFycmF5KEgucyxILmUpKSxaPUguZX1pZihaPjApe2lmKFo8USlKLmNvcHlXaXRoaW4oMCxaLFEpO1EtPVosQj1CPlo/Qi1aOjAsWj0wfX07cmV0dXJue3B1c2goVSl7aWYoVS5sZW5ndGg9PT0wKXJldHVybjtxKFUpLHooKX19fWZ1bmN0aW9uIEUkKCQsSj01MDAsUT0xZTQpe3JldHVybiBNYXRoLm1pbihRLEoqMioqTWF0aC5tYXgoMCwkLTEpKX1hc3luYyBmdW5jdGlvbiB3JCgkKXtsZXQgSj0iIjt0cnl7Sj1hd2FpdCAkLnRleHQoKX1jYXRjaHt9dHJ5e2xldCBRPUpTT04ucGFyc2UoSik7cmV0dXJue3N0YXR1czokLnN0YXR1cyxlcnJvcjp0eXBlb2YgUS5lcnJvcj09PSJzdHJpbmciP1EuZXJyb3I6YGh0dHBfJHskLnN0YXR1c31gLHJlYXNvbjp0eXBlb2YgUS5yZWFzb249PT0ic3RyaW5nIj9RLnJlYXNvbjp0eXBlb2YgUS5tZXNzYWdlPT09InN0cmluZyI/US5tZXNzYWdlOmBIVFRQICR7JC5zdGF0dXN9YCwuLi50eXBlb2YgUS5zdGFnZT09PSJzdHJpbmciP3tzdGFnZTpRLnN0YWdlfTp7fSwuLi5RLmRldGFpbHMmJnR5cGVvZiBRLmRldGFpbHM9PT0ib2JqZWN0Ij97ZGV0YWlsczpRLmRldGFpbHN9Ont9fX1jYXRjaHtyZXR1cm57c3RhdHVzOiQuc3RhdHVzLGVycm9yOmBodHRwXyR7JC5zdGF0dXN9YCxyZWFzb246Si50cmltKCkuc2xpY2UoMCwyMDApfHxgSFRUUCAkeyQuc3RhdHVzfWB9fX12YXIgYiQ9KCQsSik9Pm5ldyBQcm9taXNlKChRKT0+e2lmKEouYWJvcnRlZClyZXR1cm4gUSgpO2xldCBaPSgpPT57Y2xlYXJUaW1lb3V0KEspLFEoKX0sSz1zZXRUaW1lb3V0KCgpPT57Si5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsWiksUSgpfSwkKTtKLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixaLHtvbmNlOiEwfSl9KTthc3luYyBmdW5jdGlvbiBQOSgkKXtsZXQgSj0kLmZldGNoPz9mZXRjaCxRPSQuc2xlZXA/P2IkLFo9MDt3aGlsZSghJC5zaWduYWwuYWJvcnRlZCl7bGV0IEssWT0hMTt0cnl7bGV0IFY9YXdhaXQgSigkLnVybCx7c2lnbmFsOiQuc2lnbmFsfSk7aWYoIVYub2spSz1hd2FpdCB3JChWKTtlbHNlIGlmKCFWLmJvZHkpSz17c3RhdHVzOlYuc3RhdHVzLGVycm9yOiJub19ib2R5IixyZWFzb246IlN0cmVhbSByZXNwb25zZSBoYWQgbm8gYm9keSJ9O2Vsc2V7bGV0IEc9JC5jb25uZWN0KCksQj1WLmJvZHkuZ2V0UmVhZGVyKCksTj0hMTt0cnl7d2hpbGUoITApe2xldHtkb25lOnosdmFsdWU6VX09YXdhaXQgQi5yZWFkKCk7aWYoeil7Tj0hMDticmVha31pZighVT8ubGVuZ3RoKWNvbnRpbnVlO2lmKCFZKVk9ITAsWj0wLCQub25PcGVuPy4oKTtHKFUpfX1maW5hbGx5e2lmKCFOKWF3YWl0IEIuY2FuY2VsKCkuY2F0Y2goKCk9Pnt9KX1LPXtzdGF0dXM6Vi5zdGF0dXMsZXJyb3I6InN0cmVhbV9lbmRlZCIscmVhc29uOiJUaGUgc2VydmVyIGNsb3NlZCB0aGUgc3RyZWFtIn19fWNhdGNoKFYpe2lmKCQuc2lnbmFsLmFib3J0ZWQpYnJlYWs7Sz1ZP3tzdGF0dXM6MCxlcnJvcjoic3RyZWFtX2ludGVycnVwdGVkIixyZWFzb246IlRoZSBzdHJlYW0gd2FzIGludGVycnVwdGVkIn06e3N0YXR1czowLGVycm9yOiJub19yZXNwb25zZSIscmVhc29uOmBObyByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIgKCR7ViBpbnN0YW5jZW9mIEVycm9yP1YubWVzc2FnZTpTdHJpbmcoVil9KWB9fWlmKFkpJC5vbkNsb3NlPy4oKTtpZigkLnNpZ25hbC5hYm9ydGVkKWJyZWFrO1orKztsZXQgcT1FJChaKTskLm9uRXJyb3Ioey4uLksscmV0cnlJbk1zOnF9KSxhd2FpdCBRKHEsJC5zaWduYWwpLmNhdGNoKCgpPT57fSl9fWZ1bmN0aW9uIHkyKCQsSil7bGV0IFE9VChKKTtRLmN1cnJlbnQ9SjtsZXQgWj1UKG5ldyBTZXQpLFtLLFldPUEobnVsbCkscT1QKChWKT0+e3JldHVybiBaLmN1cnJlbnQuYWRkKFYpLCgpPT57Wi5jdXJyZW50LmRlbGV0ZShWKX19LFtdKTtyZXR1cm4gXygoKT0+e2lmKCEkKXJldHVybjtsZXQgVj1uZXcgQWJvcnRDb250cm9sbGVyO1kobnVsbCk7bGV0IEc9bmV3IFVSTCgkKTtHLnNlYXJjaFBhcmFtcy5zZXQoInJhdyIsIjEiKTtsZXQgQj0oTik9PntpZihRLmN1cnJlbnQ/LighMCksWi5jdXJyZW50LnNpemU9PT0wKXJldHVybjtsZXQgej1OLmxlbmd0aD49OCYmTlswXT09PTEzNyYmTlsxXT09PTgwJiZOWzJdPT09NzgmJk5bM109PT03MSxVPVVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW05dLHt0eXBlOno/ImltYWdlL3BuZyI6ImltYWdlL2pwZWcifSkpO2ZvcihsZXQgSCBvZiBaLmN1cnJlbnQpSChVKX07cmV0dXJuIFA5KHt1cmw6Ry50b1N0cmluZygpLHNpZ25hbDpWLnNpZ25hbCxjb25uZWN0OigpPT57bGV0IE49VzkoQik7cmV0dXJuKHopPT5OLnB1c2goeil9LG9uT3BlbjooKT0+WShudWxsKSxvbkNsb3NlOigpPT5RLmN1cnJlbnQ/LighMSksb25FcnJvcjooTik9PntRLmN1cnJlbnQ/LighMSksWShOKX19KSwoKT0+e1EuY3VycmVudD8uKCExKSxWLmFib3J0KCl9fSxbJF0pLHtzdWJzY3JpYmVGcmFtZTpxLGZyYW1lOm51bGwsZXJyb3I6S319ZnVuY3Rpb24gXzkoJCxKLFEpe2lmKCEkKXJldHVybiBudWxsO2ZvcihsZXQgWiBvZiAkLnBpZWNlcyl7aWYoWi5sZW5ndGghPT01KWNvbnRpbnVlO2xldFtLLFkscSxWLEddPVo7aWYoWy4uLkssLi4uWSwuLi5xLC4uLlYsLi4uR10uc29tZSgocik9PiFOdW1iZXIuaXNGaW5pdGUocikpKWNvbnRpbnVlO2xldCBCPVlbMF0tcVswXSxOPVZbMF0tcVswXSx6PVlbMV0tcVsxXSxVPVZbMV0tcVsxXSxIPUtbMF0tWVswXStxWzBdLVZbMF0sRj1LWzFdLVlbMV0rcVsxXS1WWzFdLEw9QipVLU4qejtpZihNYXRoLmFicyhMKTwwLjAwMDAwMDAwMDEpY29udGludWU7bGV0IGs9KEgqVS1OKkYpL0wsQz0oQipGLUgqeikvTCxPPVlbMF0tS1swXStrKllbMF0seT1WWzBdLUtbMF0rQypWWzBdLEU9WVsxXS1LWzFdK2sqWVsxXSx3PVZbMV0tS1sxXStDKlZbMV0sUz1PLUoqayxRMT15LUoqQyxnPUUtUSprLGg9dy1RKkMsST1TKmgtUTEqZztpZihNYXRoLmFicyhJKTwwLjAwMDAwMDAwMDEpY29udGludWU7bGV0IHU9KChKLUtbMF0pKmgtUTEqKFEtS1sxXSkpL0ksWjE9KFMqKFEtS1sxXSktKEotS1swXSkqZykvSTtpZih1PC0wLjAwMXx8WjE8LTAuMDAxfHx1PjEuMDAxfHxaMT4xLjAwMSljb250aW51ZTtyZXR1cm57eDpHWzBdK01hdGgubWF4KDAsTWF0aC5taW4oMSx1KSkqR1syXSx5OkdbMV0rTWF0aC5tYXgoMCxNYXRoLm1pbigxLFoxKSkqR1szXX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gRDkoJCxKKXtyZXR1cm4gJC5waWVjZXMuZmxhdE1hcCgoUSk9PntpZihRLmxlbmd0aCE9PTUpcmV0dXJuW107bGV0W1osSyxZLHEsVl09USxHPU1hdGgubWF4KEoueCxWWzBdKSxCPU1hdGgubWF4KEoueSxWWzFdKSxOPU1hdGgubWluKEoueCtKLndpZHRoLFZbMF0rVlsyXSksej1NYXRoLm1pbihKLnkrSi5oZWlnaHQsVlsxXStWWzNdKTtpZihOPD1HfHx6PD1CKXJldHVybltdO2xldCBVPUtbMF0tWVswXSxIPXFbMF0tWVswXSxGPUtbMV0tWVsxXSxMPXFbMV0tWVsxXSxrPVpbMF0tS1swXStZWzBdLXFbMF0sQz1aWzFdLUtbMV0rWVsxXS1xWzFdLE89VSpMLUgqRjtpZihNYXRoLmFicyhPKTwwLjAwMDAwMDAwMDEpcmV0dXJuW107bGV0IHk9KGsqTC1IKkMpL08sRT0oVSpDLWsqRikvTyx3PShTLFExKT0+e2xldCBnPShTLVZbMF0pL1ZbMl0saD0oUTEtVlsxXSkvVlszXSxJPTEreSpnK0UqaDtyZXR1cm5bKChLWzBdLVpbMF0reSpLWzBdKSpnKyhxWzBdLVpbMF0rRSpxWzBdKSpoK1pbMF0pL0ksKChLWzFdLVpbMV0reSpLWzFdKSpnKyhxWzFdLVpbMV0rRSpxWzFdKSpoK1pbMV0pL0ldfTtyZXR1cm5bW3coRyxCKSx3KE4sQiksdyhOLHopLHcoRyx6KV1dfSl9ZnVuY3Rpb24gVDkoJCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KCQmJlskLnBhbmVsLCQuaGluZ2VEZWdyZWVzLCQucGllY2VzXSl9ZnVuY3Rpb24gSTkoJCl7bGV0IEo9JD8uaGFyZHdhcmU7aWYoIUp8fEoubGVuZ3RoIT09NHx8Si5zb21lKCh7eDpRLHk6WixhbmdsZTpLfSk9PiFbUSxaLEtdLmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSkpKXJldHVybltdO3JldHVybiBKLm1hcCgoUSxaKT0+KHsuLi5RLGtleTpafSkpfXZhciBTMj0oLi4uJCk9PiQuZmlsdGVyKChKLFEsWik9PntyZXR1cm4gQm9vbGVhbihKKSYmSi50cmltKCkhPT0iIiYmWi5pbmRleE9mKEopPT09UX0pLmpvaW4oIiAiKS50cmltKCk7dmFyIEU5PSgkKT0+JC5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCk7dmFyIHc5PSgkKT0+JC5yZXBsYWNlKC9eKFtBLVpdKXxbXHMtX10rKFx3KS9nLChKLFEsWik9Plo/Wi50b1VwcGVyQ2FzZSgpOlEudG9Mb3dlckNhc2UoKSk7dmFyIHgzPSgkKT0+e2xldCBKPXc5KCQpO3JldHVybiBKLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK0ouc2xpY2UoMSl9O3ZhciB4Mj17eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoyNCxoZWlnaHQ6MjQsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6MixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn07dmFyIGI5PSgkKT0+e2ZvcihsZXQgSiBpbiAkKWlmKEouc3RhcnRzV2l0aCgiYXJpYS0iKXx8Sj09PSJyb2xlInx8Sj09PSJ0aXRsZSIpcmV0dXJuITA7cmV0dXJuITF9O3ZhciB5JD1NMCh7fSk7dmFyIHk5PSgpPT5XMCh5JCk7dmFyIFM5PV8wKCh7Y29sb3I6JCxzaXplOkosc3Ryb2tlV2lkdGg6USxhYnNvbHV0ZVN0cm9rZVdpZHRoOlosY2xhc3NOYW1lOks9IiIsY2hpbGRyZW46WSxpY29uTm9kZTpxLC4uLlZ9LEcpPT57bGV0e3NpemU6Qj0yNCxzdHJva2VXaWR0aDpOPTIsYWJzb2x1dGVTdHJva2VXaWR0aDp6PSExLGNvbG9yOlU9ImN1cnJlbnRDb2xvciIsY2xhc3NOYW1lOkg9IiJ9PXk5KCk/P3t9LEY9Wj8/ej9OdW1iZXIoUT8/TikqMjQvTnVtYmVyKEo/P0IpOlE/P047cmV0dXJuIGwxKCJzdmciLHtyZWY6RywuLi54Mix3aWR0aDpKPz9CPz94Mi53aWR0aCxoZWlnaHQ6Sj8/Qj8/eDIuaGVpZ2h0LHN0cm9rZTokPz9VLHN0cm9rZVdpZHRoOkYsY2xhc3NOYW1lOlMyKCJsdWNpZGUiLEgsSyksLi4uIVkmJiFiOShWKSYmeyJhcmlhLWhpZGRlbiI6InRydWUifSwuLi5WfSxbLi4ucS5tYXAoKFtMLGtdKT0+bDEoTCxrKSksLi4uQXJyYXkuaXNBcnJheShZKT9ZOltZXV0pfSk7dmFyIHExPSgkLEopPT57bGV0IFE9XzAoKHtjbGFzc05hbWU6WiwuLi5LfSxZKT0+bDEoUzkse3JlZjpZLGljb25Ob2RlOkosY2xhc3NOYW1lOlMyKGBsdWNpZGUtJHtFOSh4MygkKSl9YCxgbHVjaWRlLSR7JH1gLFopLC4uLkt9KSk7cmV0dXJuIFEuZGlzcGxheU5hbWU9eDMoJCksUX07dmFyIFMkPVtbInBhdGgiLHtkOiJNMjEgMTJhOSA5IDAgMSAxLTYuMjE5LTguNTYiLGtleToiMTN6YWxkIn1dXSxtMD1xMSgibG9hZGVyLWNpcmNsZSIsUyQpO3ZhciB4JD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiIsa2V5OiJhZml0djcifV0sWyJwYXRoIix7ZDoiTTkgM3YxOCIsa2V5OiJmaDNocWEifV1dLEkwPXExKCJwYW5lbC1sZWZ0Iix4JCk7dmFyIFIkPVtbInBhdGgiLHtkOiJNMTIuMDM0IDEyLjY4MWEuNDk4LjQ5OCAwIDAgMSAuNjQ3LS42NDdsOSAzLjVhLjUuNSAwIDAgMS0uMDMzLjk0M2wtMy40NDQgMS4wNjhhMSAxIDAgMCAwLS42Ni42NmwtMS4wNjcgMy40NDNhLjUuNSAwIDAgMS0uOTQzLjAzM3oiLGtleToieHduemlwIn1dLFsicGF0aCIse2Q6Ik0yMSAxMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNiIsa2V5OiIxNHJzdnEifV1dLHAwPXExKCJzcXVhcmUtbW91c2UtcG9pbnRlciIsUiQpO3ZhciBqJD1bWyJyZWN0Iix7eDoiMiIseToiNCIsd2lkdGg6IjIwIixoZWlnaHQ6IjE2IixyeDoiMiIsa2V5OiJpenhsYW8ifV0sWyJwYXRoIix7ZDoiTTEwIDR2NCIsa2V5OiJwcDh1ODAifV0sWyJwYXRoIix7ZDoiTTIgOGgyMCIsa2V5OiJkMTFjczcifV0sWyJwYXRoIix7ZDoiTTYgNHY0IixrZXk6IjFzdnRqdyJ9XV0sZzU9cTEoImFwcC13aW5kb3ciLGokKTt2YXIgdiQ9W1sicGF0aCIse2Q6Ik03IDdoMTB2MTAiLGtleToiMXRpdm45In1dLFsicGF0aCIse2Q6Ik03IDE3IDE3IDciLGtleToiMXZraXphIn1dXSxoNT1xMSgiYXJyb3ctdXAtcmlnaHQiLHYkKTt2YXIgZyQ9W1sicGF0aCIse2Q6Ik0xMy45OTcgNGEyIDIgMCAwIDEgMS43NiAxLjA1bC40ODYuOUEyIDIgMCAwIDAgMTguMDAzIDdIMjBhMiAyIDAgMCAxIDIgMnY5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjlhMiAyIDAgMCAxIDItMmgxLjk5N2EyIDIgMCAwIDAgMS43NTktMS4wNDhsLjQ4OS0uOTA0QTIgMiAwIDAgMSAxMC4wMDQgNHoiLGtleToiMTh1NmdnIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTMiLHI6IjMiLGtleToiMXZnM2V1In1dXSxmNT1xMSgiY2FtZXJhIixnJCk7dmFyIGgkPVtbInBhdGgiLHtkOiJNMjAgNiA5IDE3bC01LTUiLGtleToiMWdtZjJjIn1dXSxtNT1xMSgiY2hlY2siLGgkKTt2YXIgZiQ9W1sicGF0aCIse2Q6Im02IDkgNiA2IDYtNiIsa2V5OiJxcnVuc2wifV1dLHA1PXExKCJjaGV2cm9uLWRvd24iLGYkKTt2YXIgbSQ9W1sicGF0aCIse2Q6Im05IDE4IDYtNi02LTYiLGtleToibXRoaHdxIn1dXSx1NT1xMSgiY2hldnJvbi1yaWdodCIsbSQpO3ZhciBwJD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAiLGtleToiMW1nbGF5In1dXSxsNT1xMSgiY2lyY2xlIixwJCk7dmFyIHUkPVtbInBhdGgiLHtkOiJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiIsa2V5OiJiMTloNXEifV0sWyJwYXRoIix7ZDoiTTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDIgMTh6IixrZXk6Img3aDVnZSJ9XV0sZDU9cTEoImZhc3QtZm9yd2FyZCIsdSQpO3ZhciBsJD1bWyJwYXRoIix7ZDoibTMgNyA1IDUtNSA1VjciLGtleToiY291aGk3In1dLFsicGF0aCIse2Q6Im0yMSA3LTUgNSA1IDVWNyIsa2V5OiI2b3VpYTcifV0sWyJwYXRoIix7ZDoiTTEyIDIwdjIiLGtleToiMWxoMWtnIn1dLFsicGF0aCIse2Q6Ik0xMiAxNHYyIixrZXk6IjhqY3h1ZCJ9XSxbInBhdGgiLHtkOiJNMTIgOHYyIixrZXk6IjF3b3FpdiJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIixrZXk6InR1czAzbSJ9XV0sYzU9cTEoImZsaXAtaG9yaXpvbnRhbC0yIixsJCk7dmFyIGQkPVtbImxpbmUiLHt4MToiMjIiLHgyOiIyIix5MToiNiIseTI6IjYiLGtleToiMTV3N2RxIn1dLFsibGluZSIse3gxOiIyMiIseDI6IjIiLHkxOiIxOCIseTI6IjE4IixrZXk6IjFpcDQ4cCJ9XSxbImxpbmUiLHt4MToiNiIseDI6IjYiLHkxOiIyIix5MjoiMjIiLGtleToiYTJsbnl4In1dLFsibGluZSIse3gxOiIxOCIseDI6IjE4Iix5MToiMiIseTI6IjIyIixrZXk6Ijh2YjZqZCJ9XV0sczA9cTEoImZyYW1lIixkJCk7dmFyIGMkPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCIsa2V5OiIxbWdsYXkifV0sWyJwYXRoIix7ZDoiTTEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDAtMjAiLGtleToiMTNvMXpsIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDIwIixrZXk6IjlpNHB1NCJ9XV0saTU9cTEoImdsb2JlIixjJCk7dmFyIGkkPVtbInBhdGgiLHtkOiJtMjIgMTEtMS4yOTYtMS4yOTZhMi40IDIuNCAwIDAgMC0zLjQwOCAwTDExIDE2IixrZXk6IjlrenkzNSJ9XSxbInBhdGgiLHtkOiJNNCA4YTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxMGEyIDIgMCAwIDAgMi0yIixrZXk6IjF0MGYwdCJ9XSxbImNpcmNsZSIse2N4OiIxMyIsY3k6IjciLHI6IjEiLGZpbGw6ImN1cnJlbnRDb2xvciIsa2V5OiIxb2J1czYifV0sWyJyZWN0Iix7eDoiOCIseToiMiIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMiIsa2V5OiIxZ3ZoYnkifV1dLG81PXExKCJpbWFnZXMiLGkkKTt2YXIgbyQ9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxMSIseDoiMyIseToiMTEiLHJ4OiIyIixyeToiMiIsa2V5OiIxdzRldzEifV0sWyJwYXRoIix7ZDoiTTcgMTFWN2E1IDUgMCAwIDEgMTAgMHY0IixrZXk6ImZ3dm16bSJ9XV0scjU9cTEoImxvY2siLG8kKTt2YXIgciQ9W1sicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxNCIseDoiMiIseToiMyIscng6IjIiLGtleToiNDhpNjUxIn1dLFsibGluZSIse3gxOiI4Iix4MjoiMTYiLHkxOiIyMSIseTI6IjIxIixrZXk6IjFzdmtlaCJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMiIseTE6IjE3Iix5MjoiMjEiLGtleToidncxcW1tIn1dXSxuNT1xMSgibW9uaXRvciIsciQpO3ZhciBuJD1bWyJwYXRoIix7ZDoiTTIwLjk4NSAxMi40ODZhOSA5IDAgMSAxLTkuNDczLTkuNDcyYy40MDUtLjAyMi42MTcuNDYuNDAyLjgwM2E2IDYgMCAwIDAgOC4yNjggOC4yNjhjLjM0NC0uMjE1LjgyNS0uMDA0LjgwMy40MDEiLGtleToia2Z3dG0ifV1dLGE1PXExKCJtb29uIixuJCk7dmFyIGEkPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixrZXk6ImFmaXR2NyJ9XSxbInBhdGgiLHtkOiJNMTUgM3YxOCIsa2V5OiIxNG52cDAifV1dLHM1PXExKCJwYW5lbC1yaWdodCIsYSQpO3ZhciBzJD1bWyJwYXRoIix7ZDoiTTMgMTJhOSA5IDAgMSAwIDktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCIsa2V5OiIxMzU3ZTMifV0sWyJwYXRoIix7ZDoiTTMgM3Y1aDUiLGtleToiMXhocThhIn1dXSx0NT1xMSgicm90YXRlLWNjdyIscyQpO3ZhciB0JD1bWyJwYXRoIix7ZDoibTIxIDIxLTQuMzQtNC4zNCIsa2V5OiIxNGo3cmoifV0sWyJjaXJjbGUiLHtjeDoiMTEiLGN5OiIxMSIscjoiOCIsa2V5OiI0ZWo5N3UifV1dLGU1PXExKCJzZWFyY2giLHQkKTt2YXIgZSQ9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLGtleToiYWZpdHY3In1dXSwkMj1xMSgic3F1YXJlIixlJCk7dmFyICRKPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiI0IixrZXk6IjRleGlwMiJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIixrZXk6InR1czAzbSJ9XSxbInBhdGgiLHtkOiJNMTIgMjB2MiIsa2V5OiIxbGgxa2cifV0sWyJwYXRoIix7ZDoibTQuOTMgNC45MyAxLjQxIDEuNDEiLGtleToiMTQ5dDZqIn1dLFsicGF0aCIse2Q6Im0xNy42NiAxNy42NiAxLjQxIDEuNDEiLGtleToicHRiZ3V2In1dLFsicGF0aCIse2Q6Ik0yIDEyaDIiLGtleToiMXQ4ZjhuIn1dLFsicGF0aCIse2Q6Ik0yMCAxMmgyIixrZXk6IjFxOG1qdyJ9XSxbInBhdGgiLHtkOiJtNi4zNCAxNy42Ni0xLjQxIDEuNDEiLGtleToiMW04eno1In1dLFsicGF0aCIse2Q6Im0xOS4wNyA0LjkzLTEuNDEgMS40MSIsa2V5OiIxc2hsY3MifV1dLEoyPXExKCJzdW4iLCRKKTt2YXIgSko9W1sicGF0aCIse2Q6Ik0xMiAzdjEyIixrZXk6IjF4MGo1cyJ9XSxbInBhdGgiLHtkOiJtMTcgOC01LTUtNSA1IixrZXk6IjdxOTdyOCJ9XSxbInBhdGgiLHtkOiJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCIsa2V5OiJpaDduM2gifV1dLFEyPXExKCJ1cGxvYWQiLEpKKTt2YXIgUUo9W1sicGF0aCIse2Q6Ik0xMSA0LjcwMmEuNzA1LjcwNSAwIDAgMC0xLjIwMy0uNDk4TDYuNDEzIDcuNTg3QTEuNCAxLjQgMCAwIDEgNS40MTYgOEgzYTEgMSAwIDAgMC0xIDF2NmExIDEgMCAwIDAgMSAxaDIuNDE2YTEuNCAxLjQgMCAwIDEgLjk5Ny40MTNsMy4zODMgMy4zODRBLjcwNS43MDUgMCAwIDAgMTEgMTkuMjk4eiIsa2V5OiJ1cWo5dXcifV0sWyJwYXRoIix7ZDoiTTE2IDlhNSA1IDAgMCAxIDAgNiIsa2V5OiIxcTZrMmIifV1dLFoyPXExKCJ2b2x1bWUtMSIsUUopO3ZhciBaSj1bWyJwYXRoIix7ZDoiTTExIDQuNzAyYS43MDUuNzA1IDAgMCAwLTEuMjAzLS40OThMNi40MTMgNy41ODdBMS40IDEuNCAwIDAgMSA1LjQxNiA4SDNhMSAxIDAgMCAwLTEgMXY2YTEgMSAwIDAgMCAxIDFoMi40MTZhMS40IDEuNCAwIDAgMSAuOTk3LjQxM2wzLjM4MyAzLjM4NEEuNzA1LjcwNSAwIDAgMCAxMSAxOS4yOTh6IixrZXk6InVxajl1dyJ9XSxbInBhdGgiLHtkOiJNMTYgOWE1IDUgMCAwIDEgMCA2IixrZXk6IjFxNmsyYiJ9XSxbInBhdGgiLHtkOiJNMTkuMzY0IDE4LjM2NGE5IDkgMCAwIDAgMC0xMi43MjgiLGtleToiaWp3a2dhIn1dXSxYMj1xMSgidm9sdW1lLTIiLFpKKTt2YXIgWEo9W1sicGF0aCIse2Q6Ik0xOCA2IDYgMTgiLGtleToiMWJsNWY4In1dLFsicGF0aCIse2Q6Im02IDYgMTIgMTIiLGtleToiZDhiazZ2In1dXSxMMD1xMSgieCIsWEopO3ZhciBLMj17cG9ydHJhaXQ6ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXQifSxSMz17cG9ydHJhaXQ6ImxhbmRzY2FwZV9yaWdodCIsbGFuZHNjYXBlX3JpZ2h0OiJwb3J0cmFpdF91cHNpZGVfZG93biIscG9ydHJhaXRfdXBzaWRlX2Rvd246ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXQifSx4OT0xLFI5PTIsdTA9MyxqOT00O2Z1bmN0aW9uIFkyKCQpe3JldHVybiAkPj0wLjkzPzM6dm9pZCAwfWZ1bmN0aW9uIGozKCQpe3JldHVybiAkPT09ImxhbmRzY2FwZV9sZWZ0Inx8JD09PSJsYW5kc2NhcGVfcmlnaHQifWZ1bmN0aW9uIGwwKCQpe3JldHVybiEhJCYmKGozKCQub3JpZW50YXRpb24pfHwkLndpZHRoPiQuaGVpZ2h0KX1mdW5jdGlvbiB6NSgkKXtpZighJHx8JC53aWR0aDw9MHx8JC5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0IEo9ajMoJC5vcmllbnRhdGlvbil8fCQud2lkdGg+JC5oZWlnaHQsUT1KP01hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpOk1hdGgubWluKCQud2lkdGgsJC5oZWlnaHQpLFo9Sj9NYXRoLm1pbigkLndpZHRoLCQuaGVpZ2h0KTpNYXRoLm1heCgkLndpZHRoLCQuaGVpZ2h0KTtpZihRPT09JC53aWR0aCYmWj09PSQuaGVpZ2h0KXJldHVybiAkO3JldHVybnsuLi4kLHdpZHRoOlEsaGVpZ2h0Olp9fWZ1bmN0aW9uIGowKCQpe2xldCBKPXo1KCQpLFE9djkoJD8ub3JpZW50YXRpb24pLFo9TWF0aC5hYnMoUSk9PT05MCxLPSEhJCYmJC53aWR0aD4kLmhlaWdodCxZPVE9PT0xODB8fFomJiFLO3JldHVybntkaXNwbGF5Q29uZmlnOkoscm90YXRpb25EZWdyZWVzOlk/UTowLG5lZWRzQ3NzUm90YXRpb246WSxpbnB1dE9yaWVudGF0aW9uOlk/JD8ub3JpZW50YXRpb246dm9pZCAwfX1mdW5jdGlvbiB2OSgkKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJuIDkwO2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm4tOTA7Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJuIDE4MDtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBONSgkLEosUSl7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybnt4OlEseToxLUp9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57eDoxLVEseTpKfTtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm57eDoxLUoseToxLVF9O2RlZmF1bHQ6cmV0dXJue3g6Six5OlF9fX1mdW5jdGlvbiBnOSgkLEosUSl7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybntkeDpRLGR5Oi1KfTtjYXNlImxhbmRzY2FwZV9yaWdodCI6cmV0dXJue2R4Oi1RLGR5Okp9O2Nhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnJldHVybntkeDotSixkeTotUX07ZGVmYXVsdDpyZXR1cm57ZHg6SixkeTpRfX19ZnVuY3Rpb24gcTIoJCxKKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6c3dpdGNoKEope2Nhc2UgMTpyZXR1cm4gMztjYXNlIDQ6cmV0dXJuIDI7Y2FzZSAyOnJldHVybiAxO2Nhc2UgMzpyZXR1cm4gNDtkZWZhdWx0OnJldHVybiBKfWNhc2UibGFuZHNjYXBlX3JpZ2h0Ijpzd2l0Y2goSil7Y2FzZSAxOnJldHVybiAyO2Nhc2UgNDpyZXR1cm4gMztjYXNlIDI6cmV0dXJuIDQ7Y2FzZSAzOnJldHVybiAxO2RlZmF1bHQ6cmV0dXJuIEp9Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6c3dpdGNoKEope2Nhc2UgMTpyZXR1cm4gNDtjYXNlIDQ6cmV0dXJuIDE7Y2FzZSAyOnJldHVybiAzO2Nhc2UgMzpyZXR1cm4gMjtkZWZhdWx0OnJldHVybiBKfWRlZmF1bHQ6cmV0dXJuIEp9fXZhciBoOT0xNjtmdW5jdGlvbiBWMigkLEosUSl7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gbnVsbDtsZXQgWj1OdW1iZXIuaXNGaW5pdGUoUSkmJlE+MD9ROjEsSz1KPT09MT8kKjE2Oko9PT0yPyQqWjokLFk9TWF0aC5tYXgoLTIwMCxNYXRoLm1pbigyMDAsSykpO3JldHVybiBNYXRoLmFicyhZKTwwLjAxP251bGw6WX1mdW5jdGlvbiB2MygkLEosUSl7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gMDtsZXQgWj1OdW1iZXIuaXNGaW5pdGUoUSkmJlE+MD9ROjE7aWYoSj09PTEpcmV0dXJuICQqaDk7aWYoSj09PTIpcmV0dXJuICQqWjtyZXR1cm4gJH1mdW5jdGlvbiBmOSgkLEosUSl7aWYoIUp8fEoud2lkdGg8PTB8fEouaGVpZ2h0PD0wKXJldHVybiBudWxsO2xldCBaPUoub3JpZW50YXRpb249PT12b2lkIDAmJiQ/Lm9yaWVudGF0aW9uP3suLi5KLG9yaWVudGF0aW9uOiQub3JpZW50YXRpb259Oko7aWYoJCYmJC53aWR0aD09PVoud2lkdGgmJiQuaGVpZ2h0PT09Wi5oZWlnaHQmJiQub3JpZW50YXRpb249PT1aLm9yaWVudGF0aW9uKXJldHVybiBudWxsO3JldHVybntjb25maWc6Wixub3RpZnlQYXJlbnQ6UT09PSJyZXBvcnRlZCJ9fXZhciBLSj17WzFdOiJkZXNjcmlwdGlvbiIsWzJdOiJrZXlmcmFtZSIsWzNdOiJkZWx0YSIsWzRdOiJzZWVkIn07Y2xhc3MgUjJ7YnVmZmVyPW5ldyBVaW50OEFycmF5KDY1NTM2KTtsZW49MDtzdGFydD0wO2FwcGVuZCgkKXtpZih0aGlzLmxlbiskLmxlbmd0aD50aGlzLmJ1ZmZlci5sZW5ndGgpe2lmKHRoaXMuc3RhcnQ+MCl0aGlzLmJ1ZmZlci5jb3B5V2l0aGluKDAsdGhpcy5zdGFydCx0aGlzLmxlbiksdGhpcy5sZW4tPXRoaXMuc3RhcnQsdGhpcy5zdGFydD0wO2lmKHRoaXMubGVuKyQubGVuZ3RoPnRoaXMuYnVmZmVyLmxlbmd0aCl7bGV0IEo9dGhpcy5idWZmZXIubGVuZ3RoO3doaWxlKEo8dGhpcy5sZW4rJC5sZW5ndGgpSio9MjtsZXQgUT1uZXcgVWludDhBcnJheShKKTtRLnNldCh0aGlzLmJ1ZmZlci5zdWJhcnJheSgwLHRoaXMubGVuKSksdGhpcy5idWZmZXI9UX19dGhpcy5idWZmZXIuc2V0KCQsdGhpcy5sZW4pLHRoaXMubGVuKz0kLmxlbmd0aH1wdXNoKCQpe2lmKCQubGVuZ3RoPjApdGhpcy5hcHBlbmQoJCk7bGV0IEo9W10sUT10aGlzLmJ1ZmZlcjt3aGlsZSh0aGlzLmxlbi10aGlzLnN0YXJ0Pj00KXtsZXQgWj10aGlzLnN0YXJ0LEs9KFFbWl08PDI0fFFbWisxXTw8MTZ8UVtaKzJdPDw4fFFbWiszXSk+Pj4wO2lmKHRoaXMubGVuLVotNDxLKWJyZWFrO2lmKEs8MSl7dGhpcy5zdGFydCs9NDtjb250aW51ZX1sZXQgWT1RW1orNF0scT1LSltZXTtpZihxKUoucHVzaCh7dHlwZTpxLHBheWxvYWQ6US5zbGljZShaKzUsWis0K0spfSk7dGhpcy5zdGFydCs9NCtLfWlmKHRoaXMuc3RhcnQ+MCl7aWYodGhpcy5zdGFydDx0aGlzLmxlbil0aGlzLmJ1ZmZlci5jb3B5V2l0aGluKDAsdGhpcy5zdGFydCx0aGlzLmxlbik7dGhpcy5sZW4tPXRoaXMuc3RhcnQsdGhpcy5zdGFydD0wfXJldHVybiBKfXJlc2V0KCl7dGhpcy5sZW49MCx0aGlzLnN0YXJ0PTB9fWZ1bmN0aW9uIGczKCQpe2lmKCQubGVuZ3RoPDQpcmV0dXJuImF2YzEuNDJFMDFFIjtsZXQgSj0oUSk9PlEudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKTtyZXR1cm4iYXZjMS4iK0ooJFsxXSkrSigkWzJdKStKKCRbM10pfWZ1bmN0aW9uIHQwKCl7cmV0dXJuIHR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmdHlwZW9mIGdsb2JhbFRoaXMuVmlkZW9EZWNvZGVyPCJ1In12YXIgWUo9MTAwMCxxSj0xNjY2NztmdW5jdGlvbiBoMyh7dXJsOiQsZW5hYmxlZDpKLGNhbnZhc1JlZjpRLG9uRmlyc3RGcmFtZTpaLG9uRnJhbWU6SyxvbkVycm9yOlksb25EZWNvZGVyRXJyb3I6cX0pe2xldCBWPVQoe29uRmlyc3RGcmFtZTpaLG9uRnJhbWU6SyxvbkVycm9yOlksb25EZWNvZGVyRXJyb3I6cX0pO1YuY3VycmVudD17b25GaXJzdEZyYW1lOlosb25GcmFtZTpLLG9uRXJyb3I6WSxvbkRlY29kZXJFcnJvcjpxfSxfKCgpPT57aWYoIUp8fCEkfHwhdDAoKSlyZXR1cm47bGV0IEc9bmV3IEFib3J0Q29udHJvbGxlcixCPW5ldyBSMixOPSExLHo9ITEsVT0wLEg9bnVsbCxGPW51bGwsTD0oKT0+IU4mJiFHLnNpZ25hbC5hYm9ydGVkLGs9KGgpPT57aWYoVi5jdXJyZW50Lm9uRGVjb2RlckVycm9yKVYuY3VycmVudC5vbkRlY29kZXJFcnJvcigpO2Vsc2UgVi5jdXJyZW50Lm9uRXJyb3I/LihoKX0sQz0oaCxJLHUpPT57aWYoIUwoKSlyZXR1cm47bGV0IFoxPVEuY3VycmVudDtpZighWjEpcmV0dXJuO2lmKFoxLndpZHRoIT09SXx8WjEuaGVpZ2h0IT09dSlaMS53aWR0aD1JLFoxLmhlaWdodD11O2xldCByPVoxLmdldENvbnRleHQoIjJkIik7aWYoIXIpcmV0dXJuO2lmKHIuZHJhd0ltYWdlKGgsMCwwLEksdSksVi5jdXJyZW50Lm9uRnJhbWU/LigpLCF6KXo9ITAsVi5jdXJyZW50Lm9uRmlyc3RGcmFtZT8uKCl9LE89KCk9Pm5ldyBWaWRlb0RlY29kZXIoe291dHB1dDooaCk9Pnt0cnl7aWYoTCgpKUMoaCxoLmRpc3BsYXlXaWR0aCxoLmRpc3BsYXlIZWlnaHQpfWZpbmFsbHl7aC5jbG9zZSgpfX0sZXJyb3I6KGgpPT5rKGBkZWNvZGVyOiAke2gubWVzc2FnZX1gKX0pLHk9YXN5bmMoaCk9PntsZXQgST1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChuZXcgQmxvYihbaF0se3R5cGU6ImltYWdlL2pwZWcifSkpO3RyeXtpZihMKCkpQyhJLEkud2lkdGgsSS5oZWlnaHQpfWZpbmFsbHl7SS5jbG9zZSgpfX0sRT0oaCk9PntpZighRnx8Ri5zdGF0ZT09PSJjbG9zZWQiKUY9TygpO3RyeXtGLmNvbmZpZ3VyZSh7Y29kZWM6ZzMoaCksZGVzY3JpcHRpb246aCxvcHRpbWl6ZUZvcjoibGF0ZW5jeSIsaGFyZHdhcmVBY2NlbGVyYXRpb246InByZWZlci1oYXJkd2FyZSJ9KX1jYXRjaChJKXtrKGBjb25maWc6ICR7SS5tZXNzYWdlfWApfX0sdz0oaCxJKT0+e2lmKEY/LnN0YXRlIT09ImNvbmZpZ3VyZWQiKXJldHVybjt0cnl7Ri5kZWNvZGUobmV3IEVuY29kZWRWaWRlb0NodW5rKHt0eXBlOmg9PT0ia2V5ZnJhbWUiPyJrZXkiOiJkZWx0YSIsdGltZXN0YW1wOlUsZGF0YTpJfSkpLFUrPXFKfWNhdGNoe319LFM9KGgsSSk9Pntzd2l0Y2goaCl7Y2FzZSJzZWVkIjp5KEkpLmNhdGNoKCgpPT57fSk7cmV0dXJuO2Nhc2UiZGVzY3JpcHRpb24iOkUoSSk7cmV0dXJuO2Nhc2Uia2V5ZnJhbWUiOmNhc2UiZGVsdGEiOncoaCxJKTtyZXR1cm59fSxRMT0oKT0+e2lmKCFMKCl8fEgpcmV0dXJuO0g9c2V0VGltZW91dCgoKT0+e0g9bnVsbCxnKCl9LFlKKX0sZz1hc3luYygpPT57Qi5yZXNldCgpO3RyeXtsZXQgST0oYXdhaXQgZmV0Y2goYCR7JH0vc3RyZWFtLmF2Y2NgLHtzaWduYWw6Ry5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIUkpcmV0dXJuO2Zvcig7Oyl7bGV0e2RvbmU6dSx2YWx1ZTpaMX09YXdhaXQgSS5yZWFkKCk7aWYodSlicmVhaztpZighWjEpY29udGludWU7Zm9yKGxldCByIG9mIEIucHVzaChaMSkpUyhyLnR5cGUsci5wYXlsb2FkKX19Y2F0Y2h7fWZpbmFsbHl7aWYoTCgpKVExKCl9fTtyZXR1cm4gZygpLCgpPT57aWYoTj0hMCxIKWNsZWFyVGltZW91dChIKTtpZihHLmFib3J0KCksQi5yZXNldCgpLEYmJkYuc3RhdGUhPT0iY2xvc2VkIil0cnl7Ri5jbG9zZSgpfWNhdGNoe31GPW51bGx9fSxbJCxKLFFdKX12YXIgbTk9InNlcnZlLXNpbTp0aGVtZSIscDk9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiO2Z1bmN0aW9uIFZKKCQpe3JldHVybiAkPT09ImxpZ2h0Inx8JD09PSJkYXJrInx8JD09PSJzeXN0ZW0iPyQ6InN5c3RlbSJ9ZnVuY3Rpb24gZjMoJCxKKXtpZigkPT09InN5c3RlbSIpcmV0dXJuIEo/ImRhcmsiOiJsaWdodCI7cmV0dXJuICR9ZnVuY3Rpb24gajIoJCl7dHJ5e3JldHVybiBWSigkPy5nZXRJdGVtKCJzZXJ2ZS1zaW06dGhlbWUiKSl9Y2F0Y2h7cmV0dXJuInN5c3RlbSJ9fWZ1bmN0aW9uIHU5KCQsSil7dHJ5e2lmKEo9PT0ic3lzdGVtIikkPy5yZW1vdmVJdGVtKCJzZXJ2ZS1zaW06dGhlbWUiKTtlbHNlICQ/LnNldEl0ZW0oInNlcnZlLXNpbTp0aGVtZSIsSil9Y2F0Y2h7fX1mdW5jdGlvbiBsOSgkKXtyZXR1cm4gdHlwZW9mICQ/Lm1hdGNoTWVkaWE9PT0iZnVuY3Rpb24iPyQubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpLm1hdGNoZXM6ITB9ZnVuY3Rpb24gbTMoJCxKKXtpZigkLmdldEF0dHJpYnV0ZSgiZGF0YS10aGVtZSIpIT09SikkLnNldEF0dHJpYnV0ZSgiZGF0YS10aGVtZSIsSil9ZnVuY3Rpb24gZDkoJCl7cmV0dXJuYCR7TWF0aC5yb3VuZCgkKjEwMDApLzEwfSVgfWZ1bmN0aW9uIFQxKCQpe3JldHVybmBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tc2VydmUtc2ltLWluaywgI2ZmZikgJHtkOSgkKX0sIHRyYW5zcGFyZW50KWB9ZnVuY3Rpb24gZDEoJCl7cmV0dXJuYGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1zZXJ2ZS1zaW0taW5rLCAjZmZmKSBjYWxjKDEwMCUgLSAke2Q5KDEtJCl9ICogdmFyKC0tc2VydmUtc2ltLXRleHQtaywgMSkpLCB0cmFuc3BhcmVudClgfXZhciBHSj0wO2Z1bmN0aW9uIFgoJCxKLFEsWixLLFkpe0p8fChKPXt9KTt2YXIgcSxWLEc9SjtpZigicmVmImluIEcpZm9yKFYgaW4gRz17fSxKKVY9PSJyZWYiP3E9SltWXTpHW1ZdPUpbVl07dmFyIEI9e3R5cGU6JCxwcm9wczpHLGtleTpRLHJlZjpxLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjotLUdKLF9faTotMSxfX3U6MCxfX3NvdXJjZTpLLF9fc2VsZjpZfTtpZih0eXBlb2YgJD09ImZ1bmN0aW9uIiYmKHE9JC5kZWZhdWx0UHJvcHMpKWZvcihWIGluIHEpR1tWXT09PXZvaWQgMCYmKEdbVl09cVtWXSk7cmV0dXJuIHQudm5vZGUmJnQudm5vZGUoQiksQn12YXIgYzk9YHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCclM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzknIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsMC40NSknIHN0cm9rZT0ncmdiYSgwLDAsMCwwLjU1KScgc3Ryb2tlLXdpZHRoPScxLjI1JyBmaWx0ZXI9J2Ryb3Atc2hhZG93KDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuNDUpKScvJTNFJTNDL3N2ZyUzRSIpIDEyIDEyLCBwb2ludGVyYCxCSj0xLjAwNCx6Sj0zLE5KPTQsVUo9NSxMSj0xMCxISj0xMTtmdW5jdGlvbiB2Mih7dXJsOiQsd3NVcmw6SixzdHlsZTpRLGltYWdlU3R5bGU6WixjbGFzc05hbWU6SyxvbkhvbWVQcmVzczpZLG9uU3RyZWFtVG91Y2g6cSxvblN0cmVhbU11bHRpVG91Y2g6VixvblN0cmVhbUJ1dHRvbjpHLG9uU3RyZWFtRGlnaXRhbENyb3duOkIsb25TdHJlYW1TY3JvbGw6TixlbmFibGVEaWdpdGFsQ3Jvd246eixzdWJzY3JpYmVGcmFtZTpVLHN0cmVhbUZyYW1lOkgsc3RyZWFtQ29uZmlnOkYsb25TY3JlZW5Db25maWdDaGFuZ2U6TCxoaWRlQ29udHJvbHM6ayxvblN0cmVhbWluZ0NoYW5nZTpDLGNvbm5lY3Rpb25RdWFsaXR5Ok8sY29kZWM6eT0iYXZjYyIsb25BdmNjRXJyb3I6RX0pe2xldCB3PSEhcSxTPXk9PT0iYXZjYyImJnQwKCksUTE9VChudWxsKSxnPVQobnVsbCksaD1UKG51bGwpLEk9VChudWxsKSx1PVQobnVsbCksWjE9VChudWxsKSxbcixNMV09QSghMSksW0oxLGldPUEobnVsbCksW2YsVTFdPUEobnVsbCksWDE9VChudWxsKSxCMT1UKEwpO0IxLmN1cnJlbnQ9TDtsZXQgRjE9VChudWxsKSxbVzEsb109QShudWxsKTtfKCgpPT57bGV0IEQ9RjEuY3VycmVudDtpZighRHx8dHlwZW9mIFJlc2l6ZU9ic2VydmVyPiJ1IilyZXR1cm47bGV0IE09bmV3IFJlc2l6ZU9ic2VydmVyKChSKT0+e2xldCBsPVJbMF0/LmNvbnRlbnRSZWN0O2lmKGwpbyh7d2lkdGg6bC53aWR0aCxoZWlnaHQ6bC5oZWlnaHR9KX0pO3JldHVybiBNLm9ic2VydmUoRCksKCk9Pk0uZGlzY29ubmVjdCgpfSxbXSk7bGV0W2MsZF09QSgwKSxuPVQoMCksW1kxLGJdPUEoITEpLGo9VChudWxsKTtfKCgpPT57aWYoTz09PSJwb29yIil7aWYoYighMCksai5jdXJyZW50KWNsZWFyVGltZW91dChqLmN1cnJlbnQpO2ouY3VycmVudD1zZXRUaW1lb3V0KCgpPT57YighMSksai5jdXJyZW50PW51bGx9LDMwMDApfWVsc2UgaWYoYighMSksai5jdXJyZW50KWNsZWFyVGltZW91dChqLmN1cnJlbnQpLGouY3VycmVudD1udWxsO3JldHVybigpPT57aWYoai5jdXJyZW50KWNsZWFyVGltZW91dChqLmN1cnJlbnQpfX0sW09dKTtsZXQgTjE9YCR7JH0vc3RyZWFtLm1qcGVnYDtfKCgpPT57WDEuY3VycmVudD1udWxsLFUxKG51bGwpfSxbJF0pO2xldCBDMT1QKChELE09InJlcG9ydGVkIik9PntsZXQgUj1mOShYMS5jdXJyZW50LEQsTSk7aWYoIVIpcmV0dXJuO2lmKFgxLmN1cnJlbnQ9Ui5jb25maWcsVTEoUi5jb25maWcpLFIubm90aWZ5UGFyZW50KUIxLmN1cnJlbnQ/LihSLmNvbmZpZyl9LFtdKSxwPVQoQyk7cC5jdXJyZW50PUMsXygoKT0+e3AuY3VycmVudD8uKHIpfSxbcl0pLF8oKCk9PntpZih3JiZGKUMxKEYsImV4dGVybmFsIil9LFt3LEYsQzFdKTtsZXQgZT1UKCExKTtlLmN1cnJlbnQ9cjtsZXQgazE9VChudWxsKSxQMT1UKG51bGwpO18oKCk9PntpZighd3x8IVV8fFMpcmV0dXJuO2xldCBNPXNldFRpbWVvdXQoKCk9PntpZighZS5jdXJyZW50KWkoIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKSxSPXJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiBHMSgpe2xldCBMMT1rMS5jdXJyZW50O2lmKEwxKXtrMS5jdXJyZW50PW51bGw7bGV0IF8xPWguY3VycmVudDtpZihfMSl7aWYoUDEuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKFAxLmN1cnJlbnQpO1AxLmN1cnJlbnQ9TDEsXzEuc3JjPUwxLG4uY3VycmVudCsrfWVsc2UgVVJMLnJldm9rZU9iamVjdFVSTChMMSl9Uj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoRzEpfSksbD1VKChHMSk9PntpZih1MS5jdXJyZW50PURhdGUubm93KCksazEuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKGsxLmN1cnJlbnQpO2lmKGsxLmN1cnJlbnQ9RzEsIWUuY3VycmVudCljbGVhclRpbWVvdXQoTSksTTEoITApLGkobnVsbCl9KTtyZXR1cm4oKT0+e2lmKGNsZWFyVGltZW91dChNKSxjYW5jZWxBbmltYXRpb25GcmFtZShSKSxsPy4oKSxrMS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoazEuY3VycmVudCksazEuY3VycmVudD1udWxsO2lmKFAxLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChQMS5jdXJyZW50KSxQMS5jdXJyZW50PW51bGx9fSxbdyxVLFNdKTtsZXQgZzE9UCgoKT0+e3UxLmN1cnJlbnQ9RGF0ZS5ub3coKSxNMSghMCksaShudWxsKX0sW10pLHAxPVAoKCk9PntpZihuLmN1cnJlbnQrKyx1MS5jdXJyZW50PURhdGUubm93KCksIWUuY3VycmVudClNMSghMCksaShudWxsKX0sW10pO2gzKHt1cmw6JCxlbmFibGVkOlMsY2FudmFzUmVmOmcsb25GaXJzdEZyYW1lOmcxLG9uRnJhbWU6cDEsb25FcnJvcjppLG9uRGVjb2RlckVycm9yOkV9KTtsZXQgajE9UCgoRCk9PntsZXQgTT1qMChYMS5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLFI9TjUoTSxELngsRC55KSxsPUQuZWRnZT09PXZvaWQgMD92b2lkIDA6cTIoTSxELmVkZ2UpLEcxPWw9PT12b2lkIDA/e3R5cGU6RC50eXBlLC4uLlJ9Ont0eXBlOkQudHlwZSwuLi5SLGVkZ2U6bH07aWYodyl7cT8uKEcxKTtyZXR1cm59bGV0IEwxPVoxLmN1cnJlbnQ7aWYoIUwxfHxMMS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBfMT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoRzEpKSx3MT1uZXcgVWludDhBcnJheSgxK18xLmxlbmd0aCk7dzFbMF09ekosdzEuc2V0KF8xLDEpLEwxLnNlbmQodzEpfSxbdyxxXSksYTE9UCgoRCk9PntpZih3KXtHPy4oRCk7cmV0dXJufWxldCBNPVoxLmN1cnJlbnQ7aWYoIU18fE0ucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgUj1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoe2J1dHRvbjpEfSkpLGw9bmV3IFVpbnQ4QXJyYXkoMStSLmxlbmd0aCk7bFswXT1OSixsLnNldChSLDEpLE0uc2VuZChsKX0sW3csR10pLGswPVAoKEQpPT57aWYoIU51bWJlci5pc0Zpbml0ZShEKXx8RD09PTApcmV0dXJuO2lmKHcpe0I/LihEKTtyZXR1cm59bGV0IE09WjEuY3VycmVudDtpZighTXx8TS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBSPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh7ZGVsdGE6RH0pKSxsPW5ldyBVaW50OEFycmF5KDErUi5sZW5ndGgpO2xbMF09TEosbC5zZXQoUiwxKSxNLnNlbmQobCl9LFt3LEJdKSxWMD1QKChELE0sUixsKT0+e2lmKCFOdW1iZXIuaXNGaW5pdGUoRCl8fCFOdW1iZXIuaXNGaW5pdGUoTSl8fEQ9PT0wJiZNPT09MClyZXR1cm47bGV0IEcxPWowKFgxLmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24sTDE9ZzkoRzEsRCxNKSxfMT1ONShHMSxSLGwpLHcxPXtkeDpMMS5keCxkeTpMMS5keSx4Ol8xLngseTpfMS55fTtpZih3KXtOPy4odzEpO3JldHVybn1sZXQgSjA9WjEuY3VycmVudDtpZighSjB8fEowLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IEs1PW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh3MSkpLFAwPW5ldyBVaW50OEFycmF5KDErSzUubGVuZ3RoKTtQMFswXT1ISixQMC5zZXQoSzUsMSksSjAuc2VuZChQMCl9LFt3LE5dKSxEMT1QKChEKT0+e2xldCBNPWowKFgxLmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24sUj1ONShNLEQueDEsRC55MSksbD1ONShNLEQueDIsRC55MiksRzE9e3R5cGU6RC50eXBlLHgxOlIueCx5MTpSLnkseDI6bC54LHkyOmwueX07aWYodyl7Vj8uKEcxKTtyZXR1cm59bGV0IEwxPVoxLmN1cnJlbnQ7aWYoIUwxfHxMMS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBfMT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoRzEpKSx3MT1uZXcgVWludDhBcnJheSgxK18xLmxlbmd0aCk7dzFbMF09VUosdzEuc2V0KF8xLDEpLEwxLnNlbmQodzEpfSxbdyxWXSk7XygoKT0+e2lmKHcpcmV0dXJuO2xldCBEPUo/PyQucmVwbGFjZSgvXmh0dHAvLCJ3cyIpKyIvd3MiLE09bmV3IFdlYlNvY2tldChEKTtNLmJpbmFyeVR5cGU9ImFycmF5YnVmZmVyIixaMS5jdXJyZW50PU0sTS5vbm1lc3NhZ2U9KF8xKT0+e2lmKCEoXzEuZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm47bGV0IHcxPW5ldyBVaW50OEFycmF5KF8xLmRhdGEpO2lmKHcxLmxlbmd0aDwxfHx3MVswXSE9PTEzMClyZXR1cm47dHJ5e0MxKEpTT04ucGFyc2UobmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKHcxLnN1YmFycmF5KDEpKSkpfWNhdGNoe319LE0ub25vcGVuPSgpPT57aWYoIVMpTTEoITApO2kobnVsbCl9LE0ub25jbG9zZT0oKT0+e00xKCExKX0sTS5vbmVycm9yPSgpPT57aSgiV2ViU29ja2V0IGNvbm5lY3Rpb24gZmFpbGVkIiksTTEoITEpfTtsZXQgUj1uZXcgQWJvcnRDb250cm9sbGVyLGw9c2V0SW50ZXJ2YWwoKCk9PntkKG4uY3VycmVudCksbi5jdXJyZW50PTB9LDEwMDApLEcxPSExLEwxPVM/bnVsbDpzZXRUaW1lb3V0KCgpPT57aWYoIUcxKWkoIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKTtpZighUykoYXN5bmMoKT0+e3RyeXtsZXQgdzE9KGF3YWl0IGZldGNoKE4xLHtzaWduYWw6Ui5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIXcxKXJldHVybjtsZXQgSjA9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCItLWZyYW1lIik7d2hpbGUoITApe2xldHtkb25lOks1LHZhbHVlOlAwfT1hd2FpdCB3MS5yZWFkKCk7aWYoSzUpYnJlYWs7aWYoUDApZm9yKGxldCB3NT0wO3c1PD1QMC5sZW5ndGgtSjAubGVuZ3RoO3c1Kyspe2xldCBZNT0hMDtmb3IobGV0IGkwPTA7aTA8SjAubGVuZ3RoO2kwKyspaWYoUDBbdzUraTBdIT09SjBbaTBdKXtZNT0hMTticmVha31pZihZNSl7aWYobi5jdXJyZW50KyssIUcxKXtpZihHMT0hMCxMMSljbGVhclRpbWVvdXQoTDEpfX19fX1jYXRjaHt9fSkoKTtyZXR1cm4oKT0+e2lmKFIuYWJvcnQoKSxjbGVhckludGVydmFsKGwpLEwxKWNsZWFyVGltZW91dChMMSk7TS5jbG9zZSgpLFoxLmN1cnJlbnQ9bnVsbH19LFskLE4xLHcsQzEsSixTXSk7bGV0IHUxPVQoMCk7XygoKT0+e2lmKCF3KXJldHVybjtsZXQgRD0yMDAwLE09KCk9PntsZXQgRzE9dTEuY3VycmVudDtpZighRzF8fCFlLmN1cnJlbnQpcmV0dXJuO2lmKERhdGUubm93KCktRzE+RClNMSghMSl9LFI9c2V0SW50ZXJ2YWwoKCk9PntkKG4uY3VycmVudCksbi5jdXJyZW50PTAsTSgpfSwxMDAwKSxsPSgpPT57aWYoIWRvY3VtZW50LmhpZGRlbilNKCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixsKSwoKT0+e2NsZWFySW50ZXJ2YWwoUiksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsbCl9fSxbd10pO2xldCBDMD1QKCgpPT57aWYoUylyZXR1cm4gZy5jdXJyZW50O3JldHVybiB3P2guY3VycmVudDpRMS5jdXJyZW50fSxbdyxTXSksVjE9UCgoKT0+e3JldHVybiBJLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9DMCgpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKT8/bnVsbH0sW0MwXSksWjA9UCgoRCxNKT0+e2xldCBSPVYxKCk7aWYoIVIpcmV0dXJuO2xldCBsPShNLmNsaWVudFgtUi5sZWZ0KS9SLndpZHRoLEcxPShNLmNsaWVudFktUi50b3ApL1IuaGVpZ2h0O2oxKHt0eXBlOkQseDpsLHk6RzF9KX0sW1YxLGoxXSksYjA9UCgoRCxNKT0+e2xldCBsPVYxKCk/LmhlaWdodHx8MSxHMT1WMihELE0sbCk7aWYoRzE9PT1udWxsKXJldHVybiExO3JldHVybiBrMChHMSksITB9LFtWMSxrMF0pLGgxPVQoITEpLGMxPVQoITEpLHMxPVQoITEpLGUxPVQoe2R4OjAsZHk6MH0pLHQxPVQoITEpLFt5MCx2MF09QSghMSksUzA9VCh7eDowLjUseTowLjV9KSxbJDAsRTFdPUEobnVsbCk7XygoKT0+e2xldCBEPShSKT0+e2lmKFIua2V5PT09IkFsdCIpdjAoITApfSxNPShSKT0+e2lmKFIua2V5PT09IkFsdCIpe2lmKHYwKCExKSwhYzEuY3VycmVudClFMShudWxsKX19O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsRCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixNKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixEKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLE0pfX0sW10pLF8oKCk9PntpZih5MCYmIWMxLmN1cnJlbnQpe2xldCBEPVMwLmN1cnJlbnQ7RTEoe3gxOkQueCx5MTpELnkseDI6MS1ELngseTI6MS1ELnl9KX1lbHNlIGlmKCF5MCYmIWMxLmN1cnJlbnQpRTEobnVsbCl9LFt5MF0pO2xldCBHMD1UKG51bGwpLGYxPVQoITEpLEIwPVQoMCksRjA9UCgoRCxNKT0+e2YxLmN1cnJlbnQ9ITA7bGV0IFI9RzAuY3VycmVudDtpZihSKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEIwLmN1cnJlbnQpLEIwLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57Ui5zdHlsZS5sZWZ0PWAke0QqMTAwfSVgLFIuc3R5bGUudG9wPWAke00qMTAwfSVgLFIuc3R5bGUuZGlzcGxheT0iYmxvY2sifSl9LFtdKSxRMD1QKChELE0pPT57aWYoIWYxLmN1cnJlbnQpcmV0dXJuO2xldCBSPUcwLmN1cnJlbnQ7aWYoUiljYW5jZWxBbmltYXRpb25GcmFtZShCMC5jdXJyZW50KSxCMC5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e1Iuc3R5bGUubGVmdD1gJHtEKjEwMH0lYCxSLnN0eWxlLnRvcD1gJHtNKjEwMH0lYH0pfSxbXSksQTA9UCgoKT0+e2YxLmN1cnJlbnQ9ITE7bGV0IEQ9RzAuY3VycmVudDtpZihEKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEIwLmN1cnJlbnQpLEQuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LFtdKSxXPVAoKEQpPT57aWYoZjEuY3VycmVudHx8YzEuY3VycmVudClyZXR1cm4hMTtsZXQgTT1WMSgpO2lmKCFNKXJldHVybiExO2xldCBSPXYzKEQuZGVsdGFYLEQuZGVsdGFNb2RlLE0ud2lkdGgpLGw9djMoRC5kZWx0YVksRC5kZWx0YU1vZGUsTS5oZWlnaHQpO2lmKFI9PT0wJiZsPT09MClyZXR1cm4hMTtsZXQgRzE9TWF0aC5taW4oTWF0aC5tYXgoKEQuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsMCksMSksTDE9TWF0aC5taW4oTWF0aC5tYXgoKEQuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQsMCksMSk7cmV0dXJuIFYwKFIvTS53aWR0aCxsL00uaGVpZ2h0LEcxLEwxKSwhMH0sW1YxLFYwXSk7XygoKT0+e2xldCBEPXUuY3VycmVudDtpZighRClyZXR1cm47bGV0IE09KFIpPT57aWYoISh6P2IwKFIuZGVsdGFZLFIuZGVsdGFNb2RlKTpXKFIpKSlyZXR1cm47Ui5wcmV2ZW50RGVmYXVsdCgpLFIuc3RvcFByb3BhZ2F0aW9uKCl9O3JldHVybiBELmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixNLHtwYXNzaXZlOiExfSksKCk9PkQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLE0pfSxbeixiMCxXXSk7bGV0IG09VCgwKSxhPVQobnVsbCksSDE9UCgoKT0+e2xldCBEPURhdGUubm93KCksTT1ELW0uY3VycmVudDtpZihtLmN1cnJlbnQ9RCxNPDMwMCl7aWYoYS5jdXJyZW50KWNsZWFyVGltZW91dChhLmN1cnJlbnQpLGEuY3VycmVudD1udWxsO2lmKFkpWSgpO2Vsc2UgYTEoImFwcF9zd2l0Y2hlciIpfWVsc2UgYS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntpZihZKVkoKTtlbHNlIGExKCJob21lIik7YS5jdXJyZW50PW51bGx9LDMwMCl9LFthMSxZXSksQTE9ajAoZiksejE9QTEuZGlzcGxheUNvbmZpZyxPMT0oKCk9PntpZighejF8fCFXMSlyZXR1cm4gbnVsbDtpZihXMS53aWR0aD09PTB8fFcxLmhlaWdodD09PTApcmV0dXJuIG51bGw7bGV0IEQ9TWF0aC5taW4oVzEud2lkdGgvejEud2lkdGgsVzEuaGVpZ2h0L3oxLmhlaWdodCk7cmV0dXJue3dpZHRoOnoxLndpZHRoKkQsaGVpZ2h0OnoxLmhlaWdodCpEfX0pKCksWDA9QTEucm90YXRpb25EZWdyZWVzLGkxPUExLm5lZWRzQ3NzUm90YXRpb24mJk1hdGguYWJzKFgwKT09PTkwLG8xPVosejA9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiI1MCUiLGxlZnQ6IjUwJSIsd2lkdGg6aTEmJk8xP2Ake08xLmhlaWdodH1weGA6IjEwMCUiLGhlaWdodDppMSYmTzE/YCR7TzEud2lkdGh9cHhgOiIxMDAlIix0cmFuc2Zvcm06YHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSR7WDA9PT0wPyIiOmAgcm90YXRlKCR7WDB9ZGVnKWB9YCx0cmFuc2Zvcm1PcmlnaW46ImNlbnRlciBjZW50ZXIiLGN1cnNvcjpjOSxkaXNwbGF5OiJibG9jayIsdXNlclNlbGVjdDoibm9uZSIsV2Via2l0VXNlclNlbGVjdDoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUiLC4uLlosLi4uWDA9PT0wP3t9Ontib3JkZXJSYWRpdXM6MCxjb3JuZXJTaGFwZTp2b2lkIDB9fSxOMD17Li4uejAsdHJhbnNmb3JtOmAke3owLnRyYW5zZm9ybT8/IiJ9IHNjYWxlKCR7Qkp9KWB9O3JldHVybiBYKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixmbGV4OjEsLi4uaz97fTp7Ym9yZGVyOmAxcHggc29saWQgJHtUMSgwLjEyKX1gfSxvdmVyZmxvdzoiaGlkZGVuIixtaW5XaWR0aDowLG1pbkhlaWdodDowLC4uLlF9LGNsYXNzTmFtZTpLLGNoaWxkcmVuOltYKCJkaXYiLHtyZWY6RjEsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsZmxleDoxLG1pbkhlaWdodDowLG1pbldpZHRoOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIn0sY2hpbGRyZW46WCgiZGl2Iix7cmVmOkksc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsd2lkdGg6TzE/YCR7TzEud2lkdGh9cHhgOiIxMDAlIixoZWlnaHQ6TzE/YCR7TzEuaGVpZ2h0fXB4YDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsYm9yZGVyUmFkaXVzOm8xPy5ib3JkZXJSYWRpdXMsY29ybmVyU2hhcGU6bzE/LmNvcm5lclNoYXBlfSxjaGlsZHJlbjpbUz9YKCJjYW52YXMiLHtyZWY6ZyxzdHlsZTpOMH0pOlgoImltZyIse3JlZjpRMSxzcmM6dz92b2lkIDA6TjEsZHJhZ2dhYmxlOiExLG9uTG9hZDooRCk9PntsZXQgTT1ELmN1cnJlbnRUYXJnZXQ7aWYoTS5uYXR1cmFsV2lkdGg+MCYmTS5uYXR1cmFsSGVpZ2h0PjApQzEoe3dpZHRoOk0ubmF0dXJhbFdpZHRoLGhlaWdodDpNLm5hdHVyYWxIZWlnaHR9KX0sc3R5bGU6dz97ZGlzcGxheToibm9uZSJ9OnowfSksdyYmIVMmJlgoImltZyIse3JlZjpoLGRyYWdnYWJsZTohMSxvbkxvYWQ6KEQpPT57bGV0IE09RC5jdXJyZW50VGFyZ2V0O2lmKE0ubmF0dXJhbFdpZHRoPjAmJk0ubmF0dXJhbEhlaWdodD4wKUMxKHt3aWR0aDpNLm5hdHVyYWxXaWR0aCxoZWlnaHQ6TS5uYXR1cmFsSGVpZ2h0fSl9LHN0eWxlOnowfSksWCgiZGl2Iix7cmVmOnUsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxjdXJzb3I6YzksdG91Y2hBY3Rpb246Im5vbmUifSxvbk1vdXNlRG93bjooRCk9PntELnByZXZlbnREZWZhdWx0KCk7bGV0IE09VjEoKTtpZighTSlyZXR1cm47bGV0IFI9KEQuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsbD0oRC5jbGllbnRZLU0udG9wKS9NLmhlaWdodDtpZihELmFsdEtleSl7YzEuY3VycmVudD0hMCxzMS5jdXJyZW50PUQuc2hpZnRLZXk7bGV0IEwxPXt4MTpSLHkxOmwseDI6MS1SLHkyOjEtbH07ZTEuY3VycmVudD17ZHg6MS1SLVIsZHk6MS1sLWx9LEUxKEwxKSxEMSh7dHlwZToiYmVnaW4iLC4uLkwxfSk7cmV0dXJufUYwKFIsbCk7bGV0IEcxPVkyKGwpO2lmKEcxIT09dm9pZCAwKWgxLmN1cnJlbnQ9ITAsajEoe3R5cGU6ImJlZ2luIix4OlIseTpsLGVkZ2U6RzF9KTtlbHNlIGgxLmN1cnJlbnQ9ITEsWjAoImJlZ2luIixEKX0sb25Nb3VzZU1vdmU6KEQpPT57bGV0IE09VjEoKTtpZighTSlyZXR1cm47bGV0IFI9KEQuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsbD0oRC5jbGllbnRZLU0udG9wKS9NLmhlaWdodDtpZihTMC5jdXJyZW50PXt4OlIseTpsfSxELmJ1dHRvbnM9PT0wKXtpZihELmFsdEtleSlFMSh7eDE6Uix5MTpsLHgyOjEtUix5MjoxLWx9KTtyZXR1cm59aWYoYzEuY3VycmVudCl7bGV0IEcxO2lmKHMxLmN1cnJlbnQpe2xldCBMMT1lMS5jdXJyZW50O0cxPXt4MTpSLHkxOmwseDI6UitMMS5keCx5MjpsK0wxLmR5fX1lbHNlIEcxPXt4MTpSLHkxOmwseDI6MS1SLHkyOjEtbH07RTEoRzEpLEQxKHt0eXBlOiJtb3ZlIiwuLi5HMX0pO3JldHVybn1pZihRMChSLGwpLGgxLmN1cnJlbnQpajEoe3R5cGU6Im1vdmUiLHg6Uix5OmwsZWRnZTp1MH0pO2Vsc2UgWjAoIm1vdmUiLEQpfSxvbk1vdXNlVXA6KEQpPT57aWYoYzEuY3VycmVudCl7bGV0IE09VjEoKTtpZihNKXtsZXQgUj0oRC5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCxsPShELmNsaWVudFktTS50b3ApL00uaGVpZ2h0O2lmKHMxLmN1cnJlbnQpe2xldCBHMT1lMS5jdXJyZW50O0QxKHt0eXBlOiJlbmQiLHgxOlIseTE6bCx4MjpSK0cxLmR4LHkyOmwrRzEuZHl9KX1lbHNlIEQxKHt0eXBlOiJlbmQiLHgxOlIseTE6bCx4MjoxLVIseTI6MS1sfSl9aWYoYzEuY3VycmVudD0hMSwhRC5hbHRLZXkpRTEobnVsbCk7cmV0dXJufWlmKEEwKCksaDEuY3VycmVudCl7bGV0IE09VjEoKTtpZihNKXtsZXQgUj0oRC5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCxsPShELmNsaWVudFktTS50b3ApL00uaGVpZ2h0O2oxKHt0eXBlOiJlbmQiLHg6Uix5OmwsZWRnZTp1MH0pfWgxLmN1cnJlbnQ9ITE7cmV0dXJufVowKCJlbmQiLEQpfSxvbk1vdXNlTGVhdmU6KEQpPT57aWYoYzEuY3VycmVudCl7aWYoJDApRDEoe3R5cGU6ImVuZCIsLi4uJDB9KTtjMS5jdXJyZW50PSExLEUxKG51bGwpO3JldHVybn1pZihBMCgpLGgxLmN1cnJlbnQpe2xldCBNPVYxKCk7aWYoTSl7bGV0IFI9KEQuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsbD0oRC5jbGllbnRZLU0udG9wKS9NLmhlaWdodDtqMSh7dHlwZToiZW5kIix4OlIseTpsLGVkZ2U6dTB9KX1oMS5jdXJyZW50PSExO3JldHVybn1pZihELmJ1dHRvbnM+MClaMCgiZW5kIixEKTtFMShudWxsKX0sb25Ub3VjaFN0YXJ0OihEKT0+e0QucHJldmVudERlZmF1bHQoKTtsZXQgTT1WMSgpO2lmKCFNKXJldHVybjtpZihELnRvdWNoZXMubGVuZ3RoPj0yKXtBMCgpO2xldCBfMT1ELnRvdWNoZXNbMF0sdzE9RC50b3VjaGVzWzFdLEowPXt4MTooXzEuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgseTE6KF8xLmNsaWVudFktTS50b3ApL00uaGVpZ2h0LHgyOih3MS5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCx5MjoodzEuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHR9O2lmKCF0MS5jdXJyZW50JiYhaDEuY3VycmVudClqMSh7dHlwZToiZW5kIix4OkowLngxLHk6SjAueTF9KTt0MS5jdXJyZW50PSEwLGMxLmN1cnJlbnQ9ITAsaDEuY3VycmVudD0hMSxFMShKMCksRDEoe3R5cGU6ImJlZ2luIiwuLi5KMH0pO3JldHVybn1sZXQgUj1ELnRvdWNoZXNbMF07aWYoIVIpcmV0dXJuO2xldCBsPShSLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLEcxPShSLmNsaWVudFktTS50b3ApL00uaGVpZ2h0O0YwKGwsRzEpO2xldCBMMT1ZMihHMSk7aWYoTDEhPT12b2lkIDApaDEuY3VycmVudD0hMCxqMSh7dHlwZToiYmVnaW4iLHg6bCx5OkcxLGVkZ2U6TDF9KTtlbHNlIGgxLmN1cnJlbnQ9ITEsajEoe3R5cGU6ImJlZ2luIix4OmwseTpHMX0pfSxvblRvdWNoTW92ZTooRCk9PntELnByZXZlbnREZWZhdWx0KCk7bGV0IE09VjEoKTtpZighTSlyZXR1cm47aWYodDEuY3VycmVudCYmRC50b3VjaGVzLmxlbmd0aD49Mil7bGV0IEwxPUQudG91Y2hlc1swXSxfMT1ELnRvdWNoZXNbMV0sdzE9e3gxOihMMS5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCx5MTooTDEuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQseDI6KF8xLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLHkyOihfMS5jbGllbnRZLU0udG9wKS9NLmhlaWdodH07RTEodzEpLEQxKHt0eXBlOiJtb3ZlIiwuLi53MX0pO3JldHVybn1sZXQgUj1ELnRvdWNoZXNbMF07aWYoIVIpcmV0dXJuO2xldCBsPShSLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLEcxPShSLmNsaWVudFktTS50b3ApL00uaGVpZ2h0O2lmKFEwKGwsRzEpLGgxLmN1cnJlbnQpajEoe3R5cGU6Im1vdmUiLHg6bCx5OkcxLGVkZ2U6dTB9KTtlbHNlIGoxKHt0eXBlOiJtb3ZlIix4OmwseTpHMX0pfSxvblRvdWNoRW5kOihEKT0+e0QucHJldmVudERlZmF1bHQoKTtsZXQgTT1WMSgpO2lmKCFNKXJldHVybjtpZih0MS5jdXJyZW50KXtpZihELnRvdWNoZXMubGVuZ3RoPDIpe2xldCBMMT1ELmNoYW5nZWRUb3VjaGVzWzBdLF8xPSQwO2lmKEwxJiZfMSlEMSh7dHlwZToiZW5kIix4MTooTDEuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgseTE6KEwxLmNsaWVudFktTS50b3ApL00uaGVpZ2h0LHgyOl8xLngyLHkyOl8xLnkyfSk7ZWxzZSBpZihfMSlEMSh7dHlwZToiZW5kIiwuLi5fMX0pO3QxLmN1cnJlbnQ9ITEsYzEuY3VycmVudD0hMSxFMShudWxsKX1yZXR1cm59bGV0IFI9RC5jaGFuZ2VkVG91Y2hlc1swXTtpZighUilyZXR1cm47bGV0IGw9KFIuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsRzE9KFIuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQ7aWYoQTAoKSxoMS5jdXJyZW50KWoxKHt0eXBlOiJlbmQiLHg6bCx5OkcxLGVkZ2U6dTB9KSxoMS5jdXJyZW50PSExO2Vsc2UgajEoe3R5cGU6ImVuZCIseDpsLHk6RzF9KX19KSxYKCJkaXYiLHtyZWY6RzAsImRhdGEtdGVzdGlkIjoidG91Y2gtaW5kaWNhdG9yIixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJub25lIix3aWR0aDoyNCxoZWlnaHQ6MjQsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoNTksMTMwLDI0NiwwLjUpIixib3hTaGFkb3c6IjAgMCA4cHggcmdiYSg1OSwxMzAsMjQ2LDAuMykiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19KSwkMCYmWChLMSx7Y2hpbGRyZW46W1goImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOnI5KCQwLngxLCQwLnkxKX0pLFgoImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOnI5KCQwLngyLCQwLnkyKX0pXX0pLCFyJiYhSjEmJlgoImRpdiIse3N0eWxlOnsuLi5pOSwuLi5afHx7fX0sY2hpbGRyZW46WCgic3BhbiIse3N0eWxlOntjb2xvcjoiIzg4OCIsZm9udFNpemU6MTR9LGNoaWxkcmVuOiJDb25uZWN0aW5nLi4uIn0pfSksSjEmJlgoImRpdiIse3N0eWxlOmk5LGNoaWxkcmVuOlgoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmNDQiLGZvbnRTaXplOjE0LHBhZGRpbmc6MjAsdGV4dEFsaWduOiJjZW50ZXIifSxjaGlsZHJlbjpKMX0pfSksWTEmJlgoImRpdiIse3N0eWxlOmtKLGNoaWxkcmVuOlgoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmYmJmMjQiLGZvbnRTaXplOjEzLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSJ9LGNoaWxkcmVuOiJTbG93IGNvbm5lY3Rpb24ifSl9KV19KX0pLCFrJiZYKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIscGFkZGluZzoiNHB4IDhweCIsYm9yZGVyVG9wOmAxcHggc29saWQgJHtUMSgwLjEyKX1gfSxjaGlsZHJlbjpbWCgiYnV0dG9uIix7b25DbGljazpIMSxzdHlsZTp7YmFja2dyb3VuZDoibm9uZSIsYm9yZGVyOmAxcHggc29saWQgJHtUMSgwLjIpfWAsY29sb3I6ZDEoMC42NSksZm9udFNpemU6MTEsZm9udEZhbWlseToibW9ub3NwYWNlIixwYWRkaW5nOiIycHggMTBweCIsY3Vyc29yOiJwb2ludGVyIixib3JkZXJSYWRpdXM6NH0sY2hpbGRyZW46IkhvbWUifSksWCgic3BhbiIse3N0eWxlOntjb2xvcjpjPjA/IiM0ZjQiOiIjODg4Iixmb250U2l6ZToxMixmb250RmFtaWx5OiJtb25vc3BhY2UiLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjZ9LGNoaWxkcmVuOltPJiZYKCJzcGFuIix7ImRhdGEtdGVzdGlkIjoicXVhbGl0eS1kb3QiLHN0eWxlOnt3aWR0aDo4LGhlaWdodDo4LGJvcmRlclJhZGl1czoiNTAlIixkaXNwbGF5OiJpbmxpbmUtYmxvY2siLGJhY2tncm91bmQ6Tz09PSJnb29kIj8iIzRhZGU4MCI6Tz09PSJkZWdyYWRlZCI/IiNmYWNjMTUiOiIjZWY0NDQ0In19KSxjLCIgZnBzIl19KV19KV19KX12YXIga0o9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjgsbGVmdDoiNTAlIix0cmFuc2Zvcm06InRyYW5zbGF0ZVgoLTUwJSkiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC43KSIsYm9yZGVyUmFkaXVzOjYscGFkZGluZzoiNHB4IDEycHgiLHBvaW50ZXJFdmVudHM6Im5vbmUifSxpOT17cG9zaXRpb246ImFic29sdXRlIixpbnNldDowLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsYmFja2dyb3VuZDoicmdiYSgwLDAsMCwwLjgpIn0sbzk9MjA7ZnVuY3Rpb24gcjkoJCxKKXtyZXR1cm57cG9zaXRpb246ImFic29sdXRlIixsZWZ0OmAkeyQqMTAwfSVgLHRvcDpgJHtKKjEwMH0lYCx3aWR0aDpvOSxoZWlnaHQ6bzksYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoMjU1LDI1NSwyNTUsMC40NSkiLGJvcmRlcjoiMS4yNXB4IHNvbGlkIHJnYmEoMCwwLDAsMC41NSkiLGJveFNoYWRvdzoiMCAxcHggM3B4IHJnYmEoMCwwLDAsMC40NSkiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19ZnVuY3Rpb24gRTAoJCl7aWYoISQpcmV0dXJuImlwaG9uZSI7bGV0IEo9JC50b0xvd2VyQ2FzZSgpO2lmKEouaW5jbHVkZXMoImlwYWQiKSlyZXR1cm4iaXBhZCI7aWYoSi5pbmNsdWRlcygid2F0Y2giKSlyZXR1cm4id2F0Y2giO2lmKEouaW5jbHVkZXMoInZpc2lvbiIpKXJldHVybiJ2aXNpb24iO3JldHVybiJpcGhvbmUifXZhciBTMT17aXBob25lOnt3aWR0aDo0MjcsaGVpZ2h0Ojg4MSxiZXplbFg6MTgsYmV6ZWxZOjE4LGlubmVyUmFkaXVzOjU1fSxpcGFkOnt3aWR0aDo0MzAsaGVpZ2h0OjYwNSxiZXplbFg6MTYsYmV6ZWxZOjE2LGlubmVyUmFkaXVzOjEyfSx3YXRjaDp7d2lkdGg6Mjc0LGhlaWdodDozMjIsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czo3OX0sdmlzaW9uOnt3aWR0aDo2NDAsaGVpZ2h0OjQwMCxiZXplbFg6MTIsYmV6ZWxZOjEyLGlubmVyUmFkaXVzOjMyfX0seUEwPVMxLmlwaG9uZS53aWR0aCxTQTA9UzEuaXBob25lLmhlaWdodCx4QTA9UzEuaXBob25lLmJlemVsWCxSQTA9UzEuaXBob25lLmJlemVsWSxqQTA9UzEuaXBob25lLmlubmVyUmFkaXVzLG45PXsiaVBob25lIDE3IFBybyBNYXgiOnt3aWR0aDoxMzIwLGhlaWdodDoyODY4fSwiaVBob25lIDE3IFBybyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgMTciOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIEFpciI6e3dpZHRoOjEyNjAsaGVpZ2h0OjI3MzZ9LCJpUGhvbmUgRHVvIjp7d2lkdGg6MTM5OCxoZWlnaHQ6MjAzNH0sImlQaG9uZSAxNiBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNiBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE2IFBsdXMiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE2Ijp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNmUiOnt3aWR0aDoxMTcwLGhlaWdodDoyNTMyfSwiaVBob25lIDE1IFBybyBNYXgiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE1IFBybyI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGhvbmUgMTUgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBhZCBQcm8gMTMtaW5jaCAoTTUpIjp7d2lkdGg6MjA2NCxoZWlnaHQ6Mjc1Mn0sImlQYWQgUHJvIDExLWluY2ggKE01KSI6e3dpZHRoOjE2NjgsaGVpZ2h0OjI0MjB9LCJpUGFkIFBybyAxMy1pbmNoIChNNCkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTQpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgQWlyIDEzLWluY2ggKE0zKSI6e3dpZHRoOjIwNDgsaGVpZ2h0OjI3MzJ9LCJpUGFkIEFpciAxMS1pbmNoIChNMykiOnt3aWR0aDoxNjQwLGhlaWdodDoyMzYwfSwiaVBhZCAoQTE2KSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIG1pbmkgKEExNyBQcm8pIjp7d2lkdGg6MTQ4OCxoZWlnaHQ6MjI2Nn0sIkFwcGxlIFdhdGNoIFVsdHJhIDMgKDQ5bW0pIjp7d2lkdGg6NDIyLGhlaWdodDo1MTR9LCJBcHBsZSBXYXRjaCBVbHRyYSAyICg0OW1tKSI6e3dpZHRoOjQxMCxoZWlnaHQ6NTAyfSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFIDMgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBXYXRjaCBTRSAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFICg0MG1tKSI6e3dpZHRoOjMyNCxoZWlnaHQ6Mzk0fSwiQXBwbGUgVmlzaW9uIFBybyI6e3dpZHRoOjE5MjAsaGVpZ2h0OjEwODB9fTtmdW5jdGlvbiBnMigkLEope2xldCBRPSQmJiQud2lkdGg+MCYmJC5oZWlnaHQ+MD8kOkosWj16NShRKTtpZihaKXJldHVybmAke1oud2lkdGh9IC8gJHtaLmhlaWdodH1gO3JldHVybmAke1MxLmlwaG9uZS53aWR0aC0yKlMxLmlwaG9uZS5iZXplbFh9IC8gJHtTMS5pcGhvbmUuaGVpZ2h0LTIqUzEuaXBob25lLmJlemVsWX1gfWZ1bmN0aW9uIFU1KCQ9ImlwaG9uZSIsSil7bGV0IFE9Sj9uOVtKXTpudWxsO2lmKFEpcmV0dXJuIFE7bGV0IFo9UzFbJF07cmV0dXJue3dpZHRoOloud2lkdGgtMipaLmJlemVsWCxoZWlnaHQ6Wi5oZWlnaHQtMipaLmJlemVsWX19ZnVuY3Rpb24gTDUoJD0iaXBob25lIixKKXtpZihsMChKKSlzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gNzIwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2Nhc2Uid2F0Y2giOnJldHVybiAyMDA7ZGVmYXVsdDpyZXR1cm4gNjIwfXN3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiA0MDA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtjYXNlInZpc2lvbiI6cmV0dXJuIDU4MDtkZWZhdWx0OnJldHVybiAzMjB9fWZ1bmN0aW9uIGgyKCQ9ImlwaG9uZSIsSil7bGV0IFE9UzFbJF0sWj1RLndpZHRoLTIqUS5iZXplbFgsSz1RLmhlaWdodC0yKlEuYmV6ZWxZO2lmKFo8SyYmbDAoSikpcmV0dXJuYCR7US5pbm5lclJhZGl1cy9LKjEwMH0lIC8gJHtRLmlubmVyUmFkaXVzL1oqMTAwfSVgO3JldHVybmAke1EuaW5uZXJSYWRpdXMvWioxMDB9JSAvICR7US5pbm5lclJhZGl1cy9LKjEwMH0lYH1mdW5jdGlvbiBhOSgkKXtsZXQgSj1TMVskLnR5cGVdLFE9Si53aWR0aC0yKkouYmV6ZWxYLFo9Si5oZWlnaHQtMipKLmJlemVsWSxLLFk7aWYoUTxaJiZsMCgkLmNvbmZpZz8/bnVsbCkpSz1KLmlubmVyUmFkaXVzL1osWT1KLmlubmVyUmFkaXVzL1E7ZWxzZSBLPUouaW5uZXJSYWRpdXMvUSxZPUouaW5uZXJSYWRpdXMvWjtsZXQgcT1LKiQuY29udGFpbmVyV2lkdGgsVj1ZKiQuY29udGFpbmVySGVpZ2h0LEc9TWF0aC5zcXJ0KE1hdGgubWF4KHEqViwwKSk7cmV0dXJue3J4OnEscnk6VixyR2VvbTpHfX12YXIgRko9MTMsQUo9NjI7ZnVuY3Rpb24gcDMoJCl7bGV0e2NvbnRhaW5lcldpZHRoOkosY29udGFpbmVySGVpZ2h0OlF9PSQsWj0oayk9PmsudG9GaXhlZCgzKSxLPShrLEMpPT57bGV0IE89Qyx5PUMsRT1BSi8yKihNYXRoLlBJLzE4MCksdz0yMjUqTWF0aC5QSS8xODAsUz13K0UsUTE9dy1FLGc9TytrKk1hdGguY29zKFMpLGg9eStrKk1hdGguc2luKFMpLEk9TytrKk1hdGguY29zKFExKSx1PXkraypNYXRoLnNpbihRMSksWjE9YE0gJHtaKGcpfSAke1ooaCl9IEEgJHtaKGspfSAke1ooayl9IDAgMCAxICR7WihJKX0gJHtaKHUpfWAscj1gTSAke1ooSSl9ICR7Wih1KX0gQSAke1ooayl9ICR7WihrKX0gMCAwIDAgJHtaKGcpfSAke1ooaCl9YDtyZXR1cm57ZDpaMSxkRmlsbDpyfX07aWYoIShKPjApfHwhKFE+MCkpe2xldCBrPUZKLEM9TWF0aC5jZWlsKGsrMTQpLHtkOk8sZEZpbGw6eX09SyhrLEMpO3JldHVybntkOk8sZEZpbGw6eSx2aWV3Qm94U2l6ZTpDfX1sZXR7ckdlb206WX09YTkoJCkscT1NYXRoLm1heCgyLjIsTWF0aC5taW4oNS4yLDAuMDExKk1hdGgubWluKEosUSkpKSxWPVkqMC4zNCtxLEc9TWF0aC5taW4oSixRKSxCPU1hdGgubWluKDIyLE1hdGgubWF4KDEyLEcqMC4wNTIpKTtWPU1hdGgubWluKDI0LE1hdGgubWF4KDEyLFYsQikpO2xldCBIPU1hdGgubWF4KDI2LE1hdGguY2VpbChWKzEzKSkse2Q6RixkRmlsbDpMfT1LKFYsSCk7cmV0dXJue2Q6RixkRmlsbDpMLHZpZXdCb3hTaXplOkh9fWZ1bmN0aW9uIGYyKHt0eXBlOiQ9ImlwaG9uZSIsc3RyZWFtaW5nOko9ITF9KXtzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gWChNSix7c3RyZWFtaW5nOkp9KTtjYXNlIndhdGNoIjpyZXR1cm4gWChXSix7c3RyZWFtaW5nOkp9KTtjYXNlInZpc2lvbiI6cmV0dXJuIFgoUEose3N0cmVhbWluZzpKfSk7ZGVmYXVsdDpyZXR1cm4gWChPSix7c3RyZWFtaW5nOkp9KX19ZnVuY3Rpb24gT0ooe3N0cmVhbWluZzokPSExfSl7cmV0dXJuIFgoInN2ZyIse3ZpZXdCb3g6IjAgMCA0MjcgODgxIixzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W1goImRlZnMiLHtjaGlsZHJlbjpbWCgiZmlsdGVyIix7aWQ6ImNocm9tZS1maWx0ZXIwIix4OiItMC4xNjY5OTIiLHk6IjAuMTY2NTA0Iix3aWR0aDoiNDI3IixoZWlnaHQ6Ijg4MC42NjciLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1goImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFgoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxYKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXIifSldfSksWCgiZmlsdGVyIix7aWQ6ImNocm9tZS1maWx0ZXIxIix4OiI2LjMzMjM2Iix5OiI2LjMzMzgyIix3aWR0aDoiNDE0IixoZWlnaHQ6Ijg2OCIsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbWCgiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksWCgiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLFgoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjMzMzMzMyIscmVzdWx0OiJlZmZlY3QxX2ZvcmVncm91bmRCbHVyIn0pXX0pXX0pLFgoInJlY3QiLHt4OiIzLjgzMjY4Iix5OiIzLjgzMzY2Iix3aWR0aDoiNDE5IixoZWlnaHQ6Ijg3MyIscng6IjY2LjE2NjciLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjQuMzMzMzMifSksWCgicmVjdCIse3g6IjAuODMzMzMzIix5OiIwLjgzMzMzMyIsd2lkdGg6IjQyNSIsaGVpZ2h0OiI4NzkiLHJ4OiI2OS4xNjY3IixzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NjY3In0pLFgoImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCNjaHJvbWUtZmlsdGVyMCkiLGNoaWxkcmVuOlgoInJlY3QiLHt4OiIxLjY2NjAyIix5OiIyIix3aWR0aDoiNDIzLjMzMyIsaGVpZ2h0OiI4NzciLHJ4OiI2OC42NjY3IixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NjY3In0pfSksWCgiZyIse29wYWNpdHk6IjAuOCIsZmlsdGVyOiJ1cmwoI2Nocm9tZS1maWx0ZXIxKSIsY2hpbGRyZW46WCgicmVjdCIse3g6IjcuMzMyNjgiLHk6IjcuMzMzNjYiLHdpZHRoOiI0MTIiLGhlaWdodDoiODY2IixyeDoiNjIuNjY2NyIsc3Ryb2tlOiIjNjQ2NDY0IixzdHJva2VXaWR0aDoiMC42NjY2NjcifSl9KSxYKCJyZWN0Iix7eDoiMTUxLjY2NiIseToiMzEuNjY3Iix3aWR0aDoiMTIzLjMzMyIsaGVpZ2h0OiIzNiIscng6IjE4IixmaWxsOiJibGFjayIsc3R5bGU6e29wYWNpdHk6JD8wOjEsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pXX0pfWZ1bmN0aW9uIE1KKHtzdHJlYW1pbmc6JD0hMX0pe2xldCBKPVMxLmlwYWQud2lkdGgsUT1TMS5pcGFkLmhlaWdodCxaPTMwLEs9MjY7cmV0dXJuIFgoInN2ZyIse3ZpZXdCb3g6YDAgMCAke0p9ICR7UX1gLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbWCgiZGVmcyIse2NoaWxkcmVuOltYKCJmaWx0ZXIiLHtpZDoiaXBhZC1nbG93MCIseDoiMCIseToiMCIsd2lkdGg6SixoZWlnaHQ6USxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltYKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxYKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksWCgiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJibHVyIn0pXX0pLFgoImZpbHRlciIse2lkOiJpcGFkLWdsb3cxIix4OiI1Iix5OiI1Iix3aWR0aDpKLTEwLGhlaWdodDpRLTEwLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1goImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFgoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxYKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC4zMzMzMzMiLHJlc3VsdDoiYmx1ciJ9KV19KV19KSxYKCJyZWN0Iix7eDoiMy41Iix5OiIzLjUiLHdpZHRoOkotNyxoZWlnaHQ6US03LHJ4OjI2LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjQifSksWCgicmVjdCIse3g6IjAuODMzIix5OiIwLjgzMyIsd2lkdGg6Si0xLjY2NixoZWlnaHQ6US0xLjY2NixyeDozMCxzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KSxYKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjaXBhZC1nbG93MCkiLGNoaWxkcmVuOlgoInJlY3QiLHt4OiIxLjUiLHk6IjEuNSIsd2lkdGg6Si0zLGhlaWdodDpRLTMscng6Mjksc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjYifSl9KSxYKCJnIix7b3BhY2l0eToiMC44IixmaWx0ZXI6InVybCgjaXBhZC1nbG93MSkiLGNoaWxkcmVuOlgoInJlY3QiLHt4OiI2Iix5OiI2Iix3aWR0aDpKLTEyLGhlaWdodDpRLTEyLHJ4OjI0LHN0cm9rZToiIzY0NjQ2NCIsc3Ryb2tlV2lkdGg6IjAuNjY2In0pfSksWCgiY2lyY2xlIix7Y3g6Si8yLGN5OlMxLmlwYWQuYmV6ZWxZLzIrMSxyOiIzIixmaWxsOiIjMWExYTFhIixzdHlsZTp7b3BhY2l0eTokPzA6MC44LHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KSxYKCJyZWN0Iix7eDooSi0xMjApLzIseTpRLVMxLmlwYWQuYmV6ZWxZLzItMi41LHdpZHRoOiIxMjAiLGhlaWdodDoiNSIscng6IjIuNSIsZmlsbDoid2hpdGUiLHN0eWxlOntvcGFjaXR5OiQ/MDowLjM1LG1peEJsZW5kTW9kZToiZGlmZmVyZW5jZSIsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pXX0pfWZ1bmN0aW9uIFdKKHtzdHJlYW1pbmc6JD0hMX0pe2xldCBKPVMxLndhdGNoLndpZHRoLFE9UzEud2F0Y2guaGVpZ2h0LFo9ODgsSz04MixZPTgscT0zNixWPVEvMi0xOC0xNixHPTIyLEI9US8yLTExKzE2O3JldHVybiBYKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtKfSAke1F9YCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsb3ZlcmZsb3c6InZpc2libGUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltYKCJkZWZzIix7Y2hpbGRyZW46WCgiZmlsdGVyIix7aWQ6IndhdGNoLWdsb3cwIix4OiIwIix5OiIwIix3aWR0aDpKKzEyLGhlaWdodDpRLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1goImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFgoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxYKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImJsdXIifSldfSl9KSxYKCJyZWN0Iix7eDpKLTIseTpWLHdpZHRoOjgsaGVpZ2h0OjM2LHJ4OiIzIixmaWxsOiIjMmEyYTJjIixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxIn0pLFgoInJlY3QiLHt4OkotMSx5OkIsd2lkdGg6NixoZWlnaHQ6MjIscng6IjIuNSIsZmlsbDoiIzJhMmEyYyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMC44In0pLFgoInJlY3QiLHt4OiIzLjUiLHk6IjMuNSIsd2lkdGg6Si03LGhlaWdodDpRLTcscng6ODIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMy41In0pLFgoInJlY3QiLHt4OiIwLjgzMyIseToiMC44MzMiLHdpZHRoOkotMS42NjYsaGVpZ2h0OlEtMS42NjYscng6ODgsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjYifSksWCgiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI3dhdGNoLWdsb3cwKSIsY2hpbGRyZW46WCgicmVjdCIse3g6IjEuNSIseToiMS41Iix3aWR0aDpKLTMsaGVpZ2h0OlEtMyxyeDo4NyxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KX0pXX0pfWZ1bmN0aW9uIFBKKHtzdHJlYW1pbmc6JD0hMX0pe2xldCBKPVMxLnZpc2lvbi53aWR0aCxRPVMxLnZpc2lvbi5oZWlnaHQsWj00MCxLPTM0O3JldHVybiBYKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtKfSAke1F9YCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W1goImRlZnMiLHtjaGlsZHJlbjpbWCgiZmlsdGVyIix7aWQ6InZpc2lvbi1nbG93MCIseDoiMCIseToiMCIsd2lkdGg6SixoZWlnaHQ6USxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltYKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxYKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksWCgiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJibHVyIn0pXX0pLFgoImZpbHRlciIse2lkOiJ2aXNpb24tZ2xvdzEiLHg6IjUiLHk6IjUiLHdpZHRoOkotMTAsaGVpZ2h0OlEtMTAsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbWCgiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksWCgiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLFgoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjMzMyIscmVzdWx0OiJibHVyIn0pXX0pLFgoImxpbmVhckdyYWRpZW50Iix7aWQ6InZpc2lvbi1nbGFzcyIseDE6IjAiLHkxOiIwIix4MjoiMCIseTI6IjEiLGNoaWxkcmVuOltYKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjNTU1NTU4IixzdG9wT3BhY2l0eToiMC4zIn0pLFgoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzNhM2EzZCIsc3RvcE9wYWNpdHk6IjAuMSJ9KV19KV19KSxYKCJyZWN0Iix7eDoiMCIseToiMCIsd2lkdGg6SixoZWlnaHQ6USxyeDo0MCxmaWxsOiJ1cmwoI3Zpc2lvbi1nbGFzcykifSksWCgicmVjdCIse3g6IjMuNSIseToiMy41Iix3aWR0aDpKLTcsaGVpZ2h0OlEtNyxyeDozNCxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIzIn0pLFgoInJlY3QiLHt4OiIwLjgzMyIseToiMC44MzMiLHdpZHRoOkotMS42NjYsaGVpZ2h0OlEtMS42NjYscng6NDAsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjYifSksWCgiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI3Zpc2lvbi1nbG93MCkiLGNoaWxkcmVuOlgoInJlY3QiLHt4OiIxLjUiLHk6IjEuNSIsd2lkdGg6Si0zLGhlaWdodDpRLTMscng6Mzksc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjYifSl9KSxYKCJnIix7b3BhY2l0eToiMC44IixmaWx0ZXI6InVybCgjdmlzaW9uLWdsb3cxKSIsY2hpbGRyZW46WCgicmVjdCIse3g6IjYiLHk6IjYiLHdpZHRoOkotMTIsaGVpZ2h0OlEtMTIscng6MzIsc3Ryb2tlOiIjNjQ2NDY0IixzdHJva2VXaWR0aDoiMC42NjYifSl9KSxYKCJlbGxpcHNlIix7Y3g6Si8yLGN5OlEvMixyeDpKLzItMzAscnk6US8yLTI0LHN0cm9rZToiIzRhNGE0ZCIsc3Ryb2tlV2lkdGg6IjAuNSIsb3BhY2l0eToiMC4zIixzdHlsZTp7b3BhY2l0eTokPzA6MC4zLHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KV19KX12YXIgdTM9TTAobnVsbCk7ZnVuY3Rpb24gbTIoJCl7bGV0IEo9VzAodTMpO2lmKCFKKXRocm93IEVycm9yKGA8U2ltdWxhdG9yVG9vbGJhci4keyR9PiBtdXN0IGJlIHJlbmRlcmVkIGluc2lkZSA8U2ltdWxhdG9yVG9vbGJhcj5gKTtyZXR1cm4gSn12YXIgREo9e2Rpc3BsYXk6ImZsZXgiLGZsZXhXcmFwOiJ3cmFwIixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixnYXA6IjRweCAxMnB4IixwYWRkaW5nOiI4cHggMTJweCIsYm9yZGVyUmFkaXVzOjI0LGJhY2tncm91bmQ6InZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZywgIzE4MTgxOCkiLGJvcmRlcjpgMXB4IHNvbGlkICR7VDEoMC4xKX1gLGJveFNoYWRvdzoiMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4yKSIsbWluV2lkdGg6MjQwLHdpZHRoOiIxMDAlIn07ZnVuY3Rpb24gVEooe2V4ZWM6JCxvblJvdGF0ZTpKLG9yaWVudGF0aW9uOlEsZGV2aWNlVWRpZDpaLGRldmljZU5hbWU6SyxkZXZpY2VSdW50aW1lOlksc3RyZWFtaW5nOnE9ITEsZGlzYWJsZWQ6Vj0hMSxjaGlsZHJlbjpHLHN0eWxlOkIsLi4uTn0pe2xldCB6PUUwKEspLEg9e2V4ZWM6JCxvblJvdGF0ZTpKLG9yaWVudGF0aW9uOlEsZGV2aWNlVWRpZDpaLGRldmljZU5hbWU6SyxkZXZpY2VSdW50aW1lOlksZGV2aWNlVHlwZTp6LHN0cmVhbWluZzpxLGRpc2FibGVkOlZ8fCFafHwhcX07cmV0dXJuIFgodTMuUHJvdmlkZXIse3ZhbHVlOkgsY2hpbGRyZW46WCgiZGl2Iix7ImRhdGEtc2ltdWxhdG9yLXRvb2xiYXIiOiEwLHN0eWxlOnsuLi5ESiwuLi5CfSwuLi5OLGNoaWxkcmVuOkd9KX0pfXZhciBJSj17ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixhbGlnbkl0ZW1zOiJmbGV4LXN0YXJ0Iix0ZXh0QWxpZ246ImxlZnQiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLGNvbG9yOmQxKDEpLHBhZGRpbmc6IjJweCA0cHgiLG1hcmdpbjoiLTJweCAtNHB4Iixib3JkZXJSYWRpdXM6NixjdXJzb3I6InBvaW50ZXIiLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGxpbmVIZWlnaHQ6MS4yLGZvbnRGYW1pbHk6ImluaGVyaXQifSxFSj1fMChmdW5jdGlvbih7bmFtZTpKLHN1YnRpdGxlOlEsaGlkZUNoZXZyb246WixoaWRlU3VidGl0bGU6SyxzdHlsZTpZLG9uTW91c2VFbnRlcjpxLG9uTW91c2VMZWF2ZTpWLC4uLkd9LEIpe2xldCBOPW0yKCJUaXRsZSIpLFt6LFVdPUEoITEpLEg9Sj8/Ti5kZXZpY2VOYW1lPz8iTm8gc2ltdWxhdG9yIixGPVE/PyhOLmRldmljZVJ1bnRpbWU/Ti5kZXZpY2VSdW50aW1lLnJlcGxhY2UoL1wuLywiICIpOiLigJQiKTtyZXR1cm4gWCgiYnV0dG9uIix7cmVmOkIsdHlwZToiYnV0dG9uIiwiZGF0YS1zaW11bGF0b3ItdG9vbGJhci10aXRsZSI6ITAsb25Nb3VzZUVudGVyOihMKT0+e1UoITApLHE/LihMKX0sb25Nb3VzZUxlYXZlOihMKT0+e1UoITEpLFY/LihMKX0sc3R5bGU6ey4uLklKLGJhY2tncm91bmQ6ej9UMSgwLjEpOiJ0cmFuc3BhcmVudCIsLi4uWX0sLi4uRyxjaGlsZHJlbjpbWCgic3BhbiIse3N0eWxlOntkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmb250U2l6ZToxMixmb250V2VpZ2h0OjYwMCxjb2xvcjpkMSgxKSxtYXhXaWR0aDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sY2hpbGRyZW46W0gsIVomJlgoInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsc3R5bGU6e2NvbG9yOmQxKDAuNiksZmxleFNocmluazowfSxjaGlsZHJlbjpYKCJwb2x5bGluZSIse3BvaW50czoiNiA5IDEyIDE1IDE4IDkifSl9KV19KSwhSyYmWCgic3BhbiIse3N0eWxlOntmb250U2l6ZToxMCxjb2xvcjpkMSgwLjUpLG1heFdpZHRoOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpGfSldfSl9KSx3Sj17ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmbGV4U2hyaW5rOjB9O2Z1bmN0aW9uIGJKKHtzdHlsZTokLC4uLkp9KXtyZXR1cm4gWCgiZGl2Iix7c3R5bGU6ey4uLndKLC4uLiR9LC4uLkp9KX12YXIgeUo9e2JhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLHBhZGRpbmc6Nixib3JkZXJSYWRpdXM6MTIsY3Vyc29yOiJwb2ludGVyIixkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixjb2xvcjpkMSgwLjgpLHRyYW5zaXRpb246ImJhY2tncm91bmQtY29sb3IgMC4xNXMsIGNvbG9yIDAuMTVzIixwb3NpdGlvbjoicmVsYXRpdmUiLG92ZXJmbG93OiJ2aXNpYmxlIn0scDI9XzAoZnVuY3Rpb24oe2ZvcmNlRGlzYWJsZWQ6Six0b29sdGlwOlEsc3R5bGU6WixkaXNhYmxlZDpLLHRpdGxlOlksb25Nb3VzZUVudGVyOnEsb25Nb3VzZUxlYXZlOlYsb25Qb2ludGVyRG93bjpHLG9uRm9jdXM6QixvbkJsdXI6TixvbkNsaWNrOnosY2hpbGRyZW46VSwiYXJpYS1sYWJlbCI6SCwuLi5GfSxMKXtsZXQgaz1XMCh1MyksQz1LfHxKfHxrPy5kaXNhYmxlZCxbTyx5XT1BKCExKSxbRSx3XT1BKCExKSxTPVQoITEpLFExPUI1KCksZz1RPz9ZPz8odHlwZW9mIEg9PT0ic3RyaW5nIj9IOm51bGwpLGg9ISFnJiYhQyYmKE98fEUpO3JldHVybiBYKCJidXR0b24iLHtyZWY6TCx0eXBlOiJidXR0b24iLGRpc2FibGVkOkMsImFyaWEtbGFiZWwiOkgsImFyaWEtZGVzY3JpYmVkYnkiOmc/UTE6dm9pZCAwLG9uUG9pbnRlckRvd246KEkpPT57Uy5jdXJyZW50PSEwLEc/LihJKX0sb25Nb3VzZUVudGVyOihJKT0+e3koITApLHE/LihJKX0sb25Nb3VzZUxlYXZlOihJKT0+e3koITEpLFY/LihJKX0sb25Gb2N1czooSSk9Pnt3KCFTLmN1cnJlbnQpLEI/LihJKX0sb25CbHVyOihJKT0+e1MuY3VycmVudD0hMSx3KCExKSxOPy4oSSl9LG9uQ2xpY2s6KEkpPT57eSghMSksdyghMSksSS5jdXJyZW50VGFyZ2V0LmJsdXIoKSx6Py4oSSl9LHN0eWxlOnsuLi55Sixjb2xvcjpDP2QxKDAuMjUpOmQxKDAuOCksYmFja2dyb3VuZDpPJiYhQz9UMSgwLjEpOiJ0cmFuc3BhcmVudCIsY3Vyc29yOkM/Im5vdC1hbGxvd2VkIjoicG9pbnRlciIsLi4uWn0sLi4uRixjaGlsZHJlbjpbVSxnJiZYKCJzcGFuIix7aWQ6UTEscm9sZToidG9vbHRpcCIsImFyaWEtaGlkZGVuIjohaCxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OiI1MCUiLGJvdHRvbToiY2FsYygxMDAlICsgOHB4KSIsdHJhbnNmb3JtOmB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoJHtoPzA6Mn1weClgLG9wYWNpdHk6aD8xOjAscG9pbnRlckV2ZW50czoibm9uZSIsd2hpdGVTcGFjZToibm93cmFwIixwYWRkaW5nOiI0cHggN3B4Iixib3JkZXJSYWRpdXM6NixiYWNrZ3JvdW5kOiJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcsICMxODE4MTgpIixib3JkZXI6YDFweCBzb2xpZCAke1QxKDAuMTIpfWAsY29sb3I6ZDEoMC45MiksZm9udFNpemU6MTEsZm9udFdlaWdodDo1MDAsbGluZUhlaWdodDoxLGJveFNoYWRvdzoiMCA0cHggMTRweCByZ2JhKDAsMCwwLDAuMzIpIix0cmFuc2l0aW9uOiJvcGFjaXR5IDAuMTJzIGVhc2UsIHRyYW5zZm9ybSAwLjEycyBlYXNlIix6SW5kZXg6MTAwfSxjaGlsZHJlbjpnfSldfSl9KTtmdW5jdGlvbiBTSigkLEope2lmKCQ9PT0id2F0Y2giKXJldHVybiB4SigpO2lmKEopcmV0dXJuYHhjcnVuIHNpbWN0bCBsYXVuY2ggJHtKfSBjb20uYXBwbGUuc3ByaW5nYm9hcmRgO3JldHVybiJzZXJ2ZS1zaW0gYnV0dG9uIGhvbWUifWZ1bmN0aW9uIHhKKCl7cmV0dXJuWyd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gc2V0IGZyb250bW9zdCB0byB0cnVlJywndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHBlcmZvcm0gYWN0aW9uICJBWFJhaXNlIiBvZiAoZmlyc3Qgd2luZG93IHdob3NlIG5hbWUgY29udGFpbnMgIndhdGNoT1MiKScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBjbGljayBtZW51IGl0ZW0gIkhvbWUiIG9mIG1lbnUgIkRldmljZSIgb2YgbWVudSBiYXIgaXRlbSAiRGV2aWNlIiBvZiBtZW51IGJhciAxJ10ubWFwKChKKT0+YC1lICcke0p9J2ApLnJlZHVjZSgoSixRKT0+YCR7Sn0gJHtRfWAsIm9zYXNjcmlwdCIpfXZhciBSSj1YKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpYKCJwYXRoIix7ZDoiTTMgMTAuNSAxMiAzbDkgNy41VjIwYTEgMSAwIDAgMS0xIDFoLTV2LTdoLTZ2N0g0YTEgMSAwIDAgMS0xLTF6In0pfSksako9WCgic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgNDQgNDQiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46WCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixjbGlwUnVsZToiZXZlbm9kZCIsZmlsbDoiY3VycmVudENvbG9yIixkOiJNNDMuNjg3NSAxMi40Njg4VjguMjczNDRDNDMuNjg3NSA1LjcyNjU2IDQyLjk1MzEgMy43MTA5NCA0MS40ODQ0IDIuMjI2NTZDNDAuMDE1NiAwLjc0MjE4OCAzOCAwIDM1LjQzNzUgMEgzMS4xNDg0QzMwLjYwMTYgMCAzMC4xMzI4IDAuMTk1MzEyIDI5Ljc0MjIgMC41ODU5MzhDMjkuMzUxNiAwLjk3NjU2MiAyOS4xNTYyIDEuNDQ1MzEgMjkuMTU2MiAxLjk5MjE5QzI5LjE1NjIgMi41MjM0NCAyOS4zNTE2IDIuOTg0MzggMjkuNzQyMiAzLjM3NUMzMC4xMzI4IDMuNzY1NjIgMzAuNjAxNiAzLjk2MDk0IDMxLjE0ODQgMy45NjA5NEgzNS40Mzc1QzM2Ljc4MTIgMy45NjA5NCAzNy44MzU5IDQuMzQzNzUgMzguNjAxNiA1LjEwOTM4QzM5LjM1MTYgNS44NzUgMzkuNzI2NiA2LjkyOTY5IDM5LjcyNjYgOC4yNzM0NFYxMi40Njg4QzM5LjcyNjYgMTMgMzkuOTIxOSAxMy40NjA5IDQwLjMxMjUgMTMuODUxNkM0MC43MDMxIDE0LjI0MjIgNDEuMTcxOSAxNC40Mzc1IDQxLjcxODggMTQuNDM3NUM0Mi4yNSAxNC40Mzc1IDQyLjcxMDkgMTQuMjQyMiA0My4xMDE2IDEzLjg1MTZDNDMuNDkyMiAxMy40NjA5IDQzLjY4NzUgMTMgNDMuNjg3NSAxMi40Njg4Wk0wIDEyLjQ2ODhDMCAxMyAwLjE5NTMxMiAxMy40NjA5IDAuNTg1OTM4IDEzLjg1MTZDMC45NzY1NjIgMTQuMjQyMiAxLjQzNzUgMTQuNDM3NSAxLjk2ODc1IDE0LjQzNzVDMi41IDE0LjQzNzUgMi45NjA5NCAxNC4yNDIyIDMuMzUxNTYgMTMuODUxNkMzLjc0MjE5IDEzLjQ2MDkgMy45Mzc1IDEzIDMuOTM3NSAxMi40Njg4VjguMjczNDRDMy45Mzc1IDYuOTI5NjkgNC4zMjAzMSA1Ljg3NSA1LjA4NTk0IDUuMTA5MzhDNS44MzU5NCA0LjM0Mzc1IDYuODkwNjIgMy45NjA5NCA4LjI1IDMuOTYwOTRIMTIuNTM5MUMxMy4wODU5IDMuOTYwOTQgMTMuNTU0NyAzLjc2NTYyIDEzLjk0NTMgMy4zNzVDMTQuMzIwMyAyLjk4NDM4IDE0LjUwNzggMi41MjM0NCAxNC41MDc4IDEuOTkyMTlDMTQuNTA3OCAxLjQ0NTMxIDE0LjMyMDMgMC45NzY1NjIgMTMuOTQ1MyAwLjU4NTkzOEMxMy41NTQ3IDAuMTk1MzEyIDEzLjA4NTkgMCAxMi41MzkxIDBIOC4yNUM1LjY4NzUgMCAzLjY3MTg4IDAuNzQyMTg4IDIuMjAzMTIgMi4yMjY1NkMwLjczNDM3NSAzLjcxMDk0IDAgNS43MjY1NiAwIDguMjczNDRWMTIuNDY4OFpNNDMuNjg3NSAzMS4yNDIyQzQzLjY4NzUgMzAuNzEwOSA0My40OTIyIDMwLjI1IDQzLjEwMTYgMjkuODU5NEM0Mi43MTA5IDI5LjQ2ODggNDIuMjUgMjkuMjczNCA0MS43MTg4IDI5LjI3MzRDNDEuMTcxOSAyOS4yNzM0IDQwLjcwMzEgMjkuNDY4OCA0MC4zMTI1IDI5Ljg1OTRDMzkuOTIxOSAzMC4yNSAzOS43MjY2IDMwLjcxMDkgMzkuNzI2NiAzMS4yNDIyVjM1LjQzNzVDMzkuNzI2NiAzNi43ODEyIDM5LjM1MTYgMzcuODM1OSAzOC42MDE2IDM4LjYwMTZDMzcuODM1OSAzOS4zNjcyIDM2Ljc4MTIgMzkuNzUgMzUuNDM3NSAzOS43NUgzMS4xNDg0QzMwLjYwMTYgMzkuNzUgMzAuMTMyOCAzOS45NDUzIDI5Ljc0MjIgNDAuMzM1OUMyOS4zNTE2IDQwLjcyNjYgMjkuMTU2MiA0MS4xODc1IDI5LjE1NjIgNDEuNzE4OEMyOS4xNTYyIDQyLjI2NTYgMjkuMzUxNiA0Mi43MjY2IDI5Ljc0MjIgNDMuMTAxNkMzMC4xMzI4IDQzLjQ5MjIgMzAuNjAxNiA0My42ODc1IDMxLjE0ODQgNDMuNjg3NUgzNS40Mzc1QzM4IDQzLjY4NzUgNDAuMDE1NiA0Mi45NDUzIDQxLjQ4NDQgNDEuNDYwOUM0Mi45NTMxIDM5Ljk5MjIgNDMuNjg3NSAzNy45ODQ0IDQzLjY4NzUgMzUuNDM3NVYzMS4yNDIyWk0wIDMxLjI0MjJWMzUuNDM3NUMwIDM3Ljk4NDQgMC43MzQzNzUgMzkuOTkyMiAyLjIwMzEyIDQxLjQ2MDlDMy42NzE4OCA0Mi45NDUzIDUuNjg3NSA0My42ODc1IDguMjUgNDMuNjg3NUgxMi41MzkxQzEzLjA4NTkgNDMuNjg3NSAxMy41NTQ3IDQzLjQ5MjIgMTMuOTQ1MyA0My4xMDE2QzE0LjMyMDMgNDIuNzI2NiAxNC41MDc4IDQyLjI2NTYgMTQuNTA3OCA0MS43MTg4QzE0LjUwNzggNDEuMTg3NSAxNC4zMjAzIDQwLjcyNjYgMTMuOTQ1MyA0MC4zMzU5QzEzLjU1NDcgMzkuOTQ1MyAxMy4wODU5IDM5Ljc1IDEyLjUzOTEgMzkuNzVIOC4yNUM2Ljg5MDYyIDM5Ljc1IDUuODM1OTQgMzkuMzY3MiA1LjA4NTk0IDM4LjYwMTZDNC4zMjAzMSAzNy44MzU5IDMuOTM3NSAzNi43ODEyIDMuOTM3NSAzNS40Mzc1VjMxLjI0MjJDMy45Mzc1IDMwLjcxMDkgMy43NDIxOSAzMC4yNSAzLjM1MTU2IDI5Ljg1OTRDMi45NjA5NCAyOS40Njg4IDIuNSAyOS4yNzM0IDEuOTY4NzUgMjkuMjczNEMxLjQzNzUgMjkuMjczNCAwLjk3NjU2MiAyOS40Njg4IDAuNTg1OTM4IDI5Ljg1OTRDMC4xOTUzMTIgMzAuMjUgMCAzMC43MTA5IDAgMzEuMjQyMlpNMzEuNTkzOCAzMS44MDQ3QzMyLjc4MTIgMzEuODA0NyAzMy42NzE5IDMxLjUxNTYgMzQuMjY1NiAzMC45Mzc1QzM0Ljg1OTQgMzAuMzQzOCAzNS4xNTYyIDI5LjQ2ODggMzUuMTU2MiAyOC4zMTI1VjE2LjcxMDlDMzUuMTU2MiAxNS41MzkxIDM0Ljg1OTQgMTQuNjY0MSAzNC4yNjU2IDE0LjA4NTlDMzMuNjcxOSAxMy40OTIyIDMyLjc4MTIgMTMuMTk1MyAzMS41OTM4IDEzLjE5NTNIMjguODk4NEMyOC40NjA5IDEzLjE5NTMgMjguMTQ4NCAxMy4xNDA2IDI3Ljk2MDkgMTMuMDMxMkMyNy43NTc4IDEyLjkyMTkgMjcuNTIzNCAxMi43MjY2IDI3LjI1NzggMTIuNDQ1M0wyNi4zNjcyIDExLjUwNzhDMjYuMDg1OSAxMS4xOTUzIDI1Ljc4MTIgMTAuOTY4OCAyNS40NTMxIDEwLjgyODFDMjUuMTA5NCAxMC42NzE5IDI0LjY1NjIgMTAuNTkzOCAyNC4wOTM4IDEwLjU5MzhIMTkuNjE3MkMxOS4wNTQ3IDEwLjU5MzggMTguNjA5NCAxMC42NzE5IDE4LjI4MTIgMTAuODI4MUMxNy45Mzc1IDEwLjk2ODggMTcuNjI1IDExLjE5NTMgMTcuMzQzOCAxMS41MDc4TDE2LjQ3NjYgMTIuNDQ1M0MxNi4yMTA5IDEyLjc0MjIgMTUuOTc2NiAxMi45NDUzIDE1Ljc3MzQgMTMuMDU0N0MxNS41NTQ3IDEzLjE0ODQgMTUuMjM0NCAxMy4xOTUzIDE0LjgxMjUgMTMuMTk1M0gxMi4wNDY5QzEwLjg5MDYgMTMuMTk1MyAxMC4wMTU2IDEzLjQ5MjIgOS40MjE4OCAxNC4wODU5QzguODEyNSAxNC42NjQxIDguNTA3ODEgMTUuNTM5MSA4LjUwNzgxIDE2LjcxMDlWMjguMzEyNUM4LjUwNzgxIDI5LjQ2ODggOC44MTI1IDMwLjM0MzggOS40MjE4OCAzMC45Mzc1QzEwLjAxNTYgMzEuNTE1NiAxMC44OTA2IDMxLjgwNDcgMTIuMDQ2OSAzMS44MDQ3SDMxLjU5MzhaTTIxLjc5NjkgMjguOTQ1M0MyMC41OTM4IDI4Ljk0NTMgMTkuNSAyOC42NjQxIDE4LjUxNTYgMjguMTAxNkMxNy41MTU2IDI3LjUyMzQgMTYuNzI2NiAyNi43NDIyIDE2LjE0ODQgMjUuNzU3OEMxNS41NTQ3IDI0Ljc1NzggMTUuMjU3OCAyMy42MzI4IDE1LjI1NzggMjIuMzgyOEMxNS4yNTc4IDIxLjE3OTcgMTUuNTU0NyAyMC4wODU5IDE2LjE0ODQgMTkuMTAxNkMxNi43MjY2IDE4LjEwMTYgMTcuNTE1NiAxNy4zMTI1IDE4LjUxNTYgMTYuNzM0NEMxOS41IDE2LjE0MDYgMjAuNTkzOCAxNS44NDM4IDIxLjc5NjkgMTUuODQzOEMyMy4wMTU2IDE1Ljg0MzggMjQuMTI1IDE2LjE0MDYgMjUuMTI1IDE2LjczNDRDMjYuMTA5NCAxNy4zMTI1IDI2Ljg5ODQgMTguMTAxNiAyNy40OTIyIDE5LjEwMTZDMjguMDcwMyAyMC4wODU5IDI4LjM1OTQgMjEuMTc5NyAyOC4zNTk0IDIyLjM4MjhDMjguMzU5NCAyMy42MTcyIDI4LjA3MDMgMjQuNzI2NiAyNy40OTIyIDI1LjcxMDlDMjYuODk4NCAyNi42OTUzIDI2LjEwOTQgMjcuNDg0NCAyNS4xMjUgMjguMDc4MUMyNC4xMjUgMjguNjU2MiAyMy4wMTU2IDI4Ljk0NTMgMjEuNzk2OSAyOC45NDUzWk0yMS44MjAzIDI2LjkwNjJDMjIuNjQ4NCAyNi45MDYyIDIzLjQwNjIgMjYuNzEwOSAyNC4wOTM4IDI2LjMyMDNDMjQuNzgxMiAyNS45MTQxIDI1LjMyODEgMjUuMzY3MiAyNS43MzQ0IDI0LjY3OTdDMjYuMTI1IDIzLjk5MjIgMjYuMzIwMyAyMy4yMjY2IDI2LjMyMDMgMjIuMzgyOEMyNi4zMjAzIDIxLjU3MDMgMjYuMTI1IDIwLjgyMDMgMjUuNzM0NCAyMC4xMzI4QzI1LjMyODEgMTkuNDQ1MyAyNC43ODEyIDE4LjkwNjIgMjQuMDkzOCAxOC41MTU2QzIzLjQwNjIgMTguMTA5NCAyMi42NDg0IDE3LjkwNjIgMjEuODIwMyAxNy45MDYyQzIwLjk5MjIgMTcuOTA2MiAyMC4yNDIyIDE4LjEwOTQgMTkuNTcwMyAxOC41MTU2QzE4Ljg4MjggMTguOTA2MiAxOC4zMzU5IDE5LjQ0NTMgMTcuOTI5NyAyMC4xMzI4QzE3LjUyMzQgMjAuODIwMyAxNy4zMjAzIDIxLjU3MDMgMTcuMzIwMyAyMi4zODI4QzE3LjMyMDMgMjMuMjI2NiAxNy41MjM0IDIzLjk5MjIgMTcuOTI5NyAyNC42Nzk3QzE4LjMzNTkgMjUuMzY3MiAxOC44ODI4IDI1LjkxNDEgMTkuNTcwMyAyNi4zMjAzQzIwLjI0MjIgMjYuNzEwOSAyMC45OTIyIDI2LjkwNjIgMjEuODIwMyAyNi45MDYyWk0xMi42MzI4IDE4Ljk4NDRDMTIuMjEwOSAxOC45ODQ0IDExLjg1OTQgMTguODM1OSAxMS41NzgxIDE4LjUzOTFDMTEuMjgxMiAxOC4yNDIyIDExLjEzMjggMTcuODkwNiAxMS4xMzI4IDE3LjQ4NDRDMTEuMTMyOCAxNy4wNjI1IDExLjI4MTIgMTYuNzEwOSAxMS41NzgxIDE2LjQyOTdDMTEuODU5NCAxNi4xMzI4IDEyLjIxMDkgMTUuOTg0NCAxMi42MzI4IDE1Ljk4NDRDMTMuMDM5MSAxNS45ODQ0IDEzLjM5MDYgMTYuMTMyOCAxMy42ODc1IDE2LjQyOTdDMTMuOTg0NCAxNi43MTA5IDE0LjEzMjggMTcuMDYyNSAxNC4xMzI4IDE3LjQ4NDRDMTQuMTMyOCAxNy44OTA2IDEzLjk4NDQgMTguMjQyMiAxMy42ODc1IDE4LjUzOTFDMTMuMzkwNiAxOC44MzU5IDEzLjAzOTEgMTguOTg0NCAxMi42MzI4IDE4Ljk4NDRaIn0pfSksdko9WCgic3ZnIix7d2lkdGg6IjIxIixoZWlnaHQ6IjIxIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbWCgicGF0aCIse2Q6Ik0xMiA1SDZhMiAyIDAgMCAwLTIgMnYzIn0pLFgoInBhdGgiLHtkOiJtOSA4IDMtMy0zLTMifSksWCgicGF0aCIse2Q6Ik00IDE0djRhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjdhMiAyIDAgMCAwLTItMmgtMiJ9KV19KSxnSj1fMChmdW5jdGlvbih7b25DbGljazpKLC4uLlF9LFope2xldCBLPW0yKCJIb21lQnV0dG9uIik7cmV0dXJuIFgocDIse3JlZjpaLCJhcmlhLWxhYmVsIjoiSG9tZSIsb25DbGljazooWSk9PntpZihKPy4oWSksWS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtLLmV4ZWMoU0ooSy5kZXZpY2VUeXBlLEsuZGV2aWNlVWRpZCkpfSwuLi5RLGNoaWxkcmVuOlJKfSl9KSxoSj1fMChmdW5jdGlvbih7b25DbGljazpKLC4uLlF9LFope2xldCBLPW0yKCJTY3JlZW5zaG90QnV0dG9uIik7cmV0dXJuIFgocDIse3JlZjpaLCJhcmlhLWxhYmVsIjoiU2NyZWVuc2hvdCIsb25DbGljazooWSk9PntpZihKPy4oWSksWS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpZihLLmRldmljZVVkaWQpSy5leGVjKGB4Y3J1biBzaW1jdGwgaW8gJHtLLmRldmljZVVkaWR9IHNjcmVlbnNob3Qgfi9EZXNrdG9wL3NlcnZlLXNpbS1zY3JlZW5zaG90LSQoZGF0ZSArJXMpLnBuZ2ApfSwuLi5RLGNoaWxkcmVuOmpKfSl9KSxmSj1fMChmdW5jdGlvbih7b25DbGljazpKLGZvcmNlRGlzYWJsZWQ6USwuLi5afSxLKXtsZXQgWT1tMigiUm90YXRlQnV0dG9uIikscT1ZLmRldmljZVR5cGU9PT0id2F0Y2gifHxZLmRldmljZVR5cGU9PT0idmlzaW9uIixbVixHXT1BKCJwb3J0cmFpdCIpO3JldHVybiBfKCgpPT57RyhZLm9yaWVudGF0aW9uPz8icG9ydHJhaXQiKX0sW1kuZGV2aWNlVWRpZCxZLm9yaWVudGF0aW9uXSksWChwMix7cmVmOkssImFyaWEtbGFiZWwiOiJSb3RhdGUgZGV2aWNlIixmb3JjZURpc2FibGVkOlF8fHEsb25DbGljazooQik9PntpZihKPy4oQiksQi5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpZighWS5kZXZpY2VVZGlkfHxxKXJldHVybjtsZXQgTj1LMltZLm9yaWVudGF0aW9uPz9WXTtpZihHKE4pLFkub25Sb3RhdGUpWS5vblJvdGF0ZShOKTtlbHNlIFkuZXhlYyhgc2VydmUtc2ltIHJvdGF0ZSAke059IC1kICR7WS5kZXZpY2VVZGlkfWApfSwuLi5aLGNoaWxkcmVuOnZKfSl9KSxJMT1USjtJMS5UaXRsZT1FSjtJMS5BY3Rpb25zPWJKO0kxLkJ1dHRvbj1wMjtJMS5Ib21lQnV0dG9uPWdKO0kxLlNjcmVlbnNob3RCdXR0b249aEo7STEuUm90YXRlQnV0dG9uPWZKO3ZhciBzOT1be25hbWU6IlZvbHVtZSBkb3duIixwYWdlOjEyLHVzYWdlOjIzNCxJY29uOloyfSx7bmFtZToiVm9sdW1lIHVwIixwYWdlOjEyLHVzYWdlOjIzMyxJY29uOlgyfSx7bmFtZToiUG93ZXIiLHBhZ2U6MTIsdXNhZ2U6NDgsSWNvbjpyNX0se25hbWU6IkNhbWVyYSBjb250cm9sIixwYWdlOjY1MjgwLHVzYWdlOjEwMixJY29uOmY1fV07ZnVuY3Rpb24gdDkoe3ZhbHVlOiQsb25QcmVzczpKLGljb25Sb3RhdGlvbjpRPTB9KXtsZXQgWj1UKCExKSxLPVAoKCk9PntpZihaLmN1cnJlbnQpWi5jdXJyZW50PSExLEooJCwidXAiKX0sWyQsSl0pO3JldHVybiBfKCgpPT5LLFtLXSksWChJMS5CdXR0b24seyJhcmlhLWxhYmVsIjokLm5hbWUsdGl0bGU6JC5uYW1lLHN0eWxlOnt0cmFuc2Zvcm06YHJvdGF0ZSgke1F9ZGVnKWAsY29sb3I6ZDEoMC45KSx0cmFuc2l0aW9uOiJvcGFjaXR5IDE4MG1zIGVhc2UsIGJhY2tncm91bmQtY29sb3IgMTUwbXMsIGNvbG9yIDE1MG1zIn0sb25Qb2ludGVyRG93bjooWSk9PntpZihZLnN0b3BQcm9wYWdhdGlvbigpLFkuYnV0dG9uIT09MClyZXR1cm47WS5wcmV2ZW50RGVmYXVsdCgpLFkuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShZLnBvaW50ZXJJZCksWi5jdXJyZW50PSEwLEooJCwiZG93biIpfSxvblBvaW50ZXJVcDpLLG9uUG9pbnRlckNhbmNlbDpLLG9uTG9zdFBvaW50ZXJDYXB0dXJlOkssb25DbGljazooWSk9PntpZihZLmRldGFpbD09PTApSigkLCJwcmVzcyIpfSxjaGlsZHJlbjpYKCQuSWNvbix7c2l6ZToxOCxzdHJva2VXaWR0aDoyLCJhcmlhLWhpZGRlbiI6InRydWUifSl9KX1mdW5jdGlvbiBlOSgkLEope2xldCBRPXEyKGowKEopLmlucHV0T3JpZW50YXRpb24sdTApLFo9UT09PXg5PzEtJC54OlE9PT1qOT8kLng6UT09PVI5PzEtJC55OiQueTtyZXR1cm4gWTIoWik9PT12b2lkIDA/JDp7Li4uJCxlZGdlOlF9fWZ1bmN0aW9uICQ2KCQsSil7cmV0dXJuICQuZWRnZT09PXZvaWQgMD9KOnsuLi5KLGVkZ2U6JC5lZGdlfX1hc3luYyBmdW5jdGlvbiBtSigkLEo9KFopPT5uYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChaKSxRPWZldGNoKXt0cnl7bGV0IFo9YXdhaXQgUSgkLHtjYWNoZToibm8tc3RvcmUifSksSz1hd2FpdCBaLnRleHQoKTtpZihaLnN0YXR1cz09PTQwMylyZXR1cm4iRGlhZ25vc3RpY3MgYXJlIGxvY2FsaG9zdC1vbmx5LiBSdW4gYHNlcnZlLXNpbSBkb2N0b3IgLS1qc29uYCBvbiB0aGUgTWFjLiI7aWYoWi5zdGF0dXM9PT00MjkpcmV0dXJuIkRpYWdub3N0aWNzIGFyZSByYXRlLWxpbWl0ZWQ7IHRyeSBhZ2FpbiBpbiBhIGZldyBzZWNvbmRzLiI7aWYoIVoub2spcmV0dXJuYERpYWdub3N0aWNzIGZhaWxlZCAoSFRUUCAke1ouc3RhdHVzfSkuYDtyZXR1cm4gYXdhaXQgSihLKSwiQ29waWVkIGRpYWdub3N0aWNzIEpTT04uIn1jYXRjaChaKXtyZXR1cm5gQ291bGQgbm90IGNvcHkgZGlhZ25vc3RpY3M6ICR7WiBpbnN0YW5jZW9mIEVycm9yP1oubWVzc2FnZTpTdHJpbmcoWil9YH19ZnVuY3Rpb24gSjYoe3RpdGxlOiQsZXJyb3I6SixkaWFnbm9zdGljc0VuZHBvaW50OlF9KXtsZXRbWixLXT1BKG51bGwpLFk9Si5yZXRyeUluTXMhPW51bGw/YFJldHJ5aW5nIGluICR7TWF0aC5tYXgoMSxNYXRoLnJvdW5kKEoucmV0cnlJbk1zLzEwMDApKX1zLmA6bnVsbDtyZXR1cm4gWCgiZGl2Iix7cm9sZToiYWxlcnQiLCJkYXRhLXRlc3RpZCI6InN0cmVhbS1lcnJvci1wYW5lbCIsY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNiBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpYKCJkaXYiLHtjbGFzc05hbWU6InBvaW50ZXItZXZlbnRzLWF1dG8gbWF4LXctWzQyMHB4XSByb3VuZGVkLXhsIHB4LTQgcHktMyB0ZXh0LVsxM3B4XSBsZWFkaW5nLVsxLjRdIGJnLXBhbmVsLzkyIHRleHQtaW5rLTk1IGJvcmRlciBib3JkZXItZGFuZ2VyLzQ1IHNoYWRvdy1wb3BvdmVyIixjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJmb250LXNlbWlib2xkIHRleHQtZGFuZ2VyIixjaGlsZHJlbjokfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJtdC0xIixjaGlsZHJlbjpKLnJlYXNvbn0pLFgoImRpdiIse2NsYXNzTmFtZToibXQtMSBmb250LW1vbm8gdGV4dC1bMTFweF0gdGV4dC1pY29uIixjaGlsZHJlbjpbW0ouZXJyb3IsSi5zdGFnZSYmYHN0YWdlPSR7Si5zdGFnZX1gLEouc3RhdHVzP2BIVFRQICR7Si5zdGF0dXN9YDpudWxsXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpLFk/YCDCtyAke1l9YDoiIl19KSxYKCJkaXYiLHtjbGFzc05hbWU6Im10LTIgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiLGNoaWxkcmVuOltYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLGNsYXNzTmFtZToicm91bmRlZC1tZCBweC0yIHB5LTEgdGV4dC1bMTJweF0gZm9udC1tZWRpdW0gYmctaW5rLzEyIHRleHQtaW5rLTk1IixvbkNsaWNrOigpPT57bUooUSkudGhlbihLKX0sY2hpbGRyZW46IkNvcHkgZGlhZ25vc3RpY3MifSksWiYmWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC1pY29uIixjaGlsZHJlbjpafSldfSldfSl9KX1mdW5jdGlvbiBlMCgkKXtyZXR1cm4gJCYmdHlwZW9mICQuZGV2aWNlPT09InN0cmluZyImJnR5cGVvZiAkLnVybD09PSJzdHJpbmciPyQ6bnVsbH1mdW5jdGlvbiBiMSgkKXtsZXQgUT13aW5kb3cuX19TSU1fUFJFVklFV19fPy5iYXNlUGF0aD8/KHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cLyskLywiIil8fCIvIik7cmV0dXJuIFE9PT0iLyI/YC8keyR9YDpgJHtRfS8keyR9YH1mdW5jdGlvbiBRNih7dXJsOiQscHJvamVjdGlvbjpKLG9uVG91Y2g6USxvbk11bHRpVG91Y2g6WixvbkVycm9yOkssb25IYXJkd2FyZVByZXNzOlksb25TdHJlYW1pbmdDaGFuZ2U6cSxvblN0cmVhbUVycm9yOlYsc2NyZWVuQ29uZmlnOkcsY2hpbGRyZW46Qn0pe2xldCBOPUk5KEopLHo9VDkoSiksW1UsSF09QShudWxsKTtfKCgpPT57bGV0IEk9c2V0VGltZW91dCgoKT0+SCh6KSwyMjApO3JldHVybigpPT5jbGVhclRpbWVvdXQoSSl9LFt6XSk7bGV0IEY9SiE9bnVsbCYmVT09PXosTD1UKG51bGwpLHtzdWJzY3JpYmVGcmFtZTprLGVycm9yOkN9PXkyKCQscSksTz1UKFYpO08uY3VycmVudD1WLF8oKCk9PntPLmN1cnJlbnQ/LihDKX0sW0NdKSxfKCgpPT4oKT0+Ty5jdXJyZW50Py4obnVsbCksW10pO2xldFt5LEVdPUEoITEpLHc9VChLKTt3LmN1cnJlbnQ9SyxfKCgpPT57bGV0IEk9bnVsbCx1PXNldFRpbWVvdXQoKCk9PncuY3VycmVudD8uKCksMTIwMDApO0UoITEpO2xldCBaMT1rKChyKT0+e2NsZWFyVGltZW91dCh1KSxFKCEwKTtsZXQgTTE9STtpZihJPXIsTC5jdXJyZW50KUwuY3VycmVudC5zcmM9cjtpZihNMSlVUkwucmV2b2tlT2JqZWN0VVJMKE0xKX0pO3JldHVybigpPT57aWYoY2xlYXJUaW1lb3V0KHUpLFoxKCksSSlVUkwucmV2b2tlT2JqZWN0VVJMKEkpfX0sW2ssJF0pO2xldCBTPVQobmV3IE1hcCk7XygoKT0+KCk9PntsZXRbSSx1XT1bLi4uUy5jdXJyZW50LnZhbHVlcygpXTtpZihJJiZ1KVooe3R5cGU6ImVuZCIseDE6SS54LHkxOkkueSx4Mjp1LngseTI6dS55fSk7ZWxzZSBpZihJKVEoe3R5cGU6ImVuZCIsLi4uSX0pO1MuY3VycmVudC5jbGVhcigpfSxbUSxaXSk7bGV0IFExPSgpPT57bGV0W0ksdV09Wy4uLlMuY3VycmVudC52YWx1ZXMoKV07cmV0dXJuIEkmJnU/e3gxOkkueCx5MTpJLnkseDI6dS54LHkyOnUueX06bnVsbH0sZz0oSSk9PntsZXQgdT1JLmN1cnJlbnRUYXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIF85KEosKEkuY2xpZW50WC11LmxlZnQpL3Uud2lkdGgsKEkuY2xpZW50WS11LnRvcCkvdS5oZWlnaHQpfSxoPShJKT0+e2xldCB1PVMuY3VycmVudC5nZXQoSS5wb2ludGVySWQpO2lmKCF1KXJldHVybjtsZXQgWjE9UTEoKTtpZihaMSlaKHt0eXBlOiJlbmQiLC4uLloxfSksUy5jdXJyZW50LmNsZWFyKCk7ZWxzZSBRKHt0eXBlOiJlbmQiLC4uLnV9KSxTLmN1cnJlbnQuZGVsZXRlKEkucG9pbnRlcklkKTtpZihJLmN1cnJlbnRUYXJnZXQuaGFzUG9pbnRlckNhcHR1cmUoSS5wb2ludGVySWQpKUkuY3VycmVudFRhcmdldC5yZWxlYXNlUG9pbnRlckNhcHR1cmUoSS5wb2ludGVySWQpfTtyZXR1cm4gWCgiZGl2Iix7ImFyaWEtbGFiZWwiOiJJbnRlcmFjdGl2ZSAzRCBpUGhvbmUgRHVvIixjbGFzc05hbWU6InJlbGF0aXZlIHctZnVsbCBoLWZ1bGwgYmctdHJhbnNwYXJlbnQgc2VsZWN0LW5vbmUiLHN0eWxlOnt0b3VjaEFjdGlvbjoibm9uZSIsY3Vyc29yOiJwb2ludGVyIix1c2VyU2VsZWN0OiJub25lIixXZWJraXRVc2VyU2VsZWN0OiJub25lIn0sb25Qb2ludGVyRG93bjooSSk9PntpZihJLmJ1dHRvbiE9PTB8fFMuY3VycmVudC5zaXplPj0yKXJldHVybjtsZXQgdT1nKEkpO2lmKCF1KXJldHVybjtsZXQgWjE9ZTkodSxHKTtJLnByZXZlbnREZWZhdWx0KCk7bGV0IHI9Wy4uLlMuY3VycmVudC52YWx1ZXMoKV1bMF07aWYocilRKHt0eXBlOiJlbmQiLC4uLnJ9KTtTLmN1cnJlbnQuc2V0KEkucG9pbnRlcklkLFoxKSxJLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoSS5wb2ludGVySWQpO2xldCBNMT1RMSgpO2lmKE0xKVooe3R5cGU6ImJlZ2luIiwuLi5NMX0pO2Vsc2UgUSh7dHlwZToiYmVnaW4iLC4uLloxfSl9LG9uUG9pbnRlck1vdmU6KEkpPT57aWYoIVMuY3VycmVudC5oYXMoSS5wb2ludGVySWQpKXJldHVybjtsZXQgdT1nKEkpO2lmKCF1KXJldHVybjtsZXQgWjE9JDYoUy5jdXJyZW50LmdldChJLnBvaW50ZXJJZCksdSk7Uy5jdXJyZW50LnNldChJLnBvaW50ZXJJZCxaMSk7bGV0IHI9UTEoKTtpZihyKVooe3R5cGU6Im1vdmUiLC4uLnJ9KTtlbHNlIFEoe3R5cGU6Im1vdmUiLC4uLloxfSl9LG9uUG9pbnRlclVwOmgsb25Qb2ludGVyQ2FuY2VsOmgsY2hpbGRyZW46W1goImltZyIse3JlZjpMLG9uRXJyb3I6SyxhbHQ6IkxpdmUgM0QgaVBob25lIER1byIsZHJhZ2dhYmxlOiExLGNsYXNzTmFtZToiYmxvY2sgdy1mdWxsIGgtZnVsbCBvYmplY3QtY29udGFpbiBwb2ludGVyLWV2ZW50cy1ub25lIGJnLXRyYW5zcGFyZW50IixzdHlsZTp5P3ZvaWQgMDp7dmlzaWJpbGl0eToiaGlkZGVuIn19KSxDJiZYKEo2LHt0aXRsZToiM0QgdmlldyB1bmF2YWlsYWJsZSIsZXJyb3I6QyxkaWFnbm9zdGljc0VuZHBvaW50OndpbmRvdy5fX1NJTV9QUkVWSUVXX18/LmRpYWdub3N0aWNzRW5kcG9pbnQ/P2IxKCJhcGkvZGlhZ25vc3RpY3MiKX0pLEIsRiYmTi5tYXAoKEkpPT5YKCJkaXYiLHtjbGFzc05hbWU6ImR1by1oYXJkd2FyZS1hbmNob3IiLHN0eWxlOntsZWZ0OmAke0kueCoxMDB9JWAsdG9wOmAke0kueSoxMDB9JWAsdHJhbnNmb3JtOmByb3RhdGUoJHtJLmFuZ2xlfWRlZylgfSxjaGlsZHJlbjpYKCJkaXYiLHtjbGFzc05hbWU6ImR1by1oYXJkd2FyZS1yZWdpb24iLGNoaWxkcmVuOlgodDkse3ZhbHVlOnM5W0kua2V5XSxpY29uUm90YXRpb246LUkuYW5nbGUsb25QcmVzczpZfSl9KX0sSS5rZXkpKV19KX1mdW5jdGlvbiBaNigkLEope2xldCBRPShZKT0+SihZLmFsdEtleT09PSEwKSxaPSgpPT5KKCExKSxLPVsia2V5ZG93biIsImtleXVwIiwicG9pbnRlcm1vdmUiLCJwb2ludGVyZG93biJdO2ZvcihsZXQgWSBvZiBLKSQuYWRkRXZlbnRMaXN0ZW5lcihZLFEpO3JldHVybiAkLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLFopLCgpPT57Zm9yKGxldCBZIG9mIEspJC5yZW1vdmVFdmVudExpc3RlbmVyKFksUSk7JC5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixaKX19ZnVuY3Rpb24gdTIoe3R5cGU6JCxzaXplOko9MjAsc2NyZWVuT246UT0hMSxkdW86Wj0hMX0pe2xldCBLPXt3aWR0aDpKLGhlaWdodDpKLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOjEuNixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn07aWYoWilyZXR1cm4gWCgic3ZnIix7d2lkdGg6SixoZWlnaHQ6Six2aWV3Qm94OiIwIDAgMTAyIDEwMiIsZmlsbDoiY3VycmVudENvbG9yIiwiZGF0YS10ZXN0aWQiOiJkZXZpY2UtZ2x5cGgtZHVvIixjaGlsZHJlbjpbUSYmWCgicGF0aCIse2Q6Ik0yNCAxMEg3MEM3NS41MjI5IDEwIDgwIDE0LjQ3NzIgODAgMjBWODNDODAgODguNTIyOCA3NS41MjI4IDkzIDcwIDkzSDI0QzIyLjg5NTQgOTMgMjIgOTIuMTA0NiAyMiA5MVYxMkMyMiAxMC44OTU0IDIyLjg5NTQgMTAgMjQgMTBaIixmaWxsOiIjNDdiN2ZmIiwiZGF0YS10ZXN0aWQiOiJkZXZpY2UtZ2x5cGgtc2NyZWVuLW9uIn0pLFgoInBhdGgiLHtkOiJNMTcgOTFWMTJDMTcgOC4xMzQwMSAyMC4xMzQgNSAyNCA1SDcwQzc4LjI4NDMgNSA4NSAxMS43MTU3IDg1IDIwVjgzTDg0Ljk5NTEgODMuMzg2N0M4NC43OTMyIDkxLjM2MzggNzguMzYzOCA5Ny43OTMyIDcwLjM4NjcgOTcuOTk1MUw3MCA5OFY5M0M3NS41MjI4IDkzIDgwIDg4LjUyMjggODAgODNWMjBDODAgMTQuNDc3MiA3NS41MjI5IDEwIDcwIDEwSDI0QzIyLjg5NTQgMTAgMjIgMTAuODk1NCAyMiAxMlY5MUMyMiA5Mi4xMDQ2IDIyLjg5NTQgOTMgMjQgOTNWOThMMjMuNjM5NiA5Ny45OTEyQzIwLjA2MDUgOTcuODA5NyAxNy4xOTAzIDk0LjkzOTUgMTcuMDA4OCA5MS4zNjA0TDE3IDkxWk03MCA5M1Y5OEgyNFY5M0g3MFoifSksWCgiY2lyY2xlIix7Y3g6IjY5IixjeToiMjEiLHI6IjQifSksWCgicGF0aCIse2Q6Ik00MCA4OC41QzQwIDg3LjY3MTYgNDAuNjcxNiA4NyA0MS41IDg3SDYxLjVDNjIuMzI4NCA4NyA2MyA4Ny42NzE2IDYzIDg4LjVDNjMgODkuMzI4NCA2Mi4zMjg0IDkwIDYxLjUgOTBINDEuNUM0MC42NzE2IDkwIDQwIDg5LjMyODQgNDAgODguNVoifSldfSk7c3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIFgoInN2ZyIsey4uLkssY2hpbGRyZW46W1EmJlgoInJlY3QiLHt4OiI1Iix5OiIzIix3aWR0aDoiMTUiLGhlaWdodDoiMTkiLHJ4OiIxLjY1IixmaWxsOiIjNDdiN2ZmIixzdHJva2U6Im5vbmUiLCJkYXRhLXRlc3RpZCI6ImRldmljZS1nbHlwaC1zY3JlZW4tb24ifSksWCgicmVjdCIse3g6IjQiLHk6IjIuNSIsd2lkdGg6IjE2IixoZWlnaHQ6IjE5IixyeDoiMi41In0pLFgoImxpbmUiLHt4MToiMTIiLHkxOiIxOC41Iix4MjoiMTIiLHkyOiIxOC41In0pXX0pO2Nhc2Uid2F0Y2giOnJldHVybiBYKCJzdmciLHsuLi5LLGNoaWxkcmVuOltYKCJyZWN0Iix7eDoiNi41Iix5OiI3Iix3aWR0aDoiMTEiLGhlaWdodDoiMTAiLHJ4OiIzIn0pLFgoInBhdGgiLHtkOiJNOC41IDdsLjYtMy4yQTEuNSAxLjUgMCAwIDEgMTAuNiAyLjVoMi44YTEuNSAxLjUgMCAwIDEgMS41IDEuM0wxNS41IDcifSksWCgicGF0aCIse2Q6Ik04LjUgMTdsLjYgMy4yYTEuNSAxLjUgMCAwIDAgMS41IDEuM2gyLjhhMS41IDEuNSAwIDAgMCAxLjUtMS4zbC42LTMuMiJ9KV19KTtjYXNlInZpc2lvbiI6cmV0dXJuIFgoInN2ZyIsey4uLkssY2hpbGRyZW46WCgicGF0aCIse2Q6Ik0zIDExYTQgNCAwIDAgMSA0LTRoMTBhNCA0IDAgMCAxIDQgNHYyLjVhMi41IDIuNSAwIDAgMS0yLjUgMi41Yy0xLjggMC0yLjUtMS4yLTMuNS0xLjgtLjktLjUtMS42LS43LTIuNS0uN3MtMS42LjItMi41LjdjLTEgLjYtMS43IDEuOC0zLjUgMS44QTIuNSAyLjUgMCAwIDEgMyAxMy41eiJ9KX0pO2RlZmF1bHQ6cmV0dXJuIFgoInN2ZyIsey4uLkssY2hpbGRyZW46W1EmJlgoInJlY3QiLHt4OiI2Iix5OiIzIix3aWR0aDoiMTEiLGhlaWdodDoiMTkiLHJ4OiIyIixmaWxsOiIjNDdiN2ZmIixzdHJva2U6Im5vbmUiLCJkYXRhLXRlc3RpZCI6ImRldmljZS1nbHlwaC1zY3JlZW4tb24ifSksWCgicmVjdCIse3g6IjYuNSIseToiMi41Iix3aWR0aDoiMTEiLGhlaWdodDoiMTkiLHJ4OiIyLjgifSksWCgibGluZSIse3gxOiIxMC41Iix5MToiNSIseDI6IjEzLjUiLHkyOiI1In0pXX0pfX1mdW5jdGlvbiBsMih7bWluOiQsbWF4OkosdmFsdWU6USxkaXNhYmxlZDpaLGNsYXNzTmFtZTpLPSIiLHN0eWxlOlksLi4ucX0pe2xldCBHPWAkeyhKPiQ/TWF0aC5tYXgoMCxNYXRoLm1pbigxLChRLSQpLyhKLSQpKSk6MCkqMTAwfSVgLEI9Wj9UMSgwLjMpOiJ2YXIoLS1zZXJ2ZS1zaW0tdGludCkiLE49IlsmOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja106aC1bNHB4XSBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOltiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0b19yaWdodCx2YXIoLS1zbGlkZXItZmlsbC1jb2xvcilfdmFyKC0tc2xpZGVyLWZpbGwpLGNvbG9yLW1peChpbl9zcmdiLHZhcigtLXNlcnZlLXNpbS1pbmspXzIyJSx0cmFuc3BhcmVudClfdmFyKC0tc2xpZGVyLWZpbGwpKV0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOmgtWzRweF0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS10cmFja106YmctaW5rLzIyIFsmOjotbW96LXJhbmdlLXByb2dyZXNzXTpoLVs0cHhdIFsmOjotbW96LXJhbmdlLXByb2dyZXNzXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOmJnLVt2YXIoLS1zbGlkZXItZmlsbC1jb2xvcildIix6PSJbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOmFwcGVhcmFuY2Utbm9uZSBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06cm91bmRlZC1mdWxsIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06Ymctd2hpdGUgWyY6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpiZy13aGl0ZS81MCBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNoYWRvdy1bMF8xcHhfM3B4X3JnYmEoMCwwLDAsMC40NSldIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06LW10LVs0LjVweF0gWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotbW96LXJhbmdlLXRodW1iXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOmJvcmRlci1ub25lIFsmOjotbW96LXJhbmdlLXRodW1iXTpiZy13aGl0ZSBbJjpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYl06Ymctd2hpdGUvNTAiO3JldHVybiBYKCJpbnB1dCIsey4uLnEsdHlwZToicmFuZ2UiLG1pbjokLG1heDpKLHZhbHVlOlEsZGlzYWJsZWQ6WixzdHlsZTp7Ii0tc2xpZGVyLWZpbGwiOkcsIi0tc2xpZGVyLWZpbGwtY29sb3IiOkIsLi4uWX0sY2xhc3NOYW1lOmBoLVsxM3B4XSB3LWZ1bGwgYXBwZWFyYW5jZS1ub25lIHJvdW5kZWQtZnVsbCBiZy10cmFuc3BhcmVudCBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpbb3V0bGluZToxLjVweF9zb2xpZF9jb2xvci1taXgoaW5fc3JnYix2YXIoLS1zZXJ2ZS1zaW0tdGludClfNTUlLHRyYW5zcGFyZW50KV0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC00ICR7Wj8iY3Vyc29yLWRlZmF1bHQiOiJjdXJzb3ItcG9pbnRlciJ9ICR7Tn0gJHt6fSAke0t9YH0pfXZhciBwSj1be2lkOiJjbG9zZWQiLGxhYmVsOiJDbG9zZWQiLGhpbmdlRGVncmVlczowfSx7aWQ6ImJvb2siLGxhYmVsOiJCb29rIixoaW5nZURlZ3JlZXM6MTMwfSx7aWQ6Im9wZW4iLGxhYmVsOiJPcGVuIixoaW5nZURlZ3JlZXM6MTgwfV0sdUo9e3dpZHRoOjEzOTgsaGVpZ2h0OjIwMzR9LGxKPXt3aWR0aDoyMDA3LGhlaWdodDoyODUzfTt2YXIgZEo9cEoubWFwKCh7aWQ6JCxsYWJlbDpKLGhpbmdlRGVncmVlczpRfSk9PmNKKCQsSixRKSk7ZnVuY3Rpb24gY0ooJCxKLFEpe2xldCBaPVE8OTAsSz1aP3VKOmxKO3JldHVybntpZDokLGxhYmVsOkosaGluZ2VEZWdyZWVzOlEsY292ZXJBY3RpdmU6Wix3aWR0aDpLLndpZHRoLGhlaWdodDpLLmhlaWdodH19ZnVuY3Rpb24gWDYoKXtyZXR1cm4gZEp9dmFyIGlKPVg2KCksb0o9e2NvbG9yOiJ2YXIoLS1zZXJ2ZS1zaW0tdGludCkifSxySj17Y2xvc2VkOlgoInNwYW4iLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6ImNvbnRlbnRzIixjaGlsZHJlbjpYKHUyLHt0eXBlOiJpcGhvbmUiLGR1bzohMCxzaXplOjE4fSl9KSxib29rOlgoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDEwMiAxMDIiLGZpbGw6Im5vbmUiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOlgoInBhdGgiLHtkOiJNODUuNzQyMiAxNC41NzEzQzg5Ljc1OTUgMTMuNzc5IDkzLjUgMTYuODUzNiA5My41IDIwLjk0ODJWODIuNTcxM0M5My40OTk4IDg2LjUzOTYgODkuOTc0NSA4OS41ODE2IDg2LjA0ODggODkuMDAxTDUyLjE4MjYgODMuOTkyMkM1MS4wNjY5IDgzLjgyNzIgNDkuOTMzMSA4My44MjcyIDQ4LjgxNzQgODMuOTkyMkwxNC45NTEyIDg5LjAwMUMxMS4wMjU1IDg5LjU4MTYgNy41MDAyMSA4Ni41Mzk2IDcuNSA4Mi41NzEzVjIwLjk0ODJDNy41IDE2Ljg1MzYgMTEuMjQwNSAxMy43NzkgMTUuMjU3OCAxNC41NzEzTDQ4LjI3NTQgMjEuMDgyQzQ5Ljc0NDQgMjEuMzcxNyA1MS4yNTU2IDIxLjM3MTcgNTIuNzI0NiAyMS4wODJMODUuNzQyMiAxNC41NzEzWiIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiI1In0pfSksb3BlbjpYKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAzMiAzMiIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOltYKCJyZWN0Iix7eDoiMiIseToiNCIsd2lkdGg6IjI4IixoZWlnaHQ6IjI0IixyeDoiMyJ9KSxYKCJwYXRoIix7ZDoiTTE0IDI1aDQifSldfSl9O2Z1bmN0aW9uIEs2KHthbmdsZTokLG9uQ2hhbmdlOkosb25Qb3NlOlEsb3JpZW50YXRpb246Wj0icG9ydHJhaXQifSl7bGV0IEs9e3BvcnRyYWl0OjAsbGFuZHNjYXBlX2xlZnQ6OTAscG9ydHJhaXRfdXBzaWRlX2Rvd246MTgwLGxhbmRzY2FwZV9yaWdodDotOTB9W1pdLFtZLHFdPUEoSyk7XygoKT0+e3EoKEIpPT5CKygoSy1CKzU0MCklMzYwKzM2MCklMzYwLTE4MCl9LFtLXSk7bGV0W1YsR109QSghMSk7cmV0dXJuIF8oKCk9Plo2KHdpbmRvdyxHKSxbXSksWCgiZGl2Iix7cm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjoiRm9sZCBwb3NlIixjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjpWP1goImRpdiIse2NsYXNzTmFtZToiZmxleCB3LTM2IGl0ZW1zLWNlbnRlciBnYXAtMS41IHB4LTEiLGNoaWxkcmVuOltYKGwyLHsiYXJpYS1sYWJlbCI6IkhpbmdlIGFuZ2xlIiwiYXJpYS12YWx1ZXRleHQiOmAke01hdGgucm91bmQoJCl9IGRlZ3JlZXNgLG1pbjowLG1heDoxODAsc3RlcDowLjEsdmFsdWU6JCxvbkNoYW5nZTooQik9PkooTnVtYmVyKEIuY3VycmVudFRhcmdldC52YWx1ZSkpLGNsYXNzTmFtZToibWluLXctMCBmbGV4LTEifSksWCgib3V0cHV0Iix7Y2xhc3NOYW1lOiJ3LTExIHRleHQtcmlnaHQgdGV4dC1bMTFweF0gdGFidWxhci1udW1zIHRleHQtaW5rLTkwIixjaGlsZHJlbjpbTWF0aC5yb3VuZCgkKSwiwrAiXX0pXX0pOmlKLm1hcCgoQik9PntsZXQgTj1NYXRoLmFicygkLUIuaGluZ2VEZWdyZWVzKTwwLjY7cmV0dXJuIFgoSTEuQnV0dG9uLHsiYXJpYS1sYWJlbCI6YCR7Qi5sYWJlbH0gcG9zZWAsdGl0bGU6YCR7Qi5sYWJlbH0gwrcgJHtCLmhpbmdlRGVncmVlc33CsGAsImFyaWEtcHJlc3NlZCI6TixvbkNsaWNrOigpPT5RKEIuaWQpLHN0eWxlOk4/b0o6dm9pZCAwLGNoaWxkcmVuOlgoInNwYW4iLHtjbGFzc05hbWU6ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtb3Rpb24tcmVkdWNlOnRyYW5zaXRpb24tbm9uZSIsc3R5bGU6e3RyYW5zZm9ybTpgcm90YXRlKCR7WX1kZWcpYCx0cmFuc2l0aW9uOiJ0cmFuc2Zvcm0gMzAwbXMgZWFzZS1pbi1vdXQifSxjaGlsZHJlbjpySltCLmlkXX0pfSxCLmlkKX0pfSl9ZnVuY3Rpb24gbkooJCxKKXtmb3IodmFyIFEgaW4gSikkW1FdPUpbUV07cmV0dXJuICR9ZnVuY3Rpb24gWTYoJCxKKXtmb3IodmFyIFEgaW4gJClpZihRIT09Il9fc291cmNlIiYmIShRIGluIEopKXJldHVybiEwO2Zvcih2YXIgWiBpbiBKKWlmKFohPT0iX19zb3VyY2UiJiYkW1pdIT09SltaXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBxNigkLEope3RoaXMucHJvcHM9JCx0aGlzLmNvbnRleHQ9Sn0ocTYucHJvdG90eXBlPW5ldyBuMSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAscTYucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbigkLEope3JldHVybiBZNih0aGlzLnByb3BzLCQpfHxZNih0aGlzLnN0YXRlLEopfTt2YXIgVjY9dC5fX2I7dC5fX2I9ZnVuY3Rpb24oJCl7JC50eXBlJiYkLnR5cGUuX19mJiYkLnJlZiYmKCQucHJvcHMucmVmPSQucmVmLCQucmVmPW51bGwpLFY2JiZWNigkKX07dmFyIGFKPXQuX19lO3QuX19lPWZ1bmN0aW9uKCQsSixRLFope2lmKCQudGhlbil7Zm9yKHZhciBLLFk9SjtZPVkuX187KWlmKChLPVkuX19jKSYmSy5fX2MpcmV0dXJuIEouX19lPT1udWxsJiYoSi5fX2U9US5fX2UsSi5fX2s9US5fX2spLEsuX19jKCQsSil9YUooJCxKLFEsWil9O3ZhciBHNj10LnVubW91bnQ7ZnVuY3Rpb24gSDYoJCxKLFEpe3JldHVybiAkJiYoJC5fX2MmJiQuX19jLl9fSCYmKCQuX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKFope3R5cGVvZiBaLl9fYz09ImZ1bmN0aW9uIiYmWi5fX2MoKX0pLCQuX19jLl9fSD1udWxsKSwoJD1uSih7fSwkKSkuX19jIT1udWxsJiYoJC5fX2MuX19QPT09USYmKCQuX19jLl9fUD1KKSwkLl9fYy5fX2U9ITAsJC5fX2M9bnVsbCksJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gSDYoWixKLFEpfSkpLCR9ZnVuY3Rpb24gazYoJCxKLFEpe3JldHVybiAkJiZRJiYoJC5fX3Y9bnVsbCwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKFope3JldHVybiBrNihaLEosUSl9KSwkLl9fYyYmJC5fX2MuX19QPT09SiYmKCQuX19lJiZRLmFwcGVuZENoaWxkKCQuX19lKSwkLl9fYy5fX2U9ITAsJC5fX2MuX19QPVEpKSwkfWZ1bmN0aW9uIGwzKCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIEM2KCQpe3ZhciBKPSQuX18mJiQuX18uX19jO3JldHVybiBKJiZKLl9fYSYmSi5fX2EoJCl9ZnVuY3Rpb24gZDIoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH10LnVubW91bnQ9ZnVuY3Rpb24oJCl7dmFyIEo9JC5fX2M7SiYmKEouX196PSEwKSxKJiZKLl9fUiYmSi5fX1IoKSxKJiYzMiYkLl9fdSYmKCQudHlwZT1udWxsKSxHNiYmRzYoJCl9LChsMy5wcm90b3R5cGU9bmV3IG4xKS5fX2M9ZnVuY3Rpb24oJCxKKXt2YXIgUT1KLl9fYyxaPXRoaXM7Wi5vPT1udWxsJiYoWi5vPVtdKSxaLm8ucHVzaChRKTt2YXIgSz1DNihaLl9fdiksWT0hMSxxPWZ1bmN0aW9uKCl7WXx8Wi5fX3p8fChZPSEwLFEuX19SPW51bGwsSz9LKEcpOkcoKSl9O1EuX19SPXE7dmFyIFY9US5fX1A7US5fX1A9bnVsbDt2YXIgRz1mdW5jdGlvbigpe2lmKCEtLVouX191KXtpZihaLnN0YXRlLl9fYSl7dmFyIEI9Wi5zdGF0ZS5fX2E7Wi5fX3YuX19rWzBdPWs2KEIsQi5fX2MuX19QLEIuX19jLl9fTyl9dmFyIE47Zm9yKFouc2V0U3RhdGUoe19fYTpaLl9fYj1udWxsfSk7Tj1aLm8ucG9wKCk7KU4uX19QPVYsTi5mb3JjZVVwZGF0ZSgpfX07Wi5fX3UrK3x8MzImSi5fX3V8fFouc2V0U3RhdGUoe19fYTpaLl9fYj1aLl9fdi5fX2tbMF19KSwkLnRoZW4ocSxxKX0sbDMucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSxsMy5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQsSil7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIFE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksWj10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1INih0aGlzLl9fYixRLFouX19PPVouX19QKX10aGlzLl9fYj1udWxsfXZhciBLPUouX19hJiZsMShLMSxudWxsLCQuZmFsbGJhY2spO3JldHVybiBLJiYoSy5fX3UmPS0zMyksW2wxKEsxLG51bGwsSi5fX2E/bnVsbDokLmNoaWxkcmVuKSxLXX07dmFyIEI2PWZ1bmN0aW9uKCQsSixRKXtpZigrK1FbMV09PT1RWzBdJiYkLmwuZGVsZXRlKEopLCQucHJvcHMucmV2ZWFsT3JkZXImJigkLnByb3BzLnJldmVhbE9yZGVyWzBdIT09InQifHwhJC5sLnNpemUpKWZvcihRPSQuaTtROyl7Zm9yKDtRLmxlbmd0aD4zOylRLnBvcCgpKCk7aWYoUVsxXTxRWzBdKWJyZWFrOyQuaT1RPVFbMl19fTsoZDIucHJvdG90eXBlPW5ldyBuMSkuX19hPWZ1bmN0aW9uKCQpe3ZhciBKPXRoaXMsUT1DNihKLl9fdiksWj1KLmwuZ2V0KCQpO3JldHVybiBaWzBdKyssZnVuY3Rpb24oSyl7dmFyIFk9ZnVuY3Rpb24oKXtKLnByb3BzLnJldmVhbE9yZGVyPyhaLnB1c2goSyksQjYoSiwkLFopKTpLKCl9O1E/UShZKTpZKCl9fSxkMi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciBKPUswKCQuY2hpbGRyZW4pOyQucmV2ZWFsT3JkZXImJiQucmV2ZWFsT3JkZXJbMF09PT0iYiImJkoucmV2ZXJzZSgpO2Zvcih2YXIgUT1KLmxlbmd0aDtRLS07KXRoaXMubC5zZXQoSltRXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gJC5jaGlsZHJlbn0sZDIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1kMi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgJD10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKEosUSl7QjYoJCxRLEopfSl9O3ZhciBzSj10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyx0Sj0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sZUo9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLywkUT0vW0EtWjAtOV0vZyxKUT10eXBlb2YgZG9jdW1lbnQ8InUiLFFRPWZ1bmN0aW9uKCQpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdCgkKX07ZnVuY3Rpb24gRjYoJCxKLFEpe3JldHVybiBKLl9faz09bnVsbCYmKEoudGV4dENvbnRlbnQ9IiIpLFIwKCQsSiksdHlwZW9mIFE9PSJmdW5jdGlvbiImJlEoKSwkPyQuX19jOm51bGx9bjEucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oJCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4xLnByb3RvdHlwZSwkLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbIlVOU0FGRV8iKyRdfSxzZXQ6ZnVuY3Rpb24oSil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsJCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkp9KX19KX0pO3ZhciB6Nj10LmV2ZW50O3QuZXZlbnQ9ZnVuY3Rpb24oJCl7cmV0dXJuIHo2JiYoJD16NigkKSksJC5wZXJzaXN0PWZ1bmN0aW9uKCl7fSwkLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSwkLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LCQubmF0aXZlRXZlbnQ9JH07dmFyIEE2LFpRPXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxONj10LnZub2RlO3Qudm5vZGU9ZnVuY3Rpb24oJCl7dHlwZW9mICQudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKEope3Zhcntwcm9wczpRLHR5cGU6Wn09SixLPXt9LFk9Wi5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgcSBpbiBRKXt2YXIgVj1RW3FdO2lmKCEocT09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIFEpJiZWPT1udWxsfHxKUSYmcT09PSJjaGlsZHJlbiImJlo9PT0ibm9zY3JpcHQifHxxPT09ImNsYXNzInx8cT09PSJjbGFzc05hbWUiKSl7dmFyIEc9cS50b0xvd2VyQ2FzZSgpO3E9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluIFEmJlEudmFsdWU9PW51bGw/cT0idmFsdWUiOnE9PT0iZG93bmxvYWQiJiZWPT09ITA/Vj0iIjpHPT09InRyYW5zbGF0ZSImJlY9PT0ibm8iP1Y9ITE6R1swXT09PSJvIiYmR1sxXT09PSJuIj9HPT09Im9uZG91YmxlY2xpY2siP3E9Im9uZGJsY2xpY2siOkchPT0ib25jaGFuZ2UifHxaIT09ImlucHV0IiYmWiE9PSJ0ZXh0YXJlYSJ8fFFRKFEudHlwZSk/Rz09PSJvbmZvY3VzIj9xPSJvbmZvY3VzaW4iOkc9PT0ib25ibHVyIj9xPSJvbmZvY3Vzb3V0IjplSi50ZXN0KHEpJiYocT1HKTpHPXE9Im9uaW5wdXQiOlkmJnRKLnRlc3QocSk/cT1xLnJlcGxhY2UoJFEsIi0kJiIpLnRvTG93ZXJDYXNlKCk6Vj09PW51bGwmJihWPXZvaWQgMCksRz09PSJvbmlucHV0IiYmS1txPUddJiYocT0ib25pbnB1dENhcHR1cmUiKSxLW3FdPVZ9fVo9PSJzZWxlY3QiJiYoSy5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShLLnZhbHVlKSYmKEsudmFsdWU9SzAoUS5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihCKXtCLnByb3BzLnNlbGVjdGVkPUsudmFsdWUuaW5kZXhPZihCLnByb3BzLnZhbHVlKSE9LTF9KSksSy5kZWZhdWx0VmFsdWUhPW51bGwmJihLLnZhbHVlPUswKFEuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oQil7Qi5wcm9wcy5zZWxlY3RlZD1LLm11bHRpcGxlP0suZGVmYXVsdFZhbHVlLmluZGV4T2YoQi5wcm9wcy52YWx1ZSkhPS0xOksuZGVmYXVsdFZhbHVlPT1CLnByb3BzLnZhbHVlfSkpKSxRLmNsYXNzJiYhUS5jbGFzc05hbWU/KEsuY2xhc3M9US5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkoSywiY2xhc3NOYW1lIixaUSkpOlEuY2xhc3NOYW1lJiYoSy5jbGFzcz1LLmNsYXNzTmFtZT1RLmNsYXNzTmFtZSksSi5wcm9wcz1LfSgkKSwkLiQkdHlwZW9mPXNKLE42JiZONigkKX07dmFyIFU2PXQuX19yO3QuX19yPWZ1bmN0aW9uKCQpe1U2JiZVNigkKSxBNj0kLl9fY307dmFyIEw2PXQuZGlmZmVkO3QuZGlmZmVkPWZ1bmN0aW9uKCQpe0w2JiZMNigkKTt2YXJ7cHJvcHM6SixfX2U6UX09JDtRIT1udWxsJiYkLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gSiYmSi52YWx1ZSE9PVEudmFsdWUmJihRLnZhbHVlPUoudmFsdWU9PW51bGw/IiI6Si52YWx1ZSksQTY9bnVsbH07ZnVuY3Rpb24gTzYoJCl7cmV0dXJuISEkLl9fayYmKFIwKG51bGwsJCksITApfWZ1bmN0aW9uIE02KCQpe3JldHVybntyZW5kZXI6ZnVuY3Rpb24oSil7RjYoSiwkKX0sdW5tb3VudDpmdW5jdGlvbigpe082KCQpfX19ZnVuY3Rpb24gRzIoe29wZW46JH0pe3JldHVybiBYKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNsYXNzTmFtZToibGVtLWNoZXZyb24gdGV4dC1pbmstNTAiLHN0eWxlOnt0cmFuc2Zvcm06JD8icm90YXRlKDE4MGRlZykiOiJyb3RhdGUoMGRlZykifSxjaGlsZHJlbjpYKCJwb2x5bGluZSIse3BvaW50czoiNiA5IDEyIDE1IDE4IDkifSl9KX1mdW5jdGlvbiBjMih7ZGlyOiR9KXtyZXR1cm4gWCgic3ZnIix7d2lkdGg6IjkiLGhlaWdodDoiOSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNsYXNzTmFtZToibXItWzNweF0iLGNoaWxkcmVuOiQ9PT0idXAiP1goInBvbHlnb24iLHtwb2ludHM6IjEyLDQgMjAsMTggNCwxOCJ9KTpYKCJwb2x5Z29uIix7cG9pbnRzOiI0LDYgMjAsNiAxMiwyMCJ9KX0pfWZ1bmN0aW9uIEIyKCl7cmV0dXJuIFgoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOlgoInBvbHlnb24iLHtwb2ludHM6IjYsNCAyMCwxMiA2LDIwIn0pfSl9ZnVuY3Rpb24gZDMoKXtyZXR1cm4gWCgic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46W1goInJlY3QiLHt4OiI2Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiIxNiJ9KSxYKCJyZWN0Iix7eDoiMTQiLHk6IjQiLHdpZHRoOiI0IixoZWlnaHQ6IjE2In0pXX0pfWZ1bmN0aW9uIHoyKCl7cmV0dXJuIFgoInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOlgoInJlY3QiLHt4OiI1Iix5OiI1Iix3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHJ4OiIxLjUifSl9KX1mdW5jdGlvbiBjMygpe3JldHVybiBYKGQ1LHtzaXplOjEyLHN0cm9rZVdpZHRoOjIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KX1mdW5jdGlvbiBpMygpe3JldHVybiBYKCJzdmciLHt3aWR0aDoiOSIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNCAyIDkgMTMiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpYKCJwYXRoIix7ZDoiTTYuMDA4NTIgMTQuODA1NEM1Ljg5MTgxIDE0LjkzNSA1Ljc1ODE1IDE0Ljk5OTggNS42MDc1NiAxNC45OTk4QzUuNDU2OTYgMTUuMDAzMyA1LjMyMzMgMTQuOTYxMyA1LjIwNjU5IDE0Ljg3MzdDNS4wOTM2NCAxNC43ODYxIDUuMDI1ODcgMTQuNjcyMyA1LjAwMzI4IDE0LjUzMjJDNC45ODQ0NiAxNC4zOTIxIDUuMDQ2NTggMTQuMjQ1IDUuMTg5NjUgMTQuMDkwOUw2Ljk0NTk5IDEyLjE1MjJMNy4yNDUzIDEwLjg3NTVMOC4xOTk3MSAxMS45ODkzTDguMDU4NTMgMTIuMzkzOUM4LjAyMDg4IDEyLjQ5NTUgNy45ODY5OSAxMi41NzA4IDcuOTU2ODcgMTIuNjE5OEM3LjkzMDUyIDEyLjY2ODggNy44NzQwNCAxMi43NDA2IDcuNzg3NDUgMTIuODM1Mkw2LjAwODUyIDE0LjgwNTRaTTEwLjM0NTcgMTQuNjQyNUw5LjEwMzI5IDEyLjMwNDZDOS4wNzY5NCAxMi4yNjI1IDkuMDU0MzUgMTIuMjIyMyA5LjAzNTUzIDEyLjE4MzdDOS4wMTY3IDEyLjE0NTIgOC45NzcxNyAxMi4wOTA5IDguOTE2OTMgMTIuMDIwOUw3LjcxOTY4IDEwLjYxODFDNy40OTM3OSAxMC4zNTU0IDcuMzM3NTQgMTAuMTI5NSA3LjI1MDk1IDkuOTQwMzRDNy4xNjQzNSA5Ljc0NzcgNy4xMzQyNCA5LjQ5OTAxIDcuMTYwNTkgOS4xOTQyOUw3LjI2MjI0IDcuOTgwNjVDNy4yNjk3NyA3LjkwNzEgNy4yMzIxMiA3Ljg1NDU2IDcuMTQ5MjkgNy44MjMwNEM3LjA2NjQ3IDcuNzkxNTEgNi45ODU1MiA3LjgwOTAzIDYuOTA2NDYgNy44NzU1N0w2LjQ3MTYxIDguMjQzMzRMNi4zNDE3MiA5LjY3MjM5QzYuMzIyODkgOS44NDc1MiA2LjI2NDU0IDkuOTc4ODcgNi4xNjY2NSAxMC4wNjY0QzYuMDY4NzYgMTAuMTU0IDUuOTM4ODcgMTAuMTkyNSA1Ljc3Njk4IDEwLjE4MkM1LjYxMTMyIDEwLjE3NSA1LjQ4MzMxIDEwLjExOSA1LjM5Mjk1IDEwLjAxMzlDNS4zMDYzNiA5LjkwODgyIDUuMjY4NzEgOS43NzM5NyA1LjI4MDAxIDkuNjA5MzVMNS4zODczMSA4LjMwNjM5QzUuNDAyMzcgOC4xMjc3NiA1LjQzODEzIDcuOTc1NCA1LjQ5NDYxIDcuODQ5MzFDNS41NTQ4NSA3LjcyMzIxIDUuNjYwMjYgNy41OTE4NyA1LjgxMDg2IDcuNDU1MjdMNi43MTQ0NSA2LjYyNTE2QzcuMDA0MzUgNi4zNjI0NyA3LjI2OTc3IDYuMTYxMDcgNy41MTA3MyA2LjAyMDk2QzcuNzUxNjggNS44NzczNiA4LjAyODQxIDUuODA1NTYgOC4zNDA5IDUuODA1NTZDOC43NTg4IDUuODA1NTYgOS4wNzg4MiA1LjkzMzQgOS4zMDA5NSA2LjE4OTA5QzkuNTI2ODUgNi40NDQ3OCA5LjYyNDc0IDYuNzYxNzYgOS41OTQ2MiA3LjE0MDA0TDkuNDc2MDIgOC43MzE5NUM5LjQ1MzQzIDkuMDE1NjYgOS40MTk1NSA5LjI2MjU5IDkuMzc0MzcgOS40NzI3NUM5LjMyOTE5IDkuNjgyOSA5LjI1Mzg5IDkuOTI5ODMgOS4xNDg0NyAxMC4yMTM1TDkuMDkyIDEwLjM2MDZMOS44NjU2OSAxMS4zNzk5QzkuOTIyMTcgMTEuNDUzNCA5Ljk4MDUyIDExLjUzNCAxMC4wNDA4IDExLjYyMTZDMTAuMTAxIDExLjcwOTEgMTAuMTUzNyAxMS43OTY3IDEwLjE5ODkgMTEuODg0M0wxMS40MDc0IDE0LjE2NDRDMTEuNTA1MyAxNC4zNTAxIDExLjUyNDEgMTQuNTExMiAxMS40NjM5IDE0LjY0NzhDMTEuNDAzNyAxNC43ODQ0IDExLjMwMiAxNC44ODI1IDExLjE1ODkgMTQuOTQyQzExLjAxOTYgMTUuMDAxNSAxMC44NzA5IDE1LjAxMDMgMTAuNzEyOCAxNC45NjgzQzEwLjU1ODQgMTQuOTI2MiAxMC40MzYxIDE0LjgxNzcgMTAuMzQ1NyAxNC42NDI1Wk0xMi40MDcgNy45NjQ4OUMxMi41ODQgNy45NjQ4OSAxMi43MjcgOC4wMTA0MiAxMi44MzYyIDguMTAxNDlDMTIuOTQ1NCA4LjE4OTA1IDEzIDguMzA2MzkgMTMgOC40NTM1QzEzIDguNjExMTEgMTIuOTQ1NCA4LjczMzcgMTIuODM2MiA4LjgyMTI3QzEyLjczMDggOC45MDg4MyAxMi41ODc3IDguOTUyNjEgMTIuNDA3IDguOTUyNjFIMTEuMTMwN0MxMC45NTM4IDguOTUyNjEgMTAuODE0NSA4LjkzNjg1IDEwLjcxMjggOC45MDUzM0MxMC42MTEyIDguODcwMyAxMC41MTMzIDguODA3MjYgMTAuNDE5MSA4LjcxNjE5TDEwLjA1MjEgOC4zNzk5NEwxMC4xNDI0IDcuMDQwMjFMMTEuMDM0NyA3Ljk2NDg5SDEyLjQwN1pNOS4wMDE2NCA1LjMxMTY5QzguNzcxOTggNS4zMTE2OSA4LjU2MzAzIDUuMjYwOTEgOC4zNzQ3OCA1LjE1OTMzQzguMTg2NTMgNS4wNTQyNiA4LjAzNTk0IDQuOTE0MTUgNy45MjI5OSA0LjczOTAzQzcuODEzODEgNC41NjM5IDcuNzU5MjEgNC4zNjk1IDcuNzU5MjEgNC4xNTU4NUM3Ljc1OTIxIDMuOTQyMTkgNy44MTM4MSAzLjc0NzggNy45MjI5OSAzLjU3MjY3QzguMDM1OTQgMy4zOTc1NCA4LjE4NjUzIDMuMjU5MTkgOC4zNzQ3OCAzLjE1NzYyQzguNTYzMDMgMy4wNTI1NCA4Ljc3MTk4IDMgOS4wMDE2NCAzQzkuMjMxMyAzIDkuNDQwMjYgMy4wNTI1NCA5LjYyODUgMy4xNTc2MkM5LjgxNjc1IDMuMjU5MTkgOS45NjU0NiAzLjM5NzU0IDEwLjA3NDYgMy41NzI2N0MxMC4xODc2IDMuNzQ3OCAxMC4yNDQxIDMuOTQyMTkgMTAuMjQ0MSA0LjE1NTg1QzEwLjI0NDEgNC4zNjk1IDEwLjE4NzYgNC41NjM5IDEwLjA3NDYgNC43MzkwM0M5Ljk2NTQ2IDQuOTE0MTUgOS44MTY3NSA1LjA1NDI2IDkuNjI4NSA1LjE1OTMzQzkuNDQwMjYgNS4yNjA5MSA5LjIzMTMgNS4zMTE2OSA5LjAwMTY0IDUuMzExNjlaIn0pfSl9ZnVuY3Rpb24gbzMoKXtyZXR1cm4gWCgic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIyNiAxIDEyIDE0IixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46WCgicGF0aCIse2Q6Ik0zMy4yNDM3IDQuNTg0NTlDMzMuMDAwOCA0LjU4NDU5IDMyLjc4MTcgNC41MjcyOCAzMi41ODY2IDQuNDEyNjhDMzIuMzkxNSA0LjI5NDEyIDMyLjIzNDIgNC4xMzgwMSAzMi4xMTQ3IDMuOTQ0MzdDMzEuOTk5MiAzLjc0Njc3IDMxLjk0MTQgMy41Mjk0MSAzMS45NDE0IDMuMjkyMjlDMzEuOTQxNCAzLjA1MTIyIDMxLjk5OTIgMi44MzM4NyAzMi4xMTQ3IDIuNjQwMjJDMzIuMjM0MiAyLjQ0NjU3IDMyLjM5MTUgMi4yOTI0NSAzMi41ODY2IDIuMTc3ODRDMzIuNzgxNyAyLjA1OTI4IDMzLjAwMDggMiAzMy4yNDM3IDJDMzMuNDgyNiAyIDMzLjY5OTcgMi4wNTkyOCAzMy44OTQ4IDIuMTc3ODRDMzQuMDkzOSAyLjI5MjQ1IDM0LjI1MTIgMi40NDY1NyAzNC4zNjY3IDIuNjQwMjJDMzQuNDg2MiAyLjgzMzg3IDM0LjU0NTkgMy4wNTEyMiAzNC41NDU5IDMuMjkyMjlDMzQuNTQ1OSAzLjUyOTQxIDM0LjQ4NjIgMy43NDY3NyAzNC4zNjY3IDMuOTQ0MzdDMzQuMjUxMiA0LjEzODAxIDM0LjA5MzkgNC4yOTQxMiAzMy44OTQ4IDQuNDEyNjhDMzMuNjk5NyA0LjUyNzI4IDMzLjQ4MjYgNC41ODQ1OSAzMy4yNDM3IDQuNTg0NTlaTTMxLjIwMDcgOS43NDE5MUMzMS4wNzMzIDkuNjcwNzcgMzAuOTQxOSA5LjU5NTY4IDMwLjgwNjUgOS41MTY2NEMzMC42NzUgOS40Mzc2IDMwLjU1OTYgOS4zNDI3NiAzMC40NiA5LjIzMjFDMzAuMzYwNCA5LjExNzQ5IDMwLjI5MjcgOC45NzcyIDMwLjI1NjkgOC44MTEyMkMzMC4yMjUgOC42NDEyOCAzMC4yNDQ5IDguNDI5ODUgMzAuMzE2NiA4LjE3NjkzTDMwLjgwNjUgNi40ODE1M0MzMC44MzgzIDYuMzY2OTIgMzAuODE4NCA2LjI3OTk4IDMwLjc0NjcgNi4yMjA3QzMwLjY3OSA2LjE1NzQ3IDMwLjU5NzQgNi4xMjk4MSAzMC41MDE4IDYuMTM3NzFMMjkuNjU5NSA2LjE5Njk5TDI5LjQwMjcgNy45MjIwMkMyOS4zNzg4IDguMTA3NzcgMjkuMzE1MSA4LjI0NjA5IDI5LjIxMTUgOC4zMzY5OEMyOS4xMDggOC40Mjc4OCAyOC45NzI2IDguNDY1NDIgMjguODA1MyA4LjQ0OTYxQzI4LjY0MiA4LjQzMzggMjguNTE4NiA4LjM2NjYyIDI4LjQzNDkgOC4yNDgwNkMyOC4zNTEzIDguMTI5NSAyOC4zMjE0IDcuOTc3MzUgMjguMzQ1MyA3Ljc5MTYxTDI4LjYyNjEgNS42ODEyNkMyOC42NSA1LjUxMTMyIDI4LjcxNTcgNS4zNzQ5OCAyOC44MjMyIDUuMjcyMjNDMjguOTMwOCA1LjE2OTQ4IDI5LjA2ODEgNS4xMTIxNyAyOS4yMzU0IDUuMTAwMzJMMzEuMzMyMSA0Ljk1MjEyQzMxLjg4MTcgNC45MTI2IDMyLjMzNTcgNC45Njk5IDMyLjY5NDEgNS4xMjQwM0MzMy4wNTI1IDUuMjc4MTYgMzMuMzY3MSA1LjUzODk5IDMzLjYzNzkgNS45MDY1MkwzNC42NzE0IDcuMzIzM0wzNi4xNzA4IDYuNjY1M0MzNi4zMzggNi41OTAyMSAzNi40ODkzIDYuNTc0NCAzNi42MjQ4IDYuNjE3ODdDMzYuNzYwMiA2LjY1NzM5IDM2Ljg2NTcgNi43NTIyNCAzNi45NDE0IDYuOTAyNDJDMzcuMDEzIDcuMDUyNTkgMzcuMDE5IDcuMTk0ODYgMzYuOTU5MyA3LjMyOTIzQzM2LjkwMzUgNy40NjM2IDM2Ljc5MiA3LjU2ODMyIDM2LjYyNDggNy42NDM0MUwzNC43MzExIDguNDc5MjVDMzQuNjAzNyA4LjUzODUzIDM0LjQ3NDMgOC41NTAzOSAzNC4zNDI4IDguNTE0ODJDMzQuMjE1NCA4LjQ3NTMgMzQuMTEzOCA4LjQwMDIxIDM0LjAzODIgOC4yODk1NkwzMy4zODExIDcuMzM1MTZDMzMuMzEzNCA3LjI0MDMxIDMzLjIyOTggNy4xOTg4MSAzMy4xMzAyIDcuMjEwNjdDMzMuMDMwNiA3LjIyMjUzIDMyLjk2NDkgNy4yODM3OCAzMi45MzMxIDcuMzk0NDRMMzIuNDkxIDguOTI5NzhMMzQuNzMxMSAxMC4zODgxQzM0Ljg0MjYgMTAuNDU5MiAzNC45MjIzIDEwLjU1NiAzNC45NzAxIDEwLjY3ODVDMzUuMDE3OSAxMC44MDEgMzUuMDI5OCAxMC45MjU1IDM1LjAwNTkgMTEuMDUyQzM0Ljk4NiAxMS4xNzQ1IDM0LjkyODIgMTEuMjc1MyAzNC44MzI3IDExLjM1NDNMMzIuNzcxOCAxMy4wOTcxQzMyLjYwODUgMTMuMjM1NCAzMi40NDUyIDEzLjI5ODcgMzIuMjgxOSAxMy4yODY4QzMyLjEyMjYgMTMuMjc1IDMxLjk5MzIgMTMuMjEzNyAzMS44OTM3IDEzLjEwMzFDMzEuNzk4MSAxMi45OTY0IDMxLjc1NDMgMTIuODY1OSAzMS43NjIyIDEyLjcxMThDMzEuNzcwMiAxMi41NTM3IDMxLjg1MzggMTIuNDA3NSAzMi4wMTMxIDEyLjI3MzFMMzMuNDg4NiAxMS4wMTY0TDMxLjIwMDcgOS43NDE5MVpNMjcuMjA0NCAxNC44NjM3QzI3LjA4NDkgMTQuNzU3IDI3LjAxNzIgMTQuNjE4NiAyNy4wMDEzIDE0LjQ0ODdDMjYuOTg5MyAxNC4yNzg4IDI3LjA2MSAxNC4xMTY3IDI3LjIxNjMgMTMuOTYyNkwyOS4yMjM1IDExLjk3NjdMMjkuOTM0MyA5LjQ4MTA4QzMwLjA0MTggOS42MTU0NCAzMC4xNzUzIDkuNzQ1ODYgMzAuMzM0NSA5Ljg3MjMyQzMwLjQ5NzggOS45OTQ4MyAzMC42OTMgMTAuMTE3MyAzMC45MiAxMC4yMzk5TDMxLjExNzEgMTAuMzQ2NkwzMC4zMDQ3IDEyLjQzMzJDMzAuMjUyOSAxMi41NTU3IDMwLjIwOTEgMTIuNjQwNyAzMC4xNzMzIDEyLjY4ODFDMzAuMTQxNCAxMi43MzU1IDMwLjA4NTYgMTIuNzk4OCAzMC4wMDYgMTIuODc3OEwyOC4wNzA2IDE0Ljc4MDdDMjcuOTE5MiAxNC45MjY5IDI3Ljc2MzkgMTUgMjcuNjA0NiAxNUMyNy40NDkzIDE1IDI3LjMxNTkgMTQuOTU0NiAyNy4yMDQ0IDE0Ljg2MzdaIn0pfSl9ZnVuY3Rpb24gcjMoKXtyZXR1cm4gWCgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI0OSAzIDE2IDEyIixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46WCgicGF0aCIse2Q6Ik01Ny4wMDI4IDExLjk0OUM1Ni44NDggMTEuOTQ5IDU2LjcxNzIgMTEuODk4NyA1Ni42MTAzIDExLjc5OEM1Ni41MDM1IDExLjY5MzkgNTYuNDUwMSAxMS41NzA3IDU2LjQ1MDEgMTEuNDI4NFY5LjAyODYzTDU0LjQyMTYgNy4xMDc3NkM1NC4yMjI3IDYuOTIwMzUgNTQuMDk1NSA2LjY5ODI1IDU0LjA0MDMgNi40NDE0NEM1My45ODUgNi4xODExNiA1NC4wMTA4IDUuOTI3ODIgNTQuMTE3NiA1LjY4MTQyQzU0LjIyODIgNS40Mzg0OSA1NC4zOTc3IDUuMjQ0MTQgNTQuNjI2MSA1LjA5ODM5QzU0Ljg1ODMgNC45NDkxNiA1NS4xMTYyIDQuODc0NTQgNTUuMzk5OSA0Ljg3NDU0SDU4LjExMzdDNTguNDIzMiA0Ljg3NDU0IDU4LjY4NDggNC45NzY5MiA1OC44OTg1IDUuMTgxNjhDNTkuMTE1OSA1LjM4Mjk2IDU5LjIyNDYgNS42MjkzNiA1OS4yMjQ2IDUuOTIwODdWNy43NjM2Nkg2MC44OTkzQzYxLjA1MDQgNy43NjM2NiA2MS4xNzk0IDcuODEzOTkgNjEuMjg2MiA3LjkxNDYzQzYxLjM5MzEgOC4wMTUyNyA2MS40NDY1IDguMTM4NDcgNjEuNDQ2NSA4LjI4NDIzQzYxLjQ0NjUgOC40MjY1MSA2MS4zOTMxIDguNTQ3OTggNjEuMjg2MiA4LjY0ODYyQzYxLjE3OTQgOC43NDkyNiA2MS4wNTA0IDguNzk5NTggNjAuODk5MyA4Ljc5OTU4SDU4LjY3MTlDNTguNTIwOSA4Ljc5OTU4IDU4LjM5MDEgOC43NDkyNiA1OC4yNzk1IDguNjQ4NjJDNTguMTcyNyA4LjU0Nzk4IDU4LjExOTIgOC40MjY1MSA1OC4xMTkyIDguMjg0MjNWNi45ODgwM0M1OC4xMTkyIDYuOTE4NjIgNTguMDk5IDYuODU0NDIgNTguMDU4NCA2Ljc5NTQyQzU4LjAxNzkgNi43MzI5NSA1Ny45NDQyIDYuNzAxNzIgNTcuODM3MyA2LjcwMTcySDU2LjA2MzJDNTUuOTkzMiA2LjcwMTcyIDU1Ljk0NTMgNi43Mjk0OCA1NS45MTk1IDYuNzg1MDFDNTUuODk3NCA2LjgzNzA2IDU1LjkwODQgNi44ODczOSA1NS45NTI2IDYuOTM1OTdMNTcuNDAwNyA4LjQ1NjAxQzU3LjUwMzkgOC41NjM2IDU3LjU1NTUgOC42ODE1OSA1Ny41NTU1IDguODA5OTlWMTEuNDI4NEM1Ny41NTU1IDExLjU3MDcgNTcuNTAwMiAxMS42OTM5IDU3LjM4OTcgMTEuNzk4QzU3LjI4MjggMTEuODk4NyA1Ny4xNTM4IDExLjk0OSA1Ny4wMDI4IDExLjk0OVpNNTMuMDAxMiAxNEM1Mi41ODQ4IDE0IDUyLjE5NDIgMTMuOTI3MSA1MS44Mjk1IDEzLjc4MTRDNTEuNDY4NCAxMy42MzU2IDUxLjE0OTYgMTMuNDMyNiA1MC44NzMzIDEzLjE3MjNDNTAuNjAwNiAxMi45MTIgNTAuMzg2OSAxMi42MTE4IDUwLjIzMjEgMTIuMjcxN0M1MC4wNzc0IDExLjkyODIgNTAgMTEuNTYwMyA1MCAxMS4xNjgxQzUwIDEwLjc3NiA1MC4wNzc0IDEwLjQwOTkgNTAuMjMyMSAxMC4wNjk4QzUwLjM4NjkgOS43MjYxOCA1MC42MDA2IDkuNDI0MjYgNTAuODczMyA5LjE2Mzk4QzUxLjE0OTYgOC45MDM3IDUxLjQ2ODQgOC43MDA2OCA1MS44Mjk1IDguNTU0OTJDNTIuMTk0MiA4LjQwOTE2IDUyLjU4NDggOC4zMzYyOCA1My4wMDEyIDguMzM2MjhDNTMuNDIxMiA4LjMzNjI4IDUzLjgxMTggOC40MDkxNiA1NC4xNzI5IDguNTU0OTJDNTQuNTM3NyA4LjcwMDY4IDU0Ljg1NjQgOC45MDM3IDU1LjEyOTEgOS4xNjM5OEM1NS40MDU0IDkuNDI0MjYgNTUuNjIxIDkuNzI2MTggNTUuNzc1OCAxMC4wNjk4QzU1LjkzMDUgMTAuNDA5OSA1Ni4wMDc5IDEwLjc3NiA1Ni4wMDc5IDExLjE2ODFDNTYuMDA3OSAxMS41NjAzIDU1LjkzMDUgMTEuOTI4MiA1NS43NzU4IDEyLjI3MTdDNTUuNjIxIDEyLjYxMTggNTUuNDA1NCAxMi45MTIgNTUuMTI5MSAxMy4xNzIzQzU0Ljg1NjQgMTMuNDMyNiA1NC41Mzc3IDEzLjYzNTYgNTQuMTcyOSAxMy43ODE0QzUzLjgxMTggMTMuOTI3MSA1My40MjEyIDE0IDUzLjAwMTIgMTRaTTUzLjAwMTIgMTMuMjY2QzUzLjQxMDIgMTMuMjY2IDUzLjc4MjMgMTMuMTcwNiA1NC4xMTc2IDEyLjk3OTdDNTQuNDU2NiAxMi43OTIzIDU0LjcyNTYgMTIuNTQwNyA1NC45MjQ2IDEyLjIyNDlDNTUuMTI3MyAxMS45MDU2IDU1LjIyODYgMTEuNTUzNCA1NS4yMjg2IDExLjE2ODFDNTUuMjI4NiAxMC43ODI5IDU1LjEyNzMgMTAuNDMyNCA1NC45MjQ2IDEwLjExNjZDNTQuNzI1NiA5Ljc5NzMzIDU0LjQ1NjYgOS41NDM5OSA1NC4xMTc2IDkuMzU2NTlDNTMuNzgyMyA5LjE2NTcxIDUzLjQxMDIgOS4wNzAyOCA1My4wMDEyIDkuMDcwMjhDNTIuNTk1OSA5LjA3MDI4IDUyLjIyMzcgOS4xNjU3MSA1MS44ODQ3IDkuMzU2NTlDNTEuNTQ5NCA5LjU0Mzk5IDUxLjI4MDQgOS43OTczMyA1MS4wNzc4IDEwLjExNjZDNTAuODc4OCAxMC40MzI0IDUwLjc3OTMgMTAuNzgyOSA1MC43NzkzIDExLjE2ODFDNTAuNzc5MyAxMS41NTM0IDUwLjg3ODggMTEuOTA1NiA1MS4wNzc4IDEyLjIyNDlDNTEuMjgwNCAxMi41NDA3IDUxLjU0OTQgMTIuNzkyMyA1MS44ODQ3IDEyLjk3OTdDNTIuMjIzNyAxMy4xNzA2IDUyLjU5NTkgMTMuMjY2IDUzLjAwMTIgMTMuMjY2Wk02Mi40ODAxIDkuNjExNjZDNjIuMzYyMiA5LjUxNDQ5IDYyLjMwMTQgOS40MTU1OCA2Mi4yOTc3IDkuMzE0OTRDNjIuMjk3NyA5LjIxMDgzIDYyLjMzMDggOS4xMjQwNyA2Mi4zOTcyIDkuMDU0NjZDNjIuNDY3MiA4Ljk4NTI1IDYyLjU1MzggOC45NDUzNCA2Mi42NTY5IDguOTM0OTNDNjIuNzYzOCA4LjkyMTA1IDYyLjg2ODggOC45NTU3NSA2Mi45NzIgOS4wMzkwNEM2My4yODg5IDkuMzAyNzkgNjMuNTM5NCA5LjYxNjg3IDYzLjcyMzYgOS45ODEyNkM2My45MDc5IDEwLjM0NTcgNjQgMTAuNzQxMyA2NCAxMS4xNjgxQzY0IDExLjU2MDMgNjMuOTIyNiAxMS45MjgyIDYzLjc2NzkgMTIuMjcxN0M2My42MTMxIDEyLjYxMTggNjMuMzk3NiAxMi45MTIgNjMuMTIxMiAxMy4xNzIzQzYyLjg0ODUgMTMuNDMyNiA2Mi41Mjk4IDEzLjYzNTYgNjIuMTY1IDEzLjc4MTRDNjEuODAzOSAxMy45MjcxIDYxLjQxNTIgMTQgNjAuOTk4OCAxNEM2MC41ODI0IDE0IDYwLjE5MTkgMTMuOTI3MSA1OS44MjcxIDEzLjc4MTRDNTkuNDYyMyAxMy42MzU2IDU5LjE0MTcgMTMuNDMyNiA1OC44NjU0IDEzLjE3MjNDNTguNTkyNyAxMi45MTIgNTguMzc5IDEyLjYxMTggNTguMjI0MiAxMi4yNzE3QzU4LjA2OTUgMTEuOTI4MiA1Ny45OTIxIDExLjU2MDMgNTcuOTkyMSAxMS4xNjgxQzU3Ljk5MjEgMTAuOTYzNCA1OC4wMTQyIDEwLjc2NTYgNTguMDU4NCAxMC41NzQ3QzU4LjEwNjMgMTAuMzgwNCA1OC4xNzI3IDEwLjE5MyA1OC4yNTc0IDEwLjAxMjVDNTguMzA5IDkuOTAxNDQgNTguMzgwOCA5LjgzMDMgNTguNDczIDkuNzk5MDZDNTguNTY4OCA5Ljc2NDM2IDU4LjY2MjcgOS43NjQzNiA1OC43NTQ4IDkuNzk5MDZDNTguODUwNiA5LjgzMDMgNTguOTIyNSA5Ljg5Mjc2IDU4Ljk3MDQgOS45ODY0N0M1OS4wMTgzIDEwLjA4MDIgNTkuMDEwOSAxMC4xOTgyIDU4Ljk0ODMgMTAuMzQwNEM1OC44MzA0IDEwLjYwMDcgNTguNzcxNCAxMC44NzY2IDU4Ljc3MTQgMTEuMTY4MUM1OC43NzE0IDExLjU1MzQgNTguODcwOSAxMS45MDU2IDU5LjA2OTkgMTIuMjI0OUM1OS4yNzI1IDEyLjU0MDcgNTkuNTQxNSAxMi43OTIzIDU5Ljg3NjggMTIuOTc5N0M2MC4yMTU4IDEzLjE3MDYgNjAuNTg5OCAxMy4yNjYgNjAuOTk4OCAxMy4yNjZDNjEuNDA3OCAxMy4yNjYgNjEuNzggMTMuMTcwNiA2Mi4xMTUzIDEyLjk3OTdDNjIuNDUwNiAxMi43OTIzIDYyLjcxNzcgMTIuNTQwNyA2Mi45MTY3IDEyLjIyNDlDNjMuMTE5NCAxMS45MDU2IDYzLjIyMDcgMTEuNTUzNCA2My4yMjA3IDExLjE2ODFDNjMuMjIwNyAxMC44NTkzIDYzLjE1MjUgMTAuNTcxMiA2My4wMTYyIDEwLjMwNEM2Mi44ODM1IDEwLjAzMzMgNjIuNzA0OCA5LjgwMjUzIDYyLjQ4MDEgOS42MTE2NlpNNjAuOTk4OCA2LjI3NDg2QzYwLjc3NCA2LjI3NDg2IDYwLjU2OTUgNi4yMjQ1NCA2MC4zODUzIDYuMTIzODlDNjAuMjAxMSA2LjAxOTc4IDYwLjA1MzcgNS44ODI3IDU5Ljk0MzIgNS43MTI2NUM1OS44MzYzIDUuNTM5MTMgNTkuNzgyOSA1LjM0NjUyIDU5Ljc4MjkgNS4xMzQ4M0M1OS43ODI5IDQuOTI2NiA1OS44MzYzIDQuNzM3NDYgNTkuOTQzMiA0LjU2NzQxQzYwLjA1MzcgNC4zOTM4OSA2MC4yMDExIDQuMjU2ODEgNjAuMzg1MyA0LjE1NjE3QzYwLjU2OTUgNC4wNTIwNiA2MC43NzQgNCA2MC45OTg4IDRDNjEuMjE5OSA0IDYxLjQyMDcgNC4wNTIwNiA2MS42MDEzIDQuMTU2MTdDNjEuNzgxOCA0LjI1NjgxIDYxLjkyNTUgNC4zOTM4OSA2Mi4wMzI0IDQuNTY3NDFDNjIuMTQyOSA0LjczNzQ2IDYyLjE5ODIgNC45MjY2IDYyLjE5ODIgNS4xMzQ4M0M2Mi4xOTgyIDUuMzQ2NTIgNjIuMTQyOSA1LjUzOTEzIDYyLjAzMjQgNS43MTI2NUM2MS45MjU1IDUuODgyNyA2MS43ODE4IDYuMDE5NzggNjEuNjAxMyA2LjEyMzg5QzYxLjQyMDcgNi4yMjQ1NCA2MS4yMTk5IDYuMjc0ODYgNjAuOTk4OCA2LjI3NDg2WiJ9KX0pfWZ1bmN0aW9uIG4zKCl7cmV0dXJuIFgoInN2ZyIse3dpZHRoOiIxNiIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNzAgNSAxOCA5IixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46WCgicGF0aCIse2Q6Ik04NS41NzIgMTIuMTAzOEM4Ni4wNiAxMi4xMDM4IDg2LjQyMDcgMTEuOTg5MiA4Ni42NTQyIDExLjc2MDFDODYuODg0NyAxMS41MjgxIDg3IDExLjE2NDEgODcgMTAuNjY4MVYxMC4xMTEyQzg3IDkuNzY5MDEgODYuOTIwNyA5LjQ2MzAyIDg2Ljc2MiA5LjE5MzI5Qzg2LjYwMzMgOC45MjA2NSA4Ni4zNzU4IDguNjk3MzMgODYuMDc5NCA4LjUyMzMxQzg1Ljc4MDEgOC4zNDkyOSA4NS40MjIzIDguMjM3NjIgODUuMDA2MiA4LjE4ODMyTDgzLjAxNjggNy45NTMzOUw4MS4xOTgxIDYuODQ4MzVDODAuOTIyNyA2LjY4MDEzIDgwLjY2MDggNi41NDIzNyA4MC40MTIzIDYuNDM1MDVDODAuMTYwOCA2LjMyNDg0IDc5Ljg5NzQgNi4yMzc4MyA3OS42MjE5IDYuMTc0MDJDNzkuMzQ2NSA2LjExMDIxIDc5LjAzODIgNi4wNjUyNiA3OC42OTY5IDYuMDM5MTVDNzguMzUyNiA2LjAxMzA1IDc3Ljk1MTQgNiA3Ny40OTM0IDZINzYuODEwOEM3Ni4zODg3IDYgNzUuOTk1IDYuMDQ5MzEgNzUuNjI5OCA2LjE0NzkyQzc1LjI2MTYgNi4yNDM2MyA3NC45MTg4IDYuMzcxMjUgNzQuNjAxNSA2LjUzMDc2Qzc0LjI4MTEgNi42OTAyOCA3My45ODYyIDYuODY1NzYgNzMuNzE2OCA3LjA1NzE4QzczLjQ0NDQgNy4yNDg2IDczLjE5NTkgNy40MzcxMiA3Mi45NzE0IDcuNjIyNzVMNzIuMjU3NCA3Ljg1MzMzQzcxLjgzMjMgNy45ODY3NCA3MS41MTY0IDguMTgzOTcgNzEuMzA5OSA4LjQ0NUM3MS4xMDMzIDguNzAzMTMgNzEgOS4wMzM3NyA3MSA5LjQzNjkyVjEwLjY0MkM3MSAxMS4xNDY3IDcxLjExNTMgMTEuNTE2NSA3MS4zNDU4IDExLjc1MTRDNzEuNTc2MyAxMS45ODYzIDcxLjkzNyAxMi4xMDM4IDcyLjQyOCAxMi4xMDM4SDcyLjcxNTRDNzIuNzAwNCAxMi4wMzcxIDcyLjY4ODUgMTEuOTcwNCA3Mi42Nzk1IDExLjkwMzdDNzIuNjcwNSAxMS44MzQxIDcyLjY2NiAxMS43NjQ1IDcyLjY2NiAxMS42OTQ4QzcyLjY2NiAxMS4zNTU1IDcyLjc0OTggMTEuMDQ5NSA3Mi45MTc1IDEwLjc3NjlDNzMuMDg1MSAxMC41MDQyIDczLjMxMTIgMTAuMjg4MiA3My41OTU2IDEwLjEyODdDNzMuODc3IDkuOTY2MjMgNzQuMTkyOCA5Ljg4NTAyIDc0LjU0MzEgOS44ODUwMkM3NC44OTA0IDkuODg1MDIgNzUuMjA2MiA5Ljk2NjIzIDc1LjQ5MDYgMTAuMTI4N0M3NS43NzIgMTAuMjg4MiA3NS45OTY1IDEwLjUwNDIgNzYuMTY0MiAxMC43NzY5Qzc2LjMzMTggMTEuMDQ5NSA3Ni40MTU3IDExLjM1NTUgNzYuNDE1NyAxMS42OTQ4Qzc2LjQxNTcgMTEuNzY0NSA3Ni40MTEyIDExLjgzNDEgNzYuNDAyMiAxMS45MDM3Qzc2LjM5MzIgMTEuOTcwNCA3Ni4zODI3IDEyLjAzNzEgNzYuMzcwOCAxMi4xMDM4SDgxLjYzODJDODEuNjIwMyAxMi4wMzcxIDgxLjYwODMgMTEuOTcwNCA4MS42MDIzIDExLjkwMzdDODEuNTkzMyAxMS44MzQxIDgxLjU4ODggMTEuNzY0NSA4MS41ODg4IDExLjY5NDhDODEuNTg4OCAxMS4zNTU1IDgxLjY3MjcgMTEuMDQ5NSA4MS44NDAzIDEwLjc3NjlDODIuMDA1IDEwLjUwNDIgODIuMjI5NSAxMC4yODgyIDgyLjUxMzkgMTAuMTI4N0M4Mi43OTUzIDkuOTY2MjMgODMuMTExMSA5Ljg4NTAyIDgzLjQ2MTQgOS44ODUwMkM4My44MTE3IDkuODg1MDIgODQuMTI5IDkuOTY2MjMgODQuNDEzNCAxMC4xMjg3Qzg0LjY5NDggMTAuMjg4MiA4NC45MTk0IDEwLjUwNDIgODUuMDg3IDEwLjc3NjlDODUuMjUxNyAxMS4wNDk1IDg1LjMzNCAxMS4zNTU1IDg1LjMzNCAxMS42OTQ4Qzg1LjMzNCAxMS43NjQ1IDg1LjMzMSAxMS44MzQxIDg1LjMyNSAxMS45MDM3Qzg1LjMxNiAxMS45NzA0IDg1LjMwNDEgMTIuMDM3MSA4NS4yODkxIDEyLjEwMzhIODUuNTcyWk04My40NjE0IDEzQzgzLjcxMjkgMTMgODMuOTQwNCAxMi45NDIgODQuMTQ0IDEyLjgyNkM4NC4zNDc2IDEyLjcxIDg0LjUwOTIgMTIuNTUzMyA4NC42MjkgMTIuMzU2MUM4NC43NDg3IDEyLjE1ODkgODQuODA4NiAxMS45Mzg1IDg0LjgwODYgMTEuNjk0OEM4NC44MDg2IDExLjQ1MTIgODQuNzQ4NyAxMS4yMzA4IDg0LjYyOSAxMS4wMzM2Qzg0LjUwOTIgMTAuODM2MyA4NC4zNDc2IDEwLjY3OTcgODQuMTQ0IDEwLjU2MzdDODMuOTQwNCAxMC40NDc3IDgzLjcxMjkgMTAuMzg5NyA4My40NjE0IDEwLjM4OTdDODMuMjA2OSAxMC4zODk3IDgyLjk3NzkgMTAuNDQ3NyA4Mi43NzQzIDEwLjU2MzdDODIuNTcwOCAxMC42Nzk3IDgyLjQwOTEgMTAuODM2MyA4Mi4yODk0IDExLjAzMzZDODIuMTY5NiAxMS4yMzA4IDgyLjEwOTcgMTEuNDUxMiA4Mi4xMDk3IDExLjY5NDhDODIuMTA5NyAxMS45Mzg1IDgyLjE2OTYgMTIuMTU4OSA4Mi4yODk0IDEyLjM1NjFDODIuNDA5MSAxMi41NTMzIDgyLjU3MDggMTIuNzEgODIuNzc0MyAxMi44MjZDODIuOTc3OSAxMi45NDIgODMuMjA2OSAxMyA4My40NjE0IDEzWk03NC41NDMxIDEzQzc0Ljc5NDYgMTMgNzUuMDIyMSAxMi45NDIgNzUuMjI1NyAxMi44MjZDNzUuNDI5MiAxMi43MSA3NS41OTA5IDEyLjU1MzMgNzUuNzEwNiAxMi4zNTYxQzc1LjgzMDQgMTIuMTU4OSA3NS44OTAzIDExLjkzODUgNzUuODkwMyAxMS42OTQ4Qzc1Ljg5MDMgMTEuNDUxMiA3NS44MzA0IDExLjIzMDggNzUuNzEwNiAxMS4wMzM2Qzc1LjU5MDkgMTAuODM2MyA3NS40MjkyIDEwLjY3OTcgNzUuMjI1NyAxMC41NjM3Qzc1LjAyMjEgMTAuNDQ3NyA3NC43OTQ2IDEwLjM4OTcgNzQuNTQzMSAxMC4zODk3Qzc0LjI4ODYgMTAuMzg5NyA3NC4wNTk2IDEwLjQ0NzcgNzMuODU2IDEwLjU2MzdDNzMuNjUyNCAxMC42Nzk3IDczLjQ5MDggMTAuODM2MyA3My4zNzEgMTEuMDMzNkM3My4yNTEzIDExLjIzMDggNzMuMTkxNCAxMS40NTEyIDczLjE5MTQgMTEuNjk0OEM3My4xOTE0IDExLjkzODUgNzMuMjUxMyAxMi4xNTg5IDczLjM3MSAxMi4zNTYxQzczLjQ5MDggMTIuNTUzMyA3My42NTI0IDEyLjcxIDczLjg1NiAxMi44MjZDNzQuMDU5NiAxMi45NDIgNzQuMjg4NiAxMyA3NC41NDMxIDEzWiJ9KX0pfWZ1bmN0aW9uICQ1KHtzaXplOiQ9MTgsc3Ryb2tlV2lkdGg6Sj0yfSl7cmV0dXJuIFgodDUse3NpemU6JCxzdHJva2VXaWR0aDpKfSl9dmFyIFc2PSJBY2Nlc3NpYmlsaXR5IHVuYXZhaWxhYmxlIG9uIHRoaXMgc2ltdWxhdG9yLiI7ZnVuY3Rpb24gaTIoJCl7cmV0dXJuICQ/LmVycm9ycz8uaW5jbHVkZXMoVzYpPz8hMX1mdW5jdGlvbiBvMigkLEope2lmKCQ9PT1KKXJldHVybiEwO2lmKCQuaWQhPT1KLmlkfHwkLnBhdGghPT1KLnBhdGh8fCQubGFiZWwhPT1KLmxhYmVsfHwkLnZhbHVlIT09Si52YWx1ZXx8JC5yb2xlIT09Si5yb2xlfHwkLnR5cGUhPT1KLnR5cGV8fCQuZW5hYmxlZCE9PUouZW5hYmxlZClyZXR1cm4hMTtsZXQgUT0kLmZyYW1lLFo9Si5mcmFtZTtyZXR1cm4gUT09PVp8fFEueD09PVoueCYmUS55PT09Wi55JiZRLndpZHRoPT09Wi53aWR0aCYmUS5oZWlnaHQ9PT1aLmhlaWdodH1mdW5jdGlvbiByMigkLEope2xldCBRPSQubGFiZWx8fCQucm9sZXx8YGVsZW1lbnQgJHtKKzF9YCxaPSQucm9sZXx8JC50eXBlO3JldHVybntpZDokLmlkLHBhdGg6JC5wYXRoLGxhYmVsOlEsdmFsdWU6JC52YWx1ZSxyb2xlOlosdHlwZTokLnR5cGUsZW5hYmxlZDokLmVuYWJsZWQsZnJhbWU6JC5mcmFtZX19ZnVuY3Rpb24gUDYoJCxKKXtsZXQgUT1NYXRoLm1heCgwLCQueCksWj1NYXRoLm1heCgwLCQueSksSz1NYXRoLm1pbihKLndpZHRoLCQueCskLndpZHRoKSxZPU1hdGgubWluKEouaGVpZ2h0LCQueSskLmhlaWdodCkscT1NYXRoLm1heCgwLEstUSksVj1NYXRoLm1heCgwLFktWik7cmV0dXJuIHE+MCYmVj4wP3t4OlEseTpaLHdpZHRoOnEsaGVpZ2h0OlZ9Om51bGx9ZnVuY3Rpb24gZDAoJCl7cmV0dXJuICQuaWR9ZnVuY3Rpb24gYTMoJCl7cmV0dXJuYCR7JC54fSwkeyQueX0gJHskLndpZHRofXgkeyQuaGVpZ2h0fWB9ZnVuY3Rpb24gXzYoJCl7cmV0dXJuW2BBWCBsYWJlbDogJHskLmxhYmVsfHwiVW5sYWJlbGVkIn1gLCQucm9sZT9gcm9sZTogJHskLnJvbGV9YDoiIiwkLnR5cGU/YHR5cGU6ICR7JC50eXBlfWA6IiIsJC52YWx1ZT9gdmFsdWU6ICR7JC52YWx1ZX1gOiIiLCQuaWQ/YGlkOiAkeyQuaWR9YDoiIixgcGF0aDogJHskLnBhdGh9YCxgZnJhbWU6ICR7YTMoJC5mcmFtZSl9YF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIjsgIil9dmFyIFhRPTUwMDAsS1E9MjAwMCxOMj1udWxsLHMzPW51bGwsWVE9MSxxUT0xLGs1PW5ldyBNYXAsSDU9bmV3IE1hcDtmdW5jdGlvbiBWUSgpe2xldCAkPW5ldyBVUkwoYjEoImV4ZWMtd3MiKSx3aW5kb3cubG9jYXRpb24uaHJlZik7cmV0dXJuICQucHJvdG9jb2w9JC5wcm90b2NvbD09PSJodHRwczoiPyJ3c3M6Ijoid3M6IiwkLnRvU3RyaW5nKCl9ZnVuY3Rpb24gR1EoJCl7Zm9yKGxldCBKIG9mIGs1LnZhbHVlcygpKUoucmVqZWN0KCQpO2s1LmNsZWFyKCl9ZnVuY3Rpb24gRDYoKXtyZXR1cm4gTjI/Pz1uZXcgUHJvbWlzZSgoJCxKKT0+e2xldCBRPSExLFo7dHJ5e1o9bmV3IFdlYlNvY2tldChWUSgpKX1jYXRjaChxKXtOMj1udWxsLEoocSk7cmV0dXJufWxldCBLPXNldFRpbWVvdXQoKCk9PntpZighUSlRPSEwLE4yPW51bGwsSihFcnJvcigiY29udHJvbCBzb2NrZXQgY29ubmVjdCB0aW1lb3V0IikpLFouY2xvc2UoKX0sWFEpO1oub25vcGVuPSgpPT57Wi5zZW5kKEpTT04uc3RyaW5naWZ5KHt9KSl9LFoub25tZXNzYWdlPShxKT0+e2xldCBWO3RyeXtWPUpTT04ucGFyc2UoU3RyaW5nKHEuZGF0YSkpfWNhdGNoe3JldHVybn1pZihWLnJlYWR5KXtpZighUSlRPSEwLGNsZWFyVGltZW91dChLKSxzMz1aLCQoWik7cmV0dXJufWlmKHR5cGVvZiBWLnN1Yj09PSJudW1iZXIiKXtsZXQgQj1INS5nZXQoVi5zdWIpO2lmKCFCKXJldHVybjtpZihWLmVuZClINS5kZWxldGUoVi5zdWIpLEIub25FbmQoKTtlbHNlIGlmKHR5cGVvZiBWLmRhdGE9PT0ic3RyaW5nIilCLm9uRGF0YShWLmRhdGEpO3JldHVybn1pZih0eXBlb2YgVi5pZCE9PSJudW1iZXIiKXJldHVybjtsZXQgRz1rNS5nZXQoVi5pZCk7aWYoIUcpcmV0dXJuO2s1LmRlbGV0ZShWLmlkKSxHLnJlc29sdmUoVil9O2xldCBZPSgpPT57TjI9bnVsbCxzMz1udWxsO2xldCBxPUVycm9yKCJjb250cm9sIHNvY2tldCBjbG9zZWQg4oCUIHJlbG9hZCB0aGUgcGFnZSBpZiB0aGlzIHBlcnNpc3RzIik7R1EocSk7bGV0IFY9Wy4uLkg1LnZhbHVlcygpXTtINS5jbGVhcigpO2ZvcihsZXQgRyBvZiBWKUcub25FbmQoKTtpZighUSlRPSEwLGNsZWFyVGltZW91dChLKSxKKHEpfTtaLm9uZXJyb3I9WSxaLm9uY2xvc2U9WX0pLE4yfWFzeW5jIGZ1bmN0aW9uIFQ2KCQsSil7bGV0IFE9YXdhaXQgRDYoKTtpZihRLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTil0aHJvdyBFcnJvcigiY29udHJvbCBzb2NrZXQgbm90IG9wZW4iKTtyZXR1cm4gbmV3IFByb21pc2UoKFosSyk9PntsZXQgWT1ZUSsrLHE9KCk9PntrNS5kZWxldGUoWSksSyhKPy5yZWFzb24/P25ldyBET01FeGNlcHRpb24oIkFib3J0ZWQiLCJBYm9ydEVycm9yIikpfTtpZihKKXtpZihKLmFib3J0ZWQpe3EoKTtyZXR1cm59Si5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIscSx7b25jZTohMH0pfWs1LnNldChZLHtyZXNvbHZlOihWKT0+e0o/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixxKSxaKFYpfSxyZWplY3Q6KFYpPT57Sj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEpLEsoVil9fSksUS5zZW5kKEpTT04uc3RyaW5naWZ5KHtpZDpZLC4uLiR9KSl9KX1hc3luYyBmdW5jdGlvbiB4MSgkLEo9e30sUSl7bGV0IFo9YXdhaXQgVDYoe3JwYzp7bWV0aG9kOiQscGFyYW1zOkp9fSxRPy5zaWduYWwpO2lmKFouZXJyb3IpcmV0dXJue3N0ZG91dDoiIixzdGRlcnI6Wi5lcnJvcixleGl0Q29kZToxMjZ9O2xldHtpZDpLLC4uLll9PVo7cmV0dXJuey4uLlksc3Rkb3V0Olouc3Rkb3V0Pz8iIixzdGRlcnI6Wi5zdGRlcnI/PyIiLGV4aXRDb2RlOlouZXhpdENvZGU/PzB9fWFzeW5jIGZ1bmN0aW9uIG4yKCl7cmV0dXJue3N0ZG91dDoiIixzdGRlcnI6InRoZSBwcmV2aWV3IHBhZ2UgaGFzIG5vIGhvc3Qgc2hlbGwiLGV4aXRDb2RlOjEyNn19YXN5bmMgZnVuY3Rpb24gdDMoJCxKKXtsZXQgUT1hd2FpdCBUNih7dWk6JH0sSj8uc2lnbmFsKTtpZihRLmVycm9yKXRocm93IEVycm9yKFEuZXJyb3IpO3JldHVybiBRLnN0YXR1cz8/bnVsbH1mdW5jdGlvbiBKNSgkKXtsZXQgSj17b25tZXNzYWdlOm51bGwsb25lcnJvcjpudWxsLGNsb3NlOigpPT57fX0sUT0hMSxaPW51bGwsSz1udWxsLFk9IiIscT0oQik9PntZKz1CLnJlcGxhY2UoL1xyXG4vZyxgCmApO2xldCBOO3doaWxlKChOPVkuaW5kZXhPZihgCgpgKSkhPT0tMSl7bGV0IHo9WS5zbGljZSgwLE4pO1k9WS5zbGljZShOKzIpO2xldCBVPXouc3BsaXQoYApgKS5maWx0ZXIoKEgpPT5ILnN0YXJ0c1dpdGgoImRhdGE6IikpLm1hcCgoSCk9Pkguc2xpY2UoNSkucmVwbGFjZSgvXiAvLCIiKSkuam9pbihgCmApO2lmKFUpSi5vbm1lc3NhZ2U/Lih7ZGF0YTpVfSl9fSxWPSgpPT57aWYoUXx8SylyZXR1cm47Si5vbmVycm9yPy4oKSxLPXNldFRpbWVvdXQoKCk9PntLPW51bGwsRygpfSxLUSl9LEc9YXN5bmMoKT0+e2lmKFEpcmV0dXJuO3RyeXtsZXQgQj1hd2FpdCBENigpO2lmKFEpcmV0dXJuO1k9IiIsWj1xUSsrLEg1LnNldChaLHtvbkRhdGE6cSxvbkVuZDpWfSksQi5zZW5kKEpTT04uc3RyaW5naWZ5KHtzdWI6WixwYXRoOiR9KSl9Y2F0Y2h7VigpfX07cmV0dXJuIEcoKSxKLmNsb3NlPSgpPT57aWYoUT0hMCxLKWNsZWFyVGltZW91dChLKTtpZihaIT09bnVsbCl7SDUuZGVsZXRlKFopO3RyeXtzMz8uc2VuZChKU09OLnN0cmluZ2lmeSh7dW5zdWI6Wn0pKX1jYXRjaHt9Wj1udWxsfX0sSn1mdW5jdGlvbiBJNigkKXtsZXRbSixRXT1BKG51bGwpLFtaLEtdPUEoIkFYIG9mZiIpO3JldHVybiBfKCgpPT57aWYoISQpe1EobnVsbCksSygiQVggb2ZmIik7cmV0dXJufVEobnVsbCksSygiQVggd2FpdGluZyIpO2xldCBZPUo1KCQpO3JldHVybiBZLm9ubWVzc2FnZT0ocSk9Pnt0cnl7bGV0IFY9SlNPTi5wYXJzZShxLmRhdGEpO1EoViksSyhpMihWKT8iQVggdW5hdmFpbGFibGUiOmAke1YuZWxlbWVudHMubGVuZ3RofSBBWCBlbGVtZW50c2ApfWNhdGNoe0soIkFYIHBhcnNlIGVycm9yIil9fSxZLm9uZXJyb3I9KCk9PntLKCJBWCByZWNvbm5lY3RpbmciKX0sKCk9PlkuY2xvc2UoKX0sWyRdKSx7c25hcHNob3Q6SixzdGF0dXM6Wn19dmFyIGUzPU0wKHtzbmFwc2hvdDpudWxsLHN0YXR1czoiQVggb2ZmIn0pLCQ4PU0wKG51bGwpO2Z1bmN0aW9uIEM1KCl7cmV0dXJuIFcwKGUzKX1mdW5jdGlvbiBhMigpe2xldCAkPVcwKCQ4KTtpZighJCl0aHJvdyBFcnJvcigiQVggc2VsZWN0aW9uIGNvbnRleHQgaXMgdW5hdmFpbGFibGUiKTtyZXR1cm4gJH1mdW5jdGlvbiBFNigkLEope3JldHVybnt4OiQueCozL0oud2lkdGgseTokLnkqMy9KLmhlaWdodCx3aWR0aDokLndpZHRoKjMvSi53aWR0aCxoZWlnaHQ6JC5oZWlnaHQqMy9KLmhlaWdodH19dmFyIHc2PWEwKGZ1bmN0aW9uKHtlbGVtZW50OkosaW5kZXg6USxzY3JlZW46WixoaWdobGlnaHRlZDpLLHNlbGVjdGVkOlksb25IaWdobGlnaHQ6cSxvblNlbGVjdDpWfSl7bGV0IEc9ZDAoSiksQj1yMihKLFEpLE49UDYoSi5mcmFtZSxaKTtpZighTilyZXR1cm4gbnVsbDtsZXQgej1fNihCKTtyZXR1cm4gWCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiZGF0YS1heC1rZXkiOkcsImRhdGEtYXgtaWQiOkIuaWQsImRhdGEtYXgtcGF0aCI6Qi5wYXRoLCJkYXRhLWF4LWxhYmVsIjpCLmxhYmVsLCJkYXRhLWF4LXZhbHVlIjpCLnZhbHVlLCJkYXRhLWF4LXJvbGUiOkIucm9sZSwiZGF0YS1heC10eXBlIjpCLnR5cGUsImRhdGEtYXgtZW5hYmxlZCI6U3RyaW5nKEIuZW5hYmxlZCksImRhdGEtYXgtZnJhbWUiOmEzKEIuZnJhbWUpLCJkYXRhLWF4LXNlbGVjdGVkIjpTdHJpbmcoWSksImFyaWEtbGFiZWwiOkoubGFiZWx8fHosdGl0bGU6eixvbkNsaWNrOigpPT5WKEcpLG9uTW91c2VFbnRlcjooKT0+cShHKSxvbk1vdXNlTGVhdmU6KCk9PnEobnVsbCksY2xhc3NOYW1lOiJhYnNvbHV0ZSBib3gtYm9yZGVyIG1pbi13LXB4IG1pbi1oLXB4IHAtMCByb3VuZGVkLVszcHhdIGJvcmRlciBjdXJzb3ItcG9pbnRlciBwb2ludGVyLWV2ZW50cy1hdXRvIixzdHlsZTp7bGVmdDpgJHtOLngvWi53aWR0aCoxMDB9JWAsdG9wOmAke04ueS9aLmhlaWdodCoxMDB9JWAsd2lkdGg6YCR7Ti53aWR0aC9aLndpZHRoKjEwMH0lYCxoZWlnaHQ6YCR7Ti5oZWlnaHQvWi5oZWlnaHQqMTAwfSVgLGJvcmRlckNvbG9yOlk/IiM2MGE1ZmEiOks/IiNmYmJmMjQiOiIjMzRkMzk5IixiYWNrZ3JvdW5kOlk/InJnYmEoOTYsMTY1LDI1MCwwLjI0KSI6Sz8icmdiYSgyNDUsMTU4LDExLDAuMjgpIjoicmdiYSgxNiwxODUsMTI5LDAuMTIpIn19KX0sKCQsSik9PiQuaW5kZXg9PT1KLmluZGV4JiYkLmhpZ2hsaWdodGVkPT09Si5oaWdobGlnaHRlZCYmJC5zZWxlY3RlZD09PUouc2VsZWN0ZWQmJiQub25IaWdobGlnaHQ9PT1KLm9uSGlnaGxpZ2h0JiYkLm9uU2VsZWN0PT09Si5vblNlbGVjdCYmJC5zY3JlZW4ud2lkdGg9PT1KLnNjcmVlbi53aWR0aCYmJC5zY3JlZW4uaGVpZ2h0PT09Si5zY3JlZW4uaGVpZ2h0JiZvMigkLmVsZW1lbnQsSi5lbGVtZW50KSk7ZnVuY3Rpb24gSjgoe3Byb2plY3Rpb246JCxzY3JlZW5Db25maWc6Sn09e30pe2xldHtzbmFwc2hvdDpRfT1DNSgpLHtoaWdobGlnaHRlZEtleTpaLHNlbGVjdGVkS2V5Okssc2V0SGlnaGxpZ2h0ZWRLZXk6WSxzZXRTZWxlY3RlZEtleTpxfT1hMigpO2lmKCFRPy5zY3JlZW4ud2lkdGh8fCFRPy5zY3JlZW4uaGVpZ2h0KXJldHVybiBudWxsO2lmKCQmJkopcmV0dXJuIFgoInN2ZyIse3ZpZXdCb3g6IjAgMCAxIDEiLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUiLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCB3LWZ1bGwgaC1mdWxsIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46US5lbGVtZW50cy5tYXAoKFYpPT57bGV0IEc9ZDAoViksQj1WLmZyYW1lLE49RDkoJCxFNihCLEopKSx6PUc9PT1LPyIjNjBhNWZhIjpHPT09Wj8iI2ZiYmYyNCI6IiMzNGQzOTkiO3JldHVybiBOLm1hcCgoVSxIKT0+WCgicG9seWdvbiIse3BvaW50czpVLm1hcCgoRik9PkYuam9pbigiLCIpKS5qb2luKCIgIiksZmlsbDp6LGZpbGxPcGFjaXR5OjAuMTUsc3Ryb2tlOnosc3Ryb2tlV2lkdGg6MSx2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsY2xhc3NOYW1lOiJwb2ludGVyLWV2ZW50cy1hdXRvIGN1cnNvci1wb2ludGVyIiwiZGF0YS1heC1rZXkiOkcscm9sZToiYnV0dG9uIix0YWJJbmRleDowLCJhcmlhLWxhYmVsIjpWLmxhYmVsfHxWLnJvbGV8fCJBWCBlbGVtZW50IixvblBvaW50ZXJEb3duOihGKT0+Ri5zdG9wUHJvcGFnYXRpb24oKSxvbkNsaWNrOigpPT5xKEcpLG9uS2V5RG93bjooRik9PntpZihGLmtleT09PSJFbnRlciJ8fEYua2V5PT09IiAiKUYucHJldmVudERlZmF1bHQoKSxxKEcpfSxvbk1vdXNlRW50ZXI6KCk9PlkoRyksb25Nb3VzZUxlYXZlOigpPT5ZKG51bGwpLGNoaWxkcmVuOlgoInRpdGxlIix7Y2hpbGRyZW46Vi5sYWJlbHx8Vi5yb2xlfSl9LGAke0d9OiR7SH1gKSl9KX0pO3JldHVybiBYKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgei0xMCBvdmVyZmxvdy1oaWRkZW4gcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46US5lbGVtZW50cy5tYXAoKFYsRyk9PntsZXQgQj1kMChWKTtyZXR1cm4gWCh3Nix7ZWxlbWVudDpWLGluZGV4Okcsc2NyZWVuOlEuc2NyZWVuLGhpZ2hsaWdodGVkOkI9PT1aLHNlbGVjdGVkOkI9PT1LLG9uSGlnaGxpZ2h0Olksb25TZWxlY3Q6cX0sQil9KX0pfWZ1bmN0aW9uIGI2KHtlbmRwb2ludDokLGNoaWxkcmVuOkp9KXtsZXR7c25hcHNob3Q6USxzdGF0dXM6Wn09STYoJCksW0ssWV09QShudWxsKSxbcSxWXT1BKG51bGwpO18oKCk9PntpZighJClZKG51bGwpLFYobnVsbCl9LFskXSk7bGV0IEc9UjEoKCk9Pih7c25hcHNob3Q6USxzdGF0dXM6Wn0pLFtRLFpdKSxCPVIxKCgpPT4oe2hpZ2hsaWdodGVkS2V5Okssc2VsZWN0ZWRLZXk6cSxzZXRIaWdobGlnaHRlZEtleTpZLHNldFNlbGVjdGVkS2V5OlZ9KSxbSyxxXSk7cmV0dXJuIFgoZTMse3ZhbHVlOkcsY2hpbGRyZW46WCgkOCx7dmFsdWU6QixjaGlsZHJlbjpKfSl9KX1mdW5jdGlvbiBROCh7b3ZlcmxheUVuYWJsZWQ6JCxzdHJlYW1pbmc6SixvblRvZ2dsZU92ZXJsYXk6UX0pe2xldHtzdGF0dXM6Wn09QzUoKSxbSyxZXT1BKCExKSxxPSQmJko7cmV0dXJuIFgoSTEuQnV0dG9uLHsiYXJpYS1sYWJlbCI6JD8iSGlkZSBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiOiJTaG93IGFjY2Vzc2liaWxpdHkgb3ZlcmxheSIsImFyaWEtcHJlc3NlZCI6JCx0aXRsZTpaLG9uQ2xpY2s6USxvbk1vdXNlRW50ZXI6KCk9PlkoITApLG9uTW91c2VMZWF2ZTooKT0+WSghMSksc3R5bGU6cT97YmFja2dyb3VuZDpLP1QxKDAuMTIpOlQxKDAuMDgpLGNvbG9yOmQxKDAuOTUpfTp2b2lkIDAsY2hpbGRyZW46WChwMCx7c2l6ZToxOSxzdHJva2VXaWR0aDoyfSl9KX1mdW5jdGlvbiB5Nih7aGlkZUNocm9tZTokLG9uVG9nZ2xlOkp9KXtsZXRbUSxaXT1BKCExKTtyZXR1cm4gWChJMS5CdXR0b24seyJhcmlhLWxhYmVsIjokPyJTaG93IGRldmljZSBmcmFtZSI6IkhpZGUgZGV2aWNlIGZyYW1lIiwiYXJpYS1wcmVzc2VkIjokLHRpdGxlOiQ/IlNob3cgZGV2aWNlIGZyYW1lIjoiSGlkZSBkZXZpY2UgZnJhbWUiLG9uQ2xpY2s6Sixvbk1vdXNlRW50ZXI6KCk9PlooITApLG9uTW91c2VMZWF2ZTooKT0+WighMSksc3R5bGU6JD97YmFja2dyb3VuZDpRP1QxKDAuMTIpOlQxKDAuMDgpLGNvbG9yOmQxKDAuOTUpfTp2b2lkIDAsY2hpbGRyZW46WChzMCx7c2l6ZToxOCxzdHJva2VXaWR0aDoyfSl9KX1mdW5jdGlvbiBzMih7Y2xhc3NOYW1lOiQ9IiJ9KXtyZXR1cm4gWCgiYSIse2hyZWY6Imh0dHBzOi8vZ2l0aHViLmNvbS9FdmFuQmFjb24vc2VydmUtc2ltIix0YXJnZXQ6Il9ibGFuayIscmVsOiJub3JlZmVycmVyIixjbGFzc05hbWU6YGlubGluZS1mbGV4IGgtWzMwcHhdIG1pbi13LTAgaXRlbXMtY2VudGVyIHdoaXRlc3BhY2Utbm93cmFwIHJvdW5kZWQtbWQgcHgtMS41IGZvbnQtbW9ubyB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIHRleHQtaW5rLTY1IG5vLXVuZGVybGluZSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6YmctaW5rLzggaG92ZXI6dGV4dC1pbmstODUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lIGZvY3VzLXZpc2libGU6b3V0bGluZS0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtaW5rLzYwICR7JH1gLnRyaW0oKSwiYXJpYS1sYWJlbCI6Ik9wZW4gc2VydmUtc2ltIix0aXRsZToiT3BlbiBzZXJ2ZS1zaW0iLGNoaWxkcmVuOiJzZXJ2ZS1zaW0ifSl9ZnVuY3Rpb24gUzYoe29wZW46JCxvbkNsaWNrOkp9KXtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOmBmaXhlZCB0b3AtMyBsZWZ0LTMgei0zMCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBwLTEgW3RyYW5zaXRpb246b3BhY2l0eV8wLjE4c19lYXNlXSAkeyQ/Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIjoib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byJ9YCxjaGlsZHJlbjpbWCgiYnV0dG9uIix7b25DbGljazpKLGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LWljb24gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLWluay84IGhvdmVyOnRleHQtaW5rIiwiYXJpYS1sYWJlbCI6Ik9wZW4gZGV2aWNlcyBzaWRlYmFyIiwiYXJpYS1wcmVzc2VkIjokLHRpdGxlOiJEZXZpY2VzIixjaGlsZHJlbjpYKEkwLHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pLFgoczIse30pXX0pfWZ1bmN0aW9uIHg2KCQpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCl8fCQ8PTApcmV0dXJuIjAgQiI7bGV0IEo9JC8xMDczNzQxODI0O2lmKEo+PTEpcmV0dXJuYCR7Si50b0ZpeGVkKEo+PTEwPzA6MSl9IEdCYDtyZXR1cm5gJHsoJC8xMDQ4NTc2KS50b0ZpeGVkKDApfSBNQmB9ZnVuY3Rpb24gdDIoJCl7bGV0IEo9JC5tYXRjaCgvXihbYS16QS1aXSspLSguKykkLyk7aWYoIUopcmV0dXJue29zOiQsdmVyc2lvbjoiIn07cmV0dXJue29zOkpbMV0sdmVyc2lvbjpKWzJdLnJlcGxhY2UoLy0vZywiLiIpfX1mdW5jdGlvbiBSNigkKXtyZXR1cm4gdDIoJCkudmVyc2lvbnx8JH1mdW5jdGlvbiBlMigkKXtsZXR7b3M6Six2ZXJzaW9uOlF9PXQyKCQpO3JldHVybiBRP2Ake0p9ICR7UX1gOkp9ZnVuY3Rpb24gRjUoKXtsZXRbJCxKXT1BKCgpPT50eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lm1hdGNoTWVkaWE/LigiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKS5tYXRjaGVzPT09ITApO3JldHVybiBfKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSJ8fCF3aW5kb3cubWF0Y2hNZWRpYSlyZXR1cm47bGV0IFE9d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIiksWj0oKT0+SihRLm1hdGNoZXMpO3JldHVybiBaKCksUS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFopLCgpPT5RLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWil9LFtdKSwkfXZhciBBNT0iMC4yNHMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpIjtmdW5jdGlvbiBKMyh7Y2hyb21lOiQsc2NyZWVuOkosaW50ZXJhY3RpdmU6UT0hMSxmcmFtZWQ6Wj0hMCxvbkJ1dHRvbjpLLG9uQ3Jvd25XaGVlbDpZfSl7bGV0IHE9RjUoKSxWPXE/Im5vbmUiOmBvcGFjaXR5ICR7QTV9YCxHPXE/Im5vbmUiOmBsZWZ0ICR7QTV9LCB0b3AgJHtBNX0sIHdpZHRoICR7QTV9LCBoZWlnaHQgJHtBNX0sIGJvcmRlci1yYWRpdXMgJHtBNX1gLEI9USYmWjtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIiwiZGF0YS1kZXZpY2VraXQtY2hyb21lIjoiIiwiZGF0YS1mcmFtZWQiOlo/Im9uIjoib2ZmIixjaGlsZHJlbjpbWCgiZGl2Iix7ImFyaWEtaGlkZGVuIjpaP3ZvaWQgMDohMCxzdHlsZTp7b3BhY2l0eTpaPzE6MCxwb2ludGVyRXZlbnRzOlo/dm9pZCAwOiJub25lIix0cmFuc2l0aW9uOlZ9LGNoaWxkcmVuOlskLmJ1dHRvbnMubWFwKChOKT0+WChOUSx7Y2hyb21lOiQsYnV0dG9uOk4saW50ZXJhY3RpdmU6QixvbkJ1dHRvbjpLLG9uV2hlZWw6QiYmTi5uYW1lPT09ImRpZ2l0YWwtY3Jvd24iP1k6dm9pZCAwfSxgYnV0dG9uLSR7Ti5uYW1lfWApKSwkLmNvbXBvc2l0ZUltYWdlP1godjYse2Nocm9tZTokLGltYWdlOiQuY29tcG9zaXRlSW1hZ2UscmVjdDokLmJvZHksekluZGV4OjF9KTokLnNsaWNlJiYkLmNvcm5lcj9YKFVRLHtjaHJvbWU6JH0pOm51bGxdfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBvdmVyZmxvdy1oaWRkZW4iLHN0eWxlOnsuLi5CUSgkLFopLGJhY2tncm91bmQ6Wj8iIzAwMCI6dm9pZCAwLHRyYW5zaXRpb246R30sY2hpbGRyZW46Sn0pXX0pfWZ1bmN0aW9uIEJRKCQsSil7aWYoIUopcmV0dXJue2xlZnQ6MCx0b3A6MCx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIix6SW5kZXg6Mixib3JkZXJSYWRpdXM6MH07cmV0dXJuey4uLlo4KCQsJC5zY3JlZW4sMiksYm9yZGVyUmFkaXVzOnpRKCQpfX1mdW5jdGlvbiB6USgkKXtyZXR1cm5gJHskLnNjcmVlblJhZGl1cy8kLnNjcmVlbi53aWR0aCoxMDB9JSAvICR7JC5zY3JlZW5SYWRpdXMvJC5zY3JlZW4uaGVpZ2h0KjEwMH0lYH1mdW5jdGlvbiBOUSh7Y2hyb21lOiQsYnV0dG9uOkosaW50ZXJhY3RpdmU6USxvbkJ1dHRvbjpaLG9uV2hlZWw6S30pe2xldFtZLHFdPUEoITEpLFtWLEddPUEoITEpLEI9VChudWxsKSxOPVQobnVsbCksej1UKEspO3ouY3VycmVudD1LLF8oKCk9PntsZXQgdz1OLmN1cnJlbnQ7aWYoIXd8fCFLKXJldHVybjtsZXQgUz0oUTEpPT57UTEucHJldmVudERlZmF1bHQoKSxRMS5zdG9wUHJvcGFnYXRpb24oKSx6LmN1cnJlbnQ/LihRMS5kZWx0YVksUTEuZGVsdGFNb2RlKX07cmV0dXJuIHcuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLFMse3Bhc3NpdmU6ITF9KSwoKT0+dy5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsUyl9LFshIUtdKTtsZXQgVT1RJiZKLnVzYWdlUGFnZSE9bnVsbCYmSi51c2FnZSE9bnVsbCxIPVAoKCk9PntpZihCLmN1cnJlbnQ9PT1udWxsKXJldHVybjtCLmN1cnJlbnQ9bnVsbCxHKCExKSxaPy4oe3BoYXNlOiJ1cCIsYnV0dG9uOkp9KX0sW0osWl0pLEY9UCgodyk9PntpZih3LmJ1dHRvbiE9PTAmJncucG9pbnRlclR5cGU9PT0ibW91c2UiKXJldHVybjt3LnByZXZlbnREZWZhdWx0KCksdy5zdG9wUHJvcGFnYXRpb24oKSxCLmN1cnJlbnQ9dy5wb2ludGVySWQ7dHJ5e3cuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZSh3LnBvaW50ZXJJZCl9Y2F0Y2h7fUcoITApLFo/Lih7cGhhc2U6ImRvd24iLGJ1dHRvbjpKfSl9LFtKLFpdKSxMPUoub25Ub3A/NTowLGs9VSYmKFl8fFYpLEM9KGs/Si5ob3Zlci54OjApKjEwMCxPPShrP0ouaG92ZXIueTowKSoxMDAseT1WJiZKLmltYWdlRG93bj9KLmltYWdlRG93bjpKLmltYWdlLEU9VT97b25Qb2ludGVyRG93bjpGLG9uUG9pbnRlclVwOkgsb25Qb2ludGVyQ2FuY2VsOkgsb25Qb2ludGVyRW50ZXI6KCk9PnEoITApLG9uUG9pbnRlckxlYXZlOigpPT57cSghMSksSCgpfX06e307cmV0dXJuIFgoImRpdiIse3JlZjpOLHJvbGU6VT8iYnV0dG9uIjp2b2lkIDAsImFyaWEtbGFiZWwiOlU/ajYoSi5uYW1lKTp2b2lkIDAsImFyaWEtaGlkZGVuIjpVP3ZvaWQgMDohMCx0aXRsZTpVP2o2KEoubmFtZSk6dm9pZCAwLGNsYXNzTmFtZToiYWJzb2x1dGUgc2VsZWN0LW5vbmUiLHN0eWxlOnsuLi5aOCgkLEouZnJhbWUsTCksdHJhbnNmb3JtOkN8fE8/YHRyYW5zbGF0ZSgke0N9JSwgJHtPfSUpYDp2b2lkIDAsdHJhbnNpdGlvbjoidHJhbnNmb3JtIDAuMTJzIGVhc2UiLGN1cnNvcjpVPyJwb2ludGVyIjp2b2lkIDAscG9pbnRlckV2ZW50czpVPyJhdXRvIjoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUifSwuLi5FLGNoaWxkcmVuOnkmJlgoImltZyIse2FsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzcmM6ZzYoJC5pZGVudGlmaWVyLHkpLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgc2VsZWN0LW5vbmUiLHN0eWxlOntvYmplY3RGaXQ6ImZpbGwiLGZpbHRlcjpWJiYhSi5pbWFnZURvd24/ImJyaWdodG5lc3MoMS40KSI6dm9pZCAwLHRyYW5zaXRpb246ImZpbHRlciAwLjEycyBlYXNlIixXZWJraXRVc2VyRHJhZzoibm9uZSJ9fSl9KX1mdW5jdGlvbiBqNigkKXtyZXR1cm4gJC5zcGxpdCgiLSIpLm1hcCgoSik9PkouY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrSi5zbGljZSgxKSkuam9pbigiICIpfWZ1bmN0aW9uIFVRKHtjaHJvbWU6JH0pe2lmKCEkLnNsaWNlfHwhJC5jb3JuZXIpcmV0dXJuIG51bGw7bGV0e2JvZHk6Sixjb3JuZXI6USxzbGljZTpafT0kLEs9TWF0aC5tYXgoSi53aWR0aC1RLndpZHRoKjIsMCksWT1NYXRoLm1heChKLmhlaWdodC1RLmhlaWdodCoyLDApLHE9W3trZXk6InRvcC1sZWZ0IixpbWFnZTpaLnRvcExlZnQscmVjdDp7eDpKLngseTpKLnksd2lkdGg6US53aWR0aCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJ0b3AtcmlnaHQiLGltYWdlOloudG9wUmlnaHQscmVjdDp7eDpKLngrSi53aWR0aC1RLndpZHRoLHk6Si55LHdpZHRoOlEud2lkdGgsaGVpZ2h0OlEuaGVpZ2h0fX0se2tleToiYm90dG9tLWxlZnQiLGltYWdlOlouYm90dG9tTGVmdCxyZWN0Ont4OkoueCx5OkoueStKLmhlaWdodC1RLmhlaWdodCx3aWR0aDpRLndpZHRoLGhlaWdodDpRLmhlaWdodH19LHtrZXk6ImJvdHRvbS1yaWdodCIsaW1hZ2U6Wi5ib3R0b21SaWdodCxyZWN0Ont4OkoueCtKLndpZHRoLVEud2lkdGgseTpKLnkrSi5oZWlnaHQtUS5oZWlnaHQsd2lkdGg6US53aWR0aCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJ0b3AiLGltYWdlOloudG9wLHJlY3Q6e3g6Si54K1Eud2lkdGgseTpKLnksd2lkdGg6SyxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJib3R0b20iLGltYWdlOlouYm90dG9tLHJlY3Q6e3g6Si54K1Eud2lkdGgseTpKLnkrSi5oZWlnaHQtUS5oZWlnaHQsd2lkdGg6SyxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJsZWZ0IixpbWFnZTpaLmxlZnQscmVjdDp7eDpKLngseTpKLnkrUS5oZWlnaHQsd2lkdGg6US53aWR0aCxoZWlnaHQ6WX19LHtrZXk6InJpZ2h0IixpbWFnZTpaLnJpZ2h0LHJlY3Q6e3g6Si54K0oud2lkdGgtUS53aWR0aCx5OkoueStRLmhlaWdodCx3aWR0aDpRLndpZHRoLGhlaWdodDpZfX1dO3JldHVybiBYKEsxLHtjaGlsZHJlbjpxLmZpbHRlcigoVik9PlYucmVjdC53aWR0aD4wJiZWLnJlY3QuaGVpZ2h0PjApLm1hcCgoVik9PlgodjYse2Nocm9tZTokLGltYWdlOlYuaW1hZ2UscmVjdDpWLnJlY3QsekluZGV4OjF9LFYua2V5KSl9KX1mdW5jdGlvbiB2Nih7Y2hyb21lOiQsaW1hZ2U6SixyZWN0OlEsekluZGV4Olp9KXtyZXR1cm4gWCgiaW1nIix7YWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHNyYzpnNigkLmlkZW50aWZpZXIsSiksY2xhc3NOYW1lOiJhYnNvbHV0ZSBzZWxlY3Qtbm9uZSIsc3R5bGU6ey4uLlo4KCQsUSxaKSxvYmplY3RGaXQ6ImZpbGwiLHBvaW50ZXJFdmVudHM6Im5vbmUiLFdlYmtpdFVzZXJEcmFnOiJub25lIn19KX1mdW5jdGlvbiBnNigkLEope2xldCBRPWBncmlkL2FwaS9kZXZpY2VraXQtY2hyb21lP2Nocm9tZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX0maW1hZ2U9JHtlbmNvZGVVUklDb21wb25lbnQoSil9YDtyZXR1cm4gdHlwZW9mIHdpbmRvdz4idSI/YC8ke1F9YDpiMShRKX1mdW5jdGlvbiBaOCgkLEosUSl7cmV0dXJue2xlZnQ6JDMoSi54LCQuZnJhbWUud2lkdGgpLHRvcDokMyhKLnksJC5mcmFtZS5oZWlnaHQpLHdpZHRoOiQzKEoud2lkdGgsJC5mcmFtZS53aWR0aCksaGVpZ2h0OiQzKEouaGVpZ2h0LCQuZnJhbWUuaGVpZ2h0KSx6SW5kZXg6UX19ZnVuY3Rpb24gJDMoJCxKKXtyZXR1cm5gJHskL0oqMTAwfSVgfWZ1bmN0aW9uIGg2KHtuYW1lOiQscnVudGltZTpKLGNocm9tZTpRLHBsYWNlaG9sZGVyQXNzZXQ6WixidXN5OkssYnVzeUxhYmVsOlk9IlN0YXJ0aW5n4oCmIixlcnJvcjpxLG9uU3RhcnQ6Vn0pe2xldCBHPUUwKCQpLEI9UzFbR10sTj1aPz9udWxsLHo9Tj9udWxsOlE/P251bGwsVT16P3t3aWR0aDp6LnNjcmVlbi53aWR0aCxoZWlnaHQ6ei5zY3JlZW4uaGVpZ2h0fTpVNShHLCQpLEg9TDUoRyxVKSxGPU4/TFEoRyxOLm5hbWUpOno/SCp6LmZyYW1lLndpZHRoL3ouc2NyZWVuLndpZHRoOkgqQi53aWR0aC8oQi53aWR0aC0yKkIuYmV6ZWxYKSxMPU4/e3dpZHRoOk4ud2lkdGgsaGVpZ2h0Ok4uaGVpZ2h0fTp6P3t3aWR0aDp6LmZyYW1lLndpZHRoLGhlaWdodDp6LmZyYW1lLmhlaWdodH06e3dpZHRoOkIud2lkdGgsaGVpZ2h0OkIuaGVpZ2h0fSxrPWAke0wud2lkdGh9IC8gJHtMLmhlaWdodH1gLEM9KEwud2lkdGgvTC5oZWlnaHQqSFEoRykpLnRvRml4ZWQoMiksTz1HPT09InZpc2lvbiI/WChGUSx7fSk6WChrUSx7dHlwZTpHfSk7cmV0dXJuIFgoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTUgbWluLXctMCB3LWZ1bGwiLGNoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHctZnVsbCIsc3R5bGU6e3dpZHRoOmBtaW4oMTAwJSwgJHtGfXB4LCAke0N9ZHZoKWAsbWF4V2lkdGg6Rixhc3BlY3RSYXRpbzprfSxjaGlsZHJlbjpOP1goQ1Ese25hbWU6Ti5uYW1lLGZhbGxiYWNrOk99KTp6P1goImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpYKEozLHtjaHJvbWU6en0pfSk6T30pLFgoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzE3cHhdIGZvbnQtc2VtaWJvbGQgdGV4dC1pbmstOTAiLGNoaWxkcmVuOiR9KSxYKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIHRleHQtaW5rLTQ1IixjaGlsZHJlbjpbZTIoSiksIiBTaW11bGF0b3IiXX0pXX0pLHEmJlgoImRpdiIse2NsYXNzTmFtZToidGV4dC1kYW5nZXIgdGV4dC1bMTJweF0gZm9udC1tb25vIG1heC13LTkwIHRleHQtY2VudGVyIixjaGlsZHJlbjpxfSksWCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOlYsZGlzYWJsZWQ6SyxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTUgcHktMiByb3VuZGVkLWZ1bGwgdGV4dC1bMTRweF0gZm9udC1tZWRpdW0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c10gJHtLPyJiZy1pbmsvOCB0ZXh0LWluay01NSBjdXJzb3ItZGVmYXVsdCI6ImJnLWluay8xMiB0ZXh0LWluay05MCBob3ZlcjpiZy1pbmsvMTggY3Vyc29yLXBvaW50ZXIifWAsY2hpbGRyZW46W0smJlgoInNwYW4iLHsiYXJpYS1oaWRkZW4iOiEwLGNsYXNzTmFtZToic2l6ZS0zLjUgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci1pbmsvMjUgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSIsc3R5bGU6e2JvcmRlclRvcENvbG9yOlQxKDAuOSl9fSksSz9ZOiJTdGFydCJdfSldfSl9ZnVuY3Rpb24gTFEoJCxKKXtpZigkPT09IndhdGNoIil7aWYoSi5pbmNsdWRlcygidWx0cmEiKSlyZXR1cm4gMjU1O2lmKEouaW5jbHVkZXMoIndhdGNoLXNlLSIpfHxKLmluY2x1ZGVzKCJhcHBsZS13YXRjaC1zZS0iKSlyZXR1cm4gMjM4O3JldHVybiAyNTB9aWYoJD09PSJ2aXNpb24iKXJldHVybiAzOTA7aWYoJD09PSJpcGFkIilyZXR1cm4gMzQwO3JldHVybiAyODB9ZnVuY3Rpb24gSFEoJCl7aWYoJD09PSJ2aXNpb24iKXJldHVybiAzNDtpZigkPT09ImlwYWQiKXJldHVybiA1MDtpZigkPT09IndhdGNoIilyZXR1cm4gNTY7cmV0dXJuIDUyfWZ1bmN0aW9uIGtRKHt0eXBlOiR9KXtsZXQgSj1TMVskXTtyZXR1cm4gWChLMSx7Y2hpbGRyZW46W1goInN2ZyIse3ZpZXdCb3g6YDAgMCAke0oud2lkdGh9ICR7Si5oZWlnaHR9YCxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWlkWU1pZCBtZWV0IixjaGlsZHJlbjpbWCgiZGVmcyIse2NoaWxkcmVuOlgoImxpbmVhckdyYWRpZW50Iix7aWQ6InBsYWNlaG9sZGVyLXNjcmVlbiIseDE6IjAiLHkxOiIwIix4MjoiMSIseTI6IjEiLGNoaWxkcmVuOltYKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjNmZhOGU2In0pLFgoInN0b3AiLHtvZmZzZXQ6IjU1JSIsc3RvcENvbG9yOiIjNWI5M2Q2In0pLFgoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzUxODhjZiJ9KV19KX0pLFgoInJlY3QiLHt4OkouYmV6ZWxYLHk6Si5iZXplbFksd2lkdGg6Si53aWR0aC0yKkouYmV6ZWxYLGhlaWdodDpKLmhlaWdodC0yKkouYmV6ZWxZLHJ4OkouaW5uZXJSYWRpdXMsZmlsbDoidXJsKCNwbGFjZWhvbGRlci1zY3JlZW4pIn0pXX0pLFgoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpYKGYyLHt0eXBlOiR9KX0pXX0pfWZ1bmN0aW9uIENRKHtuYW1lOiQsZmFsbGJhY2s6Sn0pe2xldFtRLFpdPUEoImxvYWRpbmciKTtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpbUSE9PSJsb2FkZWQiJiZKLFEhPT0iZXJyb3IiJiZYKCJpbWciLHthbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3JjOkFRKCQpLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgc2VsZWN0LW5vbmUgb2JqZWN0LWNvbnRhaW4iLHN0eWxlOntXZWJraXRVc2VyRHJhZzoibm9uZSJ9LG9uTG9hZDooKT0+WigibG9hZGVkIiksb25FcnJvcjooKT0+WigiZXJyb3IiKX0pXX0pfWZ1bmN0aW9uIEZRKCl7bGV0e3dpZHRoOiQsaGVpZ2h0Okp9PVMxLnZpc2lvbjtyZXR1cm4gWCgic3ZnIix7dmlld0JveDpgMCAwICR7JH0gJHtKfWAsY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCIscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pZFlNaWQgbWVldCIsZmlsbDoibm9uZSIsImFyaWEtaGlkZGVuIjohMCxjaGlsZHJlbjpbWCgiZGVmcyIse2NoaWxkcmVuOltYKCJsaW5lYXJHcmFkaWVudCIse2lkOiJ2aXNpb24tcGxhY2Vob2xkZXItc2hlbGwiLHgxOiIwIix5MToiMCIseDI6IjAiLHkyOiIxIixjaGlsZHJlbjpbWCgic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzI4MjgyYiJ9KSxYKCJzdG9wIix7b2Zmc2V0OiI1NCUiLHN0b3BDb2xvcjoiIzEyMTIxNCJ9KSxYKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMwNzA3MDgifSldfSksWCgibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLXBsYWNlaG9sZGVyLWdsYXNzIix4MToiMCIseTE6IjAiLHgyOiIxIix5MjoiMSIsY2hpbGRyZW46W1goInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiMzMTM1M2EifSksWCgic3RvcCIse29mZnNldDoiNDglIixzdG9wQ29sb3I6IiMwYTBiMGQifSksWCgic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjMDEwMTAyIn0pXX0pLFgoInJhZGlhbEdyYWRpZW50Iix7aWQ6InZpc2lvbi1wbGFjZWhvbGRlci1sZW5zIixjeDoiNTAlIixjeToiNDYlIixyOiI2MCUiLGNoaWxkcmVuOltYKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjMjAyODMyIn0pLFgoInN0b3AiLHtvZmZzZXQ6IjcyJSIsc3RvcENvbG9yOiIjMDkwYTBkIn0pLFgoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzAxMDEwMiJ9KV19KV19KSxYKCJwYXRoIix7ZDoiTTk1IDE3N0M5NSAxMTkgMTQ3IDg2IDIxOCA5MUMyNTcgOTQgMjg2IDExMSAzMjAgMTExQzM1NCAxMTEgMzgzIDk0IDQyMiA5MUM0OTMgODYgNTQ1IDExOSA1NDUgMTc3VjIyMkM1NDUgMjc4IDUwMSAzMTEgNDQzIDMxMEMzOTggMzA5IDM3MSAyODYgMzQ1IDI2OEMzMjkgMjU3IDMxMSAyNTcgMjk1IDI2OEMyNjkgMjg2IDI0MiAzMDkgMTk3IDMxMEMxMzkgMzExIDk1IDI3OCA5NSAyMjJWMTc3WiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItc2hlbGwpIixzdHJva2U6IiMzZDNkNDIiLHN0cm9rZVdpZHRoOiI3In0pLFgoInBhdGgiLHtkOiJNMTE3IDE4MUMxMTcgMTM0IDE1NyAxMTIgMjIwIDExNkMyNjAgMTE5IDI4NyAxMzYgMzIwIDEzNkMzNTMgMTM2IDM4MCAxMTkgNDIwIDExNkM0ODMgMTEyIDUyMyAxMzQgNTIzIDE4MVYyMTdDNTIzIDI2MyA0ODggMjg3IDQzOSAyODdDMzk5IDI4NyAzNjkgMjY0IDM0NSAyNTBDMzI5IDI0MCAzMTEgMjQwIDI5NSAyNTBDMjcxIDI2NCAyNDEgMjg3IDIwMSAyODdDMTUyIDI4NyAxMTcgMjYzIDExNyAyMTdWMTgxWiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItZ2xhc3MpIixzdHJva2U6IiMxNzE4MWIiLHN0cm9rZVdpZHRoOiI1In0pLFgoInBhdGgiLHtkOiJNMTQzIDE4NkMxNDUgMTQ4IDE3NiAxMzUgMjI2IDEzOEMyNjQgMTQxIDI4OSAxNTYgMzIwIDE1NkMzNTEgMTU2IDM3NiAxNDEgNDE0IDEzOEM0NjQgMTM1IDQ5NSAxNDggNDk3IDE4NlYyMTNDNDk3IDI1MCA0NjkgMjY2IDQzMiAyNjZDMzk0IDI2NiAzNjkgMjQ2IDM0MyAyMzVDMzI4IDIyOSAzMTIgMjI5IDI5NyAyMzVDMjcxIDI0NiAyNDYgMjY2IDIwOCAyNjZDMTcxIDI2NiAxNDMgMjUwIDE0MyAyMTNWMTg2WiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItbGVucykiLHN0cm9rZToiIzI2MmEyZiIsc3Ryb2tlV2lkdGg6IjIifSksWCgicGF0aCIse2Q6Ik0xNTEgMTcxQzE3OSAxNTAgMjE3IDE0NyAyNTEgMTU0TTM4OSAxNTRDNDIzIDE0NyA0NjEgMTUwIDQ4OSAxNzEiLHN0cm9rZToiIzRlNTM1YSIsc3Ryb2tlV2lkdGg6IjMiLHN0cm9rZUxpbmVjYXA6InJvdW5kIn0pLFgoInBhdGgiLHtkOiJNMjc3IDIzM0MyODkgMjI0IDMwNCAyMTkgMzIwIDIxOUMzMzYgMjE5IDM1MSAyMjQgMzYzIDIzMyIsc3Ryb2tlOiIjM2I0MDQ2IixzdHJva2VXaWR0aDoiNCIsc3Ryb2tlTGluZWNhcDoicm91bmQifSldfSl9ZnVuY3Rpb24gQVEoJCl7bGV0IEo9YGdyaWQvYXBpL2RldmljZS1wbGFjZWhvbGRlci1hc3NldD9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfWA7cmV0dXJuIHR5cGVvZiB3aW5kb3c+InUiP2AvJHtKfWA6YjEoSil9ZnVuY3Rpb24gTzUoe29wZW46JCx3aWR0aDpKLGNoaWxkcmVuOlEsc3R5bGU6WixzaWRlOks9InJpZ2h0In0pe3JldHVybiBYKCJhc2lkZSIse2NsYXNzTmFtZTpgZml4ZWQgei0zNSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiBiZy1wYW5lbC1iZyB0ZXh0LWluay05MCBiYWNrZHJvcC1ibHVyLVsxOHB4XSBbZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZl0gW3RyYW5zaXRpb246dHJhbnNmb3JtXzAuMjVzX2Vhc2Usb3BhY2l0eV8wLjJzX2Vhc2VdIGZsZXggZmxleC1jb2wgJHtgdG9wLTMgYm90dG9tLTMgJHtLPT09ImxlZnQiPyJsZWZ0LTMiOiJyaWdodC0zIn0gcm91bmRlZC1bMTRweF0gYm9yZGVyIGJvcmRlci1pbmsvMTAgc2hhZG93LXBhbmVsYH1gLHN0eWxlOnt3aWR0aDpKLHRyYW5zZm9ybTokPyJ0cmFuc2xhdGVYKDApIjpLPT09ImxlZnQiPyJ0cmFuc2xhdGVYKGNhbGMoLTEwMCUgLSAyNHB4KSkiOiJ0cmFuc2xhdGVYKGNhbGMoMTAwJSArIDI0cHgpKSIsb3BhY2l0eTokPzE6MCxwb2ludGVyRXZlbnRzOiQ/ImF1dG8iOiJub25lIiwuLi5afSwiYXJpYS1oaWRkZW4iOiEkLGNoaWxkcmVuOlF9KX1mdW5jdGlvbiBNNSh7Y2hpbGRyZW46JCxzdHlsZTpKfSl7cmV0dXJuIFgoImhlYWRlciIse2NsYXNzTmFtZToiZmxleCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yLjUgcHgtMi41IHB5LTEuNSBwbC0zIixzdHlsZTpKLGNoaWxkcmVuOiR9KX1mdW5jdGlvbiBmNih7Y2hpbGRyZW46JH0pe3JldHVybiBYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LW1lZGl1bSB0ZXh0LWluay01NSIsY2hpbGRyZW46JH0pfWZ1bmN0aW9uIFEzKHtvbkNsaWNrOiQsYXJpYUxhYmVsOko9IkNsb3NlIHBhbmVsIix0aXRsZTpRLGljb25TaXplOlo9MTZ9KXtyZXR1cm4gWCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOiQsY2xhc3NOYW1lOiJmbGV4IGgtWzMwcHhdIHctWzMwcHhdIHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlci1ub25lIGJnLXRyYW5zcGFyZW50IHAtMCB0ZXh0LWljb24gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLWluay84IGhvdmVyOnRleHQtaW5rIiwiYXJpYS1sYWJlbCI6Six0aXRsZTpRLGNoaWxkcmVuOlgoTDAse3NpemU6WixzdHJva2VXaWR0aDoyfSl9KX1mdW5jdGlvbiBtNigkLEope2xldFtRLFpdPUEobnVsbCk7cmV0dXJuIF8oKCk9PntpZighSnx8ISQpcmV0dXJuO2xldCBLPSExLFk9YXN5bmMoKT0+e3RyeXtsZXQgRz1hd2FpdChhd2FpdCBmZXRjaCgkLHtjYWNoZToibm8tc3RvcmUifSkpLmpzb24oKTtpZighSylaKEcpfWNhdGNoe319O1koKTtsZXQgcT1zZXRJbnRlcnZhbChZLDUwMDApO3JldHVybigpPT57Sz0hMCxjbGVhckludGVydmFsKHEpfX0sWyQsSl0pLFF9dmFyIHA2PSJ2YXIoLS1zZXJ2ZS1zaW0tZGFuZ2VyKSIsdTY9InZhcigtLXNlcnZlLXNpbS1jYXV0aW9uKSIsbDY9InZhcigtLXNlcnZlLXNpbS1zdWNjZXNzKSI7ZnVuY3Rpb24gZDYoe3JlcG9ydDokfSl7aWYoISR8fCQudG90YWxCeXRlcz09PTApcmV0dXJuIG51bGw7bGV0e2VzdGltYXRlZEFkZGl0aW9uYWw6SixhdmFpbGFibGVCeXRlczpRLHRvdGFsQnl0ZXM6WixydW5uaW5nU2ltdWxhdG9yczpLfT0kLFk9TWF0aC5tYXgoMCxNYXRoLm1pbigxLDEtUS9aKSkscT1LK0osVj1KPT09MD9wNjpKPD0xP3U2Omw2LEc9WT4wLjk/cDY6WT4wLjc1P3U2Omw2O3JldHVybiBYKCJkaXYiLHtjbGFzc05hbWU6ImlubGluZS1mbGV4IG1heC13LWZ1bGwgbWluLXctMCBmbGV4LW5vd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBvdmVyZmxvdy1oaWRkZW4gd2hpdGVzcGFjZS1ub3dyYXAgcHgtMiBweS1bM3B4XSByb3VuZGVkLWZ1bGwgYmctcGFuZWwtZGVlcCBib3JkZXIgYm9yZGVyLWluay8xMCBmb250LW1vbm8gdGV4dC1bMTFweF0gdGV4dC1pbmstNzAgbGVhZGluZy1ub25lIixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1bM3B4XSBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6Vn19KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIHRydW5jYXRlIixjaGlsZHJlbjpbWCgic3BhbiIse2NoaWxkcmVuOltLLCIvIixxLCIgc2ltcyJdfSksWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1pbmstNDAiLGNoaWxkcmVuOiIgwrcgIn0pLFgoInNwYW4iLHtjbGFzc05hbWU6InRleHQtaW5rLTU1IixjaGlsZHJlbjpbeDYoUSksIiBmcmVlIl19KV19KSxYKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6Im1sLTAuNSB3LTcgaC1bM3B4XSBzaHJpbmstMCBiZy1pbmsvMTAgcm91bmRlZC1bMnB4XSBvdmVyZmxvdy1oaWRkZW4gaW5saW5lLWJsb2NrIixjaGlsZHJlbjpYKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBoLWZ1bGwgdHJhbnNpdGlvbi1bd2lkdGgsYmFja2dyb3VuZF0gZHVyYXRpb24tMzAwIGVhc2Utb3V0IixzdHlsZTp7d2lkdGg6YCR7KFkqMTAwKS50b0ZpeGVkKDEpfSVgLGJhY2tncm91bmQ6R319KX0pXX0pfWZ1bmN0aW9uIGM2KHtkZXZpY2U6JCxhY3RpdmU6SixzdGFydGluZzpRLHNodXR0aW5nRG93bjpaLG9uU2VsZWN0Okssb25TaHV0ZG93bjpZfSl7bGV0IHE9JC5oZWxwZXIsVj0kLnN0YXRlPT09IkJvb3RlZCIsRz1FMCgkLm5hbWUpLEI9L2R1by9pLnRlc3QoJC5uYW1lKXx8QXJyYXkuaXNBcnJheSgkLmRpc3BsYXlzKSYmJC5kaXNwbGF5cy5sZW5ndGg+MSxOPVI2KCQucnVudGltZSksej1xPyJTdHJlYW1pbmciOlE/Vj8iU3RhcnRpbmfigKYiOiJCb290aW5n4oCmIjpaPyJTaHV0dGluZyBkb3du4oCmIjpWPyJCb290ZWQiOm51bGwsVT1xPyJ2YXIoLS1zZXJ2ZS1zaW0tc3VjY2Vzcy1lbWVyYWxkKSI6Vj8idmFyKC0tc2VydmUtc2ltLWNhdXRpb24pIjpudWxsLEg9cXx8VixGPXE/Sj8iYmctbGl2ZS1pY29uLWFjdGl2ZSI6ImJnLWxpdmUtaWNvbiI6Sj8iYmctaW5rLzE1IjoiYmctaW5rLzYiLEw9cT8idGV4dC1saXZlLWljb24tZmciOko/InRleHQtaW5rLTkwIjoidGV4dC1pbmstNTUiO3JldHVybiBYKCJkaXYiLHtyb2xlOiJidXR0b24iLHRhYkluZGV4OjAsImFyaWEtcHJlc3NlZCI6SixvbkNsaWNrOkssb25LZXlEb3duOihrKT0+e2lmKGsua2V5PT09IkVudGVyInx8ay5rZXk9PT0iICIpay5wcmV2ZW50RGVmYXVsdCgpLEsoKX0sY2xhc3NOYW1lOmBncm91cCByZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHB4LTIgcHktMS41IHJvdW5kZWQtbGcgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEyc10gJHtKPyJiZy1pbmsvMTAgdGV4dC1pbmsiOiJ0ZXh0LWluay05MCBob3ZlcjpiZy1pbmsvOCJ9YCxjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOmByZWxhdGl2ZSBzaHJpbmstMCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTkgcm91bmRlZC1bOXB4XSBvdmVyZmxvdy1oaWRkZW4gJHtGfWAsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6TCxjaGlsZHJlbjpYKHUyLHt0eXBlOkcsZHVvOkIsc2NyZWVuT246Qm9vbGVhbihxKX0pfSksVSYmIXEmJlgoInNwYW4iLHtjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wLjUgcmlnaHQtMC41IHNpemUtMS41IHJvdW5kZWQtZnVsbCByaW5nLTIgcmluZy1wYW5lbC1iZyIsc3R5bGU6e2JhY2tncm91bmQ6VX19KV19KSxYKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIixjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJ0cnVuY2F0ZSB0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIGxlYWRpbmctdGlnaHQiLGNoaWxkcmVuOiQubmFtZX0pLHomJlgoImRpdiIse2NsYXNzTmFtZTpgdHJ1bmNhdGUgdGV4dC1bMTFweF0gbGVhZGluZy10aWdodCAke3E/InRleHQtc3VjY2Vzcy1lbWVyYWxkIjpKPyJ0ZXh0LWluay03NSI6InRleHQtaW5rLTQ1In1gLGNoaWxkcmVuOnp9KV19KSxYKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2Utcm93LXRyYWlsaW5nLXNsb3QiLGNsYXNzTmFtZToicmVsYXRpdmUgc2hyaW5rLTAgdy04IGgtNiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6YGFic29sdXRlIHJpZ2h0LTAgdGV4dC1bMTFweF0gZm9udC1tb25vIHRhYnVsYXItbnVtcyBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTJzXSAke0o/InRleHQtaW5rLTg1IjoidGV4dC1pbmstNDAifSAke0g/Imdyb3VwLWhvdmVyOm9wYWNpdHktMCBncm91cC1mb2N1cy13aXRoaW46b3BhY2l0eS0wIjoiIn1gLGNoaWxkcmVuOk59KSxIJiZYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHRpdGxlOlo/IlNodXR0aW5nIGRvd27igKYiOiJTaHV0IGRvd24gc2ltdWxhdG9yIiwiYXJpYS1sYWJlbCI6IlNodXQgZG93biBzaW11bGF0b3IiLG9uQ2xpY2s6KGspPT57ay5wcmV2ZW50RGVmYXVsdCgpLGsuc3RvcFByb3BhZ2F0aW9uKCksWSgpfSxkaXNhYmxlZDpaLGNsYXNzTmFtZTpgYWJzb2x1dGUgcmlnaHQtMCB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS01IHJvdW5kZWQtbWQgb3BhY2l0eS0wIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIGZvY3VzLXZpc2libGU6b3BhY2l0eS0xMDAgW3RyYW5zaXRpb246b3BhY2l0eV8wLjEycyxiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSAke0o/InRleHQtaW5rLTgwIGhvdmVyOmJnLWluay8yMCI6InRleHQtaW5rLTcwIGhvdmVyOmJnLWluay8xMiBob3Zlcjp0ZXh0LWluayJ9YCxjaGlsZHJlbjpYKEwwLHtzaXplOjEzLHN0cm9rZVdpZHRoOjIuMn0pfSldfSldfSl9dmFyIFc1PSJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcpIixYOD0idmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zcGFyZW50KSI7dmFyIGk2PXtwcmVmZXJlbmNlOiJzeXN0ZW0iLHJlc29sdmVkOiJkYXJrIn07ZnVuY3Rpb24gT1EoJCl7dHJ5e3JldHVybiAkLmxvY2FsU3RvcmFnZX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gTVEoJCl7bGV0IEo9T1EoJCksUT1qMihKKSxaPWw5KCQpLEs9e3ByZWZlcmVuY2U6USxyZXNvbHZlZDpmMyhRLFopfSxZPW5ldyBTZXQscT1udWxsLFY9KCk9PntsZXQgQj1mMyhRLFopO2lmKG0zKCQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LEIpLEsucHJlZmVyZW5jZT09PVEmJksucmVzb2x2ZWQ9PT1CKXJldHVybjtLPXtwcmVmZXJlbmNlOlEscmVzb2x2ZWQ6Qn07Zm9yKGxldCBOIG9mIFkpTigpfSxHPSgpPT57bGV0IEI9dHlwZW9mICQubWF0Y2hNZWRpYT09PSJmdW5jdGlvbiI/JC5tYXRjaE1lZGlhKHA5KTpudWxsLE49KFUpPT57Wj1VLm1hdGNoZXMsVigpfSx6PShVKT0+e2lmKFUua2V5IT09bTkmJlUua2V5IT09bnVsbClyZXR1cm47UT1qMihKKSxWKCl9O3JldHVybiBCPy5hZGRFdmVudExpc3RlbmVyPy4oImNoYW5nZSIsTiksJC5hZGRFdmVudExpc3RlbmVyKCJzdG9yYWdlIix6KSxaPUI/Qi5tYXRjaGVzOlosUT1qMihKKSxWKCksKCk9PntCPy5yZW1vdmVFdmVudExpc3RlbmVyPy4oImNoYW5nZSIsTiksJC5yZW1vdmVFdmVudExpc3RlbmVyKCJzdG9yYWdlIix6KX19O3JldHVybiBtMygkLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxLLnJlc29sdmVkKSx7Z2V0U25hcHNob3Q6KCk9Pkssc3Vic2NyaWJlKEIpe2lmKFkuYWRkKEIpLCFxKXE9RygpO3JldHVybigpPT57aWYoWS5kZWxldGUoQiksWS5zaXplPT09MCYmcSlxKCkscT1udWxsfX0sc2V0UHJlZmVyZW5jZShCKXtRPUIsdTkoSixCKSxWKCl9fX12YXIgV1E9bnVsbDtmdW5jdGlvbiBQUSgpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiBudWxsO3JldHVybiBXUT8/PU1RKHdpbmRvdyl9dmFyIF9RPSgpPT4oKT0+e307ZnVuY3Rpb24gUDUoJD1QUSgpKXtyZXR1cm57Li4udzIoJD8kLnN1YnNjcmliZTpfUSwkPyQuZ2V0U25hcHNob3Q6KCk9Pmk2LCgpPT5pNiksc2V0UHJlZmVyZW5jZTokPyQuc2V0UHJlZmVyZW5jZTooKT0+e319fXZhciBVMj1be3ZhbHVlOiJzeXN0ZW0iLGxhYmVsOiJTeXN0ZW0iLEljb246bjV9LHt2YWx1ZToibGlnaHQiLGxhYmVsOiJMaWdodCIsSWNvbjpKMn0se3ZhbHVlOiJkYXJrIixsYWJlbDoiRGFyayIsSWNvbjphNX1dO2Z1bmN0aW9uIG82KHtwcmVmZXJlbmNlOiQsb25DaGFuZ2U6SixjbGFzc05hbWU6UT0iIn0pe2xldCBaPVA1KCksSz0kPz9aLnByZWZlcmVuY2UsWT1KPz9aLnNldFByZWZlcmVuY2U7cmV0dXJuIFgoImRpdiIse3JvbGU6InJhZGlvZ3JvdXAiLCJhcmlhLWxhYmVsIjoiQXBwZWFyYW5jZSIsb25LZXlEb3duOihWKT0+e2xldCBHPXtBcnJvd1JpZ2h0OjEsQXJyb3dEb3duOjEsQXJyb3dMZWZ0Oi0xLEFycm93VXA6LTF9W1Yua2V5XTtpZighRylyZXR1cm47Vi5wcmV2ZW50RGVmYXVsdCgpO2xldCBOPShVMi5maW5kSW5kZXgoKFUpPT5VLnZhbHVlPT09SykrRytVMi5sZW5ndGgpJVUyLmxlbmd0aDtZKFUyW05dLnZhbHVlKSxWLmN1cnJlbnRUYXJnZXQucXVlcnlTZWxlY3RvckFsbCgiW3JvbGU9cmFkaW9dIilbTl0/LmZvY3VzKCl9LGNsYXNzTmFtZTpgZmxleCBzaHJpbmstMCBpdGVtcy1jZW50ZXIgZ2FwLXB4IHJvdW5kZWQtbGcgYmctaW5rLzYgcC0wLjUgJHtRfWAudHJpbSgpLGNoaWxkcmVuOlUyLm1hcCgoe3ZhbHVlOlYsbGFiZWw6RyxJY29uOkJ9KT0+e2xldCBOPUs9PT1WO3JldHVybiBYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHJvbGU6InJhZGlvIiwiYXJpYS1jaGVja2VkIjpOLHRhYkluZGV4Ok4/MDotMSwiYXJpYS1sYWJlbCI6Ryx0aXRsZTpgJHtHfSBhcHBlYXJhbmNlYCxvbkNsaWNrOigpPT5ZKFYpLGNsYXNzTmFtZTpgZ3JpZCBzaXplLTYgY3Vyc29yLXBvaW50ZXIgcGxhY2UtaXRlbXMtY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyLW5vbmUgcC0wIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBmb2N1cy12aXNpYmxlOm91dGxpbmUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC0xIGZvY3VzLXZpc2libGU6b3V0bGluZS10aW50ICR7Tj8iYmctY29udHJvbC1zZWxlY3RlZCB0ZXh0LWluay05MCBzaGFkb3ctWzBfMXB4XzJweF9yZ2JhKDAsMCwwLDAuMTgpXSI6ImJnLXRyYW5zcGFyZW50IHRleHQtaWNvbiBob3Zlcjp0ZXh0LWluay05MCJ9YCxjaGlsZHJlbjpYKEIse3NpemU6MTQsc3Ryb2tlV2lkdGg6MiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pfSxWKX0pfSl9dmFyIERRPTEyO2Z1bmN0aW9uIHI2KHtvcGVuOiQsb25DbG9zZTpKLHdpZHRoOlEsc2lkZTpaPSJyaWdodCIsZGV2aWNlczpLLHRvdGFsOlk9MCxoYXNNb3JlOnE9ITEsb25Mb2FkTW9yZTpWLG9uTG9hZEFsbDpHLG9uUmVzZXRQYWdlOkIsc2VsZWN0ZWRVZGlkOk4sb25TZWxlY3Q6eixzdGFydGluZzpVLHNodXR0aW5nRG93bjpILG9uU2h1dGRvd246Rn0pe2xldCBrPSh0eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6d2luZG93Ll9fU0lNX1BSRVZJRVdfXyk/LmdyaWRNZW1vcnlFbmRwb2ludD8/KHR5cGVvZiB3aW5kb3c+InUiP3ZvaWQgMDpiMSgiZ3JpZC9hcGkvbWVtb3J5IikpLEM9bTYoaywkKSxbTyx5XT1BKCIiKSxFPVIxKCgpPT57bGV0IGc9Ty50cmltKCkudG9Mb3dlckNhc2UoKTtpZighZ3x8IUspcmV0dXJuIEs7cmV0dXJuIEsuZmlsdGVyKChoKT0+aC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZyl8fGUyKGgucnVudGltZSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhnKSl9LFtLLE9dKSx3PVQoITEpO18oKCk9PntsZXQgZz0hIU8udHJpbSgpO2lmKGcmJnEpRz8uKCk7ZWxzZSBpZighZyYmdy5jdXJyZW50KUI/LigpO3cuY3VycmVudD1nfSxbTyxxLEcsQl0pO2xldCBTPVQobnVsbCk7cmV0dXJuIFgoTzUse29wZW46JCx3aWR0aDpRLHNpZGU6WixzdHlsZTp7YmFja2dyb3VuZENvbG9yOlc1fSxjaGlsZHJlbjpbWChNNSx7c3R5bGU6e2p1c3RpZnlDb250ZW50OiJmbGV4LXN0YXJ0IixwYWRkaW5nTGVmdDoxNixwYWRkaW5nUmlnaHQ6MTYscGFkZGluZ1RvcDoxNixnYXA6NH0sY2hpbGRyZW46W1goImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpKLGNsYXNzTmFtZToiZmxleCBoLVszMHB4XSB3LVszMHB4XSBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXItbm9uZSBiZy10cmFuc3BhcmVudCB0ZXh0LWljb24gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLWluay84IGhvdmVyOnRleHQtaW5rIiwiYXJpYS1sYWJlbCI6IkNsb3NlIGRldmljZXMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6ITAsdGl0bGU6IkRldmljZXMiLGNoaWxkcmVuOlgoSTAse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSksWChzMix7fSksWChvNix7Y2xhc3NOYW1lOiJtbC1hdXRvIn0pXX0pLFgoImRpdiIse2NsYXNzTmFtZToicHgtNCBwYi0yIHB0LTAuNSBzaHJpbmstMCIsY2hpbGRyZW46WCgibGFiZWwiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTIuNSBoLTggcm91bmRlZC1sZyBiZy1pbmsvNiBmb2N1cy13aXRoaW46YmctaW5rLzEwIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnNdIixjaGlsZHJlbjpbWChlNSx7c2l6ZToxNCxzdHJva2VXaWR0aDoyLGNsYXNzTmFtZToidGV4dC1pbmstNDAgc2hyaW5rLTAifSksWCgiaW5wdXQiLHt2YWx1ZTpPLG9uQ2hhbmdlOihnKT0+eShnLnRhcmdldC52YWx1ZSkscGxhY2Vob2xkZXI6IlNlYXJjaCIsY2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSBvdXRsaW5lLW5vbmUgdGV4dC1bMTNweF0gdGV4dC1pbmstOTAgcGxhY2Vob2xkZXI6dGV4dC1pbmstNDAifSksTyYmWCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6IkNsZWFyIHNlYXJjaCIsb25DbGljazooKT0+eSgiIiksY2xhc3NOYW1lOiJzaHJpbmstMCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTQgcm91bmRlZC1mdWxsIGJnLWluay8xNSB0ZXh0LWluay03MCBob3ZlcjpiZy1pbmsvMjUiLGNoaWxkcmVuOlgoTDAse3NpemU6OSxzdHJva2VXaWR0aDozfSl9KV19KX0pLFgoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgZmxleC0xIG1pbi1oLTAiLGNoaWxkcmVuOltYKCJkaXYiLHtyZWY6UyxvblNjcm9sbDooKT0+e2lmKE8udHJpbSgpfHwhcXx8IVYpcmV0dXJuO2xldCBnPVMuY3VycmVudDtpZighZylyZXR1cm47aWYoZy5zY3JvbGxUb3ArZy5jbGllbnRIZWlnaHQ+PWcuc2Nyb2xsSGVpZ2h0LTI0MClWKCl9LGNsYXNzTmFtZToiaC1mdWxsIG1pbi1oLTAgb3ZlcmZsb3cteS1hdXRvIHB4LTQgcHktMiBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixjaGlsZHJlbjpFPT09bnVsbD9YKFRRLHt9KTpFLmxlbmd0aD09PTA/WCgiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB5LTYgdGV4dC1pbmstNDAgdGV4dC1bMTJweF0gdGV4dC1jZW50ZXIiLGNoaWxkcmVuOk8/Ik5vIG1hdGNoaW5nIHNpbXVsYXRvcnMuIjoiTm8gaU9TIHNpbXVsYXRvcnMgYXZhaWxhYmxlLiJ9KTpYKEsxLHtjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJwdC0xIHBiLTEgdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LWluay00MCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSIsY2hpbGRyZW46IkF2YWlsYWJsZSJ9KSxYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBwYi0xIixjaGlsZHJlbjpFLm1hcCgoZyk9PlgoYzYse2RldmljZTpnLGFjdGl2ZTpnLmRldmljZT09PU4sc3RhcnRpbmc6ISFVW2cuZGV2aWNlXSxzaHV0dGluZ0Rvd246ISFIW2cuZGV2aWNlXSxvblNlbGVjdDooKT0+eihnLmRldmljZSksb25TaHV0ZG93bjooKT0+RihnLmRldmljZSl9LGcuZGV2aWNlKSl9KSwhTyYmcSYmWCgiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB5LTIgdGV4dC1bMTFweF0gdGV4dC1pbmstNDAgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOks/YCR7Sy5sZW5ndGh9IG9mICR7WX1gOm51bGx9KV19KX0pLFgoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1saXN0LXRvcC1mYWRlIixjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIGxlZnQtMCByaWdodC0wIGgtWzE2cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUiLHN0eWxlOntiYWNrZ3JvdW5kOmBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAke1c1fSAwJSwgJHtYOH0gMTAwJSlgfX0pLFgoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1saXN0LWJvdHRvbS1mYWRlIixjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGgtWzE2cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUiLHN0eWxlOntiYWNrZ3JvdW5kOmBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCAke1c1fSAwJSwgJHtYOH0gMTAwJSlgfX0pXX0pLFgoRVEse3JlcG9ydDpDfSldfSl9ZnVuY3Rpb24gVFEoKXtyZXR1cm4gWChLMSx7Y2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToicHgtMiBwdC0xIHBiLTEgdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LWluay00MCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSIsY2hpbGRyZW46IkF2YWlsYWJsZSJ9KSxYKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2UtbGlzdC1za2VsZXRvbiIsY2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgcGItMSIsImFyaWEtbGFiZWwiOiJMb2FkaW5nIHNpbXVsYXRvcnMiLCJhcmlhLWJ1c3kiOiJ0cnVlIixjaGlsZHJlbjpBcnJheS5mcm9tKHtsZW5ndGg6RFF9LCgkLEopPT5YKElRLHtpbmRleDpKfSxKKSl9KV19KX1mdW5jdGlvbiBJUSh7aW5kZXg6JH0pe2xldCBKPVsidy1bNjIlXSIsInctWzc0JV0iLCJ3LVs1OCVdIiwidy1bNzAlXSJdWyQlNF0sUT1bInctWzQyJV0iLCJ3LVszNiVdIiwidy1bNDglXSIsInctWzMyJV0iXVskJTRdLFo9WyJ3LTciLCJ3LTYiLCJ3LTgiXVskJTNdO3JldHVybiBYKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2Utcm93LXNrZWxldG9uIixjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yLjUgcHgtMiBweS0xLjUgcm91bmRlZC1sZyBzZWxlY3Qtbm9uZSIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgc2hyaW5rLTAgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS05IHJvdW5kZWQtWzlweF0gb3ZlcmZsb3ctaGlkZGVuIGJnLWluay82IixjaGlsZHJlbjpYKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTQgcm91bmRlZC1bNHB4XSBiZy1pbmsvWzAuMTJdIn0pfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBmbGV4IGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOmBoLTMgcm91bmRlZC1mdWxsIGJnLWluay9bMC4xMl0gJHtKfWB9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOmBoLTIuNSByb3VuZGVkLWZ1bGwgYmctaW5rL1swLjA4XSAke1F9YH0pXX0pLFgoInNwYW4iLHtjbGFzc05hbWU6YHNocmluay0wIGgtMi41IHJvdW5kZWQtZnVsbCBiZy1pbmsvWzAuMDhdICR7Wn1gfSldfSl9ZnVuY3Rpb24gRVEoe3JlcG9ydDokfSl7aWYoISR8fCQudG90YWxCeXRlczw9MClyZXR1cm4gbnVsbDtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiBweC0zIHB5LTIgZmxleCBqdXN0aWZ5LWNlbnRlciIsY2hpbGRyZW46WChkNix7cmVwb3J0OiR9KX0pfWZ1bmN0aW9uIFozKHtwYW5lbFdpZHRoOiQsdmlzaWJsZTpKLG9uUG9pbnRlckRvd246USxhcmlhTGFiZWw6WixzaWRlOks9InJpZ2h0In0pe2xldFtZLHFdPUEoITEpLFtWLEddPUEoITEpLEI9WXx8VixOPTEyKyQtOTtyZXR1cm4gWCgiZGl2Iix7cm9sZToic2VwYXJhdG9yIiwiYXJpYS1vcmllbnRhdGlvbiI6InZlcnRpY2FsIiwiYXJpYS1sYWJlbCI6WiwiYXJpYS1oaWRkZW4iOiFKLG9uUG9pbnRlckRvd246KHopPT57RyghMCksUSh6KX0sb25Qb2ludGVyVXA6KCk9PkcoITEpLG9uUG9pbnRlckNhbmNlbDooKT0+RyghMSksb25Qb2ludGVyRW50ZXI6KCk9PnEoITApLG9uUG9pbnRlckxlYXZlOigpPT5xKCExKSxjbGFzc05hbWU6YGZpeGVkIHRvcC0zIGJvdHRvbS0zIHctNCB6LTM2IGN1cnNvci1jb2wtcmVzaXplIHRvdWNoLW5vbmUgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTIwMCAke0o/Im9wYWNpdHktMTAwIHBvaW50ZXItZXZlbnRzLWF1dG8iOiJvcGFjaXR5LTAgcG9pbnRlci1ldmVudHMtbm9uZSJ9YCxzdHlsZTpLPT09ImxlZnQiP3tsZWZ0Ok59OntyaWdodDpOfSxjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSB0b3AtMCBib3R0b20tMCBsZWZ0LTEvMiB3LXB4IHBvaW50ZXItZXZlbnRzLW5vbmUgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTE1MCAke0I/Im9wYWNpdHktMTAwIjoib3BhY2l0eS0wIn1gLHN0eWxlOnt0cmFuc2Zvcm06InRyYW5zbGF0ZVgoLTAuNXB4KSIsYmFja2dyb3VuZDpgbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgJHtUMSgwKX0gMCUsICR7VDEoMC4yOCl9IDMwJSwgJHtUMSgwLjI4KX0gNzAlLCAke1QxKDApfSAxMDAlKWB9fSksWCgiZGl2Iix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSB0b3AtMS8yIGxlZnQtMS8yIHctMSBoLTcgcm91bmRlZC14cyAtdHJhbnNsYXRlLXgtMS8yIC10cmFuc2xhdGUteS0xLzIgei0xIHBvaW50ZXItZXZlbnRzLW5vbmUgW3RyYW5zaXRpb246b3BhY2l0eV8wLjE1c19lYXNlLGJhY2tncm91bmRfMC4xNXNfZWFzZV0gJHtCPyJvcGFjaXR5LTEwMCI6Im9wYWNpdHktMCJ9ICR7Vj8iYmctZ3JhYmJlci1hY3RpdmUiOiJiZy1ncmFiYmVyIn1gfSldfSl9ZnVuY3Rpb24gbjYoKXtsZXRbJCxKXT1BKCgpPT50eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lm1hdGNoTWVkaWE/LigiKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIikubWF0Y2hlcz09PSEwKTtyZXR1cm4gXygoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwhd2luZG93Lm1hdGNoTWVkaWEpcmV0dXJuO2xldCBRPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb250cmFzdDogbW9yZSkiKSxaPSgpPT5KKFEubWF0Y2hlcyk7cmV0dXJuIFooKSxRLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWiksKCk9PlEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixaKX0sW10pLCR9dmFyIGE2PTI4MDtmdW5jdGlvbiBLOCh7aXNSZXNpemluZzokLGlzSW5lcnRpYTpKLHJlZHVjZWRNb3Rpb246UX0pe2lmKFEpcmV0dXJuIm5vbmUiO3JldHVybiAkfHxKPyJ3aWR0aCA3MG1zIGxpbmVhciI6IndpZHRoIDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSwgYXNwZWN0LXJhdGlvIDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSJ9dmFyIHM2PSJwYWRkaW5nLWxlZnQgMC4yNHMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpLCBwYWRkaW5nLXJpZ2h0IDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSIsdDY9ImN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIixLMz0iY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSIsZTY9ImxpbmVhcigwLCAwLjMyIDklLCAwLjYyIDE4JSwgMC44NSAyNyUsIDEuMDEgMzYlLCAxLjA3IDQ1JSwgMS4wNSA1NiUsIDEuMDIgNzAlLCAxKSIsJDc9IjAuMTZzIixKNz0iMC4ycyIsUTc9NSxaNz17aWRsZToxLGhvdmVyOjEuMDksZHJhZzoxLjEyfSxYNz17aWRsZToidmFyKC0tc2VydmUtc2ltLXJlc2l6ZS1pZGxlLCAjNjg2ZTc4KSIsaG92ZXI6InZhcigtLXNlcnZlLXNpbS1yZXNpemUtaG92ZXIsICNiN2JiYzIpIixkcmFnOiJ2YXIoLS1zZXJ2ZS1zaW0tcmVzaXplLWRyYWcsICNmNGY2ZmEpIn0sSzc9InZhcigtLXNlcnZlLXNpbS1yZXNpemUtb3V0bGluZSwgIzM0MzYzYikiLFk3PXtpZGxlOjIuNjUsaG92ZXI6NC4xNSxkcmFnOjQuNjV9LHE3PXtpZGxlOjAuMzgsaG92ZXI6MC44NixkcmFnOjF9LFgzPW51bGw7ZnVuY3Rpb24gVjcoKXtpZihYMyE9bnVsbClyZXR1cm4gWDM7aWYodHlwZW9mIENTUz4idSJ8fHR5cGVvZiBDU1Muc3VwcG9ydHMhPT0iZnVuY3Rpb24iKXJldHVybiExO3JldHVybiBYMz1DU1Muc3VwcG9ydHMoImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24iLCJsaW5lYXIoMCwgMSkiKSxYM312YXIgd1E9NDAsRzc9MTQsQjc9MjQwLHo3PTMwLE43PTAuMTUsYlE9ODAsVTc9MTUwLEw3PTI1MCxZOD0ic2VydmUtc2ltOnNpbXVsYXRvci1mcmFtZS1zY2FsZSI7ZnVuY3Rpb24gXzUoJCxKLFEsWil7bGV0IEs9JCozLFk9Sj4wP01hdGgubWF4KDE4MCxKLTQ4KTpLLHE9UT4wJiZOdW1iZXIuaXNGaW5pdGUoWikmJlo+MD9NYXRoLm1heCgxODAsKFEtMTM2KSpaKTpLO3JldHVybiBNYXRoLm1heCgxODAsTWF0aC5taW4oSyxZLHEpKX1mdW5jdGlvbiBRNSgkLEosUSxaLEspe2xldCBZPV81KEosUSxaLEspLHE9TWF0aC5taW4oMjgwLFkpO3JldHVybiBNYXRoLm1pbihZLE1hdGgubWF4KHEsJCkpfWZ1bmN0aW9uIEg3KCQsSixRLFosSyl7bGV0IFk9TnVtYmVyLmlzRmluaXRlKEspPyQqSzokO3JldHVybiBRNShZLCQsSixRLFopfWZ1bmN0aW9uIFkzKCQpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCkpcmV0dXJuICQ7bGV0IEo9dHlwZW9mIHdpbmRvdzwidSI/TWF0aC5tYXgoMSx3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MSk6MTtyZXR1cm4gTWF0aC5yb3VuZCgkKkopL0p9ZnVuY3Rpb24gcTgoJCxKKXtpZigkPD0wfHxKPD0wKXJldHVybiAwO2xldCBRPTAuNTUsWj0kKkoqUS8oSitRKiQpO3JldHVybiBNYXRoLm1pbih3USxaKX1mdW5jdGlvbiBrNygkLEosUSl7bGV0IFo9JCxLPVE7Zm9yKGxldCBZIG9mIEope2xldCBxPU1hdGguYWJzKCQtWSk7aWYocTxLKVo9WSxLPXF9cmV0dXJuIFp9ZnVuY3Rpb24gQzcoJCl7bGV0e2Zyb206Six0bzpRLHZlbG9jaXR5Olosc3RpZmZuZXNzOkssZGFtcGluZzpZLG9uVXBkYXRlOnEsb25Db21wbGV0ZTpWfT0kLEc9MC40LEI9MC4wMzMzMzMzMzMzMzMzMzMzMyxOPUosej1aLFU9cGVyZm9ybWFuY2Uubm93KCksSD0wLEY9ITEsTD0oayk9PntpZihGKXJldHVybjtsZXQgQz1NYXRoLm1pbigoay1VKS8xMDAwLDAuMDMzMzMzMzMzMzMzMzMzMzMpO1U9aztsZXQgTz0tSyooTi1RKS1ZKno7aWYoeis9TypDLE4rPXoqQyxNYXRoLmFicyh6KTwwLjQmJk1hdGguYWJzKE4tUSk8MC40KXtxKFEpLFY/LigpO3JldHVybn1xKE4pLEg9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEwpfTtyZXR1cm4gSD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCksKCk9PntpZihGPSEwLEgpY2FuY2VsQW5pbWF0aW9uRnJhbWUoSCl9fWZ1bmN0aW9uIEY3KCQpe2lmKCQubGVuZ3RoPDIpcmV0dXJuIDA7bGV0IEo9JFskLmxlbmd0aC0xXSxRPSRbMF07Zm9yKGxldCBLPSQubGVuZ3RoLTE7Sz49MDtLLS0paWYoSi50LSRbS10udD49YlEpe1E9JFtLXTticmVha31sZXQgWj0oSi50LVEudCkvMTAwMDtyZXR1cm4gWj4wPyhKLngtUS54KS9aOjB9dmFyIEE3PSJkcm9wLXNoYWRvdygwIDAuNXB4IDFweCByZ2JhKDAsMCwwLDAuMSkpIGRyb3Atc2hhZG93KDAgMnB4IDVweCByZ2JhKDAsMCwwLDAuMTMpKSI7ZnVuY3Rpb24geVEoe2FyYzokLHBoYXNlOkoscmVkdWNlZE1vdGlvbjpRLGhpZ2hDb250cmFzdDpaLGZvY3VzVmlzaWJsZTpLfSl7bGV0IFk9SiE9PSJpZGxlIixxPVo/MS4xMjoxLFY9UT8xOlo3W0pdLEc9WTdbSl0qcSxCPVo/MTpxN1tKXSxOPVk/JDc6Sjcsej1ZP3Q2OkszLFU9WSYmVjcoKT9lNjp6LEg9UT8ibm9uZSI6YHRyYW5zZm9ybSAke059ICR7VX1gLEY9UT8ibm9uZSI6YHN0cm9rZSAke059ICR7en0sIHN0cm9rZS13aWR0aCAke059ICR7en1gLEw9JC52aWV3Qm94U2l6ZSxrPSQuZCxDPXt0cmFuc2Zvcm06YHRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZSgke1Z9KWAsdHJhbnNmb3JtT3JpZ2luOiIxMDAlIDEwMCUiLHRyYW5zaXRpb246SCx3aWxsQ2hhbmdlOlE/dm9pZCAwOiJ0cmFuc2Zvcm0iLGJhY2tmYWNlVmlzaWJpbGl0eToiaGlkZGVuIixXZWJraXRCYWNrZmFjZVZpc2liaWxpdHk6ImhpZGRlbiJ9O3JldHVybiBYKCJzdmciLHt3aWR0aDpMLGhlaWdodDpMLHZpZXdCb3g6YDAgMCAke0x9ICR7TH1gLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsc2hhcGVSZW5kZXJpbmc6Imdlb21ldHJpY1ByZWNpc2lvbiIsc3R5bGU6e2Rpc3BsYXk6ImJsb2NrIixvdmVyZmxvdzoidmlzaWJsZSIsY3Vyc29yOiJpbmhlcml0Iix0b3VjaEFjdGlvbjoibm9uZSIscG9pbnRlckV2ZW50czoibm9uZSJ9LGNoaWxkcmVuOltYKCJnIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsc3R5bGU6e3BvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbWCgicGF0aCIse2Q6ayxmaWxsOiJub25lIixzdHJva2U6InJnYmEoMTAsIDEzMiwgMjU1LCAwLjk1KSIsc3Ryb2tlV2lkdGg6KFE3KjIrNikqcSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Oks/MC45NTowLHRyYW5zaXRpb246UT8ib3BhY2l0eSA4MG1zIGxpbmVhciI6YG9wYWNpdHkgMjAwbXMgJHtLM31gLGZpbHRlcjoiZHJvcC1zaGFkb3coMCAwIDJweCByZ2JhKDEwLDEzMiwyNTUsMC41NSkpIGRyb3Atc2hhZG93KDAgMCA0cHggcmdiYSgxMCwxMzIsMjU1LDAuMzIpKSJ9fSksWCgicGF0aCIse2Q6ayxmaWxsOiJub25lIixzdHJva2U6InJnYmEoMjU1LDI1NSwyNTUsMC45NSkiLHN0cm9rZVdpZHRoOjEuNSpxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6Sz8wLjc6MCx0cmFuc2l0aW9uOlE/Im9wYWNpdHkgODBtcyBsaW5lYXIiOmBvcGFjaXR5IDIwMG1zICR7SzN9YH19KV19KSxYKCJnIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsc3R5bGU6QyxjaGlsZHJlbjpYKCJnIix7c3R5bGU6e3BvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbWCgicGF0aCIse2Q6ayxzdHJva2VXaWR0aDpHKzIuMipxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e3N0cm9rZTpLNyxvcGFjaXR5Ok1hdGgubWluKDEsQiswLjA4KSx0cmFuc2l0aW9uOmAke0Z9LCBvcGFjaXR5ICR7Tn0gJHt6fWAsZmlsdGVyOkE3fX0pLFgoInBhdGgiLHtkOmssc3Ryb2tlV2lkdGg6RyxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntzdHJva2U6WDdbSl0sb3BhY2l0eTpCLHRyYW5zaXRpb246YCR7Rn0sIG9wYWNpdHkgJHtOfSAke3p9YCxmaWx0ZXI6QTd9fSldfSl9KV19KX1mdW5jdGlvbiBPNyh7c2ltdWxhdG9yUmVzaXplOiQsZGV2aWNlVHlwZTpKLHN0cmVhbUNvbmZpZzpRLGNvbnRhaW5lcldpZHRoOlosY29udGFpbmVySGVpZ2h0Okt9KXtsZXQgWT1GNSgpLHE9bjYoKSxbVixHXT1BKCExKSxCPVIxKCgpPT5wMyh7dHlwZTpKLGNvbmZpZzpRPz9udWxsLGNvbnRhaW5lcldpZHRoOlosY29udGFpbmVySGVpZ2h0Okt9KSxbSixRLFosS10pLE49JC5pc1Jlc2l6aW5nfHwkLmlzSW5lcnRpYT8iZHJhZyI6JC5oYW5kbGVIb3ZlcmVkPyJob3ZlciI6ImlkbGUiO3JldHVybiBYKCJkaXYiLHtyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLWxhYmVsIjoiUmVzaXplIHNpbXVsYXRvciB3aWR0aC4gRHJhZyB0aGUgY29ybmVyIG9yIHVzZSBMZWZ0IGFuZCBSaWdodCBBcnJvdyBrZXlzOyBob2xkIFNoaWZ0IGZvciBsYXJnZXIgc3RlcHMuIiwiYXJpYS1vcmllbnRhdGlvbiI6InZlcnRpY2FsIiwiYXJpYS12YWx1ZW1pbiI6TWF0aC5yb3VuZCgkLm1pbldpZHRoKSwiYXJpYS12YWx1ZW1heCI6TWF0aC5yb3VuZCgkLm1heFdpZHRoKSwiYXJpYS12YWx1ZW5vdyI6TWF0aC5yb3VuZCgkLmNvbW1pdHRlZFdpZHRoKSx0YWJJbmRleDowLHJlZjokLmhhbmRsZVJlZixvbktleURvd246JC5vbktleURvd24sb25Qb2ludGVyRG93bjokLm9uUG9pbnRlckRvd24sb25Qb2ludGVyTW92ZTokLm9uUG9pbnRlck1vdmUsb25Qb2ludGVyVXA6JC5vblBvaW50ZXJFbmQsb25Qb2ludGVyQ2FuY2VsOiQub25Qb2ludGVyRW5kLG9uTG9zdFBvaW50ZXJDYXB0dXJlOiQub25Qb2ludGVyRW5kLG9uUG9pbnRlckVudGVyOigpPT4kLnNldEhhbmRsZUhvdmVyZWQoITApLG9uUG9pbnRlckxlYXZlOigpPT4kLnNldEhhbmRsZUhvdmVyZWQoITEpLG9uRm9jdXM6KHopPT57Ryh6LmN1cnJlbnRUYXJnZXQubWF0Y2hlcz8uKCI6Zm9jdXMtdmlzaWJsZSIpPz8hMSl9LG9uQmx1cjooKT0+RyghMSksc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIscmlnaHQ6LTE0LGJvdHRvbTotMTQsd2lkdGg6NjAsaGVpZ2h0OjYwLGJvcmRlcjoibm9uZSIscGFkZGluZzowLG1hcmdpbjowLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImZsZXgtZW5kIixqdXN0aWZ5Q29udGVudDoiZmxleC1lbmQiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50IixjdXJzb3I6Im53c2UtcmVzaXplIix0b3VjaEFjdGlvbjoibm9uZSIscG9pbnRlckV2ZW50czoiYXV0byIsb3V0bGluZToibm9uZSIsekluZGV4OjI1LFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiJ0cmFuc3BhcmVudCJ9LGNoaWxkcmVuOlgoeVEse2FyYzpCLHBoYXNlOk4scmVkdWNlZE1vdGlvbjpZLGhpZ2hDb250cmFzdDpxLGZvY3VzVmlzaWJsZTpWfSl9KX1mdW5jdGlvbiBTUSgkKXtpZighJHx8dHlwZW9mIGRvY3VtZW50PiJ1IilyZXR1cm47bGV0IEo9ZG9jdW1lbnQuaGVhZHx8ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSxRPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7US50eXBlPSJ0ZXh0L2NzcyIsSi5hcHBlbmRDaGlsZChRKSxRLnN0eWxlU2hlZXQ/US5zdHlsZVNoZWV0LmNzc1RleHQ9JDpRLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCQpKX12YXIgeFE9KCQpPT57c3dpdGNoKCQpe2Nhc2Uic3VjY2VzcyI6cmV0dXJuIHZRO2Nhc2UiaW5mbyI6cmV0dXJuIGhRO2Nhc2Uid2FybmluZyI6cmV0dXJuIGdRO2Nhc2UiZXJyb3IiOnJldHVybiBmUTtkZWZhdWx0OnJldHVybiBudWxsfX0sUlE9QXJyYXkoMTIpLmZpbGwoMCksalE9KHt2aXNpYmxlOiQsY2xhc3NOYW1lOkp9KT0+e3JldHVybiB2LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpbInNvbm5lci1sb2FkaW5nLXdyYXBwZXIiLEpdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIiksImRhdGEtdmlzaWJsZSI6JH0sdi5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InNvbm5lci1zcGlubmVyIn0sUlEubWFwKChRLFopPT52LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToic29ubmVyLWxvYWRpbmctYmFyIixrZXk6YHNwaW5uZXItYmFyLSR7Wn1gfSkpKSl9LHZRPXYuY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjAgMjAiLGZpbGw6ImN1cnJlbnRDb2xvciIsaGVpZ2h0OiIyMCIsd2lkdGg6IjIwIn0sdi5jcmVhdGVFbGVtZW50KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGQ6Ik0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2em0zLjg1Ny05LjgwOWEuNzUuNzUgMCAwMC0xLjIxNC0uODgybC0zLjQ4MyA0Ljc5LTEuODgtMS44OGEuNzUuNzUgMCAxMC0xLjA2IDEuMDYxbDIuNSAyLjVhLjc1Ljc1IDAgMDAxLjEzNy0uMDg5bDQtNS41eiIsY2xpcFJ1bGU6ImV2ZW5vZGQifSkpLGdRPXYuY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsaGVpZ2h0OiIyMCIsd2lkdGg6IjIwIn0sdi5jcmVhdGVFbGVtZW50KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGQ6Ik05LjQwMSAzLjAwM2MxLjE1NS0yIDQuMDQzLTIgNS4xOTcgMGw3LjM1NSAxMi43NDhjMS4xNTQgMi0uMjkgNC41LTIuNTk5IDQuNUg0LjY0NWMtMi4zMDkgMC0zLjc1Mi0yLjUtMi41OTgtNC41TDkuNCAzLjAwM3pNMTIgOC4yNWEuNzUuNzUgMCAwMS43NS43NXYzLjc1YS43NS43NSAwIDAxLTEuNSAwVjlhLjc1Ljc1IDAgMDEuNzUtLjc1em0wIDguMjVhLjc1Ljc1IDAgMTAwLTEuNS43NS43NSAwIDAwMCAxLjV6IixjbGlwUnVsZToiZXZlbm9kZCJ9KSksaFE9di5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyMCAyMCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSx2LmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTE4IDEwYTggOCAwIDExLTE2IDAgOCA4IDAgMDExNiAwem0tNy00YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHpNOSA5YS43NS43NSAwIDAwMCAxLjVoLjI1M2EuMjUuMjUgMCAwMS4yNDQuMzA0bC0uNDU5IDIuMDY2QTEuNzUgMS43NSAwIDAwMTAuNzQ3IDE1SDExYS43NS43NSAwIDAwMC0xLjVoLS4yNTNhLjI1LjI1IDAgMDEtLjI0NC0uMzA0bC40NTktMi4wNjZBMS43NSAxLjc1IDAgMDA5LjI1MyA5SDl6IixjbGlwUnVsZToiZXZlbm9kZCJ9KSksZlE9di5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyMCAyMCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSx2LmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTE4IDEwYTggOCAwIDExLTE2IDAgOCA4IDAgMDExNiAwem0tOC01YS43NS43NSAwIDAxLjc1Ljc1djQuNWEuNzUuNzUgMCAwMS0xLjUgMHYtNC41QS43NS43NSAwIDAxMTAgNXptMCAxMGExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSxtUT12LmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6IjEyIixoZWlnaHQ6IjEyIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMS41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn0sdi5jcmVhdGVFbGVtZW50KCJsaW5lIix7eDE6IjE4Iix5MToiNiIseDI6IjYiLHkyOiIxOCJ9KSx2LmNyZWF0ZUVsZW1lbnQoImxpbmUiLHt4MToiNiIseTE6IjYiLHgyOiIxOCIseTI6IjE4In0pKSxwUT0oKT0+e2xldFskLEpdPXYudXNlU3RhdGUoZG9jdW1lbnQuaGlkZGVuKTtyZXR1cm4gdi51c2VFZmZlY3QoKCk9PntsZXQgUT0oKT0+e0ooZG9jdW1lbnQuaGlkZGVuKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLFEpLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsUSl9LFtdKSwkfSxWOD0xO2NsYXNzIFA3e2NvbnN0cnVjdG9yKCl7dGhpcy5zdWJzY3JpYmU9KCQpPT57cmV0dXJuIHRoaXMuc3Vic2NyaWJlcnMucHVzaCgkKSwoKT0+e2xldCBKPXRoaXMuc3Vic2NyaWJlcnMuaW5kZXhPZigkKTt0aGlzLnN1YnNjcmliZXJzLnNwbGljZShKLDEpfX0sdGhpcy5wdWJsaXNoPSgkKT0+e3RoaXMuc3Vic2NyaWJlcnMuZm9yRWFjaCgoSik9PkooJCkpfSx0aGlzLmFkZFRvYXN0PSgkKT0+e3RoaXMucHVibGlzaCgkKSx0aGlzLnRvYXN0cz1bLi4udGhpcy50b2FzdHMsJF19LHRoaXMuY3JlYXRlPSgkKT0+e3ZhciBKO2xldHttZXNzYWdlOlEsLi4uWn09JCxLPXR5cGVvZigkPT1udWxsP3ZvaWQgMDokLmlkKT09PSJudW1iZXIifHwoKEo9JC5pZCk9PW51bGw/dm9pZCAwOkoubGVuZ3RoKT4wPyQuaWQ6VjgrKyxZPXRoaXMudG9hc3RzLmZpbmQoKFYpPT57cmV0dXJuIFYuaWQ9PT1LfSkscT0kLmRpc21pc3NpYmxlPT09dm9pZCAwPyEwOiQuZGlzbWlzc2libGU7aWYodGhpcy5kaXNtaXNzZWRUb2FzdHMuaGFzKEspKXRoaXMuZGlzbWlzc2VkVG9hc3RzLmRlbGV0ZShLKTtpZihZKXRoaXMudG9hc3RzPXRoaXMudG9hc3RzLm1hcCgoVik9PntpZihWLmlkPT09SylyZXR1cm4gdGhpcy5wdWJsaXNoKHsuLi5WLC4uLiQsaWQ6Syx0aXRsZTpRfSksey4uLlYsLi4uJCxpZDpLLGRpc21pc3NpYmxlOnEsdGl0bGU6UX07cmV0dXJuIFZ9KTtlbHNlIHRoaXMuYWRkVG9hc3Qoe3RpdGxlOlEsLi4uWixkaXNtaXNzaWJsZTpxLGlkOkt9KTtyZXR1cm4gS30sdGhpcy5kaXNtaXNzPSgkKT0+e2lmKCQpdGhpcy5kaXNtaXNzZWRUb2FzdHMuYWRkKCQpLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChKKT0+Sih7aWQ6JCxkaXNtaXNzOiEwfSkpKTtlbHNlIHRoaXMudG9hc3RzLmZvckVhY2goKEopPT57dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChRKT0+USh7aWQ6Si5pZCxkaXNtaXNzOiEwfSkpfSk7cmV0dXJuICR9LHRoaXMubWVzc2FnZT0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSixtZXNzYWdlOiR9KX0sdGhpcy5lcnJvcj0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSixtZXNzYWdlOiQsdHlwZToiZXJyb3IifSl9LHRoaXMuc3VjY2Vzcz0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSix0eXBlOiJzdWNjZXNzIixtZXNzYWdlOiR9KX0sdGhpcy5pbmZvPSgkLEopPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5KLHR5cGU6ImluZm8iLG1lc3NhZ2U6JH0pfSx0aGlzLndhcm5pbmc9KCQsSik9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLkosdHlwZToid2FybmluZyIsbWVzc2FnZTokfSl9LHRoaXMubG9hZGluZz0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSix0eXBlOiJsb2FkaW5nIixtZXNzYWdlOiR9KX0sdGhpcy5wcm9taXNlPSgkLEopPT57aWYoIUopcmV0dXJuO2xldCBRPXZvaWQgMDtpZihKLmxvYWRpbmchPT12b2lkIDApUT10aGlzLmNyZWF0ZSh7Li4uSixwcm9taXNlOiQsdHlwZToibG9hZGluZyIsbWVzc2FnZTpKLmxvYWRpbmcsZGVzY3JpcHRpb246dHlwZW9mIEouZGVzY3JpcHRpb24hPT0iZnVuY3Rpb24iP0ouZGVzY3JpcHRpb246dm9pZCAwfSk7bGV0IFo9UHJvbWlzZS5yZXNvbHZlKCQgaW5zdGFuY2VvZiBGdW5jdGlvbj8kKCk6JCksSz1RIT09dm9pZCAwLFkscT1aLnRoZW4oYXN5bmMoRyk9PntpZihZPVsicmVzb2x2ZSIsR10sdi5pc1ZhbGlkRWxlbWVudChHKSlLPSExLHRoaXMuY3JlYXRlKHtpZDpRLHR5cGU6ImRlZmF1bHQiLG1lc3NhZ2U6R30pO2Vsc2UgaWYobFEoRykmJiFHLm9rKXtLPSExO2xldCBOPXR5cGVvZiBKLmVycm9yPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmVycm9yKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7Ry5zdGF0dXN9YCk6Si5lcnJvcix6PXR5cGVvZiBKLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmRlc2NyaXB0aW9uKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7Ry5zdGF0dXN9YCk6Si5kZXNjcmlwdGlvbixIPXR5cGVvZiBOPT09Im9iamVjdCImJiF2LmlzVmFsaWRFbGVtZW50KE4pP046e21lc3NhZ2U6Tn07dGhpcy5jcmVhdGUoe2lkOlEsdHlwZToiZXJyb3IiLGRlc2NyaXB0aW9uOnosLi4uSH0pfWVsc2UgaWYoRyBpbnN0YW5jZW9mIEVycm9yKXtLPSExO2xldCBOPXR5cGVvZiBKLmVycm9yPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmVycm9yKEcpOkouZXJyb3Isej10eXBlb2YgSi5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/YXdhaXQgSi5kZXNjcmlwdGlvbihHKTpKLmRlc2NyaXB0aW9uLEg9dHlwZW9mIE49PT0ib2JqZWN0IiYmIXYuaXNWYWxpZEVsZW1lbnQoTik/Tjp7bWVzc2FnZTpOfTt0aGlzLmNyZWF0ZSh7aWQ6USx0eXBlOiJlcnJvciIsZGVzY3JpcHRpb246eiwuLi5IfSl9ZWxzZSBpZihKLnN1Y2Nlc3MhPT12b2lkIDApe0s9ITE7bGV0IE49dHlwZW9mIEouc3VjY2Vzcz09PSJmdW5jdGlvbiI/YXdhaXQgSi5zdWNjZXNzKEcpOkouc3VjY2Vzcyx6PXR5cGVvZiBKLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmRlc2NyaXB0aW9uKEcpOkouZGVzY3JpcHRpb24sSD10eXBlb2YgTj09PSJvYmplY3QiJiYhdi5pc1ZhbGlkRWxlbWVudChOKT9OOnttZXNzYWdlOk59O3RoaXMuY3JlYXRlKHtpZDpRLHR5cGU6InN1Y2Nlc3MiLGRlc2NyaXB0aW9uOnosLi4uSH0pfX0pLmNhdGNoKGFzeW5jKEcpPT57aWYoWT1bInJlamVjdCIsR10sSi5lcnJvciE9PXZvaWQgMCl7Sz0hMTtsZXQgQj10eXBlb2YgSi5lcnJvcj09PSJmdW5jdGlvbiI/YXdhaXQgSi5lcnJvcihHKTpKLmVycm9yLE49dHlwZW9mIEouZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IEouZGVzY3JpcHRpb24oRyk6Si5kZXNjcmlwdGlvbixVPXR5cGVvZiBCPT09Im9iamVjdCImJiF2LmlzVmFsaWRFbGVtZW50KEIpP0I6e21lc3NhZ2U6Qn07dGhpcy5jcmVhdGUoe2lkOlEsdHlwZToiZXJyb3IiLGRlc2NyaXB0aW9uOk4sLi4uVX0pfX0pLmZpbmFsbHkoKCk9PntpZihLKXRoaXMuZGlzbWlzcyhRKSxRPXZvaWQgMDtKLmZpbmFsbHk9PW51bGx8fEouZmluYWxseS5jYWxsKEopfSksVj0oKT0+bmV3IFByb21pc2UoKEcsQik9PnEudGhlbigoKT0+WVswXT09PSJyZWplY3QiP0IoWVsxXSk6RyhZWzFdKSkuY2F0Y2goQikpO2lmKHR5cGVvZiBRIT09InN0cmluZyImJnR5cGVvZiBRIT09Im51bWJlciIpcmV0dXJue3Vud3JhcDpWfTtlbHNlIHJldHVybiBPYmplY3QuYXNzaWduKFEse3Vud3JhcDpWfSl9LHRoaXMuY3VzdG9tPSgkLEopPT57bGV0IFE9KEo9PW51bGw/dm9pZCAwOkouaWQpfHxWOCsrO3JldHVybiB0aGlzLmNyZWF0ZSh7anN4OiQoUSksaWQ6USwuLi5KfSksUX0sdGhpcy5nZXRBY3RpdmVUb2FzdHM9KCk9PntyZXR1cm4gdGhpcy50b2FzdHMuZmlsdGVyKCgkKT0+IXRoaXMuZGlzbWlzc2VkVG9hc3RzLmhhcygkLmlkKSl9LHRoaXMuc3Vic2NyaWJlcnM9W10sdGhpcy50b2FzdHM9W10sdGhpcy5kaXNtaXNzZWRUb2FzdHM9bmV3IFNldH19dmFyIFkwPW5ldyBQNyx1UT0oJCxKKT0+e2xldCBRPShKPT1udWxsP3ZvaWQgMDpKLmlkKXx8VjgrKztyZXR1cm4gWTAuYWRkVG9hc3Qoe3RpdGxlOiQsLi4uSixpZDpRfSksUX0sbFE9KCQpPT57cmV0dXJuICQmJnR5cGVvZiAkPT09Im9iamVjdCImJiJvayJpbiAkJiZ0eXBlb2YgJC5vaz09PSJib29sZWFuIiYmInN0YXR1cyJpbiAkJiZ0eXBlb2YgJC5zdGF0dXM9PT0ibnVtYmVyIn0sZFE9dVEsY1E9KCk9PlkwLnRvYXN0cyxpUT0oKT0+WTAuZ2V0QWN0aXZlVG9hc3RzKCksSDA9T2JqZWN0LmFzc2lnbihkUSx7c3VjY2VzczpZMC5zdWNjZXNzLGluZm86WTAuaW5mbyx3YXJuaW5nOlkwLndhcm5pbmcsZXJyb3I6WTAuZXJyb3IsY3VzdG9tOlkwLmN1c3RvbSxtZXNzYWdlOlkwLm1lc3NhZ2UscHJvbWlzZTpZMC5wcm9taXNlLGRpc21pc3M6WTAuZGlzbWlzcyxsb2FkaW5nOlkwLmxvYWRpbmd9LHtnZXRIaXN0b3J5OmNRLGdldFRvYXN0czppUX0pO1NRKCJbZGF0YS1zb25uZXItdG9hc3Rlcl1bZGlyPWx0cl0saHRtbFtkaXI9bHRyXXstLXRvYXN0LWljb24tbWFyZ2luLXN0YXJ0Oi0zcHg7LS10b2FzdC1pY29uLW1hcmdpbi1lbmQ6NHB4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1zdGFydDotMXB4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQ6MHB4Oy0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydDphdXRvOy0tdG9hc3QtYnV0dG9uLW1hcmdpbi1lbmQ6MDstLXRvYXN0LWNsb3NlLWJ1dHRvbi1zdGFydDowOy0tdG9hc3QtY2xvc2UtYnV0dG9uLWVuZDp1bnNldDstLXRvYXN0LWNsb3NlLWJ1dHRvbi10cmFuc2Zvcm06dHJhbnNsYXRlKC0zNSUsIC0zNSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkaXI9cnRsXSxodG1sW2Rpcj1ydGxdey0tdG9hc3QtaWNvbi1tYXJnaW4tc3RhcnQ6NHB4Oy0tdG9hc3QtaWNvbi1tYXJnaW4tZW5kOi0zcHg7LS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0OjBweDstLXRvYXN0LXN2Zy1tYXJnaW4tZW5kOi0xcHg7LS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0OjA7LS10b2FzdC1idXR0b24tbWFyZ2luLWVuZDphdXRvOy0tdG9hc3QtY2xvc2UtYnV0dG9uLXN0YXJ0OnVuc2V0Oy0tdG9hc3QtY2xvc2UtYnV0dG9uLWVuZDowOy0tdG9hc3QtY2xvc2UtYnV0dG9uLXRyYW5zZm9ybTp0cmFuc2xhdGUoMzUlLCAtMzUlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl17cG9zaXRpb246Zml4ZWQ7d2lkdGg6dmFyKC0td2lkdGgpO2ZvbnQtZmFtaWx5OnVpLXNhbnMtc2VyaWYsc3lzdGVtLXVpLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxOb3RvIFNhbnMsc2Fucy1zZXJpZixBcHBsZSBDb2xvciBFbW9qaSxTZWdvZSBVSSBFbW9qaSxTZWdvZSBVSSBTeW1ib2wsTm90byBDb2xvciBFbW9qaTstLWdyYXkxOmhzbCgwLCAwJSwgOTklKTstLWdyYXkyOmhzbCgwLCAwJSwgOTcuMyUpOy0tZ3JheTM6aHNsKDAsIDAlLCA5NS4xJSk7LS1ncmF5NDpoc2woMCwgMCUsIDkzJSk7LS1ncmF5NTpoc2woMCwgMCUsIDkwLjklKTstLWdyYXk2OmhzbCgwLCAwJSwgODguNyUpOy0tZ3JheTc6aHNsKDAsIDAlLCA4NS44JSk7LS1ncmF5ODpoc2woMCwgMCUsIDc4JSk7LS1ncmF5OTpoc2woMCwgMCUsIDU2LjElKTstLWdyYXkxMDpoc2woMCwgMCUsIDUyLjMlKTstLWdyYXkxMTpoc2woMCwgMCUsIDQzLjUlKTstLWdyYXkxMjpoc2woMCwgMCUsIDklKTstLWJvcmRlci1yYWRpdXM6OHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjA7bWFyZ2luOjA7bGlzdC1zdHlsZTpub25lO291dGxpbmU6MDt6LWluZGV4Ojk5OTk5OTk5OTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNHMgZWFzZX1AbWVkaWEgKGhvdmVyOm5vbmUpIGFuZCAocG9pbnRlcjpjb2Fyc2Upe1tkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLWxpZnRlZD10cnVlXXt0cmFuc2Zvcm06bm9uZX19W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1yaWdodF17cmlnaHQ6dmFyKC0tb2Zmc2V0LXJpZ2h0KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPWxlZnRde2xlZnQ6dmFyKC0tb2Zmc2V0LWxlZnQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249Y2VudGVyXXtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS15LXBvc2l0aW9uPXRvcF17dG9wOnZhcigtLW9mZnNldC10b3ApfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXXtib3R0b206dmFyKC0tb2Zmc2V0LWJvdHRvbSl9W2RhdGEtc29ubmVyLXRvYXN0XXstLXk6dHJhbnNsYXRlWSgxMDAlKTstLWxpZnQtYW1vdW50OmNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1nYXApKTt6LWluZGV4OnZhcigtLXotaW5kZXgpO3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6MDt0cmFuc2Zvcm06dmFyKC0teSk7dG91Y2gtYWN0aW9uOm5vbmU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjRzLG9wYWNpdHkgLjRzLGhlaWdodCAuNHMsYm94LXNoYWRvdyAuMnM7Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6MDtvdmVyZmxvdy13cmFwOmFueXdoZXJlfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV17cGFkZGluZzoxNnB4O2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLW5vcm1hbC1ib3JkZXIpO2NvbG9yOnZhcigtLW5vcm1hbC10ZXh0KTtib3JkZXItcmFkaXVzOnZhcigtLWJvcmRlci1yYWRpdXMpO2JveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLC4xKTt3aWR0aDp2YXIoLS13aWR0aCk7Zm9udC1zaXplOjEzcHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4fVtkYXRhLXNvbm5lci10b2FzdF06Zm9jdXMtdmlzaWJsZXtib3gtc2hhZG93OjAgNHB4IDEycHggcmdiYSgwLDAsMCwuMSksMCAwIDAgMnB4IHJnYmEoMCwwLDAsLjIpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPXRvcF17dG9wOjA7LS15OnRyYW5zbGF0ZVkoLTEwMCUpOy0tbGlmdDoxOy0tbGlmdC1hbW91bnQ6Y2FsYygxICogdmFyKC0tZ2FwKSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXktcG9zaXRpb249Ym90dG9tXXtib3R0b206MDstLXk6dHJhbnNsYXRlWSgxMDAlKTstLWxpZnQ6LTE7LS1saWZ0LWFtb3VudDpjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tZ2FwKSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1kZXNjcmlwdGlvbl17Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNDtjb2xvcjojM2YzZjNmfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1kZXNjcmlwdGlvbl17Y29sb3I6aW5oZXJpdH1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtZGVzY3JpcHRpb25de2NvbG9yOiNlOGU4ZTh9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS10aXRsZV17Zm9udC13ZWlnaHQ6NTAwO2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjppbmhlcml0fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtaWNvbl17ZGlzcGxheTpmbGV4O2hlaWdodDoxNnB4O3dpZHRoOjE2cHg7cG9zaXRpb246cmVsYXRpdmU7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3QtaWNvbi1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1pY29uLW1hcmdpbi1lbmQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1wcm9taXNlPXRydWVdIFtkYXRhLWljb25dPnN2Z3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjthbmltYXRpb246c29ubmVyLWZhZGUtaW4gLjNzIGVhc2UgZm9yd2FyZHN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1pY29uXT4qe2ZsZXgtc2hyaW5rOjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1pY29uXSBzdmd7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3Qtc3ZnLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LXN2Zy1tYXJnaW4tZW5kKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWNvbnRlbnRde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjJweH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWJ1dHRvbl17Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjhweDtoZWlnaHQ6MjRweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1ub3JtYWwtYmcpO2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLXRleHQpO21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLWVuZCk7Ym9yZGVyOm5vbmU7Zm9udC13ZWlnaHQ6NTAwO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtc2hyaW5rOjA7dHJhbnNpdGlvbjpvcGFjaXR5IC40cyxib3gtc2hhZG93IC4yc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWJ1dHRvbl06Zm9jdXMtdmlzaWJsZXtib3gtc2hhZG93OjAgMCAwIDJweCByZ2JhKDAsMCwwLC40KX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWJ1dHRvbl06Zmlyc3Qtb2YtdHlwZXttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1lbmQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY2FuY2VsXXtjb2xvcjp2YXIoLS1ub3JtYWwtdGV4dCk7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wOCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY2FuY2VsXXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjMpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY2xvc2UtYnV0dG9uXXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OnZhcigtLXRvYXN0LWNsb3NlLWJ1dHRvbi1zdGFydCk7cmlnaHQ6dmFyKC0tdG9hc3QtY2xvc2UtYnV0dG9uLWVuZCk7dG9wOjA7aGVpZ2h0OjIwcHg7d2lkdGg6MjBweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowO2NvbG9yOnZhcigtLWdyYXkxMik7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tZ3JheTQpO3RyYW5zZm9ybTp2YXIoLS10b2FzdC1jbG9zZS1idXR0b24tdHJhbnNmb3JtKTtib3JkZXItcmFkaXVzOjUwJTtjdXJzb3I6cG9pbnRlcjt6LWluZGV4OjE7dHJhbnNpdGlvbjpvcGFjaXR5IC4xcyxiYWNrZ3JvdW5kIC4ycyxib3JkZXItY29sb3IgLjJzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY2xvc2UtYnV0dG9uXTpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLC4xKSwwIDAgMCAycHggcmdiYSgwLDAsMCwuMil9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1kaXNhYmxlZD10cnVlXXtjdXJzb3I6bm90LWFsbG93ZWR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXTpob3ZlciBbZGF0YS1jbG9zZS1idXR0b25dOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tZ3JheTIpO2JvcmRlci1jb2xvcjp2YXIoLS1ncmF5NSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBpbmc9dHJ1ZV06OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTEwMCU7cmlnaHQ6LTEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDotMX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj10b3BdW2RhdGEtc3dpcGluZz10cnVlXTo6YmVmb3Jle2JvdHRvbTo1MCU7dHJhbnNmb3JtOnNjYWxlWSgzKSB0cmFuc2xhdGVZKDUwJSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXktcG9zaXRpb249Ym90dG9tXVtkYXRhLXN3aXBpbmc9dHJ1ZV06OmJlZm9yZXt0b3A6NTAlO3RyYW5zZm9ybTpzY2FsZVkoMykgdHJhbnNsYXRlWSgtNTAlKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGluZz1mYWxzZV1bZGF0YS1yZW1vdmVkPXRydWVdOjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3RyYW5zZm9ybTpzY2FsZVkoMil9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWV4cGFuZGVkPXRydWVdOjphZnRlcntjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtoZWlnaHQ6Y2FsYyh2YXIoLS1nYXApICsgMXB4KTtib3R0b206MTAwJTt3aWR0aDoxMDAlfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1tb3VudGVkPXRydWVdey0teTp0cmFuc2xhdGVZKDApO29wYWNpdHk6MX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtZXhwYW5kZWQ9ZmFsc2VdW2RhdGEtZnJvbnQ9ZmFsc2Vdey0tc2NhbGU6dmFyKC0tdG9hc3RzLWJlZm9yZSkgKiAwLjA1ICsgMTstLXk6dHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQtYW1vdW50KSAqIHZhcigtLXRvYXN0cy1iZWZvcmUpKSkgc2NhbGUoY2FsYygtMSAqIHZhcigtLXNjYWxlKSkpO2hlaWdodDp2YXIoLS1mcm9udC10b2FzdC1oZWlnaHQpfVtkYXRhLXNvbm5lci10b2FzdF0+Knt0cmFuc2l0aW9uOm9wYWNpdHkgLjRzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS14LXBvc2l0aW9uPXJpZ2h0XXtyaWdodDowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS14LXBvc2l0aW9uPWxlZnRde2xlZnQ6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtZXhwYW5kZWQ9ZmFsc2VdW2RhdGEtZnJvbnQ9ZmFsc2VdW2RhdGEtc3R5bGVkPXRydWVdPip7b3BhY2l0eTowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS12aXNpYmxlPWZhbHNlXXtvcGFjaXR5OjA7cG9pbnRlci1ldmVudHM6bm9uZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtbW91bnRlZD10cnVlXVtkYXRhLWV4cGFuZGVkPXRydWVdey0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1vZmZzZXQpKSk7aGVpZ2h0OnZhcigtLWluaXRpYWwtaGVpZ2h0KX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PXRydWVdW2RhdGEtc3dpcGUtb3V0PWZhbHNlXXstLXk6dHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQpICogLTEwMCUpKTtvcGFjaXR5OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9dHJ1ZV1bZGF0YS1mcm9udD1mYWxzZV1bZGF0YS1zd2lwZS1vdXQ9ZmFsc2VdW2RhdGEtZXhwYW5kZWQ9dHJ1ZV17LS15OnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLW9mZnNldCkgKyB2YXIoLS1saWZ0KSAqIC0xMDAlKSk7b3BhY2l0eTowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPXRydWVdW2RhdGEtZnJvbnQ9ZmFsc2VdW2RhdGEtc3dpcGUtb3V0PWZhbHNlXVtkYXRhLWV4cGFuZGVkPWZhbHNlXXstLXk6dHJhbnNsYXRlWSg0MCUpO29wYWNpdHk6MDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNXMsb3BhY2l0eSAuMnN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9dHJ1ZV1bZGF0YS1mcm9udD1mYWxzZV06OmJlZm9yZXtoZWlnaHQ6Y2FsYyh2YXIoLS1pbml0aWFsLWhlaWdodCkgKyAyMCUpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwaW5nPXRydWVde3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15LDApKSB0cmFuc2xhdGVYKHZhcigtLXN3aXBlLWFtb3VudC14LDApKTt0cmFuc2l0aW9uOm5vbmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlZD10cnVlXXt1c2VyLXNlbGVjdDpub25lfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV0sW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXktcG9zaXRpb249dG9wXXthbmltYXRpb24tZHVyYXRpb246LjJzO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1vdXQ7YW5pbWF0aW9uLWZpbGwtbW9kZTpmb3J3YXJkc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPWxlZnRde2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC1sZWZ0fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249cmlnaHRde2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC1yaWdodH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPXVwXXthbmltYXRpb24tbmFtZTpzd2lwZS1vdXQtdXB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj1kb3duXXthbmltYXRpb24tbmFtZTpzd2lwZS1vdXQtZG93bn1Aa2V5ZnJhbWVzIHN3aXBlLW91dC1sZWZ0e2Zyb217dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgodmFyKC0tc3dpcGUtYW1vdW50LXgpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteCkgLSAxMDAlKSk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHN3aXBlLW91dC1yaWdodHtmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVYKHZhcigtLXN3aXBlLWFtb3VudC14KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVYKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXgpICsgMTAwJSkpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzd2lwZS1vdXQtdXB7ZnJvbXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWSh2YXIoLS1zd2lwZS1hbW91bnQteSkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWShjYWxjKHZhcigtLXN3aXBlLWFtb3VudC15KSAtIDEwMCUpKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc3dpcGUtb3V0LWRvd257ZnJvbXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWSh2YXIoLS1zd2lwZS1hbW91bnQteSkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWShjYWxjKHZhcigtLXN3aXBlLWFtb3VudC15KSArIDEwMCUpKTtvcGFjaXR5OjB9fUBtZWRpYSAobWF4LXdpZHRoOjYwMHB4KXtbZGF0YS1zb25uZXItdG9hc3Rlcl17cG9zaXRpb246Zml4ZWQ7cmlnaHQ6dmFyKC0tbW9iaWxlLW9mZnNldC1yaWdodCk7bGVmdDp2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpO3dpZHRoOjEwMCV9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2Rpcj1ydGxde2xlZnQ6Y2FsYyh2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpICogLTEpfVtkYXRhLXNvbm5lci10b2FzdGVyXSBbZGF0YS1zb25uZXItdG9hc3Rde2xlZnQ6MDtyaWdodDowO3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCkgKiAyKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPWxlZnRde2xlZnQ6dmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV17Ym90dG9tOnZhcigtLW1vYmlsZS1vZmZzZXQtYm90dG9tKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS15LXBvc2l0aW9uPXRvcF17dG9wOnZhcigtLW1vYmlsZS1vZmZzZXQtdG9wKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPWNlbnRlcl17bGVmdDp2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpO3JpZ2h0OnZhcigtLW1vYmlsZS1vZmZzZXQtcmlnaHQpO3RyYW5zZm9ybTpub25lfX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9bGlnaHRdey0tbm9ybWFsLWJnOiNmZmY7LS1ub3JtYWwtYm9yZGVyOnZhcigtLWdyYXk0KTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxMik7LS1zdWNjZXNzLWJnOmhzbCgxNDMsIDg1JSwgOTYlKTstLXN1Y2Nlc3MtYm9yZGVyOmhzbCgxNDUsIDkyJSwgODclKTstLXN1Y2Nlc3MtdGV4dDpoc2woMTQwLCAxMDAlLCAyNyUpOy0taW5mby1iZzpoc2woMjA4LCAxMDAlLCA5NyUpOy0taW5mby1ib3JkZXI6aHNsKDIyMSwgOTElLCA5MyUpOy0taW5mby10ZXh0OmhzbCgyMTAsIDkyJSwgNDUlKTstLXdhcm5pbmctYmc6aHNsKDQ5LCAxMDAlLCA5NyUpOy0td2FybmluZy1ib3JkZXI6aHNsKDQ5LCA5MSUsIDg0JSk7LS13YXJuaW5nLXRleHQ6aHNsKDMxLCA5MiUsIDQ1JSk7LS1lcnJvci1iZzpoc2woMzU5LCAxMDAlLCA5NyUpOy0tZXJyb3ItYm9yZGVyOmhzbCgzNTksIDEwMCUsIDk0JSk7LS1lcnJvci10ZXh0OmhzbCgzNjAsIDEwMCUsIDQ1JSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWxpZ2h0XSBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtaW52ZXJ0PXRydWVdey0tbm9ybWFsLWJnOiMwMDA7LS1ub3JtYWwtYm9yZGVyOmhzbCgwLCAwJSwgMjAlKTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWludmVydD10cnVlXXstLW5vcm1hbC1iZzojZmZmOy0tbm9ybWFsLWJvcmRlcjp2YXIoLS1ncmF5Myk7LS1ub3JtYWwtdGV4dDp2YXIoLS1ncmF5MTIpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXXstLW5vcm1hbC1iZzojMDAwOy0tbm9ybWFsLWJnLWhvdmVyOmhzbCgwLCAwJSwgMTIlKTstLW5vcm1hbC1ib3JkZXI6aHNsKDAsIDAlLCAyMCUpOy0tbm9ybWFsLWJvcmRlci1ob3Zlcjpoc2woMCwgMCUsIDI1JSk7LS1ub3JtYWwtdGV4dDp2YXIoLS1ncmF5MSk7LS1zdWNjZXNzLWJnOmhzbCgxNTAsIDEwMCUsIDYlKTstLXN1Y2Nlc3MtYm9yZGVyOmhzbCgxNDcsIDEwMCUsIDEyJSk7LS1zdWNjZXNzLXRleHQ6aHNsKDE1MCwgODYlLCA2NSUpOy0taW5mby1iZzpoc2woMjE1LCAxMDAlLCA2JSk7LS1pbmZvLWJvcmRlcjpoc2woMjIzLCA0MyUsIDE3JSk7LS1pbmZvLXRleHQ6aHNsKDIxNiwgODclLCA2NSUpOy0td2FybmluZy1iZzpoc2woNjQsIDEwMCUsIDYlKTstLXdhcm5pbmctYm9yZGVyOmhzbCg2MCwgMTAwJSwgOSUpOy0td2FybmluZy10ZXh0OmhzbCg0NiwgODclLCA2NSUpOy0tZXJyb3ItYmc6aHNsKDM1OCwgNzYlLCAxMCUpOy0tZXJyb3ItYm9yZGVyOmhzbCgzNTcsIDg5JSwgMTYlKTstLWVycm9yLXRleHQ6aHNsKDM1OCwgMTAwJSwgODElKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLWJnKTtib3JkZXItY29sb3I6dmFyKC0tbm9ybWFsLWJvcmRlcik7Y29sb3I6dmFyKC0tbm9ybWFsLXRleHQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdIFtkYXRhLWNsb3NlLWJ1dHRvbl06aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmctaG92ZXIpO2JvcmRlci1jb2xvcjp2YXIoLS1ub3JtYWwtYm9yZGVyLWhvdmVyKX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPXN1Y2Nlc3Nde2JhY2tncm91bmQ6dmFyKC0tc3VjY2Vzcy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXN1Y2Nlc3MtYm9yZGVyKTtjb2xvcjp2YXIoLS1zdWNjZXNzLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9c3VjY2Vzc10gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLXN1Y2Nlc3MtYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1zdWNjZXNzLWJvcmRlcik7Y29sb3I6dmFyKC0tc3VjY2Vzcy10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWluZm9de2JhY2tncm91bmQ6dmFyKC0taW5mby1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWluZm8tYm9yZGVyKTtjb2xvcjp2YXIoLS1pbmZvLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9aW5mb10gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLWluZm8tYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1pbmZvLWJvcmRlcik7Y29sb3I6dmFyKC0taW5mby10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPXdhcm5pbmdde2JhY2tncm91bmQ6dmFyKC0td2FybmluZy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXdhcm5pbmctYm9yZGVyKTtjb2xvcjp2YXIoLS13YXJuaW5nLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9d2FybmluZ10gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLXdhcm5pbmctYmcpO2JvcmRlci1jb2xvcjp2YXIoLS13YXJuaW5nLWJvcmRlcik7Y29sb3I6dmFyKC0td2FybmluZy10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWVycm9yXXtiYWNrZ3JvdW5kOnZhcigtLWVycm9yLWJnKTtib3JkZXItY29sb3I6dmFyKC0tZXJyb3ItYm9yZGVyKTtjb2xvcjp2YXIoLS1lcnJvci10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWVycm9yXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0tZXJyb3ItYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1lcnJvci1ib3JkZXIpO2NvbG9yOnZhcigtLWVycm9yLXRleHQpfS5zb25uZXItbG9hZGluZy13cmFwcGVyey0tc2l6ZToxNnB4O2hlaWdodDp2YXIoLS1zaXplKTt3aWR0aDp2YXIoLS1zaXplKTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3otaW5kZXg6MTB9LnNvbm5lci1sb2FkaW5nLXdyYXBwZXJbZGF0YS12aXNpYmxlPWZhbHNlXXt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjthbmltYXRpb246c29ubmVyLWZhZGUtb3V0IC4ycyBlYXNlIGZvcndhcmRzfS5zb25uZXItc3Bpbm5lcntwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6NTAlO2xlZnQ6NTAlO2hlaWdodDp2YXIoLS1zaXplKTt3aWR0aDp2YXIoLS1zaXplKX0uc29ubmVyLWxvYWRpbmctYmFye2FuaW1hdGlvbjpzb25uZXItc3BpbiAxLjJzIGxpbmVhciBpbmZpbml0ZTtiYWNrZ3JvdW5kOnZhcigtLWdyYXkxMSk7Ym9yZGVyLXJhZGl1czo2cHg7aGVpZ2h0OjglO2xlZnQ6LTEwJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTMuOSU7d2lkdGg6MjQlfS5zb25uZXItbG9hZGluZy1iYXI6Zmlyc3QtY2hpbGR7YW5pbWF0aW9uLWRlbGF5Oi0xLjJzO3RyYW5zZm9ybTpyb3RhdGUoLjAwMDFkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgyKXthbmltYXRpb24tZGVsYXk6LTEuMXM7dHJhbnNmb3JtOnJvdGF0ZSgzMGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDMpe2FuaW1hdGlvbi1kZWxheTotMXM7dHJhbnNmb3JtOnJvdGF0ZSg2MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDQpe2FuaW1hdGlvbi1kZWxheTotLjlzO3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg1KXthbmltYXRpb24tZGVsYXk6LS44czt0cmFuc2Zvcm06cm90YXRlKDEyMGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDYpe2FuaW1hdGlvbi1kZWxheTotLjdzO3RyYW5zZm9ybTpyb3RhdGUoMTUwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNyl7YW5pbWF0aW9uLWRlbGF5Oi0uNnM7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg4KXthbmltYXRpb24tZGVsYXk6LS41czt0cmFuc2Zvcm06cm90YXRlKDIxMGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDkpe2FuaW1hdGlvbi1kZWxheTotLjRzO3RyYW5zZm9ybTpyb3RhdGUoMjQwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMTApe2FuaW1hdGlvbi1kZWxheTotLjNzO3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMTEpe2FuaW1hdGlvbi1kZWxheTotLjJzO3RyYW5zZm9ybTpyb3RhdGUoMzAwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMTIpe2FuaW1hdGlvbi1kZWxheTotLjFzO3RyYW5zZm9ybTpyb3RhdGUoMzMwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9QGtleWZyYW1lcyBzb25uZXItZmFkZS1pbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KX0xMDAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgc29ubmVyLWZhZGUtb3V0ezAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9MTAwJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KX19QGtleWZyYW1lcyBzb25uZXItc3BpbnswJXtvcGFjaXR5OjF9MTAwJXtvcGFjaXR5Oi4xNX19QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uKXsuc29ubmVyLWxvYWRpbmctYmFyLFtkYXRhLXNvbm5lci10b2FzdF0sW2RhdGEtc29ubmVyLXRvYXN0XT4qe3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUhaW1wb3J0YW50fX0uc29ubmVyLWxvYWRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzLHRyYW5zZm9ybSAuMnN9LnNvbm5lci1sb2FkZXJbZGF0YS12aXNpYmxlPWZhbHNlXXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KSB0cmFuc2xhdGUoLTUwJSwtNTAlKX0iKTtmdW5jdGlvbiBxMygkKXtyZXR1cm4gJC5sYWJlbCE9PXZvaWQgMH12YXIgb1E9MyxyUT0iMjRweCIsblE9IjE2cHgiLE03PTQwMDAsYVE9MzU2LHNRPTE0LHRRPTQ1LGVRPTIwMDtmdW5jdGlvbiB3MCguLi4kKXtyZXR1cm4gJC5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpfWZ1bmN0aW9uICRaKCQpe2xldFtKLFFdPSQuc3BsaXQoIi0iKSxaPVtdO2lmKEopWi5wdXNoKEopO2lmKFEpWi5wdXNoKFEpO3JldHVybiBafXZhciBKWj0oJCk9Pnt2YXIgSixRLFosSyxZLHEsVixHLEI7bGV0e2ludmVydDpOLHRvYXN0OnosdW5zdHlsZWQ6VSxpbnRlcmFjdGluZzpILHNldEhlaWdodHM6Rix2aXNpYmxlVG9hc3RzOkwsaGVpZ2h0czprLGluZGV4OkMsdG9hc3RzOk8sZXhwYW5kZWQ6eSxyZW1vdmVUb2FzdDpFLGRlZmF1bHRSaWNoQ29sb3JzOncsY2xvc2VCdXR0b246UyxzdHlsZTpRMSxjYW5jZWxCdXR0b25TdHlsZTpnLGFjdGlvbkJ1dHRvblN0eWxlOmgsY2xhc3NOYW1lOkk9IiIsZGVzY3JpcHRpb25DbGFzc05hbWU6dT0iIixkdXJhdGlvbjpaMSxwb3NpdGlvbjpyLGdhcDpNMSxleHBhbmRCeURlZmF1bHQ6SjEsY2xhc3NOYW1lczppLGljb25zOmYsY2xvc2VCdXR0b25BcmlhTGFiZWw6VTE9IkNsb3NlIHRvYXN0In09JCxbWDEsQjFdPXYudXNlU3RhdGUobnVsbCksW0YxLFcxXT12LnVzZVN0YXRlKG51bGwpLFtvLGNdPXYudXNlU3RhdGUoITEpLFtkLG5dPXYudXNlU3RhdGUoITEpLFtZMSxiXT12LnVzZVN0YXRlKCExKSxbaixOMV09di51c2VTdGF0ZSghMSksW0MxLHBdPXYudXNlU3RhdGUoITEpLFtlLGsxXT12LnVzZVN0YXRlKDApLFtQMSxnMV09di51c2VTdGF0ZSgwKSxwMT12LnVzZVJlZih6LmR1cmF0aW9ufHxaMXx8TTcpLGoxPXYudXNlUmVmKG51bGwpLGExPXYudXNlUmVmKG51bGwpLGswPUM9PT0wLFYwPUMrMTw9TCxEMT16LnR5cGUsdTE9ei5kaXNtaXNzaWJsZSE9PSExLEMwPXouY2xhc3NOYW1lfHwiIixWMT16LmRlc2NyaXB0aW9uQ2xhc3NOYW1lfHwiIixaMD12LnVzZU1lbW8oKCk9PmsuZmluZEluZGV4KChXKT0+Vy50b2FzdElkPT09ei5pZCl8fDAsW2ssei5pZF0pLGIwPXYudXNlTWVtbygoKT0+e3ZhciBXO3JldHVybihXPXouY2xvc2VCdXR0b24pIT1udWxsP1c6U30sW3ouY2xvc2VCdXR0b24sU10pLGgxPXYudXNlTWVtbygoKT0+ei5kdXJhdGlvbnx8WjF8fE03LFt6LmR1cmF0aW9uLFoxXSksYzE9di51c2VSZWYoMCksczE9di51c2VSZWYoMCksZTE9di51c2VSZWYoMCksdDE9di51c2VSZWYobnVsbCksW3kwLHYwXT1yLnNwbGl0KCItIiksUzA9di51c2VNZW1vKCgpPT57cmV0dXJuIGsucmVkdWNlKChXLG0sYSk9PntpZihhPj1aMClyZXR1cm4gVztyZXR1cm4gVyttLmhlaWdodH0sMCl9LFtrLFowXSksJDA9cFEoKSxFMT16LmludmVydHx8TixHMD1EMT09PSJsb2FkaW5nIjtzMS5jdXJyZW50PXYudXNlTWVtbygoKT0+WjAqTTErUzAsW1owLFMwXSksdi51c2VFZmZlY3QoKCk9PntwMS5jdXJyZW50PWgxfSxbaDFdKSx2LnVzZUVmZmVjdCgoKT0+e2MoITApfSxbXSksdi51c2VFZmZlY3QoKCk9PntsZXQgVz1hMS5jdXJyZW50O2lmKFcpe2xldCBtPVcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O3JldHVybiBnMShtKSxGKChhKT0+W3t0b2FzdElkOnouaWQsaGVpZ2h0Om0scG9zaXRpb246ei5wb3NpdGlvbn0sLi4uYV0pLCgpPT5GKChhKT0+YS5maWx0ZXIoKEgxKT0+SDEudG9hc3RJZCE9PXouaWQpKX19LFtGLHouaWRdKSx2LnVzZUxheW91dEVmZmVjdCgoKT0+e2lmKCFvKXJldHVybjtsZXQgVz1hMS5jdXJyZW50LG09Vy5zdHlsZS5oZWlnaHQ7Vy5zdHlsZS5oZWlnaHQ9ImF1dG8iO2xldCBhPVcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1cuc3R5bGUuaGVpZ2h0PW0sZzEoYSksRigoSDEpPT57aWYoIUgxLmZpbmQoKHoxKT0+ejEudG9hc3RJZD09PXouaWQpKXJldHVyblt7dG9hc3RJZDp6LmlkLGhlaWdodDphLHBvc2l0aW9uOnoucG9zaXRpb259LC4uLkgxXTtlbHNlIHJldHVybiBIMS5tYXAoKHoxKT0+ejEudG9hc3RJZD09PXouaWQ/ey4uLnoxLGhlaWdodDphfTp6MSl9KX0sW28sei50aXRsZSx6LmRlc2NyaXB0aW9uLEYsei5pZCx6LmpzeCx6LmFjdGlvbix6LmNhbmNlbF0pO2xldCBmMT12LnVzZUNhbGxiYWNrKCgpPT57bighMCksazEoczEuY3VycmVudCksRigoVyk9PlcuZmlsdGVyKChtKT0+bS50b2FzdElkIT09ei5pZCkpLHNldFRpbWVvdXQoKCk9PntFKHopfSxlUSl9LFt6LEUsRixzMV0pO3YudXNlRWZmZWN0KCgpPT57aWYoei5wcm9taXNlJiZEMT09PSJsb2FkaW5nInx8ei5kdXJhdGlvbj09PTEvMHx8ei50eXBlPT09ImxvYWRpbmciKXJldHVybjtsZXQgVyxtPSgpPT57aWYoZTEuY3VycmVudDxjMS5jdXJyZW50KXtsZXQgSDE9bmV3IERhdGUoKS5nZXRUaW1lKCktYzEuY3VycmVudDtwMS5jdXJyZW50PXAxLmN1cnJlbnQtSDF9ZTEuY3VycmVudD1uZXcgRGF0ZSgpLmdldFRpbWUoKX0sYT0oKT0+e2lmKHAxLmN1cnJlbnQ9PT0xLzApcmV0dXJuO2MxLmN1cnJlbnQ9bmV3IERhdGUoKS5nZXRUaW1lKCksVz1zZXRUaW1lb3V0KCgpPT57ei5vbkF1dG9DbG9zZT09bnVsbHx8ei5vbkF1dG9DbG9zZS5jYWxsKHoseiksZjEoKX0scDEuY3VycmVudCl9O2lmKHl8fEh8fCQwKW0oKTtlbHNlIGEoKTtyZXR1cm4oKT0+Y2xlYXJUaW1lb3V0KFcpfSxbeSxILHosRDEsJDAsZjFdKSx2LnVzZUVmZmVjdCgoKT0+e2lmKHouZGVsZXRlKWYxKCksei5vbkRpc21pc3M9PW51bGx8fHoub25EaXNtaXNzLmNhbGwoeix6KX0sW2YxLHouZGVsZXRlXSk7ZnVuY3Rpb24gQjAoKXt2YXIgVztpZihmPT1udWxsP3ZvaWQgMDpmLmxvYWRpbmcpe3ZhciBtO3JldHVybiB2LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp3MChpPT1udWxsP3ZvaWQgMDppLmxvYWRlcix6PT1udWxsP3ZvaWQgMDoobT16LmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDptLmxvYWRlciwic29ubmVyLWxvYWRlciIpLCJkYXRhLXZpc2libGUiOkQxPT09ImxvYWRpbmcifSxmLmxvYWRpbmcpfXJldHVybiB2LmNyZWF0ZUVsZW1lbnQoalEse2NsYXNzTmFtZTp3MChpPT1udWxsP3ZvaWQgMDppLmxvYWRlcix6PT1udWxsP3ZvaWQgMDooVz16LmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpXLmxvYWRlciksdmlzaWJsZTpEMT09PSJsb2FkaW5nIn0pfWxldCBGMD16Lmljb258fChmPT1udWxsP3ZvaWQgMDpmW0QxXSl8fHhRKEQxKTt2YXIgUTAsQTA7cmV0dXJuIHYuY3JlYXRlRWxlbWVudCgibGkiLHt0YWJJbmRleDowLHJlZjphMSxjbGFzc05hbWU6dzAoSSxDMCxpPT1udWxsP3ZvaWQgMDppLnRvYXN0LHo9PW51bGw/dm9pZCAwOihKPXouY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkoudG9hc3QsaT09bnVsbD92b2lkIDA6aS5kZWZhdWx0LGk9PW51bGw/dm9pZCAwOmlbRDFdLHo9PW51bGw/dm9pZCAwOihRPXouY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOlFbRDFdKSwiZGF0YS1zb25uZXItdG9hc3QiOiIiLCJkYXRhLXJpY2gtY29sb3JzIjooUTA9ei5yaWNoQ29sb3JzKSE9bnVsbD9RMDp3LCJkYXRhLXN0eWxlZCI6IUJvb2xlYW4oei5qc3h8fHoudW5zdHlsZWR8fFUpLCJkYXRhLW1vdW50ZWQiOm8sImRhdGEtcHJvbWlzZSI6Qm9vbGVhbih6LnByb21pc2UpLCJkYXRhLXN3aXBlZCI6QzEsImRhdGEtcmVtb3ZlZCI6ZCwiZGF0YS12aXNpYmxlIjpWMCwiZGF0YS15LXBvc2l0aW9uIjp5MCwiZGF0YS14LXBvc2l0aW9uIjp2MCwiZGF0YS1pbmRleCI6QywiZGF0YS1mcm9udCI6azAsImRhdGEtc3dpcGluZyI6WTEsImRhdGEtZGlzbWlzc2libGUiOnUxLCJkYXRhLXR5cGUiOkQxLCJkYXRhLWludmVydCI6RTEsImRhdGEtc3dpcGUtb3V0IjpqLCJkYXRhLXN3aXBlLWRpcmVjdGlvbiI6RjEsImRhdGEtZXhwYW5kZWQiOkJvb2xlYW4oeXx8SjEmJm8pLCJkYXRhLXRlc3RpZCI6ei50ZXN0SWQsc3R5bGU6eyItLWluZGV4IjpDLCItLXRvYXN0cy1iZWZvcmUiOkMsIi0tei1pbmRleCI6Ty5sZW5ndGgtQywiLS1vZmZzZXQiOmAke2Q/ZTpzMS5jdXJyZW50fXB4YCwiLS1pbml0aWFsLWhlaWdodCI6SjE/ImF1dG8iOmAke1AxfXB4YCwuLi5RMSwuLi56LnN0eWxlfSxvbkRyYWdFbmQ6KCk9PntiKCExKSxCMShudWxsKSx0MS5jdXJyZW50PW51bGx9LG9uUG9pbnRlckRvd246KFcpPT57aWYoVy5idXR0b249PT0yKXJldHVybjtpZihHMHx8IXUxKXJldHVybjtpZihqMS5jdXJyZW50PW5ldyBEYXRlLGsxKHMxLmN1cnJlbnQpLFcudGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKFcucG9pbnRlcklkKSxXLnRhcmdldC50YWdOYW1lPT09IkJVVFRPTiIpcmV0dXJuO2IoITApLHQxLmN1cnJlbnQ9e3g6Vy5jbGllbnRYLHk6Vy5jbGllbnRZfX0sb25Qb2ludGVyVXA6KCk9Pnt2YXIgVyxtLGE7aWYoanx8IXUxKXJldHVybjt0MS5jdXJyZW50PW51bGw7bGV0IEgxPU51bWJlcigoKFc9YTEuY3VycmVudCk9PW51bGw/dm9pZCAwOlcuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgiLS1zd2lwZS1hbW91bnQteCIpLnJlcGxhY2UoInB4IiwiIikpfHwwKSxBMT1OdW1iZXIoKChtPWExLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDptLnN0eWxlLmdldFByb3BlcnR5VmFsdWUoIi0tc3dpcGUtYW1vdW50LXkiKS5yZXBsYWNlKCJweCIsIiIpKXx8MCksejE9bmV3IERhdGUoKS5nZXRUaW1lKCktKChhPWoxLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDphLmdldFRpbWUoKSksTzE9WDE9PT0ieCI/SDE6QTEsWDA9TWF0aC5hYnMoTzEpL3oxO2lmKE1hdGguYWJzKE8xKT49dFF8fFgwPjAuMTEpe2lmKGsxKHMxLmN1cnJlbnQpLHoub25EaXNtaXNzPT1udWxsfHx6Lm9uRGlzbWlzcy5jYWxsKHoseiksWDE9PT0ieCIpVzEoSDE+MD8icmlnaHQiOiJsZWZ0Iik7ZWxzZSBXMShBMT4wPyJkb3duIjoidXAiKTtmMSgpLE4xKCEwKTtyZXR1cm59ZWxzZXt2YXIgaTEsbzE7KGkxPWExLmN1cnJlbnQpPT1udWxsfHxpMS5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1zd2lwZS1hbW91bnQteCIsIjBweCIpLChvMT1hMS5jdXJyZW50KT09bnVsbHx8bzEuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXkiLCIwcHgiKX1wKCExKSxiKCExKSxCMShudWxsKX0sb25Qb2ludGVyTW92ZTooVyk9Pnt2YXIgbSxhLEgxO2lmKCF0MS5jdXJyZW50fHwhdTEpcmV0dXJuO2lmKCgobT13aW5kb3cuZ2V0U2VsZWN0aW9uKCkpPT1udWxsP3ZvaWQgMDptLnRvU3RyaW5nKCkubGVuZ3RoKT4wKXJldHVybjtsZXQgejE9Vy5jbGllbnRZLXQxLmN1cnJlbnQueSxPMT1XLmNsaWVudFgtdDEuY3VycmVudC54O3ZhciBYMDtsZXQgaTE9KFgwPSQuc3dpcGVEaXJlY3Rpb25zKSE9bnVsbD9YMDokWihyKTtpZighWDEmJihNYXRoLmFicyhPMSk+MXx8TWF0aC5hYnMoejEpPjEpKUIxKE1hdGguYWJzKE8xKT5NYXRoLmFicyh6MSk/IngiOiJ5Iik7bGV0IG8xPXt4OjAseTowfSx6MD0oTjApPT57cmV0dXJuIDEvKDEuNStNYXRoLmFicyhOMCkvMjApfTtpZihYMT09PSJ5Iil7aWYoaTEuaW5jbHVkZXMoInRvcCIpfHxpMS5pbmNsdWRlcygiYm90dG9tIikpaWYoaTEuaW5jbHVkZXMoInRvcCIpJiZ6MTwwfHxpMS5pbmNsdWRlcygiYm90dG9tIikmJnoxPjApbzEueT16MTtlbHNle2xldCBOMD16MSp6MCh6MSk7bzEueT1NYXRoLmFicyhOMCk8TWF0aC5hYnMoejEpP04wOnoxfX1lbHNlIGlmKFgxPT09IngiKXtpZihpMS5pbmNsdWRlcygibGVmdCIpfHxpMS5pbmNsdWRlcygicmlnaHQiKSlpZihpMS5pbmNsdWRlcygibGVmdCIpJiZPMTwwfHxpMS5pbmNsdWRlcygicmlnaHQiKSYmTzE+MClvMS54PU8xO2Vsc2V7bGV0IE4wPU8xKnowKE8xKTtvMS54PU1hdGguYWJzKE4wKTxNYXRoLmFicyhPMSk/TjA6TzF9fWlmKE1hdGguYWJzKG8xLngpPjB8fE1hdGguYWJzKG8xLnkpPjApcCghMCk7KGE9YTEuY3VycmVudCk9PW51bGx8fGEuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXgiLGAke28xLnh9cHhgKSwoSDE9YTEuY3VycmVudCk9PW51bGx8fEgxLnN0eWxlLnNldFByb3BlcnR5KCItLXN3aXBlLWFtb3VudC15IixgJHtvMS55fXB4YCl9fSxiMCYmIXouanN4JiZEMSE9PSJsb2FkaW5nIj92LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJhcmlhLWxhYmVsIjpVMSwiZGF0YS1kaXNhYmxlZCI6RzAsImRhdGEtY2xvc2UtYnV0dG9uIjohMCxvbkNsaWNrOkcwfHwhdTE/KCk9Pnt9OigpPT57ZjEoKSx6Lm9uRGlzbWlzcz09bnVsbHx8ei5vbkRpc21pc3MuY2FsbCh6LHopfSxjbGFzc05hbWU6dzAoaT09bnVsbD92b2lkIDA6aS5jbG9zZUJ1dHRvbix6PT1udWxsP3ZvaWQgMDooWj16LmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpaLmNsb3NlQnV0dG9uKX0sKEEwPWY9PW51bGw/dm9pZCAwOmYuY2xvc2UpIT1udWxsP0EwOm1RKTpudWxsLChEMXx8ei5pY29ufHx6LnByb21pc2UpJiZ6Lmljb24hPT1udWxsJiYoKGY9PW51bGw/dm9pZCAwOmZbRDFdKSE9PW51bGx8fHouaWNvbik/di5jcmVhdGVFbGVtZW50KCJkaXYiLHsiZGF0YS1pY29uIjoiIixjbGFzc05hbWU6dzAoaT09bnVsbD92b2lkIDA6aS5pY29uLHo9PW51bGw/dm9pZCAwOihLPXouY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOksuaWNvbil9LHoucHJvbWlzZXx8ei50eXBlPT09ImxvYWRpbmciJiYhei5pY29uP3ouaWNvbnx8QjAoKTpudWxsLHoudHlwZSE9PSJsb2FkaW5nIj9GMDpudWxsKTpudWxsLHYuY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtY29udGVudCI6IiIsY2xhc3NOYW1lOncwKGk9PW51bGw/dm9pZCAwOmkuY29udGVudCx6PT1udWxsP3ZvaWQgMDooWT16LmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpZLmNvbnRlbnQpfSx2LmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLXRpdGxlIjoiIixjbGFzc05hbWU6dzAoaT09bnVsbD92b2lkIDA6aS50aXRsZSx6PT1udWxsP3ZvaWQgMDoocT16LmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpxLnRpdGxlKX0sei5qc3g/ei5qc3g6dHlwZW9mIHoudGl0bGU9PT0iZnVuY3Rpb24iP3oudGl0bGUoKTp6LnRpdGxlKSx6LmRlc2NyaXB0aW9uP3YuY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtZGVzY3JpcHRpb24iOiIiLGNsYXNzTmFtZTp3MCh1LFYxLGk9PW51bGw/dm9pZCAwOmkuZGVzY3JpcHRpb24sej09bnVsbD92b2lkIDA6KFY9ei5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6Vi5kZXNjcmlwdGlvbil9LHR5cGVvZiB6LmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj96LmRlc2NyaXB0aW9uKCk6ei5kZXNjcmlwdGlvbik6bnVsbCksdi5pc1ZhbGlkRWxlbWVudCh6LmNhbmNlbCk/ei5jYW5jZWw6ei5jYW5jZWwmJnEzKHouY2FuY2VsKT92LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJkYXRhLWJ1dHRvbiI6ITAsImRhdGEtY2FuY2VsIjohMCxzdHlsZTp6LmNhbmNlbEJ1dHRvblN0eWxlfHxnLG9uQ2xpY2s6KFcpPT57aWYoIXEzKHouY2FuY2VsKSlyZXR1cm47aWYoIXUxKXJldHVybjt6LmNhbmNlbC5vbkNsaWNrPT1udWxsfHx6LmNhbmNlbC5vbkNsaWNrLmNhbGwoei5jYW5jZWwsVyksZjEoKX0sY2xhc3NOYW1lOncwKGk9PW51bGw/dm9pZCAwOmkuY2FuY2VsQnV0dG9uLHo9PW51bGw/dm9pZCAwOihHPXouY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkcuY2FuY2VsQnV0dG9uKX0sei5jYW5jZWwubGFiZWwpOm51bGwsdi5pc1ZhbGlkRWxlbWVudCh6LmFjdGlvbik/ei5hY3Rpb246ei5hY3Rpb24mJnEzKHouYWN0aW9uKT92LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJkYXRhLWJ1dHRvbiI6ITAsImRhdGEtYWN0aW9uIjohMCxzdHlsZTp6LmFjdGlvbkJ1dHRvblN0eWxlfHxoLG9uQ2xpY2s6KFcpPT57aWYoIXEzKHouYWN0aW9uKSlyZXR1cm47aWYoei5hY3Rpb24ub25DbGljaz09bnVsbHx8ei5hY3Rpb24ub25DbGljay5jYWxsKHouYWN0aW9uLFcpLFcuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47ZjEoKX0sY2xhc3NOYW1lOncwKGk9PW51bGw/dm9pZCAwOmkuYWN0aW9uQnV0dG9uLHo9PW51bGw/dm9pZCAwOihCPXouY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkIuYWN0aW9uQnV0dG9uKX0sei5hY3Rpb24ubGFiZWwpOm51bGwpfTtmdW5jdGlvbiBXNygpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiJsdHIiO2lmKHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuImx0ciI7bGV0ICQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7aWYoJD09PSJhdXRvInx8ISQpcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZGlyZWN0aW9uO3JldHVybiAkfWZ1bmN0aW9uIFFaKCQsSil7bGV0IFE9e307cmV0dXJuWyQsSl0uZm9yRWFjaCgoWixLKT0+e2xldCBZPUs9PT0xLHE9WT8iLS1tb2JpbGUtb2Zmc2V0IjoiLS1vZmZzZXQiLFY9WT9uUTpyUTtmdW5jdGlvbiBHKEIpe1sidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoTik9PntRW2Ake3F9LSR7Tn1gXT10eXBlb2YgQj09PSJudW1iZXIiP2Ake0J9cHhgOkJ9KX1pZih0eXBlb2YgWj09PSJudW1iZXIifHx0eXBlb2YgWj09PSJzdHJpbmciKUcoWik7ZWxzZSBpZih0eXBlb2YgWj09PSJvYmplY3QiKVsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoQik9PntpZihaW0JdPT09dm9pZCAwKVFbYCR7cX0tJHtCfWBdPVY7ZWxzZSBRW2Ake3F9LSR7Qn1gXT10eXBlb2YgWltCXT09PSJudW1iZXIiP2Ake1pbQl19cHhgOlpbQl19KTtlbHNlIEcoVil9KSxRfXZhciBfNz12LmZvcndhcmRSZWYoZnVuY3Rpb24oSixRKXtsZXR7aWQ6WixpbnZlcnQ6Syxwb3NpdGlvbjpZPSJib3R0b20tcmlnaHQiLGhvdGtleTpxPVsiYWx0S2V5IiwiS2V5VCJdLGV4cGFuZDpWLGNsb3NlQnV0dG9uOkcsY2xhc3NOYW1lOkIsb2Zmc2V0Ok4sbW9iaWxlT2Zmc2V0OnosdGhlbWU6VT0ibGlnaHQiLHJpY2hDb2xvcnM6SCxkdXJhdGlvbjpGLHN0eWxlOkwsdmlzaWJsZVRvYXN0czprPW9RLHRvYXN0T3B0aW9uczpDLGRpcjpPPVc3KCksZ2FwOnk9c1EsaWNvbnM6RSxjb250YWluZXJBcmlhTGFiZWw6dz0iTm90aWZpY2F0aW9ucyJ9PUosW1MsUTFdPXYudXNlU3RhdGUoW10pLGc9di51c2VNZW1vKCgpPT57aWYoWilyZXR1cm4gUy5maWx0ZXIoKG8pPT5vLnRvYXN0ZXJJZD09PVopO3JldHVybiBTLmZpbHRlcigobyk9PiFvLnRvYXN0ZXJJZCl9LFtTLFpdKSxoPXYudXNlTWVtbygoKT0+e3JldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoW1ldLmNvbmNhdChnLmZpbHRlcigobyk9Pm8ucG9zaXRpb24pLm1hcCgobyk9Pm8ucG9zaXRpb24pKSkpfSxbZyxZXSksW0ksdV09di51c2VTdGF0ZShbXSksW1oxLHJdPXYudXNlU3RhdGUoITEpLFtNMSxKMV09di51c2VTdGF0ZSghMSksW2ksZl09di51c2VTdGF0ZShVIT09InN5c3RlbSI/VTp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzPyJkYXJrIjoibGlnaHQiOiJsaWdodCIpLFUxPXYudXNlUmVmKG51bGwpLFgxPXEuam9pbigiKyIpLnJlcGxhY2UoL0tleS9nLCIiKS5yZXBsYWNlKC9EaWdpdC9nLCIiKSxCMT12LnVzZVJlZihudWxsKSxGMT12LnVzZVJlZighMSksVzE9di51c2VDYWxsYmFjaygobyk9PntRMSgoYyk9Pnt2YXIgZDtpZighKChkPWMuZmluZCgobik9Pm4uaWQ9PT1vLmlkKSk9PW51bGw/dm9pZCAwOmQuZGVsZXRlKSlZMC5kaXNtaXNzKG8uaWQpO3JldHVybiBjLmZpbHRlcigoe2lkOm59KT0+biE9PW8uaWQpfSl9LFtdKTtyZXR1cm4gdi51c2VFZmZlY3QoKCk9PntyZXR1cm4gWTAuc3Vic2NyaWJlKChvKT0+e2lmKG8uZGlzbWlzcyl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57UTEoKGMpPT5jLm1hcCgoZCk9PmQuaWQ9PT1vLmlkP3suLi5kLGRlbGV0ZTohMH06ZCkpfSk7cmV0dXJufXNldFRpbWVvdXQoKCk9Pnt2LmZsdXNoU3luYygoKT0+e1ExKChjKT0+e2xldCBkPWMuZmluZEluZGV4KChuKT0+bi5pZD09PW8uaWQpO2lmKGQhPT0tMSlyZXR1cm5bLi4uYy5zbGljZSgwLGQpLHsuLi5jW2RdLC4uLm99LC4uLmMuc2xpY2UoZCsxKV07cmV0dXJuW28sLi4uY119KX0pfSl9KX0sW1NdKSx2LnVzZUVmZmVjdCgoKT0+e2lmKFUhPT0ic3lzdGVtIil7ZihVKTtyZXR1cm59aWYoVT09PSJzeXN0ZW0iKWlmKHdpbmRvdy5tYXRjaE1lZGlhJiZ3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpLm1hdGNoZXMpZigiZGFyayIpO2Vsc2UgZigibGlnaHQiKTtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm47bGV0IG89d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKTt0cnl7by5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCh7bWF0Y2hlczpjfSk9PntpZihjKWYoImRhcmsiKTtlbHNlIGYoImxpZ2h0Iil9KX1jYXRjaChjKXtvLmFkZExpc3RlbmVyKCh7bWF0Y2hlczpkfSk9Pnt0cnl7aWYoZClmKCJkYXJrIik7ZWxzZSBmKCJsaWdodCIpfWNhdGNoKG4pe2NvbnNvbGUuZXJyb3Iobil9fSl9fSxbVV0pLHYudXNlRWZmZWN0KCgpPT57aWYoUy5sZW5ndGg8PTEpcighMSl9LFtTXSksdi51c2VFZmZlY3QoKCk9PntsZXQgbz0oYyk9Pnt2YXIgZDtpZihxLmV2ZXJ5KChiKT0+Y1tiXXx8Yy5jb2RlPT09Yikpe3ZhciBZMTtyKCEwKSwoWTE9VTEuY3VycmVudCk9PW51bGx8fFkxLmZvY3VzKCl9aWYoYy5jb2RlPT09IkVzY2FwZSImJihkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09VTEuY3VycmVudHx8KChkPVUxLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpkLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSkpcighMSl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixvKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsbyl9LFtxXSksdi51c2VFZmZlY3QoKCk9PntpZihVMS5jdXJyZW50KXJldHVybigpPT57aWYoQjEuY3VycmVudClCMS5jdXJyZW50LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksQjEuY3VycmVudD1udWxsLEYxLmN1cnJlbnQ9ITF9fSxbVTEuY3VycmVudF0pLHYuY3JlYXRlRWxlbWVudCgic2VjdGlvbiIse3JlZjpRLCJhcmlhLWxhYmVsIjpgJHt3fSAke1gxfWAsdGFiSW5kZXg6LTEsImFyaWEtbGl2ZSI6InBvbGl0ZSIsImFyaWEtcmVsZXZhbnQiOiJhZGRpdGlvbnMgdGV4dCIsImFyaWEtYXRvbWljIjoiZmFsc2UiLHN1cHByZXNzSHlkcmF0aW9uV2FybmluZzohMH0saC5tYXAoKG8sYyk9Pnt2YXIgZDtsZXRbbixZMV09by5zcGxpdCgiLSIpO2lmKCFnLmxlbmd0aClyZXR1cm4gbnVsbDtyZXR1cm4gdi5jcmVhdGVFbGVtZW50KCJvbCIse2tleTpvLGRpcjpPPT09ImF1dG8iP1c3KCk6Tyx0YWJJbmRleDotMSxyZWY6VTEsY2xhc3NOYW1lOkIsImRhdGEtc29ubmVyLXRvYXN0ZXIiOiEwLCJkYXRhLXNvbm5lci10aGVtZSI6aSwiZGF0YS15LXBvc2l0aW9uIjpuLCJkYXRhLXgtcG9zaXRpb24iOlkxLHN0eWxlOnsiLS1mcm9udC10b2FzdC1oZWlnaHQiOmAkeygoZD1JWzBdKT09bnVsbD92b2lkIDA6ZC5oZWlnaHQpfHwwfXB4YCwiLS13aWR0aCI6YCR7YVF9cHhgLCItLWdhcCI6YCR7eX1weGAsLi4uTCwuLi5RWihOLHopfSxvbkJsdXI6KGIpPT57aWYoRjEuY3VycmVudCYmIWIuY3VycmVudFRhcmdldC5jb250YWlucyhiLnJlbGF0ZWRUYXJnZXQpKXtpZihGMS5jdXJyZW50PSExLEIxLmN1cnJlbnQpQjEuY3VycmVudC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLEIxLmN1cnJlbnQ9bnVsbH19LG9uRm9jdXM6KGIpPT57aWYoYi50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmYi50YXJnZXQuZGF0YXNldC5kaXNtaXNzaWJsZT09PSJmYWxzZSIpcmV0dXJuO2lmKCFGMS5jdXJyZW50KUYxLmN1cnJlbnQ9ITAsQjEuY3VycmVudD1iLnJlbGF0ZWRUYXJnZXR9LG9uTW91c2VFbnRlcjooKT0+cighMCksb25Nb3VzZU1vdmU6KCk9PnIoITApLG9uTW91c2VMZWF2ZTooKT0+e2lmKCFNMSlyKCExKX0sb25EcmFnRW5kOigpPT5yKCExKSxvblBvaW50ZXJEb3duOihiKT0+e2lmKGIudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmIudGFyZ2V0LmRhdGFzZXQuZGlzbWlzc2libGU9PT0iZmFsc2UiKXJldHVybjtKMSghMCl9LG9uUG9pbnRlclVwOigpPT5KMSghMSl9LGcuZmlsdGVyKChiKT0+IWIucG9zaXRpb24mJmM9PT0wfHxiLnBvc2l0aW9uPT09bykubWFwKChiLGopPT57dmFyIE4xLEMxO3JldHVybiB2LmNyZWF0ZUVsZW1lbnQoSlose2tleTpiLmlkLGljb25zOkUsaW5kZXg6aix0b2FzdDpiLGRlZmF1bHRSaWNoQ29sb3JzOkgsZHVyYXRpb246KE4xPUM9PW51bGw/dm9pZCAwOkMuZHVyYXRpb24pIT1udWxsP04xOkYsY2xhc3NOYW1lOkM9PW51bGw/dm9pZCAwOkMuY2xhc3NOYW1lLGRlc2NyaXB0aW9uQ2xhc3NOYW1lOkM9PW51bGw/dm9pZCAwOkMuZGVzY3JpcHRpb25DbGFzc05hbWUsaW52ZXJ0OkssdmlzaWJsZVRvYXN0czprLGNsb3NlQnV0dG9uOihDMT1DPT1udWxsP3ZvaWQgMDpDLmNsb3NlQnV0dG9uKSE9bnVsbD9DMTpHLGludGVyYWN0aW5nOk0xLHBvc2l0aW9uOm8sc3R5bGU6Qz09bnVsbD92b2lkIDA6Qy5zdHlsZSx1bnN0eWxlZDpDPT1udWxsP3ZvaWQgMDpDLnVuc3R5bGVkLGNsYXNzTmFtZXM6Qz09bnVsbD92b2lkIDA6Qy5jbGFzc05hbWVzLGNhbmNlbEJ1dHRvblN0eWxlOkM9PW51bGw/dm9pZCAwOkMuY2FuY2VsQnV0dG9uU3R5bGUsYWN0aW9uQnV0dG9uU3R5bGU6Qz09bnVsbD92b2lkIDA6Qy5hY3Rpb25CdXR0b25TdHlsZSxjbG9zZUJ1dHRvbkFyaWFMYWJlbDpDPT1udWxsP3ZvaWQgMDpDLmNsb3NlQnV0dG9uQXJpYUxhYmVsLHJlbW92ZVRvYXN0OlcxLHRvYXN0czpnLmZpbHRlcigocCk9PnAucG9zaXRpb249PWIucG9zaXRpb24pLGhlaWdodHM6SS5maWx0ZXIoKHApPT5wLnBvc2l0aW9uPT1iLnBvc2l0aW9uKSxzZXRIZWlnaHRzOnUsZXhwYW5kQnlEZWZhdWx0OlYsZ2FwOnksZXhwYW5kZWQ6WjEsc3dpcGVEaXJlY3Rpb25zOkouc3dpcGVEaXJlY3Rpb25zfSl9KSl9KSl9KTt2YXIgWlo9e3pJbmRleDoyMTQ3NDgzNjQ3LCItLW5vcm1hbC1iZyI6InZhcigtLXNlcnZlLXNpbS1wYW5lbCkiLCItLW5vcm1hbC1ib3JkZXIiOlQxKDAuMTIpLCItLW5vcm1hbC10ZXh0IjpkMSgwLjkpLCItLWJvcmRlci1yYWRpdXMiOiI4cHgiLCItLXdpZHRoIjoiMzIwcHgifTtmdW5jdGlvbiBWMyh7Y29sb3I6JH0pe3JldHVybiBYKCJzcGFuIix7ImRhdGEtdGVzdGlkIjoicGxhaW4tdG9hc3QtZG90IixzdHlsZTp7ZGlzcGxheToiYmxvY2siLHdpZHRoOjYsaGVpZ2h0OjYsYm9yZGVyUmFkaXVzOjk5OSxiYWNrZ3JvdW5kOiR9fSl9ZnVuY3Rpb24gRDcoKXtsZXR7cmVzb2x2ZWQ6JH09UDUoKTtyZXR1cm4gWChfNyx7dGhlbWU6JCxwb3NpdGlvbjoiYm90dG9tLWNlbnRlciIsdmlzaWJsZVRvYXN0czo0LGdhcDo4LG9mZnNldDp7Ym90dG9tOjI0fSxjbGFzc05hbWU6InNlcnZlLXNpbS10b2FzdGVyIixpY29uczp7ZXJyb3I6WChWMyx7Y29sb3I6InZhcigtLXNlcnZlLXNpbS1kYW5nZXIpIn0pLHN1Y2Nlc3M6WChWMyx7Y29sb3I6InZhcigtLXNlcnZlLXNpbS1zdWNjZXNzKSJ9KSx3YXJuaW5nOlgoVjMse2NvbG9yOiJ2YXIoLS1zZXJ2ZS1zaW0td2FybmluZykifSksaW5mbzpYKFYzLHtjb2xvcjoidmFyKC0tc2VydmUtc2ltLWFjY2VudCkifSl9LHN0eWxlOlpaLGNvbnRhaW5lckFyaWFMYWJlbDoic2VydmUtc2ltIG5vdGlmaWNhdGlvbnMifSl9ZnVuY3Rpb24gVDcoe3RvYXN0OiR9KXtsZXQgSj0kLnN0YXR1cz09PSJlcnJvciIsUT0kLnN0YXR1cz09PSJ1cGxvYWRpbmciLFo9USYmJC5wcm9ncmVzcyE9PW51bGwsSz0kLnByb2dyZXNzIT1udWxsP01hdGgucm91bmQoJC5wcm9ncmVzcyoxMDApOjA7cmV0dXJuIFgoImRpdiIseyJkYXRhLXRlc3RpZCI6InVwbG9hZC10b2FzdCIsY2xhc3NOYW1lOmBmbGV4IHctW21pbigzMjBweCxjYWxjKDEwMHZ3LTMycHgpKV0gZmxleC1jb2wgZ2FwLTEuNSBweC0zIHB5LTIgYmctcGFuZWwgYm9yZGVyIGJvcmRlci1pbmsvMTIgcm91bmRlZC1sZyB0ZXh0LWluay05MCB0ZXh0LVsxMnB4XSBmb250LW1vbm8gc2hhZG93LXBvcG92ZXIgJHtKPyJzZWxlY3QtdGV4dCBjdXJzb3ItdGV4dCI6InNlbGVjdC1ub25lIGN1cnNvci1kZWZhdWx0In1gLGNoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIG1pbi13LTAiLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjNzXSIsc3R5bGU6e2JhY2tncm91bmQ6UT8idmFyKC0tc2VydmUtc2ltLWFjY2VudCkiOiQuc3RhdHVzPT09InN1Y2Nlc3MiPyJ2YXIoLS1zZXJ2ZS1zaW0tc3VjY2VzcykiOiJ2YXIoLS1zZXJ2ZS1zaW0tZGFuZ2VyKSJ9fSksWCgic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpbUSYmWiYmYFVwbG9hZGluZyAkeyQubmFtZX3igKYgJHtLfSVgLFEmJiFaJiYoJC5raW5kPT09ImlwYSI/YEluc3RhbGxpbmcgJHskLm5hbWV94oCmYDpgQWRkaW5nICR7JC5uYW1lfeKApmApLCQuc3RhdHVzPT09InN1Y2Nlc3MiJiYoJC5raW5kPT09ImlwYSI/YEluc3RhbGxlZCAkeyQubmFtZX1gOmBBZGRlZCAkeyQubmFtZX0gdG8gUGhvdG9zYCksSiYmYCR7JC5uYW1lfTogJHskLm1lc3NhZ2U/PyJVcGxvYWQgZmFpbGVkIn1gXX0pXX0pLFEmJlgoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgaC1bM3B4XSB3LWZ1bGwgYmctaW5rLzggcm91bmRlZC1bMnB4XSBvdmVyZmxvdy1oaWRkZW4iLGNoaWxkcmVuOlo/WCgiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgYmctYWNjZW50IHJvdW5kZWQtWzJweF0gW3RyYW5zaXRpb246d2lkdGhfMTIwbXNfbGluZWFyXSIsc3R5bGU6e3dpZHRoOmAke0t9JWB9fSk6WCgiZGl2Iix7Y2xhc3NOYW1lOiJzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZSBhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgaC1mdWxsIHctWzQwJV0gYmctYWNjZW50IHJvdW5kZWQtWzJweF0ifSl9KV19KX1mdW5jdGlvbiBJNyh7d2lkdGg6JCxoZWlnaHQ6Six2aXNpYmxlOlF9KXtyZXR1cm4gWCgiZGl2Iix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC0zIGJvdHRvbS0zIHotMjAgcG9pbnRlci1ldmVudHMtbm9uZSBzZWxlY3Qtbm9uZSByb3VuZGVkLWxnIHB4LTIuNSBweS0xIHRleHQtWzExLjVweF0gZm9udC1tb25vIGxlYWRpbmctbm9uZSB0cmFja2luZy13aWRlIHRleHQtaW5rLTk1IGJnLXBhbmVsLWJnLXRyYW5zbHVjZW50IHNoYWRvdy1bMF8xcHhfMnB4X3JnYmEoMCwwLDAsMC4xOCksMF82cHhfMThweF9yZ2JhKDAsMCwwLDAuMjgpLGluc2V0XzBfMF8wXzFweF9jb2xvci1taXgoaW5fc3JnYix2YXIoLS1zZXJ2ZS1zaW0taW5rKV82JSx0cmFuc3BhcmVudCldIGJhY2tkcm9wLWJsdXItbWQgYmFja2Ryb3Atc2F0dXJhdGUtMTUwIHdoaXRlc3BhY2Utbm93cmFwIixzdHlsZTp7b3BhY2l0eTpRPzE6MCx0cmFuc2Zvcm06YHRyYW5zbGF0ZVkoJHtRPzA6NH1weCkgc2NhbGUoJHtRPzE6MC45Nn0pYCx0cmFuc2Zvcm1PcmlnaW46IjEwMCUgMTAwJSIsdHJhbnNpdGlvbjoib3BhY2l0eSAxODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLCB0cmFuc2Zvcm0gMjIwbXMgY3ViaWMtYmV6aWVyKDAuMiwgMC44MiwgMC4yMiwgMSkifSxjaGlsZHJlbjpbTWF0aC5yb3VuZCgkKSwiICIsWCgic3BhbiIse2NsYXNzTmFtZToib3BhY2l0eS02MCBteC0wLjUiLGNoaWxkcmVuOiLDlyJ9KSwiICIsTWF0aC5yb3VuZChKKV19KX1mdW5jdGlvbiBYWigkKXtpZigkLnN0YWdlKXJldHVybmBlcnJvciDCtyAkeyQuc3RhZ2V9YDtpZigkLnN0YXR1cylyZXR1cm5gZXJyb3IgwrcgJHskLnN0YXR1c31gO3JldHVybiJlcnJvciDCtyBubyByZXNwb25zZSJ9ZnVuY3Rpb24gRTcoe3N0cmVhbWluZzokLGVycm9yOkp9KXtsZXQgUT0hJCYmSiE9bnVsbCxaPSQ/InZhcigtLXNlcnZlLXNpbS1zdWNjZXNzKSI6UT8idmFyKC0tc2VydmUtc2ltLWRhbmdlcikiOiJ2YXIoLS1zZXJ2ZS1zaW0taWNvbikiLEs9JD8ibGl2ZSI6UT9YWihKKToiY29ubmVjdGluZyI7cmV0dXJuIFgoInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJzdHJlYW0tc3RhdHVzLXBpbGwiLGNsYXNzTmFtZToiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC1bNXB4XSB0ZXh0LVsxMnB4XSBmb250LW1vbm8gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHdoaXRlc3BhY2Utbm93cmFwIixzdHlsZTp7Y29sb3I6Wn0sdGl0bGU6UT9KLnJlYXNvbjp2b2lkIDAsImFyaWEtbGl2ZSI6InBvbGl0ZSIsY2hpbGRyZW46W1goInNwYW4iLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMThzX2Vhc2VdIixzdHlsZTp7YmFja2dyb3VuZDpafX0pLEtdfSl9ZnVuY3Rpb24gS1ooJCxKLFEpe2xldCBaPVEubGF0Kk1hdGguUEkvMTgwLEs9KCQtUS5sYXQpKk1hdGguUEkvMTgwO3JldHVybnt4OihKLVEubG5nKSpNYXRoLlBJLzE4MCpNYXRoLmNvcyhaKSo2MzcxMDAwLHo6LUsqNjM3MTAwMH19ZnVuY3Rpb24gWVooJCxKLFEpe2xldCBaPVEubGF0Kk1hdGguUEkvMTgwLEs9LUovNjM3MTAwMCooMTgwL01hdGguUEkpLFk9JC8oNjM3MTAwMCpNYXRoLmNvcyhaKSkqKDE4MC9NYXRoLlBJKTtyZXR1cm57bGF0OlEubGF0K0ssbG5nOlEubG5nK1l9fWZ1bmN0aW9uIHFaKCQsSixRLFosSyl7bGV0IFk9SypLLHE9WSpLLFY9KEcsQixOLHopPT4wLjUqKDIqQisoLUcrTikqSysoMipHLTUqQis0Kk4teikqWSsoLUcrMypCLTMqTit6KSpxKTtyZXR1cm57eDpWKCQueCxKLngsUS54LFoueCksejpWKCQueixKLnosUS56LFoueikseTpWKCQueSxKLnksUS55LFoueSkscmF3QWx0OlYoJC5yYXdBbHQsSi5yYXdBbHQsUS5yYXdBbHQsWi5yYXdBbHQpfX1mdW5jdGlvbiBWWigkLEosUSl7aWYoJC5sZW5ndGg8MilyZXR1cm4gJC5zbGljZSgpO2xldCBaPVtdLEs9JC5sZW5ndGgsWT1RP0s6Sy0xO2ZvcihsZXQgcT0wO3E8WTtxKyspe2xldCBWPSRbUT8ocS0xK0spJUs6TWF0aC5tYXgoMCxxLTEpXSxHPSRbcSVLXSxCPSRbKHErMSklS10sTj0kW1E/KHErMiklSzpNYXRoLm1pbihLLTEscSsyKV0sej1CLngtRy54LFU9Qi56LUcueixIPU1hdGguaHlwb3QoeixVKSxGPU1hdGgubWF4KDIsTWF0aC5jZWlsKEgvSikpO2ZvcihsZXQgTD0wO0w8RjtMKyspe2xldCBrPUwvRjtaLnB1c2gocVooVixHLEIsTixrKSl9fWlmKCFRKVoucHVzaCgkW0stMV0pO3JldHVybiBafWZ1bmN0aW9uIHc3KCQpe2lmKCQud2F5cG9pbnRzLmxlbmd0aDwyKXRocm93IEVycm9yKGBUcmFpbCAkeyQuaWR9IG5lZWRzIGF0IGxlYXN0IDIgd2F5cG9pbnRzYCk7bGV0IEo9e2xhdDokLndheXBvaW50cy5yZWR1Y2UoKEwsayk9Pkwray5sYXQsMCkvJC53YXlwb2ludHMubGVuZ3RoLGxuZzokLndheXBvaW50cy5yZWR1Y2UoKEwsayk9Pkwray5sbmcsMCkvJC53YXlwb2ludHMubGVuZ3RofSxRPSQud2F5cG9pbnRzLm1hcCgoTCk9PkwuYWx0Pz8wKSxaPU1hdGgubWluKC4uLlEpLEs9TWF0aC5tYXgoLi4uUSksWT0kLndheXBvaW50cy5tYXAoKEwpPT57bGV0e3g6ayx6OkN9PUtaKEwubGF0LEwubG5nLEopLE89TC5hbHQ/PzA7cmV0dXJue3g6ayx6OkMseTpPLVoscmF3QWx0Ok99fSkscT1WWihZLDgsISEkLmxvb3ApLFY9W10sRz0wO2ZvcihsZXQgTD0wO0w8cS5sZW5ndGg7TCsrKXtsZXQgaz1xW0xdO2lmKEw+MCl7bGV0IEU9cVtMLTFdO0crPU1hdGguaHlwb3Qoay54LUUueCxrLnotRS56LGsueS1FLnkpfWxldHtsYXQ6Qyxsbmc6T309WVooay54LGsueixKKSx5PU1hdGgubWF4KDAsay55KTtWLnB1c2goe3g6ay54LHo6ay56LHksYXJjOkcsbGF0OkMsbG5nOk99KX1sZXQgQj0xLzAsTj0tMS8wLHo9MS8wLFU9LTEvMCxIPTEvMCxGPS0xLzA7Zm9yKGxldCBMIG9mIFYpe2lmKEwueDxCKUI9TC54O2lmKEwueD5OKU49TC54O2lmKEwuejx6KXo9TC56O2lmKEwuej5VKVU9TC56O2lmKEwueTxIKUg9TC55O2lmKEwueT5GKUY9TC55fXJldHVybnt0cmFpbDokLG9yaWdpbjpKLHBvaW50czpWLHRvdGFsRGlzdGFuY2U6VltWLmxlbmd0aC0xXS5hcmMsYm91bmRzOnt4OltCLE5dLHk6W0gsRl0sejpbeixVXX0scmF3TWluQWx0OloscmF3TWF4QWx0Okt9fWZ1bmN0aW9uIFo1KCQsSil7bGV0IFE9JC50b3RhbERpc3RhbmNlO2lmKFE9PT0wKXJldHVybiAkLnBvaW50c1swXTtsZXQgWj1KO2lmKCQudHJhaWwubG9vcClaPShaJVErUSklUTtlbHNle2lmKFo8PTApcmV0dXJuICQucG9pbnRzWzBdO2lmKFo+PVEpcmV0dXJuICQucG9pbnRzWyQucG9pbnRzLmxlbmd0aC0xXX1sZXQgSz0wLFk9JC5wb2ludHMubGVuZ3RoLTE7d2hpbGUoSysxPFkpe2xldCBOPUsrWT4+PjE7aWYoJC5wb2ludHNbTl0uYXJjPD1aKUs9TjtlbHNlIFk9Tn1sZXQgcT0kLnBvaW50c1tLXSxWPSQucG9pbnRzW1ldLEc9Vi5hcmMtcS5hcmMsQj1HPT09MD8wOihaLXEuYXJjKS9HO3JldHVybnt4OnEueCsoVi54LXEueCkqQix6OnEueisoVi56LXEueikqQix5OnEueSsoVi55LXEueSkqQixhcmM6WixsYXQ6cS5sYXQrKFYubGF0LXEubGF0KSpCLGxuZzpxLmxuZysoVi5sbmctcS5sbmcpKkJ9fWZ1bmN0aW9uIEc4KCQpe3N3aXRjaCgkKXtjYXNlIndhbGsiOnJldHVybiAxLjQ7Y2FzZSJydW4iOnJldHVybiAzO2Nhc2UiY3ljbGUiOnJldHVybiA1LjU7Y2FzZSJkcml2ZSI6cmV0dXJuIDEzLjR9fXZhciBHWj1be2xhdDozNy4zMzI3Mixsbmc6LTEyMi4wMDgzMyxhbHQ6NDl9LHtsYXQ6MzcuMzMzMDksbG5nOi0xMjIuMDA3MzUsYWx0OjQ4fSx7bGF0OjM3LjMzMzczLGxuZzotMTIyLjAwNjYzLGFsdDo0OX0se2xhdDozNy4zMzQ1NCxsbmc6LTEyMi4wMDYyNyxhbHQ6NDl9LHtsYXQ6MzcuMzM1NCxsbmc6LTEyMi4wMDYzMyxhbHQ6NDl9LHtsYXQ6MzcuMzM2MTgsbG5nOi0xMjIuMDA2NzksYWx0OjQ1fSx7bGF0OjM3LjMzNjc1LGxuZzotMTIyLjAwNzU5LGFsdDo0NX0se2xhdDozNy4zMzcwNCxsbmc6LTEyMi4wMDg2MSxhbHQ6NDZ9LHtsYXQ6MzcuMzM2OTgsbG5nOi0xMjIuMDA5NjksYWx0OjQ4fSx7bGF0OjM3LjMzNjYyLGxuZzotMTIyLjAxMDY2LGFsdDo0OH0se2xhdDozNy4zMzU5OCxsbmc6LTEyMi4wMTEzOCxhbHQ6NDl9LHtsYXQ6MzcuMzM1MTcsbG5nOi0xMjIuMDExNzQsYWx0OjUwfSx7bGF0OjM3LjMzNDMxLGxuZzotMTIyLjAxMTY5LGFsdDo1MH0se2xhdDozNy4zMzM1NCxsbmc6LTEyMi4wMTEyMixhbHQ6NTB9LHtsYXQ6MzcuMzMyOTYsbG5nOi0xMjIuMDEwNDIsYWx0OjUxfSx7bGF0OjM3LjMzMjY4LGxuZzotMTIyLjAwOTQsYWx0OjUwfV0sQlo9W3tsYXQ6MzcuODMyMTIsbG5nOi0xMjIuNDgwNjUsYWx0OjMwfSx7bGF0OjM3LjgyOTM3LGxuZzotMTIyLjQ3OTc0LGFsdDozMH0se2xhdDozNy44MjY0OSxsbmc6LTEyMi40Nzk0LGFsdDozMH0se2xhdDozNy44MjM2Mixsbmc6LTEyMi40NzkwNyxhbHQ6NDV9LHtsYXQ6MzcuODIwNzQsbG5nOi0xMjIuNDc4NzMsYWx0OjU5fSx7bGF0OjM3LjgxNzg2LGxuZzotMTIyLjQ3ODM5LGFsdDo2Nn0se2xhdDozNy44MTQ5OCxsbmc6LTEyMi40NzgwNixhbHQ6NjZ9LHtsYXQ6MzcuODEyMTEsbG5nOi0xMjIuNDc3NzIsYWx0OjU4fSx7bGF0OjM3LjgwOTIzLGxuZzotMTIyLjQ3NzM0LGFsdDo0NH0se2xhdDozNy44MDk0OSxsbmc6LTEyMi40NzczLGFsdDo0NX0se2xhdDozNy44MTIzNixsbmc6LTEyMi40Nzc2NSxhbHQ6NTl9LHtsYXQ6MzcuODE1MjQsbG5nOi0xMjIuNDc3OTgsYWx0OjY2fSx7bGF0OjM3LjgxODEyLGxuZzotMTIyLjQ3ODMyLGFsdDo2Nn0se2xhdDozNy44MjEsbG5nOi0xMjIuNDc4NjYsYWx0OjU4fSx7bGF0OjM3LjgyMzg3LGxuZzotMTIyLjQ3OSxhbHQ6NDR9LHtsYXQ6MzcuODI2NzUsbG5nOi0xMjIuNDc5MzMsYWx0OjMwfSx7bGF0OjM3LjgyOTYzLGxuZzotMTIyLjQ3OTY3LGFsdDozMH0se2xhdDozNy44MzIzMyxsbmc6LTEyMi40ODA3MixhbHQ6MzB9XSx6Wj1be2xhdDozNy44ODY2NCxsbmc6LTEyMi42MjU5OSxhbHQ6MTIxfSx7bGF0OjM3Ljg4ODg3LGxuZzotMTIyLjYyMzMyLGFsdDoxMzV9LHtsYXQ6MzcuODkxMTUsbG5nOi0xMjIuNjIxNixhbHQ6MTY0fSx7bGF0OjM3Ljg5MzUzLGxuZzotMTIyLjYxOTIxLGFsdDoxODB9LHtsYXQ6MzcuODk0NjYsbG5nOi0xMjIuNjE1NzcsYWx0OjIyMH0se2xhdDozNy44OTYzMSxsbmc6LTEyMi42MTI2OCxhbHQ6MjczfSx7bGF0OjM3Ljg5OTE3LGxuZzotMTIyLjYxMDk4LGFsdDozMTN9LHtsYXQ6MzcuOTAxNjYsbG5nOi0xMjIuNjA4NTUsYWx0OjM0Mn0se2xhdDozNy45MDE5OSxsbmc6LTEyMi42MDYwMSxhbHQ6NDA4fSx7bGF0OjM3LjkwMzM5LGxuZzotMTIyLjYwNDAxLGFsdDo0NTB9LHtsYXQ6MzcuOTA2NjIsbG5nOi0xMjIuNjAyOTEsYWx0OjQ0MH0se2xhdDozNy45MDk3MSxsbmc6LTEyMi42MDE3MyxhbHQ6NDMyfSx7bGF0OjM3LjkxMjEzLGxuZzotMTIyLjYwMDA3LGFsdDo0MzZ9LHtsYXQ6MzcuOTE0MzksbG5nOi0xMjIuNTk3OCxhbHQ6NDEwfSx7bGF0OjM3LjkxMjg1LGxuZzotMTIyLjU5NTA0LGFsdDo0MjJ9LHtsYXQ6MzcuOTEyNzQsbG5nOi0xMjIuNTkyMDIsYWx0OjQyNX0se2xhdDozNy45MTUsbG5nOi0xMjIuNTkwMzIsYWx0OjQxMn0se2xhdDozNy45MTYzNyxsbmc6LTEyMi41ODkwMyxhbHQ6NDA2fSx7bGF0OjM3LjkxNDgxLGxuZzotMTIyLjU4NTk1LGFsdDozODJ9LHtsYXQ6MzcuOTE3NCxsbmc6LTEyMi41ODM5OCxhbHQ6MzcyfSx7bGF0OjM3LjkxNjQyLGxuZzotMTIyLjU4MjM2LGFsdDozNTJ9LHtsYXQ6MzcuOTE0ODEsbG5nOi0xMjIuNTgwMTEsYWx0OjM0Mn1dLE5aPVt7bGF0OjQwLjc4MjE2LGxuZzotNzMuOTYyNTQsYWx0OjM3fSx7bGF0OjQwLjc4MjIxLGxuZzotNzMuOTYwOTgsYWx0OjM2fSx7bGF0OjQwLjc4MzI4LGxuZzotNzMuOTYwMSxhbHQ6MzZ9LHtsYXQ6NDAuNzg0NCxsbmc6LTczLjk1OTMsYWx0OjM2fSx7bGF0OjQwLjc4NTUsbG5nOi03My45NTg0OCxhbHQ6MzZ9LHtsYXQ6NDAuNzg2NjQsbG5nOi03My45NTc3NCxhbHQ6MzZ9LHtsYXQ6NDAuNzg3OSxsbmc6LTczLjk1NzY0LGFsdDozNn0se2xhdDo0MC43ODg5OCxsbmc6LTczLjk1NzkyLGFsdDozNn0se2xhdDo0MC43ODg2OCxsbmc6LTczLjk1OTUxLGFsdDozN30se2xhdDo0MC43ODg5Nyxsbmc6LTczLjk2MTEyLGFsdDozNn0se2xhdDo0MC43ODgzMyxsbmc6LTczLjk2MjUsYWx0OjM3fSx7bGF0OjQwLjc4ODI4LGxuZzotNzMuOTY0MTYsYWx0OjM3fSx7bGF0OjQwLjc4ODA1LGxuZzotNzMuOTY1NzMsYWx0OjM2fSx7bGF0OjQwLjc4NjkxLGxuZzotNzMuOTY2MzYsYWx0OjM2fSx7bGF0OjQwLjc4NTY2LGxuZzotNzMuOTY2NjUsYWx0OjM2fSx7bGF0OjQwLjc4NDU4LGxuZzotNzMuOTY2MDgsYWx0OjM2fSx7bGF0OjQwLjc4NDAyLGxuZzotNzMuOTY0NTksYWx0OjM2fSx7bGF0OjQwLjc4MzIyLGxuZzotNzMuOTYzMzQsYWx0OjM3fV0sVVo9W3tsYXQ6MzcuNTk2NTksbG5nOi0xMjIuNTAzMTYsYWx0OjR9LHtsYXQ6MzcuNTk1NTUsbG5nOi0xMjIuNTA0MjQsYWx0OjR9LHtsYXQ6MzcuNTk0NTIsbG5nOi0xMjIuNTA1MzQsYWx0OjV9LHtsYXQ6MzcuNTkzMjksbG5nOi0xMjIuNTA1ODgsYWx0Ojl9LHtsYXQ6MzcuNTkyMTIsbG5nOi0xMjIuNTA1MDgsYWx0OjIwfSx7bGF0OjM3LjU5MSxsbmc6LTEyMi41MDQxMyxhbHQ6Mjl9LHtsYXQ6MzcuNTg5NzQsbG5nOi0xMjIuNTA0MTYsYWx0OjQwfSx7bGF0OjM3LjU4ODcsbG5nOi0xMjIuNTA1MjQsYWx0OjUxfSx7bGF0OjM3LjU4NzQ1LGxuZzotMTIyLjUwNDk2LGFsdDo2MH0se2xhdDozNy41ODYyNyxsbmc6LTEyMi41MDQyMixhbHQ6NzF9LHtsYXQ6MzcuNTg1MzksbG5nOi0xMjIuNTA1MzQsYWx0OjgyfSx7bGF0OjM3LjU4NTA1LGxuZzotMTIyLjUwNjk4LGFsdDo5M30se2xhdDozNy41ODUzOSxsbmc6LTEyMi41MDUzNCxhbHQ6ODJ9LHtsYXQ6MzcuNTg2MjcsbG5nOi0xMjIuNTA0MjIsYWx0OjcxfSx7bGF0OjM3LjU4NzQ1LGxuZzotMTIyLjUwNDk2LGFsdDo2MH0se2xhdDozNy41ODg3LGxuZzotMTIyLjUwNTI0LGFsdDo1MX0se2xhdDozNy41ODk3NCxsbmc6LTEyMi41MDQxNixhbHQ6NDB9LHtsYXQ6MzcuNTkxLGxuZzotMTIyLjUwNDEzLGFsdDoyOX0se2xhdDozNy41OTIxMixsbmc6LTEyMi41MDUwOCxhbHQ6MjB9LHtsYXQ6MzcuNTkzMjksbG5nOi0xMjIuNTA1ODgsYWx0Ojl9LHtsYXQ6MzcuNTk0NTIsbG5nOi0xMjIuNTA1MzQsYWx0OjV9LHtsYXQ6MzcuNTk1NTUsbG5nOi0xMjIuNTA0MjQsYWx0OjR9XSxYNT1be2lkOiJhcHBsZS1wYXJrLWxvb3AiLG5hbWU6IkFwcGxlIFBhcmsgTG9vcCIsZGVzY3JpcHRpb246IkN1cGVydGlubyDigKIgZmxhdCByaW5nIHJvYWQiLG1vZGU6IndhbGsiLHdheXBvaW50czpHWixsb29wOiEwfSx7aWQ6ImdvbGRlbi1nYXRlIixuYW1lOiJHb2xkZW4gR2F0ZSBDcm9zc2luZyIsZGVzY3JpcHRpb246IlNhbiBGcmFuY2lzY28g4oCiIGJyaWRnZSByb3VuZC10cmlwIixtb2RlOiJydW4iLHdheXBvaW50czpCWixsb29wOiEwfSx7aWQ6InRhbS1yaWRnZSIsbmFtZToiTXQuIFRhbSBSaWRnZSIsZGVzY3JpcHRpb246IlN0aW5zb24gQmVhY2gg4oCiIFN0ZWVwIFJhdmluZSArIE1hdHQgRGF2aXMgbG9vcCIsbW9kZToid2FsayIsd2F5cG9pbnRzOnpaLGxvb3A6ITB9LHtpZDoiY2VudHJhbC1wYXJrIixuYW1lOiJSZXNlcnZvaXIgTG9vcCIsZGVzY3JpcHRpb246IkNlbnRyYWwgUGFyayDigKIgMi41IGttIixtb2RlOiJydW4iLHdheXBvaW50czpOWixsb29wOiEwfSx7aWQ6InBjaC1wYWNpZmljYSIsbmFtZToiUGFjaWZpYyBDb2FzdCBId3kiLGRlc2NyaXB0aW9uOiJQYWNpZmljYSDigKIgRGV2aWwncyBTbGlkZSByb3VuZC10cmlwIixtb2RlOiJkcml2ZSIsd2F5cG9pbnRzOlVaLGxvb3A6ITB9XTtmdW5jdGlvbiBxMCh7b3BlbjokLG9uT3BlbkNoYW5nZTpKLHN1bW1hcnk6USxjaGlsZHJlbjpaLHN1bW1hcnlDbGFzc05hbWU6Sz0iIixib2R5Q2xhc3NOYW1lOlk9ImZsZXggZmxleC1jb2wgZ2FwLTIuNSBwdC0yLjUiLGNsYXNzTmFtZTpxPSIiLC4uLlZ9KXtyZXR1cm4gWCgiZGV0YWlscyIse29wZW46JCxvblRvZ2dsZTooRyk9PkooRy5jdXJyZW50VGFyZ2V0Lm9wZW4pLGNsYXNzTmFtZTpgbGVtLXNlY3Rpb24gYmctcGFuZWwgcm91bmRlZC1bMTBweF0gcHgtMyBweS0yICR7cX1gLC4uLlYsY2hpbGRyZW46W1goInN1bW1hcnkiLHtjbGFzc05hbWU6YGxlbS10b2dnbGUgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgdGV4dC1pbmstOTAgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSBweS0yLjUgcHgtMSAtbXktMiAtbXgtMSB3LVtjYWxjKDEwMCUrOHB4KV0gJHtLfWAsY2hpbGRyZW46W1EsWChHMix7b3BlbjokfSldfSksWCgiZGl2Iix7Y2xhc3NOYW1lOlksY2hpbGRyZW46Wn0pXX0pfWZ1bmN0aW9uIEczKHtsYWJlbDokLHZhbHVlOkosb3B0aW9uczpRLGRpc2FibGVkOlosb25DaGFuZ2U6SyxjbGFzc05hbWU6WX0pe2xldFtxLFZdPUEoITEpLEc9VChudWxsKSxCPVQobnVsbCksW04sel09QShudWxsKSxVPSgpPT57bGV0IGs9Ry5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZighaylyZXR1cm47eih7dG9wOmsuYm90dG9tKzQsbGVmdDprLmxlZnQsbWluV2lkdGg6ay53aWR0aH0pfTtUMCgoKT0+e2lmKHEpVSgpfSxbcV0pLFQwKCgpPT57aWYoIXF8fCFOKXJldHVybjtsZXQgaz1CLmN1cnJlbnQ7aWYoIWspcmV0dXJuO2xldCBDPTgsTz13aW5kb3cuaW5uZXJXaWR0aC1rLm9mZnNldFdpZHRoLUM7aWYoTi5sZWZ0Pk8peih7Li4uTixsZWZ0Ok1hdGgubWF4KEMsTyl9KX0sW3EsTl0pLF8oKCk9PntpZighcSlyZXR1cm47bGV0IGs9KCk9PlYoITEpLEM9KHkpPT57bGV0IEU9eS50YXJnZXQ7aWYoIUIuY3VycmVudD8uY29udGFpbnMoRSkmJiFHLmN1cnJlbnQ/LmNvbnRhaW5zKEUpKWsoKX0sTz0oeSk9PntpZighQi5jdXJyZW50Py5jb250YWlucyh5LnRhcmdldCkpVSgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsQyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsTywhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsayksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixDKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixPLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixrKX19LFtxXSk7bGV0IEg9VCghMSk7XygoKT0+e2lmKCFxKXtILmN1cnJlbnQ9ITE7cmV0dXJufWlmKCFOfHxILmN1cnJlbnQpcmV0dXJuO2xldCBrPUIuY3VycmVudD8ucXVlcnlTZWxlY3RvckFsbCgiW3JvbGU9b3B0aW9uXSIpO2lmKCFrPy5sZW5ndGgpcmV0dXJuO0guY3VycmVudD0hMDtsZXQgQz1RLmZpbmRJbmRleCgoTyk9Pk8udmFsdWU9PT1KKTtrW01hdGgubWF4KEMsMCldPy5mb2N1cygpfSxbcSxOLFEsSl0pO2xldCBGPShrKT0+e2xldCBDPVsuLi5CLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3JBbGwoIltyb2xlPW9wdGlvbl0iKT8/W11dLE89Qy5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO2lmKGsua2V5PT09IkFycm93RG93biJ8fGsua2V5PT09IkFycm93VXAiKXtrLnByZXZlbnREZWZhdWx0KCk7bGV0IHk9ay5rZXk9PT0iQXJyb3dEb3duIj9NYXRoLm1pbihPKzEsQy5sZW5ndGgtMSk6TWF0aC5tYXgoTy0xLDApO0NbeV0/LmZvY3VzKCl9ZWxzZSBpZihrLmtleT09PSJFc2NhcGUiKWsucHJldmVudERlZmF1bHQoKSxWKCExKSxHLmN1cnJlbnQ/LmZvY3VzKCl9LEw9US5maW5kKChrKT0+ay52YWx1ZT09PUopO3JldHVybiBYKEsxLHtjaGlsZHJlbjpbWCgiYnV0dG9uIix7cmVmOkcsdHlwZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6JCwiYXJpYS1oYXNwb3B1cCI6Imxpc3Rib3giLCJhcmlhLWV4cGFuZGVkIjpxLGRpc2FibGVkOlosb25DbGljazooKT0+Vigoayk9PiFrKSxjbGFzc05hbWU6YHRleHQtbGVmdCBmb250LVtpbmhlcml0XSBjdXJzb3ItcG9pbnRlciBkaXNhYmxlZDpjdXJzb3ItZGVmYXVsdCAke1k/PyIifWAsY2hpbGRyZW46WCgic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgdHJ1bmNhdGUiLGNoaWxkcmVuOkw/LmxhYmVsPz9KfSl9KSxxJiZOJiZ5MyhYKCJkaXYiLHtyZWY6Qixyb2xlOiJsaXN0Ym94IiwiYXJpYS1sYWJlbCI6JCxvbktleURvd246RixzdHlsZTp7dG9wOk4udG9wLGxlZnQ6Ti5sZWZ0LG1pbldpZHRoOk4ubWluV2lkdGh9LGNsYXNzTmFtZToiZml4ZWQgbWF4LWgtOTAgb3ZlcmZsb3cteS1hdXRvIGJnLXBhbmVsIGJvcmRlciBib3JkZXItaW5rLzEyIHJvdW5kZWQtWzEwcHhdIHAtMSBzaGFkb3ctcG9wb3ZlciB0ZXh0LVsxMnB4XSB0ZXh0LWluay05MCB6LTUwIixjaGlsZHJlbjpRLm1hcCgoayk9PlgoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIscm9sZToib3B0aW9uIiwiYXJpYS1zZWxlY3RlZCI6ay52YWx1ZT09PUosb25DbGljazooKT0+e0soay52YWx1ZSksVighMSksRy5jdXJyZW50Py5mb2N1cygpfSxjbGFzc05hbWU6YGJsb2NrIHctZnVsbCB0ZXh0LWxlZnQgZm9udC1baW5oZXJpdF0gcHgtMi41IHB5LTEgcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciB3aGl0ZXNwYWNlLW5vd3JhcCB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1pbmsvOCBmb2N1cy12aXNpYmxlOmJnLWluay84IG91dGxpbmUtbm9uZSAke2sudmFsdWU9PT1KPyJ0ZXh0LWFjY2VudCI6IiJ9YCxjaGlsZHJlbjprLmxhYmVsfSxrLnZhbHVlKSl9KSxkb2N1bWVudC5ib2R5KV19KX12YXIgTFo9NjUwLEI4PVsxLDIsNSwyMF0sYjc9MTAwMCx6OD17c3RhdHVzOiJpZGxlIixhcmM6MCxlbGFwc2VkTXM6MH07ZnVuY3Rpb24gdjcoe3VkaWQ6JCxob3N0Okp9KXtsZXRbUSxaXT1BKCExKSxbSyxZXT1BKFg1WzBdLmlkKSxbcSxWXT1BKFg1WzBdLm1vZGUpLFtHLEJdPUEoMSksW04sel09QSh6OCksW1UsSF09QShudWxsKSxGPVIxKCgpPT5YNS5maW5kKChmKT0+Zi5pZD09PUspPz9YNVswXSxbS10pLEw9UjEoKCk9Pnc3KEYpLFtGXSksaz1UKDApLEM9VCgiaWRsZSIpLE89VChHOChxKSpHKSx5PVQoMCksRT1UKEwpLHc9VChudWxsKTtfKCgpPT57Ty5jdXJyZW50PUc4KHEpKkd9LFtxLEddKTtsZXQgUz1UKG51bGwpO18oKCk9PntsZXQgZj1FLmN1cnJlbnQsVTE9ay5jdXJyZW50O2lmKEUuY3VycmVudD1MLGYmJmYhPT1MKVMuY3VycmVudD1DWihmLFUxLEwscGVyZm9ybWFuY2Uubm93KCkpO2suY3VycmVudD0wLHkuY3VycmVudD0wLEMuY3VycmVudD0iaWRsZSIsdy5jdXJyZW50PW51bGwseih6OCl9LFtMXSk7bGV0IFExPVQoMCksZz1UKG51bGwpLGg9VChudWxsKSx7cmVzb2x2ZWQ6SX09UDUoKSx1PVQoVThbSV0pO3UuY3VycmVudD1VOFtJXSxfKCgpPT57bGV0IGY9MCxVMT0oWDEpPT57bGV0IEIxPWcuY3VycmVudCxGMT1CMT09bnVsbD8xNjpNYXRoLm1pbig2NCxYMS1CMSk7aWYoZy5jdXJyZW50PVgxLFExLmN1cnJlbnQ9KFExLmN1cnJlbnQrRjEqMC4wMDAxMiklKE1hdGguUEkqMiksQy5jdXJyZW50PT09InBsYXlpbmciKXtsZXQgbz1PLmN1cnJlbnQqRjEvMTAwMDtrLmN1cnJlbnQrPW8seS5jdXJyZW50Kz1GMTtsZXQgYz1FLmN1cnJlbnQudG90YWxEaXN0YW5jZTtpZighRS5jdXJyZW50LnRyYWlsLmxvb3AmJmsuY3VycmVudD49YylrLmN1cnJlbnQ9YyxDLmN1cnJlbnQ9InBhdXNlZCIseih7c3RhdHVzOiJwYXVzZWQiLGFyYzpjLGVsYXBzZWRNczp5LmN1cnJlbnR9KX1sZXQgVzE9aC5jdXJyZW50O2lmKFcxKXtsZXQgbz1FLmN1cnJlbnQsYz1udWxsLGQ9Uy5jdXJyZW50O2lmKGQpe2xldCBuPShYMS1kLnN0YXJ0TXMpL0xaO2lmKG4+PTEpUy5jdXJyZW50PW51bGw7ZWxzZXtsZXQgWTE9T1oobik7bz1BWihkLFkxKSxjPXt4OmQucHJldk1hcmtlci54KyhkLm5leHRNYXJrZXIueC1kLnByZXZNYXJrZXIueCkqWTEseTpkLnByZXZNYXJrZXIueSsoZC5uZXh0TWFya2VyLnktZC5wcmV2TWFya2VyLnkpKlkxLHo6ZC5wcmV2TWFya2VyLnorKGQubmV4dE1hcmtlci56LWQucHJldk1hcmtlci56KSpZMX19fU1aKFcxLG8say5jdXJyZW50LFExLmN1cnJlbnQsWDEsQy5jdXJyZW50PT09InBsYXlpbmciLGMsdS5jdXJyZW50KX1mPXJlcXVlc3RBbmltYXRpb25GcmFtZShVMSl9O3JldHVybiBmPXJlcXVlc3RBbmltYXRpb25GcmFtZShVMSksKCk9PmNhbmNlbEFuaW1hdGlvbkZyYW1lKGYpfSxbXSksXygoKT0+e2xldCBmPXNldEludGVydmFsKCgpPT57aWYoQy5jdXJyZW50PT09InBsYXlpbmciKXooe3N0YXR1czoicGxheWluZyIsYXJjOmsuY3VycmVudCxlbGFwc2VkTXM6eS5jdXJyZW50fSl9LDI1MCk7cmV0dXJuKCk9PmNsZWFySW50ZXJ2YWwoZil9LFtdKSxfKCgpPT57aWYoTi5zdGF0dXMhPT0icGxheWluZyIpcmV0dXJuO2xldCBmPSExLFUxPTAsWDE9bnVsbCxCMT1hc3luYygpPT57aWYoZnx8WDEpcmV0dXJuO2xldCBXMT1EYXRlLm5vdygpO2lmKFcxLVUxPGI3KXJldHVybjtVMT1XMTtsZXQgbz1aNShFLmN1cnJlbnQsay5jdXJyZW50KTtYMT1KKCJsb2NhdGlvbiIse3VkaWQ6JCxsYXQ6by5sYXQsbG5nOm8ubG5nfSkudGhlbigoYyk9PntpZihmKXJldHVybjtpZihjLmV4aXRDb2RlIT09MClIKGo3KGMuc3RkZXJyKXx8InNpbWN0bCBsb2NhdGlvbiBzZXQgZmFpbGVkIik7ZWxzZSBIKG51bGwpfSkuY2F0Y2goKGMpPT57aWYoIWYpSChjIGluc3RhbmNlb2YgRXJyb3I/Yy5tZXNzYWdlOlN0cmluZyhjKSl9KS5maW5hbGx5KCgpPT57WDE9bnVsbH0pfTtCMSgpO2xldCBGMT1zZXRJbnRlcnZhbChCMSxiNyk7cmV0dXJuKCk9PntmPSEwLGNsZWFySW50ZXJ2YWwoRjEpfX0sW04uc3RhdHVzLCQsSl0pO2xldCBaMT1QKCgpPT57aWYoQy5jdXJyZW50PT09InBsYXlpbmciKXtDLmN1cnJlbnQ9InBhdXNlZCIseigoZik9Pih7Li4uZixzdGF0dXM6InBhdXNlZCJ9KSk7cmV0dXJufWlmKGsuY3VycmVudD49RS5jdXJyZW50LnRvdGFsRGlzdGFuY2UmJiFFLmN1cnJlbnQudHJhaWwubG9vcClrLmN1cnJlbnQ9MCx5LmN1cnJlbnQ9MDtpZih3LmN1cnJlbnQ9PW51bGwpe2xldCBmPVo1KEUuY3VycmVudCxrLmN1cnJlbnQpO3cuY3VycmVudD17bGF0OmYubGF0LGxuZzpmLmxuZ319Qy5jdXJyZW50PSJwbGF5aW5nIix6KChmKT0+KHsuLi5mLHN0YXR1czoicGxheWluZyIsYXJjOmsuY3VycmVudCxlbGFwc2VkTXM6eS5jdXJyZW50fSkpfSxbXSkscj1QKCgpPT57Qy5jdXJyZW50PSJpZGxlIixrLmN1cnJlbnQ9MCx5LmN1cnJlbnQ9MCx6KHo4KTtsZXQgZj13LmN1cnJlbnQ7dy5jdXJyZW50PW51bGw7bGV0IFUxPWY/e3VkaWQ6JCxsYXQ6Zi5sYXQsbG5nOmYubG5nfTp7dWRpZDokfTtKKCJsb2NhdGlvbiIsVTEpLnRoZW4oKFgxKT0+e2lmKFgxLmV4aXRDb2RlIT09MClIKGo3KFgxLnN0ZGVycil8fG51bGwpO2Vsc2UgSChudWxsKX0pfSxbSiwkXSksTTE9UCgoZik9PntZKGYpO2xldCBVMT1YNS5maW5kKChYMSk9PlgxLmlkPT09Zik7aWYoVTEpVihVMS5tb2RlKX0sW10pO18oKCk9PigpPT57aWYoQy5jdXJyZW50PT09ImlkbGUiKXJldHVybjtsZXQgZj13LmN1cnJlbnQsVTE9Zj97dWRpZDokLGxhdDpmLmxhdCxsbmc6Zi5sbmd9Ont1ZGlkOiR9O0ooImxvY2F0aW9uIixVMSkuY2F0Y2goKCk9Pnt9KX0sW0osJF0pO2xldCBKMT1OLnN0YXR1cz09PSJwbGF5aW5nIixpPUoxP2Ake0w4KE4uYXJjKX0gwrcgJHt4NyhOLmVsYXBzZWRNcyl9YDpMOChMLnRvdGFsRGlzdGFuY2UpO3JldHVybiBYKHEwLHtvcGVuOlEsb25PcGVuQ2hhbmdlOlosc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fbWlubWF4KDAsMWZyKV9hdXRvXSBbY29udGFpbmVyLXR5cGU6aW5saW5lLXNpemVdIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6WChLMSx7Y2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC1pbmstNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJMb2NhdGlvbiJ9KSxRP1goInNwYW4iLHsiZGF0YS1sb2NhdGlvbi1zdGF0dXMiOiEwLGNsYXNzTmFtZToibWluLXctMCB0ZXh0LVsxMXB4XSB0ZXh0LWluay01NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUgd2hpdGVzcGFjZS1ub3dyYXAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgbWF4LXctZnVsbCIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMnMsYm94LXNoYWRvd18wLjJzXSIsc3R5bGU6e2JhY2tncm91bmQ6SjE/InZhcigtLXNlcnZlLXNpbS1zdWNjZXNzKSI6TC50b3RhbERpc3RhbmNlPjA/VDEoMC4zKToidHJhbnNwYXJlbnQiLGJveFNoYWRvdzpKMT8iMCAwIDZweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tc2VydmUtc2ltLXN1Y2Nlc3MpIDcwJSwgdHJhbnNwYXJlbnQpIjoibm9uZSJ9fSksWCgic3BhbiIse2NsYXNzTmFtZToibWluLXctMCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyIsY2hpbGRyZW46aX0pLCFKMSYmWCgic3BhbiIseyJkYXRhLWxvY2F0aW9uLXN0YXR1cy10b3RhbCI6ITAsY2xhc3NOYW1lOiJzaHJpbmstMCIsY2hpbGRyZW46InRvdGFsIn0pXX0pOlgoInNwYW4iLHt9KV19KSxjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIixjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBibG9jayIsY2hpbGRyZW46W1goRzMse2xhYmVsOiJUcmFpbCIsdmFsdWU6SyxvbkNoYW5nZTpNMSxvcHRpb25zOlg1Lm1hcCgoZik9Pih7dmFsdWU6Zi5pZCxsYWJlbDpmLm5hbWV9KSksY2xhc3NOYW1lOiJiZy1pbmsvWzAuMDRdIGJvcmRlciBib3JkZXItaW5rLzggcm91bmRlZC1tZCB0ZXh0LWluay05MCB0ZXh0LVsxMnB4XSBweS0xLjUgcHItWzI2cHhdIHBsLTIgdy1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsYm9yZGVyLWNvbG9yXzAuMTJzXSBob3ZlcjpiZy1pbmsvWzAuMDddIGhvdmVyOmJvcmRlci1pbmsvMTYgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOmJnLWluay9bMC4wOF0gZm9jdXM6Ym9yZGVyLWluay8yNCJ9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC1bOXB4XSB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgcG9pbnRlci1ldmVudHMtbm9uZSBmbGV4IGl0ZW1zLWNlbnRlciIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46WChHMix7b3BlbjohMX0pfSldfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMHB4XSB0ZXh0LWluay00NSIsY2hpbGRyZW46Ri5kZXNjcmlwdGlvbn0pXX0pLFgoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIHJvdW5kZWQtWzEwcHhdIG92ZXJmbG93LWhpZGRlbiBib3JkZXIgYm9yZGVyLWluay9bMC4wNl0gW2FzcGVjdC1yYXRpbzoxNi8xMV0iLHN0eWxlOntiYWNrZ3JvdW5kOlU4W0ldLmJhY2tncm91bmRPdXRlcn0sY2hpbGRyZW46W1goImNhbnZhcyIse3JlZjpoLGNsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBibG9jayJ9KSxYKGtaLHtwcmVwYXJlZDpMfSldfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyXzFmcl8xZnJdIGdhcC0xLjUiLGNoaWxkcmVuOltYKE44LHtsYWJlbDoiRGlzdGFuY2UiLHZhbHVlOkw4KE4uYXJjKX0pLFgoTjgse2xhYmVsOiJQYWNlIix2YWx1ZTpQWihPLmN1cnJlbnQpfSksWChOOCx7bGFiZWw6IkVsYXBzZWQiLHZhbHVlOng3KE4uZWxhcHNlZE1zKX0pXX0pLFgoImRpdiIse2NsYXNzTmFtZToiZmxleCBnYXAtMS41IixjaGlsZHJlbjpbWCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOloxLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdICR7SjE/ImJnLWluay9bMC4xNl0gdGV4dC1pbmsgZW5hYmxlZDpob3ZlcjpiZy1pbmsvWzAuMjJdIjoiYmctc3VjY2Vzcy1lbWVyYWxkIHRleHQtb24tc3VjY2VzcyBlbmFibGVkOmhvdmVyOmJyaWdodG5lc3MtWzEuMDhdIn1gLCJhcmlhLXByZXNzZWQiOkoxLHRpdGxlOkoxPyJQYXVzZSI6IlBsYXkiLGNoaWxkcmVuOltKMT9YKGQzLHt9KTpYKEIyLHt9KSxYKCJzcGFuIix7Y2hpbGRyZW46SjE/IlBhdXNlIjoiUGxheSJ9KV19KSxYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6cixjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0zIGJvcmRlciBib3JkZXItaW5rLzEyIHJvdW5kZWQtWzdweF0gdGV4dC1bMTJweF0gZm9udC1tZWRpdW0gYmctdHJhbnNwYXJlbnQgdGV4dC1pbmstODUgY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gZW5hYmxlZDpob3ZlcjpiZy1pbmsvWzAuMDZdIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLWluay8yMCBlbmFibGVkOmhvdmVyOnRleHQtaW5rIGRpc2FibGVkOm9wYWNpdHktNDAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIixkaXNhYmxlZDpOLnN0YXR1cz09PSJpZGxlIiYmTi5hcmM9PT0wLHRpdGxlOiJTdG9wIGFuZCBjbGVhciBzaW11bGF0ZWQgbG9jYXRpb24iLGNoaWxkcmVuOltYKHoyLHt9KSxYKCJzcGFuIix7Y2hpbGRyZW46IlN0b3AifSldfSldfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtcm93IGl0ZW1zLXN0cmV0Y2ggZ2FwLTEuNSIsY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAiLGNoaWxkcmVuOlgoSFose2FyaWFMYWJlbDoiVHJhbnNwb3J0IG1vZGUiLHZhbHVlOnEsb25DaGFuZ2U6KGYpPT5WKGYpLG9wdGlvbnM6W3t2YWx1ZToid2FsayIsbGFiZWw6IldhbGsiLGljb246WChpMyx7fSl9LHt2YWx1ZToicnVuIixsYWJlbDoiUnVuIixpY29uOlgobzMse30pfSx7dmFsdWU6ImN5Y2xlIixsYWJlbDoiQ3ljbGUiLGljb246WChyMyx7fSl9LHt2YWx1ZToiZHJpdmUiLGxhYmVsOiJEcml2ZSIsaWNvbjpYKG4zLHt9KX1dfSl9KSxYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntsZXQgZj1COC5pbmRleE9mKEcpLFUxPUI4WyhmKzEpJUI4Lmxlbmd0aF07QihVMSl9LGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgcHgtMi41IGJvcmRlciByb3VuZGVkLVs3cHhdIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdIHRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgbWluLXctWzU2cHhdIGFjdGl2ZTpzY2FsZS1bMC45N10gJHtHPjE/ImJnLWluayBib3JkZXItaW5rIHRleHQtaW5rLWludmVyc2UgaG92ZXI6YmctaW5rL1swLjg4XSBob3Zlcjpib3JkZXItaW5rL1swLjg4XSBob3Zlcjp0ZXh0LWluay1pbnZlcnNlIjoiYmctaW5rL1swLjA0XSBib3JkZXItaW5rLzggdGV4dC1pbmstODUgaG92ZXI6YmctaW5rL1swLjA5XSBob3Zlcjpib3JkZXItaW5rLzE4IGhvdmVyOnRleHQtaW5rIn1gLCJhcmlhLWxhYmVsIjpgU3BlZWQgJHtHfcOXIOKAlCB0YXAgdG8gY3ljbGVgLHRpdGxlOmBTcGVlZCAke0d9w5cg4oCUIHRhcCB0byBjeWNsZWAsY2hpbGRyZW46W1goYzMse30pLEc+MSYmWCgic3BhbiIse2NsYXNzTmFtZToiZm9udC1tb25vIFtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXNdIixjaGlsZHJlbjpbRywiw5ciXX0pXX0pXX0pLFUmJlgoImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCIsY2hpbGRyZW46VX0pXX0pfXZhciBOOD1hMChmdW5jdGlvbih7bGFiZWw6Six2YWx1ZTpRfSl7cmV0dXJuIFgoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IGJnLWluay9bMC4wM10gYm9yZGVyIGJvcmRlci1pbmsvWzAuMDZdIHJvdW5kZWQtbWQgcHktWzVweF0gcHgtWzdweF0gbWluLXctMCIsY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToidGV4dC1bOXB4XSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDZlbV0gdGV4dC1pbmstNDUiLGNoaWxkcmVuOkp9KSxYKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEycHhdIGZvbnQtbW9ubyB0ZXh0LWluayBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46UX0pXX0pfSk7ZnVuY3Rpb24gSFooe3ZhbHVlOiQsb25DaGFuZ2U6SixvcHRpb25zOlEsYXJpYUxhYmVsOlp9KXtyZXR1cm4gWCgiZGl2Iix7cm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpaLGNsYXNzTmFtZToiZmxleCBiZy1pbmsvWzAuMDRdIGJvcmRlciBib3JkZXItaW5rLzggcm91bmRlZC1bN3B4XSBwLTAuNSBnYXAtMC41IixjaGlsZHJlbjpRLm1hcCgoSyk9PntsZXQgWT1LLnZhbHVlPT09JDtyZXR1cm4gWCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT5KKEsudmFsdWUpLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1ub25lIHJvdW5kZWQtWzVweF0gcHktWzVweF0gcHgtMiB0ZXh0LVsxMXB4XSBmb250LW1lZGl1bSBjdXJzb3ItcG9pbnRlciBmb250LVtpbmhlcml0XSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSBtaW4taC1bMjJweF0gJHtZPyJiZy1pbmsvWzAuMTJdIHRleHQtaW5rIjoiYmctdHJhbnNwYXJlbnQgdGV4dC1pbmstNjAgaG92ZXI6YmctaW5rL1swLjA1XSBob3Zlcjp0ZXh0LWluay05MCJ9YCwiYXJpYS1wcmVzc2VkIjpZLCJhcmlhLWxhYmVsIjpLLmljb24/Sy5sYWJlbDp2b2lkIDAsdGl0bGU6Sy5pY29uP0subGFiZWw6dm9pZCAwLGNoaWxkcmVuOksuaWNvbj8/Sy5sYWJlbH0sSy52YWx1ZSl9KX0pfWZ1bmN0aW9uIGtaKHtwcmVwYXJlZDokfSl7aWYoJC5yYXdNYXhBbHQtJC5yYXdNaW5BbHQ8NSlyZXR1cm4gbnVsbDtyZXR1cm4gWChLMSx7Y2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTIgbGVmdC0yLjUgYmctcGFuZWwtb3ZlcmxheSB0ZXh0LWluay04NSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gcHgtMS41IHB5LTAuNSByb3VuZGVkLVs1cHhdIGZsZXggaXRlbXMtY2VudGVyIHRyYWNraW5nLVswLjAyZW1dIGJvcmRlciBib3JkZXItaW5rL1swLjA2XSIsY2hpbGRyZW46W1goYzIse2RpcjoidXAifSksIiAiLFI3KCQucmF3TWF4QWx0KV19KSxYKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0yIHJpZ2h0LTIuNSBiZy1wYW5lbC1vdmVybGF5IHRleHQtaW5rLTg1IHRleHQtWzEwcHhdIGZvbnQtbW9ubyBweC0xLjUgcHktMC41IHJvdW5kZWQtWzVweF0gZmxleCBpdGVtcy1jZW50ZXIgdHJhY2tpbmctWzAuMDJlbV0gYm9yZGVyIGJvcmRlci1pbmsvWzAuMDZdIixjaGlsZHJlbjpbWChjMix7ZGlyOiJkb3duIn0pLCIgIixSNygkLnJhd01pbkFsdCldfSldfSl9dmFyIHk3PTE0MDtmdW5jdGlvbiBTNygkLEope2xldCBRPUFycmF5KEopO2ZvcihsZXQgWj0wO1o8SjtaKyspe2xldCBLPUo9PT0xPzA6Wi8oSi0xKSxZPVo1KCQsSyokLnRvdGFsRGlzdGFuY2UpO1FbWl09e3g6WS54LHk6WS55LHo6WS56fX1yZXR1cm4gUX1mdW5jdGlvbiBDWigkLEosUSxaKXtsZXQgSz0oJC5ib3VuZHMueFswXSskLmJvdW5kcy54WzFdKS8yLFk9KCQuYm91bmRzLnpbMF0rJC5ib3VuZHMuelsxXSkvMixxPSQuYm91bmRzLnlbMF0sVj1NYXRoLm1heCgxLCQuYm91bmRzLnhbMV0tJC5ib3VuZHMueFswXSwkLmJvdW5kcy56WzFdLSQuYm91bmRzLnpbMF0pLEc9KFEuYm91bmRzLnhbMF0rUS5ib3VuZHMueFsxXSkvMixCPShRLmJvdW5kcy56WzBdK1EuYm91bmRzLnpbMV0pLzIsTj1RLmJvdW5kcy55WzBdLFU9TWF0aC5tYXgoMSxRLmJvdW5kcy54WzFdLVEuYm91bmRzLnhbMF0sUS5ib3VuZHMuelsxXS1RLmJvdW5kcy56WzBdKS9WLEY9UzcoJCx5NykubWFwKChTKT0+KHt4OihTLngtSykqVStHLHk6KFMueS1xKSpVK04sejooUy56LVkpKlUrQn0pKSxMPVM3KFEseTcpLGs9KCQudHJhaWwubG9vcHx8US50cmFpbC5sb29wKT8/ITEsQz1GWihGLEwsayksTz1aNSgkLEopLHk9e3g6KE8ueC1LKSpVK0cseTooTy55LXEpKlUrTix6OihPLnotWSkqVStCfSxFPVo1KFEsMCksdz17eDpFLngseTpFLnksejpFLnp9O3JldHVybntmcm9tOiQsdG86USxmcm9tUHRzOkYsdG9QdHM6QyxwcmV2TWFya2VyOnksbmV4dE1hcmtlcjp3LHN0YXJ0TXM6Wn19ZnVuY3Rpb24gRlooJCxKLFEpe2xldCBaPSQubGVuZ3RoLEs9MS8wLFk9MCxxPSExLFY9W0osWy4uLkpdLnJldmVyc2UoKV07Zm9yKGxldCBOPTA7TjxWLmxlbmd0aDtOKyspe2xldCB6PVZbTl0sVT1RP1o6MTtmb3IobGV0IEg9MDtIPFU7SCsrKXtsZXQgRj0wO2ZvcihsZXQgTD0wO0w8WjtMKyspe2xldCBrPSRbTF0sQz16WyhMK0gpJVpdLE89ay54LUMueCx5PWsueS1DLnksRT1rLnotQy56O2lmKEYrPU8qTyt5KnkrRSpFLEY+PUspYnJlYWt9aWYoRjxLKUs9RixZPUgscT1OPT09MX19bGV0IEc9cT9bLi4uSl0ucmV2ZXJzZSgpOkosQj1BcnJheShaKTtmb3IobGV0IE49MDtOPFo7TisrKUJbTl09R1soTitZKSVaXTtyZXR1cm4gQn1mdW5jdGlvbiBBWigkLEope2xldCBRPSQuZnJvbVB0cy5sZW5ndGgsWj1BcnJheShRKSxLPTAsWT1udWxsLHE9MS8wLFY9LTEvMCxHPTEvMCxCPS0xLzAsTj0xLzAsej0tMS8wO2ZvcihsZXQgVT0wO1U8UTtVKyspe2xldCBIPSQuZnJvbVB0c1tVXSxGPSQudG9QdHNbVV0sTD1ILngrKEYueC1ILngpKkosaz1ILnkrKEYueS1ILnkpKkosQz1ILnorKEYuei1ILnopKko7aWYoWSl7bGV0IHk9TC1ZLngsRT1rLVkueSx3PUMtWS56O0srPU1hdGguc3FydCh5KnkrRSpFK3cqdyl9bGV0IE89e3g6TCx5OmssejpDLGFyYzpLLGxhdDowLGxuZzowfTtpZihaW1VdPU8sWT1PLEw8cSlxPUw7aWYoTD5WKVY9TDtpZihrPEcpRz1rO2lmKGs+QilCPWs7aWYoQzxOKU49QztpZihDPnopej1DfXJldHVybnt0cmFpbDokLnRvLnRyYWlsLG9yaWdpbjokLnRvLm9yaWdpbixwb2ludHM6Wix0b3RhbERpc3RhbmNlOkssYm91bmRzOnt4OltxLFZdLHk6W0csQl0sejpbTix6XX0scmF3TWluQWx0OiQudG8ucmF3TWluQWx0KygkLmZyb20ucmF3TWluQWx0LSQudG8ucmF3TWluQWx0KSooMS1KKSxyYXdNYXhBbHQ6JC50by5yYXdNYXhBbHQrKCQuZnJvbS5yYXdNYXhBbHQtJC50by5yYXdNYXhBbHQpKigxLUopfX1mdW5jdGlvbiBPWigkKXtyZXR1cm4gJDwwLjU/MiokKiQ6MS1NYXRoLnBvdygtMiokKzIsMikvMn12YXIgVTg9e2Rhcms6e2JhY2tncm91bmRJbm5lcjoiIzFhMWExZCIsYmFja2dyb3VuZE91dGVyOiIjMGEwYTBjIixkb3RHcmlkOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMDYpIixyaWJib246WyJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIiwicmdiYSgxODAsMTgwLDE4NSwwLjI4KSIsInJnYmEoNDAsNDAsNDUsMC4xOCkiLCJyZ2JhKDAsMCwwLDApIl0sbGluZToiI2ZmZmZmZiIsdHJhdmVsbGVkOiIjZjlkMmE0IixtYXJrZXI6IiNmZmYiLHB1bHNlUmdiOiIyNTUsMjU1LDI1NSJ9LGxpZ2h0OntiYWNrZ3JvdW5kSW5uZXI6IiNmZmZmZmYiLGJhY2tncm91bmRPdXRlcjoiI2U5ZTllZSIsZG90R3JpZDoicmdiYSgwLDAsMCwwLjA3KSIscmliYm9uOlsicmdiYSg2MCw2MCw2NywwLjQpIiwicmdiYSgxMjAsMTIwLDEyOCwwLjIpIiwicmdiYSgyMDAsMjAwLDIwNSwwLjEyKSIsInJnYmEoMjU1LDI1NSwyNTUsMCkiXSxsaW5lOiIjMWMxYzFlIix0cmF2ZWxsZWQ6IiNkOTczMWEiLG1hcmtlcjoiIzFjMWMxZSIscHVsc2VSZ2I6IjAsMCwwIn19O2Z1bmN0aW9uIE1aKCQsSixRLFosSyxZLHEsVil7bGV0IEc9JC5nZXRDb250ZXh0KCIyZCIpO2lmKCFHKXJldHVybjtsZXR7Y2xpZW50V2lkdGg6QixjbGllbnRIZWlnaHQ6Tn09JDtpZihCPT09MHx8Tj09PTApcmV0dXJuO2xldCB6PXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxOjEsVT1NYXRoLnJvdW5kKEIqeiksSD1NYXRoLnJvdW5kKE4qeik7aWYoJC53aWR0aCE9PVV8fCQuaGVpZ2h0IT09SCkkLndpZHRoPVUsJC5oZWlnaHQ9SDtHLnNldFRyYW5zZm9ybSh6LDAsMCx6LDAsMCksRy5jbGVhclJlY3QoMCwwLEIsTik7bGV0IEY9Ry5jcmVhdGVSYWRpYWxHcmFkaWVudChCKjAuNSxOKjAuNTUsTWF0aC5taW4oQixOKSowLjIsQiowLjUsTiowLjU1LE1hdGgubWF4KEIsTikqMC44NSk7Ri5hZGRDb2xvclN0b3AoMCxWLmJhY2tncm91bmRJbm5lciksRi5hZGRDb2xvclN0b3AoMSxWLmJhY2tncm91bmRPdXRlciksRy5maWxsU3R5bGU9RixHLmZpbGxSZWN0KDAsMCxCLE4pLFdaKEcsQixOLFYuZG90R3JpZCk7bGV0e3BvaW50czpMLGJvdW5kczprfT1KO2lmKEwubGVuZ3RoPDIpcmV0dXJuO2xldCBDPTI4Kk1hdGguUEkvMTgwLE89TWF0aC5zaW4oQykseT1NYXRoLmNvcyhDKSxFPU1hdGguc2luKFopLHc9TWF0aC5jb3MoWiksUz0oay54WzBdK2sueFsxXSkvMixRMT0oay56WzBdK2suelsxXSkvMixnPWsueFsxXS1rLnhbMF0saD1rLnpbMV0tay56WzBdLEk9ay55WzFdLWsueVswXSx1PU1hdGgubWF4KGcsaCkqMS4wNSxaMT1NYXRoLm1heChoKnkrSSpPLGcqMC40KSoxLjE1LHI9QiowLjA4LE0xPU4qMC4xOCxKMT1NYXRoLm1pbigoQi1yKjIpL3UsKE4tTTEqMikvWjEpKjEuNDUsaT1JPDE/MTpNYXRoLm1pbigyNCwxNDAvTWF0aC5tYXgoMjAsSSkpLGY9KGMsZCxuKT0+e2xldCBZMT1jLVMsYj1uLVExLGo9WTEqdytiKkUsTjE9LVkxKkUrYip3LEMxPWQqaSxwPUMxKnktTjEqTyxlPUMxKk8rTjEqeTtyZXR1cm57c3g6Qi8yK2oqSjEsc3k6TiowLjU1LXAqSjEsZGVwdGg6ZX19LFUxPTM4LFgxPUwubWFwKChjKT0+e2xldCBkPWYoYy54LGMueSxjLnopLG49ZihjLngsMCxjLnopLFkxPXtzeDpkLnN4LHN5Ok1hdGgubWF4KG4uc3ksZC5zeStVMSksZGVwdGg6bi5kZXB0aH07cmV0dXJue3A6Yyx0b3A6ZCxib3Q6WTF9fSk7Zm9yKGxldCBjPTE7YzxYMS5sZW5ndGg7YysrKXtsZXQgZD1YMVtjLTFdLG49WDFbY10sWTE9Ry5jcmVhdGVMaW5lYXJHcmFkaWVudCgoZC50b3Auc3grbi50b3Auc3gpLzIsKGQudG9wLnN5K24udG9wLnN5KS8yLChkLmJvdC5zeCtuLmJvdC5zeCkvMiwoZC5ib3Quc3krbi5ib3Quc3kpLzIpO1kxLmFkZENvbG9yU3RvcCgwLFYucmliYm9uWzBdKSxZMS5hZGRDb2xvclN0b3AoMC40NSxWLnJpYmJvblsxXSksWTEuYWRkQ29sb3JTdG9wKDAuODUsVi5yaWJib25bMl0pLFkxLmFkZENvbG9yU3RvcCgxLFYucmliYm9uWzNdKSxHLmZpbGxTdHlsZT1ZMSxHLmJlZ2luUGF0aCgpLEcubW92ZVRvKGQudG9wLnN4LGQudG9wLnN5KSxHLmxpbmVUbyhuLnRvcC5zeCxuLnRvcC5zeSksRy5saW5lVG8obi5ib3Quc3gsbi5ib3Quc3kpLEcubGluZVRvKGQuYm90LnN4LGQuYm90LnN5KSxHLmNsb3NlUGF0aCgpLEcuZmlsbCgpfUcuc3Ryb2tlU3R5bGU9Vi5saW5lLEcubGluZVdpZHRoPTEuNixHLmxpbmVDYXA9InJvdW5kIixHLmxpbmVKb2luPSJyb3VuZCIsRy5iZWdpblBhdGgoKTtmb3IobGV0IGM9MDtjPFgxLmxlbmd0aDtjKyspe2xldHt0b3A6ZH09WDFbY107aWYoYz09PTApRy5tb3ZlVG8oZC5zeCxkLnN5KTtlbHNlIEcubGluZVRvKGQuc3gsZC5zeSl9Ry5zdHJva2UoKTtsZXQgQjE9UTtHLnN0cm9rZVN0eWxlPVYudHJhdmVsbGVkLEcubGluZVdpZHRoPTIuMixHLmJlZ2luUGF0aCgpO2xldCBGMT0hMTtmb3IobGV0IGM9MDtjPFgxLmxlbmd0aDtjKyspe2xldHtwOmQsdG9wOm59PVgxW2NdO2lmKGQuYXJjPkIxKWJyZWFrO2lmKCFGMSlHLm1vdmVUbyhuLnN4LG4uc3kpLEYxPSEwO2Vsc2UgRy5saW5lVG8obi5zeCxuLnN5KX1pZihGMSlHLnN0cm9rZSgpO2xldCBXMT1xPz9aNShKLFEpLG89ZihXMS54LFcxLnksVzEueik7aWYoWSl7bGV0IG49SyUyNjAwLzI2MDAsWTE9NCsyMipuLGI9MC4yMiooMS1uKSxqPUcuY3JlYXRlUmFkaWFsR3JhZGllbnQoby5zeCxvLnN5LFkxKjAuNSxvLnN4LG8uc3ksWTEpO2ouYWRkQ29sb3JTdG9wKDAsYHJnYmEoJHtWLnB1bHNlUmdifSwwKWApLGouYWRkQ29sb3JTdG9wKDAuNyxgcmdiYSgke1YucHVsc2VSZ2J9LCR7Yi50b0ZpeGVkKDMpfSlgKSxqLmFkZENvbG9yU3RvcCgxLGByZ2JhKCR7Vi5wdWxzZVJnYn0sMClgKSxHLmZpbGxTdHlsZT1qLEcuYmVnaW5QYXRoKCksRy5hcmMoby5zeCxvLnN5LFkxLDAsTWF0aC5QSSoyKSxHLmZpbGwoKX1HLmZpbGxTdHlsZT1WLm1hcmtlcixHLmJlZ2luUGF0aCgpLEcuYXJjKG8uc3gsby5zeSwzLjgsMCxNYXRoLlBJKjIpLEcuZmlsbCgpfWZ1bmN0aW9uIFdaKCQsSixRLFopeyQuZmlsbFN0eWxlPVo7Zm9yKGxldCBxPTc7cTxRO3ErPTE0KWZvcihsZXQgVj03O1Y8SjtWKz0xNCkkLmJlZ2luUGF0aCgpLCQuYXJjKFYscSwwLjcsMCxNYXRoLlBJKjIpLCQuZmlsbCgpfWZ1bmN0aW9uIEw4KCQpe2lmKCQ8MTAwMClyZXR1cm5gJHskLnRvRml4ZWQoMCl9IG1gO3JldHVybmAkeygkLzEwMDApLnRvRml4ZWQoMil9IGttYH1mdW5jdGlvbiB4NygkKXtsZXQgSj1NYXRoLmZsb29yKCQvMTAwMCksUT1NYXRoLmZsb29yKEovMzYwMCksWj1NYXRoLmZsb29yKEolMzYwMC82MCksSz1KJTYwO2lmKFE+MClyZXR1cm5gJHtRfToke1oudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7Sy50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gO3JldHVybmAke1p9OiR7Sy50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gfWZ1bmN0aW9uIFBaKCQpe2lmKCQ8PTApcmV0dXJuIuKAlCI7aWYoJD43KXJldHVybmAkeygkKjMuNikudG9GaXhlZCgwKX0ga20vaGA7bGV0IEo9MTAwMC8kLFE9TWF0aC5mbG9vcihKLzYwKSxaPU1hdGgucm91bmQoSiU2MCk7cmV0dXJuYCR7UX06JHtaLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS9rbWB9ZnVuY3Rpb24gUjcoJCl7cmV0dXJuYCR7JC50b0ZpeGVkKDApfSBtYH1mdW5jdGlvbiBqNygkKXtsZXQgSj0kLnRyaW0oKTtpZighSilyZXR1cm4iIjtsZXQgUT1KLm1hdGNoKC9SZWFzb246XHMqKC4rKSQvbSk7aWYoUSlyZXR1cm4gUVsxXTtyZXR1cm4gSi5zcGxpdChgCmApLnNsaWNlKC0xKVswXT8/Sn1hc3luYyBmdW5jdGlvbiBIOCgkLEosUSl7bGV0IFo9YXdhaXQgJCgiYXBwRGV0YWlscyIse3VkaWQ6SixidW5kbGVJZDpRfSk7aWYoWi5leGl0Q29kZSE9PTApcmV0dXJue2Vycm9yOlouc3RkZXJyLnRyaW0oKXx8IkFwcCBub3QgZm91bmQgb24gc2ltdWxhdG9yIn07bGV0IEs9KFkpPT50eXBlb2YgWT09PSJzdHJpbmciP1k6dm9pZCAwO3JldHVybnthcHBQYXRoOksoWi5hcHBQYXRoKSxkaXNwbGF5TmFtZTpLKFouZGlzcGxheU5hbWUpLHNob3J0VmVyc2lvbjpLKFouc2hvcnRWZXJzaW9uKSxidW5kbGVWZXJzaW9uOksoWi5idW5kbGVWZXJzaW9uKSxtaW5PUzpLKFoubWluT1MpLGV4ZWN1dGFibGU6SyhaLmV4ZWN1dGFibGUpLGljb25EYXRhVXJsOksoWi5pY29uRGF0YVVybCk/P251bGx9fXZhciBENT1uZXcgTWFwO2Z1bmN0aW9uIGc3KCQsSixRKXtsZXQgWj1gJHtKfToke1F9YCxLPUQ1LmdldChaKTtpZihLIT09dm9pZCAwKXJldHVybiBQcm9taXNlLnJlc29sdmUoSyk7bGV0IFk9SDgoJCxKLFEpLnRoZW4oKHEpPT57bGV0IFY9cS5pY29uRGF0YVVybD8/bnVsbDtyZXR1cm4gRDUuc2V0KFosViksVn0pLmNhdGNoKCgpPT57cmV0dXJuIEQ1LnNldChaLG51bGwpLG51bGx9KTtyZXR1cm4gRDUuc2V0KFosWSksWX1mdW5jdGlvbiBfWigkKXtyZXR1cm4gJC5zdGFydHNXaXRoKCJjb20uYXBwbGUuIil9ZnVuY3Rpb24gRFooJCl7aWYoJD09PSJjb20uYXBwbGUuc3ByaW5nYm9hcmQiKXJldHVybiJTcHJpbmdCb2FyZCI7cmV0dXJuICR9ZnVuY3Rpb24gVFooe2J1bmRsZUlkOiR9KXtsZXQgSj1fWigkKTtyZXR1cm4gWCgiZGl2Iix7ImRhdGEtdGVzdGlkIjpKPyJzeXN0ZW0tYXBwLWljb24iOiJhcHAtaWNvbi1mYWxsYmFjayIsY2xhc3NOYW1lOmB3LTEwIGgtMTAgcm91bmRlZC1bOHB4XSBzaHJpbmstMCBib3JkZXIgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgJHtKPyJib3JkZXItc3lzdGVtLWljb24tYm9yZGVyIGJnLVtsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLHZhcigtLXNlcnZlLXNpbS1zeXN0ZW0taWNvbi1mcm9tKSx2YXIoLS1zZXJ2ZS1zaW0tc3lzdGVtLWljb24tdG8pKV0gdGV4dC1zeXN0ZW0taWNvbi1mZyI6ImJvcmRlci1pbmsvMTAgYmctaW5rL1swLjA2XSB0ZXh0LWluay04MCJ9YCwiYXJpYS1sYWJlbCI6Sj8iU3lzdGVtIGFwcCI6IkFwcCBpY29uIHVuYXZhaWxhYmxlIix0aXRsZTpKPyJTeXN0ZW0gYXBwIjoiQXBwIGljb24gdW5hdmFpbGFibGUiLGNoaWxkcmVuOko/WCgic3ZnIix7cm9sZToiaW1nIix2aWV3Qm94OiIwIDAgMjQgMjQiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2xhc3NOYW1lOiJzaXplLVsxOXB4XSIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpbWCgidGl0bGUiLHtjaGlsZHJlbjoiQXBwbGUifSksWCgicGF0aCIse2Q6Ik0xMi4xNTIgNi44OTZjLS45NDggMC0yLjQxNS0xLjA3OC0zLjk2LTEuMDQtMi4wNC4wMjctMy45MSAxLjE4My00Ljk2MSAzLjAxNC0yLjExNyAzLjY3NS0uNTQ2IDkuMTAzIDEuNTE5IDEyLjA5IDEuMDEzIDEuNDU0IDIuMjA4IDMuMDkgMy43OTIgMy4wMzkgMS41Mi0uMDY1IDIuMDktLjk4NyAzLjkzNS0uOTg3IDEuODMxIDAgMi4zNS45ODcgMy45Ni45NDggMS42MzctLjAyNiAyLjY3Ni0xLjQ4IDMuNjc2LTIuOTQ4IDEuMTU2LTEuNjg4IDEuNjM2LTMuMzI1IDEuNjYyLTMuNDE1LS4wMzktLjAxMy0zLjE4Mi0xLjIyMS0zLjIyLTQuODU3LS4wMjYtMy4wNCAyLjQ4LTQuNDk0IDIuNTk3LTQuNTU5LTEuNDI5LTIuMDktMy42MjMtMi4zMjQtNC4zOS0yLjM3Ni0yLS4xNTYtMy42NzUgMS4wOS00LjYxIDEuMDl6TTE1LjUzIDMuODNjLjg0My0xLjAxMiAxLjQtMi40MjcgMS4yNDUtMy44My0xLjIwNy4wNTItMi42NjIuODA1LTMuNTMyIDEuODE4LS43OC44OTYtMS40NTQgMi4zMzgtMS4yNzMgMy43MTQgMS4zMzguMTA0IDIuNzE1LS42ODggMy41NTktMS43MDEifSldfSk6WChnNSx7c2l6ZToxOSxzdHJva2VXaWR0aDoxLjl9KX0pfWZ1bmN0aW9uIElaKHtidW5kbGVJZDokLGljb25EYXRhVXJsOkp9KXtpZihKKXJldHVybiBYKCJpbWciLHtzcmM6SixjbGFzc05hbWU6InctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIG9iamVjdC1jb3ZlciBib3JkZXIgYm9yZGVyLWluay84IixhbHQ6IiJ9KTtyZXR1cm4gWChUWix7YnVuZGxlSWQ6JH0pfWZ1bmN0aW9uIGg3KHt1ZGlkOiQsY3VycmVudEFwcDpKfSl7bGV0W1EsWl09QShudWxsKSxbSyxZXT1BKCExKTtpZihfKCgpPT57aWYoIUope1oobnVsbCk7cmV0dXJufWxldCBxPSExO3JldHVybiBaKHtidW5kbGVJZDpKLmJ1bmRsZUlkLGlzUmVhY3ROYXRpdmU6Si5pc1JlYWN0TmF0aXZlLHBpZDpKLnBpZCxsb2FkaW5nOiEwfSksSDgoeDEsJCxKLmJ1bmRsZUlkKS50aGVuKChWKT0+e2lmKHEpcmV0dXJuO1ooe2J1bmRsZUlkOkouYnVuZGxlSWQsaXNSZWFjdE5hdGl2ZTpKLmlzUmVhY3ROYXRpdmUscGlkOkoucGlkLGxvYWRpbmc6ITEsLi4uVn0pfSksKCk9PntxPSEwfX0sWyQsSixKPy5idW5kbGVJZCxKPy5waWQsSj8uaXNSZWFjdE5hdGl2ZV0pLCFRKXJldHVybiBYKEVaLHt9KTtyZXR1cm4gWChxMCx7b3BlbjpLLG9uT3BlbkNoYW5nZTpZLHN1bW1hcnlDbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtbGVmdCIsc3VtbWFyeTpYKEsxLHtjaGlsZHJlbjpbWChJWix7YnVuZGxlSWQ6US5idW5kbGVJZCxpY29uRGF0YVVybDpRLmljb25EYXRhVXJsfSksWCh3Wix7YnVuZGxlSWQ6US5idW5kbGVJZCxkaXNwbGF5TmFtZTpRLmRpc3BsYXlOYW1lfSldfSksY2hpbGRyZW46W1EuZXJyb3ImJlgoImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCIsY2hpbGRyZW46US5lcnJvcn0pLFgoImRsIix7Y2xhc3NOYW1lOiJtLTAgZmxleCBmbGV4LWNvbCBnYXAtMS41IixjaGlsZHJlbjpbWChUNSx7bGFiZWw6IlZlcnNpb24iLHZhbHVlOlEuc2hvcnRWZXJzaW9uP2Ake1Euc2hvcnRWZXJzaW9ufSAoJHtRLmJ1bmRsZVZlcnNpb24/PyLigJQifSlgOlEubG9hZGluZz8i4oCmIjoi4oCUIn0pLFgoVDUse2xhYmVsOiJNaW4gaU9TIix2YWx1ZTpRLm1pbk9TPz8oUS5sb2FkaW5nPyLigKYiOiLigJQiKX0pLFgoVDUse2xhYmVsOiJFeGVjdXRhYmxlIix2YWx1ZTpRLmV4ZWN1dGFibGU/PyhRLmxvYWRpbmc/IuKApiI6IuKAlCIpfSksWChUNSx7bGFiZWw6IlBJRCIsdmFsdWU6US5waWQhPW51bGw/U3RyaW5nKFEucGlkKToi4oCUIn0pLFEuaXNSZWFjdE5hdGl2ZSYmWChUNSx7bGFiZWw6IlJlYWN0IE5hdGl2ZSIsdmFsdWU6IlllcyJ9KSxYKFQ1LHtsYWJlbDoiQXBwIHBhdGgiLHZhbHVlOlEuYXBwUGF0aD8/KFEubG9hZGluZz8i4oCmIjoi4oCUIiksbW9ubzohMCxhY3Rpb246US5hcHBQYXRoP3t0aXRsZToiUmV2ZWFsIGluIEZpbmRlciIsb25DbGljazooKT0+e3gxKCJyZXZlYWxBcHAiLHt1ZGlkOiQsYnVuZGxlSWQ6US5idW5kbGVJZH0pfSxpY29uOlgoaDUse3NpemU6MTEsc3Ryb2tlV2lkdGg6Mi4yfSl9OnZvaWQgMH0pXX0pXX0pfWZ1bmN0aW9uIEVaKCl7cmV0dXJuIFgoImRpdiIseyJkYXRhLXRlc3RpZCI6ImFwcC1kZXRlY3Rpb24tc2tlbGV0b24iLGNsYXNzTmFtZToiYmctcGFuZWwgcm91bmRlZC1bMTBweF0gcHgtMyBweS0yIiwiYXJpYS1sYWJlbCI6IldhaXRpbmcgZm9yIGZvcmVncm91bmQgYXBwIixjaGlsZHJlbjpYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtbGVmdCBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6InctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIGJnLWluay9bMC4wOF0ifSksWCgic3BhbiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEgZmxleCBmbGV4LWNvbCBnYXAtMiIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6ImgtMy41IHctWzQ2JV0gcm91bmRlZC1mdWxsIGJnLWluay9bMC4xMl0ifSksWCgic3BhbiIse2NsYXNzTmFtZToiaC0yLjUgdy1bNjglXSByb3VuZGVkLWZ1bGwgYmctaW5rL1swLjA4XSJ9KV19KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJ3LTIuNSBoLTIuNSByb3VuZGVkLWZ1bGwgYmctaW5rL1swLjA4XSJ9KV19KX0pfWZ1bmN0aW9uIHdaKHtidW5kbGVJZDokLGRpc3BsYXlOYW1lOkp9KXtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBsZWFkaW5nLXRpZ2h0IHRleHQtbGVmdCIsY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gZm9udC1zZW1pYm9sZCB0ZXh0LWluay05MCB0cnVuY2F0ZSIsY2hpbGRyZW46Sj8/RFooJCl9KSxYKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtaW5rLTU1IGZvbnQtbW9ubyB0cnVuY2F0ZSIsdGl0bGU6JCxjaGlsZHJlbjokfSldfSl9ZnVuY3Rpb24gVDUoe2xhYmVsOiQsdmFsdWU6Sixtb25vOlEsYWN0aW9uOlp9KXtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOiJncm91cCBmbGV4IGl0ZW1zLWJhc2VsaW5lIGdhcC0yIG1pbi13LTAiLGNoaWxkcmVuOltYKCJkdCIse2NsYXNzTmFtZToibS0wIHRleHQtWzExcHhdIHRleHQtaW5rLTUwIHctMjEgc2hyaW5rLTAiLGNoaWxkcmVuOiR9KSxYKCJkZCIse2NsYXNzTmFtZTpgbS0wIHRleHQtaW5rLTkwIGZsZXgtMSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHJlbGF0aXZlICR7UT8iZm9udC1tb25vIHRleHQtWzExcHhdIjoidGV4dC1bMTJweF0ifWAsdGl0bGU6SixjaGlsZHJlbjpbSixaJiZYKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIHJpZ2h0LTAgYm90dG9tLTAgcGwtNyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3JpZ2h0LHZhcigtLXNlcnZlLXNpbS1wYW5lbC10cmFuc3BhcmVudClfMCUsdmFyKC0tc2VydmUtc2ltLXBhbmVsKV81NSUpXSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTVzX2Vhc2UsdHJhbnNmb3JtXzAuMTVzX2Vhc2VdIG9wYWNpdHktMCB0cmFuc2xhdGUteC0xIHBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZ3JvdXAtaG92ZXI6dHJhbnNsYXRlLXgtMCBncm91cC1ob3Zlcjpwb2ludGVyLWV2ZW50cy1hdXRvIixjaGlsZHJlbjpYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6Wi5vbkNsaWNrLHRpdGxlOloudGl0bGUsImFyaWEtbGFiZWwiOloudGl0bGUsY2xhc3NOYW1lOiJ3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQgdGV4dC1pbmsgY3Vyc29yLXBvaW50ZXIgcC0wIixjaGlsZHJlbjpaLmljb259KX0pXX0pXX0pfXZhciBmNz1be2tleToiY2FtZXJhIixsYWJlbDoiQ2FtZXJhIn0se2tleToibWljcm9waG9uZSIsbGFiZWw6Ik1pY3JvcGhvbmUifSx7a2V5OiJwaG90b3MiLGxhYmVsOiJQaG90b3MifSx7a2V5OiJwaG90b3MtYWRkIixsYWJlbDoiQWRkIHRvIFBob3RvcyJ9LHtrZXk6ImNvbnRhY3RzIixsYWJlbDoiQ29udGFjdHMifSx7a2V5OiJjYWxlbmRhciIsbGFiZWw6IkNhbGVuZGFyIn0se2tleToicmVtaW5kZXJzIixsYWJlbDoiUmVtaW5kZXJzIn0se2tleToibG9jYXRpb24iLGxhYmVsOiJMb2NhdGlvbiJ9LHtrZXk6ImxvY2F0aW9uLWFsd2F5cyIsbGFiZWw6IkxvY2F0aW9uIChBbHdheXMpIn0se2tleToibm90aWZpY2F0aW9ucyIsbGFiZWw6Ik5vdGlmaWNhdGlvbnMifSx7a2V5OiJtb3Rpb24iLGxhYmVsOiJNb3Rpb24ifSx7a2V5OiJtZWRpYS1saWJyYXJ5IixsYWJlbDoiTWVkaWEgTGlicmFyeSJ9LHtrZXk6InNpcmkiLGxhYmVsOiJTaXJpIn1dO2Z1bmN0aW9uIG03KHt1ZGlkOiQsYnVuZGxlSWQ6Sn0pe2xldFtRLFpdPUEoe30pLFtLLFldPUEobnVsbCksW3EsVl09QShudWxsKSxbRyxCXT1BKCExKTtfKCgpPT57Wih7fSksVihudWxsKX0sW0pdKTtsZXQgTj1QKGFzeW5jKFUsSCk9PntpZighSilyZXR1cm47bGV0IEY9YCR7VX06JHtIfWA7WShGKSxWKG51bGwpO3RyeXtsZXQgTD1hd2FpdCB4MSgicGVybWlzc2lvbnMiLHt1ZGlkOiQsYnVuZGxlSWQ6SixhY3Rpb246SCxzZXJ2aWNlOlV9KTtpZihMLmV4aXRDb2RlIT09MCl7VihMLnN0ZGVyci50cmltKCl8fGBzZXJ2ZS1zaW0gcGVybWlzc2lvbnMgZmFpbGVkIChleGl0ICR7TC5leGl0Q29kZX0pYCk7cmV0dXJufVooKGspPT4oey4uLmssW1VdOkg9PT0icmVzZXQiP3ZvaWQgMDpIfSkpfWZpbmFsbHl7WShudWxsKX19LFskLEpdKSx6PVAoYXN5bmMoKT0+e2lmKCFKKXJldHVybjtZKCJfX2FsbF9fIiksVihudWxsKTt0cnl7bGV0IFU9YXdhaXQgeDEoInBlcm1pc3Npb25zIix7dWRpZDokLGJ1bmRsZUlkOkosYWN0aW9uOiJyZXNldCIsc2VydmljZToiYWxsIn0pO2lmKFUuZXhpdENvZGUhPT0wKXtWKFUuc3RkZXJyLnRyaW0oKXx8YHNlcnZlLXNpbSBwZXJtaXNzaW9ucyBmYWlsZWQgKGV4aXQgJHtVLmV4aXRDb2RlfSlgKTtyZXR1cm59Wih7fSl9ZmluYWxseXtZKG51bGwpfX0sWyQsSl0pO2lmKCFKKXJldHVybiBYKGJaLHt9KTtyZXR1cm4gWChxMCx7b3BlbjpHLG9uT3BlbkNoYW5nZTpCLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OlgoSzEse2NoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtaW5rLTUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiUGVybWlzc2lvbnMifSksWCgic3BhbiIse30pXX0pLGNoaWxkcmVuOltxJiZYKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOnF9KSxYKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIixjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJtYXgtaC1bMjYwcHhdIG92ZXJmbG93LXktYXV0byBmbGV4IGZsZXgtY29sIGdhcC0xIHB5LTIgW3Njcm9sbGJhci13aWR0aDp0aGluXSIsY2hpbGRyZW46ZjcubWFwKCh7a2V5OlUsbGFiZWw6SH0pPT57bGV0IEY9UVtVXTtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcHgtMC41IHB5LTEiLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LWluay05MCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46SH0pLFgoImRpdiIse2NsYXNzTmFtZToiZmxleCBnYXAtMC41IGJnLWluay9bMC4wNF0gYm9yZGVyIGJvcmRlci1pbmsvOCByb3VuZGVkLW1kIHAtMC41Iixyb2xlOiJncm91cCIsImFyaWEtbGFiZWwiOkgsY2hpbGRyZW46W1goazgse2FjdGl2ZTpGPT09ImdyYW50IixwZW5kaW5nOks9PT1gJHtVfTpncmFudGAsb25DbGljazooKT0+TihVLCJncmFudCIpLHZhcmlhbnQ6ImdyYW50Iix0aXRsZToiQWxsb3ciLGNoaWxkcmVuOlgobTUse3NpemU6MTEsc3Ryb2tlV2lkdGg6M30pfSksWChrOCx7YWN0aXZlOkY9PT0icmV2b2tlIixwZW5kaW5nOks9PT1gJHtVfTpyZXZva2VgLG9uQ2xpY2s6KCk9Pk4oVSwicmV2b2tlIiksdmFyaWFudDoicmV2b2tlIix0aXRsZToiRGVueSIsY2hpbGRyZW46WChMMCx7c2l6ZToxMSxzdHJva2VXaWR0aDozfSl9KSxYKGs4LHthY3RpdmU6ITEscGVuZGluZzpLPT09YCR7VX06cmVzZXRgLG9uQ2xpY2s6KCk9Pk4oVSwicmVzZXQiKSx2YXJpYW50OiJyZXNldCIsdGl0bGU6IlJlc2V0IixjaGlsZHJlbjpYKCQ1LHtzaXplOjExLHN0cm9rZVdpZHRoOjIuNH0pfSldfSldfSxVKX0pfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNHB4XSBwb2ludGVyLWV2ZW50cy1ub25lIHJvdW5kZWQtdC1bMTBweF0gYmctW2xpbmVhci1ncmFkaWVudCh0b19ib3R0b20sdmFyKC0tc2VydmUtc2ltLXBhbmVsKV8wJSx2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtdHJhbnNwYXJlbnQpXzEwMCUpXSJ9KSxYKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGgtWzE0cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUgYmctW2xpbmVhci1ncmFkaWVudCh0b190b3AsdmFyKC0tc2VydmUtc2ltLXBhbmVsKV8wJSx2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtdHJhbnNwYXJlbnQpXzEwMCUpXSJ9KV19KSxYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgganVzdGlmeS1lbmQiLGNoaWxkcmVuOlgoImJ1dHRvbiIse29uQ2xpY2s6eixkaXNhYmxlZDpLPT09Il9fYWxsX18iLGNsYXNzTmFtZToiYmctdHJhbnNwYXJlbnQgYm9yZGVyIGJvcmRlci1pbmsvMTIgdGV4dC1pbmstNzAgdGV4dC1bMTBweF0gcHgtMiBweS1bM3B4XSByb3VuZGVkLVs1cHhdIGN1cnNvci1wb2ludGVyIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNGVtXSIsdGl0bGU6InNlcnZlLXNpbSBwZXJtaXNzaW9ucyByZXNldCBhbGwiLGNoaWxkcmVuOks9PT0iX19hbGxfXyI/IuKApiI6IlJlc2V0IGFsbCJ9KX0pXX0pfWZ1bmN0aW9uIGJaKCl7cmV0dXJuIFgoImRpdiIseyJkYXRhLXRlc3RpZCI6ImFwcC1wZXJtaXNzaW9ucy1sb2FkaW5nIixjbGFzc05hbWU6ImJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIHB4LTMgcHktMiIsImFyaWEtZGlzYWJsZWQiOiJ0cnVlIiwiYXJpYS1idXN5IjoidHJ1ZSIsY2hpbGRyZW46WCgiZGl2Iix7Y2xhc3NOYW1lOiJzZWxlY3Qtbm9uZSB0ZXh0LWluay01NSBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSBncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCBjdXJzb3ItZGVmYXVsdCIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJQZXJtaXNzaW9ucyJ9KSxYKCJzcGFuIix7fSksWCgic3BhbiIseyJkYXRhLXRlc3RpZCI6InBlcm1pc3Npb25zLWxvYWRpbmctaW5kaWNhdG9yIixyb2xlOiJzdGF0dXMiLCJhcmlhLWxhYmVsIjoiTG9hZGluZyBwZXJtaXNzaW9ucyIsY2xhc3NOYW1lOiJzaXplLTIuNSByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1pbmsvMzAgYm9yZGVyLXQtaW5rLzk1IGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjdzX2xpbmVhcl9pbmZpbml0ZV0ifSldfSl9KX1mdW5jdGlvbiBrOCh7YWN0aXZlOiQscGVuZGluZzpKLG9uQ2xpY2s6USx2YXJpYW50OlosdGl0bGU6SyxjaGlsZHJlbjpZfSl7bGV0IHE9Wj09PSJncmFudCI/InZhcigtLXNlcnZlLXNpbS1zdWNjZXNzKSI6Wj09PSJyZXZva2UiPyJ2YXIoLS1zZXJ2ZS1zaW0tZGFuZ2VyKSI6InZhcigtLXNlcnZlLXNpbS1hY2NlbnQpIjtyZXR1cm4gWCgiYnV0dG9uIix7b25DbGljazpRLGRpc2FibGVkOkosdGl0bGU6SywiYXJpYS1sYWJlbCI6SyxjbGFzc05hbWU6InctNiBoLTUuNSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbm9uZSByb3VuZGVkIHAtMCBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSIsc3R5bGU6e2JhY2tncm91bmQ6JD9gY29sb3ItbWl4KGluIHNyZ2IsICR7cX0gMTMlLCB0cmFuc3BhcmVudClgOiJ0cmFuc3BhcmVudCIsY29sb3I6JD9xOmQxKDAuNTUpLG9wYWNpdHk6Sj8wLjU6MX0sY2hpbGRyZW46WX0pfWZ1bmN0aW9uIEk1KHtsYWJlbDokLGNoZWNrZWQ6SixkaXNhYmxlZDpRPSExLG9uQ2hhbmdlOlp9KXtyZXR1cm4gWCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixyb2xlOiJzd2l0Y2giLCJhcmlhLWNoZWNrZWQiOkosImFyaWEtbGFiZWwiOiQsZGlzYWJsZWQ6USxvbkNsaWNrOigpPT5aKCFKKSxjbGFzc05hbWU6YHJlbGF0aXZlIGgtWzE4cHhdIHctOCBzaHJpbmstMCByb3VuZGVkLWZ1bGwgYm9yZGVyLW5vbmUgcC0wIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNdICR7UT8iY3Vyc29yLWRlZmF1bHQgYmctaW5rLzIwIjpKPyJjdXJzb3ItcG9pbnRlciBiZy10aW50IjoiY3Vyc29yLXBvaW50ZXIgYmctaW5rLzIwIn1gLGNoaWxkcmVuOlgoInNwYW4iLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC1bMnB4XSBzaXplLVsxNHB4XSByb3VuZGVkLWZ1bGwgc2hhZG93LVswXzFweF8ycHhfcmdiYSgwLDAsMCwwLjIpXSBbdHJhbnNpdGlvbjpsZWZ0XzAuMTVzXSAke1E/ImJnLXdoaXRlLzUwIjoiYmctd2hpdGUifWAsc3R5bGU6e2xlZnQ6Sj8xNjoyfX0pfSl9dmFyIHlaPSJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSIsU1o9InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC1pbmstNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIG0tMCI7ZnVuY3Rpb24gdTcoe292ZXJsYXlFbmFibGVkOiQsb25Ub2dnbGVPdmVybGF5Okp9KXtsZXR7c25hcHNob3Q6UX09QzUoKSx7aGlnaGxpZ2h0ZWRLZXk6WixzZXRIaWdobGlnaHRlZEtleTpLfT1hMigpLFk9UT8uZWxlbWVudHM/P1tdLHE9aTIoUSksVj1RPy5lcnJvcnM/LlswXT8/bnVsbDtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOmAke3lafSBweC0zIHB5LTJgLGNoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6U1osY2hpbGRyZW46IkFYIFRyZWUifSksWChJNSx7bGFiZWw6IkVuYWJsZSBvdmVybGF5IixjaGVja2VkOiQsb25DaGFuZ2U6Sn0pXX0pLCEkP251bGw6cT9YKHA3LHtjaGlsZHJlbjoiQVggdW5hdmFpbGFibGUgb24gdGhpcyBzaW11bGF0b3IuIn0pOlkubGVuZ3RoPT09MD9YKHA3LHtzcGlubmVyOiFWLGNoaWxkcmVuOlY/PyJXYWl0aW5nIGZvciBhY2Nlc3NpYmlsaXR5IGRhdGHigKYifSk6WCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIG10LTIgcHktMiBtYXgtaC1bMjYwcHhdIG92ZXJmbG93LXktYXV0byBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixyb2xlOiJsaXN0IixjaGlsZHJlbjpZLm1hcCgoRyxCKT0+e2xldCBOPWQwKEcpO3JldHVybiBYKHhaLHtlbGVtZW50OkcsaW5kZXg6QixhY3RpdmU6Tj09PVosb25IaWdobGlnaHQ6S30sTil9KX0pXX0pfWZ1bmN0aW9uIHA3KHtjaGlsZHJlbjokLHNwaW5uZXI6Sj0hMX0pe3JldHVybiBYKCJkaXYiLHtyb2xlOiJzdGF0dXMiLCJhcmlhLWxpdmUiOiJwb2xpdGUiLGNsYXNzTmFtZToibXQtMiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBweS00IHRleHQtWzEycHhdIHRleHQtaW5rLTQ1IixjaGlsZHJlbjpbSj9YKCJzcGFuIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJzaXplLTMuNSBzaHJpbmstMCByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLWluay8yMCBib3JkZXItdC1pbmsvNjAgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSJ9KTpudWxsLFgoInNwYW4iLHtjaGlsZHJlbjokfSldfSl9dmFyIHhaPWEwKGZ1bmN0aW9uKHtlbGVtZW50OkosaW5kZXg6USxhY3RpdmU6WixvbkhpZ2hsaWdodDpLfSl7bGV0IFk9ZDAoSikscT1yMihKLFEpLFY9YCR7TWF0aC5yb3VuZChKLmZyYW1lLndpZHRoKX14JHtNYXRoLnJvdW5kKEouZnJhbWUuaGVpZ2h0KX1gLEc9W3EubGFiZWwscS5yb2xlfHxxLnR5cGV8fCJlbGVtZW50IixWXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpO3JldHVybiBYKCJkaXYiLHtyb2xlOiJsaXN0aXRlbSIsdGFiSW5kZXg6MCwiZGF0YS1heC1rZXkiOlksdGl0bGU6Ryxvbk1vdXNlRW50ZXI6KCk9PksoWSksb25Nb3VzZUxlYXZlOigpPT5LKG51bGwpLG9uRm9jdXM6KCk9PksoWSksb25CbHVyOigpPT5LKG51bGwpLGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHJvdW5kZWQtbWQgcHktMSBweC0wLjUgbWluLXctMCAke1o/ImJnLWluay9bMC4wNl0iOiIifWAsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtaW5rLTkwIHRleHQtWzEycHhdIGZvbnQtbWVkaXVtIixjaGlsZHJlbjpKLmxhYmVsfHxKLnJvbGV8fCJVbmxhYmVsZWQifSksWCgic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1pbmstNDUgZm9udC1tb25vIHRleHQtWzEwcHhdIixjaGlsZHJlbjpKLnJvbGV8fEoudHlwZXx8ImVsZW1lbnQifSldfSksWCgiY29kZSIse2NsYXNzTmFtZToic2hyaW5rLTAgYmctaW5rL1swLjA0XSBib3JkZXIgYm9yZGVyLWluay84IHJvdW5kZWQtbWQgdGV4dC1pbmstNTUgZm9udC1tb25vIHRleHQtWzEwcHhdIHB4LTEuNSBweS1bM3B4XSIsY2hpbGRyZW46Vn0pXX0pfSwoJCxKKT0+JC5pbmRleD09PUouaW5kZXgmJiQuYWN0aXZlPT09Si5hY3RpdmUmJiQub25IaWdobGlnaHQ9PT1KLm9uSGlnaGxpZ2h0JiZvMigkLmVsZW1lbnQsSi5lbGVtZW50KSk7dmFyIFJaPW5ldyBTZXQoWyJpbWFnZS9qcGVnIiwiaW1hZ2UvcG5nIiwiaW1hZ2UvZ2lmIiwiaW1hZ2UvaGVpYyIsImltYWdlL2hlaWYiLCJpbWFnZS93ZWJwIiwidmlkZW8vbXA0IiwidmlkZW8vcXVpY2t0aW1lIl0pO3ZhciBCMz0iYXBwbGljYXRpb24veC1zZXJ2ZS1zaW0taG9zdC1wYXRoIjthc3luYyBmdW5jdGlvbiBsNygkLEosUSl7bGV0IFo9YXdhaXQgSigiYWRkTWVkaWEiLHt1ZGlkOlEscGF0aDokfSk7aWYoWi5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3IoWi5zdGRlcnJ8fGBhZGRtZWRpYSBmYWlsZWQgKGV4aXQgJHtaLmV4aXRDb2RlfSlgKX1mdW5jdGlvbiBFNSgkKXtsZXQgSj0kLm5hbWUsUT1KLmxhc3RJbmRleE9mKCIuIik7aWYoUT49MClyZXR1cm4gSi5zbGljZShRKzEpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTldL2csIiIpLnNsaWNlKDAsMTApfHwiYmluIjtpZigkLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpcmV0dXJuIm1wNCI7cmV0dXJuImpwZyJ9ZnVuY3Rpb24gZDcoJCl7aWYoRTUoJCk9PT0iaXBhIilyZXR1cm4iaXBhIjtpZihSWi5oYXMoJC50eXBlKSlyZXR1cm4ibWVkaWEiO3JldHVybiBudWxsfWZ1bmN0aW9uIGpaKCQpe2xldCBKPW5ldyBVaW50OEFycmF5KCQpLFE9IiI7Zm9yKGxldCBaPTA7WjxKLmxlbmd0aDtaKz0zMjc2OClRKz1TdHJpbmcuZnJvbUNoYXJDb2RlKC4uLkouc3ViYXJyYXkoWixaKzMyNzY4KSk7cmV0dXJuIGJ0b2EoUSl9YXN5bmMgZnVuY3Rpb24gYzcoJCxKLFEsWil7bGV0IEs9MDtmb3IobGV0IFk9MDtZPCQuc2l6ZTtZKz0xOTY2MDgpe2xldCBxPWF3YWl0ICQuc2xpY2UoWSxZKzE5NjYwOCkuYXJyYXlCdWZmZXIoKSxWPWpaKHEpLEc9YXdhaXQgUSgidXBsb2FkQ2h1bmsiLHtwYXRoOkosZGF0YTpWLGFwcGVuZDpZPjB9KTtpZihHLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihHLnN0ZGVycnx8YFdyaXRlIGZhaWxlZCAoZXhpdCAke0cuZXhpdENvZGV9KWApO2lmKCFaKWNvbnRpbnVlO2xldCBCPU1hdGgubWluKFkrMTk2NjA4LCQuc2l6ZSksTj1NYXRoLmZsb29yKEIvJC5zaXplKjEwMCk7aWYoTiE9PUspSz1OLFooQi8kLnNpemUpfX1hc3luYyBmdW5jdGlvbiBpNygkLEosUSxaKXtpZigkLnNpemU+NTI0Mjg4MDAwKXRocm93IEVycm9yKCJGaWxlIHRvbyBsYXJnZSAobWF4IDUwME1CKSIpO2xldCBLPWAvdG1wLyR7Sn0tJHtjcnlwdG8ucmFuZG9tVVVJRCgpfS4ke1F9YDtyZXR1cm4gYXdhaXQgYzcoJCxLLFopLEt9dmFyIHZaPSJJbnN0YWxsaW5nIGFwcHMgcmVxdWlyZXMgc2VydmUtc2ltIC0tYWxsb3ctZXhlYyI7YXN5bmMgZnVuY3Rpb24gbzcoJCxKLFEsWixLLHthbGxvd0luc3RhbGw6WT0hMH09e30pe2lmKCQuc2l6ZT41MjQyODgwMDApdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7aWYoSj09PSJpcGEiJiYhWSl0aHJvdyBFcnJvcih2Wik7bGV0IHE9Sj09PSJpcGEiPyJpcGEiOkU1KCQpLEc9YC90bXAvJHtKPT09ImlwYSI/InNlcnZlLXNpbS1pbnN0YWxsIjoic2VydmUtc2ltLXVwbG9hZCJ9LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX0uJHtxfWA7dHJ5e0soMCksYXdhaXQgYzcoJCxHLFEsSyksSyhudWxsKTtsZXQgQj1hd2FpdCBRKEo9PT0iaXBhIj8iaW5zdGFsbEFwcCI6ImFkZE1lZGlhIix7dWRpZDpaLHBhdGg6R30pO2lmKEIuZXhpdENvZGUhPT0wKXtsZXQgTj1KPT09ImlwYSI/Imluc3RhbGwiOiJhZGRtZWRpYSI7dGhyb3cgRXJyb3IoQi5zdGRlcnJ8fGAke059IGZhaWxlZCAoZXhpdCAke0IuZXhpdENvZGV9KWApfX1maW5hbGx5e1EoInVwbG9hZFJlbW92ZSIse3BhdGg6R30pLmNhdGNoKCgpPT57fSl9fXZhciBnWj0zMDAwO2FzeW5jIGZ1bmN0aW9uIGhaKCQsSj1mZXRjaCl7dHJ5e2xldCBRPWF3YWl0IEooJCx7Y2FjaGU6Im5vLXN0b3JlIn0pO2lmKCFRLm9rKXJldHVybiBudWxsO2xldCBaPWF3YWl0IFEuanNvbigpO3JldHVybiBaJiZ0eXBlb2YgWj09PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShaKT9aOm51bGx9Y2F0Y2h7cmV0dXJuIG51bGx9fXZhciBmWj0yMDk3MTUyMDAsbVo9IkxhcmdlIHZpZGVvICg+MjAwIE1CKSDigJQgbWF5IHN0dXR0ZXIgb24gc2hhcmVkIG1lbW9yeSIsbjc9IkhFSUMgZGVjb2RlIGZhaWxlZCDigJQgZXhwb3J0IGFzIEpQRUcgb3IgUE5HIGFuZCByZXRyeSI7ZnVuY3Rpb24gcFooJCxKKXtpZihKKXJldHVybiJhY3RpdmUiO2lmKCQ9PT0iYWN0aXZlIilyZXR1cm4iZGlzY29ubmVjdGVkIjtpZigkPT09ImRpc2Nvbm5lY3RlZCIpcmV0dXJuInJlYWR5IjtyZXR1cm4gJH1mdW5jdGlvbiB1WigkKXtpZighJC5pbmplY3RlZClyZXR1cm4icGxheSI7aWYoJC5zb3VyY2U9PT0icGxhY2Vob2xkZXIiKXJldHVybiJwbGF5IjtpZigkLmJ1bmRsZUlkJiYhJC5mb3JlZ3JvdW5kSXNJbmplY3RlZClyZXR1cm4iYXR0YWNoIjtyZXR1cm4ic3RvcCJ9ZnVuY3Rpb24gbFooJCl7cmV0dXJuICQuc3BsaXQoYApgKS5tYXAoKEopPT5KLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pLmZsYXRNYXAoKEopPT57bGV0IFE9Si5pbmRleE9mKCJcdCIpO2lmKFE8PTApcmV0dXJuW107bGV0IFo9Si5zbGljZSgwLFEpLnRyaW0oKSxLPUouc2xpY2UoUSsxKS50cmltKCk7aWYoIVp8fCFLKXJldHVybltdO3JldHVyblt7aWQ6WixuYW1lOkt9XX0pfXZhciBkWj1uZXcgU2V0KFsibXA0IiwibTR2IiwibW92IiwicXQiLCJhdmkiLCJta3YiLCJ3ZWJtIiwibXBnIiwibXBlZyIsIjNncCIsIjNnMiIsInRzIiwid212Il0pO2Z1bmN0aW9uIGE3KCQpe2lmKCQudHlwZSYmJC50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpKXJldHVybiEwO2xldCBKPSgkLm5hbWU/PyIiKS50b0xvd2VyQ2FzZSgpLFE9Si5sYXN0SW5kZXhPZigiLiIpO2lmKFE8MClyZXR1cm4hMTtyZXR1cm4gZFouaGFzKEouc2xpY2UoUSsxKSl9ZnVuY3Rpb24gY1ooJCl7cmV0dXJuIGE3KCQpJiYkLnNpemU+Zlp9ZnVuY3Rpb24gaVooJCl7bGV0IEo9KCQudHlwZT8/IiIpLnRvTG93ZXJDYXNlKCk7aWYoSj09PSJpbWFnZS9oZWljInx8Sj09PSJpbWFnZS9oZWlmIilyZXR1cm4hMDtsZXQgUT0oJC5uYW1lPz8iIikudG9Mb3dlckNhc2UoKTtyZXR1cm4gUS5lbmRzV2l0aCgiLmhlaWMiKXx8US5lbmRzV2l0aCgiLmhlaWYiKX1mdW5jdGlvbiBvWih7cmF3TWVzc2FnZTokLGxhc3RGaWxlSXNIZWljOkosc291cmNlOlF9KXtpZihKJiYoUT09PSJpbWFnZSJ8fFE9PT0idmlkZW8iKSlyZXR1cm4gbjc7cmV0dXJuICR9ZnVuY3Rpb24gclooe3N0YXRlOiR9KXtsZXQgSj0kPT09ImFjdGl2ZSI/IkFjdGl2ZSI6JD09PSJkaXNjb25uZWN0ZWQiPyJEaXNjb25uZWN0ZWQiOiJSZWFkeSIsUT0kPT09ImFjdGl2ZSI/InNpemUtMS41IHJvdW5kZWQtZnVsbCBiZy1zdWNjZXNzLWVtZXJhbGQgW2JveC1zaGFkb3c6MF8wXzZweF9jb2xvci1taXgoaW5fc3JnYix2YXIoLS1zZXJ2ZS1zaW0tc3VjY2VzcylfNzAlLHRyYW5zcGFyZW50KV0iOiQ9PT0iZGlzY29ubmVjdGVkIj8ic2l6ZS0xLjUgcm91bmRlZC1mdWxsIGJnLWRhbmdlci1zb2Z0IFtib3gtc2hhZG93OjBfMF82cHhfY29sb3ItbWl4KGluX3NyZ2IsdmFyKC0tc2VydmUtc2ltLWRhbmdlcilfNTUlLHRyYW5zcGFyZW50KV0iOm51bGw7cmV0dXJuIFgoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtaW5rLTU1IGZvbnQtbW9ubyBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBqdXN0aWZ5LXNlbGYtZW5kIGxlYWRpbmctbm9uZSIsImRhdGEtY2FtZXJhLXBpbGwtc3RhdGUiOiQsY2hpbGRyZW46W1EmJlgoInNwYW4iLHtjbGFzc05hbWU6UX0pLEpdfSl9ZnVuY3Rpb24gblooKXtyZXR1cm4gWCgicCIse2NsYXNzTmFtZToibS0wIHRleHQtY2VudGVyIHRleHQtWzEwcHhdIGxlYWRpbmctWzEuNV0gdGV4dC1pbmstNDUiLCJkYXRhLWNhbWVyYS10ZXN0LXBhdHRlcm4taGludCI6ITAsY2hpbGRyZW46IlRlc3QtcGF0dGVybiBmZWVkIn0pfWZ1bmN0aW9uIGFaKHttb2RlOiQsZmlsZU5hbWU6Six3ZWJjYW1OYW1lOlEsc291cmNlS2luZDpafSl7aWYoJD09PSJ1cGxvYWRpbmciKXJldHVybiBYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LWluay01NSIsY2hpbGRyZW46IlVwbG9hZGluZ+KApiJ9KTtpZigkPT09ImZpbGUiKXJldHVybiBYKEsxLHtjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCB0ZXh0LVs5cHhdIHRyYWNraW5nLVswLjFlbV0gdXBwZXJjYXNlIHRleHQtaW5rLTU1IGJnLWluay9bMC4wNl0gYm9yZGVyIGJvcmRlci1pbmsvOCBweC1bN3B4XSBweS1bMnB4XSByb3VuZGVkLWZ1bGwiLGNoaWxkcmVuOlo9PT0idmlkZW8iPyJWaWRlbyI6IkltYWdlIn0pLFgoInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4tdy0wIHRydW5jYXRlIHRleHQtWzEycHhdIHRleHQtaW5rLTkwIGZvbnQtbW9ubyIsY2hpbGRyZW46Sj8/IiJ9KV19KTtpZigkPT09IndlYmNhbSIpcmV0dXJuIFgoSzEse2NoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIHRleHQtWzlweF0gdHJhY2tpbmctWzAuMWVtXSB1cHBlcmNhc2UgdGV4dC1pbmstNTUgYmctaW5rL1swLjA2XSBib3JkZXIgYm9yZGVyLWluay84IHB4LVs3cHhdIHB5LVsycHhdIHJvdW5kZWQtZnVsbCIsY2hpbGRyZW46IldlYmNhbSJ9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCB0cnVuY2F0ZSB0ZXh0LVsxMnB4XSB0ZXh0LWluay05MCBmb250LW1vbm8iLGNoaWxkcmVuOlE/PyIifSldfSk7cmV0dXJuIFgoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtaW5rLTg1IGZvbnQtbWVkaXVtIixjaGlsZHJlbjoiU2VsZWN0IG9yIGRyb3AgbWVkaWEifSl9ZnVuY3Rpb24gcjcoe2tpbmQ6JCxtZXNzYWdlOkp9KXtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOiQ9PT0id2FybmluZyI/ImJnLXdhcm5pbmcvMTAgYm9yZGVyIGJvcmRlci13YXJuaW5nLzI1IHRleHQtd2FybmluZy1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgYnJlYWstd29yZHMiOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIGJyZWFrLXdvcmRzIiwiZGF0YS1jYW1lcmEtYmFubmVyLWtpbmQiOiQscm9sZTokPT09ImVycm9yIj8iYWxlcnQiOiJzdGF0dXMiLGNoaWxkcmVuOkp9KX1mdW5jdGlvbiBzNyh7dWRpZDokLGJ1bmRsZUlkOkp9KXtsZXRbUSxaXT1BKCExKSxbSyxZXT1BKCJwbGFjZWhvbGRlciIpLFtxLFZdPUEoIiIpLFtHLEJdPUEobnVsbCksW04sel09QSghMSksVT1UKDApLFtILEZdPUEoITEpLFtMLGtdPUEoITEpLEM9VChudWxsKSxbTyx5XT1BKFtdKSxbRSx3XT1BKCExKSxbUyxRMV09QSgiIiksW2csaF09QSgib2ZmIiksW0ksdV09QShudWxsKSxbWjEscl09QShudWxsKSxNMT1JIT09bnVsbHx8WjEhPT1udWxsLFtKMSxpXT1BKG51bGwpLFtmLFUxXT1BKG51bGwpLFssWDFdPUEobnVsbCksW0IxLEYxXT1BKCExKSxbVzEsb109QSgicmVhZHkiKSxbYyxkXT1BKCgpPT5uZXcgU2V0KSxbbixZMV09QShudWxsKSxbYixqXT1BKG51bGwpLE4xPVQoITEpLEMxPVQoITEpLHA9VCgib2ZmIiksZT1UKCExKSxrMT1QKGFzeW5jKCk9PntsZXQgVz13aW5kb3cuX19TSU1fUFJFVklFV19fPy5jYW1lcmFTdGF0dXNFbmRwb2ludDtyZXR1cm4gVz9oWihXKTpudWxsfSxbXSksUDE9VChhc3luYygpPT57fSksZzE9VChKKTtfKCgpPT57ZzEuY3VycmVudD1KfSxbSl0pLF8oKCk9PntsZXQgVz0hMTtyZXR1cm4oYXN5bmMoKT0+e2xldCBtPWF3YWl0IGsxKCk7aWYoV3x8IW18fCFtLmFsaXZlKXJldHVybjtDMS5jdXJyZW50PSEwO2xldCBhPW0uc291cmNlO2lmKGE9PT0icGxhY2Vob2xkZXIifHxhPT09IndlYmNhbSJ8fGE9PT0iaW1hZ2UifHxhPT09InZpZGVvIilZKGEpO2lmKChhPT09ImltYWdlInx8YT09PSJ2aWRlbyIpJiZtLmFyZylWKG0uYXJnKSxCKG0uYXJnLnNwbGl0KCIvIikucG9wKCk/P251bGwpO2lmKGE9PT0id2ViY2FtIiYmbS5hcmcpUTEobS5hcmcpLFAxLmN1cnJlbnQoKTtsZXQgSDE9bS5taXJyb3I9PT0ib24iPyJvbiI6Im9mZiI7aChIMSkscC5jdXJyZW50PUgxLFkxKG0uaGVscGVyUGlkPz9udWxsKSxGMSghMCk7bGV0IEExPUFycmF5LmlzQXJyYXkobS5idW5kbGVJZHMpP20uYnVuZGxlSWRzOltdO2lmKEExLmxlbmd0aD4wKWQobmV3IFNldChBMSkpO2xldCB6MT1nMS5jdXJyZW50LE8xPWEmJmEhPT0icGxhY2Vob2xkZXIiO28oejEmJkExLmluY2x1ZGVzKHoxKSYmTzE/ImFjdGl2ZSI6InJlYWR5IiksWDEoYFJlYXR0YWNoZWQg4oaSICR7YT8/InJ1bm5pbmcgaGVscGVyIn0ke20uYXJnP2AgKCR7bS5hcmd9KWA6IiJ9YCl9KSgpLCgpPT57Vz0hMH19LFskLGsxXSksXygoKT0+e2xldCBXPSExLG09ITEsYT1udWxsLEgxPWFzeW5jKCk9PntpZihXfHxtKXJldHVybjtpZih0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIilyZXR1cm47bT0hMDt0cnl7bGV0IHoxPWF3YWl0IGsxKCk7aWYoVylyZXR1cm47bGV0IE8xPSEhejE/LmFsaXZlLFgwPUFycmF5LmlzQXJyYXkoejE/LmJ1bmRsZUlkcyk/ejEuYnVuZGxlSWRzOm51bGwsaTE9ISFKJiYoWDA/WDAuaW5jbHVkZXMoSik6Yy5oYXMoSikpLG8xPXoxPy5zb3VyY2U/P251bGwsTjA9QjEmJk8xJiZpMSYmISEobzEmJm8xIT09InBsYWNlaG9sZGVyIikmJihuPT1udWxsfHx6MT8uaGVscGVyUGlkPT09bik7aWYobygoRCk9PnBaKEQsTjApKSwhTzEpRjEoKEQpPT57aWYoIUQpcmV0dXJuIEQ7cmV0dXJuIGQobmV3IFNldCksWTEobnVsbCkscC5jdXJyZW50PSJvZmYiLCExfSk7ZWxzZSBpZihCMSYmbiE9bnVsbCYmejE/LmhlbHBlclBpZCE9PW4pRjEoITEpLGQobmV3IFNldCksWTEobnVsbCkscC5jdXJyZW50PSJvZmYiO2Vsc2UgaWYoTzEmJkFycmF5LmlzQXJyYXkoejE/LmJ1bmRsZUlkcykpe2xldCBEPXoxLmJ1bmRsZUlkcztkKChNKT0+e2lmKE0uc2l6ZT09PUQubGVuZ3RoJiZELmV2ZXJ5KChSKT0+TS5oYXMoUikpKXJldHVybiBNO3JldHVybiBuZXcgU2V0KEQpfSl9fWZpbmFsbHl7bT0hMX19O2E9c2V0SW50ZXJ2YWwoKCk9PntIMSgpfSxnWik7bGV0IEExPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09InZpc2libGUiKUgxKCl9O2lmKHR5cGVvZiBkb2N1bWVudDwidSIpZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsQTEpO3JldHVybigpPT57aWYoVz0hMCxhKWNsZWFySW50ZXJ2YWwoYSk7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixBMSl9fSxbazEsQjEsbixKLGNdKTtsZXQgcDE9UChhc3luYygpPT57dyghMCksaShudWxsKTt0cnl7bGV0IFc9YXdhaXQgeDEoImNhbWVyYUxpc3RXZWJjYW1zIik7aWYoVy5leGl0Q29kZSE9PTApe2koVy5zdGRlcnIudHJpbSgpfHxgLS1saXN0LXdlYmNhbXMgZmFpbGVkICgke1cuZXhpdENvZGV9KWApO3JldHVybn1sZXQgbT1sWihXLnN0ZG91dCk7aWYoeShtKSxtLmxlbmd0aD4wJiYhUylRMShtWzBdLmlkKX1maW5hbGx5e3coITEpfX0sW1NdKTtfKCgpPT57UDEuY3VycmVudD1wMX0sW3AxXSksXygoKT0+e2lmKEwmJk8ubGVuZ3RoPT09MCYmIUUpcDEoKX0sW0wsTy5sZW5ndGgsRSxwMV0pO2xldCBqMT1QKChXKT0+e2kob1ooe3Jhd01lc3NhZ2U6VyxsYXN0RmlsZUlzSGVpYzpOMS5jdXJyZW50LHNvdXJjZTpLfSkpfSxbS10pLGExPVAoYXN5bmMoVyxtLGEpPT57bGV0IEgxPVc9PT0iaW1hZ2UifHxXPT09InZpZGVvIjtpZihIMSYmIWEudHJpbSgpKXJldHVybiBpKCJEcm9wIGEgZmlsZSBpbnRvIHRoZSBwYW5lbCBvciBwaWNrIGFub3RoZXIgc291cmNlLiIpLCExO2xldCBBMT1hd2FpdCB4MSgiY2FtZXJhU3dpdGNoIix7dWRpZDokLHNvdXJjZTpXLC4uLlc9PT0id2ViY2FtIiYmbT97d2ViY2FtSWQ6bX06e30sLi4uSDE/e2ZpbGVQYXRoOmEudHJpbSgpfTp7fX0pO2lmKEExLmV4aXRDb2RlIT09MClyZXR1cm4gajEoQTEuc3RkZXJyLnRyaW0oKXx8QTEuc3Rkb3V0LnRyaW0oKXx8YHN3aXRjaCBmYWlsZWQgKCR7QTEuZXhpdENvZGV9KWApLCExO04xLmN1cnJlbnQ9ITE7dHJ5e2xldCB6MT1KU09OLnBhcnNlKEExLnN0ZG91dC50cmltKCkpO1gxKGBTd2l0Y2hlZCDihpIgJHt6MS5zb3VyY2U/P1d9JHt6MS5hcmc/YCAoJHt6MS5hcmd9KWA6IiJ9YCl9Y2F0Y2h7WDEoYFN3aXRjaGVkIOKGkiAke1d9YCl9cmV0dXJuITB9LFskLGoxXSksazA9UChhc3luYygpPT57aWYoIUopcmV0dXJuO3UoImluamVjdCIpLGkobnVsbCksWDEobnVsbCk7dHJ5e2xldCBXPUs9PT0iaW1hZ2UifHxLPT09InZpZGVvIjtpZihXJiYhcS50cmltKCkpe2koIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIik7cmV0dXJufWxldCBtPWF3YWl0IHgxKCJjYW1lcmFJbmplY3QiLHt1ZGlkOiQsYnVuZGxlSWQ6Sixzb3VyY2U6SyxtaXJyb3I6ZywuLi5XP3tmaWxlUGF0aDpxLnRyaW0oKX06e30sLi4uSz09PSJ3ZWJjYW0iJiZTP3t3ZWJjYW1JZDpTfTp7fX0pO2lmKG0uZXhpdENvZGUhPT0wKXtqMShtLnN0ZGVyci50cmltKCl8fG0uc3Rkb3V0LnRyaW0oKXx8YGluamVjdCBmYWlsZWQgKCR7bS5leGl0Q29kZX0pYCk7cmV0dXJufU4xLmN1cnJlbnQ9ITE7bGV0IGE9bnVsbDt0cnl7bGV0IEgxPUpTT04ucGFyc2UobS5zdGRvdXQudHJpbSgpKTthPUgxLmhlbHBlclBpZD8/bnVsbDtsZXQgQTE9SDEuaGVscGVyUmVsYXVuY2hlZD09PSExPyJBdHRhY2hlZCI6IkluamVjdGVkIix6MT1IMS5waWQ/YCBwaWQgJHtIMS5waWR9YDoiIixPMT1IMS5oZWxwZXJQaWQ/YCwgaGVscGVyIHBpZCAke0gxLmhlbHBlclBpZH1gOiIiO1gxKGAke0ExfSAke0gxLnNvdXJjZT8/S30gaW50byAke0p9JHt6MX0ke08xfWApfWNhdGNoe1gxKG0uc3Rkb3V0LnRyaW0oKXx8IkluamVjdGVkLiIpfUYxKCEwKSxvKEs9PT0icGxhY2Vob2xkZXIiPyJyZWFkeSI6ImFjdGl2ZSIpLFkxKGEpLGQoKEgxKT0+SDEuaGFzKEopP0gxOm5ldyBTZXQoSDEpLmFkZChKKSkscC5jdXJyZW50PWd9ZmluYWxseXt1KG51bGwpfX0sW0osJCxLLHEsUyxnLGoxXSksVjA9QjE/YCR7S306OiR7Sz09PSJ3ZWJjYW0iP1M6IiJ9Ojoke0s9PT0iaW1hZ2UifHxLPT09InZpZGVvIj9xOiIifWA6bnVsbCxEMT0hIUomJmMuaGFzKEopLHUxPUQxJiZLIT09InBsYWNlaG9sZGVyIjtfKCgpPT57aWYoIXUxKXtlLmN1cnJlbnQ9ITE7cmV0dXJufWlmKGUuY3VycmVudClyZXR1cm47ZS5jdXJyZW50PSEwLFooITApfSxbdTFdKSxfKCgpPT57aWYoIWIpcmV0dXJuO2lmKCFKfHxNMXx8SClyZXR1cm47aWYoSyE9PSJ3ZWJjYW0ifHxTIT09YilyZXR1cm47aWYoaihudWxsKSxCMSlyZXR1cm47azAoKX0sW2IsSixNMSxILEssUyxCMSxrMF0pLF8oKCk9PntpZighQjEpcmV0dXJuO2lmKChLPT09ImltYWdlInx8Sz09PSJ2aWRlbyIpJiYhcS50cmltKCkpcmV0dXJuO2lmKEs9PT0id2ViY2FtIiYmIVMpcmV0dXJuO2lmKEMxLmN1cnJlbnQpe0MxLmN1cnJlbnQ9ITE7cmV0dXJufWxldCBXPSExO3JldHVybihhc3luYygpPT57cigic3dpdGNoIiksaShudWxsKTt0cnl7aWYoVylyZXR1cm47YXdhaXQgYTEoSyxTLHEpfWZpbmFsbHl7aWYoIVcpcihudWxsKX19KSgpLCgpPT57Vz0hMH19LFtWMF0pLF8oKCk9PntpZighQjEpcmV0dXJuO2lmKHAuY3VycmVudD09PWcpcmV0dXJuO2xldCBXPWcsbT0hMTtyZXR1cm4oYXN5bmMoKT0+e3IoIm1pcnJvciIpLGkobnVsbCk7dHJ5e2xldCBhPWF3YWl0IHgxKCJjYW1lcmFNaXJyb3IiLHt1ZGlkOiQsbWlycm9yOld9KTtpZihtKXJldHVybjtpZihhLmV4aXRDb2RlIT09MCl7aShhLnN0ZGVyci50cmltKCl8fGEuc3Rkb3V0LnRyaW0oKXx8YG1pcnJvciBmYWlsZWQgKCR7YS5leGl0Q29kZX0pYCk7cmV0dXJufXAuY3VycmVudD1XLFgxKGBNaXJyb3Ig4oaSICR7V31gKX1maW5hbGx5e2lmKCFtKXIobnVsbCl9fSkoKSwoKT0+e209ITB9fSxbZyxCMV0pO2xldCBDMD1QKGFzeW5jKCk9Pnt1KCJzdG9wIiksaShudWxsKTt0cnl7bGV0IFc9YXdhaXQgeDEoImNhbWVyYVN0b3AiLHt1ZGlkOiR9KTtpZihXLmV4aXRDb2RlIT09MCl7aShXLnN0ZGVyci50cmltKCl8fGBzdG9wLXdlYmNhbSBmYWlsZWQgKCR7Vy5leGl0Q29kZX0pYCk7cmV0dXJufVgxKCJDYW1lcmEgaGVscGVyIHN0b3BwZWQuIiksRjEoITEpLG8oInJlYWR5IiksZChuZXcgU2V0KSxwLmN1cnJlbnQ9Im9mZiJ9ZmluYWxseXt1KG51bGwpfX0sWyRdKSxWMT1QKGFzeW5jKFcpPT57bGV0IG09aVooe3R5cGU6Vy50eXBlLG5hbWU6Vy5uYW1lfSksYT1XLnR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIil8fG0sSDE9Vy50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpfHxhNyh7dHlwZTpXLnR5cGUsbmFtZTpXLm5hbWV9KTtpZighYSYmIUgxKXtOMS5jdXJyZW50PSExLGkoYFVuc3VwcG9ydGVkIGZpbGUgdHlwZTogJHtXLnR5cGV8fFcubmFtZX1gKTtyZXR1cm59aWYoRighMCksaShudWxsKSxVMShudWxsKSxjWih7dHlwZTpXLnR5cGUsbmFtZTpXLm5hbWUsc2l6ZTpXLnNpemV9KSlVMShtWik7TjEuY3VycmVudD1tO3RyeXtsZXQgQTE9RTUoVyksejE9YXdhaXQgaTcoVywic2VydmUtc2ltLWNhbXNyYyIsQTEseDEpO0IoVy5uYW1lKSxZKEgxPyJ2aWRlbyI6ImltYWdlIiksVih6MSksWDEoYExvYWRlZCAke1cubmFtZX1gKX1jYXRjaChBMSl7aWYoTjEuY3VycmVudClpKG43KTtlbHNlIGkoQTE/Lm1lc3NhZ2U/PyJVcGxvYWQgZmFpbGVkIil9ZmluYWxseXtGKCExKX19LFtdKSxaMD1QKGFzeW5jKFcpPT57Vy5wcmV2ZW50RGVmYXVsdCgpLFcuc3RvcFByb3BhZ2F0aW9uKCksVS5jdXJyZW50PTAseighMSk7bGV0IG09Vy5kYXRhVHJhbnNmZXI/LmZpbGVzPy5bMF07aWYobSlhd2FpdCBWMShtKX0sW1YxXSksYjA9UCgoKT0+e1koInBsYWNlaG9sZGVyIiksVigiIiksQihudWxsKSxpKG51bGwpLFUxKG51bGwpLE4xLmN1cnJlbnQ9ITF9LFtdKSxoMT1QKCgpPT57Qy5jdXJyZW50Py5jbGljaygpfSxbXSksYzE9UChhc3luYyhXKT0+e2xldCBtPVcudGFyZ2V0LGE9bS5maWxlcz8uWzBdO2lmKG0udmFsdWU9IiIsYSlhd2FpdCBWMShhKX0sW1YxXSk7XygoKT0+e2lmKCFMKXJldHVybjtsZXQgVz0obSk9PntsZXQgYT1tLnRhcmdldDtpZihhIGluc3RhbmNlb2YgRWxlbWVudCYmYS5jbG9zZXN0KCJbZGF0YS1jYW1lcmEtc291cmNlLW1lbnVdIikpcmV0dXJuO2soITEpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsVyksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLFcpfSxbTF0pO2xldCBzMT1QKChXKT0+e2lmKFExKFcuaWQpLFkoIndlYmNhbSIpLEIobnVsbCksaShudWxsKSxOMS5jdXJyZW50PSExLGsoITEpLEopaihXLmlkKX0sW0pdKSxlMT1QKCgpPT57aCgoVyk9Plc9PT0ib24iPyJvZmYiOiJvbiIpfSxbXSksdDE9IUIxfHxLPT09InBsYWNlaG9sZGVyIix5MD1QKChXKT0+e2lmKFcucHJldmVudERlZmF1bHQoKSxVLmN1cnJlbnQrKyxVLmN1cnJlbnQ9PT0xKXooITApfSxbXSksdjA9UCgoVyk9PntpZihXLnByZXZlbnREZWZhdWx0KCksVy5kYXRhVHJhbnNmZXIpVy5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0iY29weSJ9LFtdKSxTMD1QKChXKT0+e2lmKFcucHJldmVudERlZmF1bHQoKSxVLmN1cnJlbnQtLSxVLmN1cnJlbnQ8PTApVS5jdXJyZW50PTAseighMSl9LFtdKSwkMD11Wih7YnVuZGxlSWQ6SixpbmplY3RlZDpCMSxzb3VyY2U6Syxmb3JlZ3JvdW5kSXNJbmplY3RlZDpEMX0pLEUxPSQwPT09InN0b3AiP3tsYWJlbDpJPT09InN0b3AiPyJTdG9wcGluZ+KApiI6IlN0b3AiLG9uQ2xpY2s6QzAsa2luZDoic3RvcCJ9OiQwPT09ImF0dGFjaCI/e2xhYmVsOkk9PT0iaW5qZWN0Ij8iSW5qZWN0aW5n4oCmIjpgSW5qZWN0ICR7Sn1gLG9uQ2xpY2s6azAsa2luZDoiYXR0YWNoIn06e2xhYmVsOkk9PT0iaW5qZWN0Ij8iU3RhcnRpbmfigKYiOiJQbGF5IixvbkNsaWNrOmswLGtpbmQ6InBsYXkifSxHMD0kMD09PSJzdG9wIj9IfHxJIT09bnVsbDohSnx8SHx8SSE9PW51bGwsZjE9Sz09PSJwbGFjZWhvbGRlciIsQjA9Sz09PSJ3ZWJjYW0iLEYwPShLPT09ImltYWdlInx8Sz09PSJ2aWRlbyIpJiYhIUcsUTA9QjA/Ty5maW5kKChXKT0+Vy5pZD09PVMpPy5uYW1lPz9TPz8iV2ViY2FtIjpudWxsLEEwPUg/InVwbG9hZGluZyI6RjA/ImZpbGUiOkIwPyJ3ZWJjYW0iOiJwbGFjZWhvbGRlciI7cmV0dXJuIFgocTAse29wZW46USxvbk9wZW5DaGFuZ2U6Wixib2R5Q2xhc3NOYW1lOiJwdC0yLjUiLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OlgoSzEse2NoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtaW5rLTUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiQ2FtZXJhIn0pLFgoclose3N0YXRlOlcxfSldfSksY2hpbGRyZW46WCgiZGl2Iix7b25EcmFnRW50ZXI6eTAsb25EcmFnT3Zlcjp2MCxvbkRyYWdMZWF2ZTpTMCxvbkRyb3A6WjAsY2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0yLjUiLGNoaWxkcmVuOltYKCJwIix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1bMTBweF0gbGVhZGluZy1bMS41XSB0ZXh0LWluay00NSIsY2hpbGRyZW46IlJlcGxhY2VzIHRoZSBzaW11bGF0b3IncyBjYW1lcmEgZmVlZCBieSBpbmplY3RpbmcgYSBkeWxpYiBhdCBhcHAgbGF1bmNoIGFuZCBzdHJlYW1pbmcgZnJhbWVzIGludG8gc2hhcmVkIG1lbW9yeS4gUGljayBtZWRpYSBvciBhIHdlYmNhbSwgdGhlbiBQbGF5IHRvIGluamVjdCBpbnRvIHRoZSBmb3JlZ3JvdW5kIGFwcC4ifSksWCgiaW5wdXQiLHtyZWY6Qyx0eXBlOiJmaWxlIixhY2NlcHQ6ImltYWdlLyosdmlkZW8vKiIsY2xhc3NOYW1lOiJoaWRkZW4iLG9uQ2hhbmdlOmMxfSksWCgiZGl2Iix7b25DbGljazooVyk9PntpZighZjEpcmV0dXJuO2lmKFcudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLWNsZWFyLW1lZGlhXSIpKXJldHVybjtoMSgpfSx0aXRsZTpmMT8iTm8gc291cmNlIHNlbGVjdGVkIOKAlCBQbGF5IHVzZXMgYSB0ZXN0LXBhdHRlcm4gZmVlZC4gQ2xpY2sgdG8gcGljayBhbiBpbWFnZS92aWRlbywgb3IgZHJvcCBvbmUgaGVyZS4iOkIwP2BTb3VyY2U6ICR7UTB9YDpgU291cmNlOiAke0c/P0t9YCxjbGFzc05hbWU6WyJyZWxhdGl2ZSBtaW4taC1bNDRweF0gZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIuNSBweC0zLjUgcHktMi41IHJvdW5kZWQtWzdweF0gdGV4dC1jZW50ZXIgdHJhbnNpdGlvbi1bYm9yZGVyLWNvbG9yLGJhY2tncm91bmRdIGR1cmF0aW9uLTE1MCIsZjE/ImJnLWluay9bMC4wNF0gYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLWluay8xMiI6ImJnLWluay9bMC4wNF0gYm9yZGVyIGJvcmRlci1pbmsvOCIsTj8iIWJnLXRpbnQvOCAhYm9yZGVyLXRpbnQvNjAiOiIiLEg/ImN1cnNvci1wcm9ncmVzcyI6ZjE/ImN1cnNvci1wb2ludGVyIjoiY3Vyc29yLWRlZmF1bHQiXS5qb2luKCIgIiksY2hpbGRyZW46W1goYVose21vZGU6QTAsZmlsZU5hbWU6Ryx3ZWJjYW1OYW1lOlEwLHNvdXJjZUtpbmQ6S30pLCFmMSYmIUgmJlgoImJ1dHRvbiIseyJkYXRhLWNsZWFyLW1lZGlhIjohMCxvbkNsaWNrOihXKT0+e1cuc3RvcFByb3BhZ2F0aW9uKCksYjAoKX0sY2xhc3NOYW1lOiJzaHJpbmstMCB3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtaW5rLTU1IGhvdmVyOnRleHQtaW5rLTkwIGN1cnNvci1wb2ludGVyIHAtMCIsImFyaWEtbGFiZWwiOiJDbGVhciBzb3VyY2UiLHRpdGxlOiJDbGVhciDihpIgcGxhY2Vob2xkZXIiLGNoaWxkcmVuOlgoTDAse3NpemU6MTQsc3Ryb2tlV2lkdGg6Mn0pfSldfSksZjEmJiFIJiZYKG5aLHt9KSxYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtc3RyZXRjaCBnYXAtMS41IixjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSIsImRhdGEtY2FtZXJhLXNvdXJjZS1tZW51IjohMCxjaGlsZHJlbjpbWCgiYnV0dG9uIix7b25DbGljazooKT0+aygoVyk9PiFXKSxjbGFzc05hbWU6ImgtZnVsbCBtaW4taC1bMzZweF0gdy0xMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLWluay8xMiB0ZXh0LWluay04NSByb3VuZGVkLVs3cHhdIGN1cnNvci1wb2ludGVyIHAtMCBob3ZlcjpiZy1pbmsvWzAuMDZdIGhvdmVyOmJvcmRlci1pbmsvMjAgaG92ZXI6dGV4dC1pbmsiLCJhcmlhLWhhc3BvcHVwIjoibWVudSIsImFyaWEtZXhwYW5kZWQiOkwsdGl0bGU6Sz09PSJ3ZWJjYW0iP2BTb3VyY2U6IHdlYmNhbSR7Uz9gICgke08uZmluZCgoVyk9PlcuaWQ9PT1TKT8ubmFtZT8/U30pYDoiIn0g4oCUIGNsaWNrIHRvIGNoYW5nZWA6YFNvdXJjZTogJHtLfSDigJQgY2xpY2sgdG8gcGljayBtZWRpYSBvciB3ZWJjYW1gLCJhcmlhLWxhYmVsIjoiQ2hvb3NlIGNhbWVyYSBzb3VyY2UiLGNoaWxkcmVuOlgobzUse3NpemU6MjAsc3Ryb2tlV2lkdGg6Mn0pfSksTCYmWCgiZGl2Iix7cm9sZToibWVudSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtW2NhbGMoMTAwJSs2cHgpXSBsZWZ0LTAgei0xMCBtaW4tdy1bMjAwcHhdIGZsZXggZmxleC1jb2wgZ2FwLXB4IHAtMSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLWluay84IHJvdW5kZWQtWzdweF0gc2hhZG93LXBvcG92ZXIiLGNoaWxkcmVuOltYKCJidXR0b24iLHtyb2xlOiJtZW51aXRlbSIsY2xhc3NOYW1lOiJ0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC1pbmstODUgdGV4dC1bMTJweF0gcHgtMi41IHB5LVs3cHhdIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctaW5rL1swLjA2XSIsb25DbGljazooKT0+e2soITEpLGgxKCl9LHRpdGxlOiJQaWNrIGFuIGltYWdlIG9yIHZpZGVvIGZyb20gZGlzayIsY2hpbGRyZW46IkJyb3dzZSBtZWRpYeKApiJ9KSxYKCJkaXYiLHtjbGFzc05hbWU6ImgtcHggYmctaW5rLzggbXktMSJ9KSxYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBwbC0yLjUgcHItMiBwdC0xIHBiLVsycHhdIixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC1pbmstNDUgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIixjaGlsZHJlbjpFPyJDYW1lcmFzIChsb2FkaW5n4oCmKSI6Ty5sZW5ndGg9PT0wPyJObyBjYW1lcmFzIjoiQ2FtZXJhcyJ9KSxYKCJidXR0b24iLHtvbkNsaWNrOihXKT0+e1cuc3RvcFByb3BhZ2F0aW9uKCkscDEoKX0sZGlzYWJsZWQ6RSxjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctWzIycHhdIGgtWzIycHhdIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtWzVweF0gdGV4dC1pbmstNTUgaG92ZXI6dGV4dC1pbmstOTAgY3Vyc29yLXBvaW50ZXIgcC0wIGRpc2FibGVkOm9wYWNpdHktNTAiLCJhcmlhLWxhYmVsIjoiUmVmcmVzaCBjYW1lcmFzIix0aXRsZToiUmVmcmVzaCBjYW1lcmFzIixjaGlsZHJlbjpYKCQ1LHtzaXplOjEzLHN0cm9rZVdpZHRoOjJ9KX0pXX0pLE8ubWFwKChXKT0+e2xldCBtPUs9PT0id2ViY2FtIiYmUz09PVcuaWQ7cmV0dXJuIFgoImJ1dHRvbiIse3JvbGU6Im1lbnVpdGVtIixjbGFzc05hbWU6WyJ0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC1bMTJweF0gcHgtMi41IHB5LVs3cHhdIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctaW5rL1swLjA2XSIsbT8iIWJnLWluay9bMC4xMl0gIXRleHQtaW5rIjoidGV4dC1pbmstODUiXS5qb2luKCIgIiksb25DbGljazooKT0+czEoVyksdGl0bGU6Vy5uYW1lLGNoaWxkcmVuOlcubmFtZX0sVy5pZCl9KV19KV19KSxYKCJidXR0b24iLHtvbkNsaWNrOkUxLm9uQ2xpY2ssZGlzYWJsZWQ6RzAsY2xhc3NOYW1lOlsiZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGRpc2FibGVkOm9wYWNpdHktNTAgbWluLWgtWzM2cHhdIixFMS5raW5kPT09InN0b3AiPyJiZy1pbmsvWzAuMTZdIHRleHQtaW5rIGVuYWJsZWQ6aG92ZXI6YmctaW5rL1swLjIyXSI6ImJnLXN1Y2Nlc3MtZW1lcmFsZCB0ZXh0LW9uLXN1Y2Nlc3MgZW5hYmxlZDpob3ZlcjpicmlnaHRuZXNzLVsxLjA4XSJdLmpvaW4oIiAiKSx0aXRsZTpFMS5raW5kPT09InN0b3AiPyJTdG9wIHRoZSBjYW1lcmEgaGVscGVyIGFuZCB0ZXJtaW5hdGUgaW5qZWN0ZWQgYXBwcyI6RTEua2luZD09PSJhdHRhY2giP2BJbmplY3QgJHtKfSBzbyBpdCBqb2lucyB0aGUgY2FtZXJhIGZlZWRgOiFKPyJCcmluZyBhbiBhcHAgdG8gdGhlIGZvcmVncm91bmQgZmlyc3QiOiJTdGFydDogaW5qZWN0IHRoZSBkeWxpYiBhbmQgbGF1bmNoIHRoZSBmb3JlZ3JvdW5kIGFwcCB3aXRoIHRoZSBjaG9zZW4gc291cmNlIiwiYXJpYS1wcmVzc2VkIjpFMS5raW5kPT09InN0b3AiLCJhcmlhLWxhYmVsIjpFMS5raW5kPT09InN0b3AiPyJTdG9wIjoiUGxheSIsY2hpbGRyZW46W0UxLmtpbmQ9PT0ic3RvcCI/WCh6Mix7fSk6WChCMix7fSksWCgic3BhbiIse2NoaWxkcmVuOkUxLmtpbmQ9PT0ic3RvcCI/IlN0b3AiOkUxLmtpbmQ9PT0iYXR0YWNoIj8iSW5qZWN0IjoiUGxheSJ9KV19KSxYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6ZTEsZGlzYWJsZWQ6dDEsY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LTEwIG1pbi1oLVszNnB4XSBib3JkZXIgcm91bmRlZC1bN3B4XSBmb250LVtpbmhlcml0XSBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBhY3RpdmU6c2NhbGUtWzAuOTddICR7Zz09PSJvbiI/ImJnLWluayBib3JkZXItaW5rIHRleHQtaW5rLWludmVyc2UgY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy1pbmsvWzAuODhdIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLWluay9bMC44OF0gZW5hYmxlZDpob3Zlcjp0ZXh0LWluay1pbnZlcnNlIjoiYmctaW5rL1swLjA0XSBib3JkZXItaW5rLzggdGV4dC1pbmstODUgY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy1pbmsvWzAuMDldIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLWluay8xOCBlbmFibGVkOmhvdmVyOnRleHQtaW5rIn1gLCJhcmlhLWxhYmVsIjpgTWlycm9yOiAke2d9IOKAlCB0YXAgdG8gdG9nZ2xlYCx0aXRsZTp0MT8iTWlycm9yIHRvZ2dsZSBhdmFpbGFibGUgb25jZSBhIHNvdXJjZSBpcyBzdHJlYW1pbmciOmBNaXJyb3I6ICR7Z30g4oCUIGNsaWNrIHRvIHRvZ2dsZWAsImFyaWEtcHJlc3NlZCI6Zz09PSJvbiIsY2hpbGRyZW46WChjNSx7c2l6ZToyMCxzdHJva2VXaWR0aDoyLGZpbGw6Zz09PSJvbiI/ImN1cnJlbnRDb2xvciI6Im5vbmUifSl9KV19KSxmJiZYKHI3LHtraW5kOiJ3YXJuaW5nIixtZXNzYWdlOmZ9KSxKMSYmWChyNyx7a2luZDoiZXJyb3IiLG1lc3NhZ2U6SjF9KV19KX0pfXZhciB0Nz01MDA7ZnVuY3Rpb24gZTcoe3VkaWQ6JCxldmVudHNFbmRwb2ludDpKfSl7bGV0W1EsWl09QSghMSksW0ssWV09QShbXSksW3EsVl09QSghMSksRz1SMSgoKT0+Sj8/YCR7YjEoImFwaS9ldmVudC1sb2cvZXZlbnRzIil9P2RldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX1gLFtKLCRdKTtfKCgpPT57VighMSksWShbXSk7bGV0IE49SjUoRyk7cmV0dXJuIE4ub25tZXNzYWdlPSh7ZGF0YTp6fSk9Pnt0cnl7bGV0IFU9SlNPTi5wYXJzZSh6KTtpZihWKCExKSxBcnJheS5pc0FycmF5KFUuZXZlbnRzKSlZKFUuZXZlbnRzLnNsaWNlKC10NykpO2Vsc2UgaWYoVS5ldmVudClZKChIKT0+e3JldHVyblsuLi5ILmZpbHRlcigoTCk9PkwuaWQhPT1VLmV2ZW50LmlkKSxVLmV2ZW50XS5zbGljZSgtdDcpfSl9Y2F0Y2h7fX0sTi5vbmVycm9yPSgpPT5WKCEwKSwoKT0+Ti5jbG9zZSgpfSxbR10pO2xldCBCPVIxKCgpPT5LLnNsaWNlKCkucmV2ZXJzZSgpLFtLXSk7cmV0dXJuIFgocTAse29wZW46USxvbk9wZW5DaGFuZ2U6WiwiZGF0YS1ldmVudC1sb2ciOiIiLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OlgoSzEse2NoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtaW5rLTUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUiLGNoaWxkcmVuOiJFdmVudCBMb2cifSksWCgic3BhbiIse30pLFgoInNwYW4iLHtjbGFzc05hbWU6InJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1pbmsvOCBiZy1pbmsvWzAuMDRdIHB4LTEuNSBweS1bM3B4XSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gdGV4dC1pbmstNjAiLGNoaWxkcmVuOksubGVuZ3RofSldfSksY2hpbGRyZW46Qi5sZW5ndGg9PT0wP1goImRpdiIse3JvbGU6InN0YXR1cyIsImFyaWEtbGl2ZSI6InBvbGl0ZSIsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS00IHRleHQtWzEycHhdIHRleHQtaW5rLTQ1IixjaGlsZHJlbjpxPyJEaXNjb25uZWN0ZWQiOiJObyBldmVudHMgeWV0In0pOlgoImRpdiIse2NsYXNzTmFtZToiZmxleCBtYXgtaC1bMzIwcHhdIGZsZXgtY29sIGdhcC0xIG92ZXJmbG93LXktYXV0byBweS0wLjUgW3Njcm9sbGJhci13aWR0aDp0aGluXSIscm9sZToibGlzdCIsY2hpbGRyZW46Qi5tYXAoKE4pPT5YKHNaLHtldmVudDpOfSxOLmlkKSl9KX0pfWZ1bmN0aW9uIHNaKHtldmVudDokfSl7bGV0IEo9dFooJC50aW1lc3RhbXApLFE9WyQuc291cmNlLCQua2luZCwkLmFjdGlvbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAvICIpLFo9JC5tc2c/PyQuc3VtbWFyeSxLPSQuc3RhdHVzPT09ImVycm9yIj8iYm9yZGVyLWRhbmdlci81MCBiZy1kYW5nZXIvMTAgdGV4dC1kYW5nZXItc29mdCI6ImJvcmRlci1pbmsvOCBiZy1pbmsvWzAuMDRdIHRleHQtaW5rLTUwIjtyZXR1cm4gWCgiZGl2Iix7cm9sZToibGlzdGl0ZW0iLHRpdGxlOlEsY2xhc3NOYW1lOiJncmlkIGdyaWQtY29scy1bNTZweF8xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbWQgcHgtMS41IHB5LTEuNSB0ZXh0LVsxMnB4XSBsZWFkaW5nLXRpZ2h0IGhvdmVyOmJnLWluay9bMC4wNV0iLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJmb250LW1vbm8gdGV4dC1bMTBweF0gdGV4dC1pbmstNDUiLGNoaWxkcmVuOkp9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1pbmstOTAiLGNoaWxkcmVuOlp9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJtdC0wLjUgYmxvY2sgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgZm9udC1tb25vIHRleHQtWzEwcHhdIHRleHQtaW5rLTQwIixjaGlsZHJlbjpRfSldfSksJC5zdGF0dXM/WCgic3BhbiIse2NsYXNzTmFtZTpgcm91bmRlZC1tZCBib3JkZXIgcHgtMS41IHB5LVszcHhdIHRleHQtWzEwcHhdIGZvbnQtbW9ubyAke0t9YCxjaGlsZHJlbjokLnN0YXR1c30pOm51bGxdfSl9ZnVuY3Rpb24gdFooJCl7bGV0IEo9bmV3IERhdGUoJCk7aWYoTnVtYmVyLmlzTmFOKEouZ2V0VGltZSgpKSlyZXR1cm4iIjtyZXR1cm4gSi50b0xvY2FsZVRpbWVTdHJpbmcoW10se2hvdXI6IjItZGlnaXQiLG1pbnV0ZToiMi1kaWdpdCIsc2Vjb25kOiIyLWRpZ2l0In0pfXZhciBIMj1bImV4dHJhLXNtYWxsIiwic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsImV4dHJhLWxhcmdlIiwiZXh0cmEtZXh0cmEtbGFyZ2UiLCJleHRyYS1leHRyYS1leHRyYS1sYXJnZSJdLGVaPTI1MCwkWD17YXBwZWFyYW5jZToibGlnaHQiLCJsaXF1aWQtZ2xhc3MiOiJjbGVhciIsImNvbG9yLWZpbHRlciI6Im5vbmUiLCJ0ZXh0LXNpemUiOiJsYXJnZSIsInJlZHVjZS1tb3Rpb24iOiJvZmYiLCJpbmNyZWFzZS1jb250cmFzdCI6Im9mZiIsInNob3ctYm9yZGVycyI6Im9mZiIsInJlZHVjZS10cmFuc3BhcmVuY3kiOiJvZmYiLHZvaWNlb3Zlcjoib2ZmIn0sQzg9e2FwcGVhcmFuY2U6W3t2YWx1ZToibGlnaHQiLGxhYmVsOiJMaWdodCJ9LHt2YWx1ZToiZGFyayIsbGFiZWw6IkRhcmsifV0sImxpcXVpZC1nbGFzcyI6W3t2YWx1ZToiY2xlYXIiLGxhYmVsOiJDbGVhciJ9LHt2YWx1ZToidGludGVkIixsYWJlbDoiVGludGVkIn1dLCJjb2xvci1maWx0ZXIiOlt7dmFsdWU6Im5vbmUiLGxhYmVsOiJOb25lIn0se3ZhbHVlOiJyZWQtZ3JlZW4iLGxhYmVsOiJSZWQvR3JlZW4gKFByb3Rhbm9waWEpIn0se3ZhbHVlOiJncmVlbi1yZWQiLGxhYmVsOiJHcmVlbi9SZWQgKERldXRlcmFub3BpYSkifSx7dmFsdWU6ImJsdWUteWVsbG93IixsYWJlbDoiQmx1ZS9ZZWxsb3cgKFRyaXRhbm9waWEpIn0se3ZhbHVlOiJncmF5c2NhbGUiLGxhYmVsOiJHcmF5c2NhbGUifV19LEpYPVt7a2V5OiJyZWR1Y2UtbW90aW9uIixsYWJlbDoiUmVkdWNlIE1vdGlvbiJ9LHtrZXk6ImluY3JlYXNlLWNvbnRyYXN0IixsYWJlbDoiSW5jcmVhc2UgQ29udHJhc3QifSx7a2V5OiJzaG93LWJvcmRlcnMiLGxhYmVsOiJTaG93IEJvcmRlcnMifSx7a2V5OiJyZWR1Y2UtdHJhbnNwYXJlbmN5IixsYWJlbDoiUmVkdWNlIFRyYW5zcGFyZW5jeSJ9LHtrZXk6InZvaWNlb3ZlciIsbGFiZWw6IlZvaWNlT3ZlciJ9XTtmdW5jdGlvbiBjMCh7aWNvbjokLGxhYmVsOkosY2hpbGRyZW46UX0pe3JldHVybiBYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBtaW4taC1bMzBweF0iLCJkYXRhLXNldHRpbmctcm93IjpKLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LVsxMnB4XSB0ZXh0LWluay05MCB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6ImZsZXggc2l6ZS1bMThweF0gaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtaW5rIixjaGlsZHJlbjokfSksSl19KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IG1pbi13LTAganVzdGlmeS1lbmQiLGNoaWxkcmVuOlF9KV19KX1mdW5jdGlvbiBRWCh7dmFsdWU6JCxkaXNhYmxlZDpKLG9uQ2hhbmdlOlF9KXtsZXRbWixLXT1BKG51bGwpLFk9VChudWxsKSxxPVQobnVsbCksVj1QKChVKT0+e2lmKHEuY3VycmVudD09PVUpcmV0dXJuO3EuY3VycmVudD1VLFEoVSl9LFtRXSksRz1QKChVKT0+e2lmKEsoVSksWS5jdXJyZW50KWNsZWFyVGltZW91dChZLmN1cnJlbnQpO1kuY3VycmVudD1zZXRUaW1lb3V0KCgpPT5WKFUpLGVaKX0sW1ZdKSxCPVAoKCk9PntpZihZLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFkuY3VycmVudCksWS5jdXJyZW50PW51bGw7SygoVSk9PntpZihVIT09bnVsbClWKFUpO3JldHVybiBudWxsfSkscS5jdXJyZW50PW51bGx9LFtWXSksTj1IMi5sZW5ndGgtMTtyZXR1cm4gWCgic3BhbiIse2NsYXNzTmFtZToiZmxleCB3LVsxMjBweF0gbWluLXctMCBmbGV4LWNvbCIsY2hpbGRyZW46W1gobDIseyJhcmlhLWxhYmVsIjoiVGV4dCBTaXplIixtaW46MCxtYXg6TixzdGVwOjEsdmFsdWU6Wj8/JCxkaXNhYmxlZDpKLG9uQ2hhbmdlOihVKT0+RyhOdW1iZXIoVS50YXJnZXQudmFsdWUpKSxvblBvaW50ZXJVcDpCLG9uS2V5VXA6QixvbkJsdXI6Qn0pLFgoInNwYW4iLHsiYXJpYS1oaWRkZW4iOiEwLGNsYXNzTmFtZToicG9pbnRlci1ldmVudHMtbm9uZSBtdC1bM3B4XSBmbGV4IGp1c3RpZnktYmV0d2VlbiBweC1bNS41cHhdIixjaGlsZHJlbjpIMi5tYXAoKFUpPT5YKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLVsycHhdIHJvdW5kZWQtZnVsbCBiZy1pbmsvNDAifSxVKSl9KV19KX1mdW5jdGlvbiBrMih7bGFiZWw6JCx2YWx1ZTpKLG9wdGlvbnM6USxkaXNhYmxlZDpaLG9uQ2hhbmdlOkt9KXtyZXR1cm4gWChHMyx7bGFiZWw6JCx2YWx1ZTpKLG9wdGlvbnM6USxkaXNhYmxlZDpaLG9uQ2hhbmdlOkssY2xhc3NOYW1lOiJiZy1pbmsvWzAuMDZdIGJvcmRlciBib3JkZXItaW5rLzEwIHJvdW5kZWQtbWQgdGV4dC1pbmstOTAgdGV4dC1bMTJweF0gcHktMC41IHB4LTIgbWluLXctMCBtYXgtdy1bMTUwcHhdIGRpc2FibGVkOnRleHQtaW5rLTQwIn0pfXZhciBMMj17YXBwZWFyYW5jZTpYKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbWCgicGF0aCIse2Q6Ik0xMiAydjIifSksWCgicGF0aCIse2Q6Ik0xNC44MzcgMTYuMzg1YTYgNiAwIDEgMS03LjIyMy03LjIyMmMuNjI0LS4xNDcuOTcuNjYuNzE1IDEuMjQ4YTQgNCAwIDAgMCA1LjI2IDUuMjU5Yy41ODktLjI1NSAxLjM5Ni4wOSAxLjI0OC43MTUifSksWCgicGF0aCIse2Q6Ik0xNiAxMmE0IDQgMCAwIDAtNC00In0pLFgoInBhdGgiLHtkOiJtMTkgNS0xLjI1NiAxLjI1NiJ9KSxYKCJwYXRoIix7ZDoiTTIwIDEyaDIifSldfSksZ2xhc3M6WCgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjIwIDIyMCIsZmlsbDoiY3VycmVudENvbG9yIixzdHJva2U6Im5vbmUiLGNoaWxkcmVuOltYKCJwYXRoIix7ZDoiTTE1MiAxODNWMTk1SDEwMFYxODNIMTUyWk0xOTYgMTM5VjEyNkMxOTYgMTAxLjY5OSAxNzYuMzAxIDgyIDE1MiA4MkgxMDBDNzUuNjk5NSA4MiA1NiAxMDEuNjk5IDU2IDEyNlYxMzlDNTYgMTYzLjMwMSA3NS42OTk1IDE4MyAxMDAgMTgzVjE5NUw5OS4yNzY0IDE5NC45OTVDNjguOTIyOCAxOTQuNjExIDQ0LjM4OTMgMTcwLjA3NyA0NC4wMDQ5IDEzOS43MjRMNDQgMTM5VjEyNkM0NCA5NS4wNzIxIDY5LjA3MjEgNzAgMTAwIDcwSDE1MkMxODIuOTI4IDcwIDIwOCA5NS4wNzIxIDIwOCAxMjZWMTM5TDIwNy45OTUgMTM5LjcyNEMyMDcuNjExIDE3MC4wNzcgMTgzLjA3NyAxOTQuNjExIDE1Mi43MjQgMTk0Ljk5NUwxNTIgMTk1VjE4M0MxNzYuMzAxIDE4MyAxOTYgMTYzLjMwMSAxOTYgMTM5WiJ9KSxYKCJwYXRoIix7ZDoiTTEzNiAyNUMxNDcuMDQ2IDI1IDE1NiAzMy45NTQzIDE1NiA0NVY3MEgxNDNWNDVDMTQzIDQxLjEzNCAxMzkuODY2IDM4IDEzNiAzOEg0MUMzNy4xMzQgMzggMzQgNDEuMTM0IDM0IDQ1VjE0MEMzNCAxNDMuODY2IDM3LjEzNCAxNDcgNDEgMTQ3SDQ0Ljg2MDRDNDUuNjQ4NyAxNTEuNTM2IDQ2Ljk2MzQgMTU1Ljg5MSA0OC43NDAyIDE2MEg0MUw0MC40ODM0IDE1OS45OTNDMjkuODQ4MSAxNTkuNzI0IDIxLjI3NjUgMTUxLjE1MiAyMS4wMDY4IDE0MC41MTdMMjEgMTQwVjQ1QzIxIDMzLjk1NDMgMjkuOTU0MyAyNSA0MSAyNUgxMzZaIn0pLFgoInBhdGgiLHtkOiJNMTU2LjE5OSAxNDBDMTU2LjE5OSAxNTAuODczIDE0Ny41MjMgMTU5LjcxOSAxMzYuNzE2IDE1OS45OTNMMTM2LjE5OSAxNjBIODAuOTE3Qzc3Ljk0NjEgMTYwIDc2LjE2MzkgMTYzLjMgNzcuNzkzIDE2NS43ODRDNzkuMjQ1MSAxNjcuOTk5IDc2LjE2NDcgMTcwLjM1MyA3NC40MDk0IDE2OC4zN0w3My42MDU5IDE2Ny40NjJDNjkuMzQ5NyAxNjIuNjU0IDY3IDE1Ni40NTUgNjcgMTUwLjAzNEM2NyAxNDguMzU4IDY4LjM1ODMgMTQ3IDcwLjAzMzkgMTQ3SDEzNi4xOTlDMTQwLjA2NSAxNDcgMTQzLjE5OSAxNDMuODY2IDE0My4xOTkgMTQwVjk2Ljk5NTVDMTQzLjE5OSA5My45ODIyIDE0MS4zNTQgOTEuMjc2MyAxMzguNTQ5IDkwLjE3NjFDMTM3LjM4OSA4OS43MjE1IDEzNy43MTUgODggMTM4Ljk2IDg4TDE0My4xOTkgODhDMTUwLjM3OSA4OCAxNTYuMTk5IDkzLjgyMDMgMTU2LjE5OSAxMDFWMTQwWiJ9KV19KSxmaWx0ZXI6WCgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1goInBhdGgiLHtkOiJNMTEgMTdhNCA0IDAgMCAxLTggMFY1YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAyWiJ9KSxYKCJwYXRoIix7ZDoiTTE2LjcgMTNIMTlhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJINyJ9KSxYKCJwYXRoIix7ZDoiTSA3IDE3aC4wMSJ9KSxYKCJwYXRoIix7ZDoibTExIDggMi4zLTIuM2EyLjQgMi40IDAgMCAxIDMuNDA0LjAwNEwxOC42IDcuNmEyLjQgMi40IDAgMCAxIC4wMjYgMy40MzRMOS45IDE5LjgifSldfSksdGV4dFNpemU6WCgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgNTIgMzQiLGZpbGw6ImN1cnJlbnRDb2xvciIsc3Ryb2tlOiJub25lIixjaGlsZHJlbjpYKCJwYXRoIix7ZDoiTTM5LjcyNjYgMzMuMDIzNEMzOC4xNDg0IDMzLjAyMzQgMzYuNzUgMzIuNzI2NiAzNS41MzEyIDMyLjEzMjhDMzQuMzEyNSAzMS41MzkxIDMzLjM1OTQgMzAuNzEwOSAzMi42NzE5IDI5LjY0ODRDMzIgMjguNTcwMyAzMS42NjQxIDI3LjMxMjUgMzEuNjY0MSAyNS44NzVDMzEuNjY0MSAyMy43ODEyIDMyLjQyOTcgMjIuMTA5NCAzMy45NjA5IDIwLjg1OTRDMzUuNTA3OCAxOS42MDk0IDM3LjcxMDkgMTguOTA2MiA0MC41NzAzIDE4Ljc1TDQ3LjYwMTYgMTguMzUxNlYxNi41QzQ3LjYwMTYgMTUuMDE1NiA0Ny4xMzI4IDEzLjgzNTkgNDYuMTk1MyAxMi45NjA5QzQ1LjI1NzggMTIuMDg1OSA0My45NTMxIDExLjY0ODQgNDIuMjgxMiAxMS42NDg0QzQwLjkwNjIgMTEuNjQ4NCAzOS43NSAxMS45NDUzIDM4LjgxMjUgMTIuNTM5MUMzNy44NzUgMTMuMTMyOCAzNy4wOTM4IDE0LjA0NjkgMzYuNDY4OCAxNS4yODEyQzM2LjI2NTYgMTUuNjA5NCAzNi4wMTU2IDE1Ljg1MTYgMzUuNzE4OCAxNi4wMDc4QzM1LjQyMTkgMTYuMTY0MSAzNS4wNzgxIDE2LjI0MjIgMzQuNjg3NSAxNi4yNDIyQzM0LjE1NjIgMTYuMjQyMiAzMy43MTA5IDE2LjA3ODEgMzMuMzUxNiAxNS43NUMzMy4wMDc4IDE1LjQyMTkgMzIuODM1OSAxNC45OTIyIDMyLjgzNTkgMTQuNDYwOUMzMi44MzU5IDE0LjIyNjYgMzIuODY3MiAxMy45NzY2IDMyLjkyOTcgMTMuNzEwOUMzMy4wMDc4IDEzLjQ0NTMgMzMuMTA5NCAxMy4xNzk3IDMzLjIzNDQgMTIuOTE0MUMzMy44NzUgMTEuNDYwOSAzNS4wMTU2IDEwLjMwNDcgMzYuNjU2MiA5LjQ0NTMxQzM4LjMxMjUgOC41ODU5NCA0MC4yMjY2IDguMTU2MjUgNDIuMzk4NCA4LjE1NjI1QzQ0LjMyMDMgOC4xNTYyNSA0NS45ODQ0IDguNDkyMTkgNDcuMzkwNiA5LjE2NDA2QzQ4LjgxMjUgOS44MjAzMSA0OS44OTg0IDEwLjc1IDUwLjY0ODQgMTEuOTUzMUM1MS40MTQxIDEzLjE1NjIgNTEuNzk2OSAxNC41NzAzIDUxLjc5NjkgMTYuMTk1M1YzMC45MTQxQzUxLjc5NjkgMzEuNTg1OSA1MS42MDk0IDMyLjEwOTQgNTEuMjM0NCAzMi40ODQ0QzUwLjg1OTQgMzIuODU5NCA1MC4zNjcyIDMzLjA0NjkgNDkuNzU3OCAzMy4wNDY5QzQ5LjE2NDEgMzMuMDQ2OSA0OC42Nzk3IDMyLjg2NzIgNDguMzA0NyAzMi41MDc4QzQ3LjkyOTcgMzIuMTQ4NCA0Ny43MzQ0IDMxLjY2NDEgNDcuNzE4OCAzMS4wNTQ3VjI4LjM1OTRINDcuNjcxOUM0Ni45ODQ0IDI5Ljc4MTIgNDUuOTA2MiAzMC45MTQxIDQ0LjQzNzUgMzEuNzU3OEM0Mi45ODQ0IDMyLjYwMTYgNDEuNDE0MSAzMy4wMjM0IDM5LjcyNjYgMzMuMDIzNFpNNDAuODA0NyAyOS42NzE5QzQyLjA3MDMgMjkuNjcxOSA0My4yMTA5IDI5LjQwNjIgNDQuMjI2NiAyOC44NzVDNDUuMjU3OCAyOC4zNDM4IDQ2LjA3ODEgMjcuNjE3MiA0Ni42ODc1IDI2LjY5NTNDNDcuMjk2OSAyNS43NzM0IDQ3LjYwMTYgMjQuNzUgNDcuNjAxNiAyMy42MjVWMjEuMzI4MUw0MS4xMzI4IDIxLjc1QzM5LjQ0NTMgMjEuODU5NCAzOC4xNjQxIDIyLjI3MzQgMzcuMjg5MSAyMi45OTIyQzM2LjQxNDEgMjMuNjk1MyAzNS45NzY2IDI0LjYwOTQgMzUuOTc2NiAyNS43MzQ0QzM1Ljk3NjYgMjYuOTIxOSAzNi40MjE5IDI3Ljg3NSAzNy4zMTI1IDI4LjU5MzhDMzguMjAzMSAyOS4zMTI1IDM5LjM2NzIgMjkuNjcxOSA0MC44MDQ3IDI5LjY3MTlaTTIuMTc5NjkgMzMuMDIzNEMxLjUwNzgxIDMzLjAyMzQgMC45NzY1NjIgMzIuODM1OSAwLjU4NTkzOCAzMi40NjA5QzAuMTk1MzEyIDMyLjA4NTkgMCAzMS41NzgxIDAgMzAuOTM3NUMwIDMwLjUzMTIgMC4wODU5Mzc1IDMwLjA3MDMgMC4yNTc4MTIgMjkuNTU0N0wxMC40MDYyIDIuNDE0MDZDMTAuOTg0NCAwLjgwNDY4OCAxMi4xMDE2IDAgMTMuNzU3OCAwQzE0LjYxNzIgMCAxNS4zMjgxIDAuMjAzMTI1IDE1Ljg5MDYgMC42MDkzNzVDMTYuNDUzMSAxLjAxNTYyIDE2Ljg3NSAxLjYyNSAxNy4xNTYyIDIuNDM3NUwyNy4yNTc4IDI5LjQ4NDRDMjcuNDQ1MyAzMCAyNy41MzkxIDMwLjQ2ODggMjcuNTM5MSAzMC44OTA2QzI3LjUzOTEgMzEuNTQ2OSAyNy4zMzU5IDMyLjA3MDMgMjYuOTI5NyAzMi40NjA5QzI2LjUyMzQgMzIuODM1OSAyNS45NzY2IDMzLjAyMzQgMjUuMjg5MSAzMy4wMjM0QzI0LjYzMjggMzMuMDIzNCAyNC4xMDk0IDMyLjg3NSAyMy43MTg4IDMyLjU3ODFDMjMuMzQzOCAzMi4yODEyIDIzLjAzOTEgMzEuNzg5MSAyMi44MDQ3IDMxLjEwMTZMMTMuODI4MSA1LjM0Mzc1SDEzLjY2NDFMNC42NjQwNiAzMS4xMDE2QzQuNDI5NjkgMzEuNzg5MSA0LjEyNSAzMi4yODEyIDMuNzUgMzIuNTc4MUMzLjM3NSAzMi44NzUgMi44NTE1NiAzMy4wMjM0IDIuMTc5NjkgMzMuMDIzNFpNNi42Nzk2OSAyMy43NDIyQzYuMTQ4NDQgMjMuNzQyMiA1LjcwMzEyIDIzLjU2MjUgNS4zNDM3NSAyMy4yMDMxQzQuOTg0MzggMjIuODQzOCA0LjgwNDY5IDIyLjM5ODQgNC44MDQ2OSAyMS44NjcyQzQuODA0NjkgMjEuMzUxNiA0Ljk4NDM4IDIwLjkxNDEgNS4zNDM3NSAyMC41NTQ3QzUuNzAzMTIgMjAuMTk1MyA2LjE0ODQ0IDIwLjAxNTYgNi42Nzk2OSAyMC4wMTU2SDIwLjg1OTRDMjEuMzc1IDIwLjAxNTYgMjEuODEyNSAyMC4xOTUzIDIyLjE3MTkgMjAuNTU0N0MyMi41MzEyIDIwLjkxNDEgMjIuNzEwOSAyMS4zNTE2IDIyLjcxMDkgMjEuODY3MkMyMi43MTA5IDIyLjM5ODQgMjIuNTMxMiAyMi44NDM4IDIyLjE3MTkgMjMuMjAzMUMyMS44MTI1IDIzLjU2MjUgMjEuMzc1IDIzLjc0MjIgMjAuODU5NCAyMy43NDIySDYuNjc5NjlaIn0pfSksbW90aW9uOlgoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixjaGlsZHJlbjpbWCgiY2lyY2xlIix7Y3g6IjE0IixjeToiMTIiLHI6IjYifSksWCgicGF0aCIse2Q6Ik0zIDhoNE0yIDEyaDRNMyAxNmg0In0pXX0pLGNvbnRyYXN0OlgoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltYKCJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifSksWCgicGF0aCIse2Q6Ik0xMiAxOGE2IDYgMCAwIDAgMC0xMnYxMnoifSldfSksYm9yZGVyczpYKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbWCgicGF0aCIse2Q6Ik01IDIxYTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMiJ9KSxYKCJwYXRoIix7ZDoiTTkgMjFoMSJ9KSxYKCJwYXRoIix7ZDoiTTE0IDIxaDEifSldfSksdHJhbnNwYXJlbmN5OlgoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDYzIDQ2IixmaWxsOiJjdXJyZW50Q29sb3IiLHN0cm9rZToibm9uZSIsY2hpbGRyZW46WCgicGF0aCIse2Q6Ik0yMi43MzQ0IDQuMTcxODhDMjIuMTg3NSA0LjE3MTg4IDIxLjcxODggMy45NzY1NiAyMS4zMjgxIDMuNTg1OTRDMjAuOTM3NSAzLjE5NTMxIDIwLjc0MjIgMi43MTg3NSAyMC43NDIyIDIuMTU2MjVDMjAuNzQyMiAxLjYwOTM4IDIwLjkzNzUgMS4xNDA2MiAyMS4zMjgxIDAuNzVDMjEuNzE4OCAwLjM1OTM3NSAyMi4xODc1IDAuMTY0MDYyIDIyLjczNDQgMC4xNjQwNjJDMjMuMjgxMiAwLjE2NDA2MiAyMy43NSAwLjM1OTM3NSAyNC4xNDA2IDAuNzVDMjQuNTMxMiAxLjE0MDYyIDI0LjcyNjYgMS42MDkzOCAyNC43MjY2IDIuMTU2MjVDMjQuNzI2NiAyLjcxODc1IDI0LjUzMTIgMy4xOTUzMSAyNC4xNDA2IDMuNTg1OTRDMjMuNzUgMy45NzY1NiAyMy4yODEyIDQuMTcxODggMjIuNzM0NCA0LjE3MTg4Wk0yOS4xMDk0IDUuMjAzMTJDMjguNTQ2OSA1LjIwMzEyIDI4LjA3MDMgNS4wMDc4MSAyNy42Nzk3IDQuNjE3MTlDMjcuMjg5MSA0LjIyNjU2IDI3LjA5MzggMy43NTc4MSAyNy4wOTM4IDMuMjEwOTRDMjcuMDkzOCAyLjY2NDA2IDI3LjI4OTEgMi4xOTUzMSAyNy42Nzk3IDEuODA0NjlDMjguMDcwMyAxLjM5ODQ0IDI4LjU0NjkgMS4xOTUzMSAyOS4xMDk0IDEuMTk1MzFDMjkuNjU2MiAxLjE5NTMxIDMwLjEyNSAxLjM5ODQ0IDMwLjUxNTYgMS44MDQ2OUMzMC45MDYyIDIuMTk1MzEgMzEuMTAxNiAyLjY2NDA2IDMxLjEwMTYgMy4yMTA5NEMzMS4xMDE2IDMuNzU3ODEgMzAuOTA2MiA0LjIyNjU2IDMwLjUxNTYgNC42MTcxOUMzMC4xMjUgNS4wMDc4MSAyOS42NTYyIDUuMjAzMTIgMjkuMTA5NCA1LjIwMzEyWk0zNC44NzUgOC4xMzI4MUMzNC4zMjgxIDguMTMyODEgMzMuODUxNiA3LjkzNzUgMzMuNDQ1MyA3LjU0Njg4QzMzLjA1NDcgNy4xNDA2MiAzMi44NTk0IDYuNjcxODggMzIuODU5NCA2LjE0MDYyQzMyLjg1OTQgNS41NzgxMiAzMy4wNTQ3IDUuMTAxNTYgMzMuNDQ1MyA0LjcxMDk0QzMzLjg1MTYgNC4zMjAzMSAzNC4zMjgxIDQuMTI1IDM0Ljg3NSA0LjEyNUMzNS40MjE5IDQuMTI1IDM1Ljg5MDYgNC4zMjAzMSAzNi4yODEyIDQuNzEwOTRDMzYuNjg3NSA1LjEwMTU2IDM2Ljg5MDYgNS41NzgxMiAzNi44OTA2IDYuMTQwNjJDMzYuODkwNiA2LjY3MTg4IDM2LjY4NzUgNy4xNDA2MiAzNi4yODEyIDcuNTQ2ODhDMzUuODkwNiA3LjkzNzUgMzUuNDIxOSA4LjEzMjgxIDM0Ljg3NSA4LjEzMjgxWk0zOS40NDUzIDEyLjY3OTdDMzguODk4NCAxMi42Nzk3IDM4LjQyMTkgMTIuNDg0NCAzOC4wMTU2IDEyLjA5MzhDMzcuNjI1IDExLjcwMzEgMzcuNDI5NyAxMS4yMzQ0IDM3LjQyOTcgMTAuNjg3NUMzNy40Mjk3IDEwLjE1NjIgMzcuNjI1IDkuNjk1MzEgMzguMDE1NiA5LjMwNDY5QzM4LjQyMTkgOC44OTg0NCAzOC44OTg0IDguNjk1MzEgMzkuNDQ1MyA4LjY5NTMxQzM5Ljk5MjIgOC42OTUzMSA0MC40NjA5IDguODk4NDQgNDAuODUxNiA5LjMwNDY5QzQxLjI0MjIgOS42OTUzMSA0MS40Mzc1IDEwLjE1NjIgNDEuNDM3NSAxMC42ODc1QzQxLjQzNzUgMTEuMjM0NCA0MS4yNDIyIDExLjcwMzEgNDAuODUxNiAxMi4wOTM4QzQwLjQ2MDkgMTIuNDg0NCAzOS45OTIyIDEyLjY3OTcgMzkuNDQ1MyAxMi42Nzk3Wk00Mi4zNzUgMTguMzk4NEM0MS44MTI1IDE4LjM5ODQgNDEuMzI4MSAxOC4yMDMxIDQwLjkyMTkgMTcuODEyNUM0MC41MzEyIDE3LjQyMTkgNDAuMzM1OSAxNi45NTMxIDQwLjMzNTkgMTYuNDA2MkM0MC4zMzU5IDE1Ljg0MzggNDAuNTMxMiAxNS4zNjcyIDQwLjkyMTkgMTQuOTc2NkM0MS4zMjgxIDE0LjU4NTkgNDEuODEyNSAxNC4zOTA2IDQyLjM3NSAxNC4zOTA2QzQyLjkwNjIgMTQuMzkwNiA0My4zNjcyIDE0LjU4NTkgNDMuNzU3OCAxNC45NzY2QzQ0LjE2NDEgMTUuMzY3MiA0NC4zNjcyIDE1Ljg0MzggNDQuMzY3MiAxNi40MDYyQzQ0LjM2NzIgMTYuOTUzMSA0NC4xNjQxIDE3LjQyMTkgNDMuNzU3OCAxNy44MTI1QzQzLjM2NzIgMTguMjAzMSA0Mi45MDYyIDE4LjM5ODQgNDIuMzc1IDE4LjM5ODRaTTQzLjQ1MzEgMjQuNzk2OUM0Mi45MDYyIDI0Ljc5NjkgNDIuNDM3NSAyNC42MDE2IDQyLjA0NjkgMjQuMjEwOUM0MS42NTYyIDIzLjgyMDMgNDEuNDYwOSAyMy4zNDM4IDQxLjQ2MDkgMjIuNzgxMkM0MS40NjA5IDIyLjIzNDQgNDEuNjU2MiAyMS43NjU2IDQyLjA0NjkgMjEuMzc1QzQyLjQzNzUgMjAuOTg0NCA0Mi45MDYyIDIwLjc4OTEgNDMuNDUzMSAyMC43ODkxQzQ0IDIwLjc4OTEgNDQuNDY4OCAyMC45ODQ0IDQ0Ljg1OTQgMjEuMzc1QzQ1LjI2NTYgMjEuNzY1NiA0NS40Njg4IDIyLjIzNDQgNDUuNDY4OCAyMi43ODEyQzQ1LjQ2ODggMjMuMzQzOCA0NS4yNjU2IDIzLjgyMDMgNDQuODU5NCAyNC4yMTA5QzQ0LjQ2ODggMjQuNjAxNiA0NCAyNC43OTY5IDQzLjQ1MzEgMjQuNzk2OVpNNDIuMzc1IDMxLjE3MTlDNDEuODEyNSAzMS4xNzE5IDQxLjMyODEgMzAuOTc2NiA0MC45MjE5IDMwLjU4NTlDNDAuNTMxMiAzMC4xOTUzIDQwLjMzNTkgMjkuNzI2NiA0MC4zMzU5IDI5LjE3OTdDNDAuMzM1OSAyOC42MTcyIDQwLjUzMTIgMjguMTQwNiA0MC45MjE5IDI3Ljc1QzQxLjMyODEgMjcuMzU5NCA0MS44MTI1IDI3LjE2NDEgNDIuMzc1IDI3LjE2NDFDNDIuOTA2MiAyNy4xNjQxIDQzLjM2NzIgMjcuMzU5NCA0My43NTc4IDI3Ljc1QzQ0LjE2NDEgMjguMTQwNiA0NC4zNjcyIDI4LjYxNzIgNDQuMzY3MiAyOS4xNzk3QzQ0LjM2NzIgMjkuNzI2NiA0NC4xNjQxIDMwLjE5NTMgNDMuNzU3OCAzMC41ODU5QzQzLjM2NzIgMzAuOTc2NiA0Mi45MDYyIDMxLjE3MTkgNDIuMzc1IDMxLjE3MTlaTTM5LjQ0NTMgMzYuODkwNkMzOC44OTg0IDM2Ljg5MDYgMzguNDIxOSAzNi42OTUzIDM4LjAxNTYgMzYuMzA0N0MzNy42MjUgMzUuODk4NCAzNy40Mjk3IDM1LjQyMTkgMzcuNDI5NyAzNC44NzVDMzcuNDI5NyAzNC4zMjgxIDM3LjYyNSAzMy44NTk0IDM4LjAxNTYgMzMuNDY4OEMzOC40MjE5IDMzLjA2MjUgMzguODk4NCAzMi44NTk0IDM5LjQ0NTMgMzIuODU5NEMzOS45OTIyIDMyLjg1OTQgNDAuNDYwOSAzMy4wNjI1IDQwLjg1MTYgMzMuNDY4OEM0MS4yNDIyIDMzLjg1OTQgNDEuNDM3NSAzNC4zMjgxIDQxLjQzNzUgMzQuODc1QzQxLjQzNzUgMzUuNDIxOSA0MS4yNDIyIDM1Ljg5ODQgNDAuODUxNiAzNi4zMDQ3QzQwLjQ2MDkgMzYuNjk1MyAzOS45OTIyIDM2Ljg5MDYgMzkuNDQ1MyAzNi44OTA2Wk0zNC44NzUgNDEuNDM3NUMzNC4zMjgxIDQxLjQzNzUgMzMuODUxNiA0MS4yNDIyIDMzLjQ0NTMgNDAuODUxNkMzMy4wNTQ3IDQwLjQ2MDkgMzIuODU5NCAzOS45OTIyIDMyLjg1OTQgMzkuNDQ1M0MzMi44NTk0IDM4Ljg5ODQgMzMuMDU0NyAzOC40Mjk3IDMzLjQ0NTMgMzguMDM5MUMzMy44NTE2IDM3LjYzMjggMzQuMzI4MSAzNy40Mjk3IDM0Ljg3NSAzNy40Mjk3QzM1LjQyMTkgMzcuNDI5NyAzNS44OTA2IDM3LjYzMjggMzYuMjgxMiAzOC4wMzkxQzM2LjY4NzUgMzguNDI5NyAzNi44OTA2IDM4Ljg5ODQgMzYuODkwNiAzOS40NDUzQzM2Ljg5MDYgMzkuOTkyMiAzNi42ODc1IDQwLjQ2MDkgMzYuMjgxMiA0MC44NTE2QzM1Ljg5MDYgNDEuMjQyMiAzNS40MjE5IDQxLjQzNzUgMzQuODc1IDQxLjQzNzVaTTI5LjEwOTQgNDQuMzY3MkMyOC41NDY5IDQ0LjM2NzIgMjguMDcwMyA0NC4xNjQxIDI3LjY3OTcgNDMuNzU3OEMyNy4yODkxIDQzLjM2NzIgMjcuMDkzOCA0Mi44OTg0IDI3LjA5MzggNDIuMzUxNkMyNy4wOTM4IDQxLjgwNDcgMjcuMjg5MSA0MS4zMzU5IDI3LjY3OTcgNDAuOTQ1M0MyOC4wNzAzIDQwLjU1NDcgMjguNTQ2OSA0MC4zNTk0IDI5LjEwOTQgNDAuMzU5NEMyOS42NTYyIDQwLjM1OTQgMzAuMTI1IDQwLjU1NDcgMzAuNTE1NiA0MC45NDUzQzMwLjkwNjIgNDEuMzM1OSAzMS4xMDE2IDQxLjgwNDcgMzEuMTAxNiA0Mi4zNTE2QzMxLjEwMTYgNDIuODk4NCAzMC45MDYyIDQzLjM2NzIgMzAuNTE1NiA0My43NTc4QzMwLjEyNSA0NC4xNjQxIDI5LjY1NjIgNDQuMzY3MiAyOS4xMDk0IDQ0LjM2NzJaTTIyLjczNDQgNDUuMzk4NEMyMi4xODc1IDQ1LjM5ODQgMjEuNzE4OCA0NS4yMDMxIDIxLjMyODEgNDQuODEyNUMyMC45Mzc1IDQ0LjQyMTkgMjAuNzQyMiA0My45NTMxIDIwLjc0MjIgNDMuNDA2MkMyMC43NDIyIDQyLjg0MzggMjAuOTM3NSA0Mi4zNjcyIDIxLjMyODEgNDEuOTc2NkMyMS43MTg4IDQxLjU4NTkgMjIuMTg3NSA0MS4zOTA2IDIyLjczNDQgNDEuMzkwNkMyMy4yODEyIDQxLjM5MDYgMjMuNzUgNDEuNTg1OSAyNC4xNDA2IDQxLjk3NjZDMjQuNTMxMiA0Mi4zNjcyIDI0LjcyNjYgNDIuODQzOCAyNC43MjY2IDQzLjQwNjJDMjQuNzI2NiA0My45NTMxIDI0LjUzMTIgNDQuNDIxOSAyNC4xNDA2IDQ0LjgxMjVDMjMuNzUgNDUuMjAzMSAyMy4yODEyIDQ1LjM5ODQgMjIuNzM0NCA0NS4zOTg0Wk0xNi4zNTk0IDQ0LjM2NzJDMTUuODEyNSA0NC4zNjcyIDE1LjM0MzggNDQuMTY0MSAxNC45NTMxIDQzLjc1NzhDMTQuNTYyNSA0My4zNjcyIDE0LjM2NzIgNDIuODk4NCAxNC4zNjcyIDQyLjM1MTZDMTQuMzY3MiA0MS44MDQ3IDE0LjU2MjUgNDEuMzM1OSAxNC45NTMxIDQwLjk0NTNDMTUuMzQzOCA0MC41NTQ3IDE1LjgxMjUgNDAuMzU5NCAxNi4zNTk0IDQwLjM1OTRDMTYuOTIxOSA0MC4zNTk0IDE3LjM5ODQgNDAuNTU0NyAxNy43ODkxIDQwLjk0NTNDMTguMTc5NyA0MS4zMzU5IDE4LjM3NSA0MS44MDQ3IDE4LjM3NSA0Mi4zNTE2QzE4LjM3NSA0Mi44OTg0IDE4LjE3OTcgNDMuMzY3MiAxNy43ODkxIDQzLjc1NzhDMTcuMzk4NCA0NC4xNjQxIDE2LjkyMTkgNDQuMzY3MiAxNi4zNTk0IDQ0LjM2NzJaTTEwLjU3MDMgNDEuNDM3NUMxMC4wMzkxIDQxLjQzNzUgOS41NzAzMSA0MS4yNDIyIDkuMTY0MDYgNDAuODUxNkM4Ljc3MzQ0IDQwLjQ2MDkgOC41NzgxMiAzOS45OTIyIDguNTc4MTIgMzkuNDQ1M0M4LjU3ODEyIDM4Ljg5ODQgOC43NzM0NCAzOC40Mjk3IDkuMTY0MDYgMzguMDM5MUM5LjU3MDMxIDM3LjYzMjggMTAuMDM5MSAzNy40Mjk3IDEwLjU3MDMgMzcuNDI5N0MxMS4xMzI4IDM3LjQyOTcgMTEuNjA5NCAzNy42MzI4IDEyIDM4LjAzOTFDMTIuMzkwNiAzOC40Mjk3IDEyLjU4NTkgMzguODk4NCAxMi41ODU5IDM5LjQ0NTNDMTIuNTg1OSAzOS45OTIyIDEyLjM5MDYgNDAuNDYwOSAxMiA0MC44NTE2QzExLjYwOTQgNDEuMjQyMiAxMS4xMzI4IDQxLjQzNzUgMTAuNTcwMyA0MS40Mzc1Wk02LjAyMzQ0IDM2Ljg5MDZDNS40NzY1NiAzNi44OTA2IDUgMzYuNjk1MyA0LjU5Mzc1IDM2LjMwNDdDNC4yMDMxMiAzNS44OTg0IDQuMDA3ODEgMzUuNDIxOSA0LjAwNzgxIDM0Ljg3NUM0LjAwNzgxIDM0LjMyODEgNC4yMDMxMiAzMy44NTk0IDQuNTkzNzUgMzMuNDY4OEM1IDMzLjA2MjUgNS40NzY1NiAzMi44NTk0IDYuMDIzNDQgMzIuODU5NEM2LjU3MDMxIDMyLjg1OTQgNy4wMzkwNiAzMy4wNjI1IDcuNDI5NjkgMzMuNDY4OEM3LjgyMDMxIDMzLjg1OTQgOC4wMTU2MiAzNC4zMjgxIDguMDE1NjIgMzQuODc1QzguMDE1NjIgMzUuNDIxOSA3LjgyMDMxIDM1Ljg5ODQgNy40Mjk2OSAzNi4zMDQ3QzcuMDM5MDYgMzYuNjk1MyA2LjU3MDMxIDM2Ljg5MDYgNi4wMjM0NCAzNi44OTA2Wk0zLjA5Mzc1IDMxLjE3MTlDMi41NjI1IDMxLjE3MTkgMi4wOTM3NSAzMC45NzY2IDEuNjg3NSAzMC41ODU5QzEuMjk2ODggMzAuMTk1MyAxLjEwMTU2IDI5LjcyNjYgMS4xMDE1NiAyOS4xNzk3QzEuMTAxNTYgMjguNjE3MiAxLjI5Njg4IDI4LjE0MDYgMS42ODc1IDI3Ljc1QzIuMDkzNzUgMjcuMzU5NCAyLjU2MjUgMjcuMTY0MSAzLjA5Mzc1IDI3LjE2NDFDMy42NTYyNSAyNy4xNjQxIDQuMTMyODEgMjcuMzU5NCA0LjUyMzQ0IDI3Ljc1QzQuOTE0MDYgMjguMTQwNiA1LjEwOTM4IDI4LjYxNzIgNS4xMDkzOCAyOS4xNzk3QzUuMTA5MzggMjkuNzI2NiA0LjkxNDA2IDMwLjE5NTMgNC41MjM0NCAzMC41ODU5QzQuMTMyODEgMzAuOTc2NiAzLjY1NjI1IDMxLjE3MTkgMy4wOTM3NSAzMS4xNzE5Wk0yLjAxNTYyIDI0Ljc5NjlDMS40NTMxMiAyNC43OTY5IDAuOTc2NTYyIDI0LjYwMTYgMC41ODU5MzggMjQuMjEwOUMwLjE5NTMxMiAyMy44MjAzIDAgMjMuMzQzOCAwIDIyLjc4MTJDMCAyMi4yMzQ0IDAuMTk1MzEyIDIxLjc2NTYgMC41ODU5MzggMjEuMzc1QzAuOTc2NTYyIDIwLjk4NDQgMS40NTMxMiAyMC43ODkxIDIuMDE1NjIgMjAuNzg5MUMyLjU2MjUgMjAuNzg5MSAzLjAzMTI1IDIwLjk4NDQgMy40MjE4OCAyMS4zNzVDMy44MTI1IDIxLjc2NTYgNC4wMDc4MSAyMi4yMzQ0IDQuMDA3ODEgMjIuNzgxMkM0LjAwNzgxIDIzLjM0MzggMy44MTI1IDIzLjgyMDMgMy40MjE4OCAyNC4yMTA5QzMuMDMxMjUgMjQuNjAxNiAyLjU2MjUgMjQuNzk2OSAyLjAxNTYyIDI0Ljc5NjlaTTMuMDkzNzUgMTguMzk4NEMyLjU2MjUgMTguMzk4NCAyLjA5Mzc1IDE4LjIwMzEgMS42ODc1IDE3LjgxMjVDMS4yOTY4OCAxNy40MjE5IDEuMTAxNTYgMTYuOTUzMSAxLjEwMTU2IDE2LjQwNjJDMS4xMDE1NiAxNS44NDM4IDEuMjk2ODggMTUuMzY3MiAxLjY4NzUgMTQuOTc2NkMyLjA5Mzc1IDE0LjU4NTkgMi41NjI1IDE0LjM5MDYgMy4wOTM3NSAxNC4zOTA2QzMuNjU2MjUgMTQuMzkwNiA0LjEzMjgxIDE0LjU4NTkgNC41MjM0NCAxNC45NzY2QzQuOTE0MDYgMTUuMzY3MiA1LjEwOTM4IDE1Ljg0MzggNS4xMDkzOCAxNi40MDYyQzUuMTA5MzggMTYuOTUzMSA0LjkxNDA2IDE3LjQyMTkgNC41MjM0NCAxNy44MTI1QzQuMTMyODEgMTguMjAzMSAzLjY1NjI1IDE4LjM5ODQgMy4wOTM3NSAxOC4zOTg0Wk02LjAyMzQ0IDEyLjY3OTdDNS40NzY1NiAxMi42Nzk3IDUgMTIuNDg0NCA0LjU5Mzc1IDEyLjA5MzhDNC4yMDMxMiAxMS43MDMxIDQuMDA3ODEgMTEuMjM0NCA0LjAwNzgxIDEwLjY4NzVDNC4wMDc4MSAxMC4xNTYyIDQuMjAzMTIgOS42OTUzMSA0LjU5Mzc1IDkuMzA0NjlDNSA4Ljg5ODQ0IDUuNDc2NTYgOC42OTUzMSA2LjAyMzQ0IDguNjk1MzFDNi41NzAzMSA4LjY5NTMxIDcuMDM5MDYgOC44OTg0NCA3LjQyOTY5IDkuMzA0NjlDNy44MjAzMSA5LjY5NTMxIDguMDE1NjIgMTAuMTU2MiA4LjAxNTYyIDEwLjY4NzVDOC4wMTU2MiAxMS4yMzQ0IDcuODIwMzEgMTEuNzAzMSA3LjQyOTY5IDEyLjA5MzhDNy4wMzkwNiAxMi40ODQ0IDYuNTcwMzEgMTIuNjc5NyA2LjAyMzQ0IDEyLjY3OTdaTTEwLjU3MDMgOC4xMzI4MUMxMC4wMzkxIDguMTMyODEgOS41NzAzMSA3LjkzNzUgOS4xNjQwNiA3LjU0Njg4QzguNzczNDQgNy4xNDA2MiA4LjU3ODEyIDYuNjcxODggOC41NzgxMiA2LjE0MDYyQzguNTc4MTIgNS41NzgxMiA4Ljc3MzQ0IDUuMTAxNTYgOS4xNjQwNiA0LjcxMDk0QzkuNTcwMzEgNC4zMjAzMSAxMC4wMzkxIDQuMTI1IDEwLjU3MDMgNC4xMjVDMTEuMTMyOCA0LjEyNSAxMS42MDk0IDQuMzIwMzEgMTIgNC43MTA5NEMxMi4zOTA2IDUuMTAxNTYgMTIuNTg1OSA1LjU3ODEyIDEyLjU4NTkgNi4xNDA2MkMxMi41ODU5IDYuNjcxODggMTIuMzkwNiA3LjE0MDYyIDEyIDcuNTQ2ODhDMTEuNjA5NCA3LjkzNzUgMTEuMTMyOCA4LjEzMjgxIDEwLjU3MDMgOC4xMzI4MVpNMTYuMzU5NCA1LjIwMzEyQzE1LjgxMjUgNS4yMDMxMiAxNS4zNDM4IDUuMDA3ODEgMTQuOTUzMSA0LjYxNzE5QzE0LjU2MjUgNC4yMjY1NiAxNC4zNjcyIDMuNzU3ODEgMTQuMzY3MiAzLjIxMDk0QzE0LjM2NzIgMi42NjQwNiAxNC41NjI1IDIuMTk1MzEgMTQuOTUzMSAxLjgwNDY5QzE1LjM0MzggMS4zOTg0NCAxNS44MTI1IDEuMTk1MzEgMTYuMzU5NCAxLjE5NTMxQzE2LjkyMTkgMS4xOTUzMSAxNy4zOTg0IDEuMzk4NDQgMTcuNzg5MSAxLjgwNDY5QzE4LjE3OTcgMi4xOTUzMSAxOC4zNzUgMi42NjQwNiAxOC4zNzUgMy4yMTA5NEMxOC4zNzUgMy43NTc4MSAxOC4xNzk3IDQuMjI2NTYgMTcuNzg5MSA0LjYxNzE5QzE3LjM5ODQgNS4wMDc4MSAxNi45MjE5IDUuMjAzMTIgMTYuMzU5NCA1LjIwMzEyWk00MC4xMDE2IDQ1LjU2MjVDMzYuOTQ1MyA0NS41NjI1IDMzLjk5MjIgNDQuOTY4OCAzMS4yNDIyIDQzLjc4MTJDMjguNTA3OCA0Mi42MDk0IDI2LjA5MzggNDAuOTc2NiAyNCAzOC44ODI4QzIxLjkwNjIgMzYuNzg5MSAyMC4yNjU2IDM0LjM2NzIgMTkuMDc4MSAzMS42MTcyQzE3LjkwNjIgMjguODY3MiAxNy4zMjAzIDI1LjkyMTkgMTcuMzIwMyAyMi43ODEyQzE3LjMyMDMgMTkuNjQwNiAxNy45MDYyIDE2LjY5NTMgMTkuMDc4MSAxMy45NDUzQzIwLjI2NTYgMTEuMTc5NyAyMS45MDYyIDguNzU3ODEgMjQgNi42Nzk2OUMyNi4wOTM4IDQuNTg1OTQgMjguNTA3OCAyLjk1MzEyIDMxLjI0MjIgMS43ODEyNUMzMy45OTIyIDAuNTkzNzUgMzYuOTQ1MyAwIDQwLjEwMTYgMEM0My4yNDIyIDAgNDYuMTg3NSAwLjU5Mzc1IDQ4LjkzNzUgMS43ODEyNUM1MS42ODc1IDIuOTUzMTIgNTQuMTAxNiA0LjU4NTk0IDU2LjE3OTcgNi42Nzk2OUM1OC4yNzM0IDguNzU3ODEgNTkuOTA2MiAxMS4xNzk3IDYxLjA3ODEgMTMuOTQ1M0M2Mi4yNjU2IDE2LjY5NTMgNjIuODU5NCAxOS42NDA2IDYyLjg1OTQgMjIuNzgxMkM2Mi44NTk0IDI1LjkyMTkgNjIuMjY1NiAyOC44NjcyIDYxLjA3ODEgMzEuNjE3MkM1OS45MDYyIDM0LjM2NzIgNTguMjczNCAzNi43ODkxIDU2LjE3OTcgMzguODgyOEM1NC4xMDE2IDQwLjk3NjYgNTEuNjg3NSA0Mi42MDk0IDQ4LjkzNzUgNDMuNzgxMkM0Ni4xODc1IDQ0Ljk2ODggNDMuMjQyMiA0NS41NjI1IDQwLjEwMTYgNDUuNTYyNVpNNDAuMTAxNiA0MS4zOTA2QzQyLjY2NDEgNDEuMzkwNiA0NS4wNzAzIDQwLjkwNjIgNDcuMzIwMyAzOS45Mzc1QzQ5LjU3MDMgMzguOTY4OCA1MS41NDY5IDM3LjYzMjggNTMuMjUgMzUuOTI5N0M1NC45Njg4IDM0LjIyNjYgNTYuMzA0NyAzMi4yNTc4IDU3LjI1NzggMzAuMDIzNEM1OC4yMTA5IDI3Ljc3MzQgNTguNjg3NSAyNS4zNTk0IDU4LjY4NzUgMjIuNzgxMkM1OC42ODc1IDIwLjIwMzEgNTguMjEwOSAxNy43OTY5IDU3LjI1NzggMTUuNTYyNUM1Ni4zMDQ3IDEzLjMxMjUgNTQuOTY4OCAxMS4zMzU5IDUzLjI1IDkuNjMyODFDNTEuNTQ2OSA3LjkyOTY5IDQ5LjU3MDMgNi41OTM3NSA0Ny4zMjAzIDUuNjI1QzQ1LjA3MDMgNC42NTYyNSA0Mi42NjQxIDQuMTcxODggNDAuMTAxNiA0LjE3MTg4QzM3LjUyMzQgNC4xNzE4OCAzNS4xMDk0IDQuNjU2MjUgMzIuODU5NCA1LjYyNUMzMC42MjUgNi41OTM3NSAyOC42NDg0IDcuOTI5NjkgMjYuOTI5NyA5LjYzMjgxQzI1LjIyNjYgMTEuMzM1OSAyMy44OTA2IDEzLjMxMjUgMjIuOTIxOSAxNS41NjI1QzIxLjk2ODggMTcuNzk2OSAyMS40OTIyIDIwLjIwMzEgMjEuNDkyMiAyMi43ODEyQzIxLjQ5MjIgMjUuMzU5NCAyMS45Njg4IDI3Ljc3MzQgMjIuOTIxOSAzMC4wMjM0QzIzLjg5MDYgMzIuMjU3OCAyNS4yMjY2IDM0LjIyNjYgMjYuOTI5NyAzNS45Mjk3QzI4LjY0ODQgMzcuNjMyOCAzMC42MjUgMzguOTY4OCAzMi44NTk0IDM5LjkzNzVDMzUuMTA5NCA0MC45MDYyIDM3LjUyMzQgNDEuMzkwNiA0MC4xMDE2IDQxLjM5MDZaIn0pfSksdm9pY2VvdmVyOlgoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltYKCJwYXRoIix7ZDoibTExIDcuNjAxLTUuOTk0IDguMTlhMSAxIDAgMCAwIC4xIDEuMjk4bC44MTcuODE4YTEgMSAwIDAgMCAxLjMxNC4wODdMMTUuMDkgMTIifSksWCgicGF0aCIse2Q6Ik0xNi41IDIxLjE3NEMxNS41IDIwLjUgMTQuMzcyIDIwIDEzIDIwYy0yLjA1OCAwLTMuOTI4IDIuMzU2LTYgMi0yLjA3Mi0uMzU2LTIuNzc1LTMuMzY5LTEuNS00LjUifSksWCgiY2lyY2xlIix7Y3g6IjE2IixjeToiNyIscjoiNSJ9KV19KX07ZnVuY3Rpb24gWlgoJCl7aWYoISQpcmV0dXJuITA7cmV0dXJuIHQyKCQpLm9zLnRvTG93ZXJDYXNlKCk9PT0iaW9zIn1mdW5jdGlvbiAkNCh7dWRpZDokLHJ1bnRpbWU6Sn0pe2xldFtRLFpdPUEoITApLFtLLFldPUEobnVsbCksW3EsVl09QShudWxsKSxbRyxCXT1BKG51bGwpLE49WlgoSiksej1QKGFzeW5jKCk9PntCKG51bGwpO3RyeXtsZXQgRT1hd2FpdCB0Myh7ZGV2aWNlOiR9LHtzaWduYWw6QWJvcnRTaWduYWwudGltZW91dCgxNTAwMCl9KTtpZihFKVkoRSk7ZWxzZSBCKCJVbmV4cGVjdGVkIHNpbXVsYXRvci1zZXR0aW5ncyByZXBseSIpfWNhdGNoKEUpe0IoRSBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiYmRS5uYW1lPT09IlRpbWVvdXRFcnJvciI/IlRpbWVkIG91dCByZWFkaW5nIHNpbXVsYXRvciBzZXR0aW5ncyI6RSBpbnN0YW5jZW9mIEVycm9yJiZFLm1lc3NhZ2UhPT0iRmFpbGVkIHRvIGZldGNoIj9FLm1lc3NhZ2U6IkNvdWxkIG5vdCByZWFjaCB0aGUgcHJldmlldyBzZXJ2ZXIg4oCUIHJlbG9hZCB0aGUgcGFnZSBpZiB0aGlzIHBlcnNpc3RzIil9fSxbJF0pO18oKCk9PntpZihZKG51bGwpLCFOKXJldHVybjt6KCl9LFt6LE5dKTtsZXQgVT1QKGFzeW5jKEUsdyk9PntWKEUpLEIobnVsbCksWSgoUyk9PlM/ey4uLlMsW0VdOnd9OlMpO3RyeXthd2FpdCB0Myh7ZGV2aWNlOiQsb3B0aW9uOkUsdmFsdWU6d30se3NpZ25hbDpBYm9ydFNpZ25hbC50aW1lb3V0KDE1MDAwKX0pfWNhdGNoKFMpe0IoUyBpbnN0YW5jZW9mIEVycm9yP1MubWVzc2FnZTpgRmFpbGVkIHRvIHNldCAke0V9YCkseigpfWZpbmFsbHl7VihudWxsKX19LFskLHpdKSxIPVQoe3J1bm5pbmc6ITEsbmV4dDpudWxsfSksRj1UKFUpO0YuY3VycmVudD1VO2xldCBMPVAoKEUpPT57bGV0IHc9SC5jdXJyZW50O2lmKHcubmV4dD1FLHcucnVubmluZylyZXR1cm47dy5ydW5uaW5nPSEwLChhc3luYygpPT57d2hpbGUody5uZXh0IT09bnVsbCl7bGV0IFM9dy5uZXh0O3cubmV4dD1udWxsLGF3YWl0IEYuY3VycmVudCgidGV4dC1zaXplIixIMltTXSl9dy5ydW5uaW5nPSExfSkoKX0sW10pLGs9SyE9PW51bGwsQz1LPz8kWCxPPUgyLmluZGV4T2YoQ1sidGV4dC1zaXplIl0pLHk9Tz49MD9POkNbInRleHQtc2l6ZSJdPy5zdGFydHNXaXRoKCJhY2Nlc3NpYmlsaXR5Iik/SDIubGVuZ3RoLTE6MztyZXR1cm4gWChxMCx7b3BlbjpRLG9uT3BlbkNoYW5nZTpaLCJkYXRhLXNpbXVsYXRvci1zZXR0aW5ncyI6IiIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6WChLMSx7Y2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC1pbmstNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJTaW11bGF0b3IifSksWCgic3BhbiIse30pXX0pLGNoaWxkcmVuOiFOP1goImRpdiIse2NsYXNzTmFtZToidGV4dC1pbmstNDUgdGV4dC1bMTFweF0gcHgtMC41IHB5LTEiLGNoaWxkcmVuOiJTaW11bGF0b3Igc2V0dGluZ3MgYXJlIGF2YWlsYWJsZSBvbiBpT1Mgc2ltdWxhdG9ycyBvbmx5LiJ9KTpYKEsxLHtjaGlsZHJlbjpbRyYmWCgiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAiLGNoaWxkcmVuOkd9KSxYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PnZvaWQgeigpLGNsYXNzTmFtZToic2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgcm91bmRlZCBib3JkZXIgYm9yZGVyLWRhbmdlci8zMCBiZy10cmFuc3BhcmVudCBweC0xLjUgcHktMC41IHRleHQtWzExcHhdIHRleHQtZGFuZ2VyLXNvZnQiLGNoaWxkcmVuOiJSZXRyeSJ9KV19KSxYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEuNSBwYi0xLjUiLGNoaWxkcmVuOltYKGMwLHtpY29uOkwyLmFwcGVhcmFuY2UsbGFiZWw6IkFwcGVhcmFuY2UiLGNoaWxkcmVuOlgoazIse2xhYmVsOiJBcHBlYXJhbmNlIix2YWx1ZTpDLmFwcGVhcmFuY2U/PyJsaWdodCIsb3B0aW9uczpDOC5hcHBlYXJhbmNlLGRpc2FibGVkOiFrfHxxPT09ImFwcGVhcmFuY2UiLG9uQ2hhbmdlOihFKT0+VSgiYXBwZWFyYW5jZSIsRSl9KX0pLFgoYzAse2ljb246TDIuZ2xhc3MsbGFiZWw6IkxpcXVpZCBHbGFzcyIsY2hpbGRyZW46WChrMix7bGFiZWw6IkxpcXVpZCBHbGFzcyIsdmFsdWU6Q1sibGlxdWlkLWdsYXNzIl0/PyJjbGVhciIsb3B0aW9uczpDOFsibGlxdWlkLWdsYXNzIl0sZGlzYWJsZWQ6IWt8fHE9PT0ibGlxdWlkLWdsYXNzIixvbkNoYW5nZTooRSk9PlUoImxpcXVpZC1nbGFzcyIsRSl9KX0pLFgoYzAse2ljb246TDIuZmlsdGVyLGxhYmVsOiJDb2xvciBGaWx0ZXIiLGNoaWxkcmVuOlgoazIse2xhYmVsOiJDb2xvciBGaWx0ZXIiLHZhbHVlOkNbImNvbG9yLWZpbHRlciJdPz8ibm9uZSIsb3B0aW9uczpDOFsiY29sb3ItZmlsdGVyIl0sZGlzYWJsZWQ6IWt8fHE9PT0iY29sb3ItZmlsdGVyIixvbkNoYW5nZTooRSk9PlUoImNvbG9yLWZpbHRlciIsRSl9KX0pLFgoYzAse2ljb246TDIudGV4dFNpemUsbGFiZWw6IlRleHQgU2l6ZSIsY2hpbGRyZW46WChRWCx7dmFsdWU6eSxkaXNhYmxlZDohayxvbkNoYW5nZTpMfSl9KSxKWC5tYXAoKHtrZXk6RSxsYWJlbDp3fSk9PlgoYzAse2ljb246TDJbRT09PSJyZWR1Y2UtbW90aW9uIj8ibW90aW9uIjpFPT09ImluY3JlYXNlLWNvbnRyYXN0Ij8iY29udHJhc3QiOkU9PT0ic2hvdy1ib3JkZXJzIj8iYm9yZGVycyI6RT09PSJyZWR1Y2UtdHJhbnNwYXJlbmN5Ij8idHJhbnNwYXJlbmN5Ijoidm9pY2VvdmVyIl0sbGFiZWw6dyxjaGlsZHJlbjpYKEk1LHtsYWJlbDp3LGNoZWNrZWQ6Q1tFXT09PSJvbiIsZGlzYWJsZWQ6IWt8fHE9PT1FLG9uQ2hhbmdlOihTKT0+VShFLFM/Im9uIjoib2ZmIil9KX0sRSkpXX0pXX0pfSl9dmFyIEY4PSJzZXJ2ZS1zaW06Y29kZWMiLFhYPVt7dmFsdWU6ImF1dG8iLGxhYmVsOiJILjI2NCAoSGFyZHdhcmUpIn0se3ZhbHVlOiJtanBlZyIsbGFiZWw6Ik1KUEVHIChDb21wYXRpYmlsaXR5KSJ9XSxLWD1YKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbWCgicGF0aCIse2Q6Im0xNiAxMyA1LjIyMyAzLjQ4MmEuNS41IDAgMCAwIC43NzctLjQxNlY3Ljg3YS41LjUgMCAwIDAtLjc1Mi0uNDMyTDE2IDEwLjUifSksWCgicmVjdCIse3g6IjIiLHk6IjYiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxMiIscng6IjIifSldfSk7ZnVuY3Rpb24gSjQoe3ByZWZlcmVuY2U6JCxvblByZWZlcmVuY2VDaGFuZ2U6SixhY3RpdmVDb2RlYzpRLGF2Y2NTdXBwb3J0ZWQ6WixjaHJvbWVBdmFpbGFibGU6Sz0hMSxoaWRlQ2hyb21lOlk9ITEsb25IaWRlQ2hyb21lQ2hhbmdlOnF9KXtsZXRbVixHXT1BKCExKSxCPVo/JDoibWpwZWciO3JldHVybiBYKHEwLHtvcGVuOlYsb25PcGVuQ2hhbmdlOkcsImRhdGEtc3RyZWFtLXNldHRpbmdzIjoiIixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpYKEsxLHtjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LWluay01MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlN0cmVhbSJ9KSxYKCJzcGFuIix7fSldfSksY2hpbGRyZW46WCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xLjUgcGItMS41IixjaGlsZHJlbjpbWChjMCx7aWNvbjpLWCxsYWJlbDoiQ29kZWMiLGNoaWxkcmVuOlgoazIse2xhYmVsOiJDb2RlYyIsdmFsdWU6QixvcHRpb25zOlhYLGRpc2FibGVkOiFaLG9uQ2hhbmdlOih6KT0+Sih6KX0pfSksSyYmcSYmWChLMSx7Y2hpbGRyZW46W1goYzAse2ljb246WChzMCx7c2l6ZToxNCxzdHJva2VXaWR0aDoyfSksbGFiZWw6IkRldmljZSBmcmFtZSIsY2hpbGRyZW46WChJNSx7bGFiZWw6IkRldmljZSBmcmFtZSIsY2hlY2tlZDohWSxvbkNoYW5nZTooeik9PnEoIXopfSl9KSxYKCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LWluay01NSBsZWFkaW5nLXNudWcgcHgtMC41IixjaGlsZHJlbjoiVHVybiBvZmYgdG8gaGlkZSB0aGUgYmV6ZWwgd2hlbiB2aWV3aW5nIHRoZSBzaW11bGF0b3Igb24gYSBwaG9uZSwgc28gbmVzdGVkIGZyYW1lcyBkb24ndCBzaHJpbmsgdGhlIHNjcmVlbi4ifSldfSksWCgicCIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC1pbmstNTUgbGVhZGluZy1zbnVnIHB4LTAuNSIsY2hpbGRyZW46IVo/IlRoaXMgYnJvd3NlciBjYW4ndCBkZWNvZGUgSC4yNjQsIHNvIHRoZSBzdHJlYW0gdXNlcyBNSlBFRy4iOkI9PT0iYXV0byImJlE9PT0ibWpwZWciPyJILjI2NCB3YXMgdW5hdmFpbGFibGUgZm9yIHRoaXMgc3RyZWFtLCBzbyBpdCBmZWxsIGJhY2sgdG8gTUpQRUcuIjoiU3dpdGNoIHRvIE1KUEVHIGlmIHRoZSBzdHJlYW0gc3R1dHRlcnMgb3IgZHJvcHMgd2hpbGUgc2NyZWVuIHJlY29yZGluZyB0aGUgYnJvd3NlciB3aW5kb3cuIn0pXX0pfSl9ZnVuY3Rpb24gUTQoe29wZW46JCxvbkNsb3NlOkosdWRpZDpRLGRldmljZVJ1bnRpbWU6WixjdXJyZW50QXBwOkssZXZlbnRMb2dFdmVudHNFbmRwb2ludDpZLGF4T3ZlcmxheUVuYWJsZWQ6cSxvblRvZ2dsZUF4T3ZlcmxheTpWLGNvZGVjUHJlZmVyZW5jZTpHLG9uQ29kZWNQcmVmZXJlbmNlQ2hhbmdlOkIsYWN0aXZlQ29kZWM6TixhdmNjU3VwcG9ydGVkOnosY2hyb21lQXZhaWxhYmxlOlU9ITEsaGlkZUNocm9tZTpIPSExLG9uSGlkZUNocm9tZUNoYW5nZTpGLHdpZHRoOkx9KXtyZXR1cm4gWChPNSx7b3BlbjokLHdpZHRoOkwsc3R5bGU6e2JhY2tncm91bmRDb2xvcjpXNX0sY2hpbGRyZW46W1goTTUse2NoaWxkcmVuOltYKGY2LHtjaGlsZHJlbjoiVG9vbHMifSksWChRMyx7b25DbGljazpKfSldfSksJCYmWCgiZGl2Iix7Y2xhc3NOYW1lOiJwLTMuNSBvdmVyZmxvdy15LWF1dG8gZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTMiLGNoaWxkcmVuOltYKGg3LHt1ZGlkOlEsY3VycmVudEFwcDpLfSksWChlNyx7dWRpZDpRLGV2ZW50c0VuZHBvaW50Oll9KSxYKCQ0LHt1ZGlkOlEscnVudGltZTpafSksWCh1Nyx7b3ZlcmxheUVuYWJsZWQ6cSxvblRvZ2dsZU92ZXJsYXk6Vn0pLFgoczcse3VkaWQ6USxidW5kbGVJZDpLPy5idW5kbGVJZD8/bnVsbH0pLFgodjcse3VkaWQ6USxob3N0OngxfSksWChtNyx7dWRpZDpRLGJ1bmRsZUlkOks/LmJ1bmRsZUlkPz9udWxsfSksWChKNCx7cHJlZmVyZW5jZTpHLG9uUHJlZmVyZW5jZUNoYW5nZTpCLGFjdGl2ZUNvZGVjOk4sYXZjY1N1cHBvcnRlZDp6LGNocm9tZUF2YWlsYWJsZTpVLGhpZGVDaHJvbWU6SCxvbkhpZGVDaHJvbWVDaGFuZ2U6Rn0pXX0pXX0pfWZ1bmN0aW9uIFo0KCQsSil7bGV0IFE7dHJ5e1E9bmV3IFVSTCgkLndlYlNvY2tldERlYnVnZ2VyVXJsKX1jYXRjaHtyZXR1cm4gJH1sZXQgWj1gJHtRLnBhdGhuYW1lfSR7US5zZWFyY2h9YCxLPUoucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiIsWT1KLnByb3RvY29sPT09Imh0dHBzOiI/IndzcyI6IndzIixxPWAke0ouaG9zdH0ke1p9YCxWPSQuZGV2dG9vbHNGcm9udGVuZFVybDt0cnl7bGV0IEc9bmV3IFVSTCgkLmRldnRvb2xzRnJvbnRlbmRVcmwsYCR7Si5wcm90b2NvbH0vLyR7Si5ob3N0fWApO0cuc2VhcmNoUGFyYW1zLmRlbGV0ZSgid3MiKSxHLnNlYXJjaFBhcmFtcy5kZWxldGUoIndzcyIpLEcuc2VhcmNoUGFyYW1zLnNldChZLHEpLFY9YCR7Ry5wYXRobmFtZX0ke0cuc2VhcmNofSR7Ry5oYXNofWB9Y2F0Y2h7fXJldHVybnsuLi4kLHdlYlNvY2tldERlYnVnZ2VyVXJsOmAke0t9Ly8ke0ouaG9zdH0ke1p9YCxkZXZ0b29sc0Zyb250ZW5kVXJsOlZ9fWZ1bmN0aW9uIEMyKCQsSil7ZmV0Y2goYjEoImRldnRvb2xzL2hpZ2hsaWdodCIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dGFyZ2V0SWQ6JCxvbjpKfSksa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiBBOCgpe2xldCAkPWIxKCJkZXZ0b29scy9yZWxlYXNlIik7dHJ5e2lmKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3Iuc2VuZEJlYWNvbil7bGV0IEo9bmV3IEJsb2IoWyJ7fSJdLHt0eXBlOiJhcHBsaWNhdGlvbi9qc29uIn0pO2lmKG5hdmlnYXRvci5zZW5kQmVhY29uKCQsSikpcmV0dXJufX1jYXRjaHt9ZmV0Y2goJCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6Int9IixrZWVwYWxpdmU6ITB9KS5jYXRjaCgoKT0+e30pfWZ1bmN0aW9uIFg0KCQpe2xldCBKPSQuY29udGVudERvY3VtZW50O2lmKCFKKXJldHVybjtsZXQgUT0oKT0+e2xldCBZPVtKXTt3aGlsZShZLmxlbmd0aCl7bGV0IHE9WS5wb3AoKSxWPXEucXVlcnlTZWxlY3RvckFsbCgiW2FyaWEtbGFiZWxdLFt0aXRsZV0iKTtmb3IobGV0IEcgb2YgVil7bGV0IEI9Ry5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8Ry50aXRsZXx8IiI7aWYoL150b2dnbGUgc2NyZWVuY2FzdCQvaS50ZXN0KEIpKXJldHVybiBHfWZvcihsZXQgRyBvZiBxLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKSlpZihHLnNoYWRvd1Jvb3QpWS5wdXNoKEcuc2hhZG93Um9vdCl9cmV0dXJuIG51bGx9LFo9MCxLPSgpPT57WisrO2xldCBZPVEoKTtpZihZJiZZLmdldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIikhPT0iZmFsc2UiKXtZLmNsaWNrKCk7cmV0dXJufWlmKFo8MjApc2V0VGltZW91dChLLDEwMCl9O0soKX1mdW5jdGlvbiBLNCgkKXtsZXQgSj1bXSxRPW5ldyBNYXA7Zm9yKGxldCBaIG9mICQpe2xldCBLPVouYXBwTmFtZXx8Wi5idW5kbGVJZHx8IlVua25vd24iLFk9Wi5idW5kbGVJZHx8SyxxPVEuZ2V0KFkpO2lmKCFxKXE9e2tleTpZLGFwcE5hbWU6SyxidW5kbGVJZDpaLmJ1bmRsZUlkLHRhcmdldHM6W119LFEuc2V0KFkscSksSi5wdXNoKFkpO3EudGFyZ2V0cy5wdXNoKFopfXJldHVybiBKLm1hcCgoWik9PlEuZ2V0KFopKX1mdW5jdGlvbiBZNCgkLEope2xldFtRLFpdPUEoe30pLEs9UjEoKCk9Pkouc2xpY2UoKS5zb3J0KCkuam9pbigifCIpLFtKXSk7cmV0dXJuIF8oKCk9PntpZighJClyZXR1cm47bGV0IFk9ITE7Zm9yKGxldCBxIG9mIEope2lmKCFxKWNvbnRpbnVlO2xldCBWPWAkeyR9OiR7cX1gLEc9RDUuZ2V0KFYpO2lmKHR5cGVvZiBHPT09InN0cmluZyJ8fEc9PT1udWxsKXtaKChCKT0+QltxXT09PUc/Qjp7Li4uQixbcV06R30pO2NvbnRpbnVlfWc3KHgxLCQscSkudGhlbigoQik9PntpZihZKXJldHVybjtaKChOKT0+KHsuLi5OLFtxXTpCfSkpfSl9cmV0dXJuKCk9PntZPSEwfX0sWyQsS10pLFF9ZnVuY3Rpb24gcTQoe3VkaWQ6JCx0YXJnZXRzOkosc2VsZWN0ZWQ6USxvblNlbGVjdFRhcmdldDpaLG9uUmVmcmVzaDpLfSl7bGV0IFk9SzQoSikscT1ZLm1hcCgoTCk9PkwuYnVuZGxlSWQpLmZpbHRlcigoTCk9PiEhTCksVj1ZNCgkLHEpLFtHLEJdPUEoITEpLFtOLHpdPUEobnVsbCksVT1UKG51bGwpLEg9VChudWxsKTtfKCgpPT57aWYoIUcpcmV0dXJuO2xldCBMPShrKT0+e2lmKCFILmN1cnJlbnQpcmV0dXJuO2lmKCFILmN1cnJlbnQuY29udGFpbnMoay50YXJnZXQpKUIoITEpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixMKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixMKX0sW0ddKSxfKCgpPT57aWYoRylyZXR1cm47aWYoVS5jdXJyZW50KUMyKFUuY3VycmVudCwhMSksVS5jdXJyZW50PW51bGw7QTgoKX0sW0ddKSxfKCgpPT57bGV0IEw9KCk9PkE4KCk7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsTCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsTCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLEwpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLEwpfX0sW10pO2xldCBGPVE/KFEudGl0bGV8fFEudXJsfHxRLmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApOiJTZWxlY3QgdGFyZ2V0IjtyZXR1cm4gWCgiZGl2Iix7cmVmOkgsY2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwgbWluLXctMCIsY2hpbGRyZW46W1goImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+e0IoKEwpPT57aWYoIUwpSygpO3JldHVybiFMfSl9LGNsYXNzTmFtZToidy1mdWxsIG1pbi13LTAgaC1bMjZweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIGJnLXBhbmVsIHRleHQtaW5rLTkwIGJvcmRlciBib3JkZXItaW5rLzEyIHJvdW5kZWQtbWQgdGV4dC1bMTJweF0gcHgtMiBjdXJzb3ItcG9pbnRlciB0ZXh0LWxlZnQiLCJhcmlhLWhhc3BvcHVwIjoibGlzdGJveCIsImFyaWEtZXhwYW5kZWQiOkcsImFyaWEtbGFiZWwiOiJXZWJLaXQgdGFyZ2V0IixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgbWluLXctMCIsY2hpbGRyZW46Rn0pLFgocDUse3NpemU6MTIsc3Ryb2tlV2lkdGg6Mn0pXX0pLEcmJlgoInVsIix7cm9sZToibGlzdGJveCIsY2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtW2NhbGMoMTAwJSs0cHgpXSBsZWZ0LTAgbS0wIHAtMSBsaXN0LW5vbmUgYmctcGFuZWwgYm9yZGVyIGJvcmRlci1pbmsvMTIgcm91bmRlZC1sZyBzaGFkb3ctcG9wb3ZlciBtaW4tdy1bMjIwcHhdIG1heC13LVszNjBweF0gbWF4LWgtWzMyMHB4XSBvdmVyZmxvdy15LWF1dG8gei01MCIsY2hpbGRyZW46WS5tYXAoKEwpPT57bGV0IGs9TC5idW5kbGVJZD9WW0wuYnVuZGxlSWRdOm51bGw7cmV0dXJuIFgoImxpIix7Y2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCIsY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMS41IHB0LTEgcGItMC41IHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgdGV4dC1pbmstOTIiLGNoaWxkcmVuOltrP1goImltZyIse3NyYzprLGFsdDoiIixjbGFzc05hbWU6InctNCBoLTQgcm91bmRlZC1bM3B4XSBzaHJpbmstMCBvYmplY3QtY292ZXIifSk6WCgic3BhbiIse2NsYXNzTmFtZToidy00IGgtNCByb3VuZGVkLVszcHhdIHNocmluay0wIG9iamVjdC1jb3ZlciIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46TC5hcHBOYW1lfSldfSksWCgidWwiLHtyb2xlOiJncm91cCIsY2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCBwbC1bMjZweF0iLGNoaWxkcmVuOkwudGFyZ2V0cy5tYXAoKEMpPT57bGV0IE89UT8uaWQ9PT1DLmlkLHk9ISFDLmluVXNlQnlPdGhlckluc3BlY3RvciYmIU8sRT0oQy50aXRsZXx8Qy51cmx8fEMuYXBwTmFtZXx8IlVudGl0bGVkIikuc2xpY2UoMCw5MCksdz1OPT09Qy5pZCYmIXksUz0iZmxleCBmbGV4LWNvbCBweC0yIHB5LVszcHhdIHJvdW5kZWQgdGV4dC1bMTJweF0gbGVhZGluZy1bMS4zNV0iO3JldHVybiBYKCJsaSIse3JvbGU6Im9wdGlvbiIsImFyaWEtc2VsZWN0ZWQiOk8sImFyaWEtZGlzYWJsZWQiOnksdGFiSW5kZXg6eT8tMTowLHRpdGxlOnk/IkFscmVhZHkgYmVpbmcgaW5zcGVjdGVkIGJ5IGFub3RoZXIgZGVidWdnZXIiOnZvaWQgMCxvbk1vdXNlRW50ZXI6KCk9PntpZih5KXJldHVybjtpZihVLmN1cnJlbnQmJlUuY3VycmVudCE9PUMuaWQpQzIoVS5jdXJyZW50LCExKTtVLmN1cnJlbnQ9Qy5pZCx6KEMuaWQpLEMyKEMuaWQsITApfSxvbk1vdXNlTGVhdmU6KCk9PntpZihVLmN1cnJlbnQ9PT1DLmlkKUMyKEMuaWQsITEpLFUuY3VycmVudD1udWxsO3ooKGcpPT5nPT09Qy5pZD9udWxsOmcpfSxvbkNsaWNrOigpPT57aWYoeSlyZXR1cm47WihDLmlkKSxCKCExKX0sY2xhc3NOYW1lOmBmbGV4IGZsZXgtY29sIHB4LTIgcHktWzNweF0gcm91bmRlZCB0ZXh0LVsxMnB4XSBsZWFkaW5nLVsxLjM1XSAke3k/Im9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkIGl0YWxpYyB0ZXh0LWluay04NSI6dz8iYmctdGludC8yMiB0ZXh0LWluay04NSBjdXJzb3ItcG9pbnRlciI6Tz8iYmctaW5rL1swLjA2XSB0ZXh0LWluay04NSBjdXJzb3ItcG9pbnRlciI6InRleHQtaW5rLTg1IGN1cnNvci1wb2ludGVyIn1gLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46RX0pLEMudXJsJiZDLnVybCE9PSJhYm91dDpibGFuayImJlgoInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LWluay00MiBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46Qy51cmx9KV19LEMuaWQpfSl9KV19LEwua2V5KX0pfSldfSl9ZnVuY3Rpb24gVjQoe29wZW46JCxvbkNsb3NlOkosdWRpZDpRLHRhcmdldHM6WixzZWxlY3RlZFRhcmdldElkOkssb25TZWxlY3RUYXJnZXQ6WSxsb2FkaW5nOnEsZXJyb3I6VixvblJlZnJlc2g6Ryx3aWR0aDpCfSl7bGV0IE49Sz9aLmZpbmQoKHopPT56LmlkPT09Syk/P251bGw6bnVsbDtyZXR1cm4gWChPNSx7b3BlbjokLHdpZHRoOkIsY2hpbGRyZW46W1goTTUse2NoaWxkcmVuOltaLmxlbmd0aD4wP1gocTQse3VkaWQ6USx0YXJnZXRzOlosc2VsZWN0ZWQ6TixvblNlbGVjdFRhcmdldDpZLG9uUmVmcmVzaDpHfSk6WCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC1pbmstNDggb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOnE/Ikxvb2tpbmcgZm9yIFNhZmFyaSBhbmQgaW5zcGVjdGFibGUgd2Vidmlld3MuLi4iOiJObyBpbnNwZWN0YWJsZSBTYWZhcmkgb3IgV0tXZWJWaWV3IHRhcmdldHMifSksWChRMyx7b25DbGljazpKLGFyaWFMYWJlbDoiQ2xvc2UgV2ViS2l0IERldlRvb2xzIix0aXRsZToiQ2xvc2UiLGljb25TaXplOjE1fSldfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLWgtMCBiZy13aGl0ZSByZWxhdGl2ZSIsY2hpbGRyZW46Vj9YKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctcGFuZWwtZGVlcCB0ZXh0LWluay01OCB0ZXh0LWNlbnRlciB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46Vn0pOk4mJiQ/WCgiaWZyYW1lIix7c3JjOk4uZGV2dG9vbHNGcm9udGVuZFVybCx0aXRsZTpgV2ViS2l0IERldlRvb2xzIC0gJHtOLnRpdGxlfHxOLnVybHx8Ti5pZH1gLGNsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBib3JkZXItbm9uZSBibG9jayBiZy13aGl0ZSIsb25Mb2FkOih6KT0+WDQoei5jdXJyZW50VGFyZ2V0KX0sTi5pZCk6WCgiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC02IGJnLXBhbmVsLWRlZXAgdGV4dC1pbmstNTggdGV4dC1jZW50ZXIgdGV4dC1bMTNweF0iLGNoaWxkcmVuOk4/IkRldlRvb2xzIHBhdXNlZCDigJQgb3BlbiB0aGUgcGFuZWwgdG8gcmVhdHRhY2guIjoiT3BlbiBTYWZhcmkgb3IgYW4gaW5zcGVjdGFibGUgV0tXZWJWaWV3IGluIHRoZSBzaW11bGF0b3IuIn0pfSldfSl9ZnVuY3Rpb24gWVgoe2hvc3RQYXRoOiQsaG9zdDpKLHVkaWQ6USxvblVwbG9hZFN0YXJ0Olosb25VcGxvYWRQcm9ncmVzczpLLG9uVXBsb2FkRW5kOlksb25Ib3N0UGF0aERyb3A6cX0pe3E/LigkKTtsZXQgVj0kLnNwbGl0KCIvIikucG9wKCk/PyJpbWFnZSIsRz1aKFYsIm1lZGlhIik7cmV0dXJuIEsoRyxudWxsKSxsNygkLEosUSkudGhlbigoKT0+WShHLCEwKSkuY2F0Y2goKEIpPT5ZKEcsITEsQiBpbnN0YW5jZW9mIEVycm9yP0IubWVzc2FnZToiQWRkIGZhaWxlZCIpKX1mdW5jdGlvbiBHNCh7aG9zdDokLHVkaWQ6SixlbmFibGVkOlEsb25VcGxvYWRTdGFydDpaLG9uVXBsb2FkUHJvZ3Jlc3M6SyxvblVwbG9hZEVuZDpZLG9uVW5zdXBwb3J0ZWQ6cSxvbkhvc3RQYXRoRHJvcDpWfSl7bGV0W0csQl09QSghMSksTj1UKDApLHo9UChhc3luYyhMKT0+e2lmKEwucHJldmVudERlZmF1bHQoKSxMLnN0b3BQcm9wYWdhdGlvbigpLE4uY3VycmVudD0wLEIoITEpLCFRfHwhSilyZXR1cm47bGV0IGs9TC5kYXRhVHJhbnNmZXIuZ2V0RGF0YShCMyk7aWYoayl7WVgoe2hvc3RQYXRoOmssaG9zdDokLHVkaWQ6SixvblVwbG9hZFN0YXJ0Olosb25VcGxvYWRQcm9ncmVzczpLLG9uVXBsb2FkRW5kOlksb25Ib3N0UGF0aERyb3A6Vn0pO3JldHVybn1sZXQgQz1BcnJheS5mcm9tKEwuZGF0YVRyYW5zZmVyLmZpbGVzKTtpZihDLmxlbmd0aD09PTApcmV0dXJuO2ZvcihsZXQgTyBvZiBDKXtsZXQgeT1kNyhPKTtpZigheSl7cShPKTtjb250aW51ZX1sZXQgRT1aKE8ubmFtZSx5KTtvNyhPLHksJCxKLCh3KT0+SyhFLHcpLHthbGxvd0luc3RhbGw6d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uYWxsb3dFeGVjPT09ITB9KS50aGVuKCgpPT5ZKEUsITApKS5jYXRjaCgodyk9PlkoRSwhMSx3IGluc3RhbmNlb2YgRXJyb3I/dy5tZXNzYWdlOiJVcGxvYWQgZmFpbGVkIikpfX0sW1EsSiwkLFosSyxZLHEsVl0pLFU9UCgoTCk9PntpZihMLnByZXZlbnREZWZhdWx0KCksUSlMLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJjb3B5In0sW1FdKSxIPVAoKEwpPT57aWYoTC5wcmV2ZW50RGVmYXVsdCgpLCFRKXJldHVybjtpZihOLmN1cnJlbnQrKyxOLmN1cnJlbnQ9PT0xKUIoITApfSxbUV0pLEY9UCgoTCk9PntpZihMLnByZXZlbnREZWZhdWx0KCksTi5jdXJyZW50LS0sTi5jdXJyZW50PD0wKU4uY3VycmVudD0wLEIoITEpfSxbXSk7cmV0dXJue2lzRHJhZ092ZXI6Ryxkcm9wWm9uZVByb3BzOntvbkRyYWdPdmVyOlUsb25EcmFnRW50ZXI6SCxvbkRyYWdMZWF2ZTpGLG9uRHJvcDp6fX19ZnVuY3Rpb24gQjQoKXtsZXRbJF09QSh0MCk7cmV0dXJue3N1cHBvcnRlZDokfX1mdW5jdGlvbiB6MygkLEosUSxaLEs9ImxlZnQiKXtsZXQgWT1QKChVLEgpPT5LPT09ImxlZnQiP1UtSDpILVUsW0tdKSxxPVAoKFUpPT5NYXRoLm1heChRLE1hdGgubWluKFosVSkpLFtRLFpdKSxbVixHXT1BKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuIEo7bGV0IFU9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCQpLEg9VSE9bnVsbD9OdW1iZXIoVSk6TmFOO3JldHVybiBOdW1iZXIuaXNGaW5pdGUoSCk/cShIKTpKfSksQj10eXBlb2Ygd2luZG93PCJ1Ij9NYXRoLm1pbihaLHdpbmRvdy5pbm5lcldpZHRoLTMyKTpaLE49TWF0aC5tYXgoUSxNYXRoLm1pbihCLFYpKSx6PVAoKFUpPT57VS5wcmV2ZW50RGVmYXVsdCgpO2xldCBIPVUuY2xpZW50WCxGPU4sTD1VLmN1cnJlbnRUYXJnZXQ7TC5zZXRQb2ludGVyQ2FwdHVyZShVLnBvaW50ZXJJZCk7bGV0IGs9KE8pPT57bGV0IHk9cShGK1koSCxPLmNsaWVudFgpKTtHKHkpfSxDPShPKT0+e0wucmVsZWFzZVBvaW50ZXJDYXB0dXJlKE8ucG9pbnRlcklkKSxMLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixrKSxMLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsQyksTC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixDKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCQsU3RyaW5nKHEoRitZKEgsTy5jbGllbnRYKSkpKX1jYXRjaHt9fTtMLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixrKSxMLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsQyksTC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixDKX0sW3EsWSxOLCRdKTtyZXR1cm57d2lkdGg6TixvblBvaW50ZXJEb3duOnp9fXZhciBxWD04MDAwO2Z1bmN0aW9uIFZYKCQpe3JldHVybiJmaWxlOi8vIiskLnNwbGl0KCIvIikubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbigiLyIpfWZ1bmN0aW9uIEdYKCQpe3JldHVybiAkIT09Im5vbmUifWZ1bmN0aW9uIHo0KHt0b2FzdDokLG9uUmV2ZWFsOkosb25EaXNtaXNzOlEsb25QYXVzZTpaLG9uUmVzdW1lOkt9KXtsZXRbWSxxXT1BKCExKSxWPVQobnVsbCksRz1UKG51bGwpLEI9KCk9PntpZihHLmN1cnJlbnQpY2xlYXJUaW1lb3V0KEcuY3VycmVudCk7Ry5jdXJyZW50PW51bGx9O18oKCk9PigpPT5CKCksW10pO2xldCBOPShVKT0+e2lmKCEkLnBhdGgpe1UucHJldmVudERlZmF1bHQoKTtyZXR1cm59QigpLFooKSxHLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e0cuY3VycmVudD1udWxsLHEoITEpLEsoKX0scVgpLFUuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLFZYKCQucGF0aCkpLFUuZGF0YVRyYW5zZmVyLnNldERhdGEoQjMsJC5wYXRoKSxVLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPSJjb3B5IjtsZXQgSD1WLmN1cnJlbnQ7aWYoSClVLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoSCxILm9mZnNldFdpZHRoLzIsSC5vZmZzZXRIZWlnaHQvMik7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5xKCEwKSl9LHo9KFUpPT57aWYoQigpLHEoITEpLEdYKFUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QpKVEoKTtlbHNlIEsoKX07cmV0dXJuIFgoImRpdiIseyJkYXRhLXRlc3RpZCI6InNjcmVlbnNob3QtdG9hc3QiLGNsYXNzTmFtZToidy1bbWluKDMyMHB4LGNhbGMoMTAwdnctMzJweCkpXSIsb25Nb3VzZUVudGVyOlosb25Nb3VzZUxlYXZlOkssY2hpbGRyZW46WyQudGh1bWImJlgoImltZyIse3JlZjpWLCJkYXRhLXRlc3RpZCI6ImRyYWctaW1hZ2UiLHNyYzokLnRodW1iLGFsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIix0b3A6LTk5OTksbGVmdDowLHdpZHRoOjgwLGhlaWdodDo4MCxib3JkZXJSYWRpdXM6MTIsb2JqZWN0Rml0OiJjb3ZlciIscG9pbnRlckV2ZW50czoibm9uZSJ9fSksJC5zdGF0dXM9PT0iZXJyb3IiP1goImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMy41IHB5LTIuNSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLWluay8xMiByb3VuZGVkLXhsIHRleHQtaW5rLTkwIHRleHQtWzEycHhdIHNoYWRvdy1wb3BvdmVyIixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIHNocmluay0wIGJnLWRhbmdlciJ9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJzZWxlY3QtdGV4dCIsY2hpbGRyZW46JC5tZXNzYWdlPz8iU2NyZWVuc2hvdCBmYWlsZWQifSldfSk6WCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOkosZGlzYWJsZWQ6JC5zdGF0dXMhPT0ic2F2ZWQiLGRyYWdnYWJsZTokLnN0YXR1cz09PSJzYXZlZCIsb25EcmFnU3RhcnQ6TixvbkRyYWdFbmQ6eiwiYXJpYS1sYWJlbCI6Ik9wZW4gc2NyZWVuc2hvdCBpbiBGaW5kZXIiLHRpdGxlOiJDbGljayB0byByZXZlYWwgaW4gRmluZGVyIMK3IGRyYWcgdG8gY29weSB0aGUgZmlsZSIsY2xhc3NOYW1lOmBncm91cCBmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIgZ2FwLTMgcGwtMiBwci0zLjUgcHktMiBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLWluay8xMiByb3VuZGVkLXhsIHNoYWRvdy1wb3BvdmVyIHRleHQtbGVmdCBjdXJzb3ItcG9pbnRlciBlbmFibGVkOmhvdmVyOmJnLXBhbmVsLWhvdmVyIGRpc2FibGVkOmN1cnNvci1kZWZhdWx0IFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZV0gJHtZPyJpbnZpc2libGUiOiIifWAsY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToic2l6ZS05IHJvdW5kZWQtbWQgb3ZlcmZsb3ctaGlkZGVuIGJnLWluay8xMCBzaHJpbmstMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByaW5nLTEgcmluZy1pbmsvMTAgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46JC50aHVtYj9YKCJpbWciLHtzcmM6JC50aHVtYixhbHQ6IiIsY2xhc3NOYW1lOiJzaXplLWZ1bGwgb2JqZWN0LWNvdmVyIixkcmFnZ2FibGU6ITF9KTpYKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBzaXplLTQgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci1pbmsvMzAgYm9yZGVyLXQtaW5rIGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjhzX2xpbmVhcl9pbmZpbml0ZV0ifSl9KSxYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgbGVhZGluZy10aWdodCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gZm9udC1zZW1pYm9sZCB0ZXh0LWluayIsY2hpbGRyZW46JC5zdGF0dXM9PT0ic2F2aW5nIj8iU2F2aW5nIFNjcmVlbnNob3TigKYiOiJTY3JlZW5zaG90IFNhdmVkIn0pLCQuc3RhdHVzPT09InNhdmVkIiYmWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC1pbmstNjAiLGNoaWxkcmVuOiJPcGVuIGluIEZpbmRlciJ9KV19KSwkLnN0YXR1cz09PSJzYXZlZCImJlgodTUse2NsYXNzTmFtZToibWwtYXV0byB0ZXh0LWluay04MCBwb2ludGVyLWV2ZW50cy1ub25lIixzaXplOjE2LHN0cm9rZVdpZHRoOjIuMjV9KV19KV19KX12YXIgTjQ9MzUwMCxVND00MDAwO2Z1bmN0aW9uIEw0KCQsSil7bGV0IFE9VChudWxsKSxaPVQobnVsbCksSz1UKG51bGwpLFk9VChudWxsKSxxPVQobnVsbCksVj1QKCgpPT57aWYoSy5jdXJyZW50KWNsZWFyVGltZW91dChLLmN1cnJlbnQpO0suY3VycmVudD1udWxsLFkuY3VycmVudD1udWxsfSxbXSksRz1QKChMKT0+e2xldCBrPUw/P1ouY3VycmVudD8/dm9pZCAwO2lmKFYoKSxxLmN1cnJlbnQ9bnVsbCxIMC5kaXNtaXNzKGspLGs9PT12b2lkIDB8fFouY3VycmVudD09PVN0cmluZyhrKSlRLmN1cnJlbnQ9bnVsbCxaLmN1cnJlbnQ9bnVsbH0sW1ZdKSxCPVAoKCk9PntsZXQgTD1RLmN1cnJlbnQ7aWYoTD8ucGF0aCl4MSgicmV2ZWFsU2NyZWVuc2hvdCIse3BhdGg6TC5wYXRofSl9LFtdKSxOPVAoKEwpPT57VigpO2xldCBrPU1hdGgubWF4KDAsTCksQz1aLmN1cnJlbnQ7cS5jdXJyZW50PWssWS5jdXJyZW50PURhdGUubm93KCkrayxLLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+RyhDPz92b2lkIDApLGspfSxbVixHXSksej1QKCgpPT57aWYoIUsuY3VycmVudHx8WS5jdXJyZW50PT1udWxsKXJldHVybjtxLmN1cnJlbnQ9TWF0aC5tYXgoMCxZLmN1cnJlbnQtRGF0ZS5ub3coKSksVigpfSxbVl0pLFU9UCgoKT0+e2xldCBMPXEuY3VycmVudDtpZihMPT1udWxsKXJldHVybjtOKEwpfSxbTl0pLEg9UCgoTCxrPTEvMCk9PntpZihRLmN1cnJlbnQ9TCxaLmN1cnJlbnQ9TC5pZCxIMC5jdXN0b20oKEMpPT5YKHo0LHt0b2FzdDpMLG9uUmV2ZWFsOkIsb25EaXNtaXNzOigpPT5HKEMpLG9uUGF1c2U6eixvblJlc3VtZTpVfSkse2lkOkwuaWQsZHVyYXRpb246MS8wLHVuc3R5bGVkOiEwfSksTnVtYmVyLmlzRmluaXRlKGspKU4oayk7ZWxzZSBWKCkscS5jdXJyZW50PW51bGx9LFtWLEcseixVLEIsTl0pO3JldHVybntjYXB0dXJlOlAoYXN5bmMoKT0+e2lmKCEkKXJldHVybjtsZXQgTD1jcnlwdG8ucmFuZG9tVVVJRCgpO0goe2lkOkwsc3RhdHVzOiJzYXZpbmciLHBoYXNlOiJpbiJ9KTtsZXQgazt0cnl7bGV0IEM9YXdhaXQgeDEoInNjcmVlbnNob3QiLHt1ZGlkOiQsLi4uSj97ZGlzcGxheTpKfTp7fX0pO2lmKGs9dHlwZW9mIEMucGF0aD09PSJzdHJpbmciP0MucGF0aDoiIixDLmV4aXRDb2RlIT09MHx8IWspe0goe2lkOkwsc3RhdHVzOiJlcnJvciIscGhhc2U6ImluIixtZXNzYWdlOkMuc3RkZXJyLnRyaW0oKXx8IlNjcmVlbnNob3QgZmFpbGVkIn0sVTQpO3JldHVybn19Y2F0Y2goQyl7SCh7aWQ6TCxzdGF0dXM6ImVycm9yIixwaGFzZToiaW4iLG1lc3NhZ2U6QyBpbnN0YW5jZW9mIEVycm9yP0MubWVzc2FnZToiU2NyZWVuc2hvdCBmYWlsZWQifSxVNCk7cmV0dXJufUgoe2lkOkwsc3RhdHVzOiJzYXZlZCIscGhhc2U6ImluIixwYXRoOmt9LE40KTt0cnl7bGV0IEM9YXdhaXQgeDEoInNjcmVlbnNob3RUaHVtYm5haWwiLHtwYXRoOmt9KSxPPXR5cGVvZiBDLmRhdGE9PT0ic3RyaW5nIj9DLmRhdGEucmVwbGFjZSgvXHMrL2csIiIpOiIiO2lmKE8pe2xldCB5PVEuY3VycmVudDtpZih5Py5pZD09PUwpSCh7Li4ueSx0aHVtYjpgZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7T31gfSxONCl9fWNhdGNoe319LFskLEosSF0pLHJldmVhbDpCLGRpc21pc3M6R319ZnVuY3Rpb24gSDQoJD1uZXcgRGF0ZSl7bGV0IEo9KFopPT5TdHJpbmcoWikucGFkU3RhcnQoMiwiMCIpO3JldHVybmBzZXJ2ZS1zaW0tcmVjb3JkaW5nLSR7WyQuZ2V0RnVsbFllYXIoKSxKKCQuZ2V0TW9udGgoKSsxKSxKKCQuZ2V0RGF0ZSgpKSxKKCQuZ2V0SG91cnMoKSksSigkLmdldE1pbnV0ZXMoKSksSigkLmdldFNlY29uZHMoKSldLmpvaW4oIi0iKX0ubXA0YH1mdW5jdGlvbiBVMygkLEosUSl7bGV0IFo9UT9gP3Rva2VuPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFEpfWA6IiI7cmV0dXJuIGIxKGBoZWxwZXIvJHtlbmNvZGVVUklDb21wb25lbnQoJCl9L3JlY29yZGluZyR7Sj9gLyR7Sn1gOiIifSR7Wn1gKX1mdW5jdGlvbiBCWCgkKXtyZXR1cm4oJD8vZmlsZW5hbWU9IihbXiJdKykiLy5leGVjKCQpOm51bGwpPy5bMV0/P251bGx9YXN5bmMgZnVuY3Rpb24gazQoJCl7bGV0IEo9YXdhaXQgJC5qc29uKCkuY2F0Y2goKCk9Pm51bGwpO3JldHVybiBKPy5tZXNzYWdlPz9KPy5lcnJvcj8/YEhUVFAgJHskLnN0YXR1c31gfWZ1bmN0aW9uIHpYKCQsSil7bGV0IFE9VVJMLmNyZWF0ZU9iamVjdFVSTCgkKSxaPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtaLmhyZWY9USxaLmRvd25sb2FkPUosZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChaKSxaLmNsaWNrKCksWi5yZW1vdmUoKSxzZXRUaW1lb3V0KCgpPT5VUkwucmV2b2tlT2JqZWN0VVJMKFEpLDFlNCl9dmFyIE5YPTIwMDA7ZnVuY3Rpb24gTjMoJCl7bGV0IEo9JD9EYXRlLnBhcnNlKCQpOkRhdGUubm93KCk7cmV0dXJue3N0YXR1czoicmVjb3JkaW5nIixzdGFydGVkQXQ6TnVtYmVyLmlzRmluaXRlKEopP0o6RGF0ZS5ub3coKX19YXN5bmMgZnVuY3Rpb24gTzgoJCl7dHJ5e2xldCBKPWF3YWl0IGZldGNoKFUzKCQpKTtyZXR1cm4gSi5vaz9hd2FpdCBKLmpzb24oKTpudWxsfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBDNCgkLHtwb2xsTXM6Sj1OWH09e30pe2xldFtRLFpdPUEoe3N0YXR1czoiaWRsZSJ9KSxLPVQodm9pZCAwKSxZPVQoMCkscT1UKDApLFY9VChudWxsKSxHPVQoUSk7XygoKT0+e0cuY3VycmVudD1RfSxbUV0pO2xldCBCPVAoYXN5bmMoKT0+e2xldCBVPUsuY3VycmVudDtpZighVSlyZXR1cm47WS5jdXJyZW50Kys7bGV0IEg9Ry5jdXJyZW50O1ooe3N0YXR1czoic2F2aW5nIn0pO2xldCBGPVYuY3VycmVudD8uZGV2aWNlPT09VT9WLmN1cnJlbnQudG9rZW46dm9pZCAwO3RyeXtsZXQgTD1hd2FpdCBmZXRjaChVMyhVLCJzdG9wIixGKSx7bWV0aG9kOiJQT1NUIn0pO2lmKCFMLm9rKXRocm93IEVycm9yKGF3YWl0IGs0KEwpKTtpZihWLmN1cnJlbnQ/LnRva2VuPT09RilWLmN1cnJlbnQ9bnVsbDtsZXQgaz1CWChMLmhlYWRlcnMuZ2V0KCJjb250ZW50LWRpc3Bvc2l0aW9uIikpPz9INCgpO2lmKHpYKGF3YWl0IEwuYmxvYigpLGspLEgwLnN1Y2Nlc3MoYFNhdmVkICR7a31gKSxLLmN1cnJlbnQ9PT1VKVooe3N0YXR1czoiaWRsZSJ9KX1jYXRjaChMKXtIMC5lcnJvcihgQ291bGQgbm90IHNhdmUgcmVjb3JkaW5nOiAke0wgaW5zdGFuY2VvZiBFcnJvcj9MLm1lc3NhZ2U6U3RyaW5nKEwpfWApO2xldCBrPWF3YWl0IE84KFUpO2lmKEsuY3VycmVudCE9PVUpcmV0dXJuO2lmKCFrKVooSC5zdGF0dXM9PT0ic2F2aW5nIj97c3RhdHVzOiJpZGxlIn06SCk7ZWxzZSBaKGsucmVjb3JkaW5nP04zKGsuc3RhcnRlZEF0KTp7c3RhdHVzOiJpZGxlIn0pfX0sW10pO18oKCk9PntpZihLLmN1cnJlbnQ9JCxaKHtzdGF0dXM6ImlkbGUifSksISQpcmV0dXJuO2xldCBVPSExLEg9YXN5bmMoKT0+e2lmKHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKXJldHVybjtsZXQgTD1ZLmN1cnJlbnQsaz0rK3EuY3VycmVudCxDPWF3YWl0IE84KCQpO2lmKFV8fCFDfHxMIT09WS5jdXJyZW50fHxrIT09cS5jdXJyZW50KXJldHVybjtsZXQgTz1HLmN1cnJlbnQ7aWYoTy5zdGF0dXM9PT0ic3RhcnRpbmcifHxPLnN0YXR1cz09PSJzYXZpbmciKXJldHVybjtpZighQy5yZWNvcmRpbmcpe2lmKFYuY3VycmVudD8uZGV2aWNlPT09JClWLmN1cnJlbnQ9bnVsbDtpZihPLnN0YXR1cyE9PSJpZGxlIilaKHtzdGF0dXM6ImlkbGUifSk7cmV0dXJufWlmKEMubGltaXRSZWFjaGVkJiZPLnN0YXR1cz09PSJyZWNvcmRpbmciJiZWLmN1cnJlbnQ/LmRldmljZT09PSQpe0gwLm1lc3NhZ2UoIlJlY29yZGluZyByZWFjaGVkIHRoZSBzZXJ2ZXIncyB0aW1lIGxpbWl0OyBzYXZpbmciKSxCKCk7cmV0dXJufWxldCB5PU4zKEMuc3RhcnRlZEF0KTtpZihPLnN0YXR1cyE9PSJyZWNvcmRpbmcifHxPLnN0YXJ0ZWRBdCE9PXkuc3RhcnRlZEF0KVooeSl9O0goKTtsZXQgRj1zZXRJbnRlcnZhbCgoKT0+e0goKX0sSik7cmV0dXJuKCk9PntpZihVPSEwLGNsZWFySW50ZXJ2YWwoRiksSy5jdXJyZW50PT09JClLLmN1cnJlbnQ9dm9pZCAwfX0sWyQsSixCXSk7bGV0IE49UChhc3luYygpPT57bGV0IFU9Sy5jdXJyZW50O2lmKCFVKXJldHVybjtZLmN1cnJlbnQrKyxaKHtzdGF0dXM6InN0YXJ0aW5nIn0pO3RyeXtsZXQgSD1hd2FpdCBmZXRjaChVMyhVLCJzdGFydCIpLHttZXRob2Q6IlBPU1QifSk7aWYoIUgub2spdGhyb3cgRXJyb3IoYXdhaXQgazQoSCkpO2xldCBGPWF3YWl0IEguanNvbigpO2lmKEsuY3VycmVudCE9PVUpe2ZldGNoKFUzKFUsInN0b3AiLEYudG9rZW4pLHttZXRob2Q6IlBPU1QifSkudGhlbigoTCk9PkwuYm9keT8uY2FuY2VsKCkpLmNhdGNoKCgpPT57fSk7cmV0dXJufVYuY3VycmVudD1GLnRva2VuP3tkZXZpY2U6VSx0b2tlbjpGLnRva2VufTpudWxsLFooTjMoRi5zdGFydGVkQXQpKX1jYXRjaChIKXtIMC5lcnJvcihgQ291bGQgbm90IHN0YXJ0IHJlY29yZGluZzogJHtIIGluc3RhbmNlb2YgRXJyb3I/SC5tZXNzYWdlOlN0cmluZyhIKX1gKTtsZXQgRj1hd2FpdCBPOChVKTtpZihLLmN1cnJlbnQhPT1VKXJldHVybjtaKEY/LnJlY29yZGluZz9OMyhGLnN0YXJ0ZWRBdCk6e3N0YXR1czoiaWRsZSJ9KX19LFtdKSx6PVAoKCk9PntpZihRLnN0YXR1cz09PSJpZGxlIilOKCk7ZWxzZSBpZihRLnN0YXR1cz09PSJyZWNvcmRpbmciKUIoKX0sW1Euc3RhdHVzLE4sQl0pO3JldHVybntzdGF0ZTpRLHN0YXJ0Ok4sc3RvcDpCLHRvZ2dsZTp6fX12YXIgVVg9IiNmZjNiMzAiO2Z1bmN0aW9uIExYKCQpe2xldCBKPU1hdGgubWF4KDAsTWF0aC5mbG9vcigkLzEwMDApKTtyZXR1cm5gJHtNYXRoLmZsb29yKEovNjApfToke1N0cmluZyhKJTYwKS5wYWRTdGFydCgyLCIwIil9YH1mdW5jdGlvbiBGNCh7c3RhdGU6JCxvblRvZ2dsZTpKfSl7bGV0IFE9JC5zdGF0dXM9PT0icmVjb3JkaW5nIixaPSQuc3RhdHVzPT09InN0YXJ0aW5nInx8JC5zdGF0dXM9PT0ic2F2aW5nIixbSyxZXT1BKCgpPT5EYXRlLm5vdygpKTtfKCgpPT57aWYoIVEpcmV0dXJuO1koRGF0ZS5ub3coKSk7bGV0IFY9c2V0SW50ZXJ2YWwoKCk9PlkoRGF0ZS5ub3coKSksNTAwKTtyZXR1cm4oKT0+Y2xlYXJJbnRlcnZhbChWKX0sW1FdKTtsZXQgcT1RPyJTdG9wIHJlY29yZGluZyI6JC5zdGF0dXM9PT0ic2F2aW5nIj8iU2F2aW5nIHJlY29yZGluZ+KApiI6JC5zdGF0dXM9PT0ic3RhcnRpbmciPyJTdGFydGluZyByZWNvcmRpbmfigKYiOiJSZWNvcmQgc2NyZWVuIjtyZXR1cm4gWChJMS5CdXR0b24seyJhcmlhLWxhYmVsIjpxLCJhcmlhLXByZXNzZWQiOlEsdGl0bGU6cSxmb3JjZURpc2FibGVkOlosb25DbGljazooVik9PntWLnByZXZlbnREZWZhdWx0KCksSigpfSxzdHlsZTpRP3tjb2xvcjpVWCxnYXA6NH06dm9pZCAwLGNoaWxkcmVuOlo/WChtMCx7c2l6ZToxOCxzdHJva2VXaWR0aDoyLGNsYXNzTmFtZToiYW5pbWF0ZS1zcGluIn0pOlE/WChLMSx7Y2hpbGRyZW46W1goJDIse3NpemU6MTQsc3Ryb2tlV2lkdGg6MCxmaWxsOiJjdXJyZW50Q29sb3IifSksWCgic3BhbiIseyJkYXRhLXRlc3RpZCI6InJlY29yZGluZy1lbGFwc2VkIixzdHlsZTp7Zm9udFNpemU6MTIsZm9udFZhcmlhbnROdW1lcmljOiJ0YWJ1bGFyLW51bXMiLGxpbmVIZWlnaHQ6IjE4cHgifSxjaGlsZHJlbjpMWChLLSQuc3RhcnRlZEF0KX0pXX0pOlgobDUse3NpemU6MTgsc3Ryb2tlV2lkdGg6Mn0pfSl9ZnVuY3Rpb24gTzQoe2RlZmF1bHRXaWR0aDokLHZpZXdwb3J0V2lkdGg6Six2aWV3cG9ydEhlaWdodDpRLGFzcGVjdFJhdGlvOlosaW5pdGlhbEZpdDpLPSExLG9uU3RhcnQ6WX0pe2xldCBxPUY1KCksW1YsR109QSghMSksW0IsTl09QSghMSksW3osVV09QSghMSksSD1UKG51bGwpLEY9VChbXSksTD1UKG51bGwpLGs9VChudWxsKSxDPVQobnVsbCksTz1UKG51bGwpLHk9VChLKSxFPVQoITEpO18oKCk9PntFLmN1cnJlbnQ9ITB9LFtdKTtsZXQgdz1QKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuICQ7aWYoeS5jdXJyZW50JiYhRS5jdXJyZW50KXJldHVybiBfNSgkLEosUSxaKTtsZXQgYj1OYU47dHJ5e2xldCBqPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShZOCk7Yj1qIT1udWxsP051bWJlcihqKTpOYU59Y2F0Y2h7fXJldHVybiBINygkLEosUSxaLGIpfSxbWiwkLFEsSl0pLFM9UjEoKCk9PncoKSxbd10pLFtRMSxnXT1BKFMpLGg9VChTKSxJPVQoJCksdT1fNSgkLEosUSxaKSxaMT1NYXRoLm1pbihhNix1KSxyPVExPz8kLE0xPVE1KHIsJCxKLFEsWiksSjE9UCgoYik9PntsZXQgaj1ZMyhiKTtoLmN1cnJlbnQ9aixnKGopfSxbXSksaT1QKChiKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwkPD0wKXJldHVybjtsZXQgaj1RNShiLCQsSixRLFopO3RyeXt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oWTgsU3RyaW5nKGovJCkpfWNhdGNoe319LFtaLCQsUSxKXSksZj1QKChiKT0+e2lmKEMuY3VycmVudCE9bnVsbCljbGVhclRpbWVvdXQoQy5jdXJyZW50KTtDLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e0MuY3VycmVudD1udWxsLGkoYil9LEw3KX0sW2ldKTtfKCgpPT57aWYoVnx8QilyZXR1cm47bGV0IGI9aC5jdXJyZW50O2lmKGI9PW51bGwpcmV0dXJuO2xldCBqPVE1KGIsJCxKLFEsWik7aWYoaiE9PWIpSjEoail9LFtaLCQsQixWLFEsSixKMV0pLF8oKCk9PntpZihJLmN1cnJlbnQ9PT0kKXJldHVybjtJLmN1cnJlbnQ9JCxKMSh3KCkpfSxbJCx3LEoxXSksXygoKT0+e2lmKCFWJiYhQilyZXR1cm47bGV0IGI9ZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3Isaj1kb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QsTjE9ZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0O3JldHVybiBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj0ibndzZS1yZXNpemUiLGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdD0ibm9uZSIsZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PSJub25lIiwoKT0+e2RvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yPWIsZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0PWosZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PU4xfX0sW1YsQl0pLF8oKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm47bGV0IGI9KCk9PntsZXQgTjE9aC5jdXJyZW50O2lmKE4xPT1udWxsKXJldHVybjtpZihDLmN1cnJlbnQhPW51bGwpY2xlYXJUaW1lb3V0KEMuY3VycmVudCksQy5jdXJyZW50PW51bGw7aShOMSl9LGo9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIiliKCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLGIpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLGopLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixiKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixqKX19LFtpXSk7bGV0IFUxPVAoKGIpPT57aWYoYj51KXJldHVybiB1K3E4KGItdSx1KTtpZihiPFoxKXJldHVybiBaMS1xOChaMS1iLHUpO3JldHVybiBifSxbdSxaMV0pLFgxPVAoKCk9PntpZihrLmN1cnJlbnQpay5jdXJyZW50KCksay5jdXJyZW50PW51bGw7TighMSl9LFtdKSxCMT1QKChiKT0+e2xldCBqPXBlcmZvcm1hbmNlLm5vdygpLE4xPUYuY3VycmVudDtOMS5wdXNoKHt0OmoseDpifSk7d2hpbGUoTjEubGVuZ3RoPjEmJmotTjFbMF0udD5VNylOMS5zaGlmdCgpfSxbXSksRjE9UCgoYik9PntsZXQgaj1VMShiKTtpZihMLmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoTC5jdXJyZW50KTtMLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57TC5jdXJyZW50PW51bGwsSjEoaiksQjEoail9KX0sW1UxLEIxLEoxXSksVzE9UCgoYixqLE4xKT0+e1gxKCk7bGV0IEMxPWguY3VycmVudD8/JDtILmN1cnJlbnQ9e3BvaW50ZXJJZDpiLHN0YXJ0WDpqLHN0YXJ0WTpOMSxzdGFydFdpZHRoOkMxfSxGLmN1cnJlbnQ9W3t0OnBlcmZvcm1hbmNlLm5vdygpLHg6QzF9XSxZKCksRyghMCl9LFtYMSwkLFldKSxvPVAoKCk9PntsZXQgYj1ILmN1cnJlbnQ7aWYoSC5jdXJyZW50PW51bGwsTC5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEwuY3VycmVudCksTC5jdXJyZW50PW51bGw7aWYoYiYmYi5wb2ludGVySWQ+PTApe2xldCBrMT1PLmN1cnJlbnQ7aWYoazE/Lmhhc1BvaW50ZXJDYXB0dXJlKGIucG9pbnRlcklkKSlrMS5yZWxlYXNlUG9pbnRlckNhcHR1cmUoYi5wb2ludGVySWQpfUcoITEpO2xldCBqPWguY3VycmVudD8/JCxOMT1GNyhGLmN1cnJlbnQpO0YuY3VycmVudD1bXTtsZXQgQzE9UTUoaitOMSpONywkLEosUSxaKSxwPVkzKGs3KEMxLFskXSxHNykpLGU9TWF0aC5hYnMoai1wKTwwLjUmJk1hdGguYWJzKE4xKTw4O2lmKHF8fGUpe0oxKHApLGYocCk7cmV0dXJufU4oITApLGsuY3VycmVudD1DNyh7ZnJvbTpqLHRvOnAsdmVsb2NpdHk6TjEsc3RpZmZuZXNzOkI3LGRhbXBpbmc6ejcsb25VcGRhdGU6SjEsb25Db21wbGV0ZTooKT0+e2suY3VycmVudD1udWxsLE4oITEpLGYocCl9fSl9LFtaLCQscSxmLFEsSixKMV0pO18oKCk9PntyZXR1cm4oKT0+e2lmKFgxKCksTC5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEwuY3VycmVudCk7aWYoQy5jdXJyZW50IT1udWxsKXtpZihjbGVhclRpbWVvdXQoQy5jdXJyZW50KSxoLmN1cnJlbnQhPW51bGwpaShoLmN1cnJlbnQpfX19LFtYMSxpXSksXygoKT0+e2lmKCFWKXJldHVybjtsZXQgYj0oKT0+bygpLGo9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIilvKCl9LE4xPShDMSk9PntsZXQgcD1ILmN1cnJlbnQ7aWYoIXB8fHAucG9pbnRlcklkIT09QzEucG9pbnRlcklkKXJldHVybjtDMS5wcmV2ZW50RGVmYXVsdCgpLEYxKEE0KHAsQzEuY2xpZW50WCxDMS5jbGllbnRZLFopKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIixiKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLE4xLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixiLCEwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsYiwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsaiksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsYiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixOMSwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsYiwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLGIsITApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLGopfX0sW1osbyxWLEYxXSk7bGV0IGM9UCgoYik9PntsZXQgaj1ILmN1cnJlbnQ7aWYoIWp8fGoucG9pbnRlcklkIT09Yi5wb2ludGVySWQpcmV0dXJuO2IucHJldmVudERlZmF1bHQoKSxiLnN0b3BQcm9wYWdhdGlvbigpLG8oKX0sW29dKSxkPVAoKGIpPT57aWYoYi5idXR0b24hPT0wKXJldHVybjtiLnByZXZlbnREZWZhdWx0KCksYi5zdG9wUHJvcGFnYXRpb24oKSxiLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoYi5wb2ludGVySWQpLFcxKGIucG9pbnRlcklkLGIuY2xpZW50WCxiLmNsaWVudFkpfSxbVzFdKSxuPVAoKGIpPT57bGV0IGo9SC5jdXJyZW50O2lmKCFqfHxqLnBvaW50ZXJJZCE9PWIucG9pbnRlcklkKXJldHVybjtiLnByZXZlbnREZWZhdWx0KCksRjEoQTQoaixiLmNsaWVudFgsYi5jbGllbnRZLFopKX0sW1osRjFdKSxZMT1QKChiKT0+e2xldCBqPWIua2V5PT09IkFycm93UmlnaHQifHxiLmtleT09PSJBcnJvd0Rvd24iPzE6Yi5rZXk9PT0iQXJyb3dMZWZ0Inx8Yi5rZXk9PT0iQXJyb3dVcCI/LTE6MDtpZihqPT09MClyZXR1cm47Yi5wcmV2ZW50RGVmYXVsdCgpLFgxKCk7bGV0IE4xPWIuc2hpZnRLZXk/ODA6MjQsQzE9WTMoUTUoTTEraipOMSwkLEosUSxaKSk7SjEoQzEpLGYoQzEpfSxbWixYMSxNMSwkLGYsUSxKLEoxXSk7cmV0dXJue2hhbmRsZVJlZjpPLHdpZHRoOnIsY29tbWl0dGVkV2lkdGg6TTEsbWluV2lkdGg6WjEsbWF4V2lkdGg6dSxpc1Jlc2l6aW5nOlYsaXNJbmVydGlhOkIscmVkdWNlZE1vdGlvbjpxLGhhbmRsZUhvdmVyZWQ6eixoYW5kbGVBY3RpdmU6enx8Vnx8QixzZXRIYW5kbGVIb3ZlcmVkOlUsb25Qb2ludGVyRG93bjpkLG9uUG9pbnRlck1vdmU6bixvblBvaW50ZXJFbmQ6YyxvbktleURvd246WTF9fWZ1bmN0aW9uIEE0KCQsSixRLFope2xldCBLPUotJC5zdGFydFgsWT0oUS0kLnN0YXJ0WSkqWjtyZXR1cm4gJC5zdGFydFdpZHRoKyhNYXRoLmFicyhLKT49TWF0aC5hYnMoWSk/SzpZKX1mdW5jdGlvbiBNNCgpe2xldCAkPVQobmV3IE1hcCksSj1UKG5ldyBNYXApLFE9UCgoVik9PntsZXQgRz1KLmN1cnJlbnQuZ2V0KFYpO2lmKEcpY2xlYXJUaW1lb3V0KEcpO0ouY3VycmVudC5kZWxldGUoVil9LFtdKSxaPVAoKFYsRz0xLzApPT57SDAuY3VzdG9tKCgpPT5YKFQ3LHt0b2FzdDpWfSkse2lkOlYuaWQsZHVyYXRpb246Ryx1bnN0eWxlZDohMH0pfSxbXSksSz1QKChWLEcpPT57bGV0IEI9Y3J5cHRvLnJhbmRvbVVVSUQoKSxOPXtpZDpCLG5hbWU6VixraW5kOkcsc3RhdHVzOiJ1cGxvYWRpbmciLHByb2dyZXNzOjB9O3JldHVybiAkLmN1cnJlbnQuc2V0KEIsTiksWihOKSxCfSxbWl0pLFk9UCgoVixHKT0+e2xldCBCPSQuY3VycmVudC5nZXQoVik7aWYoIUIpcmV0dXJuO1EoVik7bGV0IE49ey4uLkIsLi4uR307aWYoJC5jdXJyZW50LnNldChWLE4pLFooTixHLnN0YXR1cz09PSJzdWNjZXNzInx8Ry5zdGF0dXM9PT0iZXJyb3IiPzMwMDA6MS8wKSxHLnN0YXR1cz09PSJzdWNjZXNzInx8Ry5zdGF0dXM9PT0iZXJyb3IiKXtsZXQgej1zZXRUaW1lb3V0KCgpPT57JC5jdXJyZW50LmRlbGV0ZShWKSxKLmN1cnJlbnQuZGVsZXRlKFYpfSwzMDAwKTtKLmN1cnJlbnQuc2V0KFYseil9fSxbUSxaXSkscT1QKChWLEcpPT57bGV0IEI9JC5jdXJyZW50LmdldChWKTtpZighQilyZXR1cm47bGV0IE49ey4uLkIscHJvZ3Jlc3M6R307JC5jdXJyZW50LnNldChWLE4pLFooTil9LFtaXSk7cmV0dXJue2FkZDpLLHVwZGF0ZTpZLHNldFByb2dyZXNzOnF9fWZ1bmN0aW9uIFc0KCQsSil7bGV0W1EsWl09QShbXSksW0ssWV09QShudWxsKSxbcSxWXT1BKCExKSxHPVAoYXN5bmMoKT0+e2lmKCEkKXJldHVybjtWKCEwKSxZKG51bGwpO3RyeXtsZXQgQj1hd2FpdCBmZXRjaCgkLHtjYWNoZToibm8tc3RvcmUifSksTj1hd2FpdCBCLmpzb24oKTtpZighQi5va3x8Ti5lcnJvcil0aHJvdyBFcnJvcihOLmVycm9yfHwiRmFpbGVkIHRvIGxpc3QgV2ViS2l0IHRhcmdldHMiKTtsZXQgej10eXBlb2Ygd2luZG93PiJ1Ij9udWxsOndpbmRvdy5sb2NhdGlvbixVPU4udGFyZ2V0cz8/W107Wih6P1UubWFwKChIKT0+WjQoSCx6KSk6VSl9Y2F0Y2goQil7WShCIGluc3RhbmNlb2YgRXJyb3I/Qi5tZXNzYWdlOiJGYWlsZWQgdG8gc3RhcnQgV2ViS2l0IERldlRvb2xzIil9ZmluYWxseXtWKCExKX19LFskXSk7cmV0dXJuIF8oKCk9PntpZighSilyZXR1cm47RygpO2xldCBCPXNldEludGVydmFsKCgpPT52b2lkIEcoKSwyNTAwKTtyZXR1cm4oKT0+Y2xlYXJJbnRlcnZhbChCKX0sW0osR10pLHt0YXJnZXRzOlEsZXJyb3I6Syxsb2FkaW5nOnEscmVmcmVzaDpHfX12YXIgSFg9NjAsa1g9MTAwMDtmdW5jdGlvbiBQNCgkLEosUSxaPUhYKXtsZXRbSyxZXT1BKG51bGwpLFtxLFZdPUEoMCksW0csQl09QShaKSxbTix6XT1BKDApO18oKCk9PntpZighSnx8ISQpcmV0dXJuO2xldCBDPSExLE89JC5pbmNsdWRlcygiPyIpPyImIjoiPyIseT1hc3luYygpPT57dHJ5e2xldCBTPWF3YWl0KGF3YWl0IGZldGNoKGAkeyR9JHtPfWxpbWl0PSR7R30mb2Zmc2V0PTBgLHtjYWNoZToibm8tc3RvcmUifSkpLmpzb24oKTtpZihDKXJldHVybjtpZihZKFMuZGV2aWNlcz8/W10pLHR5cGVvZiBTLnRvdGFsPT09Im51bWJlciIpVihTLnRvdGFsKX1jYXRjaHtpZighQylZKFtdKX19O3koKTtsZXQgRT1zZXRJbnRlcnZhbCh5LFE/NzUwOjMwMDApO3JldHVybigpPT57Qz0hMCxjbGVhckludGVydmFsKEUpfX0sWyQsSixOLFEsR10pO2xldCBVPVAoKCk9PnooKEMpPT5DKzEpLFtdKSxIPVAoKCk9PkIoKEMpPT5DK1opLFtaXSksRj1QKCgpPT5CKGtYKSxbXSksTD1QKCgpPT5CKFopLFtaXSksaz1xPihLPy5sZW5ndGg/PzApO3JldHVybntkZXZpY2VzOkssdG90YWw6cSxyZWZyZXNoOlUsbG9hZE1vcmU6SCxsb2FkQWxsOkYscmVzZXRQYWdlOkwsaGFzTW9yZTprfX1mdW5jdGlvbiBDWCgkLEope3JldHVybiAkLndpZHRoPT09Si53aWR0aCYmJC5oZWlnaHQ9PT1KLmhlaWdodHx8JC53aWR0aD09PUouaGVpZ2h0JiYkLmhlaWdodD09PUoud2lkdGh9ZnVuY3Rpb24gXzQoJCxKLFEpe2lmKCEkPy5sZW5ndGh8fCEoSj4wKXx8IShRPjApKXJldHVybiBudWxsO2xldCBaPXt3aWR0aDpKLGhlaWdodDpRfTtyZXR1cm4gJC5maW5kKChLKT0+Q1goSyxaKSk/P251bGx9ZnVuY3Rpb24gRDQoJCl7cmV0dXJuICQ9PT0iaW5uZXIiPyJwcmltYXJ5LTEiOiQ9PT0iY292ZXIiPyJwcmltYXJ5Ijp2b2lkIDB9dmFyIE04PXtzdHJlYW1lZDohMSxmZWxsQmFjazohMX07ZnVuY3Rpb24gVDQoJCxKKXtzd2l0Y2goSil7Y2FzZSJmcmFtZSI6cmV0dXJuICQuc3RyZWFtZWQ/JDp7Li4uJCxzdHJlYW1lZDohMH07Y2FzZSJ0aW1lb3V0IjpyZXR1cm4gJC5zdHJlYW1lZHx8JC5mZWxsQmFjaz8kOnsuLi4kLGZlbGxCYWNrOiEwfTtjYXNlImVycm9yIjpyZXR1cm4gJC5mZWxsQmFjaz8kOnsuLi4kLGZlbGxCYWNrOiEwfTtjYXNlInJlc2V0IjpyZXR1cm4gTTh9fXZhciBJND00MDAwO3ZhciBGWD17S2V5QTo0LEtleUI6NSxLZXlDOjYsS2V5RDo3LEtleUU6OCxLZXlGOjksS2V5RzoxMCxLZXlIOjExLEtleUk6MTIsS2V5SjoxMyxLZXlLOjE0LEtleUw6MTUsS2V5TToxNixLZXlOOjE3LEtleU86MTgsS2V5UDoxOSxLZXlROjIwLEtleVI6MjEsS2V5UzoyMixLZXlUOjIzLEtleVU6MjQsS2V5VjoyNSxLZXlXOjI2LEtleVg6MjcsS2V5WToyOCxLZXlaOjI5LERpZ2l0MTozMCxEaWdpdDI6MzEsRGlnaXQzOjMyLERpZ2l0NDozMyxEaWdpdDU6MzQsRGlnaXQ2OjM1LERpZ2l0NzozNixEaWdpdDg6MzcsRGlnaXQ5OjM4LERpZ2l0MDozOSxFbnRlcjo0MCxFc2NhcGU6NDEsQmFja3NwYWNlOjQyLFRhYjo0MyxTcGFjZTo0NCxNaW51czo0NSxFcXVhbDo0NixCcmFja2V0TGVmdDo0NyxCcmFja2V0UmlnaHQ6NDgsQmFja3NsYXNoOjQ5LFNlbWljb2xvbjo1MSxRdW90ZTo1MixCYWNrcXVvdGU6NTMsQ29tbWE6NTQsUGVyaW9kOjU1LFNsYXNoOjU2LENhcHNMb2NrOjU3LEYxOjU4LEYyOjU5LEYzOjYwLEY0OjYxLEY1OjYyLEY2OjYzLEY3OjY0LEY4OjY1LEY5OjY2LEYxMDo2NyxGMTE6NjgsRjEyOjY5LFByaW50U2NyZWVuOjcwLFNjcm9sbExvY2s6NzEsUGF1c2U6NzIsSW5zZXJ0OjczLEhvbWU6NzQsUGFnZVVwOjc1LERlbGV0ZTo3NixFbmQ6NzcsUGFnZURvd246NzgsQXJyb3dSaWdodDo3OSxBcnJvd0xlZnQ6ODAsQXJyb3dEb3duOjgxLEFycm93VXA6ODIsTnVtTG9jazo4MyxOdW1wYWREaXZpZGU6ODQsTnVtcGFkTXVsdGlwbHk6ODUsTnVtcGFkU3VidHJhY3Q6ODYsTnVtcGFkQWRkOjg3LE51bXBhZEVudGVyOjg4LE51bXBhZDE6ODksTnVtcGFkMjo5MCxOdW1wYWQzOjkxLE51bXBhZDQ6OTIsTnVtcGFkNTo5MyxOdW1wYWQ2Ojk0LE51bXBhZDc6OTUsTnVtcGFkODo5NixOdW1wYWQ5Ojk3LE51bXBhZDA6OTgsTnVtcGFkRGVjaW1hbDo5OSxDb250cm9sTGVmdDoyMjQsU2hpZnRMZWZ0OjIyNSxBbHRMZWZ0OjIyNixNZXRhTGVmdDoyMjcsQ29udHJvbFJpZ2h0OjIyOCxTaGlmdFJpZ2h0OjIyOSxBbHRSaWdodDoyMzAsTWV0YVJpZ2h0OjIzMX07ZnVuY3Rpb24gRTQoJCl7cmV0dXJuIEZYWyRdPz9udWxsfWFzeW5jIGZ1bmN0aW9uIHc0KCQsSix7ZmV0Y2hJbXBsOlE9ZmV0Y2gsdGltZW91dE1zOlo9MzAwMH09e30pe2xldCBLO3RyeXtLPWF3YWl0IFEoJCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe2J1bmRsZUlkOkp9KSxzaWduYWw6QWJvcnRTaWduYWwudGltZW91dChaKX0pfWNhdGNoKFkpe3JldHVybiBZPy5uYW1lPT09IlRpbWVvdXRFcnJvciI/InVua25vd24iOiJub3Qtc2VudCJ9aWYoIUsub2spcmV0dXJuIm5vdC1zZW50Ijt0cnl7cmV0dXJuKGF3YWl0IEsuanNvbigpKS5zZW50PT09ITA/InNlbnQiOiJub3Qtc2VudCJ9Y2F0Y2h7cmV0dXJuIm5vdC1zZW50In19ZnVuY3Rpb24gVzgoJCl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoJCkmJiQ+PTIyNCYmJDw9MjMxfXZhciBBWD0yMSxPWD1uZXcgU2V0KFsyMjcsMjMxXSk7ZnVuY3Rpb24gYjQoJCl7cmV0dXJuICQuY29kZT09PSJLZXlSIiYmJC5tZXRhS2V5JiYhJC5jdHJsS2V5JiYhJC5hbHRLZXkmJiEkLnNoaWZ0S2V5fXZhciBNWD1uZXcgU2V0KFsiVGFiIiwiRW50ZXIiLCJOdW1wYWRFbnRlciIsIlNwYWNlIl0pO2Z1bmN0aW9uIHk0KCQpe3JldHVybiBNWC5oYXMoJCl9ZnVuY3Rpb24gUDgoJCl7bGV0IEo9JDtyZXR1cm4gdHlwZW9mIEo/LmNsb3Nlc3Q9PT0iZnVuY3Rpb24iJiZKLmNsb3Nlc3QoImlucHV0LCBzZWxlY3QsIHRleHRhcmVhIikhPW51bGx9dmFyIFdYPSJidXR0b24sIGFbaHJlZl0sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBzdW1tYXJ5LCBbdGFiaW5kZXhdLCBbY29udGVudGVkaXRhYmxlXSI7ZnVuY3Rpb24gUzQoJCl7bGV0IEo9JDtyZXR1cm4gdHlwZW9mIEo/LmNsb3Nlc3Q9PT0iZnVuY3Rpb24iJiZKLmNsb3Nlc3QoV1gpIT1udWxsfWZ1bmN0aW9uIHg0KCQpe2xldCBKPSQuYWN0aXZlRWxlbWVudDtpZihKJiZKIT09JC5ib2R5JiZ0eXBlb2YgSi5ibHVyPT09ImZ1bmN0aW9uIilKLmJsdXIoKX1mdW5jdGlvbiBSNCgpe2xldCAkPW5ldyBTZXQsSj1uZXcgU2V0LFE9KCk9PntsZXQgWj1bLi4uJF0ubWFwKChLKT0+KHt0eXBlOiJ1cCIsdXNhZ2U6S30pKTtyZXR1cm4gJC5jbGVhcigpLEouY2xlYXIoKSxafTtyZXR1cm57aGVsZDokLGZvcndhcmQoWixLKXtpZihKLmRlbGV0ZShLKSxaPT09ImRvd24iKXJldHVybiAkLmFkZChLKSxbe3R5cGU6Wix1c2FnZTpLfV07aWYoISQuaGFzKEspKXJldHVybltdOyQuZGVsZXRlKEspO2xldCBZPVtdO2lmKE9YLmhhcyhLKSlmb3IobGV0IHEgb2ZbLi4uJF0pe2lmKFc4KHEpKWNvbnRpbnVlOyQuZGVsZXRlKHEpLFkucHVzaCh7dHlwZToidXAiLHVzYWdlOnF9KX1yZXR1cm4gWS5wdXNoKHt0eXBlOlosdXNhZ2U6S30pLFl9LHJlbGVhc2VBbGw6USxyZWxvYWRFdmVudHMoKXtsZXQgWj1RKCk7Zm9yKGxldCBLIG9mIFopaWYoVzgoSy51c2FnZSkpSi5hZGQoSy51c2FnZSk7cmV0dXJue3JlbGVhc2U6Wix0YXA6QVh9fSxyZXN0b3JlRXZlbnRzKCl7bGV0IFo9Wy4uLkpdLmZpbHRlcigoSyk9PiEkLmhhcyhLKSkubWFwKChLKT0+KHt0eXBlOiJkb3duIix1c2FnZTpLfSkpO2ZvcihsZXQgSyBvZiBaKSQuYWRkKEsudXNhZ2UpO3JldHVybiBKLmNsZWFyKCksWn19fXZhciBfOD0zMjAsajQ9NzYwLEQ4PTMwMDt2YXIgUFg9bmV3IFNldChbIjAiLCJvZmYiLCJmYWxzZSIsImhpZGUiLCJiYXJlIl0pLF9YPW5ldyBTZXQoWyIxIiwib24iLCJ0cnVlIiwic2hvdyJdKTtmdW5jdGlvbiBEWCgkKXtpZigkPT1udWxsKXJldHVybiBudWxsO2xldCBRPSh0eXBlb2YgJD09PSJzdHJpbmciP25ldyBVUkxTZWFyY2hQYXJhbXMoJC5zdGFydHNXaXRoKCI/Iik/JC5zbGljZSgxKTokKTokKS5nZXQoImNocm9tZSIpO2lmKFE9PW51bGwpcmV0dXJuIG51bGw7bGV0IFo9US50cmltKCkudG9Mb3dlckNhc2UoKTtpZihQWC5oYXMoWikpcmV0dXJuITA7aWYoX1guaGFzKFopKXJldHVybiExO3JldHVybiBudWxsfWZ1bmN0aW9uIHY0KHtzZWFyY2g6JCxzdG9yYWdlOkp9PXt9KXtsZXQgUT1EWCgkKTtpZihRIT1udWxsKXJldHVybiBRO3RyeXtyZXR1cm4gSj8uZ2V0SXRlbSgic2VydmUtc2ltOmNocm9tZSIpPT09ImhpZGRlbiJ9Y2F0Y2h7cmV0dXJuITF9fWZ1bmN0aW9uIGc0KCQse3N0b3JhZ2U6Sixsb2NhdGlvbjpRLHJlcGxhY2VTdGF0ZTpafT17fSl7dHJ5e0o/LnNldEl0ZW0oInNlcnZlLXNpbTpjaHJvbWUiLCQ/ImhpZGRlbiI6InNob3duIil9Y2F0Y2h7fWlmKCFRfHwhWilyZXR1cm47dHJ5e2xldCBLPW5ldyBVUkwoUS5ocmVmKSxZPUsuc2VhcmNoO2lmKCQpSy5zZWFyY2hQYXJhbXMuc2V0KCJjaHJvbWUiLCIwIik7ZWxzZSBLLnNlYXJjaFBhcmFtcy5kZWxldGUoImNocm9tZSIpO2lmKEsuc2VhcmNoPT09WSlyZXR1cm47WihgJHtLLnBhdGhuYW1lfSR7Sy5zZWFyY2h9JHtLLmhhc2h9YCl9Y2F0Y2h7fX1mdW5jdGlvbiBoNCh7aGFzQ2hyb21lOiQsaXNMYW5kc2NhcGU6SixoaWRlQ2hyb21lOlF9KXtyZXR1cm4gJCYmIUomJiFRfWZ1bmN0aW9uIGY0KHtoYXNDaHJvbWU6JCxpc0xhbmRzY2FwZTpKfSl7cmV0dXJuICQmJiFKfWZ1bmN0aW9uIFQ4KCQsSil7aWYoISQpcmV0dXJuIG51bGw7aWYoISQuZGV2aWNlKXJldHVybiAkO2lmKCEkLnByb3h5SGVscGVycylyZXR1cm4gJDtsZXQgWj1gJHskLmJhc2VQYXRoPT09Ii8iPyIiOigkLmJhc2VQYXRoPz8iIikucmVwbGFjZSgvXC8rJC8sIiIpfS9oZWxwZXIvJHtlbmNvZGVVUklDb21wb25lbnQoJC5kZXZpY2UpfWAsSz1gJHtKLnByb3RvY29sfS8vJHtKLmhvc3R9YCxZPUoucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiI7cmV0dXJuey4uLiQsdXJsOmAke0t9JHtafWAsc3RyZWFtVXJsOmAke0t9JHtafS9zdHJlYW0ubWpwZWdgLHdzVXJsOmAke1l9Ly8ke0ouaG9zdH0ke1p9L3dzYH19ZnVuY3Rpb24gSTgoJCl7aWYoJD8uaW5jbHVkZXMoImRldnRvb2xzIikpcmV0dXJuImRldnRvb2xzIjtpZigkPy5pbmNsdWRlcygidG9vbHMiKSlyZXR1cm4idG9vbHMiO3JldHVybiBudWxsfWZ1bmN0aW9uIFRYKCQsSil7bGV0IFE9JC5pbmNsdWRlcygiPyIpPyImIjoiPyI7cmV0dXJuYCR7JH0ke1F9ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KEopfWB9YXN5bmMgZnVuY3Rpb24gbTQoJCxKLFE9e30pe2xldCBLPWF3YWl0KFEuZmV0Y2hJbXBsPz9mZXRjaCkoVFgoJCxKKSx7Y2FjaGU6Im5vLXN0b3JlIixzaWduYWw6US5zaWduYWx9KTtpZighSy5vaylyZXR1cm4gbnVsbDtsZXQgWT1lMChhd2FpdCBLLmpzb24oKSk7cmV0dXJuIFk/LmRldmljZT09PUo/WTpudWxsfWZ1bmN0aW9uIHA0KCQsSixRKXtsZXQgWj0hMDtyZXR1cm4gJC5vbm1lc3NhZ2U9KEspPT57aWYoIVopcmV0dXJuO3RyeXtsZXQgWT1lMChKU09OLnBhcnNlKEsuZGF0YSkpO2lmKFkmJkomJlkuZGV2aWNlIT09SilyZXR1cm47UShZKX1jYXRjaHt9fSwoKT0+e1o9ITEsJC5jbG9zZSgpfX1mdW5jdGlvbiB1NCgkLEope2xldCBRPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShKKSksWj1uZXcgVWludDhBcnJheSgxK1EubGVuZ3RoKTtyZXR1cm4gWlswXT0kLFouc2V0KFEsMSksWn1mdW5jdGlvbiBJWCgkLEosUT0zMil7bGV0IFo9Wy4uLiQsSl07cmV0dXJuIFoubGVuZ3RoPlE/Wi5zbGljZShaLmxlbmd0aC1RKTpafWZ1bmN0aW9uIEU4KCQsSixRPURhdGUubm93KCksWj0xNTAwKXtsZXQgSz1KLmZpbHRlcigoWSk9PlEtWS5jcmVhdGVkQXQ8PVopO2lmKCEkfHwkLnJlYWR5U3RhdGUhPT0xKXJldHVybiBLO2ZvcihsZXQgWSBvZiBLKSQuc2VuZCh1NChZLnRhZyxZLnBheWxvYWQpLmJ1ZmZlcik7cmV0dXJuW119ZnVuY3Rpb24gbDQoJCxKLFEsWixLPURhdGUubm93KCkpe2xldCBZPUU4KCQsSixLKTtpZigkPy5yZWFkeVN0YXRlPT09MSlyZXR1cm4gJC5zZW5kKHU0KFEsWikuYnVmZmVyKSxZO3JldHVybiBJWChZLHt0YWc6USxwYXlsb2FkOlosY3JlYXRlZEF0Okt9KX1mdW5jdGlvbiBkNCgkKXtyZXR1cm4gJD9gJHskLmRldmljZX06JHskLnBpZH06JHskLnN0cmVhbVVybH06JHskLndzVXJsfWA6IiJ9ZnVuY3Rpb24gRVgoKXtsZXQgJD13aW5kb3cuX19TSU1fUFJFVklFV19fPy5pbml0aWFsU3RhdGUsSj1JOCgkPy5wYW5lcyksW1EsWl09QSgoKT0+VDgoZTAod2luZG93Ll9fU0lNX1BSRVZJRVdfXyksd2luZG93LmxvY2F0aW9uKSksW0ssWV09QSghMSksW3EsVl09QSgoKT0+e2xldCBwPWUwKHdpbmRvdy5fX1NJTV9QUkVWSUVXX18pO2lmKHApcmV0dXJuIHAuZGV2aWNlO3JldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgiZGV2aWNlIil9KSxbRyxCXT1BKCExKSxbTix6XT1BKEo9PT0iZGV2dG9vbHMiKSxbVSxIXT1BKCgpPT57aWYoJD8ucGFuZXMpcmV0dXJuICQucGFuZXMuaW5jbHVkZXMoImRldmljZXMiKTtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4hMTtyZXR1cm4gd2luZG93LmlubmVyV2lkdGg+PUQ4KzUyMH0pLHt3aWR0aDpGLG9uUG9pbnRlckRvd246TH09ejMoInNlcnZlLXNpbTpkZXZpY2Utc2lkZWJhci13aWR0aCIsRDgsMjQwLDY0MCwicmlnaHQiKSxbayxDXT1BKG51bGwpLE89d2luZG93Ll9fU0lNX1BSRVZJRVdfXyx5PU8/LmdyaWRBcGlFbmRwb2ludD8/YjEoImdyaWQvYXBpIiksRT1PPy5ncmlkU3RhcnRFbmRwb2ludD8/YjEoImdyaWQvYXBpL3N0YXJ0Iiksdz1PPy5ncmlkU2h1dGRvd25FbmRwb2ludD8/YjEoImdyaWQvYXBpL3NodXRkb3duIiksW1MsUTFdPUEoe30pLFtnLGhdPUEoe30pLFtJLHVdPUEoe30pLFtaMSxyXT1BKCgpPT5uZXcgU2V0KSxNMT1PYmplY3QudmFsdWVzKFMpLnNvbWUoQm9vbGVhbil8fE9iamVjdC52YWx1ZXMoZykuc29tZShCb29sZWFuKSx7ZGV2aWNlczpKMSx0b3RhbDppLHJlZnJlc2g6Zixsb2FkTW9yZTpVMSxsb2FkQWxsOlgxLHJlc2V0UGFnZTpCMSxoYXNNb3JlOkYxfT1QNCh5LCEwLE0xKSxXMT0hIShxJiZKMT8uZmluZCgocCk9PnAuZGV2aWNlPT09cSk/LmhlbHBlciksbz1QKChwKT0+e1YocCk7dHJ5e2xldCBlPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO2Uuc2VhcmNoUGFyYW1zLnNldCgiZGV2aWNlIixwKSx3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwiIixlLnRvU3RyaW5nKCkpfWNhdGNoe319LFtdKSxjPVAoYXN5bmMocCxlPTIwMDAwKT0+e2xldCBrMT1EYXRlLm5vdygpK2U7d2hpbGUoRGF0ZS5ub3coKTxrMSl7dHJ5e2lmKCgoYXdhaXQoYXdhaXQgZmV0Y2goeSx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCkpLmRldmljZXM/P1tdKS5zb21lKChwMSk9PnAxLmRldmljZT09PXAmJnAxLmhlbHBlcikpcmV0dXJuITB9Y2F0Y2h7fWF3YWl0IG5ldyBQcm9taXNlKChQMSk9PnNldFRpbWVvdXQoUDEsNDAwKSl9cmV0dXJuITF9LFt5XSksZD1QKGFzeW5jKHApPT57UTEoKGUpPT4oey4uLmUsW3BdOiEwfSkpLHUoKGUpPT4oey4uLmUsW3BdOm51bGx9KSk7dHJ5e2xldCBlPWF3YWl0IGZldGNoKEUse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHt1ZGlkOnB9KX0pLGsxPWF3YWl0IGUuanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZighZS5va3x8IWsxLm9rKXt1KChQMSk9Pih7Li4uUDEsW3BdOmsxLmVycm9yPz9gSFRUUCAke2Uuc3RhdHVzfWB9KSk7cmV0dXJufXIoKFAxKT0+UDEuaGFzKHApP1AxOm5ldyBTZXQoUDEpLmFkZChwKSksYXdhaXQgYyhwKX1jYXRjaChlKXt1KChrMSk9Pih7Li4uazEsW3BdOmU/Lm1lc3NhZ2U/PyJSZXF1ZXN0IGZhaWxlZCJ9KSl9ZmluYWxseXtRMSgoZSk9Pih7Li4uZSxbcF06ITF9KSksZigpfX0sW0UsYyxmXSksbj1QKGFzeW5jKHApPT57aCgoZSk9Pih7Li4uZSxbcF06ITB9KSksdSgoZSk9Pih7Li4uZSxbcF06bnVsbH0pKTt0cnl7bGV0IGU9YXdhaXQgZmV0Y2godyx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3VkaWQ6cH0pfSksazE9YXdhaXQgZS5qc29uKCkuY2F0Y2goKCk9Pih7fSkpO2lmKCFlLm9rfHwhazEub2spdSgoUDEpPT4oey4uLlAxLFtwXTprMS5lcnJvcj8/YEhUVFAgJHtlLnN0YXR1c31gfSkpfWNhdGNoKGUpe3UoKGsxKT0+KHsuLi5rMSxbcF06ZT8ubWVzc2FnZT8/IlJlcXVlc3QgZmFpbGVkIn0pKX1maW5hbGx5e2goKGUpPT4oey4uLmUsW3BdOiExfSkpLGYoKX19LFt3LGZdKTtfKCgpPT57aWYocSlyZXR1cm47aWYoUT8uZGV2aWNlKXtWKFEuZGV2aWNlKTtyZXR1cm59aWYoIUoxfHxKMS5sZW5ndGg9PT0wKXJldHVybjtsZXQgcD1KMS5maW5kKChlKT0+ZS5oZWxwZXIpPz9KMS5maW5kKChlKT0+ZS5zdGF0ZT09PSJCb290ZWQiKT8/SjFbMF07aWYocClWKHAuZGV2aWNlKX0sW3EsUT8uZGV2aWNlLEoxXSk7bGV0IFkxPVAoKHApPT57WigoZSk9PntpZihwPVQ4KGUwKHApLHdpbmRvdy5sb2NhdGlvbiksZDQoZSk9PT1kNChwKSlyZXR1cm4gZTtpZihwKXdpbmRvdy5fX1NJTV9QUkVWSUVXX189cDtlbHNlIGlmKHdpbmRvdy5fX1NJTV9QUkVWSUVXX18pe2xldHtiYXNlUGF0aDprMSxhbGxvd0V4ZWM6UDF9PXdpbmRvdy5fX1NJTV9QUkVWSUVXX187d2luZG93Ll9fU0lNX1BSRVZJRVdfXz17YmFzZVBhdGg6azEsYWxsb3dFeGVjOlAxfX1yZXR1cm4gcH0pfSxbXSk7XygoKT0+e2xldCBwPWAke2IxKCJhcGkvZXZlbnRzIil9JHtxP2A/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHEpfWA6IiJ9YCxlPUo1KHApO3JldHVybiBwNChlLHEsWTEpfSxbcSxXMSxZMV0pLF8oKCk9PntpZighcXx8IVcxfHxRPy5kZXZpY2U9PT1xKXJldHVybjtsZXQgcD1uZXcgQWJvcnRDb250cm9sbGVyLGU9ITEsazE9bnVsbCxQMT03NTAsZzE9YXN5bmMoKT0+e3RyeXtsZXQgcDE9YXdhaXQgbTQoYjEoImFwaSIpLHEse3NpZ25hbDpwLnNpZ25hbH0pO2lmKCFlJiZwMSl7WTEocDEpO3JldHVybn19Y2F0Y2h7fWlmKCFlKWsxPXNldFRpbWVvdXQoZzEsUDEpLFAxPU1hdGgubWluKFAxKjIsNTAwMCl9O3JldHVybiBnMSgpLCgpPT57aWYoZT0hMCxwLmFib3J0KCksazEpY2xlYXJUaW1lb3V0KGsxKX19LFtxLFcxLFE/LmRldmljZSxZMV0pO2xldCBiPXE/P1E/LmRldmljZT8/bnVsbCxqPUoxPy5maW5kKChwKT0+cC5kZXZpY2U9PT1iKT8/bnVsbCxOMT0hIVEmJlEuZGV2aWNlPT09YixDMTtpZihOMSYmUSlDMT1YKHdYLHtjb25maWc6USxkZXZpY2VOYW1lOmo/Lm5hbWU/P251bGwsZGV2aWNlUnVudGltZTpqPy5ydW50aW1lPz9udWxsLGNocm9tZTpqPy5jaHJvbWU/P251bGwsZGlzcGxheXM6aj8uZGlzcGxheXM/P251bGwscHJlZmVyTWpwZWc6WjEuaGFzKFEuZGV2aWNlKSxheE92ZXJsYXlFbmFibGVkOkcsc2V0QXhPdmVybGF5RW5hYmxlZDpCLGRldnRvb2xzT3BlbjpOLHNldERldnRvb2xzT3Blbjp6LGdyaWRPcGVuOlUsc2V0R3JpZE9wZW46SCxncmlkUGFuZWxXaWR0aDpGLHNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDprLHNldFNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpDLHN0cmVhbWluZzpLLHNldFN0cmVhbWluZzpZfSk7ZWxzZXtsZXQgcD1VPzEyK0YrMjQ6MjQ7QzE9WCgiZGl2Iix7Y2xhc3NOYW1lOiJoLXNjcmVlbiBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMyBiZy1wYWdlIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIgW3RyYW5zaXRpb246cGFkZGluZ18wLjI1c19lYXNlXSIsc3R5bGU6e3BhZGRpbmdMZWZ0OnAscGFkZGluZ1JpZ2h0OjI0fSxjaGlsZHJlbjpqP1goaDYse25hbWU6ai5uYW1lLHJ1bnRpbWU6ai5ydW50aW1lLGNocm9tZTpqLmNocm9tZT8/bnVsbCxwbGFjZWhvbGRlckFzc2V0OmoucGxhY2Vob2xkZXJBc3NldD8/bnVsbCxidXN5OiEhai5oZWxwZXJ8fCEhU1tqLmRldmljZV0sYnVzeUxhYmVsOmouaGVscGVyPyJDb25uZWN0aW5n4oCmIjoiU3RhcnRpbmfigKYiLGVycm9yOklbai5kZXZpY2VdPz9udWxsLG9uU3RhcnQ6KCk9PmQoai5kZXZpY2UpfSk6WCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMyB0ZXh0LWNlbnRlciIsY2hpbGRyZW46W1goImgxIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxOHB4XSBtLTAgdGV4dC1pbmstOTAiLGNoaWxkcmVuOiJObyBzaW11bGF0b3JzIGF2YWlsYWJsZSJ9KSxYKCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LWluay01NSB0ZXh0LVsxNHB4XSBtYXgtdy0xMjAiLGNoaWxkcmVuOlsiQ3JlYXRlIGEgc2ltdWxhdG9yIGluIFhjb2RlLCBvciBzdGFydCBvbmUgd2l0aCIsIiAiLFgoImNvZGUiLHtjbGFzc05hbWU6ImJnLWluay8xMCBweC0xLjUgcHktMC41IHJvdW5kZWQgdGV4dC1bMTNweF0iLGNoaWxkcmVuOiJidW54IHNlcnZlLXNpbSAtLWRldGFjaCJ9KSwiLiJdfSldfSl9KX1yZXR1cm4gWChLMSx7Y2hpbGRyZW46W0MxLFgoRDcse30pLFgocjYse29wZW46VSxvbkNsb3NlOigpPT5IKCExKSx3aWR0aDpGLHNpZGU6ImxlZnQiLGRldmljZXM6SjEsdG90YWw6aSxoYXNNb3JlOkYxLG9uTG9hZE1vcmU6VTEsb25Mb2FkQWxsOlgxLG9uUmVzZXRQYWdlOkIxLHNlbGVjdGVkVWRpZDpiLG9uU2VsZWN0Om8sc3RhcnRpbmc6UyxzaHV0dGluZ0Rvd246ZyxvblNodXRkb3duOm59KSxYKFozLHtwYW5lbFdpZHRoOkYsdmlzaWJsZTpVLG9uUG9pbnRlckRvd246TCxhcmlhTGFiZWw6IlJlc2l6ZSBzaW11bGF0b3JzIHNpZGViYXIiLHNpZGU6ImxlZnQifSksWChTNix7b3BlbjpVLG9uQ2xpY2s6KCk9PkgoITApfSldfSl9ZnVuY3Rpb24gd1goe2NvbmZpZzokLGRldmljZU5hbWU6SixkZXZpY2VSdW50aW1lOlEsY2hyb21lOlosZGlzcGxheXM6SyxwcmVmZXJNanBlZzpZLGF4T3ZlcmxheUVuYWJsZWQ6cSxzZXRBeE92ZXJsYXlFbmFibGVkOlYsZGV2dG9vbHNPcGVuOkcsc2V0RGV2dG9vbHNPcGVuOkIsZ3JpZE9wZW46TixzZXRHcmlkT3Blbjp6LGdyaWRQYW5lbFdpZHRoOlUsc2VsZWN0ZWREZXZ0b29sc1RhcmdldElkOkgsc2V0U2VsZWN0ZWREZXZ0b29sc1RhcmdldElkOkYsc3RyZWFtaW5nOkwsc2V0U3RyZWFtaW5nOmt9KXtsZXQgQz0kLmluaXRpYWxTdGF0ZSxPPUk4KEM/LnBhbmVzKTtfKCgpPT57ZG9jdW1lbnQudGl0bGU9Sj9gU2ltdWxhdG9yIC0gJHtKfWA6IlNpbXVsYXRvciBQcmV2aWV3In0sW0pdKTtsZXQgeT1FMChKKSxFPVc0KCQuZGV2dG9vbHNFbmRwb2ludD8/YjEoImRldnRvb2xzIiksRyk7XygoKT0+e2lmKCFHKXJldHVybjtpZihIJiZFLnRhcmdldHMuc29tZSgoeCk9PnguaWQ9PT1IKSlyZXR1cm47RihFLnRhcmdldHMubGVuZ3RoPT09MT9FLnRhcmdldHNbMF0uaWQ6bnVsbCl9LFtHLEUudGFyZ2V0cyxILEZdKSxfKCgpPT57RihudWxsKX0sWyQuZGV2aWNlLEZdKTtsZXQgdz1CNCgpLFtTLFExXT1uMChUNCxNOCksW2ddPUEoKCk9Pm5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCJjb2RlYyIpPT09Im1qcGVnIiksW2gsSV09QSgoKT0+d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKEY4KT09PSJtanBlZyI/Im1qcGVnIjoiYXV0byIpO18oKCk9Pnt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oRjgsaCl9LFtoXSk7bGV0W3UsWjFdPUEoKCk9PnY0KHtzZWFyY2g6d2luZG93LmxvY2F0aW9uLnNlYXJjaCxzdG9yYWdlOndpbmRvdy5sb2NhbFN0b3JhZ2V9KSk7XygoKT0+e2c0KHUse3N0b3JhZ2U6d2luZG93LmxvY2FsU3RvcmFnZSxsb2NhdGlvbjp3aW5kb3cubG9jYXRpb24scmVwbGFjZVN0YXRlOih4KT0+d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIiIseCl9KX0sW3VdKTtsZXQgcj0oSz8ubGVuZ3RoPz8wKT4xLEoxPSQuY29kZWMhPT0ibWpwZWciJiZ3LnN1cHBvcnRlZCYmIVMuZmVsbEJhY2smJiFZJiYhZyYmaCE9PSJtanBlZyIsaT15MihyfHxKMT9udWxsOiQuc3RyZWFtVXJsKSxbZixVMV09QShudWxsKSxYMT1yP2Y6SjE/bnVsbDppLmVycm9yO18oKCk9PntrKCExKSxVMShudWxsKSxRMSgicmVzZXQiKX0sWyQuc3RyZWFtVXJsLGtdKSxfKCgpPT57aWYoSjEmJkwpUTEoImZyYW1lIil9LFtKMSxMXSksXygoKT0+e2lmKCFKMSlyZXR1cm47bGV0IHg9c2V0VGltZW91dCgoKT0+UTEoInRpbWVvdXQiKSxJNCk7cmV0dXJuKCk9PmNsZWFyVGltZW91dCh4KX0sW0oxLCQuc3RyZWFtVXJsXSk7bGV0W0IxLEYxXT1BKG51bGwpLFtXMSxvXT1BKG51bGwpLFtjLGRdPUEobnVsbCksbj1jLFkxPVcxPz9uPz9VNSh5LEopLGI9XzQoSyxZMS53aWR0aCxZMS5oZWlnaHQpLGo9Yj8uY2hyb21lPz9aLE4xPWgyKHksWTEpLEMxPUw1KHksWTEpLHA9ZzIoWTEpLGU9ejUoWTEpLGsxPWU/ZS53aWR0aC9lLmhlaWdodDoxLFAxPWwwKFkxKSxnMT0hciYmaDQoe2hhc0Nocm9tZTohIWosaXNMYW5kc2NhcGU6UDEsaGlkZUNocm9tZTp1fSkscDE9IXImJmY0KHtoYXNDaHJvbWU6ISFqLGlzTGFuZHNjYXBlOlAxfSksajE9ZzE/ai5mcmFtZS53aWR0aC9qLnNjcmVlbi53aWR0aDoxLGExPUIxJiZCMS53aWR0aD4wJiZCMS5oZWlnaHQ+MD9CMS53aWR0aC9CMS5oZWlnaHQ6MS4xMTExMTExMTExMTExMTEyLGswPXI/TWF0aC5tYXgoQzEsQjE/LndpZHRoPz8wKTpDMSpqMSxWMD1yP2ExOmcxP2ouZnJhbWUud2lkdGgvai5mcmFtZS5oZWlnaHQ6azEsRDE9cj9TdHJpbmcoYTEpOmcxP2Ake2ouZnJhbWUud2lkdGh9IC8gJHtqLmZyYW1lLmhlaWdodH1gOnAsdTE9VChudWxsKSxDMD1UKFtdKTtfKCgpPT57bGV0IHg9ITEsJDE9bnVsbCxtMT1udWxsO0MwLmN1cnJlbnQ9W107bGV0IHM9KCk9PntpZih4fHwkMSlyZXR1cm47JDE9c2V0VGltZW91dCgoKT0+eyQxPW51bGwscjEoKX0sMTAwMCl9LHIxPSgpPT57bGV0IFUwPW5ldyBXZWJTb2NrZXQoJC53c1VybCk7VTAuYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLG0xPVUwLHUxLmN1cnJlbnQ9VTAsVTAub25vcGVuPSgpPT57QzAuY3VycmVudD1FOChVMCxDMC5jdXJyZW50KX0sVTAub25tZXNzYWdlPShGMik9PntpZighKEYyLmRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuO2xldCBvMD1uZXcgVWludDhBcnJheShGMi5kYXRhKTtpZihvMFswXT09PTEzMSl7dHJ5e0YxKEpTT04ucGFyc2UobmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG8wLnN1YmFycmF5KDEpKSkpfWNhdGNoe31yZXR1cm59aWYobzBbMF09PT0xNCl7dHJ5e2lmKEpTT04ucGFyc2UobmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG8wLnN1YmFycmF5KDEpKSkub2s9PT0hMSlzMShudWxsKSxIMC5lcnJvcigiQ291bGQgbm90IGNoYW5nZSB0aGUgc2ltdWxhdG9yIGZvbGQgcG9zZS4iKX1jYXRjaHt9cmV0dXJufWlmKG8wLmxlbmd0aDwxfHxvMFswXSE9PTEzMClyZXR1cm47dHJ5e2xldCB4MD1KU09OLnBhcnNlKG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShvMC5zdWJhcnJheSgxKSkpO2lmKHgwLndpZHRoPD0wfHx4MC5oZWlnaHQ8PTApcmV0dXJuO2QoKHIwKT0+cjAmJnIwLndpZHRoPT09eDAud2lkdGgmJnIwLmhlaWdodD09PXgwLmhlaWdodCYmcjAub3JpZW50YXRpb249PT14MC5vcmllbnRhdGlvbiYmcjAuaGluZ2VEZWdyZWVzPT09eDAuaGluZ2VEZWdyZWVzJiZyMC5kdW9WaWV3T3JpZW50YXRpb249PT14MC5kdW9WaWV3T3JpZW50YXRpb24/cjA6eDApfWNhdGNoe319LFUwLm9uY2xvc2U9KCk9PntpZih1MS5jdXJyZW50PT09VTApdTEuY3VycmVudD1udWxsO3MoKX0sVTAub25lcnJvcj0oKT0+e1UwLmNsb3NlKCl9fTtyZXR1cm4gcjEoKSwoKT0+e2lmKHg9ITAsJDEpY2xlYXJUaW1lb3V0KCQxKTtpZih1MS5jdXJyZW50PT09bTEpdTEuY3VycmVudD1udWxsO20xPy5jbG9zZSgpfX0sWyQud3NVcmxdKTtsZXQgVjE9UCgoeCwkMSk9PntDMC5jdXJyZW50PWw0KHUxLmN1cnJlbnQsQzAuY3VycmVudCx4LCQxKX0sW10pLFowPVAoKHgpPT5WMSgzLHgpLFtWMV0pLGIwPVAoKHgpPT5WMSg1LHgpLFtWMV0pLGgxPVAoKHgpPT5WMSg0LHtidXR0b246eH0pLFtWMV0pLFtjMSxzMV09QShudWxsKSxlMT1UKG51bGwpLHQxPVQobnVsbCkseTA9UCgoeCk9PntpZihzMSh4PT09bj8uaGluZ2VEZWdyZWVzP251bGw6eCksdDEuY3VycmVudD14LGUxLmN1cnJlbnQpcmV0dXJuO2UxLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e2UxLmN1cnJlbnQ9bnVsbCxWMSgxNCx7aGluZ2U6dDEuY3VycmVudH0pfSw1MCl9LFtWMSxuPy5oaW5nZURlZ3JlZXNdKSx2MD1QKCh4KT0+e2lmKGUxLmN1cnJlbnQpY2xlYXJUaW1lb3V0KGUxLmN1cnJlbnQpO2UxLmN1cnJlbnQ9bnVsbCxzMShudWxsKSxWMSgxNCx7cG9zZTp4fSl9LFtWMV0pO18oKCk9PigpPT57aWYoZTEuY3VycmVudCljbGVhclRpbWVvdXQoZTEuY3VycmVudCl9LFtdKSxfKCgpPT57aWYobj8uaGluZ2VEZWdyZWVzIT1udWxsKXMxKCh4KT0+eCE9bnVsbCYmTWF0aC5hYnMoeC1uLmhpbmdlRGVncmVlcyk8MC42P251bGw6eCl9LFtuPy5oaW5nZURlZ3JlZXNdKTtsZXQgUzA9YzE/P24/LmhpbmdlRGVncmVlcz8/KGI/LnJvbGU9PT0iaW5uZXIiPzE4MDowKSwkMD1QKCh7cGhhc2U6eCxidXR0b246JDF9KT0+e2lmKCQxLnVzYWdlUGFnZT09bnVsbHx8JDEudXNhZ2U9PW51bGwpcmV0dXJuO1YxKDQse2J1dHRvbjokMS5uYW1lLHBhZ2U6JDEudXNhZ2VQYWdlLHVzYWdlOiQxLnVzYWdlLHBoYXNlOnh9KX0sW1YxXSksRTE9UCgoeCwkMSk9PntWMSg0LHtidXR0b246eC5uYW1lLHBhZ2U6eC5wYWdlLHVzYWdlOngudXNhZ2UscGhhc2U6JDF9KX0sW1YxXSksRzA9UCgoeCk9PlYxKDEwLHtkZWx0YTp4fSksW1YxXSksZjE9UCgoeCk9PlYxKDExLHgpLFtWMV0pLEIwPVAoKHgpPT57bygoJDEpPT4kMSYmJDEud2lkdGg9PT14LndpZHRoJiYkMS5oZWlnaHQ9PT14LmhlaWdodCYmJDEub3JpZW50YXRpb249PT14Lm9yaWVudGF0aW9uPyQxOngpfSxbXSksRjA9UCgoeCk9PntWMSg3LHtvcmllbnRhdGlvbjp4fSl9LFtWMV0pLFEwPVkxLmR1b1ZpZXdPcmllbnRhdGlvbj8/WTEub3JpZW50YXRpb24/PyJwb3J0cmFpdCIsQTA9eSE9PSJ3YXRjaCImJnkhPT0idmlzaW9uIixXPVAoKHgpPT57aWYoIUEwKXJldHVybjtsZXQgJDE9KHg9PT0ibGVmdCI/SzI6UjMpW1EwXTtGMCgkMSl9LFtBMCxRMCxGMF0pO18oKCk9PntvKG51bGwpLGQobnVsbCksRjEobnVsbCksczEobnVsbCl9LFskLnN0cmVhbVVybF0pLF8oKCk9PntsZXQgeD1uO2lmKCF4KXJldHVybjtvKCgkMSk9PiQxJiYkMS53aWR0aD09PXgud2lkdGgmJiQxLmhlaWdodD09PXguaGVpZ2h0JiYkMS5vcmllbnRhdGlvbj09PXgub3JpZW50YXRpb24/JDE6bnVsbCl9LFtuLG4/LndpZHRoLG4/LmhlaWdodCxuPy5vcmllbnRhdGlvbl0pO2xldCBtPVAoKHgsJDEpPT57VjEoNix7dHlwZTp4LHVzYWdlOiQxfSl9LFtWMV0pLFthLEgxXT1BKG51bGwpLFtBMSx6MV09QSgoKT0+e2lmKEM/LnBhbmVzKXJldHVybiBPPT09InRvb2xzIjtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4hMTtsZXQgeD1OdW1iZXIod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJzZXJ2ZS1zaW06dG9vbHMtcGFuZWwtd2lkdGgiKSksJDE9TnVtYmVyLmlzRmluaXRlKHgpJiZ4PjA/eDpfODtyZXR1cm4gd2luZG93LmlubmVyV2lkdGg+PSQxKzQ4MH0pLHt3aWR0aDpPMSxvblBvaW50ZXJEb3duOlgwfT16Mygic2VydmUtc2ltOnRvb2xzLXBhbmVsLXdpZHRoIixfOCwyNDAsNzIwKSx7d2lkdGg6aTEsb25Qb2ludGVyRG93bjpvMX09ejMoInNlcnZlLXNpbTpkZXZ0b29scy1wYW5lbC13aWR0aCIsajQsNDIwLDE0MDApLFt6MCxOMF09QSgoKT0+dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmlubmVyV2lkdGg6MCksW0QsTV09QSgoKT0+dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmlubmVySGVpZ2h0OjApO18oKCk9PntsZXQgeD0oKT0+e04wKHdpbmRvdy5pbm5lcldpZHRoKSxNKHdpbmRvdy5pbm5lckhlaWdodCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix4KSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIseCl9LFtdKSxfKCgpPT57bGV0IHg9SjUoJC5hcHBTdGF0ZUVuZHBvaW50Pz9iMSgiYXBwc3RhdGUiKSksJDE9bnVsbDtyZXR1cm4geC5vbm1lc3NhZ2U9KG0xKT0+e3RyeXtsZXQgcz1KU09OLnBhcnNlKG0xLmRhdGEpO2lmKCQxKWNsZWFyVGltZW91dCgkMSk7bGV0IHIxPXM/LmlzUmVhY3ROYXRpdmU/MDo2MDA7JDE9c2V0VGltZW91dCgoKT0+SDEocykscjEpfWNhdGNoe319LCgpPT57aWYoJDEpY2xlYXJUaW1lb3V0KCQxKTt4LmNsb3NlKCl9fSxbJC5hcHBTdGF0ZUVuZHBvaW50XSk7bGV0W1JdPUEoUjQpLGw9VChhKTtfKCgpPT57bC5jdXJyZW50PWF9LFthXSk7bGV0IEcxPSQucmVsb2FkRW5kcG9pbnQ/P2Ake2IxKCJyZWxvYWQiKX0/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQuZGV2aWNlKX1gLEwxPVAoYXN5bmMoKT0+e2xldCB4PWwuY3VycmVudD8uYnVuZGxlSWQ7aWYoeCYmYXdhaXQgdzQoRzEseCkhPT0ibm90LXNlbnQiKXJldHVybjtsZXR7cmVsZWFzZTokMSx0YXA6bTF9PVIucmVsb2FkRXZlbnRzKCk7Zm9yKGxldCBzIG9mICQxKW0ocy50eXBlLHMudXNhZ2UpO20oImRvd24iLG0xKSxhd2FpdCBuZXcgUHJvbWlzZSgocyk9PnNldFRpbWVvdXQocywzMCkpLG0oInVwIixtMSk7Zm9yKGxldCBzIG9mIFIucmVzdG9yZUV2ZW50cygpKW0ocy50eXBlLHMudXNhZ2UpfSxbbSxSLEcxXSksXzE9VChudWxsKSx3MT1UKG51bGwpLFtKMCxLNV09QSgwKSxbUDAsdzVdPUEoMCk7XygoKT0+e2xldCB4PV8xLmN1cnJlbnQ7aWYoIXh8fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCAkMT1uZXcgUmVzaXplT2JzZXJ2ZXIoKG0xKT0+e2xldCBzPW0xWzBdPy5jb250ZW50UmVjdDtLNShzPy53aWR0aD8/MCksdzUocz8uaGVpZ2h0Pz8wKX0pO3JldHVybiAkMS5vYnNlcnZlKHgpLCgpPT4kMS5kaXNjb25uZWN0KCl9LFtdKTtsZXRbWTUsaTBdPUEoITApLHc4PVQoITApO3c4LmN1cnJlbnQ9WTUsXygoKT0+e2xldCB4PSgkMSk9PntsZXQgbTE9JDEudGFyZ2V0LHM9ISFfMS5jdXJyZW50Py5jb250YWlucyhtMSk7aWYocyl4NChkb2N1bWVudCk7bGV0IHIxPXN8fCEhdzEuY3VycmVudD8uY29udGFpbnMobTEpJiYhUDgobTEpO2kwKHIxKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIix4LCEwKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHgsITApfSxbXSksXygoKT0+e2lmKFk1KXJldHVybjtmb3IobGV0IHggb2YgUi5yZWxlYXNlQWxsKCkpVjEoNix4KX0sW1k1LFYxLFJdKSxfKCgpPT57bGV0IHg9KCk9Pntmb3IobGV0ICQxIG9mIFIucmVsZWFzZUFsbCgpKVYxKDYsJDEpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHgpLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIseCl9LFtWMSxSXSksXygoKT0+e2xldCB4PShzLHIxKT0+e2lmKCF3OC5jdXJyZW50KXJldHVybjtpZihQOChzLnRhcmdldCkpcmV0dXJuO2lmKHk0KHMuY29kZSkmJlM0KHMudGFyZ2V0KSlyZXR1cm47aWYocy5jb2RlPT09IktleUgiJiZzLm1ldGFLZXkmJnMuc2hpZnRLZXkpe2lmKHMucHJldmVudERlZmF1bHQoKSxyMT09PSJkb3duIiYmIXMucmVwZWF0KVYxKDQse2J1dHRvbjoiaG9tZSJ9KTtyZXR1cm59aWYoKHMuY29kZT09PSJBcnJvd0xlZnQifHxzLmNvZGU9PT0iQXJyb3dSaWdodCIpJiZzLm1ldGFLZXkmJiFzLnNoaWZ0S2V5JiYhcy5hbHRLZXkmJiFzLmN0cmxLZXkpe2lmKHMucHJldmVudERlZmF1bHQoKSxyMT09PSJkb3duIiYmIXMucmVwZWF0KVcocy5jb2RlPT09IkFycm93TGVmdCI/ImxlZnQiOiJyaWdodCIpO3JldHVybn1pZihzLmNvZGU9PT0iS2V5QSImJnMubWV0YUtleSYmcy5zaGlmdEtleSl7aWYocy5wcmV2ZW50RGVmYXVsdCgpLHIxPT09ImRvd24iJiYhcy5yZXBlYXQpeDEoInRvZ2dsZUFwcGVhcmFuY2UiLHt1ZGlkOiQuZGV2aWNlfSkuY2F0Y2goKCk9Pnt9KTtyZXR1cm59aWYocy5jb2RlPT09IktleUsiJiZzLm1ldGFLZXkmJiFzLnNoaWZ0S2V5JiYhcy5hbHRLZXkmJiFzLmN0cmxLZXkpe2lmKHMucHJldmVudERlZmF1bHQoKSxyMT09PSJkb3duIiYmIXMucmVwZWF0KVYxKDEyLHt9KTtyZXR1cm59aWYoYjQocykmJmwuY3VycmVudD8uaXNSZWFjdE5hdGl2ZSl7aWYocy5wcmV2ZW50RGVmYXVsdCgpLHIxPT09ImRvd24iJiYhcy5yZXBlYXQpTDEoKTtyZXR1cm59bGV0IFUwPUU0KHMuY29kZSk7aWYoVTA9PW51bGwpcmV0dXJuO3MucHJldmVudERlZmF1bHQoKTtmb3IobGV0IEYyIG9mIFIuZm9yd2FyZChyMSxVMCkpVjEoNixGMil9LCQxPShzKT0+eChzLCJkb3duIiksbTE9KHMpPT54KHMsInVwIik7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwkMSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixtMSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsJDEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsbTEpfX0sW1YxLCQuZGV2aWNlLFcsTDEsUl0pO2xldCBiNT1NNCgpLGI4PUw0KCQuZGV2aWNlLEQ0KGI/LnJvbGU/P0IxPy5wYW5lbCkpLHk4PUM0KCQuZGV2aWNlKSxTOD1HNCh7aG9zdDp4MSx1ZGlkOiQuZGV2aWNlLGVuYWJsZWQ6TCxvblVwbG9hZFN0YXJ0OmI1LmFkZCxvblVwbG9hZFByb2dyZXNzOmI1LnNldFByb2dyZXNzLG9uVXBsb2FkRW5kOih4LCQxLG0xKT0+YjUudXBkYXRlKHgse3N0YXR1czokMT8ic3VjY2VzcyI6ImVycm9yIixtZXNzYWdlOm0xfSksb25VbnN1cHBvcnRlZDooeCk9PntsZXQgJDE9YjUuYWRkKHgubmFtZSwibWVkaWEiKTtiNS51cGRhdGUoJDEse3N0YXR1czoiZXJyb3IiLG1lc3NhZ2U6YFVuc3VwcG9ydGVkOiAke3gudHlwZXx8RTUoeCl9YH0pfSxvbkhvc3RQYXRoRHJvcDpiOC5kaXNtaXNzfSksTzA9TzQoe2RlZmF1bHRXaWR0aDprMCx2aWV3cG9ydFdpZHRoOnowLHZpZXdwb3J0SGVpZ2h0OkQsYXNwZWN0UmF0aW86VjAsaW5pdGlhbEZpdDpyfHxDPy5maXQ9PT0hMCxvblN0YXJ0OigpPT5pMCghMSl9KSxMMz1HP2kxOkExP08xOjAsZzA9cj9fNShrMCxNYXRoLm1heCgyNDAsejAtKE4/VTowKS1MMy05NiksRCxWMCk6TzAud2lkdGgsYzQ9MTIseDg9MjQsaTQ9SjA+MD9NYXRoLm1pbihKMCxnMCk6ZzAsUjg9KHgpPT57aWYoeDw9MClyZXR1cm4gMDtsZXQgJDE9ejAtYzQteCxzPXowLzIraTQvMi0oJDEteDgpO2lmKHM8PTApcmV0dXJuIDA7bGV0IHIxPTIqcztyZXR1cm4gcjE8PXgreDg/cjE6MH0sbzQ9cj9MMzpSOChMMykscjQ9cj9OP1U6MDpSOChOP1U6MCk7cmV0dXJuIFgoYjYse2VuZHBvaW50OnE/JD8uYXhFbmRwb2ludDp2b2lkIDAsY2hpbGRyZW46WCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBoLXNjcmVlbiBiZy1wYWdlIHB5LTYgZ2FwLTMgZm9udC1zeXN0ZW0gYm94LWJvcmRlciIsc3R5bGU6e3BhZGRpbmdMZWZ0OjI0K3I0LHBhZGRpbmdSaWdodDoyNCtvNCx0cmFuc2l0aW9uOk8wLmlzUmVzaXppbmd8fE8wLmlzSW5lcnRpYT8ibm9uZSI6czZ9LGNoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0zIG1pbi13LTAiLHN0eWxlOnt3aWR0aDpnMCx0cmFuc2l0aW9uOks4KE8wKX0sY2hpbGRyZW46W1goSTEse2V4ZWM6bjIsb25Sb3RhdGU6RjAsb3JpZW50YXRpb246UTAsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOkosZGV2aWNlUnVudGltZTpRLHN0cmVhbWluZzpMLCJhcmlhLWxhYmVsIjoiU2ltdWxhdG9yIHN0YXR1cyIsc3R5bGU6e2FsaWduU2VsZjoiY2VudGVyIix3aWR0aDoiYXV0byIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsZmxleFdyYXA6Im5vd3JhcCIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsZ2FwOjEwLHBhZGRpbmc6IjZweCAxMHB4Iixib3JkZXJSYWRpdXM6MTh9LGNoaWxkcmVuOltYKEkxLlRpdGxlLHtvbkNsaWNrOigpPT56KCh4KT0+IXgpLCJhcmlhLWxhYmVsIjoiVG9nZ2xlIHNpbXVsYXRvcnMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6Tix0aXRsZToiU2ltdWxhdG9ycyIsaGlkZVN1YnRpdGxlOiEwLGhpZGVDaGV2cm9uOiEwLHN0eWxlOnttYXhXaWR0aDoibWluKDIzMHB4LCBjYWxjKDEwMHZ3IC0gMTcwcHgpKSJ9fSksWChFNyx7c3RyZWFtaW5nOkwsZXJyb3I6WDF9KV19KSxYKCJkaXYiLHtyZWY6XzEsY2xhc3NOYW1lOiJyZWxhdGl2ZSBtYXgtaC1mdWxsIHNlbGVjdC1ub25lIiwiZGF0YS1kZXZpY2UtY2hyb21lIjpnMT8ib24iOiJvZmYiLHN0eWxlOnt3aWR0aDpnMCxhc3BlY3RSYXRpbzpEMSx0cmFuc2l0aW9uOks4KE8wKSx3aWxsQ2hhbmdlOk8wLmlzUmVzaXppbmd8fE8wLmlzSW5lcnRpYT8id2lkdGgiOnZvaWQgMH0sLi4uUzguZHJvcFpvbmVQcm9wcyxjaGlsZHJlbjpbKCgpPT57aWYocilyZXR1cm4gWChRNix7dXJsOiQuc3RyZWFtVXJsLnJlcGxhY2UoInN0cmVhbS5tanBlZyIsInN0cmVhbS4zZC5tanBlZyIpLHByb2plY3Rpb246QjEsc2NyZWVuQ29uZmlnOlkxLG9uU3RyZWFtaW5nQ2hhbmdlOmssb25TdHJlYW1FcnJvcjpVMSxvbkhhcmR3YXJlUHJlc3M6RTEsb25Ub3VjaDpaMCxvbk11bHRpVG91Y2g6YjAsb25FcnJvcjooKT0+SDAuZXJyb3IoIkRldmljZSByZW5kZXJpbmcgaXMgdW5hdmFpbGFibGUuIENoZWNrIHRoZSBzZWxlY3RlZCBYY29kZSBhbmQgc2VydmVyIGxvZy4iKSxjaGlsZHJlbjpxJiZCMSYmWChKOCx7cHJvamVjdGlvbjpCMSxzY3JlZW5Db25maWc6WTF9KX0pO2xldCB4PVgodjIse3VybDokLnVybCx3c1VybDokLndzVXJsLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixib3JkZXI6Im5vbmUiLHBvaW50ZXJFdmVudHM6TzAuaXNSZXNpemluZ3x8TzAuaXNJbmVydGlhPyJub25lIjp2b2lkIDB9LGltYWdlU3R5bGU6e2JvcmRlclJhZGl1czpnMT8wOk4xLGNvcm5lclNoYXBlOmcxP3ZvaWQgMDoic3VwZXJlbGxpcHNlKDEuMykiLC4uLmcxP3t9Ontib3hTaGFkb3c6Imluc2V0IDAgMCAwIDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikifX0saGlkZUNvbnRyb2xzOiEwLG9uU3RyZWFtaW5nQ2hhbmdlOmssb25TdHJlYW1Ub3VjaDpaMCxvblN0cmVhbU11bHRpVG91Y2g6YjAsb25TdHJlYW1CdXR0b246aDEsb25TdHJlYW1EaWdpdGFsQ3Jvd246RzAsb25TdHJlYW1TY3JvbGw6ZjEsY29kZWM6SjE/ImF2Y2MiOiJtanBlZyIsb25BdmNjRXJyb3I6KCk9PlExKCJlcnJvciIpLHN1YnNjcmliZUZyYW1lOkoxP3ZvaWQgMDppLnN1YnNjcmliZUZyYW1lLHN0cmVhbUZyYW1lOkoxP3ZvaWQgMDppLmZyYW1lLHN0cmVhbUNvbmZpZzpZMSxlbmFibGVEaWdpdGFsQ3Jvd246eT09PSJ3YXRjaCIsb25TY3JlZW5Db25maWdDaGFuZ2U6QjB9KSwkMT1YKEsxLHtjaGlsZHJlbjpbeCxxJiZYKEo4LHt9KV19KTtpZighcDEpcmV0dXJuICQxO3JldHVybiBYKEozLHtjaHJvbWU6aixmcmFtZWQ6ZzEsaW50ZXJhY3RpdmU6ZzEsb25CdXR0b246JDAsb25Dcm93bldoZWVsOihtMSxzKT0+e2xldCByMT1WMihtMSxzLFAwfHwxKTtpZihyMSE9bnVsbClHMChyMSl9LHNjcmVlbjokMX0pfSkoKSxTOC5pc0RyYWdPdmVyJiZYKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgYm9yZGVyLTIgYm9yZGVyLWRhc2hlZCBib3JkZXItWyNhNWI0ZmNdIGJnLVtyZ2JhKDk5LDEwMiwyNDEsMC4xOCldIHRleHQtWyNhNWI0ZmNdIHBvaW50ZXItZXZlbnRzLW5vbmUgei0yMCIsc3R5bGU6e2JvcmRlclJhZGl1czpnMT92b2lkIDA6TjF9LGNoaWxkcmVuOltYKFEyLHtzaXplOjMyLHN0cm9rZVdpZHRoOjEuNX0pLFgoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtbWVkaXVtIixjaGlsZHJlbjoiRHJvcCBtZWRpYSBvciAuaXBhIn0pXX0pLCFyJiZYKEsxLHtjaGlsZHJlbjpbWChPNyx7c2ltdWxhdG9yUmVzaXplOk8wLGRldmljZVR5cGU6eSxzdHJlYW1Db25maWc6WTEsY29udGFpbmVyV2lkdGg6SjB8fGcwLGNvbnRhaW5lckhlaWdodDpQMHx8KFYwPjA/ZzAvVjA6MCl9KSxYKEk3LHt3aWR0aDpKMHx8ZzAsaGVpZ2h0OlAwfHwoVjA+MD9nMC9WMDowKSx2aXNpYmxlOk8wLmlzUmVzaXppbmd8fE8wLmlzSW5lcnRpYX0pXX0pXX0pLFgoImRpdiIse3JlZjp3MSxjbGFzc05hbWU6YGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiAke3I/IiI6Im1heC13LWZ1bGwifWAsY2hpbGRyZW46W1goSTEse2V4ZWM6bjIsb25Sb3RhdGU6RjAsb3JpZW50YXRpb246UTAsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOkosZGV2aWNlUnVudGltZTpRLHN0cmVhbWluZzpMLCJhcmlhLWxhYmVsIjoiU2ltdWxhdG9yIGFjdGlvbnMiLHN0eWxlOnthbGlnblNlbGY6ImNlbnRlciIsbWluV2lkdGg6MCxqdXN0aWZ5Q29udGVudDoiY2VudGVyIixwYWRkaW5nOiI2cHggOHB4Iixib3JkZXJSYWRpdXM6MTgsLi4ucj97ZmxleFdyYXA6Im5vd3JhcCIsd2lkdGg6Im1heC1jb250ZW50IixtYXhXaWR0aDoibm9uZSJ9Ont3aWR0aDoiYXV0byIsbWF4V2lkdGg6IjEwMCUifX0sY2hpbGRyZW46WChJMS5BY3Rpb25zLHtjaGlsZHJlbjpbYT8uaXNSZWFjdE5hdGl2ZSYmWChJMS5CdXR0b24seyJhcmlhLWxhYmVsIjoiUmVsb2FkIFJlYWN0IE5hdGl2ZSBidW5kbGUiLHRpdGxlOiJSZWxvYWQgKFIsIOKMmFIpIixvbkNsaWNrOigpPT52b2lkIEwxKCksY2hpbGRyZW46WCgkNSx7fSl9KSxYKEkxLkhvbWVCdXR0b24se3RpdGxlOiJIb21lIixvbkNsaWNrOih4KT0+e3gucHJldmVudERlZmF1bHQoKSx4MSgiaG9tZSIse3VkaWQ6JC5kZXZpY2Usd2F0Y2g6eT09PSJ3YXRjaCJ9KX19KSxYKEkxLlNjcmVlbnNob3RCdXR0b24se3RpdGxlOiJTY3JlZW5zaG90IixvbkNsaWNrOih4KT0+e3gucHJldmVudERlZmF1bHQoKSxiOC5jYXB0dXJlKCl9fSksWChGNCx7c3RhdGU6eTguc3RhdGUsb25Ub2dnbGU6eTgudG9nZ2xlfSksWChJMS5Sb3RhdGVCdXR0b24se3RpdGxlOiJSb3RhdGUgZGV2aWNlIn0pLCFyJiYhIWomJlgoeTYse2hpZGVDaHJvbWU6dSxvblRvZ2dsZTooKT0+WjEoKHgpPT4heCl9KSxyJiZYKEsxLHtjaGlsZHJlbjpbWChROCx7b3ZlcmxheUVuYWJsZWQ6cSxzdHJlYW1pbmc6TCxvblRvZ2dsZU92ZXJsYXk6KCk9PlYoKHgpPT4heCl9KSxYKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6Im14LTEgaC00IHctcHggc2hyaW5rLTAgYmctaW5rLzE1In0pLFgoSzYse29yaWVudGF0aW9uOlEwLGFuZ2xlOlMwLG9uQ2hhbmdlOnkwLG9uUG9zZTp2MH0pXX0pXX0pfSksIXImJlgoSTEse2V4ZWM6bjIsb25Sb3RhdGU6RjAsb3JpZW50YXRpb246UTAsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOkosZGV2aWNlUnVudGltZTpRLHN0cmVhbWluZzpMLCJhcmlhLWxhYmVsIjoiQWNjZXNzaWJpbGl0eSBvdmVybGF5IixzdHlsZTp7d2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIscGFkZGluZzo2LGJvcmRlclJhZGl1czoyMn0sY2hpbGRyZW46WChROCx7b3ZlcmxheUVuYWJsZWQ6cSxzdHJlYW1pbmc6TCxvblRvZ2dsZU92ZXJsYXk6KCk9PlYoKHgpPT4heCl9KX0pXX0pXX0pLFgoImRpdiIse2NsYXNzTmFtZTpgZml4ZWQgdG9wLTMgcmlnaHQtMyBmbGV4IGZsZXgtY29sIGdhcC0xIHAtMSBiZy1wYW5lbC1iZyBib3JkZXIgYm9yZGVyLWluay84IHJvdW5kZWQtWzEwcHhdIGJhY2tkcm9wLWJsdXItWzEycHhdIFstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpibHVyKDEycHgpXSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMThzX2Vhc2VdIHotNDAgJHtBMXx8Rz8ib3BhY2l0eS0wIHBvaW50ZXItZXZlbnRzLW5vbmUiOiJvcGFjaXR5LTEwMCBwb2ludGVyLWV2ZW50cy1hdXRvIn1gLGNoaWxkcmVuOltYKCJidXR0b24iLHtvbkNsaWNrOigpPT57QighMSksejEoKHgpPT4heCl9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LWljb24gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLWluay84IGhvdmVyOnRleHQtaW5rIiwiYXJpYS1sYWJlbCI6Ik9wZW4gdG9vbHMgcGFuZWwiLCJhcmlhLXByZXNzZWQiOkExLHRpdGxlOiJUb29scyIsY2hpbGRyZW46WChzNSx7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KSxYKCJidXR0b24iLHtvbkNsaWNrOigpPT57ejEoITEpLEIoKHgpPT4heCl9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LWljb24gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLWluay84IGhvdmVyOnRleHQtaW5rIiwiYXJpYS1sYWJlbCI6Ik9wZW4gV2ViS2l0IERldlRvb2xzIiwiYXJpYS1wcmVzc2VkIjpHLHRpdGxlOiJXZWJLaXQgRGV2VG9vbHMiLGNoaWxkcmVuOlgoaTUse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSldfSksWChRNCx7b3BlbjpBMSxvbkNsb3NlOigpPT56MSghMSksdWRpZDokLmRldmljZSxkZXZpY2VSdW50aW1lOlEsY3VycmVudEFwcDphLGV2ZW50TG9nRXZlbnRzRW5kcG9pbnQ6JC5ldmVudExvZ0V2ZW50c0VuZHBvaW50LGF4T3ZlcmxheUVuYWJsZWQ6cSxvblRvZ2dsZUF4T3ZlcmxheTooKT0+VigoeCk9PiF4KSxjb2RlY1ByZWZlcmVuY2U6aCxvbkNvZGVjUHJlZmVyZW5jZUNoYW5nZTpJLGFjdGl2ZUNvZGVjOkoxPyJoMjY0IjoibWpwZWciLGF2Y2NTdXBwb3J0ZWQ6dy5zdXBwb3J0ZWQsY2hyb21lQXZhaWxhYmxlOiEhaiYmIXIsaGlkZUNocm9tZTp1LG9uSGlkZUNocm9tZUNoYW5nZTpaMSx3aWR0aDpPMX0pLFgoWjMse3BhbmVsV2lkdGg6TzEsdmlzaWJsZTpBMSxvblBvaW50ZXJEb3duOlgwLGFyaWFMYWJlbDoiUmVzaXplIHRvb2xzIHBhbmVsIn0pLFgoVjQse29wZW46RyxvbkNsb3NlOigpPT5CKCExKSx1ZGlkOiQuZGV2aWNlLHRhcmdldHM6RS50YXJnZXRzLHNlbGVjdGVkVGFyZ2V0SWQ6SCxvblNlbGVjdFRhcmdldDpGLGxvYWRpbmc6RS5sb2FkaW5nLGVycm9yOkUuZXJyb3Isb25SZWZyZXNoOigpPT52b2lkIEUucmVmcmVzaCgpLHdpZHRoOmkxfSksWChaMyx7cGFuZWxXaWR0aDppMSx2aXNpYmxlOkcsb25Qb2ludGVyRG93bjpvMSxhcmlhTGFiZWw6IlJlc2l6ZSBXZWJLaXQgRGV2VG9vbHMgcGFuZWwifSldfSl9KX1NNihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm9vdCIpKS5yZW5kZXIoWChFWCx7fSkpOwo8L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=","base64").toString("utf-8");return m$}async function hY($,Q=q5){return z8(await Q(),$)}function q5(){return new Promise(($)=>{n0("xcrun",a(["list","devices","-j"]),{encoding:"utf-8",timeout:3000},(Q,Z)=>{if(Q)return $([]);try{let J=JSON.parse(Z),Y=[];for(let[X,K]of Object.entries(J.devices)){if(!/SimRuntime\.(iOS|watchOS|visionOS|xrOS)-/i.test(X))continue;for(let z of K){if(z.isAvailable===!1)continue;Y.push({...z,runtime:X.replace(/^.*SimRuntime\./,"")})}}$(Y)}catch{$([])}})})}var gY=1610612736;function uY(){try{let $=Number(w6("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Q=Number(w6("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Z=w6("vm_stat",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}),J=(X)=>{let K=Z.match(X);return K?Number(K[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 mY(){try{let $=w6("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(`
|
|
110
|
-
`)){let X=Y.trimStart();if(!X)continue;let K=J.exec(X);if(!K)continue;let
|
|
109
|
+
`),Q.resume(),!0}function TY($,Q,Z,J){if(!T5($,Q))return;let Y=new W5(J);Y.binaryType="arraybuffer";let X=!1,K=!1,V=[],G=Buffer.from(Z),z=()=>{if(K)return;K=!0;try{Y.close()}catch{}try{Q.end(c$(8,Buffer.alloc(0)))}catch{}try{Q.destroy()}catch{}},W=(N)=>{if(X&&Y.readyState===W5.OPEN){Y.send(N.opcode===1?N.payload.toString("utf8"):j5(N.payload));return}V.push({opcode:N.opcode,payload:Buffer.from(N.payload)})},B=()=>{try{while(G.length>0){let N=A5(G);if(!N)break;if(G=G.subarray(N.consumed),N.opcode===8){S6(Q,8,N.payload),z();return}if(N.opcode===9){S6(Q,10,N.payload);continue}if(N.opcode===1||N.opcode===2)W({opcode:N.opcode,payload:N.payload})}}catch{z()}};Y.onopen=()=>{X=!0;for(let N of V)Y.send(N.opcode===1?N.payload.toString("utf8"):j5(N.payload));V=[]},Y.onmessage=(N)=>{let j=N.data,O=typeof j==="string"?Buffer.from(j):Buffer.from(j);S6(Q,typeof j==="string"?1:2,O)},Y.onerror=z,Y.onclose=z,Q.on("data",(N)=>{if(typeof N==="string")N=Buffer.from(N);G=Buffer.concat([G,N]),B()}),Q.on("error",z),Q.on("close",z),B()}async function PY($,Q,Z){if(!UY(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 F7(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)}))}}var DY={host:()=>e7(),device:($)=>$8($),sessions:($)=>Promise.all(t7($).map((Q)=>Q.diagnostics()))};function qY($={}){let Q=$.sources??DY,Z=J8({burst:$.burst??5,refillMs:$.refillMs??2000,now:$.now}),J=Y8($.cacheTtlMs??2000,$.now),Y=async(X)=>{let K=await Q.sessions(X),V=X?[X]:K.map((W)=>String(W.udid)),[G,z]=await Promise.all([Q.host(),Promise.all(V.map((W)=>Q.device(W)))]);return Z8({host:G,devices:z,sessions:K,event_log:i6({device:X,limit:100})})};return async(X,K,V)=>{let G=(W,B,N={})=>{K.writeHead(W,{"Content-Type":"application/json","Cache-Control":"no-store",...N}),K.end(JSON.stringify(B,null,2))};if(!I0(X)){G(403,{error:"loopback_only",message:"Diagnostics are only served to localhost. Run `serve-sim doctor` on the Mac."});return}let z=Z.take();if(!z.ok){let W=Math.max(1,Math.ceil(z.retryAfterMs/1000));G(429,{error:"rate_limited",message:`Too many diagnostics requests; retry in ${W}s.`},{"Retry-After":String(W)});return}try{G(200,await J.get(V??"",()=>Y(V)))}catch(W){G(500,{error:"diagnostics_failed",message:W instanceof Error?W.message:String(W)})}}}function EY($,Q,Z,J){if(!Z)return!1;let Y=J.split("?")[0];if(Y==="/camera/status")return PY($,Q,Z),!0;let X;try{X=p9(Z)}catch{return!1}switch(Y){case"/stream.3d.mjpeg":return X.handleDuoMjpeg($,Q),!0;case"/stream.mjpeg":return X.handleMjpeg($,Q),!0;case"/stream.avcc":return X.handleAvcc($,Q),!0;case"/config":return X.handleConfig($,Q),!0;case"/health":return X.handleHealth($,Q),!0;case"/ax":return X.handleAx($,Q),!0;case"/foreground":return X.handleForeground($,Q),!0;case"/recording":return X.handleRecording($,Q,"status"),!0;case"/recording/start":return X.handleRecording($,Q,"start"),!0;case"/recording/stop":return X.handleRecording($,Q,"stop"),!0;default:return!1}}async function IY($,Q,Z,J={}){if(await new Promise((X)=>n0("xcrun",o(["boot",$]),()=>X())),!await new Promise((X)=>{n0("xcrun",Y7($),{timeout:180000},(K)=>X(!K))})){if(!await new Promise((K)=>{n0("xcrun",o(["list","devices","-j"]),(V,G)=>{if(V)return K(!1);try{let z=JSON.parse(G);K(Object.values(z.devices).flat().some((W)=>W.udid===$&&W.state==="Booted"))}catch{K(!1)}})}))return`Device ${$} failed to reach booted state`}return c6({...V7($,Q,Z),...J.authTokenSha256?{authTokenSha256:J.authTokenSha256}:{},...J.allowExec?{allowExec:!0}:{}}),null}function xY($,Q){let Z=[],J=[],Y=Buffer.from(Q),X=!1,K=()=>{if(X)return;X=!0;for(let z of J)z()},V=()=>{K();try{$.end(c$(8,Buffer.alloc(0)))}catch{}try{$.destroy()}catch{}},G=()=>{for(;;){let z;try{z=A5(Y)}catch{V();return}if(!z)return;if(Y=Y.subarray(z.consumed),z.opcode===8)return V();if(z.opcode===9){S6($,10,z.payload);continue}if(z.opcode===1||z.opcode===2)for(let W of Z)W(z.payload)}};if($.on("data",(z)=>{Y=Buffer.concat([Y,z]),G()}),$.on("close",K),$.on("error",K),Q.length)G();return{send(z){S6($,2,z)},on(z,W){if(z==="message")Z.push(W);else J.push(W)},close:V}}function wY($,Q,Z,J){if(!J)return!1;let Y;try{Y=p9(J)}catch{return!1}if(!T5($,Q))return!0;return Y.attachHidSocket(xY(Q,Z)),!0}function m$($,Q,Z,J,Y,X=!1,K){let V=(Q===""?"":Q)+"/grid/api";return{..._5($),basePath:Q,appStateEndpoint:d0(Q,"/appstate",$.device),reloadEndpoint:d0(Q,"/reload",$.device),eventLogEndpoint:d0(Q,"/api/event-log",$.device),eventLogEventsEndpoint:d0(Q,"/api/event-log/events",$.device),diagnosticsEndpoint:d0(Q,"/api/diagnostics",$.device),axEndpoint:d0(Q,"/ax",$.device),cameraStatusEndpoint:`${Q==="/"?"":Q}/helper/${encodeURIComponent($.device)}/camera/status`,devtoolsEndpoint:d0(Q,"/devtools",$.device),serveSimBin:Z,gridApiEndpoint:V,gridStartEndpoint:V+"/start",gridShutdownEndpoint:V+"/shutdown",gridMemoryEndpoint:V+"/memory",previewEndpoint:Q===""?"/":Q,...J?{allowExec:!0}:{},...Y?{codec:Y}:{},...K?{initialState:K}:{},...X?{proxyHelpers:!0}:{}}}async function SY($){return new Promise((Q)=>{let Z=KY();Z.once("error",()=>Q(!1)),Z.once("listening",()=>Z.close(()=>Q(!0))),Z.listen($,"127.0.0.1")})}async function C5($){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((K)=>K.id.startsWith("sim:")).map((K)=>{let G=K.id.split(":")[1],z=K.description?.match(/\(([^)]+)\)/)?.[1];return{id:K.id,title:K.title||K.url||"Untitled",url:/^https?:/i.test(K.url)?K.url:"about:blank",type:K.type||"page",udid:G,bundleId:z}})}}}catch{return null}}async function kY(){if(p0)try{return await(await p0).listTargets(),p0}catch{p0=null}return p0=(async()=>{let{startCdpServer:$}=await Promise.resolve().then(() => (K5(),X5));for(let Q=F9;Q<F9+50;Q++){if(!await SY(Q)){let Z=await C5(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 C5(Q);if(J)return J;continue}throw Z}}throw Error(`No available inspect-webkit port found in ${F9}-${F9+49}`)})().catch(($)=>{throw p0=null,$}),p0}function yY($){return Array.isArray($)?$[0]:$}function P5($){return yY($.headers["x-forwarded-proto"])?.split(",",1)[0]?.trim().toLowerCase()}function fY($){return P5($)==="https"?"wss":"ws"}function U9($){return P5($)==="https"?"https":"http"}function bY($,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 l$=null;function vY($=import.meta.url,Q=O5){try{let Z=YY(XY($));for(let J of[k6(Z,"serve-sim.js"),k6(Z,"..","dist","serve-sim.js")])if(Q(J))return J}catch{}return"serve-sim"}function hY(){if(!l$)l$=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHNjcmlwdD4oZnVuY3Rpb24gYXBwbHlUaGVtZUJlZm9yZVBhaW50KHN0b3JhZ2VLZXksIGRhcmtRdWVyeSkgewogIHZhciBwcmVmZXJlbmNlID0gbnVsbDsKICB0cnkgewogICAgcHJlZmVyZW5jZSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShzdG9yYWdlS2V5KTsKICB9IGNhdGNoIHt9CiAgdmFyIGRhcmsgPSBwcmVmZXJlbmNlID09PSAiZGFyayIgfHwgcHJlZmVyZW5jZSAhPT0gImxpZ2h0IiAmJiAodHlwZW9mIHdpbmRvdy5tYXRjaE1lZGlhICE9PSAiZnVuY3Rpb24iIHx8IHdpbmRvdy5tYXRjaE1lZGlhKGRhcmtRdWVyeSkubWF0Y2hlcyk7CiAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS10aGVtZSIsIGRhcmsgPyAiZGFyayIgOiAibGlnaHQiKTsKfSkoInNlcnZlLXNpbTp0aGVtZSIsIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKTs8L3NjcmlwdD4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLXdoaXRlOiNmZmY7LS1zcGFjaW5nOi4yNXJlbTstLWZvbnQtd2VpZ2h0LW1lZGl1bTo1MDA7LS1mb250LXdlaWdodC1zZW1pYm9sZDo2MDA7LS10cmFja2luZy13aWRlOi4wMjVlbTstLWxlYWRpbmctdGlnaHQ6MS4yNTstLWxlYWRpbmctc251ZzoxLjM3NTstLXJhZGl1cy14czouMTI1cmVtOy0tcmFkaXVzLW1kOi4zNzVyZW07LS1yYWRpdXMtbGc6LjVyZW07LS1yYWRpdXMteGw6Ljc1cmVtOy0tZWFzZS1vdXQ6Y3ViaWMtYmV6aWVyKDAsMCwuMiwxKTstLWVhc2UtaW4tb3V0OmN1YmljLWJlemllciguNCwwLC4yLDEpOy0tYW5pbWF0ZS1zcGluOnNwaW4gMXMgbGluZWFyIGluZmluaXRlOy0tYmx1ci1tZDoxMnB4Oy0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7LS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNCwwLC4yLDEpOy0tZGVmYXVsdC1mb250LWZhbWlseTp2YXIoLS1mb250LXNhbnMpOy0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtbW9ubyk7LS1jb2xvci1wYW5lbDp2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwpOy0tY29sb3ItcGFuZWwtYmc6dmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnKTstLWNvbG9yLXBhbmVsLWJnLXRyYW5zbHVjZW50OnZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc2x1Y2VudCk7LS1jb2xvci1wYW5lbC1vdmVybGF5OnZhcigtLXNlcnZlLXNpbS1wYW5lbC1vdmVybGF5KTstLWNvbG9yLXBhbmVsLWRlZXA6dmFyKC0tc2VydmUtc2ltLXBhbmVsLWRlZXApOy0tY29sb3ItcGFuZWwtaG92ZXI6dmFyKC0tc2VydmUtc2ltLXBhbmVsLWhvdmVyKTstLWNvbG9yLXBhZ2U6dmFyKC0tc2VydmUtc2ltLXBhZ2UpOy0tY29sb3ItaW5rOnZhcigtLXNlcnZlLXNpbS1pbmspOy0tY29sb3ItaW5rLWludmVyc2U6dmFyKC0tc2VydmUtc2ltLWluay1pbnZlcnNlKTstLWNvbG9yLWljb246dmFyKC0tc2VydmUtc2ltLWljb24pOy0tY29sb3ItdGludDp2YXIoLS1zZXJ2ZS1zaW0tdGludCk7LS1jb2xvci1hY2NlbnQ6dmFyKC0tc2VydmUtc2ltLWFjY2VudCk7LS1jb2xvci1zdWNjZXNzLWVtZXJhbGQ6dmFyKC0tc2VydmUtc2ltLXN1Y2Nlc3MtZW1lcmFsZCk7LS1jb2xvci1kYW5nZXI6dmFyKC0tc2VydmUtc2ltLWRhbmdlcik7LS1jb2xvci1kYW5nZXItc29mdDp2YXIoLS1zZXJ2ZS1zaW0tZGFuZ2VyLXNvZnQpOy0tY29sb3Itd2FybmluZzp2YXIoLS1zZXJ2ZS1zaW0td2FybmluZyk7LS1jb2xvci13YXJuaW5nLXNvZnQ6dmFyKC0tc2VydmUtc2ltLXdhcm5pbmctc29mdCk7LS1jb2xvci1jb250cm9sLXNlbGVjdGVkOnZhcigtLXNlcnZlLXNpbS1jb250cm9sLXNlbGVjdGVkKTstLWNvbG9yLWdyYWJiZXI6dmFyKC0tc2VydmUtc2ltLWdyYWJiZXIpOy0tY29sb3ItZ3JhYmJlci1hY3RpdmU6dmFyKC0tc2VydmUtc2ltLWdyYWJiZXItYWN0aXZlKTstLWNvbG9yLW9uLXN1Y2Nlc3M6dmFyKC0tc2VydmUtc2ltLW9uLXN1Y2Nlc3MpOy0tY29sb3Itc3lzdGVtLWljb24tYm9yZGVyOnZhcigtLXNlcnZlLXNpbS1zeXN0ZW0taWNvbi1ib3JkZXIpOy0tY29sb3Itc3lzdGVtLWljb24tZmc6dmFyKC0tc2VydmUtc2ltLXN5c3RlbS1pY29uLWZnKTstLWNvbG9yLWxpdmUtaWNvbjp2YXIoLS1zZXJ2ZS1zaW0tbGl2ZS1pY29uKTstLWNvbG9yLWxpdmUtaWNvbi1hY3RpdmU6dmFyKC0tc2VydmUtc2ltLWxpdmUtaWNvbi1hY3RpdmUpOy0tY29sb3ItbGl2ZS1pY29uLWZnOnZhcigtLXNlcnZlLXNpbS1saXZlLWljb24tZmcpOy0tZm9udC1zeXN0ZW06LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZn19QGxheWVyIGJhc2V7Kiw6YWZ0ZXIsOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6YmFja2Ryb3B7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfWh0bWwsOmhvc3R7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7dGFiLXNpemU6NDtsaW5lLWhlaWdodDoxLjU7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1mb250LWZhbWlseSx1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSIpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtZm9udC12YXJpYXRpb24tc2V0dGluZ3Msbm9ybWFsKTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9aHJ7Y29sb3I6aW5oZXJpdDtib3JkZXItdG9wLXdpZHRoOjFweDtoZWlnaHQ6MH1hYmJyOndoZXJlKFt0aXRsZV0pey13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1he2NvbG9yOmluaGVyaXQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246aW5oZXJpdDt0ZXh0LWRlY29yYXRpb246aW5oZXJpdH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9Y29kZSxrYmQsc2FtcCxwcmV7Zm9udC1mYW1pbHk6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmFtaWx5LHVpLW1vbm9zcGFjZSxTRk1vbm8tUmVndWxhcixNZW5sbyxNb25hY28sQ29uc29sYXMsIkxpYmVyYXRpb24gTW9ubyIsIkNvdXJpZXIgTmV3Iixtb25vc3BhY2UpO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LW1vbm8tZm9udC1mZWF0dXJlLXNldHRpbmdzLG5vcm1hbCk7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7Zm9udC1zaXplOjFlbX1zbWFsbHtmb250LXNpemU6ODAlfXN1YixzdXB7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowfXN1Yntib3R0b206LS4yNWVtfXN1cHt0b3A6LS41ZW19dGFibGV7dGV4dC1pbmRlbnQ6MDtib3JkZXItY29sb3I6aW5oZXJpdDtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6YXV0b31wcm9ncmVzc3t2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdW1tYXJ5e2Rpc3BsYXk6bGlzdC1pdGVtfW9sLHVsLG1lbnV7bGlzdC1zdHlsZTpub25lfWltZyxzdmcsdmlkZW8sY2FudmFzLGF1ZGlvLGlmcmFtZSxlbWJlZCxvYmplY3R7ZGlzcGxheTpibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9aW1nLHZpZGVve21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvfWJ1dHRvbixpbnB1dCxzZWxlY3Qsb3B0Z3JvdXAsdGV4dGFyZWF7Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTp3aGVyZShzZWxlY3Q6LXdlYmtpdC1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0OmlzKFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LXdlYmtpdC1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06d2hlcmUoc2VsZWN0Oi1tb3otYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257bWFyZ2luLWlubGluZS1lbmQ6NHB4fTo6ZmlsZS1zZWxlY3Rvci1idXR0b257bWFyZ2luLWlubGluZS1lbmQ6NHB4fTo6cGxhY2Vob2xkZXJ7b3BhY2l0eToxfUBzdXBwb3J0cyAoIG5vdCAoLXdlYmtpdC1hcHBlYXJhbmNlOiAtYXBwbGUtcGF5LWJ1dHRvbikpIG9yIChjb250YWluLWludHJpbnNpYy1zaXplOiAxcHgpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y3VycmVudENvbG9yfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7OjpwbGFjZWhvbGRlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsY3VycmVudGNvbG9yIDUwJSx0cmFuc3BhcmVudCl9fX10ZXh0YXJlYXtyZXNpemU6dmVydGljYWx9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1kYXRlLWFuZC10aW1lLXZhbHVle3RleHQtYWxpZ246aW5oZXJpdDttaW4taGVpZ2h0OjFsaH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdHtkaXNwbGF5OmlubGluZS1mbGV4fTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWZpZWxkcy13cmFwcGVye3BhZGRpbmc6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC15ZWFyLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1vbnRoLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWRheS1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1ob3VyLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbnV0ZS1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1zZWNvbmQtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWlsbGlzZWNvbmQtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWVyaWRpZW0tZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bGluZS1oZWlnaHQ6MX06LW1vei11aS1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX1idXR0b257YXBwZWFyYW5jZTpidXR0b259aW5wdXQ6d2hlcmUoW3R5cGU9YnV0dG9uXSxbdHlwZT1yZXNldF0sW3R5cGU9c3VibWl0XSl7YXBwZWFyYW5jZTpidXR0b259Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W2hpZGRlbl06d2hlcmUoOm5vdChbaGlkZGVuPXVudGlsLWZvdW5kXSkpe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBsYXllciB1dGlsaXRpZXN7LlxbY29udGFpbmVyLXR5cGVcOmlubGluZS1zaXplXF17Y29udGFpbmVyLXR5cGU6aW5saW5lLXNpemV9LnBvaW50ZXItZXZlbnRzLWF1dG97cG9pbnRlci1ldmVudHM6YXV0b30ucG9pbnRlci1ldmVudHMtbm9uZXtwb2ludGVyLWV2ZW50czpub25lfS5jb2xsYXBzZXt2aXNpYmlsaXR5OmNvbGxhcHNlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0uZml4ZWR7cG9zaXRpb246Zml4ZWR9LnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5zdGF0aWN7cG9zaXRpb246c3RhdGljfS5zdGlja3l7cG9zaXRpb246c3RpY2t5fS5pbnNldC0we2luc2V0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LnRvcC0we3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMVwvMnt0b3A6NTAlfS50b3AtMnt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0udG9wLTN7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMyl9LnRvcC1cWzJweFxde3RvcDoycHh9LnRvcC1cW2NhbGNcKDEwMFwlXCs0cHhcKVxde3RvcDpjYWxjKDEwMCUgKyA0cHgpfS50b3AtXFtjYWxjXCgxMDBcJVwrNnB4XClcXXt0b3A6Y2FsYygxMDAlICsgNnB4KX0ucmlnaHQtMHtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5yaWdodC0wXC41e3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5yaWdodC0yXC41e3JpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucmlnaHQtM3tyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5yaWdodC1cWzlweFxde3JpZ2h0OjlweH0uYm90dG9tLTB7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMCl9LmJvdHRvbS0wXC41e2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uYm90dG9tLTN7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMyl9LmxlZnQtMHtsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMCl9LmxlZnQtMVwvMntsZWZ0OjUwJX0ubGVmdC0yXC41e2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5sZWZ0LTN7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS56LTF7ei1pbmRleDoxfS56LTEwe3otaW5kZXg6MTB9LnotMjB7ei1pbmRleDoyMH0uei0zMHt6LWluZGV4OjMwfS56LTM1e3otaW5kZXg6MzV9LnotMzZ7ei1pbmRleDozNn0uei00MHt6LWluZGV4OjQwfS56LTUwe3otaW5kZXg6NTB9LmNvbnRhaW5lcnt3aWR0aDoxMDAlfUBtZWRpYSAobWluLXdpZHRoOjQwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo0MHJlbX19QG1lZGlhIChtaW4td2lkdGg6NDhyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQ4cmVtfX1AbWVkaWEgKG1pbi13aWR0aDo2NHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NjRyZW19fUBtZWRpYSAobWluLXdpZHRoOjgwcmVtKXsuY29udGFpbmVye21heC13aWR0aDo4MHJlbX19QG1lZGlhIChtaW4td2lkdGg6OTZyZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjk2cmVtfX0ubS0we21hcmdpbjpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS4tbXgtMXttYXJnaW4taW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqLTEpfS5teC0wXC41e21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Lm14LTF7bWFyZ2luLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS4tbXktMnttYXJnaW4tYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSotMil9Lm15LTF7bWFyZ2luLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMSl9Lm10LTBcLjV7bWFyZ2luLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ubXQtMXttYXJnaW4tdG9wOmNhbGModmFyKC0tc3BhY2luZykqMSl9Lm10LTJ7bWFyZ2luLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5tdC1cWzNweFxde21hcmdpbi10b3A6M3B4fS5tci1cWzNweFxde21hcmdpbi1yaWdodDozcHh9Lm1sLTBcLjV7bWFyZ2luLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9Lm1sLWF1dG97bWFyZ2luLWxlZnQ6YXV0b30uYm94LWJvcmRlcntib3gtc2l6aW5nOmJvcmRlci1ib3h9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmNvbnRlbnRze2Rpc3BsYXk6Y29udGVudHN9LmZsZXh7ZGlzcGxheTpmbGV4fS5ncmlke2Rpc3BsYXk6Z3JpZH0uaGlkZGVue2Rpc3BsYXk6bm9uZX0uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LnRhYmxle2Rpc3BsYXk6dGFibGV9LlxbYXNwZWN0LXJhdGlvXDoxNlwvMTFcXXthc3BlY3QtcmF0aW86MTYvMTF9LnNpemUtMVwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uc2l6ZS0yXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMi41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5zaXplLTNcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnNpemUtNHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5zaXplLTV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uc2l6ZS02e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNik7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNil9LnNpemUtOXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjkpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkpfS5zaXplLVxbMnB4XF17d2lkdGg6MnB4O2hlaWdodDoycHh9LnNpemUtXFsxNHB4XF17d2lkdGg6MTRweDtoZWlnaHQ6MTRweH0uc2l6ZS1cWzE4cHhcXXt3aWR0aDoxOHB4O2hlaWdodDoxOHB4fS5zaXplLVxbMTlweFxde3dpZHRoOjE5cHg7aGVpZ2h0OjE5cHh9LnNpemUtZnVsbHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5oLTJcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0uaC0ze2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5oLTNcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMy41KX0uaC00e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5oLTV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LmgtNVwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1LjUpfS5oLTZ7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNil9LmgtN3toZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0uaC04e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS5oLTEwe2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEwKX0uaC1cWzNweFxde2hlaWdodDozcHh9LmgtXFsxM3B4XF17aGVpZ2h0OjEzcHh9LmgtXFsxNHB4XF17aGVpZ2h0OjE0cHh9LmgtXFsxNnB4XF17aGVpZ2h0OjE2cHh9LmgtXFsxOHB4XF17aGVpZ2h0OjE4cHh9LmgtXFsyMnB4XF17aGVpZ2h0OjIycHh9LmgtXFsyNnB4XF17aGVpZ2h0OjI2cHh9LmgtXFszMHB4XF17aGVpZ2h0OjMwcHh9LmgtZnVsbHtoZWlnaHQ6MTAwJX0uaC1weHtoZWlnaHQ6MXB4fS5oLXNjcmVlbntoZWlnaHQ6MTAwdmh9Lm1heC1oLTkwe21heC1oZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC1oLVxbMjYwcHhcXXttYXgtaGVpZ2h0OjI2MHB4fS5tYXgtaC1cWzMyMHB4XF17bWF4LWhlaWdodDozMjBweH0ubWF4LWgtZnVsbHttYXgtaGVpZ2h0OjEwMCV9Lm1pbi1oLTB7bWluLWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4taC1cWzIycHhcXXttaW4taGVpZ2h0OjIycHh9Lm1pbi1oLVxbMzBweFxde21pbi1oZWlnaHQ6MzBweH0ubWluLWgtXFszNnB4XF17bWluLWhlaWdodDozNnB4fS5taW4taC1cWzQ0cHhcXXttaW4taGVpZ2h0OjQ0cHh9Lm1pbi1oLXB4e21pbi1oZWlnaHQ6MXB4fS53LTF7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0udy0yXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0udy00e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnctNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS53LTZ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0udy03e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNyl9LnctOHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS53LTEwe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTApfS53LTExe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTEpfS53LTIxe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMjEpfS53LTM2e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMzYpfS53LVxbMjJweFxde3dpZHRoOjIycHh9LnctXFszMHB4XF17d2lkdGg6MzBweH0udy1cWzMyXCVcXXt3aWR0aDozMiV9LnctXFszNlwlXF17d2lkdGg6MzYlfS53LVxbNDBcJVxde3dpZHRoOjQwJX0udy1cWzQyXCVcXXt3aWR0aDo0MiV9LnctXFs0NlwlXF17d2lkdGg6NDYlfS53LVxbNDhcJVxde3dpZHRoOjQ4JX0udy1cWzU4XCVcXXt3aWR0aDo1OCV9LnctXFs2MlwlXF17d2lkdGg6NjIlfS53LVxbNjhcJVxde3dpZHRoOjY4JX0udy1cWzcwXCVcXXt3aWR0aDo3MCV9LnctXFs3NFwlXF17d2lkdGg6NzQlfS53LVxbMTIwcHhcXXt3aWR0aDoxMjBweH0udy1cW2NhbGNcKDEwMFwlXCs4cHhcKVxde3dpZHRoOmNhbGMoMTAwJSArIDhweCl9LnctXFttaW5cKDMyMHB4XCxjYWxjXCgxMDB2dy0zMnB4XClcKVxde3dpZHRoOm1pbigzMjBweCwxMDB2dyAtIDMycHgpfS53LWZ1bGx7d2lkdGg6MTAwJX0udy1weHt3aWR0aDoxcHh9Lm1heC13LTkwe21heC13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjkwKX0ubWF4LXctMTIwe21heC13aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjEyMCl9Lm1heC13LVxbMTUwcHhcXXttYXgtd2lkdGg6MTUwcHh9Lm1heC13LVxbMzYwcHhcXXttYXgtd2lkdGg6MzYwcHh9Lm1heC13LVxbNDIwcHhcXXttYXgtd2lkdGg6NDIwcHh9Lm1heC13LWZ1bGx7bWF4LXdpZHRoOjEwMCV9Lm1pbi13LTB7bWluLXdpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMCl9Lm1pbi13LVxbNTZweFxde21pbi13aWR0aDo1NnB4fS5taW4tdy1cWzIwMHB4XF17bWluLXdpZHRoOjIwMHB4fS5taW4tdy1cWzIyMHB4XF17bWluLXdpZHRoOjIyMHB4fS5taW4tdy1weHttaW4td2lkdGg6MXB4fS5mbGV4LTF7ZmxleDoxfS5zaHJpbmt7ZmxleC1zaHJpbms6MX0uc2hyaW5rLTB7ZmxleC1zaHJpbms6MH0uZ3Jvd3tmbGV4LWdyb3c6MX0uLXRyYW5zbGF0ZS14LTFcLzJ7LS10dy10cmFuc2xhdGUteDpjYWxjKGNhbGMoMS8yKjEwMCUpKi0xKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfS50cmFuc2xhdGUteC0xey0tdHctdHJhbnNsYXRlLXg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKTt0cmFuc2xhdGU6dmFyKC0tdHctdHJhbnNsYXRlLXgpdmFyKC0tdHctdHJhbnNsYXRlLXkpfS4tdHJhbnNsYXRlLXktMVwvMnstLXR3LXRyYW5zbGF0ZS15OmNhbGMoY2FsYygxLzIqMTAwJSkqLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9LnRyYW5zZm9ybXt0cmFuc2Zvcm06dmFyKC0tdHctcm90YXRlLXgsKXZhcigtLXR3LXJvdGF0ZS15LCl2YXIoLS10dy1yb3RhdGUteiwpdmFyKC0tdHctc2tldy14LCl2YXIoLS10dy1za2V3LXksKX0uYW5pbWF0ZS1cW2dyaWQtc3Bpbl8wXC43c19saW5lYXJfaW5maW5pdGVcXXthbmltYXRpb246Z3JpZC1zcGluIC43cyBsaW5lYXIgaW5maW5pdGV9LmFuaW1hdGUtXFtncmlkLXNwaW5fMFwuOHNfbGluZWFyX2luZmluaXRlXF17YW5pbWF0aW9uOmdyaWQtc3BpbiAuOHMgbGluZWFyIGluZmluaXRlfS5hbmltYXRlLXNwaW57YW5pbWF0aW9uOnZhcigtLWFuaW1hdGUtc3Bpbil9LmN1cnNvci1jb2wtcmVzaXple2N1cnNvcjpjb2wtcmVzaXplfS5jdXJzb3ItZGVmYXVsdHtjdXJzb3I6ZGVmYXVsdH0uY3Vyc29yLW5vdC1hbGxvd2Vke2N1cnNvcjpub3QtYWxsb3dlZH0uY3Vyc29yLXBvaW50ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmN1cnNvci1wcm9ncmVzc3tjdXJzb3I6cHJvZ3Jlc3N9LmN1cnNvci10ZXh0e2N1cnNvcjp0ZXh0fS50b3VjaC1ub25le3RvdWNoLWFjdGlvbjpub25lfS5yZXNpemV7cmVzaXplOmJvdGh9Lmxpc3Qtbm9uZXtsaXN0LXN0eWxlLXR5cGU6bm9uZX0uYXBwZWFyYW5jZS1ub25le2FwcGVhcmFuY2U6bm9uZX0uXFtncmlkLXRlbXBsYXRlLWNvbHVtbnNcOjFmcl8xZnJfMWZyXF17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnIgMWZyfS5cW2dyaWQtdGVtcGxhdGUtY29sdW1uc1w6YXV0b18xZnJfYXV0b1xde2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIDFmciBhdXRvfS5cW2dyaWQtdGVtcGxhdGUtY29sdW1uc1w6YXV0b19taW5tYXhcKDBcLDFmclwpX2F1dG9cXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byBtaW5tYXgoMCwxZnIpYXV0b30uZ3JpZC1jb2xzLVxbNTZweF8xZnJfYXV0b1xde2dyaWQtdGVtcGxhdGUtY29sdW1uczo1NnB4IDFmciBhdXRvfS5mbGV4LWNvbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uZmxleC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcH0ucGxhY2UtaXRlbXMtY2VudGVye3BsYWNlLWl0ZW1zOiBjZW50ZXJ9Lml0ZW1zLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6IGNlbnRlcn0uaXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS5qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZ2FwLTBcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5nYXAtMXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0uZ2FwLTFcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uZ2FwLTJ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMil9LmdhcC0yXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmdhcC0ze2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5nYXAtNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uZ2FwLVxbNXB4XF17Z2FwOjVweH0uZ2FwLXB4e2dhcDoxcHh9Lmp1c3RpZnktc2VsZi1lbmR7anVzdGlmeS1zZWxmOmZsZXgtZW5kfS50cnVuY2F0ZXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lm92ZXJmbG93LWhpZGRlbntvdmVyZmxvdzpoaWRkZW59Lm92ZXJmbG93LXktYXV0b3tvdmVyZmxvdy15OmF1dG99LnJvdW5kZWR7Ym9yZGVyLXJhZGl1czouMjVyZW19LnJvdW5kZWQtXFsycHhcXXtib3JkZXItcmFkaXVzOjJweH0ucm91bmRlZC1cWzNweFxde2JvcmRlci1yYWRpdXM6M3B4fS5yb3VuZGVkLVxbNHB4XF17Ym9yZGVyLXJhZGl1czo0cHh9LnJvdW5kZWQtXFs1cHhcXXtib3JkZXItcmFkaXVzOjVweH0ucm91bmRlZC1cWzdweFxde2JvcmRlci1yYWRpdXM6N3B4fS5yb3VuZGVkLVxbOHB4XF17Ym9yZGVyLXJhZGl1czo4cHh9LnJvdW5kZWQtXFs5cHhcXXtib3JkZXItcmFkaXVzOjlweH0ucm91bmRlZC1cWzEwcHhcXXtib3JkZXItcmFkaXVzOjEwcHh9LnJvdW5kZWQtXFsxNHB4XF17Ym9yZGVyLXJhZGl1czoxNHB4fS5yb3VuZGVkLWZ1bGx7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LnJvdW5kZWQtbGd7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtbGcpfS5yb3VuZGVkLW1ke2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLW1kKX0ucm91bmRlZC1ub25le2JvcmRlci1yYWRpdXM6MH0ucm91bmRlZC14bHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy14bCl9LnJvdW5kZWQteHN7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteHMpfS5yb3VuZGVkLXQtXFsxMHB4XF17Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoxMHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjEwcHh9LmJvcmRlcntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItMntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MnB4fS5ib3JkZXItdHtib3JkZXItdG9wLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXRvcC13aWR0aDoxcHh9LmJvcmRlci1ye2JvcmRlci1yaWdodC1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci1yaWdodC13aWR0aDoxcHh9LmJvcmRlci1kYXNoZWR7LS10dy1ib3JkZXItc3R5bGU6ZGFzaGVkO2JvcmRlci1zdHlsZTpkYXNoZWR9LmJvcmRlci1ub25ley0tdHctYm9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXN0eWxlOm5vbmV9LlwhYm9yZGVyLXRpbnRcLzYwe2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci10aW50KSFpbXBvcnRhbnR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXCFib3JkZXItdGludFwvNjB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci10aW50KTYwJSx0cmFuc3BhcmVudCkhaW1wb3J0YW50fX0uYm9yZGVyLVxbXCNhNWI0ZmNcXXtib3JkZXItY29sb3I6I2E1YjRmY30uYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWRhbmdlcil9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMjAlLHRyYW5zcGFyZW50KX19LmJvcmRlci1kYW5nZXJcLzMwe2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci1kYW5nZXIpfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci1kYW5nZXJcLzMwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItZGFuZ2VyKTMwJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItZGFuZ2VyXC80NXtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItZGFuZ2VyXC80NXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWRhbmdlcik0NSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLWRhbmdlclwvNTB7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWRhbmdlcil9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWRhbmdlclwvNTB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpNTAlLHRyYW5zcGFyZW50KX19LmJvcmRlci1pbmt7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWluayl9LmJvcmRlci1pbmtcLzh7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWlua1wvOHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluayk4JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItaW5rXC8xMHtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItaW5rXC8xMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluaykxMCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLWlua1wvMTJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWlua1wvMTJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspMTIlLHRyYW5zcGFyZW50KX19LmJvcmRlci1pbmtcLzIwe2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci1pbmtcLzIwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTIwJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItaW5rXC8yNXtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItaW5rXC8yNXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluaykyNSUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLWlua1wvMzB7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWlua1wvMzB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspMzAlLHRyYW5zcGFyZW50KX19LmJvcmRlci1pbmtcL1xbMFwuMDZcXXtib3JkZXItY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItaW5rXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspNiUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXN5c3RlbS1pY29uLWJvcmRlcntib3JkZXItY29sb3I6dmFyKC0tY29sb3Itc3lzdGVtLWljb24tYm9yZGVyKX0uYm9yZGVyLXdhcm5pbmdcLzI1e2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci13YXJuaW5nKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2FybmluZ1wvMjV7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13YXJuaW5nKTI1JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItdC1pbmt7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jb2xvci1pbmspfS5ib3JkZXItdC1pbmtcLzYwe2JvcmRlci10b3AtY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItdC1pbmtcLzYwe2JvcmRlci10b3AtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluayk2MCUsdHJhbnNwYXJlbnQpfX0uYm9yZGVyLXQtaW5rXC85NXtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXQtaW5rXC85NXtib3JkZXItdG9wLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspOTUlLHRyYW5zcGFyZW50KX19LlwhYmctaW5rXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1pbmspIWltcG9ydGFudH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cIWJnLWlua1wvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluaykxMiUsdHJhbnNwYXJlbnQpIWltcG9ydGFudH19LlwhYmctdGludFwvOHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXRpbnQpIWltcG9ydGFudH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cIWJnLXRpbnRcLzh7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItdGludCk4JSx0cmFuc3BhcmVudCkhaW1wb3J0YW50fX0uYmctXFtcIzBhODRmZlxde2JhY2tncm91bmQtY29sb3I6IzBhODRmZn0uYmctXFtyZ2JhXCg5OVwsMTAyXCwyNDFcLDBcLjE4XClcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2MzY2ZjEyZX0uYmctYWNjZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0uYmctY29udHJvbC1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWNvbnRyb2wtc2VsZWN0ZWQpfS5iZy1kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1kYW5nZXIpfS5iZy1kYW5nZXItc29mdHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWRhbmdlci1zb2Z0KX0uYmctZGFuZ2VyXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWRhbmdlcil9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctZGFuZ2VyXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMTAlLHRyYW5zcGFyZW50KX19LmJnLWdyYWJiZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1ncmFiYmVyKX0uYmctZ3JhYmJlci1hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1ncmFiYmVyLWFjdGl2ZSl9LmJnLWlua3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9LmJnLWlua1wvNntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctaW5rXC82e2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluayk2JSx0cmFuc3BhcmVudCl9fS5iZy1pbmtcLzh7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWlua1wvOHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspOCUsdHJhbnNwYXJlbnQpfX0uYmctaW5rXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctaW5rXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspMTAlLHRyYW5zcGFyZW50KX19LmJnLWlua1wvMTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWlua1wvMTJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTEyJSx0cmFuc3BhcmVudCl9fS5iZy1pbmtcLzE1e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy1pbmtcLzE1e2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluaykxNSUsdHJhbnNwYXJlbnQpfX0uYmctaW5rXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctaW5rXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspMjAlLHRyYW5zcGFyZW50KX19LmJnLWlua1wvNDB7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWlua1wvNDB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTQwJSx0cmFuc3BhcmVudCl9fS5iZy1pbmtcL1xbMFwuMDNcXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctaW5rXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTMlLHRyYW5zcGFyZW50KX19LmJnLWlua1wvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy1pbmtcL1xbMFwuMDRcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspNCUsdHJhbnNwYXJlbnQpfX0uYmctaW5rXC9cWzBcLjA2XF17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLWlua1wvXFswXC4wNlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluayk2JSx0cmFuc3BhcmVudCl9fS5iZy1pbmtcL1xbMFwuMDhcXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctaW5rXC9cWzBcLjA4XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTglLHRyYW5zcGFyZW50KX19LmJnLWlua1wvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy1pbmtcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspMTIlLHRyYW5zcGFyZW50KX19LmJnLWlua1wvXFswXC4xNlxde2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy1pbmtcL1xbMFwuMTZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspMTYlLHRyYW5zcGFyZW50KX19LmJnLWxpdmUtaWNvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWxpdmUtaWNvbil9LmJnLWxpdmUtaWNvbi1hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1saXZlLWljb24tYWN0aXZlKX0uYmctcGFnZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhZ2UpfS5iZy1wYW5lbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXBhbmVsKX0uYmctcGFuZWwtYmd7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1iZyl9LmJnLXBhbmVsLWJnLXRyYW5zbHVjZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtYmctdHJhbnNsdWNlbnQpfS5iZy1wYW5lbC1kZWVwe2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtZGVlcCl9LmJnLXBhbmVsLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1vdmVybGF5KX0uYmctcGFuZWxcLzkye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwpfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXBhbmVsXC85MntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1wYW5lbCk5MiUsdHJhbnNwYXJlbnQpfX0uYmctc3VjY2Vzcy1lbWVyYWxke2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkKX0uYmctdGludHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXRpbnQpfS5iZy10aW50XC8yMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXRpbnQpfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXRpbnRcLzIye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXRpbnQpMjIlLHRyYW5zcGFyZW50KX19LmJnLXRyYW5zcGFyZW50e2JhY2tncm91bmQtY29sb3I6IzAwMDB9LmJnLXdhcm5pbmdcLzEwe2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itd2FybmluZyl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2FybmluZ1wvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2FybmluZykxMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJnLXdoaXRlXC81MHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY4MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvNTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LmJnLVxbbGluZWFyLWdyYWRpZW50XCgxNDVkZWdcLHZhclwoLS1zZXJ2ZS1zaW0tc3lzdGVtLWljb24tZnJvbVwpXCx2YXJcKC0tc2VydmUtc2ltLXN5c3RlbS1pY29uLXRvXClcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDE0NWRlZyx2YXIoLS1zZXJ2ZS1zaW0tc3lzdGVtLWljb24tZnJvbSksdmFyKC0tc2VydmUtc2ltLXN5c3RlbS1pY29uLXRvKSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b19ib3R0b21cLHZhclwoLS1zZXJ2ZS1zaW0tcGFuZWxcKV8wXCVcLHZhclwoLS1zZXJ2ZS1zaW0tcGFuZWwtdHJhbnNwYXJlbnRcKV8xMDBcJVwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHZhcigtLXNlcnZlLXNpbS1wYW5lbCkwJSx2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtdHJhbnNwYXJlbnQpMTAwJSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b19yaWdodFwsdmFyXCgtLXNlcnZlLXNpbS1wYW5lbC10cmFuc3BhcmVudFwpXzBcJVwsdmFyXCgtLXNlcnZlLXNpbS1wYW5lbFwpXzU1XCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLXNlcnZlLXNpbS1wYW5lbC10cmFuc3BhcmVudCkwJSx2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwpNTUlKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX3RvcFwsdmFyXCgtLXNlcnZlLXNpbS1wYW5lbFwpXzBcJVwsdmFyXCgtLXNlcnZlLXNpbS1wYW5lbC10cmFuc3BhcmVudFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byB0b3AsdmFyKC0tc2VydmUtc2ltLXBhbmVsKTAlLHZhcigtLXNlcnZlLXNpbS1wYW5lbC10cmFuc3BhcmVudCkxMDAlKX0ub2JqZWN0LWNvbnRhaW57b2JqZWN0LWZpdDpjb250YWlufS5vYmplY3QtY292ZXJ7b2JqZWN0LWZpdDpjb3Zlcn0ucC0we3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucC0wXC41e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnAtMXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnAtM1wuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucC02e3BhZGRpbmc6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucHgtMFwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHgtMXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weC0xXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0ucHgtMntwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5weC0yXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHgtM3twYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5weC0zXC41e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHgtNHtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5weC01e3BhZGRpbmctaW5saW5lOmNhbGModmFyKC0tc3BhY2luZykqNSl9LnB4LVxbNVwuNXB4XF17cGFkZGluZy1pbmxpbmUtc3RhcnQ6NS41cHg7cGFkZGluZy1pbmxpbmUtZW5kOjUuNXB4fS5weC1cWzdweFxde3BhZGRpbmctaW5saW5lLXN0YXJ0OjdweDtwYWRkaW5nLWlubGluZS1lbmQ6N3B4fS5weS0wXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB5LTF7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5weS0xXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5weS0ye3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHktMlwuNXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucHktM3twYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMyl9LnB5LTR7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5weS02e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ucHktXFsycHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjJweDtwYWRkaW5nLWJsb2NrLWVuZDoycHh9LnB5LVxbM3B4XF17cGFkZGluZy1ibG9jay1zdGFydDozcHg7cGFkZGluZy1ibG9jay1lbmQ6M3B4fS5weS1cWzVweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6NXB4O3BhZGRpbmctYmxvY2stZW5kOjVweH0ucHktXFs3cHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjdweDtwYWRkaW5nLWJsb2NrLWVuZDo3cHh9LnB0LTBcLjV7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB0LTF7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucHQtMlwuNXtwYWRkaW5nLXRvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnByLTJ7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wci0zXC41e3BhZGRpbmctcmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5wci1cWzI2cHhcXXtwYWRkaW5nLXJpZ2h0OjI2cHh9LnBiLTBcLjV7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnBiLTF7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucGItMVwuNXtwYWRkaW5nLWJvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnBiLTJ7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucGItXFsycHhcXXtwYWRkaW5nLWJvdHRvbToycHh9LnBsLTJ7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMil9LnBsLTJcLjV7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0ucGwtM3twYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucGwtN3twYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0ucGwtXFsyNnB4XF17cGFkZGluZy1sZWZ0OjI2cHh9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LlxbZm9udC1mYW1pbHlcOi1hcHBsZS1zeXN0ZW1cLHN5c3RlbS11aVwsc2Fucy1zZXJpZlxde2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sTm90byBTYW5zLFVidW50dSxDYW50YXJlbGwsSGVsdmV0aWNhIE5ldWUsc2Fucy1zZXJpZn0uZm9udC1cW2luaGVyaXRcXXtmb250LWZhbWlseTppbmhlcml0fS5mb250LW1vbm97Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKX0uZm9udC1zeXN0ZW17Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1zeXN0ZW0pfS50ZXh0LVxbOXB4XF17Zm9udC1zaXplOjlweH0udGV4dC1cWzEwcHhcXXtmb250LXNpemU6MTBweH0udGV4dC1cWzExXC41cHhcXXtmb250LXNpemU6MTEuNXB4fS50ZXh0LVxbMTFweFxde2ZvbnQtc2l6ZToxMXB4fS50ZXh0LVxbMTJweFxde2ZvbnQtc2l6ZToxMnB4fS50ZXh0LVxbMTNweFxde2ZvbnQtc2l6ZToxM3B4fS50ZXh0LVxbMTRweFxde2ZvbnQtc2l6ZToxNHB4fS50ZXh0LVxbMTdweFxde2ZvbnQtc2l6ZToxN3B4fS50ZXh0LVxbMThweFxde2ZvbnQtc2l6ZToxOHB4fS5sZWFkaW5nLVxbMVwuNFxdey0tdHctbGVhZGluZzoxLjQ7bGluZS1oZWlnaHQ6MS40fS5sZWFkaW5nLVxbMVwuNVxdey0tdHctbGVhZGluZzoxLjU7bGluZS1oZWlnaHQ6MS41fS5sZWFkaW5nLVxbMVwuMzVcXXstLXR3LWxlYWRpbmc6MS4zNTtsaW5lLWhlaWdodDoxLjM1fS5sZWFkaW5nLW5vbmV7LS10dy1sZWFkaW5nOjE7bGluZS1oZWlnaHQ6MX0ubGVhZGluZy1zbnVney0tdHctbGVhZGluZzp2YXIoLS1sZWFkaW5nLXNudWcpO2xpbmUtaGVpZ2h0OnZhcigtLWxlYWRpbmctc251Zyl9LmxlYWRpbmctdGlnaHR7LS10dy1sZWFkaW5nOnZhcigtLWxlYWRpbmctdGlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWxlYWRpbmctdGlnaHQpfS5mb250LW1lZGl1bXstLXR3LWZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7Zm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKX0uZm9udC1zZW1pYm9sZHstLXR3LWZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtmb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCl9LnRyYWNraW5nLVxbMFwuMWVtXF17LS10dy10cmFja2luZzouMWVtO2xldHRlci1zcGFjaW5nOi4xZW19LnRyYWNraW5nLVxbMFwuMDJlbVxdey0tdHctdHJhY2tpbmc6LjAyZW07bGV0dGVyLXNwYWNpbmc6LjAyZW19LnRyYWNraW5nLVxbMFwuMDRlbVxdey0tdHctdHJhY2tpbmc6LjA0ZW07bGV0dGVyLXNwYWNpbmc6LjA0ZW19LnRyYWNraW5nLVxbMFwuMDZlbVxdey0tdHctdHJhY2tpbmc6LjA2ZW07bGV0dGVyLXNwYWNpbmc6LjA2ZW19LnRyYWNraW5nLVxbMFwuMDhlbVxdey0tdHctdHJhY2tpbmc6LjA4ZW07bGV0dGVyLXNwYWNpbmc6LjA4ZW19LnRyYWNraW5nLXdpZGV7LS10dy10cmFja2luZzp2YXIoLS10cmFja2luZy13aWRlKTtsZXR0ZXItc3BhY2luZzp2YXIoLS10cmFja2luZy13aWRlKX0uYnJlYWstd29yZHN7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS50ZXh0LWVsbGlwc2lze3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LndoaXRlc3BhY2Utbm93cmFwe3doaXRlLXNwYWNlOm5vd3JhcH0uXCF0ZXh0LWlua3tjb2xvcjp2YXIoLS1jb2xvci1pbmspIWltcG9ydGFudH0udGV4dC1cW1wjYTViNGZjXF17Y29sb3I6I2E1YjRmY30udGV4dC1hY2NlbnR7Y29sb3I6dmFyKC0tY29sb3ItYWNjZW50KX0udGV4dC1kYW5nZXJ7Y29sb3I6dmFyKC0tY29sb3ItZGFuZ2VyKX0udGV4dC1kYW5nZXItc29mdHtjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXItc29mdCl9LnRleHQtaWNvbntjb2xvcjp2YXIoLS1jb2xvci1pY29uKX0udGV4dC1pbmt7Y29sb3I6dmFyKC0tY29sb3ItaW5rKX0udGV4dC1pbmstNDB7Y29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LWluay00MHtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1jb2xvci1pbmspY2FsYygxMDAlIC0gKDEwMCUgLSA0MCoxJSkqdmFyKC0tc2VydmUtc2ltLXRleHQtaykpLHRyYW5zcGFyZW50KX19LnRleHQtaW5rLTQye2NvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC1pbmstNDJ7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tY29sb3ItaW5rKWNhbGMoMTAwJSAtICgxMDAlIC0gNDIqMSUpKnZhcigtLXNlcnZlLXNpbS10ZXh0LWspKSx0cmFuc3BhcmVudCl9fS50ZXh0LWluay00NXtjb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtaW5rLTQ1e2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWNvbG9yLWluayljYWxjKDEwMCUgLSAoMTAwJSAtIDQ1KjElKSp2YXIoLS1zZXJ2ZS1zaW0tdGV4dC1rKSksdHJhbnNwYXJlbnQpfX0udGV4dC1pbmstNDh7Y29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LWluay00OHtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1jb2xvci1pbmspY2FsYygxMDAlIC0gKDEwMCUgLSA0OCoxJSkqdmFyKC0tc2VydmUtc2ltLXRleHQtaykpLHRyYW5zcGFyZW50KX19LnRleHQtaW5rLTUwe2NvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC1pbmstNTB7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tY29sb3ItaW5rKWNhbGMoMTAwJSAtICgxMDAlIC0gNTAqMSUpKnZhcigtLXNlcnZlLXNpbS10ZXh0LWspKSx0cmFuc3BhcmVudCl9fS50ZXh0LWluay01NXtjb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtaW5rLTU1e2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWNvbG9yLWluayljYWxjKDEwMCUgLSAoMTAwJSAtIDU1KjElKSp2YXIoLS1zZXJ2ZS1zaW0tdGV4dC1rKSksdHJhbnNwYXJlbnQpfX0udGV4dC1pbmstNTh7Y29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LWluay01OHtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1jb2xvci1pbmspY2FsYygxMDAlIC0gKDEwMCUgLSA1OCoxJSkqdmFyKC0tc2VydmUtc2ltLXRleHQtaykpLHRyYW5zcGFyZW50KX19LnRleHQtaW5rLTYwe2NvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC1pbmstNjB7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tY29sb3ItaW5rKWNhbGMoMTAwJSAtICgxMDAlIC0gNjAqMSUpKnZhcigtLXNlcnZlLXNpbS10ZXh0LWspKSx0cmFuc3BhcmVudCl9fS50ZXh0LWluay02NXtjb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtaW5rLTY1e2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWNvbG9yLWluayljYWxjKDEwMCUgLSAoMTAwJSAtIDY1KjElKSp2YXIoLS1zZXJ2ZS1zaW0tdGV4dC1rKSksdHJhbnNwYXJlbnQpfX0udGV4dC1pbmstNzB7Y29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LWluay03MHtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1jb2xvci1pbmspY2FsYygxMDAlIC0gKDEwMCUgLSA3MCoxJSkqdmFyKC0tc2VydmUtc2ltLXRleHQtaykpLHRyYW5zcGFyZW50KX19LnRleHQtaW5rLTc1e2NvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC1pbmstNzV7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tY29sb3ItaW5rKWNhbGMoMTAwJSAtICgxMDAlIC0gNzUqMSUpKnZhcigtLXNlcnZlLXNpbS10ZXh0LWspKSx0cmFuc3BhcmVudCl9fS50ZXh0LWluay04MHtjb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtaW5rLTgwe2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWNvbG9yLWluayljYWxjKDEwMCUgLSAoMTAwJSAtIDgwKjElKSp2YXIoLS1zZXJ2ZS1zaW0tdGV4dC1rKSksdHJhbnNwYXJlbnQpfX0udGV4dC1pbmstODV7Y29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LWluay04NXtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1jb2xvci1pbmspY2FsYygxMDAlIC0gKDEwMCUgLSA4NSoxJSkqdmFyKC0tc2VydmUtc2ltLXRleHQtaykpLHRyYW5zcGFyZW50KX19LnRleHQtaW5rLTkwe2NvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC1pbmstOTB7Y29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tY29sb3ItaW5rKWNhbGMoMTAwJSAtICgxMDAlIC0gOTAqMSUpKnZhcigtLXNlcnZlLXNpbS10ZXh0LWspKSx0cmFuc3BhcmVudCl9fS50ZXh0LWluay05Mntjb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtaW5rLTkye2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWNvbG9yLWluayljYWxjKDEwMCUgLSAoMTAwJSAtIDkyKjElKSp2YXIoLS1zZXJ2ZS1zaW0tdGV4dC1rKSksdHJhbnNwYXJlbnQpfX0udGV4dC1pbmstOTV7Y29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LWluay05NXtjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1jb2xvci1pbmspY2FsYygxMDAlIC0gKDEwMCUgLSA5NSoxJSkqdmFyKC0tc2VydmUtc2ltLXRleHQtaykpLHRyYW5zcGFyZW50KX19LnRleHQtaW5rLWludmVyc2V7Y29sb3I6dmFyKC0tY29sb3ItaW5rLWludmVyc2UpfS50ZXh0LWxpdmUtaWNvbi1mZ3tjb2xvcjp2YXIoLS1jb2xvci1saXZlLWljb24tZmcpfS50ZXh0LW9uLXN1Y2Nlc3N7Y29sb3I6dmFyKC0tY29sb3Itb24tc3VjY2Vzcyl9LnRleHQtc3VjY2Vzcy1lbWVyYWxke2NvbG9yOnZhcigtLWNvbG9yLXN1Y2Nlc3MtZW1lcmFsZCl9LnRleHQtc3lzdGVtLWljb24tZmd7Y29sb3I6dmFyKC0tY29sb3Itc3lzdGVtLWljb24tZmcpfS50ZXh0LXdhcm5pbmctc29mdHtjb2xvcjp2YXIoLS1jb2xvci13YXJuaW5nLXNvZnQpfS5sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlfS51cHBlcmNhc2V7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5pdGFsaWN7Zm9udC1zdHlsZTppdGFsaWN9LnRhYnVsYXItbnVtc3stLXR3LW51bWVyaWMtc3BhY2luZzp0YWJ1bGFyLW51bXM7Zm9udC12YXJpYW50LW51bWVyaWM6dmFyKC0tdHctb3JkaW5hbCwpdmFyKC0tdHctc2xhc2hlZC16ZXJvLCl2YXIoLS10dy1udW1lcmljLWZpZ3VyZSwpdmFyKC0tdHctbnVtZXJpYy1zcGFjaW5nLCl2YXIoLS10dy1udW1lcmljLWZyYWN0aW9uLCl9LlxbZm9udC12YXJpYW50LW51bWVyaWNcOnRhYnVsYXItbnVtc1xde2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30ubm8tdW5kZXJsaW5le3RleHQtZGVjb3JhdGlvbi1saW5lOm5vbmV9LmFudGlhbGlhc2Vkey13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlfS5vcGFjaXR5LTB7b3BhY2l0eTowfS5vcGFjaXR5LTQwe29wYWNpdHk6LjR9Lm9wYWNpdHktNjB7b3BhY2l0eTouNn0ub3BhY2l0eS0xMDB7b3BhY2l0eToxfS5zaGFkb3d7LS10dy1zaGFkb3c6MCAxcHggM3B4IDAgdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAxYSksMCAxcHggMnB4IC0xcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAxYSk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzFweF8ycHhfcmdiYVwoMFwsMFwsMFwsMFwuMlwpXF17LS10dy1zaGFkb3c6MCAxcHggMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMyk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzFweF8ycHhfcmdiYVwoMFwsMFwsMFwsMFwuMThcKVwsMF82cHhfMThweF9yZ2JhXCgwXCwwXCwwXCwwXC4yOFwpXCxpbnNldF8wXzBfMF8xcHhfY29sb3ItbWl4XChpbl9zcmdiXCx2YXJcKC0tc2VydmUtc2ltLWlua1wpXzZcJVwsdHJhbnNwYXJlbnRcKVxdey0tdHctc2hhZG93OjAgMXB4IDJweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDJlKSwwIDZweCAxOHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNDcpLGluc2V0IDAgMCAwIDFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsdmFyKC0tc2VydmUtc2ltLWluaykpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5zaGFkb3ctXFswXzFweF8ycHhfcmdiYVwoMFwsMFwsMFwsMFwuMThcKVwsMF82cHhfMThweF9yZ2JhXCgwXCwwXCwwXCwwXC4yOFwpXCxpbnNldF8wXzBfMF8xcHhfY29sb3ItbWl4XChpbl9zcmdiXCx2YXJcKC0tc2VydmUtc2ltLWlua1wpXzZcJVwsdHJhbnNwYXJlbnRcKVxdey0tdHctc2hhZG93OjAgMXB4IDJweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDJlKSwwIDZweCAxOHB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNDcpLGluc2V0IDAgMCAwIDFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsY29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tc2VydmUtc2ltLWluayk2JSx0cmFuc3BhcmVudCkpfX0uc2hhZG93LVxbMF8xcHhfMnB4X3JnYmFcKDBcLDBcLDBcLDBcLjE4XClcXXstLXR3LXNoYWRvdzowIDFweCAycHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDAyZSk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctcGFuZWx7LS10dy1zaGFkb3c6dmFyKC0tc2VydmUtc2ltLXNoYWRvdy1wYW5lbCk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctcG9wb3ZlcnstLXR3LXNoYWRvdzp2YXIoLS1zZXJ2ZS1zaW0tc2hhZG93LXBvcG92ZXIpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0ucmluZywucmluZy0xey0tdHctcmluZy1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpMCAwIDAgY2FsYygxcHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpdmFyKC0tdHctcmluZy1jb2xvcixjdXJyZW50Y29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0ucmluZy0yey0tdHctcmluZy1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpMCAwIDAgY2FsYygycHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpdmFyKC0tdHctcmluZy1jb2xvcixjdXJyZW50Y29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uXFtib3gtc2hhZG93XDowXzBfNnB4X2NvbG9yLW1peFwoaW5fc3JnYlwsdmFyXCgtLXNlcnZlLXNpbS1kYW5nZXJcKV81NVwlXCx0cmFuc3BhcmVudFwpXF17Ym94LXNoYWRvdzowIDAgNnB4IHZhcigtLXNlcnZlLXNpbS1kYW5nZXIpfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbYm94LXNoYWRvd1w6MF8wXzZweF9jb2xvci1taXhcKGluX3NyZ2JcLHZhclwoLS1zZXJ2ZS1zaW0tZGFuZ2VyXClfNTVcJVwsdHJhbnNwYXJlbnRcKVxde2JveC1zaGFkb3c6MCAwIDZweCBjb2xvci1taXgoaW4gc3JnYix2YXIoLS1zZXJ2ZS1zaW0tZGFuZ2VyKTU1JSx0cmFuc3BhcmVudCl9fS5cW2JveC1zaGFkb3dcOjBfMF82cHhfY29sb3ItbWl4XChpbl9zcmdiXCx2YXJcKC0tc2VydmUtc2ltLXN1Y2Nlc3NcKV83MFwlXCx0cmFuc3BhcmVudFwpXF17Ym94LXNoYWRvdzowIDAgNnB4IHZhcigtLXNlcnZlLXNpbS1zdWNjZXNzKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW2JveC1zaGFkb3dcOjBfMF82cHhfY29sb3ItbWl4XChpbl9zcmdiXCx2YXJcKC0tc2VydmUtc2ltLXN1Y2Nlc3NcKV83MFwlXCx0cmFuc3BhcmVudFwpXF17Ym94LXNoYWRvdzowIDAgNnB4IGNvbG9yLW1peChpbiBzcmdiLHZhcigtLXNlcnZlLXNpbS1zdWNjZXNzKTcwJSx0cmFuc3BhcmVudCl9fS5yaW5nLWlua1wvMTB7LS10dy1yaW5nLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsucmluZy1pbmtcLzEwey0tdHctcmluZy1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTEwJSx0cmFuc3BhcmVudCl9fS5yaW5nLXBhbmVsLWJney0tdHctcmluZy1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1iZyl9Lm91dGxpbmV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjFweH0uYmx1cnstLXR3LWJsdXI6Ymx1cig4cHgpO2ZpbHRlcjp2YXIoLS10dy1ibHVyLCl2YXIoLS10dy1icmlnaHRuZXNzLCl2YXIoLS10dy1jb250cmFzdCwpdmFyKC0tdHctZ3JheXNjYWxlLCl2YXIoLS10dy1odWUtcm90YXRlLCl2YXIoLS10dy1pbnZlcnQsKXZhcigtLXR3LXNhdHVyYXRlLCl2YXIoLS10dy1zZXBpYSwpdmFyKC0tdHctZHJvcC1zaGFkb3csKX0uZ3JheXNjYWxley0tdHctZ3JheXNjYWxlOmdyYXlzY2FsZSgxMDAlKTtmaWx0ZXI6dmFyKC0tdHctYmx1ciwpdmFyKC0tdHctYnJpZ2h0bmVzcywpdmFyKC0tdHctY29udHJhc3QsKXZhcigtLXR3LWdyYXlzY2FsZSwpdmFyKC0tdHctaHVlLXJvdGF0ZSwpdmFyKC0tdHctaW52ZXJ0LCl2YXIoLS10dy1zYXR1cmF0ZSwpdmFyKC0tdHctc2VwaWEsKXZhcigtLXR3LWRyb3Atc2hhZG93LCl9LnNlcGlhey0tdHctc2VwaWE6c2VwaWEoMTAwJSk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5maWx0ZXJ7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5iYWNrZHJvcC1ibHVyey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDhweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1cWzEycHhcXXstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cigxMnB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLVxbMThweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDE4cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItbWR7LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIodmFyKC0tYmx1ci1tZCkpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLXNhdHVyYXRlLTE1MHstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOnNhdHVyYXRlKDE1MCUpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWZpbHRlcnstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS50cmFuc2l0aW9ue3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3Isb3V0bGluZS1jb2xvcix0ZXh0LWRlY29yYXRpb24tY29sb3IsZmlsbCxzdHJva2UsLS10dy1ncmFkaWVudC1mcm9tLC0tdHctZ3JhZGllbnQtdmlhLC0tdHctZ3JhZGllbnQtdG8sb3BhY2l0eSxib3gtc2hhZG93LHRyYW5zZm9ybSx0cmFuc2xhdGUsc2NhbGUscm90YXRlLGZpbHRlciwtd2Via2l0LWJhY2tkcm9wLWZpbHRlcixiYWNrZHJvcC1maWx0ZXIsZGlzcGxheSxjb250ZW50LXZpc2liaWxpdHksb3ZlcmxheSxwb2ludGVyLWV2ZW50czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLVxbYm9yZGVyLWNvbG9yXCxiYWNrZ3JvdW5kXF17dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLVxbd2lkdGhcLGJhY2tncm91bmRcXXt0cmFuc2l0aW9uLXByb3BlcnR5OndpZHRoLGJhY2tncm91bmQ7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1jb2xvcnN7dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcixvdXRsaW5lLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSwtLXR3LWdyYWRpZW50LWZyb20sLS10dy1ncmFkaWVudC12aWEsLS10dy1ncmFkaWVudC10bzt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLW9wYWNpdHl7dHJhbnNpdGlvbi1wcm9wZXJ0eTpvcGFjaXR5O3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LmR1cmF0aW9uLTE1MHstLXR3LWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi1kdXJhdGlvbjouMTVzfS5kdXJhdGlvbi0yMDB7LS10dy1kdXJhdGlvbjouMnM7dHJhbnNpdGlvbi1kdXJhdGlvbjouMnN9LmR1cmF0aW9uLTMwMHstLXR3LWR1cmF0aW9uOi4zczt0cmFuc2l0aW9uLWR1cmF0aW9uOi4zc30uZWFzZS1pbi1vdXR7LS10dy1lYXNlOnZhcigtLWVhc2UtaW4tb3V0KTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS1lYXNlLWluLW91dCl9LmVhc2Utb3V0ey0tdHctZWFzZTp2YXIoLS1lYXNlLW91dCk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tZWFzZS1vdXQpfS5vdXRsaW5lLW5vbmV7LS10dy1vdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1zdHlsZTpub25lfS5zZWxlY3Qtbm9uZXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uc2VsZWN0LXRleHR7LXdlYmtpdC11c2VyLXNlbGVjdDp0ZXh0O3VzZXItc2VsZWN0OnRleHR9LlxbLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXJcOmJsdXJcKDEycHhcKVxdey13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOmJsdXIoMTJweCl9Llxbc2Nyb2xsYmFyLXdpZHRoXDp0aGluXF17c2Nyb2xsYmFyLXdpZHRoOnRoaW59LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4yc1wsYm94LXNoYWRvd18wXC4yc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMnMsYm94LXNoYWRvdyAuMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4zc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuM3N9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xMnNcLGJvcmRlci1jb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjEycyxib3JkZXItY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1wsY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVwsY29sb3JfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cyxjb2xvciAuMTVzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xOHN9LlxbdHJhbnNpdGlvblw6bGVmdF8wXC4xNXNcXXt0cmFuc2l0aW9uOmxlZnQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjEyc1wsYmFja2dyb3VuZF8wXC4xMnNcLGNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246b3BhY2l0eSAuMTJzLGJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTJzXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xNXNfZWFzZVwsYmFja2dyb3VuZF8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLGJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCx0cmFuc2Zvcm1fMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyx0cmFuc2Zvcm0gLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xOHN9LlxbdHJhbnNpdGlvblw6cGFkZGluZ18wXC4yNXNfZWFzZVxde3RyYW5zaXRpb246cGFkZGluZyAuMjVzfS5cW3RyYW5zaXRpb25cOnRyYW5zZm9ybV8wXC4yNXNfZWFzZVwsb3BhY2l0eV8wXC4yc19lYXNlXF17dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjI1cyxvcGFjaXR5IC4yc30uXFt0cmFuc2l0aW9uXDp3aWR0aF8xMjBtc19saW5lYXJcXXt0cmFuc2l0aW9uOndpZHRoIC4xMnMgbGluZWFyfS5ncm91cC1mb2N1cy13aXRoaW5cOm9wYWNpdHktMDppcyg6d2hlcmUoLmdyb3VwKTpmb2N1cy13aXRoaW4gKil7b3BhY2l0eTowfUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6cG9pbnRlci1ldmVudHMtYXV0bzppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtwb2ludGVyLWV2ZW50czphdXRvfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOmhpZGRlbjppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtkaXNwbGF5Om5vbmV9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6dHJhbnNsYXRlLXgtMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXstLXR3LXRyYW5zbGF0ZS14OmNhbGModmFyKC0tc3BhY2luZykqMCk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpvcGFjaXR5LTA6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7b3BhY2l0eTowfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOm9wYWNpdHktMTAwOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope29wYWNpdHk6MX19LnBsYWNlaG9sZGVyXDp0ZXh0LWluay00MDo6cGxhY2Vob2xkZXJ7Y29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5wbGFjZWhvbGRlclw6dGV4dC1pbmstNDA6OnBsYWNlaG9sZGVye2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWNvbG9yLWluayljYWxjKDEwMCUgLSAoMTAwJSAtIDQwKjElKSp2YXIoLS1zZXJ2ZS1zaW0tdGV4dC1rKSksdHJhbnNwYXJlbnQpfX0uZm9jdXMtd2l0aGluXDpiZy1pbmtcLzEwOmZvY3VzLXdpdGhpbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXMtd2l0aGluXDpiZy1pbmtcLzEwOmZvY3VzLXdpdGhpbntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspMTAlLHRyYW5zcGFyZW50KX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItaW5rXC8xNjpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ym9yZGVyLWlua1wvMTY6aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspMTYlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ym9yZGVyLWlua1wvMTg6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJvcmRlci1pbmtcLzE4OmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTE4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci1pbmtcLzIwOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpib3JkZXItaW5rXC8yMDpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluaykyMCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItaW5rXC9cWzBcLjg4XF06aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJvcmRlci1pbmtcL1xbMFwuODhcXTpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluayk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy1pbmtcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy1pbmtcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6YmctaW5rXC8xMjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLWlua1wvMTI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTEyJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLWlua1wvMTg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy1pbmtcLzE4OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluaykxOCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy1pbmtcLzIwOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6YmctaW5rXC8yMDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspMjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6YmctaW5rXC8yNTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLWlua1wvMjU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTI1JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLWlua1wvXFswXC4wNVxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6YmctaW5rXC9cWzBcLjA1XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTUlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6YmctaW5rXC9cWzBcLjA2XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy1pbmtcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspNiUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy1pbmtcL1xbMFwuMDdcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLWlua1wvXFswXC4wN1xdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluayk3LjAlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6YmctaW5rXC9cWzBcLjA5XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy1pbmtcL1xbMFwuMDlcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspOSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy1pbmtcL1xbMFwuODhcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLWlua1wvXFswXC44OFxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluayk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LWluazpob3Zlcntjb2xvcjp2YXIoLS1jb2xvci1pbmspfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtaW5rLTg1OmhvdmVye2NvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOnRleHQtaW5rLTg1OmhvdmVye2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWNvbG9yLWluayljYWxjKDEwMCUgLSAoMTAwJSAtIDg1KjElKSp2YXIoLS1zZXJ2ZS1zaW0tdGV4dC1rKSksdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDp0ZXh0LWluay05MDpob3Zlcntjb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDp0ZXh0LWluay05MDpob3Zlcntjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1jb2xvci1pbmspY2FsYygxMDAlIC0gKDEwMCUgLSA5MCoxJSkqdmFyKC0tc2VydmUtc2ltLXRleHQtaykpLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC1pbmstaW52ZXJzZTpob3Zlcntjb2xvcjp2YXIoLS1jb2xvci1pbmstaW52ZXJzZSl9fS5mb2N1c1w6Ym9yZGVyLWlua1wvMjQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXNcOmJvcmRlci1pbmtcLzI0OmZvY3Vze2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTI0JSx0cmFuc3BhcmVudCl9fS5mb2N1c1w6YmctaW5rXC9cWzBcLjA4XF06Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzXDpiZy1pbmtcL1xbMFwuMDhcXTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspOCUsdHJhbnNwYXJlbnQpfX0uZm9jdXNcOm91dGxpbmUtbm9uZTpmb2N1c3stLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9LmZvY3VzLXZpc2libGVcOmJnLWlua1wvODpmb2N1cy12aXNpYmxle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy12aXNpYmxlXDpiZy1pbmtcLzg6Zm9jdXMtdmlzaWJsZXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspOCUsdHJhbnNwYXJlbnQpfX0uZm9jdXMtdmlzaWJsZVw6b3BhY2l0eS0xMDA6Zm9jdXMtdmlzaWJsZXtvcGFjaXR5OjF9LmZvY3VzLXZpc2libGVcOlxbb3V0bGluZVw6MVwuNXB4X3NvbGlkX2NvbG9yLW1peFwoaW5fc3JnYlwsdmFyXCgtLXNlcnZlLXNpbS10aW50XClfNTVcJVwsdHJhbnNwYXJlbnRcKVxdOmZvY3VzLXZpc2libGV7b3V0bGluZToxLjVweCBzb2xpZCB2YXIoLS1zZXJ2ZS1zaW0tdGludCl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZm9jdXMtdmlzaWJsZVw6XFtvdXRsaW5lXDoxXC41cHhfc29saWRfY29sb3ItbWl4XChpbl9zcmdiXCx2YXJcKC0tc2VydmUtc2ltLXRpbnRcKV81NVwlXCx0cmFuc3BhcmVudFwpXF06Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjEuNXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLHZhcigtLXNlcnZlLXNpbS10aW50KTU1JSx0cmFuc3BhcmVudCl9fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lOmZvY3VzLXZpc2libGV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjFweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS0yOmZvY3VzLXZpc2libGV7b3V0bGluZS1zdHlsZTp2YXIoLS10dy1vdXRsaW5lLXN0eWxlKTtvdXRsaW5lLXdpZHRoOjJweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1vZmZzZXQtMTpmb2N1cy12aXNpYmxle291dGxpbmUtb2Zmc2V0OjFweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1vZmZzZXQtMjpmb2N1cy12aXNpYmxle291dGxpbmUtb2Zmc2V0OjJweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1vZmZzZXQtNDpmb2N1cy12aXNpYmxle291dGxpbmUtb2Zmc2V0OjRweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1pbmtcLzYwOmZvY3VzLXZpc2libGV7b3V0bGluZS1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXZpc2libGVcOm91dGxpbmUtaW5rXC82MDpmb2N1cy12aXNpYmxle291dGxpbmUtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluayk2MCUsdHJhbnNwYXJlbnQpfX0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS10aW50OmZvY3VzLXZpc2libGV7b3V0bGluZS1jb2xvcjp2YXIoLS1jb2xvci10aW50KX0uYWN0aXZlXDpzY2FsZS1cWzBcLjk3XF06YWN0aXZle3NjYWxlOi45N31AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci1pbmtcLzE4OmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci1pbmtcLzE4OmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspMTglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLWlua1wvMjA6ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLWlua1wvMjA6ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluaykyMCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItaW5rXC9cWzBcLjg4XF06ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tY29sb3ItaW5rKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLWlua1wvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1pbmspODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6YmctaW5rXC9cWzBcLjA2XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLWlua1wvXFswXC4wNlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTYlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6YmctaW5rXC9cWzBcLjA5XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLWlua1wvXFswXC4wOVxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTklLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6YmctaW5rXC9cWzBcLjIyXF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLWlua1wvXFswXC4yMlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTIyJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLWlua1wvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1pbmspfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy1pbmtcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLWluayk4OCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy1wYW5lbC1ob3ZlcjplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtaG92ZXIpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOnRleHQtaW5rOmVuYWJsZWQ6aG92ZXJ7Y29sb3I6dmFyKC0tY29sb3ItaW5rKX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDp0ZXh0LWluay1pbnZlcnNlOmVuYWJsZWQ6aG92ZXJ7Y29sb3I6dmFyKC0tY29sb3ItaW5rLWludmVyc2UpfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJyaWdodG5lc3MtXFsxXC4wOFxdOmVuYWJsZWQ6aG92ZXJ7LS10dy1icmlnaHRuZXNzOmJyaWdodG5lc3MoMS4wOCk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfX0uZGlzYWJsZWRcOmN1cnNvci1kZWZhdWx0OmRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5kaXNhYmxlZFw6Y3Vyc29yLW5vdC1hbGxvd2VkOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH0uZGlzYWJsZWRcOnRleHQtaW5rLTQwOmRpc2FibGVke2NvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGlzYWJsZWRcOnRleHQtaW5rLTQwOmRpc2FibGVke2NvbG9yOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLWNvbG9yLWluayljYWxjKDEwMCUgLSAoMTAwJSAtIDQwKjElKSp2YXIoLS1zZXJ2ZS1zaW0tdGV4dC1rKSksdHJhbnNwYXJlbnQpfX0uZGlzYWJsZWRcOm9wYWNpdHktNDA6ZGlzYWJsZWR7b3BhY2l0eTouNH0uZGlzYWJsZWRcOm9wYWNpdHktNTA6ZGlzYWJsZWR7b3BhY2l0eTouNX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsubW90aW9uLXJlZHVjZVw6dHJhbnNpdGlvbi1ub25le3RyYW5zaXRpb24tcHJvcGVydHk6bm9uZX19QG1lZGlhIChtYXgtd2lkdGg6ODk5Ljk5OXB4KXsubWF4LVxbOTAwcHhcXVw6aGlkZGVue2Rpc3BsYXk6bm9uZX19LlxbXCZcOlw6LW1vei1yYW5nZS1wcm9ncmVzc1xdXDpoLVxbNHB4XF06Oi1tb3otcmFuZ2UtcHJvZ3Jlc3N7aGVpZ2h0OjRweH0uXFtcJlw6XDotbW96LXJhbmdlLXByb2dyZXNzXF1cOnJvdW5kZWQtZnVsbDo6LW1vei1yYW5nZS1wcm9ncmVzc3tib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotbW96LXJhbmdlLXByb2dyZXNzXF1cOmJnLVxbdmFyXCgtLXNsaWRlci1maWxsLWNvbG9yXClcXTo6LW1vei1yYW5nZS1wcm9ncmVzc3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXNsaWRlci1maWxsLWNvbG9yKX0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOnNpemUtXFsxM3B4XF06Oi1tb3otcmFuZ2UtdGh1bWJ7d2lkdGg6MTNweDtoZWlnaHQ6MTNweH0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOnJvdW5kZWQtZnVsbDo6LW1vei1yYW5nZS10aHVtYntib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJvcmRlci1ub25lOjotbW96LXJhbmdlLXRodW1iey0tdHctYm9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXN0eWxlOm5vbmV9LlxbXCZcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpiZy13aGl0ZTo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOmgtXFs0cHhcXTo6LW1vei1yYW5nZS10cmFja3toZWlnaHQ6NHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6cm91bmRlZC1mdWxsOjotbW96LXJhbmdlLXRyYWNre2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6YmctaW5rXC8yMjo6LW1vei1yYW5nZS10cmFja3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWluayl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXFtcJlw6XDotbW96LXJhbmdlLXRyYWNrXF1cOmJnLWlua1wvMjI6Oi1tb3otcmFuZ2UtdHJhY2t7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3ItaW5rKTIyJSx0cmFuc3BhcmVudCl9fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOmgtXFs0cHhcXTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7aGVpZ2h0OjRweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja1xdXDpyb3VuZGVkLWZ1bGw6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOlxbYmFja2dyb3VuZFw6bGluZWFyLWdyYWRpZW50XCh0b19yaWdodFwsdmFyXCgtLXNsaWRlci1maWxsLWNvbG9yXClfdmFyXCgtLXNsaWRlci1maWxsXClcLGNvbG9yLW1peFwoaW5fc3JnYlwsdmFyXCgtLXNlcnZlLXNpbS1pbmtcKV8yMlwlXCx0cmFuc3BhcmVudFwpX3ZhclwoLS1zbGlkZXItZmlsbFwpXClcXTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tc2xpZGVyLWZpbGwtY29sb3IpdmFyKC0tc2xpZGVyLWZpbGwpLHZhcigtLXNlcnZlLXNpbS1pbmspdmFyKC0tc2xpZGVyLWZpbGwpKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOlxbYmFja2dyb3VuZFw6bGluZWFyLWdyYWRpZW50XCh0b19yaWdodFwsdmFyXCgtLXNsaWRlci1maWxsLWNvbG9yXClfdmFyXCgtLXNsaWRlci1maWxsXClcLGNvbG9yLW1peFwoaW5fc3JnYlwsdmFyXCgtLXNlcnZlLXNpbS1pbmtcKV8yMlwlXCx0cmFuc3BhcmVudFwpX3ZhclwoLS1zbGlkZXItZmlsbFwpXClcXTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tc2xpZGVyLWZpbGwtY29sb3IpdmFyKC0tc2xpZGVyLWZpbGwpLGNvbG9yLW1peChpbiBzcmdiLHZhcigtLXNlcnZlLXNpbS1pbmspMjIlLHRyYW5zcGFyZW50KXZhcigtLXNsaWRlci1maWxsKSl9fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOi1tdC1cWzRcLjVweFxdOjotd2Via2l0LXNsaWRlci10aHVtYnttYXJnaW4tdG9wOi00LjVweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpzaXplLVxbMTNweFxdOjotd2Via2l0LXNsaWRlci10aHVtYnt3aWR0aDoxM3B4O2hlaWdodDoxM3B4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmFwcGVhcmFuY2Utbm9uZTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YXBwZWFyYW5jZTpub25lfS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOnJvdW5kZWQtZnVsbDo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6Ymctd2hpdGU6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOnNoYWRvdy1cWzBfMXB4XzNweF9yZ2JhXCgwXCwwXCwwXCwwXC40NVwpXF06Oi13ZWJraXQtc2xpZGVyLXRodW1iey0tdHctc2hhZG93OjAgMXB4IDNweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDczKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LlxbXCZcOmRpc2FibGVkXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjgwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbXCZcOmRpc2FibGVkXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1ie2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fS5cW1wmXDpkaXNhYmxlZFw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjgwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlxbXCZcOmRpc2FibGVkXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19fTpyb290ey0tYnVuY3NzLWxpZ2h0OiA7LS1idW5jc3MtZGFyazppbml0aWFsO2NvbG9yLXNjaGVtZTpkYXJrOy0tc2VydmUtc2ltLWluazojZmZmOy0tc2VydmUtc2ltLWluay1pbnZlcnNlOiMwYTBhMGM7LS1zZXJ2ZS1zaW0tdGV4dC1rOjE7LS1zZXJ2ZS1zaW0tcGFnZTojMGEwYTBhOy0tc2VydmUtc2ltLXBhbmVsOiMxYzFjMWU7LS1zZXJ2ZS1zaW0tcGFuZWwtaG92ZXI6IzJhMmEyYzstLXNlcnZlLXNpbS1wYW5lbC10cmFuc3BhcmVudDojMWMxYzFlMDA7LS1zZXJ2ZS1zaW0tcGFuZWwtYmc6IzE4MTgxODstLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc2x1Y2VudDojMTgxODE4Yzc7LS1zZXJ2ZS1zaW0tcGFuZWwtYmctdHJhbnNwYXJlbnQ6IzE4MTgxODAwOy0tc2VydmUtc2ltLXBhbmVsLW92ZXJsYXk6IzE4MTgxOGE2Oy0tc2VydmUtc2ltLXBhbmVsLWRlZXA6IzExMTExMzstLXNlcnZlLXNpbS1pY29uOiM4ZThlOTM7LS1zZXJ2ZS1zaW0tdGludDojMGE4NGZmOy0tc2VydmUtc2ltLWFjY2VudDojYTViNGZjOy0tc2VydmUtc2ltLXN1Y2Nlc3M6IzRhZGU4MDstLXNlcnZlLXNpbS1zdWNjZXNzLWVtZXJhbGQ6IzM0ZDM5OTstLXNlcnZlLXNpbS1kYW5nZXI6I2Y4NzE3MTstLXNlcnZlLXNpbS1kYW5nZXItc29mdDojZmNhNWE1Oy0tc2VydmUtc2ltLXdhcm5pbmc6I2ZiYmYyNDstLXNlcnZlLXNpbS13YXJuaW5nLXNvZnQ6I2ZjZDM0ZDstLXNlcnZlLXNpbS1jYXV0aW9uOiNlOWExM2I7LS1zZXJ2ZS1zaW0tb24tc3VjY2VzczojMDYyMDE4Oy0tc2VydmUtc2ltLWNvbnRyb2wtc2VsZWN0ZWQ6I2ZmZmZmZjI5Oy0tc2VydmUtc2ltLXJlc2l6ZS1vdXRsaW5lOiMzNDM2M2I7LS1zZXJ2ZS1zaW0tc3lzdGVtLWljb24tYm9yZGVyOiMzYjVmOTk7LS1zZXJ2ZS1zaW0tc3lzdGVtLWljb24tZnJvbTojMjUzYTVmOy0tc2VydmUtc2ltLXN5c3RlbS1pY29uLXRvOiMxNjIxMzI7LS1zZXJ2ZS1zaW0tc3lzdGVtLWljb24tZmc6I2M4ZDdmZjstLXNlcnZlLXNpbS1yZXNpemUtaWRsZTojNjg2ZTc4Oy0tc2VydmUtc2ltLWdyYWJiZXI6IzZlNmU3MjstLXNlcnZlLXNpbS1ncmFiYmVyLWFjdGl2ZTojOWE5YTllOy0tc2VydmUtc2ltLXJlc2l6ZS1ob3ZlcjojYjdiYmMyOy0tc2VydmUtc2ltLXJlc2l6ZS1kcmFnOiNmNGY2ZmE7LS1zZXJ2ZS1zaW0tbGl2ZS1pY29uOiMyMDJiM2E7LS1zZXJ2ZS1zaW0tbGl2ZS1pY29uLWFjdGl2ZTojMjYzNjRjOy0tc2VydmUtc2ltLWxpdmUtaWNvbi1mZzojZDJlN2ZmOy0tc2VydmUtc2ltLXNoYWRvdy1wYW5lbDowIDEycHggNDBweCAjMDAwMDAwOGM7LS1zZXJ2ZS1zaW0tc2hhZG93LXBvcG92ZXI6MCA4cHggMjRweCAjMDAwMDAwNzN9OnJvb3RbZGF0YS10aGVtZT1saWdodF17LS1idW5jc3MtbGlnaHQ6aW5pdGlhbDstLWJ1bmNzcy1kYXJrOiA7Y29sb3Itc2NoZW1lOmxpZ2h0Oy0tc2VydmUtc2ltLWluazojMDAwOy0tc2VydmUtc2ltLWluay1pbnZlcnNlOiNmZmY7LS1zZXJ2ZS1zaW0tdGV4dC1rOi43MjstLXNlcnZlLXNpbS1wYWdlOiNlY2VjZjA7LS1zZXJ2ZS1zaW0tcGFuZWw6I2ZmZjstLXNlcnZlLXNpbS1wYW5lbC1ob3ZlcjojZjJmMmY1Oy0tc2VydmUtc2ltLXBhbmVsLXRyYW5zcGFyZW50OiNmZmYwOy0tc2VydmUtc2ltLXBhbmVsLWJnOiNmNmY2ZjhlYjstLXNlcnZlLXNpbS1wYW5lbC1iZy10cmFuc2x1Y2VudDojZjZmNmY4Y2M7LS1zZXJ2ZS1zaW0tcGFuZWwtYmctdHJhbnNwYXJlbnQ6I2Y2ZjZmODAwOy0tc2VydmUtc2ltLXBhbmVsLW92ZXJsYXk6I2ZmZmZmZmM3Oy0tc2VydmUtc2ltLXBhbmVsLWRlZXA6I2YyZjJmNTstLXNlcnZlLXNpbS1pY29uOiM2ZTZlNzM7LS1zZXJ2ZS1zaW0tdGludDojMDA3YWZmOy0tc2VydmUtc2ltLWFjY2VudDojNGY0NmU1Oy0tc2VydmUtc2ltLXN1Y2Nlc3M6IzE1ODAzZDstLXNlcnZlLXNpbS1zdWNjZXNzLWVtZXJhbGQ6IzA2NWY0NjstLXNlcnZlLXNpbS1kYW5nZXI6I2M4MWUxZTstLXNlcnZlLXNpbS1kYW5nZXItc29mdDojYjkxYzFjOy0tc2VydmUtc2ltLXdhcm5pbmc6I2I0NTMwOTstLXNlcnZlLXNpbS13YXJuaW5nLXNvZnQ6IzkyNDAwZTstLXNlcnZlLXNpbS1jYXV0aW9uOiNjMjQxMGM7LS1zZXJ2ZS1zaW0tb24tc3VjY2VzczojZmZmOy0tc2VydmUtc2ltLWNvbnRyb2wtc2VsZWN0ZWQ6I2ZmZjstLXNlcnZlLXNpbS1yZXNpemUtb3V0bGluZTojZmZmOy0tc2VydmUtc2ltLXN5c3RlbS1pY29uLWJvcmRlcjojYjljZmYwOy0tc2VydmUtc2ltLXN5c3RlbS1pY29uLWZyb206I2VhZjJmZjstLXNlcnZlLXNpbS1zeXN0ZW0taWNvbi10bzojZDZlNWZiOy0tc2VydmUtc2ltLXN5c3RlbS1pY29uLWZnOiMxZDRmOTk7LS1zZXJ2ZS1zaW0tcmVzaXplLWlkbGU6Izc2NzY3ZTstLXNlcnZlLXNpbS1ncmFiYmVyOiNhMWExYTY7LS1zZXJ2ZS1zaW0tZ3JhYmJlci1hY3RpdmU6IzZlNmU3MzstLXNlcnZlLXNpbS1yZXNpemUtaG92ZXI6IzVmNjA2ODstLXNlcnZlLXNpbS1yZXNpemUtZHJhZzojMmMyYzMwOy0tc2VydmUtc2ltLWxpdmUtaWNvbjojZTNlZWZjOy0tc2VydmUtc2ltLWxpdmUtaWNvbi1hY3RpdmU6I2QyZTRmYjstLXNlcnZlLXNpbS1saXZlLWljb24tZmc6IzBiNGY5ZTstLXNlcnZlLXNpbS1zaGFkb3ctcGFuZWw6MCAwIDAgLjVweCAjMDAwMDAwMGEsMCAxMnB4IDQwcHggIzAwMDAwMDFmOy0tc2VydmUtc2ltLXNoYWRvdy1wb3BvdmVyOjAgMCAwIC41cHggIzAwMDAwMDBhLDAgOHB4IDI0cHggIzAwMDAwMDI0fWh0bWx7YmFja2dyb3VuZDp2YXIoLS1zZXJ2ZS1zaW0tcGFnZSl9QHN1cHBvcnRzIChpbnRlcnBvbGF0ZS1zaXplOiBhbGxvdy1rZXl3b3Jkcyl7OnJvb3R7aW50ZXJwb2xhdGUtc2l6ZTphbGxvdy1rZXl3b3Jkc319ZGV0YWlscy5sZW0tc2VjdGlvbjo6ZGV0YWlscy1jb250ZW50e292ZXJmbG93OmNsaXA7dHJhbnNpdGlvbjpoZWlnaHQgLjIycyBlYXNlLGNvbnRlbnQtdmlzaWJpbGl0eSAuMjJzIGFsbG93LWRpc2NyZXRlO2hlaWdodDowfWRldGFpbHMubGVtLXNlY3Rpb25bb3Blbl06OmRldGFpbHMtY29udGVudHtoZWlnaHQ6YXV0b31kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnl7bGlzdC1zdHlsZTpub25lfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5OmhvdmVye2NvbG9yOnZhcigtLXNlcnZlLXNpbS1pbmspfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeTpob3ZlciAubGVtLWNoZXZyb257Y29sb3I6dmFyKC0tc2VydmUtc2ltLWluaykhaW1wb3J0YW50fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5OmhvdmVyIC5sZW0tY2hldnJvbntjb2xvcjpjb2xvci1taXgoaW4gc3JnYix2YXIoLS1zZXJ2ZS1zaW0taW5rKTg1JSx0cmFuc3BhcmVudCkhaW1wb3J0YW50fX0ubGVtLWNoZXZyb257dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjE2cyxjb2xvciAuMTJzfUBjb250YWluZXIgKHdpZHRoPD0yMTBweCl7W2RhdGEtbG9jYXRpb24tc3RhdHVzLXRvdGFsXXtkaXNwbGF5Om5vbmV9fUBrZXlmcmFtZXMgZ3JpZC1zcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZXswJXt0cmFuc2Zvcm06dHJhbnNsYXRlKC0xMDAlKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlKDI1MCUpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1wb3AtaW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEycHgpc2NhbGUoLjk2KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMClzY2FsZSgxKX19QGtleWZyYW1lcyBzZXJ2ZS1zaW0tdG9hc3QtcG9wLW91dHswJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMClzY2FsZSgxKX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoOHB4KXNjYWxlKC45Nil9fS5zZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZXthbmltYXRpb246c2VydmUtc2ltLXRvYXN0LWluZGV0ZXJtaW5hdGUgMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZX1bZGF0YS1zb25uZXItdG9hc3Rlcl0uc2VydmUtc2ltLXRvYXN0ZXIgW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXXtib3gtc2hhZG93OnZhcigtLXNlcnZlLXNpbS1zaGFkb3ctcG9wb3Zlcik7Z2FwOjhweDtwYWRkaW5nOjhweCAxMnB4O2ZvbnQtZmFtaWx5OnVpLW1vbm9zcGFjZSxTRk1vbm8tUmVndWxhcixNZW5sbyxtb25vc3BhY2U7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MS40fVtkYXRhLXNvbm5lci10b2FzdGVyXS5zZXJ2ZS1zaW0tdG9hc3RlciBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25de3dpZHRoOjZweDtoZWlnaHQ6NnB4O21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjB9W2RhdGEtc29ubmVyLXRvYXN0ZXJdLnNlcnZlLXNpbS10b2FzdGVyIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY29udGVudF17bWluLXdpZHRoOjB9W2RhdGEtc29ubmVyLXRvYXN0ZXJdLnNlcnZlLXNpbS10b2FzdGVyIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtdGl0bGVde292ZXJmbG93LXdyYXA6YnJlYWstd29yZDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fS5ncmlkLXNodXRkb3duLWJ0bntvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnMsYmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LmdyaWQtdGlsZTpob3ZlciAuZ3JpZC1zaHV0ZG93bi1idG57b3BhY2l0eToxfS5ncmlkLXNodXRkb3duLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKXtiYWNrZ3JvdW5kOnZhcigtLXNlcnZlLXNpbS1kYW5nZXIpO2NvbG9yOnZhcigtLXNlcnZlLXNpbS1pbmspO2JvcmRlci1jb2xvcjp2YXIoLS1zZXJ2ZS1zaW0tZGFuZ2VyKX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ncmlkLXNodXRkb3duLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKXtiYWNrZ3JvdW5kOmNvbG9yLW1peChpbiBzcmdiLHZhcigtLXNlcnZlLXNpbS1kYW5nZXIpMjIlLHRyYW5zcGFyZW50KX19LmdyaWQtdGlsZTpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tc2VydmUtc2ltLWluaykhaW1wb3J0YW50fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmdyaWQtdGlsZTpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsdmFyKC0tc2VydmUtc2ltLWluaykzMCUsdHJhbnNwYXJlbnQpIWltcG9ydGFudH19LmR1by1oYXJkd2FyZS1hbmNob3J7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDt0cmFuc2Zvcm0tb3JpZ2luOjAgMH0uZHVvLWhhcmR3YXJlLXJlZ2lvbntwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmZsZXg7Y3Vyc29yOmRlZmF1bHQ7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczogZmxleC1zdGFydDt3aWR0aDo2MHB4O2hlaWdodDo3OHB4O3RvcDotNjhweDtsZWZ0Oi0zMHB4fS5kdW8taGFyZHdhcmUtcmVnaW9uPmJ1dHRvbntvcGFjaXR5OjA7cG9pbnRlci1ldmVudHM6bm9uZX0uZHVvLWhhcmR3YXJlLXJlZ2lvbjpob3Zlcj5idXR0b24sLmR1by1oYXJkd2FyZS1yZWdpb246Zm9jdXMtd2l0aGluPmJ1dHRvbntvcGFjaXR5OjE7cG9pbnRlci1ldmVudHM6YXV0b31AbWVkaWEgKGhvdmVyOm5vbmUpey5kdW8taGFyZHdhcmUtcmVnaW9uPmJ1dHRvbntvcGFjaXR5OjE7cG9pbnRlci1ldmVudHM6YXV0b319QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOnJlZHVjZSl7LmR1by1oYXJkd2FyZS1yZWdpb24+YnV0dG9ue3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9fUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXRyYW5zbGF0ZS16e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS14e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcm90YXRlLXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yb3RhdGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNrZXcteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJvcmRlci1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctbGVhZGluZ3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWZvbnQtd2VpZ2h0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctdHJhY2tpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1vcmRpbmFse3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2xhc2hlZC16ZXJve3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctbnVtZXJpYy1maWd1cmV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLXNwYWNpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1udW1lcmljLWZyYWN0aW9ue3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93LWNvbG9ye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaW5zZXQtc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctcmluZy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJpbmctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctaW5zZXQtcmluZy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXJpbmctc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctcmluZy1pbnNldHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJpbmctb2Zmc2V0LXdpZHRoe3N5bnRheDoiPGxlbmd0aD4iO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6I2ZmZn1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjAgMCAjMDAwMH1AcHJvcGVydHkgLS10dy1vdXRsaW5lLXN0eWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTpzb2xpZH1AcHJvcGVydHkgLS10dy1ibHVye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYnJpZ2h0bmVzc3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWNvbnRyYXN0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZ3JheXNjYWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctaHVlLXJvdGF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWludmVydHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW9wYWNpdHl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zYXR1cmF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNlcGlhe3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3d7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LWFscGhhe3N5bnRheDoiPHBlcmNlbnRhZ2U+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjEwMCV9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctc2l6ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWJsdXJ7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1icmlnaHRuZXNze3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtY29udHJhc3R7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1ncmF5c2NhbGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1odWUtcm90YXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtaW52ZXJ0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atb3BhY2l0eXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLXNhdHVyYXRle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3Atc2VwaWF7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kdXJhdGlvbntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWVhc2V7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1Aa2V5ZnJhbWVzIHNwaW57dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1AbGF5ZXIgcHJvcGVydGllc3tAc3VwcG9ydHMgKCgtd2Via2l0LWh5cGhlbnM6IG5vbmUpIGFuZCAoIG5vdCAobWFyZ2luLXRyaW06IGlubGluZSkpKSBvciAoKC1tb3otb3JpZW50OiBpbmxpbmUpIGFuZCAoIG5vdCAoY29sb3I6cmdiKGZyb20gcmVkIHIgZyBiKSkpKXsqLDpiZWZvcmUsOmFmdGVyLDo6YmFja2Ryb3B7LS10dy10cmFuc2xhdGUteDowOy0tdHctdHJhbnNsYXRlLXk6MDstLXR3LXRyYW5zbGF0ZS16OjA7LS10dy1yb3RhdGUteDppbml0aWFsOy0tdHctcm90YXRlLXk6aW5pdGlhbDstLXR3LXJvdGF0ZS16OmluaXRpYWw7LS10dy1za2V3LXg6aW5pdGlhbDstLXR3LXNrZXcteTppbml0aWFsOy0tdHctYm9yZGVyLXN0eWxlOnNvbGlkOy0tdHctbGVhZGluZzppbml0aWFsOy0tdHctZm9udC13ZWlnaHQ6aW5pdGlhbDstLXR3LXRyYWNraW5nOmluaXRpYWw7LS10dy1vcmRpbmFsOmluaXRpYWw7LS10dy1zbGFzaGVkLXplcm86aW5pdGlhbDstLXR3LW51bWVyaWMtZmlndXJlOmluaXRpYWw7LS10dy1udW1lcmljLXNwYWNpbmc6aW5pdGlhbDstLXR3LW51bWVyaWMtZnJhY3Rpb246aW5pdGlhbDstLXR3LXNoYWRvdzowIDAgIzAwMDA7LS10dy1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LXNoYWRvdy1hbHBoYToxMDAlOy0tdHctaW5zZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LWluc2V0LXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctaW5zZXQtc2hhZG93LWFscGhhOjEwMCU7LS10dy1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1pbnNldC1yaW5nLWNvbG9yOmluaXRpYWw7LS10dy1pbnNldC1yaW5nLXNoYWRvdzowIDAgIzAwMDA7LS10dy1yaW5nLWluc2V0OmluaXRpYWw7LS10dy1yaW5nLW9mZnNldC13aWR0aDowcHg7LS10dy1yaW5nLW9mZnNldC1jb2xvcjojZmZmOy0tdHctcmluZy1vZmZzZXQtc2hhZG93OjAgMCAjMDAwMDstLXR3LW91dGxpbmUtc3R5bGU6c29saWQ7LS10dy1ibHVyOmluaXRpYWw7LS10dy1icmlnaHRuZXNzOmluaXRpYWw7LS10dy1jb250cmFzdDppbml0aWFsOy0tdHctZ3JheXNjYWxlOmluaXRpYWw7LS10dy1odWUtcm90YXRlOmluaXRpYWw7LS10dy1pbnZlcnQ6aW5pdGlhbDstLXR3LW9wYWNpdHk6aW5pdGlhbDstLXR3LXNhdHVyYXRlOmluaXRpYWw7LS10dy1zZXBpYTppbml0aWFsOy0tdHctZHJvcC1zaGFkb3c6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdy1hbHBoYToxMDAlOy0tdHctZHJvcC1zaGFkb3ctc2l6ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtYmx1cjppbml0aWFsOy0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzczppbml0aWFsOy0tdHctYmFja2Ryb3AtY29udHJhc3Q6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWdyYXlzY2FsZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3AtaW52ZXJ0OmluaXRpYWw7LS10dy1iYWNrZHJvcC1vcGFjaXR5OmluaXRpYWw7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTppbml0aWFsOy0tdHctYmFja2Ryb3Atc2VwaWE6aW5pdGlhbDstLXR3LWR1cmF0aW9uOmluaXRpYWw7LS10dy1lYXNlOmluaXRpYWx9fX0KPC9zdHlsZT4KPC9oZWFkPjxib2R5Pgo8ZGl2IGlkPSJyb290Ij48L2Rpdj4KPCEtLV9fU0lNX1BSRVZJRVdfQ09ORklHX18tLT4KPHNjcmlwdCB0eXBlPSJtb2R1bGUiPnZhciB4NSx0LGg4LG40LGgwLGo4LGY4LG04LEgzLE8yLHk1LHA4LE8zLGszLEMzLHU4LE0yPXt9LFcyPVtdLGE0PS9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2ksUjU9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBEMCgkLEope2Zvcih2YXIgUSBpbiBKKSRbUV09SltRXTtyZXR1cm4gJH1mdW5jdGlvbiBNMygkKXskJiYkLnBhcmVudE5vZGUmJiQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCgkKX1mdW5jdGlvbiBsMSgkLEosUSl7dmFyIFosSyxZLHE9e307Zm9yKFkgaW4gSilZPT0ia2V5Ij9aPUpbWV06WT09InJlZiI/Sz1KW1ldOnFbWV09SltZXTtpZihhcmd1bWVudHMubGVuZ3RoPjImJihxLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz94NS5jYWxsKGFyZ3VtZW50cywyKTpRKSx0eXBlb2YgJD09ImZ1bmN0aW9uIiYmJC5kZWZhdWx0UHJvcHMhPW51bGwpZm9yKFkgaW4gJC5kZWZhdWx0UHJvcHMpcVtZXT09PXZvaWQgMCYmKHFbWV09JC5kZWZhdWx0UHJvcHNbWV0pO3JldHVybiBTNSgkLHEsWixLLG51bGwpfWZ1bmN0aW9uIFM1KCQsSixRLFosSyl7dmFyIFk9e3R5cGU6JCxwcm9wczpKLGtleTpRLHJlZjpaLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjpLPT1udWxsPysraDg6SyxfX2k6LTEsX191OjB9O3JldHVybiBLPT1udWxsJiZ0LnZub2RlIT1udWxsJiZ0LnZub2RlKFkpLFl9ZnVuY3Rpb24gajUoKXtyZXR1cm57Y3VycmVudDpudWxsfX1mdW5jdGlvbiBLMSgkKXtyZXR1cm4gJC5jaGlsZHJlbn1mdW5jdGlvbiBuMSgkLEope3RoaXMucHJvcHM9JCx0aGlzLmNvbnRleHQ9Sn1mdW5jdGlvbiBxNSgkLEope2lmKEo9PW51bGwpcmV0dXJuICQuX18/cTUoJC5fXywkLl9faSsxKTpudWxsO2Zvcih2YXIgUTtKPCQuX19rLmxlbmd0aDtKKyspaWYoKFE9JC5fX2tbSl0pIT1udWxsJiZRLl9fZSE9bnVsbClyZXR1cm4gUS5fX2U7cmV0dXJuIHR5cGVvZiAkLnR5cGU9PSJmdW5jdGlvbiI/cTUoJCk6bnVsbH1mdW5jdGlvbiBzNCgkKXtpZigkLl9fUCYmJC5fX2Qpe3ZhciBKPSQuX192LFE9Si5fX2UsWj1bXSxLPVtdLFk9RDAoe30sSik7WS5fX3Y9Si5fX3YrMSx0LnZub2RlJiZ0LnZub2RlKFkpLFczKCQuX19QLFksSiwkLl9fbiwkLl9fUC5uYW1lc3BhY2VVUkksMzImSi5fX3U/W1FdOm51bGwsWixRPT1udWxsP3E1KEopOlEsISEoMzImSi5fX3UpLEspLFkuX192PUouX192LFkuX18uX19rW1kuX19pXT1ZLGk4KFosWSxLKSxKLl9fZT1KLl9fPW51bGwsWS5fX2UhPVEmJmw4KFkpfX1mdW5jdGlvbiBsOCgkKXtpZigoJD0kLl9fKSE9bnVsbCYmJC5fX2MhPW51bGwpcmV0dXJuICQuX19lPSQuX19jLmJhc2U9bnVsbCwkLl9fay5zb21lKGZ1bmN0aW9uKEope2lmKEohPW51bGwmJkouX19lIT1udWxsKXJldHVybiAkLl9fZT0kLl9fYy5iYXNlPUouX19lfSksbDgoJCl9ZnVuY3Rpb24gRjMoJCl7KCEkLl9fZCYmKCQuX19kPSEwKSYmaDAucHVzaCgkKSYmIVAyLl9fcisrfHxqOCE9dC5kZWJvdW5jZVJlbmRlcmluZykmJigoajg9dC5kZWJvdW5jZVJlbmRlcmluZyl8fGY4KShQMil9ZnVuY3Rpb24gUDIoKXt0cnl7Zm9yKHZhciAkLEo9MTtoMC5sZW5ndGg7KWgwLmxlbmd0aD5KJiZoMC5zb3J0KG04KSwkPWgwLnNoaWZ0KCksSj1oMC5sZW5ndGgsczQoJCl9ZmluYWxseXtoMC5sZW5ndGg9UDIuX19yPTB9fWZ1bmN0aW9uIGQ4KCQsSixRLFosSyxZLHEsVixHLEIsTil7dmFyIHosVSxILEYsTCxrLEMsTz1aJiZaLl9fa3x8VzIseT1KLmxlbmd0aDtmb3IoRz10NChRLEosTyxHLHkpLHo9MDt6PHk7eisrKShIPVEuX19rW3pdKSE9bnVsbCYmKFU9SC5fX2khPS0xJiZPW0guX19pXXx8TTIsSC5fX2k9eixrPVczKCQsSCxVLEssWSxxLFYsRyxCLE4pLEY9SC5fX2UsSC5yZWYmJlUucmVmIT1ILnJlZiYmKFUucmVmJiZQMyhVLnJlZixudWxsLEgpLE4ucHVzaChILnJlZixILl9fY3x8RixIKSksTD09bnVsbCYmRiE9bnVsbCYmKEw9RiksKEM9ISEoNCZILl9fdSkpfHxVLl9faz09PUguX19rPyhHPWM4KEgsRywkLEMpLEMmJlUuX19lJiYoVS5fX2U9bnVsbCkpOnR5cGVvZiBILnR5cGU9PSJmdW5jdGlvbiImJmshPT12b2lkIDA/Rz1rOkYmJihHPUYubmV4dFNpYmxpbmcpLEguX191Jj0tNyk7cmV0dXJuIFEuX19lPUwsR31mdW5jdGlvbiB0NCgkLEosUSxaLEspe3ZhciBZLHEsVixHLEIsTj1RLmxlbmd0aCx6PU4sVT0wO2ZvcigkLl9faz1BcnJheShLKSxZPTA7WTxLO1krKykocT1KW1ldKSE9bnVsbCYmdHlwZW9mIHEhPSJib29sZWFuIiYmdHlwZW9mIHEhPSJmdW5jdGlvbiI/KHR5cGVvZiBxPT0ic3RyaW5nInx8dHlwZW9mIHE9PSJudW1iZXIifHx0eXBlb2YgcT09ImJpZ2ludCJ8fHEuY29uc3RydWN0b3I9PVN0cmluZz9xPSQuX19rW1ldPVM1KG51bGwscSxudWxsLG51bGwsbnVsbCk6UjUocSk/cT0kLl9fa1tZXT1TNShLMSx7Y2hpbGRyZW46cX0sbnVsbCxudWxsLG51bGwpOnEuY29uc3RydWN0b3I9PT12b2lkIDAmJnEuX19iPjA/cT0kLl9fa1tZXT1TNShxLnR5cGUscS5wcm9wcyxxLmtleSxxLnJlZj9xLnJlZjpudWxsLHEuX192KTokLl9fa1tZXT1xLEc9WStVLHEuX189JCxxLl9fYj0kLl9fYisxLFY9bnVsbCwoQj1xLl9faT1lNChxLFEsRyx6KSkhPS0xJiYoei0tLChWPVFbQl0pJiYoVi5fX3V8PTIpKSxWPT1udWxsfHxWLl9fdj09bnVsbD8oQj09LTEmJihLPk4/VS0tOks8TiYmVSsrKSx0eXBlb2YgcS50eXBlIT0iZnVuY3Rpb24iJiYocS5fX3V8PTQpKTpCIT1HJiYoQj09Ry0xP1UtLTpCPT1HKzE/VSsrOihCPkc/VS0tOlUrKyxxLl9fdXw9NCkpKTokLl9fa1tZXT1udWxsO2lmKHopZm9yKFk9MDtZPE47WSsrKShWPVFbWV0pIT1udWxsJiYoMiZWLl9fdSk9PTAmJihWLl9fZT09WiYmKFo9cTUoVikpLHI4KFYsVikpO3JldHVybiBafWZ1bmN0aW9uIGM4KCQsSixRLFope3ZhciBLLFk7aWYodHlwZW9mICQudHlwZT09ImZ1bmN0aW9uIil7Zm9yKEs9JC5fX2ssWT0wO0smJlk8Sy5sZW5ndGg7WSsrKUtbWV0mJihLW1ldLl9fPSQsSj1jOChLW1ldLEosUSxaKSk7cmV0dXJuIEp9JC5fX2UhPUomJihaJiYoSiYmJC50eXBlJiYhSi5wYXJlbnROb2RlJiYoSj1xNSgkKSksUS5pbnNlcnRCZWZvcmUoJC5fX2UsSnx8bnVsbCkpLEo9JC5fX2UpO2RvIEo9SiYmSi5uZXh0U2libGluZzt3aGlsZShKIT1udWxsJiZKLm5vZGVUeXBlPT04KTtyZXR1cm4gSn1mdW5jdGlvbiBLMCgkLEope3JldHVybiBKPUp8fFtdLCQ9PW51bGx8fHR5cGVvZiAkPT0iYm9vbGVhbiJ8fChSNSgkKT8kLnNvbWUoZnVuY3Rpb24oUSl7SzAoUSxKKX0pOkoucHVzaCgkKSksSn1mdW5jdGlvbiBlNCgkLEosUSxaKXt2YXIgSyxZLHEsVj0kLmtleSxHPSQudHlwZSxCPUpbUV0sTj1CIT1udWxsJiYoMiZCLl9fdSk9PTA7aWYoQj09PW51bGwmJlY9PW51bGx8fE4mJlY9PUIua2V5JiZHPT1CLnR5cGUpcmV0dXJuIFE7aWYoWj4oTj8xOjApKXtmb3IoSz1RLTEsWT1RKzE7Sz49MHx8WTxKLmxlbmd0aDspaWYoKEI9SltxPUs+PTA/Sy0tOlkrK10pIT1udWxsJiYoMiZCLl9fdSk9PTAmJlY9PUIua2V5JiZHPT1CLnR5cGUpcmV0dXJuIHF9cmV0dXJuLTF9ZnVuY3Rpb24gdjgoJCxKLFEpe0pbMF09PSItIj8kLnNldFByb3BlcnR5KEosUT09bnVsbD8iIjpRKTokW0pdPVE9PW51bGw/IiI6dHlwZW9mIFEhPSJudW1iZXIifHxhNC50ZXN0KEopP1E6USsicHgifWZ1bmN0aW9uIEEyKCQsSixRLFosSyl7dmFyIFkscTskOmlmKEo9PSJzdHlsZSIpaWYodHlwZW9mIFE9PSJzdHJpbmciKSQuc3R5bGUuY3NzVGV4dD1RO2Vsc2V7aWYodHlwZW9mIFo9PSJzdHJpbmciJiYoJC5zdHlsZS5jc3NUZXh0PVo9IiIpLFopZm9yKEogaW4gWilRJiZKIGluIFF8fHY4KCQuc3R5bGUsSiwiIik7aWYoUSlmb3IoSiBpbiBRKVomJlFbSl09PVpbSl18fHY4KCQuc3R5bGUsSixRW0pdKX1lbHNlIGlmKEpbMF09PSJvIiYmSlsxXT09Im4iKVk9SiE9KEo9Si5yZXBsYWNlKHA4LCIkMSIpKSxxPUoudG9Mb3dlckNhc2UoKSxKPXEgaW4gJHx8Sj09Im9uRm9jdXNPdXQifHxKPT0ib25Gb2N1c0luIj9xLnNsaWNlKDIpOkouc2xpY2UoMiksJC5sfHwoJC5sPXt9KSwkLmxbSitZXT1RLFE/Wj9RW3k1XT1aW3k1XTooUVt5NV09TzMsJC5hZGRFdmVudExpc3RlbmVyKEosWT9DMzprMyxZKSk6JC5yZW1vdmVFdmVudExpc3RlbmVyKEosWT9DMzprMyxZKTtlbHNle2lmKEs9PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpSj1KLnJlcGxhY2UoL3hsaW5rKEh8OmgpLywiaCIpLnJlcGxhY2UoL3NOYW1lJC8sInMiKTtlbHNlIGlmKEohPSJ3aWR0aCImJkohPSJoZWlnaHQiJiZKIT0iaHJlZiImJkohPSJsaXN0IiYmSiE9ImZvcm0iJiZKIT0idGFiSW5kZXgiJiZKIT0iZG93bmxvYWQiJiZKIT0icm93U3BhbiImJkohPSJjb2xTcGFuIiYmSiE9InJvbGUiJiZKIT0icG9wb3ZlciImJkogaW4gJCl0cnl7JFtKXT1RPT1udWxsPyIiOlE7YnJlYWsgJH1jYXRjaChWKXt9dHlwZW9mIFE9PSJmdW5jdGlvbiJ8fChRPT1udWxsfHxRPT09ITEmJkpbNF0hPSItIj8kLnJlbW92ZUF0dHJpYnV0ZShKKTokLnNldEF0dHJpYnV0ZShKLEo9PSJwb3BvdmVyIiYmUT09MT8iIjpRKSl9fWZ1bmN0aW9uIGc4KCQpe3JldHVybiBmdW5jdGlvbihKKXtpZih0aGlzLmwpe3ZhciBRPXRoaXMubFtKLnR5cGUrJF07aWYoSltPMl09PW51bGwpSltPMl09TzMrKztlbHNlIGlmKEpbTzJdPFFbeTVdKXJldHVybjtyZXR1cm4gUSh0LmV2ZW50P3QuZXZlbnQoSik6Sil9fX1mdW5jdGlvbiBXMygkLEosUSxaLEssWSxxLFYsRyxCKXt2YXIgTix6LFUsSCxGLEwsayxDLE8seSxFLHcsUyxRMSxnLGg9Si50eXBlO2lmKEouY29uc3RydWN0b3IhPT12b2lkIDApcmV0dXJuIG51bGw7MTI4JlEuX191JiYoRz0hISgzMiZRLl9fdSksWT1bVj1KLl9fZT1RLl9fZV0pLChOPXQuX19iKSYmTihKKTskOmlmKHR5cGVvZiBoPT0iZnVuY3Rpb24iKXRyeXtpZihDPUoucHJvcHMsTz1oLnByb3RvdHlwZSYmaC5wcm90b3R5cGUucmVuZGVyLHk9KE49aC5jb250ZXh0VHlwZSkmJlpbTi5fX2NdLEU9Tj95P3kucHJvcHMudmFsdWU6Ti5fXzpaLFEuX19jP2s9KHo9Si5fX2M9US5fX2MpLl9fPXouX19FOihPP0ouX19jPXo9bmV3IGgoQyxFKTooSi5fX2M9ej1uZXcgbjEoQyxFKSx6LmNvbnN0cnVjdG9yPWgsei5yZW5kZXI9SiQpLHkmJnkuc3ViKHopLHouc3RhdGV8fCh6LnN0YXRlPXt9KSx6Ll9fbj1aLFU9ei5fX2Q9ITAsei5fX2g9W10sei5fc2I9W10pLE8mJnouX19zPT1udWxsJiYoei5fX3M9ei5zdGF0ZSksTyYmaC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMhPW51bGwmJih6Ll9fcz09ei5zdGF0ZSYmKHouX19zPUQwKHt9LHouX19zKSksRDAoei5fX3MsaC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoQyx6Ll9fcykpKSxIPXoucHJvcHMsRj16LnN0YXRlLHouX192PUosVSlPJiZoLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09bnVsbCYmei5jb21wb25lbnRXaWxsTW91bnQhPW51bGwmJnouY29tcG9uZW50V2lsbE1vdW50KCksTyYmei5jb21wb25lbnREaWRNb3VudCE9bnVsbCYmei5fX2gucHVzaCh6LmNvbXBvbmVudERpZE1vdW50KTtlbHNle2lmKE8mJmguZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT1udWxsJiZDIT09SCYmei5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT1udWxsJiZ6LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoQyxFKSxKLl9fdj09US5fX3Z8fCF6Ll9fZSYmei5zaG91bGRDb21wb25lbnRVcGRhdGUhPW51bGwmJnouc2hvdWxkQ29tcG9uZW50VXBkYXRlKEMsei5fX3MsRSk9PT0hMSl7Si5fX3YhPVEuX192JiYoei5wcm9wcz1DLHouc3RhdGU9ei5fX3Msei5fX2Q9ITEpLEouX19lPVEuX19lLEouX19rPVEuX19rLEouX19rLnNvbWUoZnVuY3Rpb24oSSl7SSYmKEkuX189Sil9KSxXMi5wdXNoLmFwcGx5KHouX19oLHouX3NiKSx6Ll9zYj1bXSx6Ll9faC5sZW5ndGgmJnEucHVzaCh6KTticmVhayAkfXouY29tcG9uZW50V2lsbFVwZGF0ZSE9bnVsbCYmei5jb21wb25lbnRXaWxsVXBkYXRlKEMsei5fX3MsRSksTyYmei5jb21wb25lbnREaWRVcGRhdGUhPW51bGwmJnouX19oLnB1c2goZnVuY3Rpb24oKXt6LmNvbXBvbmVudERpZFVwZGF0ZShILEYsTCl9KX1pZih6LmNvbnRleHQ9RSx6LnByb3BzPUMsei5fX1A9JCx6Ll9fZT0hMSx3PXQuX19yLFM9MCxPKXouc3RhdGU9ei5fX3Msei5fX2Q9ITEsdyYmdyhKKSxOPXoucmVuZGVyKHoucHJvcHMsei5zdGF0ZSx6LmNvbnRleHQpLFcyLnB1c2guYXBwbHkoei5fX2gsei5fc2IpLHouX3NiPVtdO2Vsc2UgZG8gei5fX2Q9ITEsdyYmdyhKKSxOPXoucmVuZGVyKHoucHJvcHMsei5zdGF0ZSx6LmNvbnRleHQpLHouc3RhdGU9ei5fX3M7d2hpbGUoei5fX2QmJisrUzwyNSk7ei5zdGF0ZT16Ll9fcyx6LmdldENoaWxkQ29udGV4dCE9bnVsbCYmKFo9RDAoRDAoe30sWiksei5nZXRDaGlsZENvbnRleHQoKSkpLE8mJiFVJiZ6LmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT1udWxsJiYoTD16LmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKEgsRikpLFExPU4hPW51bGwmJk4udHlwZT09PUsxJiZOLmtleT09bnVsbD9vOChOLnByb3BzLmNoaWxkcmVuKTpOLFY9ZDgoJCxSNShRMSk/UTE6W1ExXSxKLFEsWixLLFkscSxWLEcsQiksei5iYXNlPUouX19lLEouX191Jj0tMTYxLHouX19oLmxlbmd0aCYmcS5wdXNoKHopLGsmJih6Ll9fRT16Ll9fPW51bGwpfWNhdGNoKEkpe2lmKEouX192PW51bGwsR3x8WSE9bnVsbClpZihJLnRoZW4pe2ZvcihKLl9fdXw9Rz8xNjA6MTI4O1YmJlYubm9kZVR5cGU9PTgmJlYubmV4dFNpYmxpbmc7KVY9Vi5uZXh0U2libGluZztZW1kuaW5kZXhPZihWKV09bnVsbCxKLl9fZT1WfWVsc2V7Zm9yKGc9WS5sZW5ndGg7Zy0tOylNMyhZW2ddKTtBMyhKKX1lbHNlIEouX19lPVEuX19lLEouX19rPVEuX19rLEkudGhlbnx8QTMoSik7dC5fX2UoSSxKLFEpfWVsc2UgWT09bnVsbCYmSi5fX3Y9PVEuX192PyhKLl9faz1RLl9fayxKLl9fZT1RLl9fZSk6Vj1KLl9fZT0kJChRLl9fZSxKLFEsWixLLFkscSxHLEIpO3JldHVybihOPXQuZGlmZmVkKSYmTihKKSwxMjgmSi5fX3U/dm9pZCAwOlZ9ZnVuY3Rpb24gQTMoJCl7JCYmKCQuX19jJiYoJC5fX2MuX19lPSEwKSwkLl9fayYmJC5fX2suc29tZShBMykpfWZ1bmN0aW9uIGk4KCQsSixRKXtmb3IodmFyIFo9MDtaPFEubGVuZ3RoO1orKylQMyhRW1pdLFFbKytaXSxRWysrWl0pO3QuX19jJiZ0Ll9fYyhKLCQpLCQuc29tZShmdW5jdGlvbihLKXt0cnl7JD1LLl9faCxLLl9faD1bXSwkLnNvbWUoZnVuY3Rpb24oWSl7WS5jYWxsKEspfSl9Y2F0Y2goWSl7dC5fX2UoWSxLLl9fdil9fSl9ZnVuY3Rpb24gbzgoJCl7cmV0dXJuIHR5cGVvZiAkIT0ib2JqZWN0Inx8JD09bnVsbHx8JC5fX2I+MD8kOlI1KCQpPyQubWFwKG84KTpEMCh7fSwkKX1mdW5jdGlvbiAkJCgkLEosUSxaLEssWSxxLFYsRyl7dmFyIEIsTix6LFUsSCxGLEwsaz1RLnByb3BzfHxNMixDPUoucHJvcHMsTz1KLnR5cGU7aWYoTz09InN2ZyI/Sz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciOk89PSJtYXRoIj9LPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjpLfHwoSz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLFkhPW51bGwpe2ZvcihCPTA7QjxZLmxlbmd0aDtCKyspaWYoKEg9WVtCXSkmJiJzZXRBdHRyaWJ1dGUiaW4gSD09ISFPJiYoTz9ILmxvY2FsTmFtZT09TzpILm5vZGVUeXBlPT0zKSl7JD1ILFlbQl09bnVsbDticmVha319aWYoJD09bnVsbCl7aWYoTz09bnVsbClyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoQyk7JD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoSyxPLEMuaXMmJkMpLFYmJih0Ll9fbSYmdC5fX20oSixZKSxWPSExKSxZPW51bGx9aWYoTz09bnVsbClrPT09Q3x8ViYmJC5kYXRhPT1DfHwoJC5kYXRhPUMpO2Vsc2V7aWYoWT1ZJiZ4NS5jYWxsKCQuY2hpbGROb2RlcyksIVYmJlkhPW51bGwpZm9yKGs9e30sQj0wO0I8JC5hdHRyaWJ1dGVzLmxlbmd0aDtCKyspa1soSD0kLmF0dHJpYnV0ZXNbQl0pLm5hbWVdPUgudmFsdWU7Zm9yKEIgaW4gaylIPWtbQl0sQj09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj96PUg6Qj09ImNoaWxkcmVuInx8KEIgaW4gQyl8fEI9PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIEMpfHxCPT0iY2hlY2tlZCImJigiZGVmYXVsdENoZWNrZWQiaW4gQyl8fEEyKCQsQixudWxsLEgsSyk7Zm9yKEIgaW4gQylIPUNbQl0sQj09ImNoaWxkcmVuIj9VPUg6Qj09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj9OPUg6Qj09InZhbHVlIj9GPUg6Qj09ImNoZWNrZWQiP0w9SDpWJiZ0eXBlb2YgSCE9ImZ1bmN0aW9uInx8a1tCXT09PUh8fEEyKCQsQixILGtbQl0sSyk7aWYoTilWfHx6JiYoTi5fX2h0bWw9PXouX19odG1sfHxOLl9faHRtbD09JC5pbm5lckhUTUwpfHwoJC5pbm5lckhUTUw9Ti5fX2h0bWwpLEouX19rPVtdO2Vsc2UgaWYoeiYmKCQuaW5uZXJIVE1MPSIiKSxkOChKLnR5cGU9PSJ0ZW1wbGF0ZSI/JC5jb250ZW50OiQsUjUoVSk/VTpbVV0sSixRLFosTz09ImZvcmVpZ25PYmplY3QiPyJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjpLLFkscSxZP1lbMF06US5fX2smJnE1KFEsMCksVixHKSxZIT1udWxsKWZvcihCPVkubGVuZ3RoO0ItLTspTTMoWVtCXSk7Vnx8KEI9InZhbHVlIixPPT0icHJvZ3Jlc3MiJiZGPT1udWxsPyQucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpOkYhPW51bGwmJihGIT09JFtCXXx8Tz09InByb2dyZXNzIiYmIUZ8fE89PSJvcHRpb24iJiZGIT1rW0JdKSYmQTIoJCxCLEYsa1tCXSxLKSxCPSJjaGVja2VkIixMIT1udWxsJiZMIT0kW0JdJiZBMigkLEIsTCxrW0JdLEspKX1yZXR1cm4gJH1mdW5jdGlvbiBQMygkLEosUSl7dHJ5e2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iKXt2YXIgWj10eXBlb2YgJC5fX3U9PSJmdW5jdGlvbiI7WiYmJC5fX3UoKSxaJiZKPT1udWxsfHwoJC5fX3U9JChKKSl9ZWxzZSAkLmN1cnJlbnQ9Sn1jYXRjaChLKXt0Ll9fZShLLFEpfX1mdW5jdGlvbiByOCgkLEosUSl7dmFyIFosSztpZih0LnVubW91bnQmJnQudW5tb3VudCgkKSwoWj0kLnJlZikmJihaLmN1cnJlbnQmJlouY3VycmVudCE9JC5fX2V8fFAzKFosbnVsbCxKKSksKFo9JC5fX2MpIT1udWxsKXtpZihaLmNvbXBvbmVudFdpbGxVbm1vdW50KXRyeXtaLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2goWSl7dC5fX2UoWSxKKX1aLmJhc2U9Wi5fX1A9bnVsbH1pZihaPSQuX19rKWZvcihLPTA7SzxaLmxlbmd0aDtLKyspWltLXSYmcjgoWltLXSxKLFF8fHR5cGVvZiAkLnR5cGUhPSJmdW5jdGlvbiIpO1F8fE0zKCQuX19lKSwkLl9fYz0kLl9fPSQuX19lPXZvaWQgMH1mdW5jdGlvbiBKJCgkLEosUSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoJCxRKX1mdW5jdGlvbiBSMCgkLEosUSl7dmFyIFosSyxZLHE7Sj09ZG9jdW1lbnQmJihKPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCksdC5fXyYmdC5fXygkLEopLEs9KFo9dHlwZW9mIFE9PSJmdW5jdGlvbiIpP251bGw6USYmUS5fX2t8fEouX19rLFk9W10scT1bXSxXMyhKLCQ9KCFaJiZRfHxKKS5fX2s9bDEoSzEsbnVsbCxbJF0pLEt8fE0yLE0yLEoubmFtZXNwYWNlVVJJLCFaJiZRP1tRXTpLP251bGw6Si5maXJzdENoaWxkP3g1LmNhbGwoSi5jaGlsZE5vZGVzKTpudWxsLFksIVomJlE/UTpLP0suX19lOkouZmlyc3RDaGlsZCxaLHEpLGk4KFksJCxxKX1mdW5jdGlvbiBfMigkLEope1IwKCQsSixfMil9ZnVuY3Rpb24gXzMoJCxKLFEpe3ZhciBaLEssWSxxLFY9RDAoe30sJC5wcm9wcyk7Zm9yKFkgaW4gJC50eXBlJiYkLnR5cGUuZGVmYXVsdFByb3BzJiYocT0kLnR5cGUuZGVmYXVsdFByb3BzKSxKKVk9PSJrZXkiP1o9SltZXTpZPT0icmVmIj9LPUpbWV06VltZXT1KW1ldPT09dm9pZCAwJiZxIT1udWxsP3FbWV06SltZXTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4yJiYoVi5jaGlsZHJlbj1hcmd1bWVudHMubGVuZ3RoPjM/eDUuY2FsbChhcmd1bWVudHMsMik6USksUzUoJC50eXBlLFYsWnx8JC5rZXksS3x8JC5yZWYsbnVsbCl9ZnVuY3Rpb24gTTAoJCl7ZnVuY3Rpb24gSihRKXt2YXIgWixLO3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dHx8KFo9bmV3IFNldCwoSz17fSlbSi5fX2NdPXRoaXMsdGhpcy5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gS30sdGhpcy5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe1o9bnVsbH0sdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oWSl7dGhpcy5wcm9wcy52YWx1ZSE9WS52YWx1ZSYmWi5mb3JFYWNoKGZ1bmN0aW9uKHEpe3EuX19lPSEwLEYzKHEpfSl9LHRoaXMuc3ViPWZ1bmN0aW9uKFkpe1ouYWRkKFkpO3ZhciBxPVkuY29tcG9uZW50V2lsbFVubW91bnQ7WS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe1omJlouZGVsZXRlKFkpLHEmJnEuY2FsbChZKX19KSxRLmNoaWxkcmVufXJldHVybiBKLl9fYz0iX19jQyIrdTgrKyxKLl9fPSQsSi5Qcm92aWRlcj1KLl9fbD0oSi5Db25zdW1lcj1mdW5jdGlvbihRLFope3JldHVybiBRLmNoaWxkcmVuKFopfSkuY29udGV4dFR5cGU9SixKfXg1PVcyLnNsaWNlLHQ9e19fZTpmdW5jdGlvbigkLEosUSxaKXtmb3IodmFyIEssWSxxO0o9Si5fXzspaWYoKEs9Si5fX2MpJiYhSy5fXyl0cnl7aWYoKFk9Sy5jb25zdHJ1Y3RvcikmJlkuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIT1udWxsJiYoSy5zZXRTdGF0ZShZLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigkKSkscT1LLl9fZCksSy5jb21wb25lbnREaWRDYXRjaCE9bnVsbCYmKEsuY29tcG9uZW50RGlkQ2F0Y2goJCxafHx7fSkscT1LLl9fZCkscSlyZXR1cm4gSy5fX0U9S31jYXRjaChWKXskPVZ9dGhyb3cgJH19LGg4PTAsbjQ9ZnVuY3Rpb24oJCl7cmV0dXJuICQhPW51bGwmJiQuY29uc3RydWN0b3I9PT12b2lkIDB9LG4xLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbigkLEope3ZhciBRO1E9dGhpcy5fX3MhPW51bGwmJnRoaXMuX19zIT10aGlzLnN0YXRlP3RoaXMuX19zOnRoaXMuX19zPUQwKHt9LHRoaXMuc3RhdGUpLHR5cGVvZiAkPT0iZnVuY3Rpb24iJiYoJD0kKEQwKHt9LFEpLHRoaXMucHJvcHMpKSwkJiZEMChRLCQpLCQhPW51bGwmJnRoaXMuX192JiYoSiYmdGhpcy5fc2IucHVzaChKKSxGMyh0aGlzKSl9LG4xLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbigkKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLCQmJnRoaXMuX19oLnB1c2goJCksRjModGhpcykpfSxuMS5wcm90b3R5cGUucmVuZGVyPUsxLGgwPVtdLGY4PXR5cGVvZiBQcm9taXNlPT0iZnVuY3Rpb24iP1Byb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSk6c2V0VGltZW91dCxtOD1mdW5jdGlvbigkLEope3JldHVybiAkLl9fdi5fX2ItSi5fX3YuX19ifSxQMi5fX3I9MCxIMz1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDgpLE8yPSJfX2QiK0gzLHk1PSJfX2EiK0gzLHA4PS8oUG9pbnRlckNhcHR1cmUpJHxDYXB0dXJlJC9pLE8zPTAsazM9ZzgoITEpLEMzPWc4KCEwKSx1OD0wO3ZhciBmMCx5MSxEMyxuOCxWNT0wLFo5PVtdLHYxPXQsYTg9djEuX19iLHM4PXYxLl9fcix0OD12MS5kaWZmZWQsZTg9djEuX19jLCQ5PXYxLnVubW91bnQsSjk9djEuX187ZnVuY3Rpb24gRzUoJCxKKXt2MS5fX2gmJnYxLl9faCh5MSwkLFY1fHxKKSxWNT0wO3ZhciBRPXkxLl9fSHx8KHkxLl9fSD17X186W10sX19oOltdfSk7cmV0dXJuICQ+PVEuX18ubGVuZ3RoJiZRLl9fLnB1c2goe30pLFEuX19bJF19ZnVuY3Rpb24gQSgkKXtyZXR1cm4gVjU9MSxuMChYOSwkKX1mdW5jdGlvbiBuMCgkLEosUSl7dmFyIFo9RzUoZjArKywyKTtpZihaLnQ9JCwhWi5fX2MmJihaLl9fPVtRP1EoSik6WDkodm9pZCAwLEopLGZ1bmN0aW9uKFYpe3ZhciBHPVouX19OP1ouX19OWzBdOlouX19bMF0sQj1aLnQoRyxWKTtHIT09QiYmKFouX19OPVtCLFouX19bMV1dLFouX19jLnNldFN0YXRlKHt9KSl9XSxaLl9fYz15MSwheTEuX19mKSl7dmFyIEs9ZnVuY3Rpb24oVixHLEIpe2lmKCFaLl9fYy5fX0gpcmV0dXJuITA7dmFyIE49Wi5fX2MuX19ILl9fLmZpbHRlcihmdW5jdGlvbihVKXtyZXR1cm4gVS5fX2N9KTtpZihOLmV2ZXJ5KGZ1bmN0aW9uKFUpe3JldHVybiFVLl9fTn0pKXJldHVybiFZfHxZLmNhbGwodGhpcyxWLEcsQik7dmFyIHo9Wi5fX2MucHJvcHMhPT1WO3JldHVybiBOLnNvbWUoZnVuY3Rpb24oVSl7aWYoVS5fX04pe3ZhciBIPVUuX19bMF07VS5fXz1VLl9fTixVLl9fTj12b2lkIDAsSCE9PVUuX19bMF0mJih6PSEwKX19KSxZJiZZLmNhbGwodGhpcyxWLEcsQil8fHp9O3kxLl9fZj0hMDt2YXJ7c2hvdWxkQ29tcG9uZW50VXBkYXRlOlksY29tcG9uZW50V2lsbFVwZGF0ZTpxfT15MTt5MS5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKFYsRyxCKXtpZih0aGlzLl9fZSl7dmFyIE49WTtZPXZvaWQgMCxLKFYsRyxCKSxZPU59cSYmcS5jYWxsKHRoaXMsVixHLEIpfSx5MS5zaG91bGRDb21wb25lbnRVcGRhdGU9S31yZXR1cm4gWi5fX058fFouX199ZnVuY3Rpb24gXygkLEope3ZhciBRPUc1KGYwKyssMyk7IXYxLl9fcyYmSTMoUS5fX0gsSikmJihRLl9fPSQsUS51PUoseTEuX19ILl9faC5wdXNoKFEpKX1mdW5jdGlvbiBUMCgkLEope3ZhciBRPUc1KGYwKyssNCk7IXYxLl9fcyYmSTMoUS5fX0gsSikmJihRLl9fPSQsUS51PUoseTEuX19oLnB1c2goUSkpfWZ1bmN0aW9uIFQoJCl7cmV0dXJuIFY1PTUsUjEoZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDokfX0sW10pfWZ1bmN0aW9uIFQyKCQsSixRKXtWNT02LFQwKGZ1bmN0aW9uKCl7aWYodHlwZW9mICQ9PSJmdW5jdGlvbiIpe3ZhciBaPSQoSigpKTtyZXR1cm4gZnVuY3Rpb24oKXskKG51bGwpLFomJnR5cGVvZiBaPT0iZnVuY3Rpb24iJiZaKCl9fWlmKCQpcmV0dXJuICQuY3VycmVudD1KKCksZnVuY3Rpb24oKXtyZXR1cm4gJC5jdXJyZW50PW51bGx9fSxRPT1udWxsP1E6US5jb25jYXQoJCkpfWZ1bmN0aW9uIFIxKCQsSil7dmFyIFE9RzUoZjArKyw3KTtyZXR1cm4gSTMoUS5fX0gsSikmJihRLl9fPSQoKSxRLl9fSD1KLFEuX19oPSQpLFEuX199ZnVuY3Rpb24gUCgkLEope3JldHVybiBWNT04LFIxKGZ1bmN0aW9uKCl7cmV0dXJuICR9LEopfWZ1bmN0aW9uIFcwKCQpe3ZhciBKPXkxLmNvbnRleHRbJC5fX2NdLFE9RzUoZjArKyw5KTtyZXR1cm4gUS5jPSQsSj8oUS5fXz09bnVsbCYmKFEuX189ITAsSi5zdWIoeTEpKSxKLnByb3BzLnZhbHVlKTokLl9ffWZ1bmN0aW9uIEkyKCQsSil7djEudXNlRGVidWdWYWx1ZSYmdjEudXNlRGVidWdWYWx1ZShKP0ooJCk6JCl9ZnVuY3Rpb24gQjUoKXt2YXIgJD1HNShmMCsrLDExKTtpZighJC5fXyl7Zm9yKHZhciBKPXkxLl9fdjtKIT09bnVsbCYmIUouX19tJiZKLl9fIT09bnVsbDspSj1KLl9fO3ZhciBRPUouX19tfHwoSi5fX209WzAsMF0pOyQuX189IlAiK1FbMF0rIi0iK1FbMV0rK31yZXR1cm4gJC5fX31mdW5jdGlvbiBRJCgpe2Zvcih2YXIgJDskPVo5LnNoaWZ0KCk7KXt2YXIgSj0kLl9fSDtpZigkLl9fUCYmSil0cnl7Si5fX2guc29tZShEMiksSi5fX2guc29tZShUMyksSi5fX2g9W119Y2F0Y2goUSl7Si5fX2g9W10sdjEuX19lKFEsJC5fX3YpfX19djEuX19iPWZ1bmN0aW9uKCQpe3kxPW51bGwsYTgmJmE4KCQpfSx2MS5fXz1mdW5jdGlvbigkLEopeyQmJkouX19rJiZKLl9fay5fX20mJigkLl9fbT1KLl9fay5fX20pLEo5JiZKOSgkLEopfSx2MS5fX3I9ZnVuY3Rpb24oJCl7czgmJnM4KCQpLGYwPTA7dmFyIEo9KHkxPSQuX19jKS5fX0g7SiYmKEQzPT09eTE/KEouX19oPVtdLHkxLl9faD1bXSxKLl9fLnNvbWUoZnVuY3Rpb24oUSl7US5fX04mJihRLl9fPVEuX19OKSxRLnU9US5fX049dm9pZCAwfSkpOihKLl9faC5zb21lKEQyKSxKLl9faC5zb21lKFQzKSxKLl9faD1bXSxmMD0wKSksRDM9eTF9LHYxLmRpZmZlZD1mdW5jdGlvbigkKXt0OCYmdDgoJCk7dmFyIEo9JC5fX2M7SiYmSi5fX0gmJihKLl9fSC5fX2gubGVuZ3RoJiYoWjkucHVzaChKKSE9PTEmJm44PT09djEucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHwoKG44PXYxLnJlcXVlc3RBbmltYXRpb25GcmFtZSl8fFokKShRJCkpLEouX19ILl9fLnNvbWUoZnVuY3Rpb24oUSl7US51JiYoUS5fX0g9US51KSxRLnU9dm9pZCAwfSkpLEQzPXkxPW51bGx9LHYxLl9fYz1mdW5jdGlvbigkLEope0ouc29tZShmdW5jdGlvbihRKXt0cnl7US5fX2guc29tZShEMiksUS5fX2g9US5fX2guZmlsdGVyKGZ1bmN0aW9uKFope3JldHVybiFaLl9ffHxUMyhaKX0pfWNhdGNoKFope0ouc29tZShmdW5jdGlvbihLKXtLLl9faCYmKEsuX19oPVtdKX0pLEo9W10sdjEuX19lKFosUS5fX3YpfX0pLGU4JiZlOCgkLEopfSx2MS51bm1vdW50PWZ1bmN0aW9uKCQpeyQ5JiYkOSgkKTt2YXIgSixRPSQuX19jO1EmJlEuX19IJiYoUS5fX0guX18uc29tZShmdW5jdGlvbihaKXt0cnl7RDIoWil9Y2F0Y2goSyl7Sj1LfX0pLFEuX19IPXZvaWQgMCxKJiZ2MS5fX2UoSixRLl9fdikpfTt2YXIgUTk9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT09ImZ1bmN0aW9uIjtmdW5jdGlvbiBaJCgkKXt2YXIgSixRPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KFopLFE5JiZjYW5jZWxBbmltYXRpb25GcmFtZShKKSxzZXRUaW1lb3V0KCQpfSxaPXNldFRpbWVvdXQoUSwzNSk7UTkmJihKPXJlcXVlc3RBbmltYXRpb25GcmFtZShRKSl9ZnVuY3Rpb24gRDIoJCl7dmFyIEo9eTEsUT0kLl9fYzt0eXBlb2YgUT09ImZ1bmN0aW9uIiYmKCQuX19jPXZvaWQgMCxRKCkpLHkxPUp9ZnVuY3Rpb24gVDMoJCl7dmFyIEo9eTE7JC5fX2M9JC5fXygpLHkxPUp9ZnVuY3Rpb24gSTMoJCxKKXtyZXR1cm4hJHx8JC5sZW5ndGghPT1KLmxlbmd0aHx8Si5zb21lKGZ1bmN0aW9uKFEsWil7cmV0dXJuIFEhPT0kW1pdfSl9ZnVuY3Rpb24gWDkoJCxKKXtyZXR1cm4gdHlwZW9mIEo9PSJmdW5jdGlvbiI/SigkKTpKfWZ1bmN0aW9uIFU5KCQsSil7Zm9yKHZhciBRIGluIEopJFtRXT1KW1FdO3JldHVybiAkfWZ1bmN0aW9uIHczKCQsSil7Zm9yKHZhciBRIGluICQpaWYoUSE9PSJfX3NvdXJjZSImJiEoUSBpbiBKKSlyZXR1cm4hMDtmb3IodmFyIFogaW4gSilpZihaIT09Il9fc291cmNlIiYmJFtaXSE9PUpbWl0pcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gdzIoJCxKKXt2YXIgUT1KKCksWj1BKHt0OntfXzpRLHU6Sn19KSxLPVpbMF0udCxZPVpbMV07cmV0dXJuIFQwKGZ1bmN0aW9uKCl7Sy5fXz1RLEsudT1KLEUzKEspJiZZKHt0Okt9KX0sWyQsUSxKXSksXyhmdW5jdGlvbigpe3JldHVybiBFMyhLKSYmWSh7dDpLfSksJChmdW5jdGlvbigpe0UzKEspJiZZKHt0Okt9KX0pfSxbJF0pLFF9ZnVuY3Rpb24gRTMoJCl7dHJ5e3JldHVybiEoKEo9JC5fXyk9PT0oUT0kLnUoKSkmJihKIT09MHx8MS9KPT0xL1EpfHxKIT1KJiZRIT1RKX1jYXRjaChaKXtyZXR1cm4hMH12YXIgSixRfWZ1bmN0aW9uIEw5KCQpeyQoKX1mdW5jdGlvbiBIOSgkKXtyZXR1cm4gJH1mdW5jdGlvbiBrOSgpe3JldHVyblshMSxMOV19dmFyIEM5PVQwO2Z1bmN0aW9uIGIzKCQsSil7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1KfWZ1bmN0aW9uIGEwKCQsSil7ZnVuY3Rpb24gUShLKXt2YXIgWT10aGlzLnByb3BzLnJlZjtyZXR1cm4gWSE9Sy5yZWYmJlkmJih0eXBlb2YgWT09ImZ1bmN0aW9uIj9ZKG51bGwpOlkuY3VycmVudD1udWxsKSxKPyFKKHRoaXMucHJvcHMsSyl8fFkhPUsucmVmOnczKHRoaXMucHJvcHMsSyl9ZnVuY3Rpb24gWihLKXtyZXR1cm4gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9USxsMSgkLEspfXJldHVybiBaLmRpc3BsYXlOYW1lPSJNZW1vKCIrKCQuZGlzcGxheU5hbWV8fCQubmFtZSkrIikiLFouX19mPVoucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWi50eXBlPSQsWn0oYjMucHJvdG90eXBlPW5ldyBuMSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsYjMucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbigkLEope3JldHVybiB3Myh0aGlzLnByb3BzLCQpfHx3Myh0aGlzLnN0YXRlLEopfTt2YXIgSzk9dC5fX2I7dC5fX2I9ZnVuY3Rpb24oJCl7JC50eXBlJiYkLnR5cGUuX19mJiYkLnJlZiYmKCQucHJvcHMucmVmPSQucmVmLCQucmVmPW51bGwpLEs5JiZLOSgkKX07dmFyIFgkPXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpfHwzOTExO2Z1bmN0aW9uIF8wKCQpe2Z1bmN0aW9uIEooUSl7dmFyIFo9VTkoe30sUSk7cmV0dXJuIGRlbGV0ZSBaLnJlZiwkKFosUS5yZWZ8fG51bGwpfXJldHVybiBKLiQkdHlwZW9mPVgkLEoucmVuZGVyPSQsSi5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD1KLl9fZj0hMCxKLmRpc3BsYXlOYW1lPSJGb3J3YXJkUmVmKCIrKCQuZGlzcGxheU5hbWV8fCQubmFtZSkrIikiLEp9dmFyIFk5PWZ1bmN0aW9uKCQsSil7cmV0dXJuICQ9PW51bGw/bnVsbDpLMChLMCgkKS5tYXAoSikpfSxLJD17bWFwOlk5LGZvckVhY2g6WTksY291bnQ6ZnVuY3Rpb24oJCl7cmV0dXJuICQ/SzAoJCkubGVuZ3RoOjB9LG9ubHk6ZnVuY3Rpb24oJCl7dmFyIEo9SzAoJCk7aWYoSi5sZW5ndGghPT0xKXRocm93IkNoaWxkcmVuLm9ubHkiO3JldHVybiBKWzBdfSx0b0FycmF5OkswfSxZJD10Ll9fZTt0Ll9fZT1mdW5jdGlvbigkLEosUSxaKXtpZigkLnRoZW4pe2Zvcih2YXIgSyxZPUo7WT1ZLl9fOylpZigoSz1ZLl9fYykmJksuX19jKXJldHVybiBKLl9fZT09bnVsbCYmKEouX19lPVEuX19lLEouX19rPVEuX19rKSxLLl9fYygkLEopfVkkKCQsSixRLFopfTt2YXIgcTk9dC51bm1vdW50O2Z1bmN0aW9uIEY5KCQsSixRKXtyZXR1cm4gJCYmKCQuX19jJiYkLl9fYy5fX0gmJigkLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihaKXt0eXBlb2YgWi5fX2M9PSJmdW5jdGlvbiImJlouX19jKCl9KSwkLl9fYy5fX0g9bnVsbCksKCQ9VTkoe30sJCkpLl9fYyE9bnVsbCYmKCQuX19jLl9fUD09PVEmJigkLl9fYy5fX1A9SiksJC5fX2MuX19lPSEwLCQuX19jPW51bGwpLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWil7cmV0dXJuIEY5KFosSixRKX0pKSwkfWZ1bmN0aW9uIEE5KCQsSixRKXtyZXR1cm4gJCYmUSYmKCQuX192PW51bGwsJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gQTkoWixKLFEpfSksJC5fX2MmJiQuX19jLl9fUD09PUomJigkLl9fZSYmUS5hcHBlbmRDaGlsZCgkLl9fZSksJC5fX2MuX19lPSEwLCQuX19jLl9fUD1RKSksJH1mdW5jdGlvbiBFMigpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBPOSgkKXt2YXIgSj0kLl9fJiYkLl9fLl9fYztyZXR1cm4gSiYmSi5fX2EmJkouX19hKCQpfWZ1bmN0aW9uIHEkKCQpe3ZhciBKLFEsWixLPW51bGw7ZnVuY3Rpb24gWShxKXtpZihKfHwoSj0kKCkpLnRoZW4oZnVuY3Rpb24oVil7ViYmKEs9Vi5kZWZhdWx0fHxWKSxaPSEwfSxmdW5jdGlvbihWKXtRPVYsWj0hMH0pLFEpdGhyb3cgUTtpZighWil0aHJvdyBKO3JldHVybiBLP2wxKEsscSk6bnVsbH1yZXR1cm4gWS5kaXNwbGF5TmFtZT0iTGF6eSIsWS5fX2Y9ITAsWX1mdW5jdGlvbiB2NSgpe3RoaXMuaT1udWxsLHRoaXMubD1udWxsfXQudW5tb3VudD1mdW5jdGlvbigkKXt2YXIgSj0kLl9fYztKJiYoSi5fX3o9ITApLEomJkouX19SJiZKLl9fUigpLEomJjMyJiQuX191JiYoJC50eXBlPW51bGwpLHE5JiZxOSgkKX0sKEUyLnByb3RvdHlwZT1uZXcgbjEpLl9fYz1mdW5jdGlvbigkLEope3ZhciBRPUouX19jLFo9dGhpcztaLm89PW51bGwmJihaLm89W10pLFouby5wdXNoKFEpO3ZhciBLPU85KFouX192KSxZPSExLHE9ZnVuY3Rpb24oKXtZfHxaLl9fenx8KFk9ITAsUS5fX1I9bnVsbCxLP0soRyk6RygpKX07US5fX1I9cTt2YXIgVj1RLl9fUDtRLl9fUD1udWxsO3ZhciBHPWZ1bmN0aW9uKCl7aWYoIS0tWi5fX3Upe2lmKFouc3RhdGUuX19hKXt2YXIgQj1aLnN0YXRlLl9fYTtaLl9fdi5fX2tbMF09QTkoQixCLl9fYy5fX1AsQi5fX2MuX19PKX12YXIgTjtmb3IoWi5zZXRTdGF0ZSh7X19hOlouX19iPW51bGx9KTtOPVouby5wb3AoKTspTi5fX1A9VixOLmZvcmNlVXBkYXRlKCl9fTtaLl9fdSsrfHwzMiZKLl9fdXx8Wi5zZXRTdGF0ZSh7X19hOlouX19iPVouX192Ll9fa1swXX0pLCQudGhlbihxLHEpfSxFMi5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LEUyLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCxKKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgUT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxaPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPUY5KHRoaXMuX19iLFEsWi5fX089Wi5fX1ApfXRoaXMuX19iPW51bGx9dmFyIEs9Si5fX2EmJmwxKEsxLG51bGwsJC5mYWxsYmFjayk7cmV0dXJuIEsmJihLLl9fdSY9LTMzKSxbbDEoSzEsbnVsbCxKLl9fYT9udWxsOiQuY2hpbGRyZW4pLEtdfTt2YXIgVjk9ZnVuY3Rpb24oJCxKLFEpe2lmKCsrUVsxXT09PVFbMF0mJiQubC5kZWxldGUoSiksJC5wcm9wcy5yZXZlYWxPcmRlciYmKCQucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCEkLmwuc2l6ZSkpZm9yKFE9JC5pO1E7KXtmb3IoO1EubGVuZ3RoPjM7KVEucG9wKCkoKTtpZihRWzFdPFFbMF0pYnJlYWs7JC5pPVE9UVsyXX19O2Z1bmN0aW9uIFYkKCQpe3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiAkLmNvbnRleHR9LCQuY2hpbGRyZW59ZnVuY3Rpb24gRyQoJCl7dmFyIEo9dGhpcyxRPSQuaDtpZihKLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7UjAobnVsbCxKLnYpLEoudj1udWxsLEouaD1udWxsfSxKLmgmJkouaCE9PVEmJkouY29tcG9uZW50V2lsbFVubW91bnQoKSwhSi52KXtmb3IodmFyIFo9Si5fX3Y7WiE9PW51bGwmJiFaLl9fbSYmWi5fXyE9PW51bGw7KVo9Wi5fXztKLmg9USxKLnY9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpRLGNoaWxkTm9kZXM6W10sX19rOntfX206Wi5fX219LGNvbnRhaW5zOmZ1bmN0aW9uKCl7cmV0dXJuITB9LG5hbWVzcGFjZVVSSTpRLm5hbWVzcGFjZVVSSSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oSyxZKXt0aGlzLmNoaWxkTm9kZXMucHVzaChLKSxKLmguaW5zZXJ0QmVmb3JlKEssWSl9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKEspe3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoSyk+Pj4xLDEpLEouaC5yZW1vdmVDaGlsZChLKX19fVIwKGwxKFYkLHtjb250ZXh0OkouY29udGV4dH0sJC5fX3YpLEoudil9ZnVuY3Rpb24geTMoJCxKKXt2YXIgUT1sMShHJCx7X192OiQsaDpKfSk7cmV0dXJuIFEuY29udGFpbmVySW5mbz1KLFF9KHY1LnByb3RvdHlwZT1uZXcgbjEpLl9fYT1mdW5jdGlvbigkKXt2YXIgSj10aGlzLFE9TzkoSi5fX3YpLFo9Si5sLmdldCgkKTtyZXR1cm4gWlswXSsrLGZ1bmN0aW9uKEspe3ZhciBZPWZ1bmN0aW9uKCl7Si5wcm9wcy5yZXZlYWxPcmRlcj8oWi5wdXNoKEspLFY5KEosJCxaKSk6SygpfTtRP1EoWSk6WSgpfX0sdjUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgSj1LMCgkLmNoaWxkcmVuKTskLnJldmVhbE9yZGVyJiYkLnJldmVhbE9yZGVyWzBdPT09ImIiJiZKLnJldmVyc2UoKTtmb3IodmFyIFE9Si5sZW5ndGg7US0tOyl0aGlzLmwuc2V0KEpbUV0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuICQuY2hpbGRyZW59LHY1LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9djUucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyICQ9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbihKLFEpe1Y5KCQsUSxKKX0pfTt2YXIgTTk9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsQiQ9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLHokPS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sTiQ9L1tBLVowLTldL2csVSQ9dHlwZW9mIGRvY3VtZW50PCJ1IixMJD1mdW5jdGlvbigkKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoJCl9O2Z1bmN0aW9uIEgkKCQsSixRKXtyZXR1cm4gSi5fX2s9PW51bGwmJihKLnRleHRDb250ZW50PSIiKSxSMCgkLEopLHR5cGVvZiBRPT0iZnVuY3Rpb24iJiZRKCksJD8kLl9fYzpudWxsfWZ1bmN0aW9uIGskKCQsSixRKXtyZXR1cm4gXzIoJCxKKSx0eXBlb2YgUT09ImZ1bmN0aW9uIiYmUSgpLCQ/JC5fX2M6bnVsbH1uMS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJjb21wb25lbnRXaWxsVXBkYXRlIl0uZm9yRWFjaChmdW5jdGlvbigkKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobjEucHJvdG90eXBlLCQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1siVU5TQUZFXyIrJF19LHNldDpmdW5jdGlvbihKKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywkLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Sn0pfX0pfSk7dmFyIEc5PXQuZXZlbnQ7dC5ldmVudD1mdW5jdGlvbigkKXtyZXR1cm4gRzkmJigkPUc5KCQpKSwkLnBlcnNpc3Q9ZnVuY3Rpb24oKXt9LCQuaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9LCQuaXNEZWZhdWx0UHJldmVudGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH0sJC5uYXRpdmVFdmVudD0kfTt2YXIgUzMsQyQ9e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LEI5PXQudm5vZGU7dC52bm9kZT1mdW5jdGlvbigkKXt0eXBlb2YgJC50eXBlPT0ic3RyaW5nIiYmZnVuY3Rpb24oSil7dmFye3Byb3BzOlEsdHlwZTpafT1KLEs9e30sWT1aLmluZGV4T2YoIi0iKT09LTE7Zm9yKHZhciBxIGluIFEpe3ZhciBWPVFbcV07aWYoIShxPT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gUSkmJlY9PW51bGx8fFUkJiZxPT09ImNoaWxkcmVuIiYmWj09PSJub3NjcmlwdCJ8fHE9PT0iY2xhc3MifHxxPT09ImNsYXNzTmFtZSIpKXt2YXIgRz1xLnRvTG93ZXJDYXNlKCk7cT09PSJkZWZhdWx0VmFsdWUiJiYidmFsdWUiaW4gUSYmUS52YWx1ZT09bnVsbD9xPSJ2YWx1ZSI6cT09PSJkb3dubG9hZCImJlY9PT0hMD9WPSIiOkc9PT0idHJhbnNsYXRlIiYmVj09PSJubyI/Vj0hMTpHWzBdPT09Im8iJiZHWzFdPT09Im4iP0c9PT0ib25kb3VibGVjbGljayI/cT0ib25kYmxjbGljayI6RyE9PSJvbmNoYW5nZSJ8fFohPT0iaW5wdXQiJiZaIT09InRleHRhcmVhInx8TCQoUS50eXBlKT9HPT09Im9uZm9jdXMiP3E9Im9uZm9jdXNpbiI6Rz09PSJvbmJsdXIiP3E9Im9uZm9jdXNvdXQiOnokLnRlc3QocSkmJihxPUcpOkc9cT0ib25pbnB1dCI6WSYmQiQudGVzdChxKT9xPXEucmVwbGFjZShOJCwiLSQmIikudG9Mb3dlckNhc2UoKTpWPT09bnVsbCYmKFY9dm9pZCAwKSxHPT09Im9uaW5wdXQiJiZLW3E9R10mJihxPSJvbmlucHV0Q2FwdHVyZSIpLEtbcV09Vn19Wj09InNlbGVjdCImJihLLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KEsudmFsdWUpJiYoSy52YWx1ZT1LMChRLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKEIpe0IucHJvcHMuc2VsZWN0ZWQ9Sy52YWx1ZS5pbmRleE9mKEIucHJvcHMudmFsdWUpIT0tMX0pKSxLLmRlZmF1bHRWYWx1ZSE9bnVsbCYmKEsudmFsdWU9SzAoUS5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihCKXtCLnByb3BzLnNlbGVjdGVkPUsubXVsdGlwbGU/Sy5kZWZhdWx0VmFsdWUuaW5kZXhPZihCLnByb3BzLnZhbHVlKSE9LTE6Sy5kZWZhdWx0VmFsdWU9PUIucHJvcHMudmFsdWV9KSkpLFEuY2xhc3MmJiFRLmNsYXNzTmFtZT8oSy5jbGFzcz1RLmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShLLCJjbGFzc05hbWUiLEMkKSk6US5jbGFzc05hbWUmJihLLmNsYXNzPUsuY2xhc3NOYW1lPVEuY2xhc3NOYW1lKSxKLnByb3BzPUt9KCQpLCQuJCR0eXBlb2Y9TTksQjkmJkI5KCQpfTt2YXIgejk9dC5fX3I7dC5fX3I9ZnVuY3Rpb24oJCl7ejkmJno5KCQpLFMzPSQuX19jfTt2YXIgTjk9dC5kaWZmZWQ7dC5kaWZmZWQ9ZnVuY3Rpb24oJCl7TjkmJk45KCQpO3Zhcntwcm9wczpKLF9fZTpRfT0kO1EhPW51bGwmJiQudHlwZT09PSJ0ZXh0YXJlYSImJiJ2YWx1ZSJpbiBKJiZKLnZhbHVlIT09US52YWx1ZSYmKFEudmFsdWU9Si52YWx1ZT09bnVsbD8iIjpKLnZhbHVlKSxTMz1udWxsfTt2YXIgRiQ9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6e2N1cnJlbnQ6e3JlYWRDb250ZXh0OmZ1bmN0aW9uKCQpe3JldHVybiBTMy5fX25bJC5fX2NdLnByb3BzLnZhbHVlfSx1c2VDYWxsYmFjazpQLHVzZUNvbnRleHQ6VzAsdXNlRGVidWdWYWx1ZTpJMix1c2VEZWZlcnJlZFZhbHVlOkg5LHVzZUVmZmVjdDpfLHVzZUlkOkI1LHVzZUltcGVyYXRpdmVIYW5kbGU6VDIsdXNlSW5zZXJ0aW9uRWZmZWN0OkM5LHVzZUxheW91dEVmZmVjdDpUMCx1c2VNZW1vOlIxLHVzZVJlZHVjZXI6bjAsdXNlUmVmOlQsdXNlU3RhdGU6QSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTp3Mix1c2VUcmFuc2l0aW9uOms5fX19O2Z1bmN0aW9uIEEkKCQpe3JldHVybiBsMS5iaW5kKG51bGwsJCl9ZnVuY3Rpb24gYjIoJCl7cmV0dXJuISEkJiYkLiQkdHlwZW9mPT09TTl9ZnVuY3Rpb24gTyQoJCl7cmV0dXJuIGIyKCQpJiYkLnR5cGU9PT1LMX1mdW5jdGlvbiBNJCgkKXtyZXR1cm4hISQmJnR5cGVvZiAkLmRpc3BsYXlOYW1lPT0ic3RyaW5nIiYmJC5kaXNwbGF5TmFtZS5pbmRleE9mKCJNZW1vKCIpPT0wfWZ1bmN0aW9uIFckKCQpe3JldHVybiBiMigkKT9fMy5hcHBseShudWxsLGFyZ3VtZW50cyk6JH1mdW5jdGlvbiBQJCgkKXtyZXR1cm4hISQuX19rJiYoUjAobnVsbCwkKSwhMCl9ZnVuY3Rpb24gXyQoJCl7cmV0dXJuICQmJigkLmJhc2V8fCQubm9kZVR5cGU9PT0xJiYkKXx8bnVsbH12YXIgRCQ9ZnVuY3Rpb24oJCxKKXtyZXR1cm4gJChKKX0sVCQ9ZnVuY3Rpb24oJCxKKXt2YXIgUT10LmRlYm91bmNlUmVuZGVyaW5nO3QuZGVib3VuY2VSZW5kZXJpbmc9ZnVuY3Rpb24oSyl7cmV0dXJuIEsoKX07dmFyIFo9JChKKTtyZXR1cm4gdC5kZWJvdW5jZVJlbmRlcmluZz1RLFp9LEkkPWIyLHY9e3VzZVN0YXRlOkEsdXNlSWQ6QjUsdXNlUmVkdWNlcjpuMCx1c2VFZmZlY3Q6Xyx1c2VMYXlvdXRFZmZlY3Q6VDAsdXNlSW5zZXJ0aW9uRWZmZWN0OkM5LHVzZVRyYW5zaXRpb246azksdXNlRGVmZXJyZWRWYWx1ZTpIOSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTp3MixzdGFydFRyYW5zaXRpb246TDksdXNlUmVmOlQsdXNlSW1wZXJhdGl2ZUhhbmRsZTpUMix1c2VNZW1vOlIxLHVzZUNhbGxiYWNrOlAsdXNlQ29udGV4dDpXMCx1c2VEZWJ1Z1ZhbHVlOkkyLHZlcnNpb246IjE4LjMuMSIsQ2hpbGRyZW46SyQscmVuZGVyOkgkLGh5ZHJhdGU6ayQsdW5tb3VudENvbXBvbmVudEF0Tm9kZTpQJCxjcmVhdGVQb3J0YWw6eTMsY3JlYXRlRWxlbWVudDpsMSxjcmVhdGVDb250ZXh0Ok0wLGNyZWF0ZUZhY3Rvcnk6QSQsY2xvbmVFbGVtZW50OlckLGNyZWF0ZVJlZjpqNSxGcmFnbWVudDpLMSxpc1ZhbGlkRWxlbWVudDpiMixpc0VsZW1lbnQ6SSQsaXNGcmFnbWVudDpPJCxpc01lbW86TSQsZmluZERPTU5vZGU6XyQsQ29tcG9uZW50Om4xLFB1cmVDb21wb25lbnQ6YjMsbWVtbzphMCxmb3J3YXJkUmVmOl8wLGZsdXNoU3luYzpUJCx1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczpEJCxTdHJpY3RNb2RlOksxLFN1c3BlbnNlOkUyLFN1c3BlbnNlTGlzdDp2NSxsYXp5OnEkLF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOkYkfTtmdW5jdGlvbiBXOSgkKXtsZXQgSj1uZXcgVWludDhBcnJheSg2NTUzNiksUT0wLFo9MCxLPTEwMjQsWT1uZXcgVGV4dERlY29kZXIoImxhdGluMSIpLHE9KFUpPT57aWYoUStVLmxlbmd0aD5KLmxlbmd0aCl7aWYoWj4wKUouY29weVdpdGhpbigwLFosUSksUS09WixaPTA7aWYoUStVLmxlbmd0aD5KLmxlbmd0aCl7bGV0IEg9Si5sZW5ndGg7d2hpbGUoSDxRK1UubGVuZ3RoKUgqPTI7bGV0IEY9bmV3IFVpbnQ4QXJyYXkoSCk7Ri5zZXQoSi5zdWJhcnJheSgwLFEpKSxKPUZ9fUouc2V0KFUsUSksUSs9VS5sZW5ndGh9LFY9KFUpPT57bGV0IEg9TWF0aC5taW4oUS00LFUrSyk7Zm9yKGxldCBGPVU7Rjw9SDtGKyspaWYoSltGXT09PTEzJiZKW0YrMV09PT0xMCYmSltGKzJdPT09MTMmJkpbRiszXT09PTEwKXJldHVybiBGO3JldHVybi0xfSxHPShVLEgpPT57bGV0IEY9WS5kZWNvZGUoSi5zdWJhcnJheShVLEgpKSxMPS9jb250ZW50LWxlbmd0aDpccyooXGQrKS9pLmV4ZWMoRik7cmV0dXJuIEw/TnVtYmVyKExbMV0pOm51bGx9LEI9MCxOPShVKT0+e2xldCBIPS0xO2ZvcihsZXQgRj1VO0Y8US0xO0YrKylpZihKW0ZdPT09MjU1JiZKW0YrMV09PT0yMTYpe0g9RjticmVha31pZihIPT09LTEpcmV0dXJuIG51bGw7Zm9yKGxldCBGPU1hdGgubWF4KEgrMixCKTtGPFEtMTtGKyspaWYoSltGXT09PTI1NSYmSltGKzFdPT09MjE3KXJldHVybiBCPTAse3M6SCxlOkYrMn07cmV0dXJuIEI9TWF0aC5tYXgoSCsyLFEtMSksbnVsbH0sej0oKT0+e3doaWxlKFo8USl7bGV0IFU9VihaKTtpZihVPj0wKXtsZXQgRj1HKFosVSk7aWYoRiE9bnVsbCYmRj4wKXtsZXQgTD1VKzQsaz1MK0Y7aWYoUTxrKWJyZWFrOyQoSi5zdWJhcnJheShMLGspKSxaPWs7Y29udGludWV9fWVsc2UgaWYoUS1aPD1LKWJyZWFrO2xldCBIPU4oWik7aWYoIUgpYnJlYWs7JChKLnN1YmFycmF5KEgucyxILmUpKSxaPUguZX1pZihaPjApe2lmKFo8USlKLmNvcHlXaXRoaW4oMCxaLFEpO1EtPVosQj1CPlo/Qi1aOjAsWj0wfX07cmV0dXJue3B1c2goVSl7aWYoVS5sZW5ndGg9PT0wKXJldHVybjtxKFUpLHooKX19fWZ1bmN0aW9uIEUkKCQsSj01MDAsUT0xZTQpe3JldHVybiBNYXRoLm1pbihRLEoqMioqTWF0aC5tYXgoMCwkLTEpKX1hc3luYyBmdW5jdGlvbiB3JCgkKXtsZXQgSj0iIjt0cnl7Sj1hd2FpdCAkLnRleHQoKX1jYXRjaHt9dHJ5e2xldCBRPUpTT04ucGFyc2UoSik7cmV0dXJue3N0YXR1czokLnN0YXR1cyxlcnJvcjp0eXBlb2YgUS5lcnJvcj09PSJzdHJpbmciP1EuZXJyb3I6YGh0dHBfJHskLnN0YXR1c31gLHJlYXNvbjp0eXBlb2YgUS5yZWFzb249PT0ic3RyaW5nIj9RLnJlYXNvbjp0eXBlb2YgUS5tZXNzYWdlPT09InN0cmluZyI/US5tZXNzYWdlOmBIVFRQICR7JC5zdGF0dXN9YCwuLi50eXBlb2YgUS5zdGFnZT09PSJzdHJpbmciP3tzdGFnZTpRLnN0YWdlfTp7fSwuLi5RLmRldGFpbHMmJnR5cGVvZiBRLmRldGFpbHM9PT0ib2JqZWN0Ij97ZGV0YWlsczpRLmRldGFpbHN9Ont9fX1jYXRjaHtyZXR1cm57c3RhdHVzOiQuc3RhdHVzLGVycm9yOmBodHRwXyR7JC5zdGF0dXN9YCxyZWFzb246Si50cmltKCkuc2xpY2UoMCwyMDApfHxgSFRUUCAkeyQuc3RhdHVzfWB9fX12YXIgYiQ9KCQsSik9Pm5ldyBQcm9taXNlKChRKT0+e2lmKEouYWJvcnRlZClyZXR1cm4gUSgpO2xldCBaPSgpPT57Y2xlYXJUaW1lb3V0KEspLFEoKX0sSz1zZXRUaW1lb3V0KCgpPT57Si5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsWiksUSgpfSwkKTtKLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixaLHtvbmNlOiEwfSl9KTthc3luYyBmdW5jdGlvbiBQOSgkKXtsZXQgSj0kLmZldGNoPz9mZXRjaCxRPSQuc2xlZXA/P2IkLFo9MDt3aGlsZSghJC5zaWduYWwuYWJvcnRlZCl7bGV0IEssWT0hMTt0cnl7bGV0IFY9YXdhaXQgSigkLnVybCx7c2lnbmFsOiQuc2lnbmFsfSk7aWYoIVYub2spSz1hd2FpdCB3JChWKTtlbHNlIGlmKCFWLmJvZHkpSz17c3RhdHVzOlYuc3RhdHVzLGVycm9yOiJub19ib2R5IixyZWFzb246IlN0cmVhbSByZXNwb25zZSBoYWQgbm8gYm9keSJ9O2Vsc2V7bGV0IEc9JC5jb25uZWN0KCksQj1WLmJvZHkuZ2V0UmVhZGVyKCksTj0hMTt0cnl7d2hpbGUoITApe2xldHtkb25lOnosdmFsdWU6VX09YXdhaXQgQi5yZWFkKCk7aWYoeil7Tj0hMDticmVha31pZighVT8ubGVuZ3RoKWNvbnRpbnVlO2lmKCFZKVk9ITAsWj0wLCQub25PcGVuPy4oKTtHKFUpfX1maW5hbGx5e2lmKCFOKWF3YWl0IEIuY2FuY2VsKCkuY2F0Y2goKCk9Pnt9KX1LPXtzdGF0dXM6Vi5zdGF0dXMsZXJyb3I6InN0cmVhbV9lbmRlZCIscmVhc29uOiJUaGUgc2VydmVyIGNsb3NlZCB0aGUgc3RyZWFtIn19fWNhdGNoKFYpe2lmKCQuc2lnbmFsLmFib3J0ZWQpYnJlYWs7Sz1ZP3tzdGF0dXM6MCxlcnJvcjoic3RyZWFtX2ludGVycnVwdGVkIixyZWFzb246IlRoZSBzdHJlYW0gd2FzIGludGVycnVwdGVkIn06e3N0YXR1czowLGVycm9yOiJub19yZXNwb25zZSIscmVhc29uOmBObyByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIgKCR7ViBpbnN0YW5jZW9mIEVycm9yP1YubWVzc2FnZTpTdHJpbmcoVil9KWB9fWlmKFkpJC5vbkNsb3NlPy4oKTtpZigkLnNpZ25hbC5hYm9ydGVkKWJyZWFrO1orKztsZXQgcT1FJChaKTskLm9uRXJyb3Ioey4uLksscmV0cnlJbk1zOnF9KSxhd2FpdCBRKHEsJC5zaWduYWwpLmNhdGNoKCgpPT57fSl9fWZ1bmN0aW9uIHkyKCQsSil7bGV0IFE9VChKKTtRLmN1cnJlbnQ9SjtsZXQgWj1UKG5ldyBTZXQpLFtLLFldPUEobnVsbCkscT1QKChWKT0+e3JldHVybiBaLmN1cnJlbnQuYWRkKFYpLCgpPT57Wi5jdXJyZW50LmRlbGV0ZShWKX19LFtdKTtyZXR1cm4gXygoKT0+e2lmKCEkKXJldHVybjtsZXQgVj1uZXcgQWJvcnRDb250cm9sbGVyO1kobnVsbCk7bGV0IEc9bmV3IFVSTCgkKTtHLnNlYXJjaFBhcmFtcy5zZXQoInJhdyIsIjEiKTtsZXQgQj0oTik9PntpZihRLmN1cnJlbnQ/LighMCksWi5jdXJyZW50LnNpemU9PT0wKXJldHVybjtsZXQgej1OLmxlbmd0aD49OCYmTlswXT09PTEzNyYmTlsxXT09PTgwJiZOWzJdPT09NzgmJk5bM109PT03MSxVPVVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW05dLHt0eXBlOno/ImltYWdlL3BuZyI6ImltYWdlL2pwZWcifSkpO2ZvcihsZXQgSCBvZiBaLmN1cnJlbnQpSChVKX07cmV0dXJuIFA5KHt1cmw6Ry50b1N0cmluZygpLHNpZ25hbDpWLnNpZ25hbCxjb25uZWN0OigpPT57bGV0IE49VzkoQik7cmV0dXJuKHopPT5OLnB1c2goeil9LG9uT3BlbjooKT0+WShudWxsKSxvbkNsb3NlOigpPT5RLmN1cnJlbnQ/LighMSksb25FcnJvcjooTik9PntRLmN1cnJlbnQ/LighMSksWShOKX19KSwoKT0+e1EuY3VycmVudD8uKCExKSxWLmFib3J0KCl9fSxbJF0pLHtzdWJzY3JpYmVGcmFtZTpxLGZyYW1lOm51bGwsZXJyb3I6S319ZnVuY3Rpb24gXzkoJCxKLFEpe2lmKCEkKXJldHVybiBudWxsO2ZvcihsZXQgWiBvZiAkLnBpZWNlcyl7aWYoWi5sZW5ndGghPT01KWNvbnRpbnVlO2xldFtLLFkscSxWLEddPVo7aWYoWy4uLkssLi4uWSwuLi5xLC4uLlYsLi4uR10uc29tZSgocik9PiFOdW1iZXIuaXNGaW5pdGUocikpKWNvbnRpbnVlO2xldCBCPVlbMF0tcVswXSxOPVZbMF0tcVswXSx6PVlbMV0tcVsxXSxVPVZbMV0tcVsxXSxIPUtbMF0tWVswXStxWzBdLVZbMF0sRj1LWzFdLVlbMV0rcVsxXS1WWzFdLEw9QipVLU4qejtpZihNYXRoLmFicyhMKTwwLjAwMDAwMDAwMDEpY29udGludWU7bGV0IGs9KEgqVS1OKkYpL0wsQz0oQipGLUgqeikvTCxPPVlbMF0tS1swXStrKllbMF0seT1WWzBdLUtbMF0rQypWWzBdLEU9WVsxXS1LWzFdK2sqWVsxXSx3PVZbMV0tS1sxXStDKlZbMV0sUz1PLUoqayxRMT15LUoqQyxnPUUtUSprLGg9dy1RKkMsST1TKmgtUTEqZztpZihNYXRoLmFicyhJKTwwLjAwMDAwMDAwMDEpY29udGludWU7bGV0IHU9KChKLUtbMF0pKmgtUTEqKFEtS1sxXSkpL0ksWjE9KFMqKFEtS1sxXSktKEotS1swXSkqZykvSTtpZih1PC0wLjAwMXx8WjE8LTAuMDAxfHx1PjEuMDAxfHxaMT4xLjAwMSljb250aW51ZTtyZXR1cm57eDpHWzBdK01hdGgubWF4KDAsTWF0aC5taW4oMSx1KSkqR1syXSx5OkdbMV0rTWF0aC5tYXgoMCxNYXRoLm1pbigxLFoxKSkqR1szXX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gRDkoJCxKKXtyZXR1cm4gJC5waWVjZXMuZmxhdE1hcCgoUSk9PntpZihRLmxlbmd0aCE9PTUpcmV0dXJuW107bGV0W1osSyxZLHEsVl09USxHPU1hdGgubWF4KEoueCxWWzBdKSxCPU1hdGgubWF4KEoueSxWWzFdKSxOPU1hdGgubWluKEoueCtKLndpZHRoLFZbMF0rVlsyXSksej1NYXRoLm1pbihKLnkrSi5oZWlnaHQsVlsxXStWWzNdKTtpZihOPD1HfHx6PD1CKXJldHVybltdO2xldCBVPUtbMF0tWVswXSxIPXFbMF0tWVswXSxGPUtbMV0tWVsxXSxMPXFbMV0tWVsxXSxrPVpbMF0tS1swXStZWzBdLXFbMF0sQz1aWzFdLUtbMV0rWVsxXS1xWzFdLE89VSpMLUgqRjtpZihNYXRoLmFicyhPKTwwLjAwMDAwMDAwMDEpcmV0dXJuW107bGV0IHk9KGsqTC1IKkMpL08sRT0oVSpDLWsqRikvTyx3PShTLFExKT0+e2xldCBnPShTLVZbMF0pL1ZbMl0saD0oUTEtVlsxXSkvVlszXSxJPTEreSpnK0UqaDtyZXR1cm5bKChLWzBdLVpbMF0reSpLWzBdKSpnKyhxWzBdLVpbMF0rRSpxWzBdKSpoK1pbMF0pL0ksKChLWzFdLVpbMV0reSpLWzFdKSpnKyhxWzFdLVpbMV0rRSpxWzFdKSpoK1pbMV0pL0ldfTtyZXR1cm5bW3coRyxCKSx3KE4sQiksdyhOLHopLHcoRyx6KV1dfSl9ZnVuY3Rpb24gVDkoJCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KCQmJlskLnBhbmVsLCQuaGluZ2VEZWdyZWVzLCQucGllY2VzXSl9ZnVuY3Rpb24gSTkoJCl7bGV0IEo9JD8uaGFyZHdhcmU7aWYoIUp8fEoubGVuZ3RoIT09NHx8Si5zb21lKCh7eDpRLHk6WixhbmdsZTpLfSk9PiFbUSxaLEtdLmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSkpKXJldHVybltdO3JldHVybiBKLm1hcCgoUSxaKT0+KHsuLi5RLGtleTpafSkpfXZhciBTMj0oLi4uJCk9PiQuZmlsdGVyKChKLFEsWik9PntyZXR1cm4gQm9vbGVhbihKKSYmSi50cmltKCkhPT0iIiYmWi5pbmRleE9mKEopPT09UX0pLmpvaW4oIiAiKS50cmltKCk7dmFyIEU5PSgkKT0+JC5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCk7dmFyIHc5PSgkKT0+JC5yZXBsYWNlKC9eKFtBLVpdKXxbXHMtX10rKFx3KS9nLChKLFEsWik9Plo/Wi50b1VwcGVyQ2FzZSgpOlEudG9Mb3dlckNhc2UoKSk7dmFyIHgzPSgkKT0+e2xldCBKPXc5KCQpO3JldHVybiBKLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK0ouc2xpY2UoMSl9O3ZhciB4Mj17eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoyNCxoZWlnaHQ6MjQsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6MixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn07dmFyIGI5PSgkKT0+e2ZvcihsZXQgSiBpbiAkKWlmKEouc3RhcnRzV2l0aCgiYXJpYS0iKXx8Sj09PSJyb2xlInx8Sj09PSJ0aXRsZSIpcmV0dXJuITA7cmV0dXJuITF9O3ZhciB5JD1NMCh7fSk7dmFyIHk5PSgpPT5XMCh5JCk7dmFyIFM5PV8wKCh7Y29sb3I6JCxzaXplOkosc3Ryb2tlV2lkdGg6USxhYnNvbHV0ZVN0cm9rZVdpZHRoOlosY2xhc3NOYW1lOks9IiIsY2hpbGRyZW46WSxpY29uTm9kZTpxLC4uLlZ9LEcpPT57bGV0e3NpemU6Qj0yNCxzdHJva2VXaWR0aDpOPTIsYWJzb2x1dGVTdHJva2VXaWR0aDp6PSExLGNvbG9yOlU9ImN1cnJlbnRDb2xvciIsY2xhc3NOYW1lOkg9IiJ9PXk5KCk/P3t9LEY9Wj8/ej9OdW1iZXIoUT8/TikqMjQvTnVtYmVyKEo/P0IpOlE/P047cmV0dXJuIGwxKCJzdmciLHtyZWY6RywuLi54Mix3aWR0aDpKPz9CPz94Mi53aWR0aCxoZWlnaHQ6Sj8/Qj8/eDIuaGVpZ2h0LHN0cm9rZTokPz9VLHN0cm9rZVdpZHRoOkYsY2xhc3NOYW1lOlMyKCJsdWNpZGUiLEgsSyksLi4uIVkmJiFiOShWKSYmeyJhcmlhLWhpZGRlbiI6InRydWUifSwuLi5WfSxbLi4ucS5tYXAoKFtMLGtdKT0+bDEoTCxrKSksLi4uQXJyYXkuaXNBcnJheShZKT9ZOltZXV0pfSk7dmFyIHExPSgkLEopPT57bGV0IFE9XzAoKHtjbGFzc05hbWU6WiwuLi5LfSxZKT0+bDEoUzkse3JlZjpZLGljb25Ob2RlOkosY2xhc3NOYW1lOlMyKGBsdWNpZGUtJHtFOSh4MygkKSl9YCxgbHVjaWRlLSR7JH1gLFopLC4uLkt9KSk7cmV0dXJuIFEuZGlzcGxheU5hbWU9eDMoJCksUX07dmFyIFMkPVtbInBhdGgiLHtkOiJNMjEgMTJhOSA5IDAgMSAxLTYuMjE5LTguNTYiLGtleToiMTN6YWxkIn1dXSxtMD1xMSgibG9hZGVyLWNpcmNsZSIsUyQpO3ZhciB4JD1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiIsa2V5OiJhZml0djcifV0sWyJwYXRoIix7ZDoiTTkgM3YxOCIsa2V5OiJmaDNocWEifV1dLEkwPXExKCJwYW5lbC1sZWZ0Iix4JCk7dmFyIFIkPVtbInBhdGgiLHtkOiJNMTIuMDM0IDEyLjY4MWEuNDk4LjQ5OCAwIDAgMSAuNjQ3LS42NDdsOSAzLjVhLjUuNSAwIDAgMS0uMDMzLjk0M2wtMy40NDQgMS4wNjhhMSAxIDAgMCAwLS42Ni42NmwtMS4wNjcgMy40NDNhLjUuNSAwIDAgMS0uOTQzLjAzM3oiLGtleToieHduemlwIn1dLFsicGF0aCIse2Q6Ik0yMSAxMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNiIsa2V5OiIxNHJzdnEifV1dLHAwPXExKCJzcXVhcmUtbW91c2UtcG9pbnRlciIsUiQpO3ZhciBqJD1bWyJyZWN0Iix7eDoiMiIseToiNCIsd2lkdGg6IjIwIixoZWlnaHQ6IjE2IixyeDoiMiIsa2V5OiJpenhsYW8ifV0sWyJwYXRoIix7ZDoiTTEwIDR2NCIsa2V5OiJwcDh1ODAifV0sWyJwYXRoIix7ZDoiTTIgOGgyMCIsa2V5OiJkMTFjczcifV0sWyJwYXRoIix7ZDoiTTYgNHY0IixrZXk6IjFzdnRqdyJ9XV0sZzU9cTEoImFwcC13aW5kb3ciLGokKTt2YXIgdiQ9W1sicGF0aCIse2Q6Ik03IDdoMTB2MTAiLGtleToiMXRpdm45In1dLFsicGF0aCIse2Q6Ik03IDE3IDE3IDciLGtleToiMXZraXphIn1dXSxoNT1xMSgiYXJyb3ctdXAtcmlnaHQiLHYkKTt2YXIgZyQ9W1sicGF0aCIse2Q6Ik0xMy45OTcgNGEyIDIgMCAwIDEgMS43NiAxLjA1bC40ODYuOUEyIDIgMCAwIDAgMTguMDAzIDdIMjBhMiAyIDAgMCAxIDIgMnY5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjlhMiAyIDAgMCAxIDItMmgxLjk5N2EyIDIgMCAwIDAgMS43NTktMS4wNDhsLjQ4OS0uOTA0QTIgMiAwIDAgMSAxMC4wMDQgNHoiLGtleToiMTh1NmdnIn1dLFsiY2lyY2xlIix7Y3g6IjEyIixjeToiMTMiLHI6IjMiLGtleToiMXZnM2V1In1dXSxmNT1xMSgiY2FtZXJhIixnJCk7dmFyIGgkPVtbInBhdGgiLHtkOiJNMjAgNiA5IDE3bC01LTUiLGtleToiMWdtZjJjIn1dXSxtNT1xMSgiY2hlY2siLGgkKTt2YXIgZiQ9W1sicGF0aCIse2Q6Im02IDkgNiA2IDYtNiIsa2V5OiJxcnVuc2wifV1dLHA1PXExKCJjaGV2cm9uLWRvd24iLGYkKTt2YXIgbSQ9W1sicGF0aCIse2Q6Im05IDE4IDYtNi02LTYiLGtleToibXRoaHdxIn1dXSx1NT1xMSgiY2hldnJvbi1yaWdodCIsbSQpO3ZhciBwJD1bWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAiLGtleToiMW1nbGF5In1dXSxsNT1xMSgiY2lyY2xlIixwJCk7dmFyIHUkPVtbInBhdGgiLHtkOiJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiIsa2V5OiJiMTloNXEifV0sWyJwYXRoIix7ZDoiTTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDIgMTh6IixrZXk6Img3aDVnZSJ9XV0sZDU9cTEoImZhc3QtZm9yd2FyZCIsdSQpO3ZhciBsJD1bWyJwYXRoIix7ZDoibTMgNyA1IDUtNSA1VjciLGtleToiY291aGk3In1dLFsicGF0aCIse2Q6Im0yMSA3LTUgNSA1IDVWNyIsa2V5OiI2b3VpYTcifV0sWyJwYXRoIix7ZDoiTTEyIDIwdjIiLGtleToiMWxoMWtnIn1dLFsicGF0aCIse2Q6Ik0xMiAxNHYyIixrZXk6IjhqY3h1ZCJ9XSxbInBhdGgiLHtkOiJNMTIgOHYyIixrZXk6IjF3b3FpdiJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIixrZXk6InR1czAzbSJ9XV0sYzU9cTEoImZsaXAtaG9yaXpvbnRhbC0yIixsJCk7dmFyIGQkPVtbImxpbmUiLHt4MToiMjIiLHgyOiIyIix5MToiNiIseTI6IjYiLGtleToiMTV3N2RxIn1dLFsibGluZSIse3gxOiIyMiIseDI6IjIiLHkxOiIxOCIseTI6IjE4IixrZXk6IjFpcDQ4cCJ9XSxbImxpbmUiLHt4MToiNiIseDI6IjYiLHkxOiIyIix5MjoiMjIiLGtleToiYTJsbnl4In1dLFsibGluZSIse3gxOiIxOCIseDI6IjE4Iix5MToiMiIseTI6IjIyIixrZXk6Ijh2YjZqZCJ9XV0sczA9cTEoImZyYW1lIixkJCk7dmFyIGMkPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCIsa2V5OiIxbWdsYXkifV0sWyJwYXRoIix7ZDoiTTEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDAtMjAiLGtleToiMTNvMXpsIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDIwIixrZXk6IjlpNHB1NCJ9XV0saTU9cTEoImdsb2JlIixjJCk7dmFyIGkkPVtbInBhdGgiLHtkOiJtMjIgMTEtMS4yOTYtMS4yOTZhMi40IDIuNCAwIDAgMC0zLjQwOCAwTDExIDE2IixrZXk6IjlrenkzNSJ9XSxbInBhdGgiLHtkOiJNNCA4YTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxMGEyIDIgMCAwIDAgMi0yIixrZXk6IjF0MGYwdCJ9XSxbImNpcmNsZSIse2N4OiIxMyIsY3k6IjciLHI6IjEiLGZpbGw6ImN1cnJlbnRDb2xvciIsa2V5OiIxb2J1czYifV0sWyJyZWN0Iix7eDoiOCIseToiMiIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMiIsa2V5OiIxZ3ZoYnkifV1dLG81PXExKCJpbWFnZXMiLGkkKTt2YXIgbyQ9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxMSIseDoiMyIseToiMTEiLHJ4OiIyIixyeToiMiIsa2V5OiIxdzRldzEifV0sWyJwYXRoIix7ZDoiTTcgMTFWN2E1IDUgMCAwIDEgMTAgMHY0IixrZXk6ImZ3dm16bSJ9XV0scjU9cTEoImxvY2siLG8kKTt2YXIgciQ9W1sicmVjdCIse3dpZHRoOiIyMCIsaGVpZ2h0OiIxNCIseDoiMiIseToiMyIscng6IjIiLGtleToiNDhpNjUxIn1dLFsibGluZSIse3gxOiI4Iix4MjoiMTYiLHkxOiIyMSIseTI6IjIxIixrZXk6IjFzdmtlaCJ9XSxbImxpbmUiLHt4MToiMTIiLHgyOiIxMiIseTE6IjE3Iix5MjoiMjEiLGtleToidncxcW1tIn1dXSxuNT1xMSgibW9uaXRvciIsciQpO3ZhciBuJD1bWyJwYXRoIix7ZDoiTTIwLjk4NSAxMi40ODZhOSA5IDAgMSAxLTkuNDczLTkuNDcyYy40MDUtLjAyMi42MTcuNDYuNDAyLjgwM2E2IDYgMCAwIDAgOC4yNjggOC4yNjhjLjM0NC0uMjE1LjgyNS0uMDA0LjgwMy40MDEiLGtleToia2Z3dG0ifV1dLGE1PXExKCJtb29uIixuJCk7dmFyIGEkPVtbInJlY3QiLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHg6IjMiLHk6IjMiLHJ4OiIyIixrZXk6ImFmaXR2NyJ9XSxbInBhdGgiLHtkOiJNMTUgM3YxOCIsa2V5OiIxNG52cDAifV1dLHM1PXExKCJwYW5lbC1yaWdodCIsYSQpO3ZhciBzJD1bWyJwYXRoIix7ZDoiTTMgMTJhOSA5IDAgMSAwIDktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCIsa2V5OiIxMzU3ZTMifV0sWyJwYXRoIix7ZDoiTTMgM3Y1aDUiLGtleToiMXhocThhIn1dXSx0NT1xMSgicm90YXRlLWNjdyIscyQpO3ZhciB0JD1bWyJwYXRoIix7ZDoibTIxIDIxLTQuMzQtNC4zNCIsa2V5OiIxNGo3cmoifV0sWyJjaXJjbGUiLHtjeDoiMTEiLGN5OiIxMSIscjoiOCIsa2V5OiI0ZWo5N3UifV1dLGU1PXExKCJzZWFyY2giLHQkKTt2YXIgZSQ9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLGtleToiYWZpdHY3In1dXSwkMj1xMSgic3F1YXJlIixlJCk7dmFyICRKPVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiI0IixrZXk6IjRleGlwMiJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIixrZXk6InR1czAzbSJ9XSxbInBhdGgiLHtkOiJNMTIgMjB2MiIsa2V5OiIxbGgxa2cifV0sWyJwYXRoIix7ZDoibTQuOTMgNC45MyAxLjQxIDEuNDEiLGtleToiMTQ5dDZqIn1dLFsicGF0aCIse2Q6Im0xNy42NiAxNy42NiAxLjQxIDEuNDEiLGtleToicHRiZ3V2In1dLFsicGF0aCIse2Q6Ik0yIDEyaDIiLGtleToiMXQ4ZjhuIn1dLFsicGF0aCIse2Q6Ik0yMCAxMmgyIixrZXk6IjFxOG1qdyJ9XSxbInBhdGgiLHtkOiJtNi4zNCAxNy42Ni0xLjQxIDEuNDEiLGtleToiMW04eno1In1dLFsicGF0aCIse2Q6Im0xOS4wNyA0LjkzLTEuNDEgMS40MSIsa2V5OiIxc2hsY3MifV1dLEoyPXExKCJzdW4iLCRKKTt2YXIgSko9W1sicGF0aCIse2Q6Ik0xMiAzdjEyIixrZXk6IjF4MGo1cyJ9XSxbInBhdGgiLHtkOiJtMTcgOC01LTUtNSA1IixrZXk6IjdxOTdyOCJ9XSxbInBhdGgiLHtkOiJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCIsa2V5OiJpaDduM2gifV1dLFEyPXExKCJ1cGxvYWQiLEpKKTt2YXIgUUo9W1sicGF0aCIse2Q6Ik0xMSA0LjcwMmEuNzA1LjcwNSAwIDAgMC0xLjIwMy0uNDk4TDYuNDEzIDcuNTg3QTEuNCAxLjQgMCAwIDEgNS40MTYgOEgzYTEgMSAwIDAgMC0xIDF2NmExIDEgMCAwIDAgMSAxaDIuNDE2YTEuNCAxLjQgMCAwIDEgLjk5Ny40MTNsMy4zODMgMy4zODRBLjcwNS43MDUgMCAwIDAgMTEgMTkuMjk4eiIsa2V5OiJ1cWo5dXcifV0sWyJwYXRoIix7ZDoiTTE2IDlhNSA1IDAgMCAxIDAgNiIsa2V5OiIxcTZrMmIifV1dLFoyPXExKCJ2b2x1bWUtMSIsUUopO3ZhciBaSj1bWyJwYXRoIix7ZDoiTTExIDQuNzAyYS43MDUuNzA1IDAgMCAwLTEuMjAzLS40OThMNi40MTMgNy41ODdBMS40IDEuNCAwIDAgMSA1LjQxNiA4SDNhMSAxIDAgMCAwLTEgMXY2YTEgMSAwIDAgMCAxIDFoMi40MTZhMS40IDEuNCAwIDAgMSAuOTk3LjQxM2wzLjM4MyAzLjM4NEEuNzA1LjcwNSAwIDAgMCAxMSAxOS4yOTh6IixrZXk6InVxajl1dyJ9XSxbInBhdGgiLHtkOiJNMTYgOWE1IDUgMCAwIDEgMCA2IixrZXk6IjFxNmsyYiJ9XSxbInBhdGgiLHtkOiJNMTkuMzY0IDE4LjM2NGE5IDkgMCAwIDAgMC0xMi43MjgiLGtleToiaWp3a2dhIn1dXSxYMj1xMSgidm9sdW1lLTIiLFpKKTt2YXIgWEo9W1sicGF0aCIse2Q6Ik0xOCA2IDYgMTgiLGtleToiMWJsNWY4In1dLFsicGF0aCIse2Q6Im02IDYgMTIgMTIiLGtleToiZDhiazZ2In1dXSxMMD1xMSgieCIsWEopO3ZhciBLMj17cG9ydHJhaXQ6ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXQifSxSMz17cG9ydHJhaXQ6ImxhbmRzY2FwZV9yaWdodCIsbGFuZHNjYXBlX3JpZ2h0OiJwb3J0cmFpdF91cHNpZGVfZG93biIscG9ydHJhaXRfdXBzaWRlX2Rvd246ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXQifSx4OT0xLFI5PTIsdTA9MyxqOT00O2Z1bmN0aW9uIFkyKCQpe3JldHVybiAkPj0wLjkzPzM6dm9pZCAwfWZ1bmN0aW9uIGozKCQpe3JldHVybiAkPT09ImxhbmRzY2FwZV9sZWZ0Inx8JD09PSJsYW5kc2NhcGVfcmlnaHQifWZ1bmN0aW9uIGwwKCQpe3JldHVybiEhJCYmKGozKCQub3JpZW50YXRpb24pfHwkLndpZHRoPiQuaGVpZ2h0KX1mdW5jdGlvbiB6NSgkKXtpZighJHx8JC53aWR0aDw9MHx8JC5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0IEo9ajMoJC5vcmllbnRhdGlvbil8fCQud2lkdGg+JC5oZWlnaHQsUT1KP01hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpOk1hdGgubWluKCQud2lkdGgsJC5oZWlnaHQpLFo9Sj9NYXRoLm1pbigkLndpZHRoLCQuaGVpZ2h0KTpNYXRoLm1heCgkLndpZHRoLCQuaGVpZ2h0KTtpZihRPT09JC53aWR0aCYmWj09PSQuaGVpZ2h0KXJldHVybiAkO3JldHVybnsuLi4kLHdpZHRoOlEsaGVpZ2h0Olp9fWZ1bmN0aW9uIGowKCQpe2xldCBKPXo1KCQpLFE9djkoJD8ub3JpZW50YXRpb24pLFo9TWF0aC5hYnMoUSk9PT05MCxLPSEhJCYmJC53aWR0aD4kLmhlaWdodCxZPVE9PT0xODB8fFomJiFLO3JldHVybntkaXNwbGF5Q29uZmlnOkoscm90YXRpb25EZWdyZWVzOlk/UTowLG5lZWRzQ3NzUm90YXRpb246WSxpbnB1dE9yaWVudGF0aW9uOlk/JD8ub3JpZW50YXRpb246dm9pZCAwfX1mdW5jdGlvbiB2OSgkKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJuIDkwO2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm4tOTA7Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJuIDE4MDtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiBONSgkLEosUSl7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybnt4OlEseToxLUp9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57eDoxLVEseTpKfTtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm57eDoxLUoseToxLVF9O2RlZmF1bHQ6cmV0dXJue3g6Six5OlF9fX1mdW5jdGlvbiBnOSgkLEosUSl7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybntkeDpRLGR5Oi1KfTtjYXNlImxhbmRzY2FwZV9yaWdodCI6cmV0dXJue2R4Oi1RLGR5Okp9O2Nhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnJldHVybntkeDotSixkeTotUX07ZGVmYXVsdDpyZXR1cm57ZHg6SixkeTpRfX19ZnVuY3Rpb24gcTIoJCxKKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6c3dpdGNoKEope2Nhc2UgMTpyZXR1cm4gMztjYXNlIDQ6cmV0dXJuIDI7Y2FzZSAyOnJldHVybiAxO2Nhc2UgMzpyZXR1cm4gNDtkZWZhdWx0OnJldHVybiBKfWNhc2UibGFuZHNjYXBlX3JpZ2h0Ijpzd2l0Y2goSil7Y2FzZSAxOnJldHVybiAyO2Nhc2UgNDpyZXR1cm4gMztjYXNlIDI6cmV0dXJuIDQ7Y2FzZSAzOnJldHVybiAxO2RlZmF1bHQ6cmV0dXJuIEp9Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6c3dpdGNoKEope2Nhc2UgMTpyZXR1cm4gNDtjYXNlIDQ6cmV0dXJuIDE7Y2FzZSAyOnJldHVybiAzO2Nhc2UgMzpyZXR1cm4gMjtkZWZhdWx0OnJldHVybiBKfWRlZmF1bHQ6cmV0dXJuIEp9fXZhciBoOT0xNjtmdW5jdGlvbiBWMigkLEosUSl7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gbnVsbDtsZXQgWj1OdW1iZXIuaXNGaW5pdGUoUSkmJlE+MD9ROjEsSz1KPT09MT8kKjE2Oko9PT0yPyQqWjokLFk9TWF0aC5tYXgoLTIwMCxNYXRoLm1pbigyMDAsSykpO3JldHVybiBNYXRoLmFicyhZKTwwLjAxP251bGw6WX1mdW5jdGlvbiB2MygkLEosUSl7aWYoIU51bWJlci5pc0Zpbml0ZSgkKSlyZXR1cm4gMDtsZXQgWj1OdW1iZXIuaXNGaW5pdGUoUSkmJlE+MD9ROjE7aWYoSj09PTEpcmV0dXJuICQqaDk7aWYoSj09PTIpcmV0dXJuICQqWjtyZXR1cm4gJH1mdW5jdGlvbiBmOSgkLEosUSl7aWYoIUp8fEoud2lkdGg8PTB8fEouaGVpZ2h0PD0wKXJldHVybiBudWxsO2xldCBaPUoub3JpZW50YXRpb249PT12b2lkIDAmJiQ/Lm9yaWVudGF0aW9uP3suLi5KLG9yaWVudGF0aW9uOiQub3JpZW50YXRpb259Oko7aWYoJCYmJC53aWR0aD09PVoud2lkdGgmJiQuaGVpZ2h0PT09Wi5oZWlnaHQmJiQub3JpZW50YXRpb249PT1aLm9yaWVudGF0aW9uKXJldHVybiBudWxsO3JldHVybntjb25maWc6Wixub3RpZnlQYXJlbnQ6UT09PSJyZXBvcnRlZCJ9fXZhciBLSj17WzFdOiJkZXNjcmlwdGlvbiIsWzJdOiJrZXlmcmFtZSIsWzNdOiJkZWx0YSIsWzRdOiJzZWVkIn07Y2xhc3MgUjJ7YnVmZmVyPW5ldyBVaW50OEFycmF5KDY1NTM2KTtsZW49MDtzdGFydD0wO2FwcGVuZCgkKXtpZih0aGlzLmxlbiskLmxlbmd0aD50aGlzLmJ1ZmZlci5sZW5ndGgpe2lmKHRoaXMuc3RhcnQ+MCl0aGlzLmJ1ZmZlci5jb3B5V2l0aGluKDAsdGhpcy5zdGFydCx0aGlzLmxlbiksdGhpcy5sZW4tPXRoaXMuc3RhcnQsdGhpcy5zdGFydD0wO2lmKHRoaXMubGVuKyQubGVuZ3RoPnRoaXMuYnVmZmVyLmxlbmd0aCl7bGV0IEo9dGhpcy5idWZmZXIubGVuZ3RoO3doaWxlKEo8dGhpcy5sZW4rJC5sZW5ndGgpSio9MjtsZXQgUT1uZXcgVWludDhBcnJheShKKTtRLnNldCh0aGlzLmJ1ZmZlci5zdWJhcnJheSgwLHRoaXMubGVuKSksdGhpcy5idWZmZXI9UX19dGhpcy5idWZmZXIuc2V0KCQsdGhpcy5sZW4pLHRoaXMubGVuKz0kLmxlbmd0aH1wdXNoKCQpe2lmKCQubGVuZ3RoPjApdGhpcy5hcHBlbmQoJCk7bGV0IEo9W10sUT10aGlzLmJ1ZmZlcjt3aGlsZSh0aGlzLmxlbi10aGlzLnN0YXJ0Pj00KXtsZXQgWj10aGlzLnN0YXJ0LEs9KFFbWl08PDI0fFFbWisxXTw8MTZ8UVtaKzJdPDw4fFFbWiszXSk+Pj4wO2lmKHRoaXMubGVuLVotNDxLKWJyZWFrO2lmKEs8MSl7dGhpcy5zdGFydCs9NDtjb250aW51ZX1sZXQgWT1RW1orNF0scT1LSltZXTtpZihxKUoucHVzaCh7dHlwZTpxLHBheWxvYWQ6US5zbGljZShaKzUsWis0K0spfSk7dGhpcy5zdGFydCs9NCtLfWlmKHRoaXMuc3RhcnQ+MCl7aWYodGhpcy5zdGFydDx0aGlzLmxlbil0aGlzLmJ1ZmZlci5jb3B5V2l0aGluKDAsdGhpcy5zdGFydCx0aGlzLmxlbik7dGhpcy5sZW4tPXRoaXMuc3RhcnQsdGhpcy5zdGFydD0wfXJldHVybiBKfXJlc2V0KCl7dGhpcy5sZW49MCx0aGlzLnN0YXJ0PTB9fWZ1bmN0aW9uIGczKCQpe2lmKCQubGVuZ3RoPDQpcmV0dXJuImF2YzEuNDJFMDFFIjtsZXQgSj0oUSk9PlEudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKTtyZXR1cm4iYXZjMS4iK0ooJFsxXSkrSigkWzJdKStKKCRbM10pfWZ1bmN0aW9uIHQwKCl7cmV0dXJuIHR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmdHlwZW9mIGdsb2JhbFRoaXMuVmlkZW9EZWNvZGVyPCJ1In12YXIgWUo9MTAwMCxxSj0xNjY2NztmdW5jdGlvbiBoMyh7dXJsOiQsZW5hYmxlZDpKLGNhbnZhc1JlZjpRLG9uRmlyc3RGcmFtZTpaLG9uRnJhbWU6SyxvbkVycm9yOlksb25EZWNvZGVyRXJyb3I6cX0pe2xldCBWPVQoe29uRmlyc3RGcmFtZTpaLG9uRnJhbWU6SyxvbkVycm9yOlksb25EZWNvZGVyRXJyb3I6cX0pO1YuY3VycmVudD17b25GaXJzdEZyYW1lOlosb25GcmFtZTpLLG9uRXJyb3I6WSxvbkRlY29kZXJFcnJvcjpxfSxfKCgpPT57aWYoIUp8fCEkfHwhdDAoKSlyZXR1cm47bGV0IEc9bmV3IEFib3J0Q29udHJvbGxlcixCPW5ldyBSMixOPSExLHo9ITEsVT0wLEg9bnVsbCxGPW51bGwsTD0oKT0+IU4mJiFHLnNpZ25hbC5hYm9ydGVkLGs9KGgpPT57aWYoVi5jdXJyZW50Lm9uRGVjb2RlckVycm9yKVYuY3VycmVudC5vbkRlY29kZXJFcnJvcigpO2Vsc2UgVi5jdXJyZW50Lm9uRXJyb3I/LihoKX0sQz0oaCxJLHUpPT57aWYoIUwoKSlyZXR1cm47bGV0IFoxPVEuY3VycmVudDtpZighWjEpcmV0dXJuO2lmKFoxLndpZHRoIT09SXx8WjEuaGVpZ2h0IT09dSlaMS53aWR0aD1JLFoxLmhlaWdodD11O2xldCByPVoxLmdldENvbnRleHQoIjJkIik7aWYoIXIpcmV0dXJuO2lmKHIuZHJhd0ltYWdlKGgsMCwwLEksdSksVi5jdXJyZW50Lm9uRnJhbWU/LigpLCF6KXo9ITAsVi5jdXJyZW50Lm9uRmlyc3RGcmFtZT8uKCl9LE89KCk9Pm5ldyBWaWRlb0RlY29kZXIoe291dHB1dDooaCk9Pnt0cnl7aWYoTCgpKUMoaCxoLmRpc3BsYXlXaWR0aCxoLmRpc3BsYXlIZWlnaHQpfWZpbmFsbHl7aC5jbG9zZSgpfX0sZXJyb3I6KGgpPT5rKGBkZWNvZGVyOiAke2gubWVzc2FnZX1gKX0pLHk9YXN5bmMoaCk9PntsZXQgST1hd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChuZXcgQmxvYihbaF0se3R5cGU6ImltYWdlL2pwZWcifSkpO3RyeXtpZihMKCkpQyhJLEkud2lkdGgsSS5oZWlnaHQpfWZpbmFsbHl7SS5jbG9zZSgpfX0sRT0oaCk9PntpZighRnx8Ri5zdGF0ZT09PSJjbG9zZWQiKUY9TygpO3RyeXtGLmNvbmZpZ3VyZSh7Y29kZWM6ZzMoaCksZGVzY3JpcHRpb246aCxvcHRpbWl6ZUZvcjoibGF0ZW5jeSIsaGFyZHdhcmVBY2NlbGVyYXRpb246InByZWZlci1oYXJkd2FyZSJ9KX1jYXRjaChJKXtrKGBjb25maWc6ICR7SS5tZXNzYWdlfWApfX0sdz0oaCxJKT0+e2lmKEY/LnN0YXRlIT09ImNvbmZpZ3VyZWQiKXJldHVybjt0cnl7Ri5kZWNvZGUobmV3IEVuY29kZWRWaWRlb0NodW5rKHt0eXBlOmg9PT0ia2V5ZnJhbWUiPyJrZXkiOiJkZWx0YSIsdGltZXN0YW1wOlUsZGF0YTpJfSkpLFUrPXFKfWNhdGNoe319LFM9KGgsSSk9Pntzd2l0Y2goaCl7Y2FzZSJzZWVkIjp5KEkpLmNhdGNoKCgpPT57fSk7cmV0dXJuO2Nhc2UiZGVzY3JpcHRpb24iOkUoSSk7cmV0dXJuO2Nhc2Uia2V5ZnJhbWUiOmNhc2UiZGVsdGEiOncoaCxJKTtyZXR1cm59fSxRMT0oKT0+e2lmKCFMKCl8fEgpcmV0dXJuO0g9c2V0VGltZW91dCgoKT0+e0g9bnVsbCxnKCl9LFlKKX0sZz1hc3luYygpPT57Qi5yZXNldCgpO3RyeXtsZXQgST0oYXdhaXQgZmV0Y2goYCR7JH0vc3RyZWFtLmF2Y2NgLHtzaWduYWw6Ry5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIUkpcmV0dXJuO2Zvcig7Oyl7bGV0e2RvbmU6dSx2YWx1ZTpaMX09YXdhaXQgSS5yZWFkKCk7aWYodSlicmVhaztpZighWjEpY29udGludWU7Zm9yKGxldCByIG9mIEIucHVzaChaMSkpUyhyLnR5cGUsci5wYXlsb2FkKX19Y2F0Y2h7fWZpbmFsbHl7aWYoTCgpKVExKCl9fTtyZXR1cm4gZygpLCgpPT57aWYoTj0hMCxIKWNsZWFyVGltZW91dChIKTtpZihHLmFib3J0KCksQi5yZXNldCgpLEYmJkYuc3RhdGUhPT0iY2xvc2VkIil0cnl7Ri5jbG9zZSgpfWNhdGNoe31GPW51bGx9fSxbJCxKLFFdKX12YXIgbTk9InNlcnZlLXNpbTp0aGVtZSIscDk9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiO2Z1bmN0aW9uIFZKKCQpe3JldHVybiAkPT09ImxpZ2h0Inx8JD09PSJkYXJrInx8JD09PSJzeXN0ZW0iPyQ6InN5c3RlbSJ9ZnVuY3Rpb24gZjMoJCxKKXtpZigkPT09InN5c3RlbSIpcmV0dXJuIEo/ImRhcmsiOiJsaWdodCI7cmV0dXJuICR9ZnVuY3Rpb24gajIoJCl7dHJ5e3JldHVybiBWSigkPy5nZXRJdGVtKCJzZXJ2ZS1zaW06dGhlbWUiKSl9Y2F0Y2h7cmV0dXJuInN5c3RlbSJ9fWZ1bmN0aW9uIHU5KCQsSil7dHJ5e2lmKEo9PT0ic3lzdGVtIikkPy5yZW1vdmVJdGVtKCJzZXJ2ZS1zaW06dGhlbWUiKTtlbHNlICQ/LnNldEl0ZW0oInNlcnZlLXNpbTp0aGVtZSIsSil9Y2F0Y2h7fX1mdW5jdGlvbiBsOSgkKXtyZXR1cm4gdHlwZW9mICQ/Lm1hdGNoTWVkaWE9PT0iZnVuY3Rpb24iPyQubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpLm1hdGNoZXM6ITB9ZnVuY3Rpb24gbTMoJCxKKXtpZigkLmdldEF0dHJpYnV0ZSgiZGF0YS10aGVtZSIpIT09SikkLnNldEF0dHJpYnV0ZSgiZGF0YS10aGVtZSIsSil9ZnVuY3Rpb24gZDkoJCl7cmV0dXJuYCR7TWF0aC5yb3VuZCgkKjEwMDApLzEwfSVgfWZ1bmN0aW9uIFQxKCQpe3JldHVybmBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tc2VydmUtc2ltLWluaywgI2ZmZikgJHtkOSgkKX0sIHRyYW5zcGFyZW50KWB9ZnVuY3Rpb24gZDEoJCl7cmV0dXJuYGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1zZXJ2ZS1zaW0taW5rLCAjZmZmKSBjYWxjKDEwMCUgLSAke2Q5KDEtJCl9ICogdmFyKC0tc2VydmUtc2ltLXRleHQtaywgMSkpLCB0cmFuc3BhcmVudClgfXZhciBHSj0wO2Z1bmN0aW9uIFgoJCxKLFEsWixLLFkpe0p8fChKPXt9KTt2YXIgcSxWLEc9SjtpZigicmVmImluIEcpZm9yKFYgaW4gRz17fSxKKVY9PSJyZWYiP3E9SltWXTpHW1ZdPUpbVl07dmFyIEI9e3R5cGU6JCxwcm9wczpHLGtleTpRLHJlZjpxLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjotLUdKLF9faTotMSxfX3U6MCxfX3NvdXJjZTpLLF9fc2VsZjpZfTtpZih0eXBlb2YgJD09ImZ1bmN0aW9uIiYmKHE9JC5kZWZhdWx0UHJvcHMpKWZvcihWIGluIHEpR1tWXT09PXZvaWQgMCYmKEdbVl09cVtWXSk7cmV0dXJuIHQudm5vZGUmJnQudm5vZGUoQiksQn12YXIgYzk9YHVybCgiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCclM0UlM0NjaXJjbGUgY3g9JzEyJyBjeT0nMTInIHI9JzknIGZpbGw9J3JnYmEoMjU1LDI1NSwyNTUsMC40NSknIHN0cm9rZT0ncmdiYSgwLDAsMCwwLjU1KScgc3Ryb2tlLXdpZHRoPScxLjI1JyBmaWx0ZXI9J2Ryb3Atc2hhZG93KDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuNDUpKScvJTNFJTNDL3N2ZyUzRSIpIDEyIDEyLCBwb2ludGVyYCxCSj0xLjAwNCx6Sj0zLE5KPTQsVUo9NSxMSj0xMCxISj0xMTtmdW5jdGlvbiB2Mih7dXJsOiQsd3NVcmw6SixzdHlsZTpRLGltYWdlU3R5bGU6WixjbGFzc05hbWU6SyxvbkhvbWVQcmVzczpZLG9uU3RyZWFtVG91Y2g6cSxvblN0cmVhbU11bHRpVG91Y2g6VixvblN0cmVhbUJ1dHRvbjpHLG9uU3RyZWFtRGlnaXRhbENyb3duOkIsb25TdHJlYW1TY3JvbGw6TixlbmFibGVEaWdpdGFsQ3Jvd246eixzdWJzY3JpYmVGcmFtZTpVLHN0cmVhbUZyYW1lOkgsc3RyZWFtQ29uZmlnOkYsb25TY3JlZW5Db25maWdDaGFuZ2U6TCxoaWRlQ29udHJvbHM6ayxvblN0cmVhbWluZ0NoYW5nZTpDLGNvbm5lY3Rpb25RdWFsaXR5Ok8sY29kZWM6eT0iYXZjYyIsb25BdmNjRXJyb3I6RX0pe2xldCB3PSEhcSxTPXk9PT0iYXZjYyImJnQwKCksUTE9VChudWxsKSxnPVQobnVsbCksaD1UKG51bGwpLEk9VChudWxsKSx1PVQobnVsbCksWjE9VChudWxsKSxbcixNMV09QSghMSksW0oxLGldPUEobnVsbCksW2YsVTFdPUEobnVsbCksWDE9VChudWxsKSxCMT1UKEwpO0IxLmN1cnJlbnQ9TDtsZXQgRjE9VChudWxsKSxbVzEsb109QShudWxsKTtfKCgpPT57bGV0IEQ9RjEuY3VycmVudDtpZighRHx8dHlwZW9mIFJlc2l6ZU9ic2VydmVyPiJ1IilyZXR1cm47bGV0IE09bmV3IFJlc2l6ZU9ic2VydmVyKChSKT0+e2xldCBsPVJbMF0/LmNvbnRlbnRSZWN0O2lmKGwpbyh7d2lkdGg6bC53aWR0aCxoZWlnaHQ6bC5oZWlnaHR9KX0pO3JldHVybiBNLm9ic2VydmUoRCksKCk9Pk0uZGlzY29ubmVjdCgpfSxbXSk7bGV0W2MsZF09QSgwKSxuPVQoMCksW1kxLGJdPUEoITEpLGo9VChudWxsKTtfKCgpPT57aWYoTz09PSJwb29yIil7aWYoYighMCksai5jdXJyZW50KWNsZWFyVGltZW91dChqLmN1cnJlbnQpO2ouY3VycmVudD1zZXRUaW1lb3V0KCgpPT57YighMSksai5jdXJyZW50PW51bGx9LDMwMDApfWVsc2UgaWYoYighMSksai5jdXJyZW50KWNsZWFyVGltZW91dChqLmN1cnJlbnQpLGouY3VycmVudD1udWxsO3JldHVybigpPT57aWYoai5jdXJyZW50KWNsZWFyVGltZW91dChqLmN1cnJlbnQpfX0sW09dKTtsZXQgTjE9YCR7JH0vc3RyZWFtLm1qcGVnYDtfKCgpPT57WDEuY3VycmVudD1udWxsLFUxKG51bGwpfSxbJF0pO2xldCBDMT1QKChELE09InJlcG9ydGVkIik9PntsZXQgUj1mOShYMS5jdXJyZW50LEQsTSk7aWYoIVIpcmV0dXJuO2lmKFgxLmN1cnJlbnQ9Ui5jb25maWcsVTEoUi5jb25maWcpLFIubm90aWZ5UGFyZW50KUIxLmN1cnJlbnQ/LihSLmNvbmZpZyl9LFtdKSxwPVQoQyk7cC5jdXJyZW50PUMsXygoKT0+e3AuY3VycmVudD8uKHIpfSxbcl0pLF8oKCk9PntpZih3JiZGKUMxKEYsImV4dGVybmFsIil9LFt3LEYsQzFdKTtsZXQgZT1UKCExKTtlLmN1cnJlbnQ9cjtsZXQgazE9VChudWxsKSxQMT1UKG51bGwpO18oKCk9PntpZighd3x8IVV8fFMpcmV0dXJuO2xldCBNPXNldFRpbWVvdXQoKCk9PntpZighZS5jdXJyZW50KWkoIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKSxSPXJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiBHMSgpe2xldCBMMT1rMS5jdXJyZW50O2lmKEwxKXtrMS5jdXJyZW50PW51bGw7bGV0IF8xPWguY3VycmVudDtpZihfMSl7aWYoUDEuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKFAxLmN1cnJlbnQpO1AxLmN1cnJlbnQ9TDEsXzEuc3JjPUwxLG4uY3VycmVudCsrfWVsc2UgVVJMLnJldm9rZU9iamVjdFVSTChMMSl9Uj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoRzEpfSksbD1VKChHMSk9PntpZih1MS5jdXJyZW50PURhdGUubm93KCksazEuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKGsxLmN1cnJlbnQpO2lmKGsxLmN1cnJlbnQ9RzEsIWUuY3VycmVudCljbGVhclRpbWVvdXQoTSksTTEoITApLGkobnVsbCl9KTtyZXR1cm4oKT0+e2lmKGNsZWFyVGltZW91dChNKSxjYW5jZWxBbmltYXRpb25GcmFtZShSKSxsPy4oKSxrMS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoazEuY3VycmVudCksazEuY3VycmVudD1udWxsO2lmKFAxLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChQMS5jdXJyZW50KSxQMS5jdXJyZW50PW51bGx9fSxbdyxVLFNdKTtsZXQgZzE9UCgoKT0+e3UxLmN1cnJlbnQ9RGF0ZS5ub3coKSxNMSghMCksaShudWxsKX0sW10pLHAxPVAoKCk9PntpZihuLmN1cnJlbnQrKyx1MS5jdXJyZW50PURhdGUubm93KCksIWUuY3VycmVudClNMSghMCksaShudWxsKX0sW10pO2gzKHt1cmw6JCxlbmFibGVkOlMsY2FudmFzUmVmOmcsb25GaXJzdEZyYW1lOmcxLG9uRnJhbWU6cDEsb25FcnJvcjppLG9uRGVjb2RlckVycm9yOkV9KTtsZXQgajE9UCgoRCk9PntsZXQgTT1qMChYMS5jdXJyZW50KS5pbnB1dE9yaWVudGF0aW9uLFI9TjUoTSxELngsRC55KSxsPUQuZWRnZT09PXZvaWQgMD92b2lkIDA6cTIoTSxELmVkZ2UpLEcxPWw9PT12b2lkIDA/e3R5cGU6RC50eXBlLC4uLlJ9Ont0eXBlOkQudHlwZSwuLi5SLGVkZ2U6bH07aWYodyl7cT8uKEcxKTtyZXR1cm59bGV0IEwxPVoxLmN1cnJlbnQ7aWYoIUwxfHxMMS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBfMT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoRzEpKSx3MT1uZXcgVWludDhBcnJheSgxK18xLmxlbmd0aCk7dzFbMF09ekosdzEuc2V0KF8xLDEpLEwxLnNlbmQodzEpfSxbdyxxXSksYTE9UCgoRCk9PntpZih3KXtHPy4oRCk7cmV0dXJufWxldCBNPVoxLmN1cnJlbnQ7aWYoIU18fE0ucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgUj1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoe2J1dHRvbjpEfSkpLGw9bmV3IFVpbnQ4QXJyYXkoMStSLmxlbmd0aCk7bFswXT1OSixsLnNldChSLDEpLE0uc2VuZChsKX0sW3csR10pLGswPVAoKEQpPT57aWYoIU51bWJlci5pc0Zpbml0ZShEKXx8RD09PTApcmV0dXJuO2lmKHcpe0I/LihEKTtyZXR1cm59bGV0IE09WjEuY3VycmVudDtpZighTXx8TS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBSPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh7ZGVsdGE6RH0pKSxsPW5ldyBVaW50OEFycmF5KDErUi5sZW5ndGgpO2xbMF09TEosbC5zZXQoUiwxKSxNLnNlbmQobCl9LFt3LEJdKSxWMD1QKChELE0sUixsKT0+e2lmKCFOdW1iZXIuaXNGaW5pdGUoRCl8fCFOdW1iZXIuaXNGaW5pdGUoTSl8fEQ9PT0wJiZNPT09MClyZXR1cm47bGV0IEcxPWowKFgxLmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24sTDE9ZzkoRzEsRCxNKSxfMT1ONShHMSxSLGwpLHcxPXtkeDpMMS5keCxkeTpMMS5keSx4Ol8xLngseTpfMS55fTtpZih3KXtOPy4odzEpO3JldHVybn1sZXQgSjA9WjEuY3VycmVudDtpZighSjB8fEowLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IEs1PW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh3MSkpLFAwPW5ldyBVaW50OEFycmF5KDErSzUubGVuZ3RoKTtQMFswXT1ISixQMC5zZXQoSzUsMSksSjAuc2VuZChQMCl9LFt3LE5dKSxEMT1QKChEKT0+e2xldCBNPWowKFgxLmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24sUj1ONShNLEQueDEsRC55MSksbD1ONShNLEQueDIsRC55MiksRzE9e3R5cGU6RC50eXBlLHgxOlIueCx5MTpSLnkseDI6bC54LHkyOmwueX07aWYodyl7Vj8uKEcxKTtyZXR1cm59bGV0IEwxPVoxLmN1cnJlbnQ7aWYoIUwxfHxMMS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCBfMT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoRzEpKSx3MT1uZXcgVWludDhBcnJheSgxK18xLmxlbmd0aCk7dzFbMF09VUosdzEuc2V0KF8xLDEpLEwxLnNlbmQodzEpfSxbdyxWXSk7XygoKT0+e2lmKHcpcmV0dXJuO2xldCBEPUo/PyQucmVwbGFjZSgvXmh0dHAvLCJ3cyIpKyIvd3MiLE09bmV3IFdlYlNvY2tldChEKTtNLmJpbmFyeVR5cGU9ImFycmF5YnVmZmVyIixaMS5jdXJyZW50PU0sTS5vbm1lc3NhZ2U9KF8xKT0+e2lmKCEoXzEuZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm47bGV0IHcxPW5ldyBVaW50OEFycmF5KF8xLmRhdGEpO2lmKHcxLmxlbmd0aDwxfHx3MVswXSE9PTEzMClyZXR1cm47dHJ5e0MxKEpTT04ucGFyc2UobmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKHcxLnN1YmFycmF5KDEpKSkpfWNhdGNoe319LE0ub25vcGVuPSgpPT57aWYoIVMpTTEoITApO2kobnVsbCl9LE0ub25jbG9zZT0oKT0+e00xKCExKX0sTS5vbmVycm9yPSgpPT57aSgiV2ViU29ja2V0IGNvbm5lY3Rpb24gZmFpbGVkIiksTTEoITEpfTtsZXQgUj1uZXcgQWJvcnRDb250cm9sbGVyLGw9c2V0SW50ZXJ2YWwoKCk9PntkKG4uY3VycmVudCksbi5jdXJyZW50PTB9LDEwMDApLEcxPSExLEwxPVM/bnVsbDpzZXRUaW1lb3V0KCgpPT57aWYoIUcxKWkoIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKTtpZighUykoYXN5bmMoKT0+e3RyeXtsZXQgdzE9KGF3YWl0IGZldGNoKE4xLHtzaWduYWw6Ui5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIXcxKXJldHVybjtsZXQgSjA9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCItLWZyYW1lIik7d2hpbGUoITApe2xldHtkb25lOks1LHZhbHVlOlAwfT1hd2FpdCB3MS5yZWFkKCk7aWYoSzUpYnJlYWs7aWYoUDApZm9yKGxldCB3NT0wO3c1PD1QMC5sZW5ndGgtSjAubGVuZ3RoO3c1Kyspe2xldCBZNT0hMDtmb3IobGV0IGkwPTA7aTA8SjAubGVuZ3RoO2kwKyspaWYoUDBbdzUraTBdIT09SjBbaTBdKXtZNT0hMTticmVha31pZihZNSl7aWYobi5jdXJyZW50KyssIUcxKXtpZihHMT0hMCxMMSljbGVhclRpbWVvdXQoTDEpfX19fX1jYXRjaHt9fSkoKTtyZXR1cm4oKT0+e2lmKFIuYWJvcnQoKSxjbGVhckludGVydmFsKGwpLEwxKWNsZWFyVGltZW91dChMMSk7TS5jbG9zZSgpLFoxLmN1cnJlbnQ9bnVsbH19LFskLE4xLHcsQzEsSixTXSk7bGV0IHUxPVQoMCk7XygoKT0+e2lmKCF3KXJldHVybjtsZXQgRD0yMDAwLE09KCk9PntsZXQgRzE9dTEuY3VycmVudDtpZighRzF8fCFlLmN1cnJlbnQpcmV0dXJuO2lmKERhdGUubm93KCktRzE+RClNMSghMSl9LFI9c2V0SW50ZXJ2YWwoKCk9PntkKG4uY3VycmVudCksbi5jdXJyZW50PTAsTSgpfSwxMDAwKSxsPSgpPT57aWYoIWRvY3VtZW50LmhpZGRlbilNKCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixsKSwoKT0+e2NsZWFySW50ZXJ2YWwoUiksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsbCl9fSxbd10pO2xldCBDMD1QKCgpPT57aWYoUylyZXR1cm4gZy5jdXJyZW50O3JldHVybiB3P2guY3VycmVudDpRMS5jdXJyZW50fSxbdyxTXSksVjE9UCgoKT0+e3JldHVybiBJLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9DMCgpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKT8/bnVsbH0sW0MwXSksWjA9UCgoRCxNKT0+e2xldCBSPVYxKCk7aWYoIVIpcmV0dXJuO2xldCBsPShNLmNsaWVudFgtUi5sZWZ0KS9SLndpZHRoLEcxPShNLmNsaWVudFktUi50b3ApL1IuaGVpZ2h0O2oxKHt0eXBlOkQseDpsLHk6RzF9KX0sW1YxLGoxXSksYjA9UCgoRCxNKT0+e2xldCBsPVYxKCk/LmhlaWdodHx8MSxHMT1WMihELE0sbCk7aWYoRzE9PT1udWxsKXJldHVybiExO3JldHVybiBrMChHMSksITB9LFtWMSxrMF0pLGgxPVQoITEpLGMxPVQoITEpLHMxPVQoITEpLGUxPVQoe2R4OjAsZHk6MH0pLHQxPVQoITEpLFt5MCx2MF09QSghMSksUzA9VCh7eDowLjUseTowLjV9KSxbJDAsRTFdPUEobnVsbCk7XygoKT0+e2xldCBEPShSKT0+e2lmKFIua2V5PT09IkFsdCIpdjAoITApfSxNPShSKT0+e2lmKFIua2V5PT09IkFsdCIpe2lmKHYwKCExKSwhYzEuY3VycmVudClFMShudWxsKX19O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsRCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixNKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixEKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLE0pfX0sW10pLF8oKCk9PntpZih5MCYmIWMxLmN1cnJlbnQpe2xldCBEPVMwLmN1cnJlbnQ7RTEoe3gxOkQueCx5MTpELnkseDI6MS1ELngseTI6MS1ELnl9KX1lbHNlIGlmKCF5MCYmIWMxLmN1cnJlbnQpRTEobnVsbCl9LFt5MF0pO2xldCBHMD1UKG51bGwpLGYxPVQoITEpLEIwPVQoMCksRjA9UCgoRCxNKT0+e2YxLmN1cnJlbnQ9ITA7bGV0IFI9RzAuY3VycmVudDtpZihSKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEIwLmN1cnJlbnQpLEIwLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57Ui5zdHlsZS5sZWZ0PWAke0QqMTAwfSVgLFIuc3R5bGUudG9wPWAke00qMTAwfSVgLFIuc3R5bGUuZGlzcGxheT0iYmxvY2sifSl9LFtdKSxRMD1QKChELE0pPT57aWYoIWYxLmN1cnJlbnQpcmV0dXJuO2xldCBSPUcwLmN1cnJlbnQ7aWYoUiljYW5jZWxBbmltYXRpb25GcmFtZShCMC5jdXJyZW50KSxCMC5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e1Iuc3R5bGUubGVmdD1gJHtEKjEwMH0lYCxSLnN0eWxlLnRvcD1gJHtNKjEwMH0lYH0pfSxbXSksQTA9UCgoKT0+e2YxLmN1cnJlbnQ9ITE7bGV0IEQ9RzAuY3VycmVudDtpZihEKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEIwLmN1cnJlbnQpLEQuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LFtdKSxXPVAoKEQpPT57aWYoZjEuY3VycmVudHx8YzEuY3VycmVudClyZXR1cm4hMTtsZXQgTT1WMSgpO2lmKCFNKXJldHVybiExO2xldCBSPXYzKEQuZGVsdGFYLEQuZGVsdGFNb2RlLE0ud2lkdGgpLGw9djMoRC5kZWx0YVksRC5kZWx0YU1vZGUsTS5oZWlnaHQpO2lmKFI9PT0wJiZsPT09MClyZXR1cm4hMTtsZXQgRzE9TWF0aC5taW4oTWF0aC5tYXgoKEQuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsMCksMSksTDE9TWF0aC5taW4oTWF0aC5tYXgoKEQuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQsMCksMSk7cmV0dXJuIFYwKFIvTS53aWR0aCxsL00uaGVpZ2h0LEcxLEwxKSwhMH0sW1YxLFYwXSk7XygoKT0+e2xldCBEPXUuY3VycmVudDtpZighRClyZXR1cm47bGV0IE09KFIpPT57aWYoISh6P2IwKFIuZGVsdGFZLFIuZGVsdGFNb2RlKTpXKFIpKSlyZXR1cm47Ui5wcmV2ZW50RGVmYXVsdCgpLFIuc3RvcFByb3BhZ2F0aW9uKCl9O3JldHVybiBELmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixNLHtwYXNzaXZlOiExfSksKCk9PkQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLE0pfSxbeixiMCxXXSk7bGV0IG09VCgwKSxhPVQobnVsbCksSDE9UCgoKT0+e2xldCBEPURhdGUubm93KCksTT1ELW0uY3VycmVudDtpZihtLmN1cnJlbnQ9RCxNPDMwMCl7aWYoYS5jdXJyZW50KWNsZWFyVGltZW91dChhLmN1cnJlbnQpLGEuY3VycmVudD1udWxsO2lmKFkpWSgpO2Vsc2UgYTEoImFwcF9zd2l0Y2hlciIpfWVsc2UgYS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntpZihZKVkoKTtlbHNlIGExKCJob21lIik7YS5jdXJyZW50PW51bGx9LDMwMCl9LFthMSxZXSksQTE9ajAoZiksejE9QTEuZGlzcGxheUNvbmZpZyxPMT0oKCk9PntpZighejF8fCFXMSlyZXR1cm4gbnVsbDtpZihXMS53aWR0aD09PTB8fFcxLmhlaWdodD09PTApcmV0dXJuIG51bGw7bGV0IEQ9TWF0aC5taW4oVzEud2lkdGgvejEud2lkdGgsVzEuaGVpZ2h0L3oxLmhlaWdodCk7cmV0dXJue3dpZHRoOnoxLndpZHRoKkQsaGVpZ2h0OnoxLmhlaWdodCpEfX0pKCksWDA9QTEucm90YXRpb25EZWdyZWVzLGkxPUExLm5lZWRzQ3NzUm90YXRpb24mJk1hdGguYWJzKFgwKT09PTkwLG8xPVosejA9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiI1MCUiLGxlZnQ6IjUwJSIsd2lkdGg6aTEmJk8xP2Ake08xLmhlaWdodH1weGA6IjEwMCUiLGhlaWdodDppMSYmTzE/YCR7TzEud2lkdGh9cHhgOiIxMDAlIix0cmFuc2Zvcm06YHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSR7WDA9PT0wPyIiOmAgcm90YXRlKCR7WDB9ZGVnKWB9YCx0cmFuc2Zvcm1PcmlnaW46ImNlbnRlciBjZW50ZXIiLGN1cnNvcjpjOSxkaXNwbGF5OiJibG9jayIsdXNlclNlbGVjdDoibm9uZSIsV2Via2l0VXNlclNlbGVjdDoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUiLC4uLlosLi4uWDA9PT0wP3t9Ontib3JkZXJSYWRpdXM6MCxjb3JuZXJTaGFwZTp2b2lkIDB9fSxOMD17Li4uejAsdHJhbnNmb3JtOmAke3owLnRyYW5zZm9ybT8/IiJ9IHNjYWxlKCR7Qkp9KWB9O3JldHVybiBYKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixmbGV4OjEsLi4uaz97fTp7Ym9yZGVyOmAxcHggc29saWQgJHtUMSgwLjEyKX1gfSxvdmVyZmxvdzoiaGlkZGVuIixtaW5XaWR0aDowLG1pbkhlaWdodDowLC4uLlF9LGNsYXNzTmFtZTpLLGNoaWxkcmVuOltYKCJkaXYiLHtyZWY6RjEsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsZmxleDoxLG1pbkhlaWdodDowLG1pbldpZHRoOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIn0sY2hpbGRyZW46WCgiZGl2Iix7cmVmOkksc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsd2lkdGg6TzE/YCR7TzEud2lkdGh9cHhgOiIxMDAlIixoZWlnaHQ6TzE/YCR7TzEuaGVpZ2h0fXB4YDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsYm9yZGVyUmFkaXVzOm8xPy5ib3JkZXJSYWRpdXMsY29ybmVyU2hhcGU6bzE/LmNvcm5lclNoYXBlfSxjaGlsZHJlbjpbUz9YKCJjYW52YXMiLHtyZWY6ZyxzdHlsZTpOMH0pOlgoImltZyIse3JlZjpRMSxzcmM6dz92b2lkIDA6TjEsZHJhZ2dhYmxlOiExLG9uTG9hZDooRCk9PntsZXQgTT1ELmN1cnJlbnRUYXJnZXQ7aWYoTS5uYXR1cmFsV2lkdGg+MCYmTS5uYXR1cmFsSGVpZ2h0PjApQzEoe3dpZHRoOk0ubmF0dXJhbFdpZHRoLGhlaWdodDpNLm5hdHVyYWxIZWlnaHR9KX0sc3R5bGU6dz97ZGlzcGxheToibm9uZSJ9OnowfSksdyYmIVMmJlgoImltZyIse3JlZjpoLGRyYWdnYWJsZTohMSxvbkxvYWQ6KEQpPT57bGV0IE09RC5jdXJyZW50VGFyZ2V0O2lmKE0ubmF0dXJhbFdpZHRoPjAmJk0ubmF0dXJhbEhlaWdodD4wKUMxKHt3aWR0aDpNLm5hdHVyYWxXaWR0aCxoZWlnaHQ6TS5uYXR1cmFsSGVpZ2h0fSl9LHN0eWxlOnowfSksWCgiZGl2Iix7cmVmOnUsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxjdXJzb3I6YzksdG91Y2hBY3Rpb246Im5vbmUifSxvbk1vdXNlRG93bjooRCk9PntELnByZXZlbnREZWZhdWx0KCk7bGV0IE09VjEoKTtpZighTSlyZXR1cm47bGV0IFI9KEQuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsbD0oRC5jbGllbnRZLU0udG9wKS9NLmhlaWdodDtpZihELmFsdEtleSl7YzEuY3VycmVudD0hMCxzMS5jdXJyZW50PUQuc2hpZnRLZXk7bGV0IEwxPXt4MTpSLHkxOmwseDI6MS1SLHkyOjEtbH07ZTEuY3VycmVudD17ZHg6MS1SLVIsZHk6MS1sLWx9LEUxKEwxKSxEMSh7dHlwZToiYmVnaW4iLC4uLkwxfSk7cmV0dXJufUYwKFIsbCk7bGV0IEcxPVkyKGwpO2lmKEcxIT09dm9pZCAwKWgxLmN1cnJlbnQ9ITAsajEoe3R5cGU6ImJlZ2luIix4OlIseTpsLGVkZ2U6RzF9KTtlbHNlIGgxLmN1cnJlbnQ9ITEsWjAoImJlZ2luIixEKX0sb25Nb3VzZU1vdmU6KEQpPT57bGV0IE09VjEoKTtpZighTSlyZXR1cm47bGV0IFI9KEQuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsbD0oRC5jbGllbnRZLU0udG9wKS9NLmhlaWdodDtpZihTMC5jdXJyZW50PXt4OlIseTpsfSxELmJ1dHRvbnM9PT0wKXtpZihELmFsdEtleSlFMSh7eDE6Uix5MTpsLHgyOjEtUix5MjoxLWx9KTtyZXR1cm59aWYoYzEuY3VycmVudCl7bGV0IEcxO2lmKHMxLmN1cnJlbnQpe2xldCBMMT1lMS5jdXJyZW50O0cxPXt4MTpSLHkxOmwseDI6UitMMS5keCx5MjpsK0wxLmR5fX1lbHNlIEcxPXt4MTpSLHkxOmwseDI6MS1SLHkyOjEtbH07RTEoRzEpLEQxKHt0eXBlOiJtb3ZlIiwuLi5HMX0pO3JldHVybn1pZihRMChSLGwpLGgxLmN1cnJlbnQpajEoe3R5cGU6Im1vdmUiLHg6Uix5OmwsZWRnZTp1MH0pO2Vsc2UgWjAoIm1vdmUiLEQpfSxvbk1vdXNlVXA6KEQpPT57aWYoYzEuY3VycmVudCl7bGV0IE09VjEoKTtpZihNKXtsZXQgUj0oRC5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCxsPShELmNsaWVudFktTS50b3ApL00uaGVpZ2h0O2lmKHMxLmN1cnJlbnQpe2xldCBHMT1lMS5jdXJyZW50O0QxKHt0eXBlOiJlbmQiLHgxOlIseTE6bCx4MjpSK0cxLmR4LHkyOmwrRzEuZHl9KX1lbHNlIEQxKHt0eXBlOiJlbmQiLHgxOlIseTE6bCx4MjoxLVIseTI6MS1sfSl9aWYoYzEuY3VycmVudD0hMSwhRC5hbHRLZXkpRTEobnVsbCk7cmV0dXJufWlmKEEwKCksaDEuY3VycmVudCl7bGV0IE09VjEoKTtpZihNKXtsZXQgUj0oRC5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCxsPShELmNsaWVudFktTS50b3ApL00uaGVpZ2h0O2oxKHt0eXBlOiJlbmQiLHg6Uix5OmwsZWRnZTp1MH0pfWgxLmN1cnJlbnQ9ITE7cmV0dXJufVowKCJlbmQiLEQpfSxvbk1vdXNlTGVhdmU6KEQpPT57aWYoYzEuY3VycmVudCl7aWYoJDApRDEoe3R5cGU6ImVuZCIsLi4uJDB9KTtjMS5jdXJyZW50PSExLEUxKG51bGwpO3JldHVybn1pZihBMCgpLGgxLmN1cnJlbnQpe2xldCBNPVYxKCk7aWYoTSl7bGV0IFI9KEQuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsbD0oRC5jbGllbnRZLU0udG9wKS9NLmhlaWdodDtqMSh7dHlwZToiZW5kIix4OlIseTpsLGVkZ2U6dTB9KX1oMS5jdXJyZW50PSExO3JldHVybn1pZihELmJ1dHRvbnM+MClaMCgiZW5kIixEKTtFMShudWxsKX0sb25Ub3VjaFN0YXJ0OihEKT0+e0QucHJldmVudERlZmF1bHQoKTtsZXQgTT1WMSgpO2lmKCFNKXJldHVybjtpZihELnRvdWNoZXMubGVuZ3RoPj0yKXtBMCgpO2xldCBfMT1ELnRvdWNoZXNbMF0sdzE9RC50b3VjaGVzWzFdLEowPXt4MTooXzEuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgseTE6KF8xLmNsaWVudFktTS50b3ApL00uaGVpZ2h0LHgyOih3MS5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCx5MjoodzEuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHR9O2lmKCF0MS5jdXJyZW50JiYhaDEuY3VycmVudClqMSh7dHlwZToiZW5kIix4OkowLngxLHk6SjAueTF9KTt0MS5jdXJyZW50PSEwLGMxLmN1cnJlbnQ9ITAsaDEuY3VycmVudD0hMSxFMShKMCksRDEoe3R5cGU6ImJlZ2luIiwuLi5KMH0pO3JldHVybn1sZXQgUj1ELnRvdWNoZXNbMF07aWYoIVIpcmV0dXJuO2xldCBsPShSLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLEcxPShSLmNsaWVudFktTS50b3ApL00uaGVpZ2h0O0YwKGwsRzEpO2xldCBMMT1ZMihHMSk7aWYoTDEhPT12b2lkIDApaDEuY3VycmVudD0hMCxqMSh7dHlwZToiYmVnaW4iLHg6bCx5OkcxLGVkZ2U6TDF9KTtlbHNlIGgxLmN1cnJlbnQ9ITEsajEoe3R5cGU6ImJlZ2luIix4OmwseTpHMX0pfSxvblRvdWNoTW92ZTooRCk9PntELnByZXZlbnREZWZhdWx0KCk7bGV0IE09VjEoKTtpZighTSlyZXR1cm47aWYodDEuY3VycmVudCYmRC50b3VjaGVzLmxlbmd0aD49Mil7bGV0IEwxPUQudG91Y2hlc1swXSxfMT1ELnRvdWNoZXNbMV0sdzE9e3gxOihMMS5jbGllbnRYLU0ubGVmdCkvTS53aWR0aCx5MTooTDEuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQseDI6KF8xLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLHkyOihfMS5jbGllbnRZLU0udG9wKS9NLmhlaWdodH07RTEodzEpLEQxKHt0eXBlOiJtb3ZlIiwuLi53MX0pO3JldHVybn1sZXQgUj1ELnRvdWNoZXNbMF07aWYoIVIpcmV0dXJuO2xldCBsPShSLmNsaWVudFgtTS5sZWZ0KS9NLndpZHRoLEcxPShSLmNsaWVudFktTS50b3ApL00uaGVpZ2h0O2lmKFEwKGwsRzEpLGgxLmN1cnJlbnQpajEoe3R5cGU6Im1vdmUiLHg6bCx5OkcxLGVkZ2U6dTB9KTtlbHNlIGoxKHt0eXBlOiJtb3ZlIix4OmwseTpHMX0pfSxvblRvdWNoRW5kOihEKT0+e0QucHJldmVudERlZmF1bHQoKTtsZXQgTT1WMSgpO2lmKCFNKXJldHVybjtpZih0MS5jdXJyZW50KXtpZihELnRvdWNoZXMubGVuZ3RoPDIpe2xldCBMMT1ELmNoYW5nZWRUb3VjaGVzWzBdLF8xPSQwO2lmKEwxJiZfMSlEMSh7dHlwZToiZW5kIix4MTooTDEuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgseTE6KEwxLmNsaWVudFktTS50b3ApL00uaGVpZ2h0LHgyOl8xLngyLHkyOl8xLnkyfSk7ZWxzZSBpZihfMSlEMSh7dHlwZToiZW5kIiwuLi5fMX0pO3QxLmN1cnJlbnQ9ITEsYzEuY3VycmVudD0hMSxFMShudWxsKX1yZXR1cm59bGV0IFI9RC5jaGFuZ2VkVG91Y2hlc1swXTtpZighUilyZXR1cm47bGV0IGw9KFIuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsRzE9KFIuY2xpZW50WS1NLnRvcCkvTS5oZWlnaHQ7aWYoQTAoKSxoMS5jdXJyZW50KWoxKHt0eXBlOiJlbmQiLHg6bCx5OkcxLGVkZ2U6dTB9KSxoMS5jdXJyZW50PSExO2Vsc2UgajEoe3R5cGU6ImVuZCIseDpsLHk6RzF9KX19KSxYKCJkaXYiLHtyZWY6RzAsImRhdGEtdGVzdGlkIjoidG91Y2gtaW5kaWNhdG9yIixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJub25lIix3aWR0aDoyNCxoZWlnaHQ6MjQsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoNTksMTMwLDI0NiwwLjUpIixib3hTaGFkb3c6IjAgMCA4cHggcmdiYSg1OSwxMzAsMjQ2LDAuMykiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19KSwkMCYmWChLMSx7Y2hpbGRyZW46W1goImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOnI5KCQwLngxLCQwLnkxKX0pLFgoImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOnI5KCQwLngyLCQwLnkyKX0pXX0pLCFyJiYhSjEmJlgoImRpdiIse3N0eWxlOnsuLi5pOSwuLi5afHx7fX0sY2hpbGRyZW46WCgic3BhbiIse3N0eWxlOntjb2xvcjoiIzg4OCIsZm9udFNpemU6MTR9LGNoaWxkcmVuOiJDb25uZWN0aW5nLi4uIn0pfSksSjEmJlgoImRpdiIse3N0eWxlOmk5LGNoaWxkcmVuOlgoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmNDQiLGZvbnRTaXplOjE0LHBhZGRpbmc6MjAsdGV4dEFsaWduOiJjZW50ZXIifSxjaGlsZHJlbjpKMX0pfSksWTEmJlgoImRpdiIse3N0eWxlOmtKLGNoaWxkcmVuOlgoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmYmJmMjQiLGZvbnRTaXplOjEzLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSJ9LGNoaWxkcmVuOiJTbG93IGNvbm5lY3Rpb24ifSl9KV19KX0pLCFrJiZYKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIscGFkZGluZzoiNHB4IDhweCIsYm9yZGVyVG9wOmAxcHggc29saWQgJHtUMSgwLjEyKX1gfSxjaGlsZHJlbjpbWCgiYnV0dG9uIix7b25DbGljazpIMSxzdHlsZTp7YmFja2dyb3VuZDoibm9uZSIsYm9yZGVyOmAxcHggc29saWQgJHtUMSgwLjIpfWAsY29sb3I6ZDEoMC42NSksZm9udFNpemU6MTEsZm9udEZhbWlseToibW9ub3NwYWNlIixwYWRkaW5nOiIycHggMTBweCIsY3Vyc29yOiJwb2ludGVyIixib3JkZXJSYWRpdXM6NH0sY2hpbGRyZW46IkhvbWUifSksWCgic3BhbiIse3N0eWxlOntjb2xvcjpjPjA/IiM0ZjQiOiIjODg4Iixmb250U2l6ZToxMixmb250RmFtaWx5OiJtb25vc3BhY2UiLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjZ9LGNoaWxkcmVuOltPJiZYKCJzcGFuIix7ImRhdGEtdGVzdGlkIjoicXVhbGl0eS1kb3QiLHN0eWxlOnt3aWR0aDo4LGhlaWdodDo4LGJvcmRlclJhZGl1czoiNTAlIixkaXNwbGF5OiJpbmxpbmUtYmxvY2siLGJhY2tncm91bmQ6Tz09PSJnb29kIj8iIzRhZGU4MCI6Tz09PSJkZWdyYWRlZCI/IiNmYWNjMTUiOiIjZWY0NDQ0In19KSxjLCIgZnBzIl19KV19KV19KX12YXIga0o9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjgsbGVmdDoiNTAlIix0cmFuc2Zvcm06InRyYW5zbGF0ZVgoLTUwJSkiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC43KSIsYm9yZGVyUmFkaXVzOjYscGFkZGluZzoiNHB4IDEycHgiLHBvaW50ZXJFdmVudHM6Im5vbmUifSxpOT17cG9zaXRpb246ImFic29sdXRlIixpbnNldDowLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsYmFja2dyb3VuZDoicmdiYSgwLDAsMCwwLjgpIn0sbzk9MjA7ZnVuY3Rpb24gcjkoJCxKKXtyZXR1cm57cG9zaXRpb246ImFic29sdXRlIixsZWZ0OmAkeyQqMTAwfSVgLHRvcDpgJHtKKjEwMH0lYCx3aWR0aDpvOSxoZWlnaHQ6bzksYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoMjU1LDI1NSwyNTUsMC40NSkiLGJvcmRlcjoiMS4yNXB4IHNvbGlkIHJnYmEoMCwwLDAsMC41NSkiLGJveFNoYWRvdzoiMCAxcHggM3B4IHJnYmEoMCwwLDAsMC40NSkiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19ZnVuY3Rpb24gRTAoJCl7aWYoISQpcmV0dXJuImlwaG9uZSI7bGV0IEo9JC50b0xvd2VyQ2FzZSgpO2lmKEouaW5jbHVkZXMoImlwYWQiKSlyZXR1cm4iaXBhZCI7aWYoSi5pbmNsdWRlcygid2F0Y2giKSlyZXR1cm4id2F0Y2giO2lmKEouaW5jbHVkZXMoInZpc2lvbiIpKXJldHVybiJ2aXNpb24iO3JldHVybiJpcGhvbmUifXZhciBTMT17aXBob25lOnt3aWR0aDo0MjcsaGVpZ2h0Ojg4MSxiZXplbFg6MTgsYmV6ZWxZOjE4LGlubmVyUmFkaXVzOjU1fSxpcGFkOnt3aWR0aDo0MzAsaGVpZ2h0OjYwNSxiZXplbFg6MTYsYmV6ZWxZOjE2LGlubmVyUmFkaXVzOjEyfSx3YXRjaDp7d2lkdGg6Mjc0LGhlaWdodDozMjIsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czo3OX0sdmlzaW9uOnt3aWR0aDo2NDAsaGVpZ2h0OjQwMCxiZXplbFg6MTIsYmV6ZWxZOjEyLGlubmVyUmFkaXVzOjMyfX0seUEwPVMxLmlwaG9uZS53aWR0aCxTQTA9UzEuaXBob25lLmhlaWdodCx4QTA9UzEuaXBob25lLmJlemVsWCxSQTA9UzEuaXBob25lLmJlemVsWSxqQTA9UzEuaXBob25lLmlubmVyUmFkaXVzLG45PXsiaVBob25lIDE3IFBybyBNYXgiOnt3aWR0aDoxMzIwLGhlaWdodDoyODY4fSwiaVBob25lIDE3IFBybyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgMTciOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIEFpciI6e3dpZHRoOjEyNjAsaGVpZ2h0OjI3MzZ9LCJpUGhvbmUgRHVvIjp7d2lkdGg6MTM5OCxoZWlnaHQ6MjAzNH0sImlQaG9uZSAxNiBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNiBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE2IFBsdXMiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE2Ijp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNmUiOnt3aWR0aDoxMTcwLGhlaWdodDoyNTMyfSwiaVBob25lIDE1IFBybyBNYXgiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE1IFBybyI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGhvbmUgMTUgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBhZCBQcm8gMTMtaW5jaCAoTTUpIjp7d2lkdGg6MjA2NCxoZWlnaHQ6Mjc1Mn0sImlQYWQgUHJvIDExLWluY2ggKE01KSI6e3dpZHRoOjE2NjgsaGVpZ2h0OjI0MjB9LCJpUGFkIFBybyAxMy1pbmNoIChNNCkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTQpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgQWlyIDEzLWluY2ggKE0zKSI6e3dpZHRoOjIwNDgsaGVpZ2h0OjI3MzJ9LCJpUGFkIEFpciAxMS1pbmNoIChNMykiOnt3aWR0aDoxNjQwLGhlaWdodDoyMzYwfSwiaVBhZCAoQTE2KSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIG1pbmkgKEExNyBQcm8pIjp7d2lkdGg6MTQ4OCxoZWlnaHQ6MjI2Nn0sIkFwcGxlIFdhdGNoIFVsdHJhIDMgKDQ5bW0pIjp7d2lkdGg6NDIyLGhlaWdodDo1MTR9LCJBcHBsZSBXYXRjaCBVbHRyYSAyICg0OW1tKSI6e3dpZHRoOjQxMCxoZWlnaHQ6NTAyfSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFIDMgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBXYXRjaCBTRSAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFICg0MG1tKSI6e3dpZHRoOjMyNCxoZWlnaHQ6Mzk0fSwiQXBwbGUgVmlzaW9uIFBybyI6e3dpZHRoOjE5MjAsaGVpZ2h0OjEwODB9fTtmdW5jdGlvbiBnMigkLEope2xldCBRPSQmJiQud2lkdGg+MCYmJC5oZWlnaHQ+MD8kOkosWj16NShRKTtpZihaKXJldHVybmAke1oud2lkdGh9IC8gJHtaLmhlaWdodH1gO3JldHVybmAke1MxLmlwaG9uZS53aWR0aC0yKlMxLmlwaG9uZS5iZXplbFh9IC8gJHtTMS5pcGhvbmUuaGVpZ2h0LTIqUzEuaXBob25lLmJlemVsWX1gfWZ1bmN0aW9uIFU1KCQ9ImlwaG9uZSIsSil7bGV0IFE9Sj9uOVtKXTpudWxsO2lmKFEpcmV0dXJuIFE7bGV0IFo9UzFbJF07cmV0dXJue3dpZHRoOloud2lkdGgtMipaLmJlemVsWCxoZWlnaHQ6Wi5oZWlnaHQtMipaLmJlemVsWX19ZnVuY3Rpb24gTDUoJD0iaXBob25lIixKKXtpZihsMChKKSlzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gNzIwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2Nhc2Uid2F0Y2giOnJldHVybiAyMDA7ZGVmYXVsdDpyZXR1cm4gNjIwfXN3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiA0MDA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtjYXNlInZpc2lvbiI6cmV0dXJuIDU4MDtkZWZhdWx0OnJldHVybiAzMjB9fWZ1bmN0aW9uIGgyKCQ9ImlwaG9uZSIsSil7bGV0IFE9UzFbJF0sWj1RLndpZHRoLTIqUS5iZXplbFgsSz1RLmhlaWdodC0yKlEuYmV6ZWxZO2lmKFo8SyYmbDAoSikpcmV0dXJuYCR7US5pbm5lclJhZGl1cy9LKjEwMH0lIC8gJHtRLmlubmVyUmFkaXVzL1oqMTAwfSVgO3JldHVybmAke1EuaW5uZXJSYWRpdXMvWioxMDB9JSAvICR7US5pbm5lclJhZGl1cy9LKjEwMH0lYH1mdW5jdGlvbiBhOSgkKXtsZXQgSj1TMVskLnR5cGVdLFE9Si53aWR0aC0yKkouYmV6ZWxYLFo9Si5oZWlnaHQtMipKLmJlemVsWSxLLFk7aWYoUTxaJiZsMCgkLmNvbmZpZz8/bnVsbCkpSz1KLmlubmVyUmFkaXVzL1osWT1KLmlubmVyUmFkaXVzL1E7ZWxzZSBLPUouaW5uZXJSYWRpdXMvUSxZPUouaW5uZXJSYWRpdXMvWjtsZXQgcT1LKiQuY29udGFpbmVyV2lkdGgsVj1ZKiQuY29udGFpbmVySGVpZ2h0LEc9TWF0aC5zcXJ0KE1hdGgubWF4KHEqViwwKSk7cmV0dXJue3J4OnEscnk6VixyR2VvbTpHfX12YXIgRko9MTMsQUo9NjI7ZnVuY3Rpb24gcDMoJCl7bGV0e2NvbnRhaW5lcldpZHRoOkosY29udGFpbmVySGVpZ2h0OlF9PSQsWj0oayk9PmsudG9GaXhlZCgzKSxLPShrLEMpPT57bGV0IE89Qyx5PUMsRT1BSi8yKihNYXRoLlBJLzE4MCksdz0yMjUqTWF0aC5QSS8xODAsUz13K0UsUTE9dy1FLGc9TytrKk1hdGguY29zKFMpLGg9eStrKk1hdGguc2luKFMpLEk9TytrKk1hdGguY29zKFExKSx1PXkraypNYXRoLnNpbihRMSksWjE9YE0gJHtaKGcpfSAke1ooaCl9IEEgJHtaKGspfSAke1ooayl9IDAgMCAxICR7WihJKX0gJHtaKHUpfWAscj1gTSAke1ooSSl9ICR7Wih1KX0gQSAke1ooayl9ICR7WihrKX0gMCAwIDAgJHtaKGcpfSAke1ooaCl9YDtyZXR1cm57ZDpaMSxkRmlsbDpyfX07aWYoIShKPjApfHwhKFE+MCkpe2xldCBrPUZKLEM9TWF0aC5jZWlsKGsrMTQpLHtkOk8sZEZpbGw6eX09SyhrLEMpO3JldHVybntkOk8sZEZpbGw6eSx2aWV3Qm94U2l6ZTpDfX1sZXR7ckdlb206WX09YTkoJCkscT1NYXRoLm1heCgyLjIsTWF0aC5taW4oNS4yLDAuMDExKk1hdGgubWluKEosUSkpKSxWPVkqMC4zNCtxLEc9TWF0aC5taW4oSixRKSxCPU1hdGgubWluKDIyLE1hdGgubWF4KDEyLEcqMC4wNTIpKTtWPU1hdGgubWluKDI0LE1hdGgubWF4KDEyLFYsQikpO2xldCBIPU1hdGgubWF4KDI2LE1hdGguY2VpbChWKzEzKSkse2Q6RixkRmlsbDpMfT1LKFYsSCk7cmV0dXJue2Q6RixkRmlsbDpMLHZpZXdCb3hTaXplOkh9fWZ1bmN0aW9uIGYyKHt0eXBlOiQ9ImlwaG9uZSIsc3RyZWFtaW5nOko9ITF9KXtzd2l0Y2goJCl7Y2FzZSJpcGFkIjpyZXR1cm4gWChNSix7c3RyZWFtaW5nOkp9KTtjYXNlIndhdGNoIjpyZXR1cm4gWChXSix7c3RyZWFtaW5nOkp9KTtjYXNlInZpc2lvbiI6cmV0dXJuIFgoUEose3N0cmVhbWluZzpKfSk7ZGVmYXVsdDpyZXR1cm4gWChPSix7c3RyZWFtaW5nOkp9KX19ZnVuY3Rpb24gT0ooe3N0cmVhbWluZzokPSExfSl7cmV0dXJuIFgoInN2ZyIse3ZpZXdCb3g6IjAgMCA0MjcgODgxIixzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W1goImRlZnMiLHtjaGlsZHJlbjpbWCgiZmlsdGVyIix7aWQ6ImNocm9tZS1maWx0ZXIwIix4OiItMC4xNjY5OTIiLHk6IjAuMTY2NTA0Iix3aWR0aDoiNDI3IixoZWlnaHQ6Ijg4MC42NjciLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1goImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFgoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxYKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXIifSldfSksWCgiZmlsdGVyIix7aWQ6ImNocm9tZS1maWx0ZXIxIix4OiI2LjMzMjM2Iix5OiI2LjMzMzgyIix3aWR0aDoiNDE0IixoZWlnaHQ6Ijg2OCIsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbWCgiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksWCgiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLFgoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjMzMzMzMyIscmVzdWx0OiJlZmZlY3QxX2ZvcmVncm91bmRCbHVyIn0pXX0pXX0pLFgoInJlY3QiLHt4OiIzLjgzMjY4Iix5OiIzLjgzMzY2Iix3aWR0aDoiNDE5IixoZWlnaHQ6Ijg3MyIscng6IjY2LjE2NjciLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjQuMzMzMzMifSksWCgicmVjdCIse3g6IjAuODMzMzMzIix5OiIwLjgzMzMzMyIsd2lkdGg6IjQyNSIsaGVpZ2h0OiI4NzkiLHJ4OiI2OS4xNjY3IixzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NjY3In0pLFgoImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCNjaHJvbWUtZmlsdGVyMCkiLGNoaWxkcmVuOlgoInJlY3QiLHt4OiIxLjY2NjAyIix5OiIyIix3aWR0aDoiNDIzLjMzMyIsaGVpZ2h0OiI4NzciLHJ4OiI2OC42NjY3IixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NjY3In0pfSksWCgiZyIse29wYWNpdHk6IjAuOCIsZmlsdGVyOiJ1cmwoI2Nocm9tZS1maWx0ZXIxKSIsY2hpbGRyZW46WCgicmVjdCIse3g6IjcuMzMyNjgiLHk6IjcuMzMzNjYiLHdpZHRoOiI0MTIiLGhlaWdodDoiODY2IixyeDoiNjIuNjY2NyIsc3Ryb2tlOiIjNjQ2NDY0IixzdHJva2VXaWR0aDoiMC42NjY2NjcifSl9KSxYKCJyZWN0Iix7eDoiMTUxLjY2NiIseToiMzEuNjY3Iix3aWR0aDoiMTIzLjMzMyIsaGVpZ2h0OiIzNiIscng6IjE4IixmaWxsOiJibGFjayIsc3R5bGU6e29wYWNpdHk6JD8wOjEsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pXX0pfWZ1bmN0aW9uIE1KKHtzdHJlYW1pbmc6JD0hMX0pe2xldCBKPVMxLmlwYWQud2lkdGgsUT1TMS5pcGFkLmhlaWdodCxaPTMwLEs9MjY7cmV0dXJuIFgoInN2ZyIse3ZpZXdCb3g6YDAgMCAke0p9ICR7UX1gLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbWCgiZGVmcyIse2NoaWxkcmVuOltYKCJmaWx0ZXIiLHtpZDoiaXBhZC1nbG93MCIseDoiMCIseToiMCIsd2lkdGg6SixoZWlnaHQ6USxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltYKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxYKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksWCgiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJibHVyIn0pXX0pLFgoImZpbHRlciIse2lkOiJpcGFkLWdsb3cxIix4OiI1Iix5OiI1Iix3aWR0aDpKLTEwLGhlaWdodDpRLTEwLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1goImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFgoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxYKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC4zMzMzMzMiLHJlc3VsdDoiYmx1ciJ9KV19KV19KSxYKCJyZWN0Iix7eDoiMy41Iix5OiIzLjUiLHdpZHRoOkotNyxoZWlnaHQ6US03LHJ4OjI2LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjQifSksWCgicmVjdCIse3g6IjAuODMzIix5OiIwLjgzMyIsd2lkdGg6Si0xLjY2NixoZWlnaHQ6US0xLjY2NixyeDozMCxzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KSxYKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjaXBhZC1nbG93MCkiLGNoaWxkcmVuOlgoInJlY3QiLHt4OiIxLjUiLHk6IjEuNSIsd2lkdGg6Si0zLGhlaWdodDpRLTMscng6Mjksc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjYifSl9KSxYKCJnIix7b3BhY2l0eToiMC44IixmaWx0ZXI6InVybCgjaXBhZC1nbG93MSkiLGNoaWxkcmVuOlgoInJlY3QiLHt4OiI2Iix5OiI2Iix3aWR0aDpKLTEyLGhlaWdodDpRLTEyLHJ4OjI0LHN0cm9rZToiIzY0NjQ2NCIsc3Ryb2tlV2lkdGg6IjAuNjY2In0pfSksWCgiY2lyY2xlIix7Y3g6Si8yLGN5OlMxLmlwYWQuYmV6ZWxZLzIrMSxyOiIzIixmaWxsOiIjMWExYTFhIixzdHlsZTp7b3BhY2l0eTokPzA6MC44LHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KSxYKCJyZWN0Iix7eDooSi0xMjApLzIseTpRLVMxLmlwYWQuYmV6ZWxZLzItMi41LHdpZHRoOiIxMjAiLGhlaWdodDoiNSIscng6IjIuNSIsZmlsbDoid2hpdGUiLHN0eWxlOntvcGFjaXR5OiQ/MDowLjM1LG1peEJsZW5kTW9kZToiZGlmZmVyZW5jZSIsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pXX0pfWZ1bmN0aW9uIFdKKHtzdHJlYW1pbmc6JD0hMX0pe2xldCBKPVMxLndhdGNoLndpZHRoLFE9UzEud2F0Y2guaGVpZ2h0LFo9ODgsSz04MixZPTgscT0zNixWPVEvMi0xOC0xNixHPTIyLEI9US8yLTExKzE2O3JldHVybiBYKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtKfSAke1F9YCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsb3ZlcmZsb3c6InZpc2libGUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltYKCJkZWZzIix7Y2hpbGRyZW46WCgiZmlsdGVyIix7aWQ6IndhdGNoLWdsb3cwIix4OiIwIix5OiIwIix3aWR0aDpKKzEyLGhlaWdodDpRLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W1goImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLFgoImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxYKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImJsdXIifSldfSl9KSxYKCJyZWN0Iix7eDpKLTIseTpWLHdpZHRoOjgsaGVpZ2h0OjM2LHJ4OiIzIixmaWxsOiIjMmEyYTJjIixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxIn0pLFgoInJlY3QiLHt4OkotMSx5OkIsd2lkdGg6NixoZWlnaHQ6MjIscng6IjIuNSIsZmlsbDoiIzJhMmEyYyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMC44In0pLFgoInJlY3QiLHt4OiIzLjUiLHk6IjMuNSIsd2lkdGg6Si03LGhlaWdodDpRLTcscng6ODIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMy41In0pLFgoInJlY3QiLHt4OiIwLjgzMyIseToiMC44MzMiLHdpZHRoOkotMS42NjYsaGVpZ2h0OlEtMS42NjYscng6ODgsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjYifSksWCgiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI3dhdGNoLWdsb3cwKSIsY2hpbGRyZW46WCgicmVjdCIse3g6IjEuNSIseToiMS41Iix3aWR0aDpKLTMsaGVpZ2h0OlEtMyxyeDo4NyxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KX0pXX0pfWZ1bmN0aW9uIFBKKHtzdHJlYW1pbmc6JD0hMX0pe2xldCBKPVMxLnZpc2lvbi53aWR0aCxRPVMxLnZpc2lvbi5oZWlnaHQsWj00MCxLPTM0O3JldHVybiBYKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtKfSAke1F9YCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W1goImRlZnMiLHtjaGlsZHJlbjpbWCgiZmlsdGVyIix7aWQ6InZpc2lvbi1nbG93MCIseDoiMCIseToiMCIsd2lkdGg6SixoZWlnaHQ6USxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltYKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxYKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksWCgiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuNSIscmVzdWx0OiJibHVyIn0pXX0pLFgoImZpbHRlciIse2lkOiJ2aXNpb24tZ2xvdzEiLHg6IjUiLHk6IjUiLHdpZHRoOkotMTAsaGVpZ2h0OlEtMTAsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbWCgiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksWCgiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLFgoImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjMzMyIscmVzdWx0OiJibHVyIn0pXX0pLFgoImxpbmVhckdyYWRpZW50Iix7aWQ6InZpc2lvbi1nbGFzcyIseDE6IjAiLHkxOiIwIix4MjoiMCIseTI6IjEiLGNoaWxkcmVuOltYKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjNTU1NTU4IixzdG9wT3BhY2l0eToiMC4zIn0pLFgoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzNhM2EzZCIsc3RvcE9wYWNpdHk6IjAuMSJ9KV19KV19KSxYKCJyZWN0Iix7eDoiMCIseToiMCIsd2lkdGg6SixoZWlnaHQ6USxyeDo0MCxmaWxsOiJ1cmwoI3Zpc2lvbi1nbGFzcykifSksWCgicmVjdCIse3g6IjMuNSIseToiMy41Iix3aWR0aDpKLTcsaGVpZ2h0OlEtNyxyeDozNCxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIzIn0pLFgoInJlY3QiLHt4OiIwLjgzMyIseToiMC44MzMiLHdpZHRoOkotMS42NjYsaGVpZ2h0OlEtMS42NjYscng6NDAsc3Ryb2tlOiIjMzczNzNhIixzdHJva2VXaWR0aDoiMS42NjYifSksWCgiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI3Zpc2lvbi1nbG93MCkiLGNoaWxkcmVuOlgoInJlY3QiLHt4OiIxLjUiLHk6IjEuNSIsd2lkdGg6Si0zLGhlaWdodDpRLTMscng6Mzksc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiMS42NjYifSl9KSxYKCJnIix7b3BhY2l0eToiMC44IixmaWx0ZXI6InVybCgjdmlzaW9uLWdsb3cxKSIsY2hpbGRyZW46WCgicmVjdCIse3g6IjYiLHk6IjYiLHdpZHRoOkotMTIsaGVpZ2h0OlEtMTIscng6MzIsc3Ryb2tlOiIjNjQ2NDY0IixzdHJva2VXaWR0aDoiMC42NjYifSl9KSxYKCJlbGxpcHNlIix7Y3g6Si8yLGN5OlEvMixyeDpKLzItMzAscnk6US8yLTI0LHN0cm9rZToiIzRhNGE0ZCIsc3Ryb2tlV2lkdGg6IjAuNSIsb3BhY2l0eToiMC4zIixzdHlsZTp7b3BhY2l0eTokPzA6MC4zLHRyYW5zaXRpb246Im9wYWNpdHkgMC4zcyBlYXNlIn19KV19KX12YXIgdTM9TTAobnVsbCk7ZnVuY3Rpb24gbTIoJCl7bGV0IEo9VzAodTMpO2lmKCFKKXRocm93IEVycm9yKGA8U2ltdWxhdG9yVG9vbGJhci4keyR9PiBtdXN0IGJlIHJlbmRlcmVkIGluc2lkZSA8U2ltdWxhdG9yVG9vbGJhcj5gKTtyZXR1cm4gSn12YXIgREo9e2Rpc3BsYXk6ImZsZXgiLGZsZXhXcmFwOiJ3cmFwIixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixnYXA6IjRweCAxMnB4IixwYWRkaW5nOiI4cHggMTJweCIsYm9yZGVyUmFkaXVzOjI0LGJhY2tncm91bmQ6InZhcigtLXNlcnZlLXNpbS1wYW5lbC1iZywgIzE4MTgxOCkiLGJvcmRlcjpgMXB4IHNvbGlkICR7VDEoMC4xKX1gLGJveFNoYWRvdzoiMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4yKSIsbWluV2lkdGg6MjQwLHdpZHRoOiIxMDAlIn07ZnVuY3Rpb24gVEooe2V4ZWM6JCxvblJvdGF0ZTpKLG9yaWVudGF0aW9uOlEsZGV2aWNlVWRpZDpaLGRldmljZU5hbWU6SyxkZXZpY2VSdW50aW1lOlksc3RyZWFtaW5nOnE9ITEsZGlzYWJsZWQ6Vj0hMSxjaGlsZHJlbjpHLHN0eWxlOkIsLi4uTn0pe2xldCB6PUUwKEspLEg9e2V4ZWM6JCxvblJvdGF0ZTpKLG9yaWVudGF0aW9uOlEsZGV2aWNlVWRpZDpaLGRldmljZU5hbWU6SyxkZXZpY2VSdW50aW1lOlksZGV2aWNlVHlwZTp6LHN0cmVhbWluZzpxLGRpc2FibGVkOlZ8fCFafHwhcX07cmV0dXJuIFgodTMuUHJvdmlkZXIse3ZhbHVlOkgsY2hpbGRyZW46WCgiZGl2Iix7ImRhdGEtc2ltdWxhdG9yLXRvb2xiYXIiOiEwLHN0eWxlOnsuLi5ESiwuLi5CfSwuLi5OLGNoaWxkcmVuOkd9KX0pfXZhciBJSj17ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixhbGlnbkl0ZW1zOiJmbGV4LXN0YXJ0Iix0ZXh0QWxpZ246ImxlZnQiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLGNvbG9yOmQxKDEpLHBhZGRpbmc6IjJweCA0cHgiLG1hcmdpbjoiLTJweCAtNHB4Iixib3JkZXJSYWRpdXM6NixjdXJzb3I6InBvaW50ZXIiLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGxpbmVIZWlnaHQ6MS4yLGZvbnRGYW1pbHk6ImluaGVyaXQifSxFSj1fMChmdW5jdGlvbih7bmFtZTpKLHN1YnRpdGxlOlEsaGlkZUNoZXZyb246WixoaWRlU3VidGl0bGU6SyxzdHlsZTpZLG9uTW91c2VFbnRlcjpxLG9uTW91c2VMZWF2ZTpWLC4uLkd9LEIpe2xldCBOPW0yKCJUaXRsZSIpLFt6LFVdPUEoITEpLEg9Sj8/Ti5kZXZpY2VOYW1lPz8iTm8gc2ltdWxhdG9yIixGPVE/PyhOLmRldmljZVJ1bnRpbWU/Ti5kZXZpY2VSdW50aW1lLnJlcGxhY2UoL1wuLywiICIpOiLigJQiKTtyZXR1cm4gWCgiYnV0dG9uIix7cmVmOkIsdHlwZToiYnV0dG9uIiwiZGF0YS1zaW11bGF0b3ItdG9vbGJhci10aXRsZSI6ITAsb25Nb3VzZUVudGVyOihMKT0+e1UoITApLHE/LihMKX0sb25Nb3VzZUxlYXZlOihMKT0+e1UoITEpLFY/LihMKX0sc3R5bGU6ey4uLklKLGJhY2tncm91bmQ6ej9UMSgwLjEpOiJ0cmFuc3BhcmVudCIsLi4uWX0sLi4uRyxjaGlsZHJlbjpbWCgic3BhbiIse3N0eWxlOntkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmb250U2l6ZToxMixmb250V2VpZ2h0OjYwMCxjb2xvcjpkMSgxKSxtYXhXaWR0aDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sY2hpbGRyZW46W0gsIVomJlgoInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsc3R5bGU6e2NvbG9yOmQxKDAuNiksZmxleFNocmluazowfSxjaGlsZHJlbjpYKCJwb2x5bGluZSIse3BvaW50czoiNiA5IDEyIDE1IDE4IDkifSl9KV19KSwhSyYmWCgic3BhbiIse3N0eWxlOntmb250U2l6ZToxMCxjb2xvcjpkMSgwLjUpLG1heFdpZHRoOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpGfSldfSl9KSx3Sj17ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmbGV4U2hyaW5rOjB9O2Z1bmN0aW9uIGJKKHtzdHlsZTokLC4uLkp9KXtyZXR1cm4gWCgiZGl2Iix7c3R5bGU6ey4uLndKLC4uLiR9LC4uLkp9KX12YXIgeUo9e2JhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLHBhZGRpbmc6Nixib3JkZXJSYWRpdXM6MTIsY3Vyc29yOiJwb2ludGVyIixkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixjb2xvcjpkMSgwLjgpLHRyYW5zaXRpb246ImJhY2tncm91bmQtY29sb3IgMC4xNXMsIGNvbG9yIDAuMTVzIixwb3NpdGlvbjoicmVsYXRpdmUiLG92ZXJmbG93OiJ2aXNpYmxlIn0scDI9XzAoZnVuY3Rpb24oe2ZvcmNlRGlzYWJsZWQ6Six0b29sdGlwOlEsc3R5bGU6WixkaXNhYmxlZDpLLHRpdGxlOlksb25Nb3VzZUVudGVyOnEsb25Nb3VzZUxlYXZlOlYsb25Qb2ludGVyRG93bjpHLG9uRm9jdXM6QixvbkJsdXI6TixvbkNsaWNrOnosY2hpbGRyZW46VSwiYXJpYS1sYWJlbCI6SCwuLi5GfSxMKXtsZXQgaz1XMCh1MyksQz1LfHxKfHxrPy5kaXNhYmxlZCxbTyx5XT1BKCExKSxbRSx3XT1BKCExKSxTPVQoITEpLFExPUI1KCksZz1RPz9ZPz8odHlwZW9mIEg9PT0ic3RyaW5nIj9IOm51bGwpLGg9ISFnJiYhQyYmKE98fEUpO3JldHVybiBYKCJidXR0b24iLHtyZWY6TCx0eXBlOiJidXR0b24iLGRpc2FibGVkOkMsImFyaWEtbGFiZWwiOkgsImFyaWEtZGVzY3JpYmVkYnkiOmc/UTE6dm9pZCAwLG9uUG9pbnRlckRvd246KEkpPT57Uy5jdXJyZW50PSEwLEc/LihJKX0sb25Nb3VzZUVudGVyOihJKT0+e3koITApLHE/LihJKX0sb25Nb3VzZUxlYXZlOihJKT0+e3koITEpLFY/LihJKX0sb25Gb2N1czooSSk9Pnt3KCFTLmN1cnJlbnQpLEI/LihJKX0sb25CbHVyOihJKT0+e1MuY3VycmVudD0hMSx3KCExKSxOPy4oSSl9LG9uQ2xpY2s6KEkpPT57eSghMSksdyghMSksSS5jdXJyZW50VGFyZ2V0LmJsdXIoKSx6Py4oSSl9LHN0eWxlOnsuLi55Sixjb2xvcjpDP2QxKDAuMjUpOmQxKDAuOCksYmFja2dyb3VuZDpPJiYhQz9UMSgwLjEpOiJ0cmFuc3BhcmVudCIsY3Vyc29yOkM/Im5vdC1hbGxvd2VkIjoicG9pbnRlciIsLi4uWn0sLi4uRixjaGlsZHJlbjpbVSxnJiZYKCJzcGFuIix7aWQ6UTEscm9sZToidG9vbHRpcCIsImFyaWEtaGlkZGVuIjohaCxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OiI1MCUiLGJvdHRvbToiY2FsYygxMDAlICsgOHB4KSIsdHJhbnNmb3JtOmB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoJHtoPzA6Mn1weClgLG9wYWNpdHk6aD8xOjAscG9pbnRlckV2ZW50czoibm9uZSIsd2hpdGVTcGFjZToibm93cmFwIixwYWRkaW5nOiI0cHggN3B4Iixib3JkZXJSYWRpdXM6NixiYWNrZ3JvdW5kOiJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcsICMxODE4MTgpIixib3JkZXI6YDFweCBzb2xpZCAke1QxKDAuMTIpfWAsY29sb3I6ZDEoMC45MiksZm9udFNpemU6MTEsZm9udFdlaWdodDo1MDAsbGluZUhlaWdodDoxLGJveFNoYWRvdzoiMCA0cHggMTRweCByZ2JhKDAsMCwwLDAuMzIpIix0cmFuc2l0aW9uOiJvcGFjaXR5IDAuMTJzIGVhc2UsIHRyYW5zZm9ybSAwLjEycyBlYXNlIix6SW5kZXg6MTAwfSxjaGlsZHJlbjpnfSldfSl9KTtmdW5jdGlvbiBTSigkLEope2lmKCQ9PT0id2F0Y2giKXJldHVybiB4SigpO2lmKEopcmV0dXJuYHhjcnVuIHNpbWN0bCBsYXVuY2ggJHtKfSBjb20uYXBwbGUuc3ByaW5nYm9hcmRgO3JldHVybiJzZXJ2ZS1zaW0gYnV0dG9uIGhvbWUifWZ1bmN0aW9uIHhKKCl7cmV0dXJuWyd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gc2V0IGZyb250bW9zdCB0byB0cnVlJywndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHBlcmZvcm0gYWN0aW9uICJBWFJhaXNlIiBvZiAoZmlyc3Qgd2luZG93IHdob3NlIG5hbWUgY29udGFpbnMgIndhdGNoT1MiKScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBjbGljayBtZW51IGl0ZW0gIkhvbWUiIG9mIG1lbnUgIkRldmljZSIgb2YgbWVudSBiYXIgaXRlbSAiRGV2aWNlIiBvZiBtZW51IGJhciAxJ10ubWFwKChKKT0+YC1lICcke0p9J2ApLnJlZHVjZSgoSixRKT0+YCR7Sn0gJHtRfWAsIm9zYXNjcmlwdCIpfXZhciBSSj1YKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpYKCJwYXRoIix7ZDoiTTMgMTAuNSAxMiAzbDkgNy41VjIwYTEgMSAwIDAgMS0xIDFoLTV2LTdoLTZ2N0g0YTEgMSAwIDAgMS0xLTF6In0pfSksako9WCgic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgNDQgNDQiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46WCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixjbGlwUnVsZToiZXZlbm9kZCIsZmlsbDoiY3VycmVudENvbG9yIixkOiJNNDMuNjg3NSAxMi40Njg4VjguMjczNDRDNDMuNjg3NSA1LjcyNjU2IDQyLjk1MzEgMy43MTA5NCA0MS40ODQ0IDIuMjI2NTZDNDAuMDE1NiAwLjc0MjE4OCAzOCAwIDM1LjQzNzUgMEgzMS4xNDg0QzMwLjYwMTYgMCAzMC4xMzI4IDAuMTk1MzEyIDI5Ljc0MjIgMC41ODU5MzhDMjkuMzUxNiAwLjk3NjU2MiAyOS4xNTYyIDEuNDQ1MzEgMjkuMTU2MiAxLjk5MjE5QzI5LjE1NjIgMi41MjM0NCAyOS4zNTE2IDIuOTg0MzggMjkuNzQyMiAzLjM3NUMzMC4xMzI4IDMuNzY1NjIgMzAuNjAxNiAzLjk2MDk0IDMxLjE0ODQgMy45NjA5NEgzNS40Mzc1QzM2Ljc4MTIgMy45NjA5NCAzNy44MzU5IDQuMzQzNzUgMzguNjAxNiA1LjEwOTM4QzM5LjM1MTYgNS44NzUgMzkuNzI2NiA2LjkyOTY5IDM5LjcyNjYgOC4yNzM0NFYxMi40Njg4QzM5LjcyNjYgMTMgMzkuOTIxOSAxMy40NjA5IDQwLjMxMjUgMTMuODUxNkM0MC43MDMxIDE0LjI0MjIgNDEuMTcxOSAxNC40Mzc1IDQxLjcxODggMTQuNDM3NUM0Mi4yNSAxNC40Mzc1IDQyLjcxMDkgMTQuMjQyMiA0My4xMDE2IDEzLjg1MTZDNDMuNDkyMiAxMy40NjA5IDQzLjY4NzUgMTMgNDMuNjg3NSAxMi40Njg4Wk0wIDEyLjQ2ODhDMCAxMyAwLjE5NTMxMiAxMy40NjA5IDAuNTg1OTM4IDEzLjg1MTZDMC45NzY1NjIgMTQuMjQyMiAxLjQzNzUgMTQuNDM3NSAxLjk2ODc1IDE0LjQzNzVDMi41IDE0LjQzNzUgMi45NjA5NCAxNC4yNDIyIDMuMzUxNTYgMTMuODUxNkMzLjc0MjE5IDEzLjQ2MDkgMy45Mzc1IDEzIDMuOTM3NSAxMi40Njg4VjguMjczNDRDMy45Mzc1IDYuOTI5NjkgNC4zMjAzMSA1Ljg3NSA1LjA4NTk0IDUuMTA5MzhDNS44MzU5NCA0LjM0Mzc1IDYuODkwNjIgMy45NjA5NCA4LjI1IDMuOTYwOTRIMTIuNTM5MUMxMy4wODU5IDMuOTYwOTQgMTMuNTU0NyAzLjc2NTYyIDEzLjk0NTMgMy4zNzVDMTQuMzIwMyAyLjk4NDM4IDE0LjUwNzggMi41MjM0NCAxNC41MDc4IDEuOTkyMTlDMTQuNTA3OCAxLjQ0NTMxIDE0LjMyMDMgMC45NzY1NjIgMTMuOTQ1MyAwLjU4NTkzOEMxMy41NTQ3IDAuMTk1MzEyIDEzLjA4NTkgMCAxMi41MzkxIDBIOC4yNUM1LjY4NzUgMCAzLjY3MTg4IDAuNzQyMTg4IDIuMjAzMTIgMi4yMjY1NkMwLjczNDM3NSAzLjcxMDk0IDAgNS43MjY1NiAwIDguMjczNDRWMTIuNDY4OFpNNDMuNjg3NSAzMS4yNDIyQzQzLjY4NzUgMzAuNzEwOSA0My40OTIyIDMwLjI1IDQzLjEwMTYgMjkuODU5NEM0Mi43MTA5IDI5LjQ2ODggNDIuMjUgMjkuMjczNCA0MS43MTg4IDI5LjI3MzRDNDEuMTcxOSAyOS4yNzM0IDQwLjcwMzEgMjkuNDY4OCA0MC4zMTI1IDI5Ljg1OTRDMzkuOTIxOSAzMC4yNSAzOS43MjY2IDMwLjcxMDkgMzkuNzI2NiAzMS4yNDIyVjM1LjQzNzVDMzkuNzI2NiAzNi43ODEyIDM5LjM1MTYgMzcuODM1OSAzOC42MDE2IDM4LjYwMTZDMzcuODM1OSAzOS4zNjcyIDM2Ljc4MTIgMzkuNzUgMzUuNDM3NSAzOS43NUgzMS4xNDg0QzMwLjYwMTYgMzkuNzUgMzAuMTMyOCAzOS45NDUzIDI5Ljc0MjIgNDAuMzM1OUMyOS4zNTE2IDQwLjcyNjYgMjkuMTU2MiA0MS4xODc1IDI5LjE1NjIgNDEuNzE4OEMyOS4xNTYyIDQyLjI2NTYgMjkuMzUxNiA0Mi43MjY2IDI5Ljc0MjIgNDMuMTAxNkMzMC4xMzI4IDQzLjQ5MjIgMzAuNjAxNiA0My42ODc1IDMxLjE0ODQgNDMuNjg3NUgzNS40Mzc1QzM4IDQzLjY4NzUgNDAuMDE1NiA0Mi45NDUzIDQxLjQ4NDQgNDEuNDYwOUM0Mi45NTMxIDM5Ljk5MjIgNDMuNjg3NSAzNy45ODQ0IDQzLjY4NzUgMzUuNDM3NVYzMS4yNDIyWk0wIDMxLjI0MjJWMzUuNDM3NUMwIDM3Ljk4NDQgMC43MzQzNzUgMzkuOTkyMiAyLjIwMzEyIDQxLjQ2MDlDMy42NzE4OCA0Mi45NDUzIDUuNjg3NSA0My42ODc1IDguMjUgNDMuNjg3NUgxMi41MzkxQzEzLjA4NTkgNDMuNjg3NSAxMy41NTQ3IDQzLjQ5MjIgMTMuOTQ1MyA0My4xMDE2QzE0LjMyMDMgNDIuNzI2NiAxNC41MDc4IDQyLjI2NTYgMTQuNTA3OCA0MS43MTg4QzE0LjUwNzggNDEuMTg3NSAxNC4zMjAzIDQwLjcyNjYgMTMuOTQ1MyA0MC4zMzU5QzEzLjU1NDcgMzkuOTQ1MyAxMy4wODU5IDM5Ljc1IDEyLjUzOTEgMzkuNzVIOC4yNUM2Ljg5MDYyIDM5Ljc1IDUuODM1OTQgMzkuMzY3MiA1LjA4NTk0IDM4LjYwMTZDNC4zMjAzMSAzNy44MzU5IDMuOTM3NSAzNi43ODEyIDMuOTM3NSAzNS40Mzc1VjMxLjI0MjJDMy45Mzc1IDMwLjcxMDkgMy43NDIxOSAzMC4yNSAzLjM1MTU2IDI5Ljg1OTRDMi45NjA5NCAyOS40Njg4IDIuNSAyOS4yNzM0IDEuOTY4NzUgMjkuMjczNEMxLjQzNzUgMjkuMjczNCAwLjk3NjU2MiAyOS40Njg4IDAuNTg1OTM4IDI5Ljg1OTRDMC4xOTUzMTIgMzAuMjUgMCAzMC43MTA5IDAgMzEuMjQyMlpNMzEuNTkzOCAzMS44MDQ3QzMyLjc4MTIgMzEuODA0NyAzMy42NzE5IDMxLjUxNTYgMzQuMjY1NiAzMC45Mzc1QzM0Ljg1OTQgMzAuMzQzOCAzNS4xNTYyIDI5LjQ2ODggMzUuMTU2MiAyOC4zMTI1VjE2LjcxMDlDMzUuMTU2MiAxNS41MzkxIDM0Ljg1OTQgMTQuNjY0MSAzNC4yNjU2IDE0LjA4NTlDMzMuNjcxOSAxMy40OTIyIDMyLjc4MTIgMTMuMTk1MyAzMS41OTM4IDEzLjE5NTNIMjguODk4NEMyOC40NjA5IDEzLjE5NTMgMjguMTQ4NCAxMy4xNDA2IDI3Ljk2MDkgMTMuMDMxMkMyNy43NTc4IDEyLjkyMTkgMjcuNTIzNCAxMi43MjY2IDI3LjI1NzggMTIuNDQ1M0wyNi4zNjcyIDExLjUwNzhDMjYuMDg1OSAxMS4xOTUzIDI1Ljc4MTIgMTAuOTY4OCAyNS40NTMxIDEwLjgyODFDMjUuMTA5NCAxMC42NzE5IDI0LjY1NjIgMTAuNTkzOCAyNC4wOTM4IDEwLjU5MzhIMTkuNjE3MkMxOS4wNTQ3IDEwLjU5MzggMTguNjA5NCAxMC42NzE5IDE4LjI4MTIgMTAuODI4MUMxNy45Mzc1IDEwLjk2ODggMTcuNjI1IDExLjE5NTMgMTcuMzQzOCAxMS41MDc4TDE2LjQ3NjYgMTIuNDQ1M0MxNi4yMTA5IDEyLjc0MjIgMTUuOTc2NiAxMi45NDUzIDE1Ljc3MzQgMTMuMDU0N0MxNS41NTQ3IDEzLjE0ODQgMTUuMjM0NCAxMy4xOTUzIDE0LjgxMjUgMTMuMTk1M0gxMi4wNDY5QzEwLjg5MDYgMTMuMTk1MyAxMC4wMTU2IDEzLjQ5MjIgOS40MjE4OCAxNC4wODU5QzguODEyNSAxNC42NjQxIDguNTA3ODEgMTUuNTM5MSA4LjUwNzgxIDE2LjcxMDlWMjguMzEyNUM4LjUwNzgxIDI5LjQ2ODggOC44MTI1IDMwLjM0MzggOS40MjE4OCAzMC45Mzc1QzEwLjAxNTYgMzEuNTE1NiAxMC44OTA2IDMxLjgwNDcgMTIuMDQ2OSAzMS44MDQ3SDMxLjU5MzhaTTIxLjc5NjkgMjguOTQ1M0MyMC41OTM4IDI4Ljk0NTMgMTkuNSAyOC42NjQxIDE4LjUxNTYgMjguMTAxNkMxNy41MTU2IDI3LjUyMzQgMTYuNzI2NiAyNi43NDIyIDE2LjE0ODQgMjUuNzU3OEMxNS41NTQ3IDI0Ljc1NzggMTUuMjU3OCAyMy42MzI4IDE1LjI1NzggMjIuMzgyOEMxNS4yNTc4IDIxLjE3OTcgMTUuNTU0NyAyMC4wODU5IDE2LjE0ODQgMTkuMTAxNkMxNi43MjY2IDE4LjEwMTYgMTcuNTE1NiAxNy4zMTI1IDE4LjUxNTYgMTYuNzM0NEMxOS41IDE2LjE0MDYgMjAuNTkzOCAxNS44NDM4IDIxLjc5NjkgMTUuODQzOEMyMy4wMTU2IDE1Ljg0MzggMjQuMTI1IDE2LjE0MDYgMjUuMTI1IDE2LjczNDRDMjYuMTA5NCAxNy4zMTI1IDI2Ljg5ODQgMTguMTAxNiAyNy40OTIyIDE5LjEwMTZDMjguMDcwMyAyMC4wODU5IDI4LjM1OTQgMjEuMTc5NyAyOC4zNTk0IDIyLjM4MjhDMjguMzU5NCAyMy42MTcyIDI4LjA3MDMgMjQuNzI2NiAyNy40OTIyIDI1LjcxMDlDMjYuODk4NCAyNi42OTUzIDI2LjEwOTQgMjcuNDg0NCAyNS4xMjUgMjguMDc4MUMyNC4xMjUgMjguNjU2MiAyMy4wMTU2IDI4Ljk0NTMgMjEuNzk2OSAyOC45NDUzWk0yMS44MjAzIDI2LjkwNjJDMjIuNjQ4NCAyNi45MDYyIDIzLjQwNjIgMjYuNzEwOSAyNC4wOTM4IDI2LjMyMDNDMjQuNzgxMiAyNS45MTQxIDI1LjMyODEgMjUuMzY3MiAyNS43MzQ0IDI0LjY3OTdDMjYuMTI1IDIzLjk5MjIgMjYuMzIwMyAyMy4yMjY2IDI2LjMyMDMgMjIuMzgyOEMyNi4zMjAzIDIxLjU3MDMgMjYuMTI1IDIwLjgyMDMgMjUuNzM0NCAyMC4xMzI4QzI1LjMyODEgMTkuNDQ1MyAyNC43ODEyIDE4LjkwNjIgMjQuMDkzOCAxOC41MTU2QzIzLjQwNjIgMTguMTA5NCAyMi42NDg0IDE3LjkwNjIgMjEuODIwMyAxNy45MDYyQzIwLjk5MjIgMTcuOTA2MiAyMC4yNDIyIDE4LjEwOTQgMTkuNTcwMyAxOC41MTU2QzE4Ljg4MjggMTguOTA2MiAxOC4zMzU5IDE5LjQ0NTMgMTcuOTI5NyAyMC4xMzI4QzE3LjUyMzQgMjAuODIwMyAxNy4zMjAzIDIxLjU3MDMgMTcuMzIwMyAyMi4zODI4QzE3LjMyMDMgMjMuMjI2NiAxNy41MjM0IDIzLjk5MjIgMTcuOTI5NyAyNC42Nzk3QzE4LjMzNTkgMjUuMzY3MiAxOC44ODI4IDI1LjkxNDEgMTkuNTcwMyAyNi4zMjAzQzIwLjI0MjIgMjYuNzEwOSAyMC45OTIyIDI2LjkwNjIgMjEuODIwMyAyNi45MDYyWk0xMi42MzI4IDE4Ljk4NDRDMTIuMjEwOSAxOC45ODQ0IDExLjg1OTQgMTguODM1OSAxMS41NzgxIDE4LjUzOTFDMTEuMjgxMiAxOC4yNDIyIDExLjEzMjggMTcuODkwNiAxMS4xMzI4IDE3LjQ4NDRDMTEuMTMyOCAxNy4wNjI1IDExLjI4MTIgMTYuNzEwOSAxMS41NzgxIDE2LjQyOTdDMTEuODU5NCAxNi4xMzI4IDEyLjIxMDkgMTUuOTg0NCAxMi42MzI4IDE1Ljk4NDRDMTMuMDM5MSAxNS45ODQ0IDEzLjM5MDYgMTYuMTMyOCAxMy42ODc1IDE2LjQyOTdDMTMuOTg0NCAxNi43MTA5IDE0LjEzMjggMTcuMDYyNSAxNC4xMzI4IDE3LjQ4NDRDMTQuMTMyOCAxNy44OTA2IDEzLjk4NDQgMTguMjQyMiAxMy42ODc1IDE4LjUzOTFDMTMuMzkwNiAxOC44MzU5IDEzLjAzOTEgMTguOTg0NCAxMi42MzI4IDE4Ljk4NDRaIn0pfSksdko9WCgic3ZnIix7d2lkdGg6IjIxIixoZWlnaHQ6IjIxIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbWCgicGF0aCIse2Q6Ik0xMiA1SDZhMiAyIDAgMCAwLTIgMnYzIn0pLFgoInBhdGgiLHtkOiJtOSA4IDMtMy0zLTMifSksWCgicGF0aCIse2Q6Ik00IDE0djRhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjdhMiAyIDAgMCAwLTItMmgtMiJ9KV19KSxnSj1fMChmdW5jdGlvbih7b25DbGljazpKLC4uLlF9LFope2xldCBLPW0yKCJIb21lQnV0dG9uIik7cmV0dXJuIFgocDIse3JlZjpaLCJhcmlhLWxhYmVsIjoiSG9tZSIsb25DbGljazooWSk9PntpZihKPy4oWSksWS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtLLmV4ZWMoU0ooSy5kZXZpY2VUeXBlLEsuZGV2aWNlVWRpZCkpfSwuLi5RLGNoaWxkcmVuOlJKfSl9KSxoSj1fMChmdW5jdGlvbih7b25DbGljazpKLC4uLlF9LFope2xldCBLPW0yKCJTY3JlZW5zaG90QnV0dG9uIik7cmV0dXJuIFgocDIse3JlZjpaLCJhcmlhLWxhYmVsIjoiU2NyZWVuc2hvdCIsb25DbGljazooWSk9PntpZihKPy4oWSksWS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpZihLLmRldmljZVVkaWQpSy5leGVjKGB4Y3J1biBzaW1jdGwgaW8gJHtLLmRldmljZVVkaWR9IHNjcmVlbnNob3Qgfi9EZXNrdG9wL3NlcnZlLXNpbS1zY3JlZW5zaG90LSQoZGF0ZSArJXMpLnBuZ2ApfSwuLi5RLGNoaWxkcmVuOmpKfSl9KSxmSj1fMChmdW5jdGlvbih7b25DbGljazpKLGZvcmNlRGlzYWJsZWQ6USwuLi5afSxLKXtsZXQgWT1tMigiUm90YXRlQnV0dG9uIikscT1ZLmRldmljZVR5cGU9PT0id2F0Y2gifHxZLmRldmljZVR5cGU9PT0idmlzaW9uIixbVixHXT1BKCJwb3J0cmFpdCIpO3JldHVybiBfKCgpPT57RyhZLm9yaWVudGF0aW9uPz8icG9ydHJhaXQiKX0sW1kuZGV2aWNlVWRpZCxZLm9yaWVudGF0aW9uXSksWChwMix7cmVmOkssImFyaWEtbGFiZWwiOiJSb3RhdGUgZGV2aWNlIixmb3JjZURpc2FibGVkOlF8fHEsb25DbGljazooQik9PntpZihKPy4oQiksQi5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpZighWS5kZXZpY2VVZGlkfHxxKXJldHVybjtsZXQgTj1LMltZLm9yaWVudGF0aW9uPz9WXTtpZihHKE4pLFkub25Sb3RhdGUpWS5vblJvdGF0ZShOKTtlbHNlIFkuZXhlYyhgc2VydmUtc2ltIHJvdGF0ZSAke059IC1kICR7WS5kZXZpY2VVZGlkfWApfSwuLi5aLGNoaWxkcmVuOnZKfSl9KSxJMT1USjtJMS5UaXRsZT1FSjtJMS5BY3Rpb25zPWJKO0kxLkJ1dHRvbj1wMjtJMS5Ib21lQnV0dG9uPWdKO0kxLlNjcmVlbnNob3RCdXR0b249aEo7STEuUm90YXRlQnV0dG9uPWZKO3ZhciBzOT1be25hbWU6IlZvbHVtZSBkb3duIixwYWdlOjEyLHVzYWdlOjIzNCxJY29uOloyfSx7bmFtZToiVm9sdW1lIHVwIixwYWdlOjEyLHVzYWdlOjIzMyxJY29uOlgyfSx7bmFtZToiUG93ZXIiLHBhZ2U6MTIsdXNhZ2U6NDgsSWNvbjpyNX0se25hbWU6IkNhbWVyYSBjb250cm9sIixwYWdlOjY1MjgwLHVzYWdlOjEwMixJY29uOmY1fV07ZnVuY3Rpb24gdDkoe3ZhbHVlOiQsb25QcmVzczpKLGljb25Sb3RhdGlvbjpRPTB9KXtsZXQgWj1UKCExKSxLPVAoKCk9PntpZihaLmN1cnJlbnQpWi5jdXJyZW50PSExLEooJCwidXAiKX0sWyQsSl0pO3JldHVybiBfKCgpPT5LLFtLXSksWChJMS5CdXR0b24seyJhcmlhLWxhYmVsIjokLm5hbWUsdGl0bGU6JC5uYW1lLHN0eWxlOnt0cmFuc2Zvcm06YHJvdGF0ZSgke1F9ZGVnKWAsY29sb3I6ZDEoMC45KSx0cmFuc2l0aW9uOiJvcGFjaXR5IDE4MG1zIGVhc2UsIGJhY2tncm91bmQtY29sb3IgMTUwbXMsIGNvbG9yIDE1MG1zIn0sb25Qb2ludGVyRG93bjooWSk9PntpZihZLnN0b3BQcm9wYWdhdGlvbigpLFkuYnV0dG9uIT09MClyZXR1cm47WS5wcmV2ZW50RGVmYXVsdCgpLFkuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShZLnBvaW50ZXJJZCksWi5jdXJyZW50PSEwLEooJCwiZG93biIpfSxvblBvaW50ZXJVcDpLLG9uUG9pbnRlckNhbmNlbDpLLG9uTG9zdFBvaW50ZXJDYXB0dXJlOkssb25DbGljazooWSk9PntpZihZLmRldGFpbD09PTApSigkLCJwcmVzcyIpfSxjaGlsZHJlbjpYKCQuSWNvbix7c2l6ZToxOCxzdHJva2VXaWR0aDoyLCJhcmlhLWhpZGRlbiI6InRydWUifSl9KX1mdW5jdGlvbiBlOSgkLEope2xldCBRPXEyKGowKEopLmlucHV0T3JpZW50YXRpb24sdTApLFo9UT09PXg5PzEtJC54OlE9PT1qOT8kLng6UT09PVI5PzEtJC55OiQueTtyZXR1cm4gWTIoWik9PT12b2lkIDA/JDp7Li4uJCxlZGdlOlF9fWZ1bmN0aW9uICQ2KCQsSil7cmV0dXJuICQuZWRnZT09PXZvaWQgMD9KOnsuLi5KLGVkZ2U6JC5lZGdlfX1hc3luYyBmdW5jdGlvbiBtSigkLEo9KFopPT5uYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChaKSxRPWZldGNoKXt0cnl7bGV0IFo9YXdhaXQgUSgkLHtjYWNoZToibm8tc3RvcmUifSksSz1hd2FpdCBaLnRleHQoKTtpZihaLnN0YXR1cz09PTQwMylyZXR1cm4iRGlhZ25vc3RpY3MgYXJlIGxvY2FsaG9zdC1vbmx5LiBSdW4gYHNlcnZlLXNpbSBkb2N0b3IgLS1qc29uYCBvbiB0aGUgTWFjLiI7aWYoWi5zdGF0dXM9PT00MjkpcmV0dXJuIkRpYWdub3N0aWNzIGFyZSByYXRlLWxpbWl0ZWQ7IHRyeSBhZ2FpbiBpbiBhIGZldyBzZWNvbmRzLiI7aWYoIVoub2spcmV0dXJuYERpYWdub3N0aWNzIGZhaWxlZCAoSFRUUCAke1ouc3RhdHVzfSkuYDtyZXR1cm4gYXdhaXQgSihLKSwiQ29waWVkIGRpYWdub3N0aWNzIEpTT04uIn1jYXRjaChaKXtyZXR1cm5gQ291bGQgbm90IGNvcHkgZGlhZ25vc3RpY3M6ICR7WiBpbnN0YW5jZW9mIEVycm9yP1oubWVzc2FnZTpTdHJpbmcoWil9YH19ZnVuY3Rpb24gSjYoe3RpdGxlOiQsZXJyb3I6SixkaWFnbm9zdGljc0VuZHBvaW50OlF9KXtsZXRbWixLXT1BKG51bGwpLFk9Si5yZXRyeUluTXMhPW51bGw/YFJldHJ5aW5nIGluICR7TWF0aC5tYXgoMSxNYXRoLnJvdW5kKEoucmV0cnlJbk1zLzEwMDApKX1zLmA6bnVsbDtyZXR1cm4gWCgiZGl2Iix7cm9sZToiYWxlcnQiLCJkYXRhLXRlc3RpZCI6InN0cmVhbS1lcnJvci1wYW5lbCIsY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNiBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpYKCJkaXYiLHtjbGFzc05hbWU6InBvaW50ZXItZXZlbnRzLWF1dG8gbWF4LXctWzQyMHB4XSByb3VuZGVkLXhsIHB4LTQgcHktMyB0ZXh0LVsxM3B4XSBsZWFkaW5nLVsxLjRdIGJnLXBhbmVsLzkyIHRleHQtaW5rLTk1IGJvcmRlciBib3JkZXItZGFuZ2VyLzQ1IHNoYWRvdy1wb3BvdmVyIixjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJmb250LXNlbWlib2xkIHRleHQtZGFuZ2VyIixjaGlsZHJlbjokfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJtdC0xIixjaGlsZHJlbjpKLnJlYXNvbn0pLFgoImRpdiIse2NsYXNzTmFtZToibXQtMSBmb250LW1vbm8gdGV4dC1bMTFweF0gdGV4dC1pY29uIixjaGlsZHJlbjpbW0ouZXJyb3IsSi5zdGFnZSYmYHN0YWdlPSR7Si5zdGFnZX1gLEouc3RhdHVzP2BIVFRQICR7Si5zdGF0dXN9YDpudWxsXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpLFk/YCDCtyAke1l9YDoiIl19KSxYKCJkaXYiLHtjbGFzc05hbWU6Im10LTIgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIiLGNoaWxkcmVuOltYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLGNsYXNzTmFtZToicm91bmRlZC1tZCBweC0yIHB5LTEgdGV4dC1bMTJweF0gZm9udC1tZWRpdW0gYmctaW5rLzEyIHRleHQtaW5rLTk1IixvbkNsaWNrOigpPT57bUooUSkudGhlbihLKX0sY2hpbGRyZW46IkNvcHkgZGlhZ25vc3RpY3MifSksWiYmWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC1pY29uIixjaGlsZHJlbjpafSldfSldfSl9KX1mdW5jdGlvbiBlMCgkKXtyZXR1cm4gJCYmdHlwZW9mICQuZGV2aWNlPT09InN0cmluZyImJnR5cGVvZiAkLnVybD09PSJzdHJpbmciPyQ6bnVsbH1mdW5jdGlvbiBiMSgkKXtsZXQgUT13aW5kb3cuX19TSU1fUFJFVklFV19fPy5iYXNlUGF0aD8/KHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cLyskLywiIil8fCIvIik7cmV0dXJuIFE9PT0iLyI/YC8keyR9YDpgJHtRfS8keyR9YH1mdW5jdGlvbiBRNih7dXJsOiQscHJvamVjdGlvbjpKLG9uVG91Y2g6USxvbk11bHRpVG91Y2g6WixvbkVycm9yOkssb25IYXJkd2FyZVByZXNzOlksb25TdHJlYW1pbmdDaGFuZ2U6cSxvblN0cmVhbUVycm9yOlYsc2NyZWVuQ29uZmlnOkcsY2hpbGRyZW46Qn0pe2xldCBOPUk5KEopLHo9VDkoSiksW1UsSF09QShudWxsKTtfKCgpPT57bGV0IEk9c2V0VGltZW91dCgoKT0+SCh6KSwyMjApO3JldHVybigpPT5jbGVhclRpbWVvdXQoSSl9LFt6XSk7bGV0IEY9SiE9bnVsbCYmVT09PXosTD1UKG51bGwpLHtzdWJzY3JpYmVGcmFtZTprLGVycm9yOkN9PXkyKCQscSksTz1UKFYpO08uY3VycmVudD1WLF8oKCk9PntPLmN1cnJlbnQ/LihDKX0sW0NdKSxfKCgpPT4oKT0+Ty5jdXJyZW50Py4obnVsbCksW10pO2xldFt5LEVdPUEoITEpLHc9VChLKTt3LmN1cnJlbnQ9SyxfKCgpPT57bGV0IEk9bnVsbCx1PXNldFRpbWVvdXQoKCk9PncuY3VycmVudD8uKCksMTIwMDApO0UoITEpO2xldCBaMT1rKChyKT0+e2NsZWFyVGltZW91dCh1KSxFKCEwKTtsZXQgTTE9STtpZihJPXIsTC5jdXJyZW50KUwuY3VycmVudC5zcmM9cjtpZihNMSlVUkwucmV2b2tlT2JqZWN0VVJMKE0xKX0pO3JldHVybigpPT57aWYoY2xlYXJUaW1lb3V0KHUpLFoxKCksSSlVUkwucmV2b2tlT2JqZWN0VVJMKEkpfX0sW2ssJF0pO2xldCBTPVQobmV3IE1hcCk7XygoKT0+KCk9PntsZXRbSSx1XT1bLi4uUy5jdXJyZW50LnZhbHVlcygpXTtpZihJJiZ1KVooe3R5cGU6ImVuZCIseDE6SS54LHkxOkkueSx4Mjp1LngseTI6dS55fSk7ZWxzZSBpZihJKVEoe3R5cGU6ImVuZCIsLi4uSX0pO1MuY3VycmVudC5jbGVhcigpfSxbUSxaXSk7bGV0IFExPSgpPT57bGV0W0ksdV09Wy4uLlMuY3VycmVudC52YWx1ZXMoKV07cmV0dXJuIEkmJnU/e3gxOkkueCx5MTpJLnkseDI6dS54LHkyOnUueX06bnVsbH0sZz0oSSk9PntsZXQgdT1JLmN1cnJlbnRUYXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIF85KEosKEkuY2xpZW50WC11LmxlZnQpL3Uud2lkdGgsKEkuY2xpZW50WS11LnRvcCkvdS5oZWlnaHQpfSxoPShJKT0+e2xldCB1PVMuY3VycmVudC5nZXQoSS5wb2ludGVySWQpO2lmKCF1KXJldHVybjtsZXQgWjE9UTEoKTtpZihaMSlaKHt0eXBlOiJlbmQiLC4uLloxfSksUy5jdXJyZW50LmNsZWFyKCk7ZWxzZSBRKHt0eXBlOiJlbmQiLC4uLnV9KSxTLmN1cnJlbnQuZGVsZXRlKEkucG9pbnRlcklkKTtpZihJLmN1cnJlbnRUYXJnZXQuaGFzUG9pbnRlckNhcHR1cmUoSS5wb2ludGVySWQpKUkuY3VycmVudFRhcmdldC5yZWxlYXNlUG9pbnRlckNhcHR1cmUoSS5wb2ludGVySWQpfTtyZXR1cm4gWCgiZGl2Iix7ImFyaWEtbGFiZWwiOiJJbnRlcmFjdGl2ZSAzRCBpUGhvbmUgRHVvIixjbGFzc05hbWU6InJlbGF0aXZlIHctZnVsbCBoLWZ1bGwgYmctdHJhbnNwYXJlbnQgc2VsZWN0LW5vbmUiLHN0eWxlOnt0b3VjaEFjdGlvbjoibm9uZSIsY3Vyc29yOiJwb2ludGVyIix1c2VyU2VsZWN0OiJub25lIixXZWJraXRVc2VyU2VsZWN0OiJub25lIn0sb25Qb2ludGVyRG93bjooSSk9PntpZihJLmJ1dHRvbiE9PTB8fFMuY3VycmVudC5zaXplPj0yKXJldHVybjtsZXQgdT1nKEkpO2lmKCF1KXJldHVybjtsZXQgWjE9ZTkodSxHKTtJLnByZXZlbnREZWZhdWx0KCk7bGV0IHI9Wy4uLlMuY3VycmVudC52YWx1ZXMoKV1bMF07aWYocilRKHt0eXBlOiJlbmQiLC4uLnJ9KTtTLmN1cnJlbnQuc2V0KEkucG9pbnRlcklkLFoxKSxJLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoSS5wb2ludGVySWQpO2xldCBNMT1RMSgpO2lmKE0xKVooe3R5cGU6ImJlZ2luIiwuLi5NMX0pO2Vsc2UgUSh7dHlwZToiYmVnaW4iLC4uLloxfSl9LG9uUG9pbnRlck1vdmU6KEkpPT57aWYoIVMuY3VycmVudC5oYXMoSS5wb2ludGVySWQpKXJldHVybjtsZXQgdT1nKEkpO2lmKCF1KXJldHVybjtsZXQgWjE9JDYoUy5jdXJyZW50LmdldChJLnBvaW50ZXJJZCksdSk7Uy5jdXJyZW50LnNldChJLnBvaW50ZXJJZCxaMSk7bGV0IHI9UTEoKTtpZihyKVooe3R5cGU6Im1vdmUiLC4uLnJ9KTtlbHNlIFEoe3R5cGU6Im1vdmUiLC4uLloxfSl9LG9uUG9pbnRlclVwOmgsb25Qb2ludGVyQ2FuY2VsOmgsY2hpbGRyZW46W1goImltZyIse3JlZjpMLG9uRXJyb3I6SyxhbHQ6IkxpdmUgM0QgaVBob25lIER1byIsZHJhZ2dhYmxlOiExLGNsYXNzTmFtZToiYmxvY2sgdy1mdWxsIGgtZnVsbCBvYmplY3QtY29udGFpbiBwb2ludGVyLWV2ZW50cy1ub25lIGJnLXRyYW5zcGFyZW50IixzdHlsZTp5P3ZvaWQgMDp7dmlzaWJpbGl0eToiaGlkZGVuIn19KSxDJiZYKEo2LHt0aXRsZToiM0QgdmlldyB1bmF2YWlsYWJsZSIsZXJyb3I6QyxkaWFnbm9zdGljc0VuZHBvaW50OndpbmRvdy5fX1NJTV9QUkVWSUVXX18/LmRpYWdub3N0aWNzRW5kcG9pbnQ/P2IxKCJhcGkvZGlhZ25vc3RpY3MiKX0pLEIsRiYmTi5tYXAoKEkpPT5YKCJkaXYiLHtjbGFzc05hbWU6ImR1by1oYXJkd2FyZS1hbmNob3IiLHN0eWxlOntsZWZ0OmAke0kueCoxMDB9JWAsdG9wOmAke0kueSoxMDB9JWAsdHJhbnNmb3JtOmByb3RhdGUoJHtJLmFuZ2xlfWRlZylgfSxjaGlsZHJlbjpYKCJkaXYiLHtjbGFzc05hbWU6ImR1by1oYXJkd2FyZS1yZWdpb24iLGNoaWxkcmVuOlgodDkse3ZhbHVlOnM5W0kua2V5XSxpY29uUm90YXRpb246LUkuYW5nbGUsb25QcmVzczpZfSl9KX0sSS5rZXkpKV19KX1mdW5jdGlvbiBaNigkLEope2xldCBRPShZKT0+SihZLmFsdEtleT09PSEwKSxaPSgpPT5KKCExKSxLPVsia2V5ZG93biIsImtleXVwIiwicG9pbnRlcm1vdmUiLCJwb2ludGVyZG93biJdO2ZvcihsZXQgWSBvZiBLKSQuYWRkRXZlbnRMaXN0ZW5lcihZLFEpO3JldHVybiAkLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLFopLCgpPT57Zm9yKGxldCBZIG9mIEspJC5yZW1vdmVFdmVudExpc3RlbmVyKFksUSk7JC5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixaKX19ZnVuY3Rpb24gdTIoe3R5cGU6JCxzaXplOko9MjAsc2NyZWVuT246UT0hMSxkdW86Wj0hMX0pe2xldCBLPXt3aWR0aDpKLGhlaWdodDpKLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOjEuNixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn07aWYoWilyZXR1cm4gWCgic3ZnIix7d2lkdGg6SixoZWlnaHQ6Six2aWV3Qm94OiIwIDAgMTAyIDEwMiIsZmlsbDoiY3VycmVudENvbG9yIiwiZGF0YS10ZXN0aWQiOiJkZXZpY2UtZ2x5cGgtZHVvIixjaGlsZHJlbjpbUSYmWCgicGF0aCIse2Q6Ik0yNCAxMEg3MEM3NS41MjI5IDEwIDgwIDE0LjQ3NzIgODAgMjBWODNDODAgODguNTIyOCA3NS41MjI4IDkzIDcwIDkzSDI0QzIyLjg5NTQgOTMgMjIgOTIuMTA0NiAyMiA5MVYxMkMyMiAxMC44OTU0IDIyLjg5NTQgMTAgMjQgMTBaIixmaWxsOiIjNDdiN2ZmIiwiZGF0YS10ZXN0aWQiOiJkZXZpY2UtZ2x5cGgtc2NyZWVuLW9uIn0pLFgoInBhdGgiLHtkOiJNMTcgOTFWMTJDMTcgOC4xMzQwMSAyMC4xMzQgNSAyNCA1SDcwQzc4LjI4NDMgNSA4NSAxMS43MTU3IDg1IDIwVjgzTDg0Ljk5NTEgODMuMzg2N0M4NC43OTMyIDkxLjM2MzggNzguMzYzOCA5Ny43OTMyIDcwLjM4NjcgOTcuOTk1MUw3MCA5OFY5M0M3NS41MjI4IDkzIDgwIDg4LjUyMjggODAgODNWMjBDODAgMTQuNDc3MiA3NS41MjI5IDEwIDcwIDEwSDI0QzIyLjg5NTQgMTAgMjIgMTAuODk1NCAyMiAxMlY5MUMyMiA5Mi4xMDQ2IDIyLjg5NTQgOTMgMjQgOTNWOThMMjMuNjM5NiA5Ny45OTEyQzIwLjA2MDUgOTcuODA5NyAxNy4xOTAzIDk0LjkzOTUgMTcuMDA4OCA5MS4zNjA0TDE3IDkxWk03MCA5M1Y5OEgyNFY5M0g3MFoifSksWCgiY2lyY2xlIix7Y3g6IjY5IixjeToiMjEiLHI6IjQifSksWCgicGF0aCIse2Q6Ik00MCA4OC41QzQwIDg3LjY3MTYgNDAuNjcxNiA4NyA0MS41IDg3SDYxLjVDNjIuMzI4NCA4NyA2MyA4Ny42NzE2IDYzIDg4LjVDNjMgODkuMzI4NCA2Mi4zMjg0IDkwIDYxLjUgOTBINDEuNUM0MC42NzE2IDkwIDQwIDg5LjMyODQgNDAgODguNVoifSldfSk7c3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIFgoInN2ZyIsey4uLkssY2hpbGRyZW46W1EmJlgoInJlY3QiLHt4OiI1Iix5OiIzIix3aWR0aDoiMTUiLGhlaWdodDoiMTkiLHJ4OiIxLjY1IixmaWxsOiIjNDdiN2ZmIixzdHJva2U6Im5vbmUiLCJkYXRhLXRlc3RpZCI6ImRldmljZS1nbHlwaC1zY3JlZW4tb24ifSksWCgicmVjdCIse3g6IjQiLHk6IjIuNSIsd2lkdGg6IjE2IixoZWlnaHQ6IjE5IixyeDoiMi41In0pLFgoImxpbmUiLHt4MToiMTIiLHkxOiIxOC41Iix4MjoiMTIiLHkyOiIxOC41In0pXX0pO2Nhc2Uid2F0Y2giOnJldHVybiBYKCJzdmciLHsuLi5LLGNoaWxkcmVuOltYKCJyZWN0Iix7eDoiNi41Iix5OiI3Iix3aWR0aDoiMTEiLGhlaWdodDoiMTAiLHJ4OiIzIn0pLFgoInBhdGgiLHtkOiJNOC41IDdsLjYtMy4yQTEuNSAxLjUgMCAwIDEgMTAuNiAyLjVoMi44YTEuNSAxLjUgMCAwIDEgMS41IDEuM0wxNS41IDcifSksWCgicGF0aCIse2Q6Ik04LjUgMTdsLjYgMy4yYTEuNSAxLjUgMCAwIDAgMS41IDEuM2gyLjhhMS41IDEuNSAwIDAgMCAxLjUtMS4zbC42LTMuMiJ9KV19KTtjYXNlInZpc2lvbiI6cmV0dXJuIFgoInN2ZyIsey4uLkssY2hpbGRyZW46WCgicGF0aCIse2Q6Ik0zIDExYTQgNCAwIDAgMSA0LTRoMTBhNCA0IDAgMCAxIDQgNHYyLjVhMi41IDIuNSAwIDAgMS0yLjUgMi41Yy0xLjggMC0yLjUtMS4yLTMuNS0xLjgtLjktLjUtMS42LS43LTIuNS0uN3MtMS42LjItMi41LjdjLTEgLjYtMS43IDEuOC0zLjUgMS44QTIuNSAyLjUgMCAwIDEgMyAxMy41eiJ9KX0pO2RlZmF1bHQ6cmV0dXJuIFgoInN2ZyIsey4uLkssY2hpbGRyZW46W1EmJlgoInJlY3QiLHt4OiI2Iix5OiIzIix3aWR0aDoiMTEiLGhlaWdodDoiMTkiLHJ4OiIyIixmaWxsOiIjNDdiN2ZmIixzdHJva2U6Im5vbmUiLCJkYXRhLXRlc3RpZCI6ImRldmljZS1nbHlwaC1zY3JlZW4tb24ifSksWCgicmVjdCIse3g6IjYuNSIseToiMi41Iix3aWR0aDoiMTEiLGhlaWdodDoiMTkiLHJ4OiIyLjgifSksWCgibGluZSIse3gxOiIxMC41Iix5MToiNSIseDI6IjEzLjUiLHkyOiI1In0pXX0pfX1mdW5jdGlvbiBsMih7bWluOiQsbWF4OkosdmFsdWU6USxkaXNhYmxlZDpaLGNsYXNzTmFtZTpLPSIiLHN0eWxlOlksLi4ucX0pe2xldCBHPWAkeyhKPiQ/TWF0aC5tYXgoMCxNYXRoLm1pbigxLChRLSQpLyhKLSQpKSk6MCkqMTAwfSVgLEI9Wj9UMSgwLjMpOiJ2YXIoLS1zZXJ2ZS1zaW0tdGludCkiLE49IlsmOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja106aC1bNHB4XSBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOltiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0b19yaWdodCx2YXIoLS1zbGlkZXItZmlsbC1jb2xvcilfdmFyKC0tc2xpZGVyLWZpbGwpLGNvbG9yLW1peChpbl9zcmdiLHZhcigtLXNlcnZlLXNpbS1pbmspXzIyJSx0cmFuc3BhcmVudClfdmFyKC0tc2xpZGVyLWZpbGwpKV0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOmgtWzRweF0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS10cmFja106YmctaW5rLzIyIFsmOjotbW96LXJhbmdlLXByb2dyZXNzXTpoLVs0cHhdIFsmOjotbW96LXJhbmdlLXByb2dyZXNzXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOmJnLVt2YXIoLS1zbGlkZXItZmlsbC1jb2xvcildIix6PSJbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOmFwcGVhcmFuY2Utbm9uZSBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06cm91bmRlZC1mdWxsIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06Ymctd2hpdGUgWyY6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpiZy13aGl0ZS81MCBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNoYWRvdy1bMF8xcHhfM3B4X3JnYmEoMCwwLDAsMC40NSldIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06LW10LVs0LjVweF0gWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotbW96LXJhbmdlLXRodW1iXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOmJvcmRlci1ub25lIFsmOjotbW96LXJhbmdlLXRodW1iXTpiZy13aGl0ZSBbJjpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYl06Ymctd2hpdGUvNTAiO3JldHVybiBYKCJpbnB1dCIsey4uLnEsdHlwZToicmFuZ2UiLG1pbjokLG1heDpKLHZhbHVlOlEsZGlzYWJsZWQ6WixzdHlsZTp7Ii0tc2xpZGVyLWZpbGwiOkcsIi0tc2xpZGVyLWZpbGwtY29sb3IiOkIsLi4uWX0sY2xhc3NOYW1lOmBoLVsxM3B4XSB3LWZ1bGwgYXBwZWFyYW5jZS1ub25lIHJvdW5kZWQtZnVsbCBiZy10cmFuc3BhcmVudCBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpbb3V0bGluZToxLjVweF9zb2xpZF9jb2xvci1taXgoaW5fc3JnYix2YXIoLS1zZXJ2ZS1zaW0tdGludClfNTUlLHRyYW5zcGFyZW50KV0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC00ICR7Wj8iY3Vyc29yLWRlZmF1bHQiOiJjdXJzb3ItcG9pbnRlciJ9ICR7Tn0gJHt6fSAke0t9YH0pfXZhciBwSj1be2lkOiJjbG9zZWQiLGxhYmVsOiJDbG9zZWQiLGhpbmdlRGVncmVlczowfSx7aWQ6ImJvb2siLGxhYmVsOiJCb29rIixoaW5nZURlZ3JlZXM6MTMwfSx7aWQ6Im9wZW4iLGxhYmVsOiJPcGVuIixoaW5nZURlZ3JlZXM6MTgwfV0sdUo9e3dpZHRoOjEzOTgsaGVpZ2h0OjIwMzR9LGxKPXt3aWR0aDoyMDA3LGhlaWdodDoyODUzfTt2YXIgZEo9cEoubWFwKCh7aWQ6JCxsYWJlbDpKLGhpbmdlRGVncmVlczpRfSk9PmNKKCQsSixRKSk7ZnVuY3Rpb24gY0ooJCxKLFEpe2xldCBaPVE8OTAsSz1aP3VKOmxKO3JldHVybntpZDokLGxhYmVsOkosaGluZ2VEZWdyZWVzOlEsY292ZXJBY3RpdmU6Wix3aWR0aDpLLndpZHRoLGhlaWdodDpLLmhlaWdodH19ZnVuY3Rpb24gWDYoKXtyZXR1cm4gZEp9dmFyIGlKPVg2KCksb0o9e2NvbG9yOiJ2YXIoLS1zZXJ2ZS1zaW0tdGludCkifSxySj17Y2xvc2VkOlgoInNwYW4iLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6ImNvbnRlbnRzIixjaGlsZHJlbjpYKHUyLHt0eXBlOiJpcGhvbmUiLGR1bzohMCxzaXplOjE4fSl9KSxib29rOlgoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDEwMiAxMDIiLGZpbGw6Im5vbmUiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOlgoInBhdGgiLHtkOiJNODUuNzQyMiAxNC41NzEzQzg5Ljc1OTUgMTMuNzc5IDkzLjUgMTYuODUzNiA5My41IDIwLjk0ODJWODIuNTcxM0M5My40OTk4IDg2LjUzOTYgODkuOTc0NSA4OS41ODE2IDg2LjA0ODggODkuMDAxTDUyLjE4MjYgODMuOTkyMkM1MS4wNjY5IDgzLjgyNzIgNDkuOTMzMSA4My44MjcyIDQ4LjgxNzQgODMuOTkyMkwxNC45NTEyIDg5LjAwMUMxMS4wMjU1IDg5LjU4MTYgNy41MDAyMSA4Ni41Mzk2IDcuNSA4Mi41NzEzVjIwLjk0ODJDNy41IDE2Ljg1MzYgMTEuMjQwNSAxMy43NzkgMTUuMjU3OCAxNC41NzEzTDQ4LjI3NTQgMjEuMDgyQzQ5Ljc0NDQgMjEuMzcxNyA1MS4yNTU2IDIxLjM3MTcgNTIuNzI0NiAyMS4wODJMODUuNzQyMiAxNC41NzEzWiIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiI1In0pfSksb3BlbjpYKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAzMiAzMiIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOltYKCJyZWN0Iix7eDoiMiIseToiNCIsd2lkdGg6IjI4IixoZWlnaHQ6IjI0IixyeDoiMyJ9KSxYKCJwYXRoIix7ZDoiTTE0IDI1aDQifSldfSl9O2Z1bmN0aW9uIEs2KHthbmdsZTokLG9uQ2hhbmdlOkosb25Qb3NlOlEsb3JpZW50YXRpb246Wj0icG9ydHJhaXQifSl7bGV0IEs9e3BvcnRyYWl0OjAsbGFuZHNjYXBlX2xlZnQ6OTAscG9ydHJhaXRfdXBzaWRlX2Rvd246MTgwLGxhbmRzY2FwZV9yaWdodDotOTB9W1pdLFtZLHFdPUEoSyk7XygoKT0+e3EoKEIpPT5CKygoSy1CKzU0MCklMzYwKzM2MCklMzYwLTE4MCl9LFtLXSk7bGV0W1YsR109QSghMSk7cmV0dXJuIF8oKCk9Plo2KHdpbmRvdyxHKSxbXSksWCgiZGl2Iix7cm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjoiRm9sZCBwb3NlIixjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjpWP1goImRpdiIse2NsYXNzTmFtZToiZmxleCB3LTM2IGl0ZW1zLWNlbnRlciBnYXAtMS41IHB4LTEiLGNoaWxkcmVuOltYKGwyLHsiYXJpYS1sYWJlbCI6IkhpbmdlIGFuZ2xlIiwiYXJpYS12YWx1ZXRleHQiOmAke01hdGgucm91bmQoJCl9IGRlZ3JlZXNgLG1pbjowLG1heDoxODAsc3RlcDowLjEsdmFsdWU6JCxvbkNoYW5nZTooQik9PkooTnVtYmVyKEIuY3VycmVudFRhcmdldC52YWx1ZSkpLGNsYXNzTmFtZToibWluLXctMCBmbGV4LTEifSksWCgib3V0cHV0Iix7Y2xhc3NOYW1lOiJ3LTExIHRleHQtcmlnaHQgdGV4dC1bMTFweF0gdGFidWxhci1udW1zIHRleHQtaW5rLTkwIixjaGlsZHJlbjpbTWF0aC5yb3VuZCgkKSwiwrAiXX0pXX0pOmlKLm1hcCgoQik9PntsZXQgTj1NYXRoLmFicygkLUIuaGluZ2VEZWdyZWVzKTwwLjY7cmV0dXJuIFgoSTEuQnV0dG9uLHsiYXJpYS1sYWJlbCI6YCR7Qi5sYWJlbH0gcG9zZWAsdGl0bGU6YCR7Qi5sYWJlbH0gwrcgJHtCLmhpbmdlRGVncmVlc33CsGAsImFyaWEtcHJlc3NlZCI6TixvbkNsaWNrOigpPT5RKEIuaWQpLHN0eWxlOk4/b0o6dm9pZCAwLGNoaWxkcmVuOlgoInNwYW4iLHtjbGFzc05hbWU6ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtb3Rpb24tcmVkdWNlOnRyYW5zaXRpb24tbm9uZSIsc3R5bGU6e3RyYW5zZm9ybTpgcm90YXRlKCR7WX1kZWcpYCx0cmFuc2l0aW9uOiJ0cmFuc2Zvcm0gMzAwbXMgZWFzZS1pbi1vdXQifSxjaGlsZHJlbjpySltCLmlkXX0pfSxCLmlkKX0pfSl9ZnVuY3Rpb24gbkooJCxKKXtmb3IodmFyIFEgaW4gSikkW1FdPUpbUV07cmV0dXJuICR9ZnVuY3Rpb24gWTYoJCxKKXtmb3IodmFyIFEgaW4gJClpZihRIT09Il9fc291cmNlIiYmIShRIGluIEopKXJldHVybiEwO2Zvcih2YXIgWiBpbiBKKWlmKFohPT0iX19zb3VyY2UiJiYkW1pdIT09SltaXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBxNigkLEope3RoaXMucHJvcHM9JCx0aGlzLmNvbnRleHQ9Sn0ocTYucHJvdG90eXBlPW5ldyBuMSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAscTYucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbigkLEope3JldHVybiBZNih0aGlzLnByb3BzLCQpfHxZNih0aGlzLnN0YXRlLEopfTt2YXIgVjY9dC5fX2I7dC5fX2I9ZnVuY3Rpb24oJCl7JC50eXBlJiYkLnR5cGUuX19mJiYkLnJlZiYmKCQucHJvcHMucmVmPSQucmVmLCQucmVmPW51bGwpLFY2JiZWNigkKX07dmFyIGFKPXQuX19lO3QuX19lPWZ1bmN0aW9uKCQsSixRLFope2lmKCQudGhlbil7Zm9yKHZhciBLLFk9SjtZPVkuX187KWlmKChLPVkuX19jKSYmSy5fX2MpcmV0dXJuIEouX19lPT1udWxsJiYoSi5fX2U9US5fX2UsSi5fX2s9US5fX2spLEsuX19jKCQsSil9YUooJCxKLFEsWil9O3ZhciBHNj10LnVubW91bnQ7ZnVuY3Rpb24gSDYoJCxKLFEpe3JldHVybiAkJiYoJC5fX2MmJiQuX19jLl9fSCYmKCQuX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKFope3R5cGVvZiBaLl9fYz09ImZ1bmN0aW9uIiYmWi5fX2MoKX0pLCQuX19jLl9fSD1udWxsKSwoJD1uSih7fSwkKSkuX19jIT1udWxsJiYoJC5fX2MuX19QPT09USYmKCQuX19jLl9fUD1KKSwkLl9fYy5fX2U9ITAsJC5fX2M9bnVsbCksJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gSDYoWixKLFEpfSkpLCR9ZnVuY3Rpb24gazYoJCxKLFEpe3JldHVybiAkJiZRJiYoJC5fX3Y9bnVsbCwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKFope3JldHVybiBrNihaLEosUSl9KSwkLl9fYyYmJC5fX2MuX19QPT09SiYmKCQuX19lJiZRLmFwcGVuZENoaWxkKCQuX19lKSwkLl9fYy5fX2U9ITAsJC5fX2MuX19QPVEpKSwkfWZ1bmN0aW9uIGwzKCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIEM2KCQpe3ZhciBKPSQuX18mJiQuX18uX19jO3JldHVybiBKJiZKLl9fYSYmSi5fX2EoJCl9ZnVuY3Rpb24gZDIoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH10LnVubW91bnQ9ZnVuY3Rpb24oJCl7dmFyIEo9JC5fX2M7SiYmKEouX196PSEwKSxKJiZKLl9fUiYmSi5fX1IoKSxKJiYzMiYkLl9fdSYmKCQudHlwZT1udWxsKSxHNiYmRzYoJCl9LChsMy5wcm90b3R5cGU9bmV3IG4xKS5fX2M9ZnVuY3Rpb24oJCxKKXt2YXIgUT1KLl9fYyxaPXRoaXM7Wi5vPT1udWxsJiYoWi5vPVtdKSxaLm8ucHVzaChRKTt2YXIgSz1DNihaLl9fdiksWT0hMSxxPWZ1bmN0aW9uKCl7WXx8Wi5fX3p8fChZPSEwLFEuX19SPW51bGwsSz9LKEcpOkcoKSl9O1EuX19SPXE7dmFyIFY9US5fX1A7US5fX1A9bnVsbDt2YXIgRz1mdW5jdGlvbigpe2lmKCEtLVouX191KXtpZihaLnN0YXRlLl9fYSl7dmFyIEI9Wi5zdGF0ZS5fX2E7Wi5fX3YuX19rWzBdPWs2KEIsQi5fX2MuX19QLEIuX19jLl9fTyl9dmFyIE47Zm9yKFouc2V0U3RhdGUoe19fYTpaLl9fYj1udWxsfSk7Tj1aLm8ucG9wKCk7KU4uX19QPVYsTi5mb3JjZVVwZGF0ZSgpfX07Wi5fX3UrK3x8MzImSi5fX3V8fFouc2V0U3RhdGUoe19fYTpaLl9fYj1aLl9fdi5fX2tbMF19KSwkLnRoZW4ocSxxKX0sbDMucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSxsMy5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQsSil7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIFE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksWj10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1INih0aGlzLl9fYixRLFouX19PPVouX19QKX10aGlzLl9fYj1udWxsfXZhciBLPUouX19hJiZsMShLMSxudWxsLCQuZmFsbGJhY2spO3JldHVybiBLJiYoSy5fX3UmPS0zMyksW2wxKEsxLG51bGwsSi5fX2E/bnVsbDokLmNoaWxkcmVuKSxLXX07dmFyIEI2PWZ1bmN0aW9uKCQsSixRKXtpZigrK1FbMV09PT1RWzBdJiYkLmwuZGVsZXRlKEopLCQucHJvcHMucmV2ZWFsT3JkZXImJigkLnByb3BzLnJldmVhbE9yZGVyWzBdIT09InQifHwhJC5sLnNpemUpKWZvcihRPSQuaTtROyl7Zm9yKDtRLmxlbmd0aD4zOylRLnBvcCgpKCk7aWYoUVsxXTxRWzBdKWJyZWFrOyQuaT1RPVFbMl19fTsoZDIucHJvdG90eXBlPW5ldyBuMSkuX19hPWZ1bmN0aW9uKCQpe3ZhciBKPXRoaXMsUT1DNihKLl9fdiksWj1KLmwuZ2V0KCQpO3JldHVybiBaWzBdKyssZnVuY3Rpb24oSyl7dmFyIFk9ZnVuY3Rpb24oKXtKLnByb3BzLnJldmVhbE9yZGVyPyhaLnB1c2goSyksQjYoSiwkLFopKTpLKCl9O1E/UShZKTpZKCl9fSxkMi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciBKPUswKCQuY2hpbGRyZW4pOyQucmV2ZWFsT3JkZXImJiQucmV2ZWFsT3JkZXJbMF09PT0iYiImJkoucmV2ZXJzZSgpO2Zvcih2YXIgUT1KLmxlbmd0aDtRLS07KXRoaXMubC5zZXQoSltRXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gJC5jaGlsZHJlbn0sZDIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1kMi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgJD10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKEosUSl7QjYoJCxRLEopfSl9O3ZhciBzSj10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyx0Sj0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sZUo9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLywkUT0vW0EtWjAtOV0vZyxKUT10eXBlb2YgZG9jdW1lbnQ8InUiLFFRPWZ1bmN0aW9uKCQpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdCgkKX07ZnVuY3Rpb24gRjYoJCxKLFEpe3JldHVybiBKLl9faz09bnVsbCYmKEoudGV4dENvbnRlbnQ9IiIpLFIwKCQsSiksdHlwZW9mIFE9PSJmdW5jdGlvbiImJlEoKSwkPyQuX19jOm51bGx9bjEucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oJCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4xLnByb3RvdHlwZSwkLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbIlVOU0FGRV8iKyRdfSxzZXQ6ZnVuY3Rpb24oSil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsJCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkp9KX19KX0pO3ZhciB6Nj10LmV2ZW50O3QuZXZlbnQ9ZnVuY3Rpb24oJCl7cmV0dXJuIHo2JiYoJD16NigkKSksJC5wZXJzaXN0PWZ1bmN0aW9uKCl7fSwkLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSwkLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LCQubmF0aXZlRXZlbnQ9JH07dmFyIEE2LFpRPXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxONj10LnZub2RlO3Qudm5vZGU9ZnVuY3Rpb24oJCl7dHlwZW9mICQudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKEope3Zhcntwcm9wczpRLHR5cGU6Wn09SixLPXt9LFk9Wi5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgcSBpbiBRKXt2YXIgVj1RW3FdO2lmKCEocT09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIFEpJiZWPT1udWxsfHxKUSYmcT09PSJjaGlsZHJlbiImJlo9PT0ibm9zY3JpcHQifHxxPT09ImNsYXNzInx8cT09PSJjbGFzc05hbWUiKSl7dmFyIEc9cS50b0xvd2VyQ2FzZSgpO3E9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluIFEmJlEudmFsdWU9PW51bGw/cT0idmFsdWUiOnE9PT0iZG93bmxvYWQiJiZWPT09ITA/Vj0iIjpHPT09InRyYW5zbGF0ZSImJlY9PT0ibm8iP1Y9ITE6R1swXT09PSJvIiYmR1sxXT09PSJuIj9HPT09Im9uZG91YmxlY2xpY2siP3E9Im9uZGJsY2xpY2siOkchPT0ib25jaGFuZ2UifHxaIT09ImlucHV0IiYmWiE9PSJ0ZXh0YXJlYSJ8fFFRKFEudHlwZSk/Rz09PSJvbmZvY3VzIj9xPSJvbmZvY3VzaW4iOkc9PT0ib25ibHVyIj9xPSJvbmZvY3Vzb3V0IjplSi50ZXN0KHEpJiYocT1HKTpHPXE9Im9uaW5wdXQiOlkmJnRKLnRlc3QocSk/cT1xLnJlcGxhY2UoJFEsIi0kJiIpLnRvTG93ZXJDYXNlKCk6Vj09PW51bGwmJihWPXZvaWQgMCksRz09PSJvbmlucHV0IiYmS1txPUddJiYocT0ib25pbnB1dENhcHR1cmUiKSxLW3FdPVZ9fVo9PSJzZWxlY3QiJiYoSy5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShLLnZhbHVlKSYmKEsudmFsdWU9SzAoUS5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihCKXtCLnByb3BzLnNlbGVjdGVkPUsudmFsdWUuaW5kZXhPZihCLnByb3BzLnZhbHVlKSE9LTF9KSksSy5kZWZhdWx0VmFsdWUhPW51bGwmJihLLnZhbHVlPUswKFEuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oQil7Qi5wcm9wcy5zZWxlY3RlZD1LLm11bHRpcGxlP0suZGVmYXVsdFZhbHVlLmluZGV4T2YoQi5wcm9wcy52YWx1ZSkhPS0xOksuZGVmYXVsdFZhbHVlPT1CLnByb3BzLnZhbHVlfSkpKSxRLmNsYXNzJiYhUS5jbGFzc05hbWU/KEsuY2xhc3M9US5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkoSywiY2xhc3NOYW1lIixaUSkpOlEuY2xhc3NOYW1lJiYoSy5jbGFzcz1LLmNsYXNzTmFtZT1RLmNsYXNzTmFtZSksSi5wcm9wcz1LfSgkKSwkLiQkdHlwZW9mPXNKLE42JiZONigkKX07dmFyIFU2PXQuX19yO3QuX19yPWZ1bmN0aW9uKCQpe1U2JiZVNigkKSxBNj0kLl9fY307dmFyIEw2PXQuZGlmZmVkO3QuZGlmZmVkPWZ1bmN0aW9uKCQpe0w2JiZMNigkKTt2YXJ7cHJvcHM6SixfX2U6UX09JDtRIT1udWxsJiYkLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gSiYmSi52YWx1ZSE9PVEudmFsdWUmJihRLnZhbHVlPUoudmFsdWU9PW51bGw/IiI6Si52YWx1ZSksQTY9bnVsbH07ZnVuY3Rpb24gTzYoJCl7cmV0dXJuISEkLl9fayYmKFIwKG51bGwsJCksITApfWZ1bmN0aW9uIE02KCQpe3JldHVybntyZW5kZXI6ZnVuY3Rpb24oSil7RjYoSiwkKX0sdW5tb3VudDpmdW5jdGlvbigpe082KCQpfX19ZnVuY3Rpb24gRzIoe29wZW46JH0pe3JldHVybiBYKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNsYXNzTmFtZToibGVtLWNoZXZyb24gdGV4dC1pbmstNTAiLHN0eWxlOnt0cmFuc2Zvcm06JD8icm90YXRlKDE4MGRlZykiOiJyb3RhdGUoMGRlZykifSxjaGlsZHJlbjpYKCJwb2x5bGluZSIse3BvaW50czoiNiA5IDEyIDE1IDE4IDkifSl9KX1mdW5jdGlvbiBjMih7ZGlyOiR9KXtyZXR1cm4gWCgic3ZnIix7d2lkdGg6IjkiLGhlaWdodDoiOSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNsYXNzTmFtZToibXItWzNweF0iLGNoaWxkcmVuOiQ9PT0idXAiP1goInBvbHlnb24iLHtwb2ludHM6IjEyLDQgMjAsMTggNCwxOCJ9KTpYKCJwb2x5Z29uIix7cG9pbnRzOiI0LDYgMjAsNiAxMiwyMCJ9KX0pfWZ1bmN0aW9uIEIyKCl7cmV0dXJuIFgoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOlgoInBvbHlnb24iLHtwb2ludHM6IjYsNCAyMCwxMiA2LDIwIn0pfSl9ZnVuY3Rpb24gZDMoKXtyZXR1cm4gWCgic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46W1goInJlY3QiLHt4OiI2Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiIxNiJ9KSxYKCJyZWN0Iix7eDoiMTQiLHk6IjQiLHdpZHRoOiI0IixoZWlnaHQ6IjE2In0pXX0pfWZ1bmN0aW9uIHoyKCl7cmV0dXJuIFgoInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOlgoInJlY3QiLHt4OiI1Iix5OiI1Iix3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHJ4OiIxLjUifSl9KX1mdW5jdGlvbiBjMygpe3JldHVybiBYKGQ1LHtzaXplOjEyLHN0cm9rZVdpZHRoOjIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KX1mdW5jdGlvbiBpMygpe3JldHVybiBYKCJzdmciLHt3aWR0aDoiOSIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNCAyIDkgMTMiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpYKCJwYXRoIix7ZDoiTTYuMDA4NTIgMTQuODA1NEM1Ljg5MTgxIDE0LjkzNSA1Ljc1ODE1IDE0Ljk5OTggNS42MDc1NiAxNC45OTk4QzUuNDU2OTYgMTUuMDAzMyA1LjMyMzMgMTQuOTYxMyA1LjIwNjU5IDE0Ljg3MzdDNS4wOTM2NCAxNC43ODYxIDUuMDI1ODcgMTQuNjcyMyA1LjAwMzI4IDE0LjUzMjJDNC45ODQ0NiAxNC4zOTIxIDUuMDQ2NTggMTQuMjQ1IDUuMTg5NjUgMTQuMDkwOUw2Ljk0NTk5IDEyLjE1MjJMNy4yNDUzIDEwLjg3NTVMOC4xOTk3MSAxMS45ODkzTDguMDU4NTMgMTIuMzkzOUM4LjAyMDg4IDEyLjQ5NTUgNy45ODY5OSAxMi41NzA4IDcuOTU2ODcgMTIuNjE5OEM3LjkzMDUyIDEyLjY2ODggNy44NzQwNCAxMi43NDA2IDcuNzg3NDUgMTIuODM1Mkw2LjAwODUyIDE0LjgwNTRaTTEwLjM0NTcgMTQuNjQyNUw5LjEwMzI5IDEyLjMwNDZDOS4wNzY5NCAxMi4yNjI1IDkuMDU0MzUgMTIuMjIyMyA5LjAzNTUzIDEyLjE4MzdDOS4wMTY3IDEyLjE0NTIgOC45NzcxNyAxMi4wOTA5IDguOTE2OTMgMTIuMDIwOUw3LjcxOTY4IDEwLjYxODFDNy40OTM3OSAxMC4zNTU0IDcuMzM3NTQgMTAuMTI5NSA3LjI1MDk1IDkuOTQwMzRDNy4xNjQzNSA5Ljc0NzcgNy4xMzQyNCA5LjQ5OTAxIDcuMTYwNTkgOS4xOTQyOUw3LjI2MjI0IDcuOTgwNjVDNy4yNjk3NyA3LjkwNzEgNy4yMzIxMiA3Ljg1NDU2IDcuMTQ5MjkgNy44MjMwNEM3LjA2NjQ3IDcuNzkxNTEgNi45ODU1MiA3LjgwOTAzIDYuOTA2NDYgNy44NzU1N0w2LjQ3MTYxIDguMjQzMzRMNi4zNDE3MiA5LjY3MjM5QzYuMzIyODkgOS44NDc1MiA2LjI2NDU0IDkuOTc4ODcgNi4xNjY2NSAxMC4wNjY0QzYuMDY4NzYgMTAuMTU0IDUuOTM4ODcgMTAuMTkyNSA1Ljc3Njk4IDEwLjE4MkM1LjYxMTMyIDEwLjE3NSA1LjQ4MzMxIDEwLjExOSA1LjM5Mjk1IDEwLjAxMzlDNS4zMDYzNiA5LjkwODgyIDUuMjY4NzEgOS43NzM5NyA1LjI4MDAxIDkuNjA5MzVMNS4zODczMSA4LjMwNjM5QzUuNDAyMzcgOC4xMjc3NiA1LjQzODEzIDcuOTc1NCA1LjQ5NDYxIDcuODQ5MzFDNS41NTQ4NSA3LjcyMzIxIDUuNjYwMjYgNy41OTE4NyA1LjgxMDg2IDcuNDU1MjdMNi43MTQ0NSA2LjYyNTE2QzcuMDA0MzUgNi4zNjI0NyA3LjI2OTc3IDYuMTYxMDcgNy41MTA3MyA2LjAyMDk2QzcuNzUxNjggNS44NzczNiA4LjAyODQxIDUuODA1NTYgOC4zNDA5IDUuODA1NTZDOC43NTg4IDUuODA1NTYgOS4wNzg4MiA1LjkzMzQgOS4zMDA5NSA2LjE4OTA5QzkuNTI2ODUgNi40NDQ3OCA5LjYyNDc0IDYuNzYxNzYgOS41OTQ2MiA3LjE0MDA0TDkuNDc2MDIgOC43MzE5NUM5LjQ1MzQzIDkuMDE1NjYgOS40MTk1NSA5LjI2MjU5IDkuMzc0MzcgOS40NzI3NUM5LjMyOTE5IDkuNjgyOSA5LjI1Mzg5IDkuOTI5ODMgOS4xNDg0NyAxMC4yMTM1TDkuMDkyIDEwLjM2MDZMOS44NjU2OSAxMS4zNzk5QzkuOTIyMTcgMTEuNDUzNCA5Ljk4MDUyIDExLjUzNCAxMC4wNDA4IDExLjYyMTZDMTAuMTAxIDExLjcwOTEgMTAuMTUzNyAxMS43OTY3IDEwLjE5ODkgMTEuODg0M0wxMS40MDc0IDE0LjE2NDRDMTEuNTA1MyAxNC4zNTAxIDExLjUyNDEgMTQuNTExMiAxMS40NjM5IDE0LjY0NzhDMTEuNDAzNyAxNC43ODQ0IDExLjMwMiAxNC44ODI1IDExLjE1ODkgMTQuOTQyQzExLjAxOTYgMTUuMDAxNSAxMC44NzA5IDE1LjAxMDMgMTAuNzEyOCAxNC45NjgzQzEwLjU1ODQgMTQuOTI2MiAxMC40MzYxIDE0LjgxNzcgMTAuMzQ1NyAxNC42NDI1Wk0xMi40MDcgNy45NjQ4OUMxMi41ODQgNy45NjQ4OSAxMi43MjcgOC4wMTA0MiAxMi44MzYyIDguMTAxNDlDMTIuOTQ1NCA4LjE4OTA1IDEzIDguMzA2MzkgMTMgOC40NTM1QzEzIDguNjExMTEgMTIuOTQ1NCA4LjczMzcgMTIuODM2MiA4LjgyMTI3QzEyLjczMDggOC45MDg4MyAxMi41ODc3IDguOTUyNjEgMTIuNDA3IDguOTUyNjFIMTEuMTMwN0MxMC45NTM4IDguOTUyNjEgMTAuODE0NSA4LjkzNjg1IDEwLjcxMjggOC45MDUzM0MxMC42MTEyIDguODcwMyAxMC41MTMzIDguODA3MjYgMTAuNDE5MSA4LjcxNjE5TDEwLjA1MjEgOC4zNzk5NEwxMC4xNDI0IDcuMDQwMjFMMTEuMDM0NyA3Ljk2NDg5SDEyLjQwN1pNOS4wMDE2NCA1LjMxMTY5QzguNzcxOTggNS4zMTE2OSA4LjU2MzAzIDUuMjYwOTEgOC4zNzQ3OCA1LjE1OTMzQzguMTg2NTMgNS4wNTQyNiA4LjAzNTk0IDQuOTE0MTUgNy45MjI5OSA0LjczOTAzQzcuODEzODEgNC41NjM5IDcuNzU5MjEgNC4zNjk1IDcuNzU5MjEgNC4xNTU4NUM3Ljc1OTIxIDMuOTQyMTkgNy44MTM4MSAzLjc0NzggNy45MjI5OSAzLjU3MjY3QzguMDM1OTQgMy4zOTc1NCA4LjE4NjUzIDMuMjU5MTkgOC4zNzQ3OCAzLjE1NzYyQzguNTYzMDMgMy4wNTI1NCA4Ljc3MTk4IDMgOS4wMDE2NCAzQzkuMjMxMyAzIDkuNDQwMjYgMy4wNTI1NCA5LjYyODUgMy4xNTc2MkM5LjgxNjc1IDMuMjU5MTkgOS45NjU0NiAzLjM5NzU0IDEwLjA3NDYgMy41NzI2N0MxMC4xODc2IDMuNzQ3OCAxMC4yNDQxIDMuOTQyMTkgMTAuMjQ0MSA0LjE1NTg1QzEwLjI0NDEgNC4zNjk1IDEwLjE4NzYgNC41NjM5IDEwLjA3NDYgNC43MzkwM0M5Ljk2NTQ2IDQuOTE0MTUgOS44MTY3NSA1LjA1NDI2IDkuNjI4NSA1LjE1OTMzQzkuNDQwMjYgNS4yNjA5MSA5LjIzMTMgNS4zMTE2OSA5LjAwMTY0IDUuMzExNjlaIn0pfSl9ZnVuY3Rpb24gbzMoKXtyZXR1cm4gWCgic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIyNiAxIDEyIDE0IixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46WCgicGF0aCIse2Q6Ik0zMy4yNDM3IDQuNTg0NTlDMzMuMDAwOCA0LjU4NDU5IDMyLjc4MTcgNC41MjcyOCAzMi41ODY2IDQuNDEyNjhDMzIuMzkxNSA0LjI5NDEyIDMyLjIzNDIgNC4xMzgwMSAzMi4xMTQ3IDMuOTQ0MzdDMzEuOTk5MiAzLjc0Njc3IDMxLjk0MTQgMy41Mjk0MSAzMS45NDE0IDMuMjkyMjlDMzEuOTQxNCAzLjA1MTIyIDMxLjk5OTIgMi44MzM4NyAzMi4xMTQ3IDIuNjQwMjJDMzIuMjM0MiAyLjQ0NjU3IDMyLjM5MTUgMi4yOTI0NSAzMi41ODY2IDIuMTc3ODRDMzIuNzgxNyAyLjA1OTI4IDMzLjAwMDggMiAzMy4yNDM3IDJDMzMuNDgyNiAyIDMzLjY5OTcgMi4wNTkyOCAzMy44OTQ4IDIuMTc3ODRDMzQuMDkzOSAyLjI5MjQ1IDM0LjI1MTIgMi40NDY1NyAzNC4zNjY3IDIuNjQwMjJDMzQuNDg2MiAyLjgzMzg3IDM0LjU0NTkgMy4wNTEyMiAzNC41NDU5IDMuMjkyMjlDMzQuNTQ1OSAzLjUyOTQxIDM0LjQ4NjIgMy43NDY3NyAzNC4zNjY3IDMuOTQ0MzdDMzQuMjUxMiA0LjEzODAxIDM0LjA5MzkgNC4yOTQxMiAzMy44OTQ4IDQuNDEyNjhDMzMuNjk5NyA0LjUyNzI4IDMzLjQ4MjYgNC41ODQ1OSAzMy4yNDM3IDQuNTg0NTlaTTMxLjIwMDcgOS43NDE5MUMzMS4wNzMzIDkuNjcwNzcgMzAuOTQxOSA5LjU5NTY4IDMwLjgwNjUgOS41MTY2NEMzMC42NzUgOS40Mzc2IDMwLjU1OTYgOS4zNDI3NiAzMC40NiA5LjIzMjFDMzAuMzYwNCA5LjExNzQ5IDMwLjI5MjcgOC45NzcyIDMwLjI1NjkgOC44MTEyMkMzMC4yMjUgOC42NDEyOCAzMC4yNDQ5IDguNDI5ODUgMzAuMzE2NiA4LjE3NjkzTDMwLjgwNjUgNi40ODE1M0MzMC44MzgzIDYuMzY2OTIgMzAuODE4NCA2LjI3OTk4IDMwLjc0NjcgNi4yMjA3QzMwLjY3OSA2LjE1NzQ3IDMwLjU5NzQgNi4xMjk4MSAzMC41MDE4IDYuMTM3NzFMMjkuNjU5NSA2LjE5Njk5TDI5LjQwMjcgNy45MjIwMkMyOS4zNzg4IDguMTA3NzcgMjkuMzE1MSA4LjI0NjA5IDI5LjIxMTUgOC4zMzY5OEMyOS4xMDggOC40Mjc4OCAyOC45NzI2IDguNDY1NDIgMjguODA1MyA4LjQ0OTYxQzI4LjY0MiA4LjQzMzggMjguNTE4NiA4LjM2NjYyIDI4LjQzNDkgOC4yNDgwNkMyOC4zNTEzIDguMTI5NSAyOC4zMjE0IDcuOTc3MzUgMjguMzQ1MyA3Ljc5MTYxTDI4LjYyNjEgNS42ODEyNkMyOC42NSA1LjUxMTMyIDI4LjcxNTcgNS4zNzQ5OCAyOC44MjMyIDUuMjcyMjNDMjguOTMwOCA1LjE2OTQ4IDI5LjA2ODEgNS4xMTIxNyAyOS4yMzU0IDUuMTAwMzJMMzEuMzMyMSA0Ljk1MjEyQzMxLjg4MTcgNC45MTI2IDMyLjMzNTcgNC45Njk5IDMyLjY5NDEgNS4xMjQwM0MzMy4wNTI1IDUuMjc4MTYgMzMuMzY3MSA1LjUzODk5IDMzLjYzNzkgNS45MDY1MkwzNC42NzE0IDcuMzIzM0wzNi4xNzA4IDYuNjY1M0MzNi4zMzggNi41OTAyMSAzNi40ODkzIDYuNTc0NCAzNi42MjQ4IDYuNjE3ODdDMzYuNzYwMiA2LjY1NzM5IDM2Ljg2NTcgNi43NTIyNCAzNi45NDE0IDYuOTAyNDJDMzcuMDEzIDcuMDUyNTkgMzcuMDE5IDcuMTk0ODYgMzYuOTU5MyA3LjMyOTIzQzM2LjkwMzUgNy40NjM2IDM2Ljc5MiA3LjU2ODMyIDM2LjYyNDggNy42NDM0MUwzNC43MzExIDguNDc5MjVDMzQuNjAzNyA4LjUzODUzIDM0LjQ3NDMgOC41NTAzOSAzNC4zNDI4IDguNTE0ODJDMzQuMjE1NCA4LjQ3NTMgMzQuMTEzOCA4LjQwMDIxIDM0LjAzODIgOC4yODk1NkwzMy4zODExIDcuMzM1MTZDMzMuMzEzNCA3LjI0MDMxIDMzLjIyOTggNy4xOTg4MSAzMy4xMzAyIDcuMjEwNjdDMzMuMDMwNiA3LjIyMjUzIDMyLjk2NDkgNy4yODM3OCAzMi45MzMxIDcuMzk0NDRMMzIuNDkxIDguOTI5NzhMMzQuNzMxMSAxMC4zODgxQzM0Ljg0MjYgMTAuNDU5MiAzNC45MjIzIDEwLjU1NiAzNC45NzAxIDEwLjY3ODVDMzUuMDE3OSAxMC44MDEgMzUuMDI5OCAxMC45MjU1IDM1LjAwNTkgMTEuMDUyQzM0Ljk4NiAxMS4xNzQ1IDM0LjkyODIgMTEuMjc1MyAzNC44MzI3IDExLjM1NDNMMzIuNzcxOCAxMy4wOTcxQzMyLjYwODUgMTMuMjM1NCAzMi40NDUyIDEzLjI5ODcgMzIuMjgxOSAxMy4yODY4QzMyLjEyMjYgMTMuMjc1IDMxLjk5MzIgMTMuMjEzNyAzMS44OTM3IDEzLjEwMzFDMzEuNzk4MSAxMi45OTY0IDMxLjc1NDMgMTIuODY1OSAzMS43NjIyIDEyLjcxMThDMzEuNzcwMiAxMi41NTM3IDMxLjg1MzggMTIuNDA3NSAzMi4wMTMxIDEyLjI3MzFMMzMuNDg4NiAxMS4wMTY0TDMxLjIwMDcgOS43NDE5MVpNMjcuMjA0NCAxNC44NjM3QzI3LjA4NDkgMTQuNzU3IDI3LjAxNzIgMTQuNjE4NiAyNy4wMDEzIDE0LjQ0ODdDMjYuOTg5MyAxNC4yNzg4IDI3LjA2MSAxNC4xMTY3IDI3LjIxNjMgMTMuOTYyNkwyOS4yMjM1IDExLjk3NjdMMjkuOTM0MyA5LjQ4MTA4QzMwLjA0MTggOS42MTU0NCAzMC4xNzUzIDkuNzQ1ODYgMzAuMzM0NSA5Ljg3MjMyQzMwLjQ5NzggOS45OTQ4MyAzMC42OTMgMTAuMTE3MyAzMC45MiAxMC4yMzk5TDMxLjExNzEgMTAuMzQ2NkwzMC4zMDQ3IDEyLjQzMzJDMzAuMjUyOSAxMi41NTU3IDMwLjIwOTEgMTIuNjQwNyAzMC4xNzMzIDEyLjY4ODFDMzAuMTQxNCAxMi43MzU1IDMwLjA4NTYgMTIuNzk4OCAzMC4wMDYgMTIuODc3OEwyOC4wNzA2IDE0Ljc4MDdDMjcuOTE5MiAxNC45MjY5IDI3Ljc2MzkgMTUgMjcuNjA0NiAxNUMyNy40NDkzIDE1IDI3LjMxNTkgMTQuOTU0NiAyNy4yMDQ0IDE0Ljg2MzdaIn0pfSl9ZnVuY3Rpb24gcjMoKXtyZXR1cm4gWCgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI0OSAzIDE2IDEyIixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46WCgicGF0aCIse2Q6Ik01Ny4wMDI4IDExLjk0OUM1Ni44NDggMTEuOTQ5IDU2LjcxNzIgMTEuODk4NyA1Ni42MTAzIDExLjc5OEM1Ni41MDM1IDExLjY5MzkgNTYuNDUwMSAxMS41NzA3IDU2LjQ1MDEgMTEuNDI4NFY5LjAyODYzTDU0LjQyMTYgNy4xMDc3NkM1NC4yMjI3IDYuOTIwMzUgNTQuMDk1NSA2LjY5ODI1IDU0LjA0MDMgNi40NDE0NEM1My45ODUgNi4xODExNiA1NC4wMTA4IDUuOTI3ODIgNTQuMTE3NiA1LjY4MTQyQzU0LjIyODIgNS40Mzg0OSA1NC4zOTc3IDUuMjQ0MTQgNTQuNjI2MSA1LjA5ODM5QzU0Ljg1ODMgNC45NDkxNiA1NS4xMTYyIDQuODc0NTQgNTUuMzk5OSA0Ljg3NDU0SDU4LjExMzdDNTguNDIzMiA0Ljg3NDU0IDU4LjY4NDggNC45NzY5MiA1OC44OTg1IDUuMTgxNjhDNTkuMTE1OSA1LjM4Mjk2IDU5LjIyNDYgNS42MjkzNiA1OS4yMjQ2IDUuOTIwODdWNy43NjM2Nkg2MC44OTkzQzYxLjA1MDQgNy43NjM2NiA2MS4xNzk0IDcuODEzOTkgNjEuMjg2MiA3LjkxNDYzQzYxLjM5MzEgOC4wMTUyNyA2MS40NDY1IDguMTM4NDcgNjEuNDQ2NSA4LjI4NDIzQzYxLjQ0NjUgOC40MjY1MSA2MS4zOTMxIDguNTQ3OTggNjEuMjg2MiA4LjY0ODYyQzYxLjE3OTQgOC43NDkyNiA2MS4wNTA0IDguNzk5NTggNjAuODk5MyA4Ljc5OTU4SDU4LjY3MTlDNTguNTIwOSA4Ljc5OTU4IDU4LjM5MDEgOC43NDkyNiA1OC4yNzk1IDguNjQ4NjJDNTguMTcyNyA4LjU0Nzk4IDU4LjExOTIgOC40MjY1MSA1OC4xMTkyIDguMjg0MjNWNi45ODgwM0M1OC4xMTkyIDYuOTE4NjIgNTguMDk5IDYuODU0NDIgNTguMDU4NCA2Ljc5NTQyQzU4LjAxNzkgNi43MzI5NSA1Ny45NDQyIDYuNzAxNzIgNTcuODM3MyA2LjcwMTcySDU2LjA2MzJDNTUuOTkzMiA2LjcwMTcyIDU1Ljk0NTMgNi43Mjk0OCA1NS45MTk1IDYuNzg1MDFDNTUuODk3NCA2LjgzNzA2IDU1LjkwODQgNi44ODczOSA1NS45NTI2IDYuOTM1OTdMNTcuNDAwNyA4LjQ1NjAxQzU3LjUwMzkgOC41NjM2IDU3LjU1NTUgOC42ODE1OSA1Ny41NTU1IDguODA5OTlWMTEuNDI4NEM1Ny41NTU1IDExLjU3MDcgNTcuNTAwMiAxMS42OTM5IDU3LjM4OTcgMTEuNzk4QzU3LjI4MjggMTEuODk4NyA1Ny4xNTM4IDExLjk0OSA1Ny4wMDI4IDExLjk0OVpNNTMuMDAxMiAxNEM1Mi41ODQ4IDE0IDUyLjE5NDIgMTMuOTI3MSA1MS44Mjk1IDEzLjc4MTRDNTEuNDY4NCAxMy42MzU2IDUxLjE0OTYgMTMuNDMyNiA1MC44NzMzIDEzLjE3MjNDNTAuNjAwNiAxMi45MTIgNTAuMzg2OSAxMi42MTE4IDUwLjIzMjEgMTIuMjcxN0M1MC4wNzc0IDExLjkyODIgNTAgMTEuNTYwMyA1MCAxMS4xNjgxQzUwIDEwLjc3NiA1MC4wNzc0IDEwLjQwOTkgNTAuMjMyMSAxMC4wNjk4QzUwLjM4NjkgOS43MjYxOCA1MC42MDA2IDkuNDI0MjYgNTAuODczMyA5LjE2Mzk4QzUxLjE0OTYgOC45MDM3IDUxLjQ2ODQgOC43MDA2OCA1MS44Mjk1IDguNTU0OTJDNTIuMTk0MiA4LjQwOTE2IDUyLjU4NDggOC4zMzYyOCA1My4wMDEyIDguMzM2MjhDNTMuNDIxMiA4LjMzNjI4IDUzLjgxMTggOC40MDkxNiA1NC4xNzI5IDguNTU0OTJDNTQuNTM3NyA4LjcwMDY4IDU0Ljg1NjQgOC45MDM3IDU1LjEyOTEgOS4xNjM5OEM1NS40MDU0IDkuNDI0MjYgNTUuNjIxIDkuNzI2MTggNTUuNzc1OCAxMC4wNjk4QzU1LjkzMDUgMTAuNDA5OSA1Ni4wMDc5IDEwLjc3NiA1Ni4wMDc5IDExLjE2ODFDNTYuMDA3OSAxMS41NjAzIDU1LjkzMDUgMTEuOTI4MiA1NS43NzU4IDEyLjI3MTdDNTUuNjIxIDEyLjYxMTggNTUuNDA1NCAxMi45MTIgNTUuMTI5MSAxMy4xNzIzQzU0Ljg1NjQgMTMuNDMyNiA1NC41Mzc3IDEzLjYzNTYgNTQuMTcyOSAxMy43ODE0QzUzLjgxMTggMTMuOTI3MSA1My40MjEyIDE0IDUzLjAwMTIgMTRaTTUzLjAwMTIgMTMuMjY2QzUzLjQxMDIgMTMuMjY2IDUzLjc4MjMgMTMuMTcwNiA1NC4xMTc2IDEyLjk3OTdDNTQuNDU2NiAxMi43OTIzIDU0LjcyNTYgMTIuNTQwNyA1NC45MjQ2IDEyLjIyNDlDNTUuMTI3MyAxMS45MDU2IDU1LjIyODYgMTEuNTUzNCA1NS4yMjg2IDExLjE2ODFDNTUuMjI4NiAxMC43ODI5IDU1LjEyNzMgMTAuNDMyNCA1NC45MjQ2IDEwLjExNjZDNTQuNzI1NiA5Ljc5NzMzIDU0LjQ1NjYgOS41NDM5OSA1NC4xMTc2IDkuMzU2NTlDNTMuNzgyMyA5LjE2NTcxIDUzLjQxMDIgOS4wNzAyOCA1My4wMDEyIDkuMDcwMjhDNTIuNTk1OSA5LjA3MDI4IDUyLjIyMzcgOS4xNjU3MSA1MS44ODQ3IDkuMzU2NTlDNTEuNTQ5NCA5LjU0Mzk5IDUxLjI4MDQgOS43OTczMyA1MS4wNzc4IDEwLjExNjZDNTAuODc4OCAxMC40MzI0IDUwLjc3OTMgMTAuNzgyOSA1MC43NzkzIDExLjE2ODFDNTAuNzc5MyAxMS41NTM0IDUwLjg3ODggMTEuOTA1NiA1MS4wNzc4IDEyLjIyNDlDNTEuMjgwNCAxMi41NDA3IDUxLjU0OTQgMTIuNzkyMyA1MS44ODQ3IDEyLjk3OTdDNTIuMjIzNyAxMy4xNzA2IDUyLjU5NTkgMTMuMjY2IDUzLjAwMTIgMTMuMjY2Wk02Mi40ODAxIDkuNjExNjZDNjIuMzYyMiA5LjUxNDQ5IDYyLjMwMTQgOS40MTU1OCA2Mi4yOTc3IDkuMzE0OTRDNjIuMjk3NyA5LjIxMDgzIDYyLjMzMDggOS4xMjQwNyA2Mi4zOTcyIDkuMDU0NjZDNjIuNDY3MiA4Ljk4NTI1IDYyLjU1MzggOC45NDUzNCA2Mi42NTY5IDguOTM0OTNDNjIuNzYzOCA4LjkyMTA1IDYyLjg2ODggOC45NTU3NSA2Mi45NzIgOS4wMzkwNEM2My4yODg5IDkuMzAyNzkgNjMuNTM5NCA5LjYxNjg3IDYzLjcyMzYgOS45ODEyNkM2My45MDc5IDEwLjM0NTcgNjQgMTAuNzQxMyA2NCAxMS4xNjgxQzY0IDExLjU2MDMgNjMuOTIyNiAxMS45MjgyIDYzLjc2NzkgMTIuMjcxN0M2My42MTMxIDEyLjYxMTggNjMuMzk3NiAxMi45MTIgNjMuMTIxMiAxMy4xNzIzQzYyLjg0ODUgMTMuNDMyNiA2Mi41Mjk4IDEzLjYzNTYgNjIuMTY1IDEzLjc4MTRDNjEuODAzOSAxMy45MjcxIDYxLjQxNTIgMTQgNjAuOTk4OCAxNEM2MC41ODI0IDE0IDYwLjE5MTkgMTMuOTI3MSA1OS44MjcxIDEzLjc4MTRDNTkuNDYyMyAxMy42MzU2IDU5LjE0MTcgMTMuNDMyNiA1OC44NjU0IDEzLjE3MjNDNTguNTkyNyAxMi45MTIgNTguMzc5IDEyLjYxMTggNTguMjI0MiAxMi4yNzE3QzU4LjA2OTUgMTEuOTI4MiA1Ny45OTIxIDExLjU2MDMgNTcuOTkyMSAxMS4xNjgxQzU3Ljk5MjEgMTAuOTYzNCA1OC4wMTQyIDEwLjc2NTYgNTguMDU4NCAxMC41NzQ3QzU4LjEwNjMgMTAuMzgwNCA1OC4xNzI3IDEwLjE5MyA1OC4yNTc0IDEwLjAxMjVDNTguMzA5IDkuOTAxNDQgNTguMzgwOCA5LjgzMDMgNTguNDczIDkuNzk5MDZDNTguNTY4OCA5Ljc2NDM2IDU4LjY2MjcgOS43NjQzNiA1OC43NTQ4IDkuNzk5MDZDNTguODUwNiA5LjgzMDMgNTguOTIyNSA5Ljg5Mjc2IDU4Ljk3MDQgOS45ODY0N0M1OS4wMTgzIDEwLjA4MDIgNTkuMDEwOSAxMC4xOTgyIDU4Ljk0ODMgMTAuMzQwNEM1OC44MzA0IDEwLjYwMDcgNTguNzcxNCAxMC44NzY2IDU4Ljc3MTQgMTEuMTY4MUM1OC43NzE0IDExLjU1MzQgNTguODcwOSAxMS45MDU2IDU5LjA2OTkgMTIuMjI0OUM1OS4yNzI1IDEyLjU0MDcgNTkuNTQxNSAxMi43OTIzIDU5Ljg3NjggMTIuOTc5N0M2MC4yMTU4IDEzLjE3MDYgNjAuNTg5OCAxMy4yNjYgNjAuOTk4OCAxMy4yNjZDNjEuNDA3OCAxMy4yNjYgNjEuNzggMTMuMTcwNiA2Mi4xMTUzIDEyLjk3OTdDNjIuNDUwNiAxMi43OTIzIDYyLjcxNzcgMTIuNTQwNyA2Mi45MTY3IDEyLjIyNDlDNjMuMTE5NCAxMS45MDU2IDYzLjIyMDcgMTEuNTUzNCA2My4yMjA3IDExLjE2ODFDNjMuMjIwNyAxMC44NTkzIDYzLjE1MjUgMTAuNTcxMiA2My4wMTYyIDEwLjMwNEM2Mi44ODM1IDEwLjAzMzMgNjIuNzA0OCA5LjgwMjUzIDYyLjQ4MDEgOS42MTE2NlpNNjAuOTk4OCA2LjI3NDg2QzYwLjc3NCA2LjI3NDg2IDYwLjU2OTUgNi4yMjQ1NCA2MC4zODUzIDYuMTIzODlDNjAuMjAxMSA2LjAxOTc4IDYwLjA1MzcgNS44ODI3IDU5Ljk0MzIgNS43MTI2NUM1OS44MzYzIDUuNTM5MTMgNTkuNzgyOSA1LjM0NjUyIDU5Ljc4MjkgNS4xMzQ4M0M1OS43ODI5IDQuOTI2NiA1OS44MzYzIDQuNzM3NDYgNTkuOTQzMiA0LjU2NzQxQzYwLjA1MzcgNC4zOTM4OSA2MC4yMDExIDQuMjU2ODEgNjAuMzg1MyA0LjE1NjE3QzYwLjU2OTUgNC4wNTIwNiA2MC43NzQgNCA2MC45OTg4IDRDNjEuMjE5OSA0IDYxLjQyMDcgNC4wNTIwNiA2MS42MDEzIDQuMTU2MTdDNjEuNzgxOCA0LjI1NjgxIDYxLjkyNTUgNC4zOTM4OSA2Mi4wMzI0IDQuNTY3NDFDNjIuMTQyOSA0LjczNzQ2IDYyLjE5ODIgNC45MjY2IDYyLjE5ODIgNS4xMzQ4M0M2Mi4xOTgyIDUuMzQ2NTIgNjIuMTQyOSA1LjUzOTEzIDYyLjAzMjQgNS43MTI2NUM2MS45MjU1IDUuODgyNyA2MS43ODE4IDYuMDE5NzggNjEuNjAxMyA2LjEyMzg5QzYxLjQyMDcgNi4yMjQ1NCA2MS4yMTk5IDYuMjc0ODYgNjAuOTk4OCA2LjI3NDg2WiJ9KX0pfWZ1bmN0aW9uIG4zKCl7cmV0dXJuIFgoInN2ZyIse3dpZHRoOiIxNiIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNzAgNSAxOCA5IixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46WCgicGF0aCIse2Q6Ik04NS41NzIgMTIuMTAzOEM4Ni4wNiAxMi4xMDM4IDg2LjQyMDcgMTEuOTg5MiA4Ni42NTQyIDExLjc2MDFDODYuODg0NyAxMS41MjgxIDg3IDExLjE2NDEgODcgMTAuNjY4MVYxMC4xMTEyQzg3IDkuNzY5MDEgODYuOTIwNyA5LjQ2MzAyIDg2Ljc2MiA5LjE5MzI5Qzg2LjYwMzMgOC45MjA2NSA4Ni4zNzU4IDguNjk3MzMgODYuMDc5NCA4LjUyMzMxQzg1Ljc4MDEgOC4zNDkyOSA4NS40MjIzIDguMjM3NjIgODUuMDA2MiA4LjE4ODMyTDgzLjAxNjggNy45NTMzOUw4MS4xOTgxIDYuODQ4MzVDODAuOTIyNyA2LjY4MDEzIDgwLjY2MDggNi41NDIzNyA4MC40MTIzIDYuNDM1MDVDODAuMTYwOCA2LjMyNDg0IDc5Ljg5NzQgNi4yMzc4MyA3OS42MjE5IDYuMTc0MDJDNzkuMzQ2NSA2LjExMDIxIDc5LjAzODIgNi4wNjUyNiA3OC42OTY5IDYuMDM5MTVDNzguMzUyNiA2LjAxMzA1IDc3Ljk1MTQgNiA3Ny40OTM0IDZINzYuODEwOEM3Ni4zODg3IDYgNzUuOTk1IDYuMDQ5MzEgNzUuNjI5OCA2LjE0NzkyQzc1LjI2MTYgNi4yNDM2MyA3NC45MTg4IDYuMzcxMjUgNzQuNjAxNSA2LjUzMDc2Qzc0LjI4MTEgNi42OTAyOCA3My45ODYyIDYuODY1NzYgNzMuNzE2OCA3LjA1NzE4QzczLjQ0NDQgNy4yNDg2IDczLjE5NTkgNy40MzcxMiA3Mi45NzE0IDcuNjIyNzVMNzIuMjU3NCA3Ljg1MzMzQzcxLjgzMjMgNy45ODY3NCA3MS41MTY0IDguMTgzOTcgNzEuMzA5OSA4LjQ0NUM3MS4xMDMzIDguNzAzMTMgNzEgOS4wMzM3NyA3MSA5LjQzNjkyVjEwLjY0MkM3MSAxMS4xNDY3IDcxLjExNTMgMTEuNTE2NSA3MS4zNDU4IDExLjc1MTRDNzEuNTc2MyAxMS45ODYzIDcxLjkzNyAxMi4xMDM4IDcyLjQyOCAxMi4xMDM4SDcyLjcxNTRDNzIuNzAwNCAxMi4wMzcxIDcyLjY4ODUgMTEuOTcwNCA3Mi42Nzk1IDExLjkwMzdDNzIuNjcwNSAxMS44MzQxIDcyLjY2NiAxMS43NjQ1IDcyLjY2NiAxMS42OTQ4QzcyLjY2NiAxMS4zNTU1IDcyLjc0OTggMTEuMDQ5NSA3Mi45MTc1IDEwLjc3NjlDNzMuMDg1MSAxMC41MDQyIDczLjMxMTIgMTAuMjg4MiA3My41OTU2IDEwLjEyODdDNzMuODc3IDkuOTY2MjMgNzQuMTkyOCA5Ljg4NTAyIDc0LjU0MzEgOS44ODUwMkM3NC44OTA0IDkuODg1MDIgNzUuMjA2MiA5Ljk2NjIzIDc1LjQ5MDYgMTAuMTI4N0M3NS43NzIgMTAuMjg4MiA3NS45OTY1IDEwLjUwNDIgNzYuMTY0MiAxMC43NzY5Qzc2LjMzMTggMTEuMDQ5NSA3Ni40MTU3IDExLjM1NTUgNzYuNDE1NyAxMS42OTQ4Qzc2LjQxNTcgMTEuNzY0NSA3Ni40MTEyIDExLjgzNDEgNzYuNDAyMiAxMS45MDM3Qzc2LjM5MzIgMTEuOTcwNCA3Ni4zODI3IDEyLjAzNzEgNzYuMzcwOCAxMi4xMDM4SDgxLjYzODJDODEuNjIwMyAxMi4wMzcxIDgxLjYwODMgMTEuOTcwNCA4MS42MDIzIDExLjkwMzdDODEuNTkzMyAxMS44MzQxIDgxLjU4ODggMTEuNzY0NSA4MS41ODg4IDExLjY5NDhDODEuNTg4OCAxMS4zNTU1IDgxLjY3MjcgMTEuMDQ5NSA4MS44NDAzIDEwLjc3NjlDODIuMDA1IDEwLjUwNDIgODIuMjI5NSAxMC4yODgyIDgyLjUxMzkgMTAuMTI4N0M4Mi43OTUzIDkuOTY2MjMgODMuMTExMSA5Ljg4NTAyIDgzLjQ2MTQgOS44ODUwMkM4My44MTE3IDkuODg1MDIgODQuMTI5IDkuOTY2MjMgODQuNDEzNCAxMC4xMjg3Qzg0LjY5NDggMTAuMjg4MiA4NC45MTk0IDEwLjUwNDIgODUuMDg3IDEwLjc3NjlDODUuMjUxNyAxMS4wNDk1IDg1LjMzNCAxMS4zNTU1IDg1LjMzNCAxMS42OTQ4Qzg1LjMzNCAxMS43NjQ1IDg1LjMzMSAxMS44MzQxIDg1LjMyNSAxMS45MDM3Qzg1LjMxNiAxMS45NzA0IDg1LjMwNDEgMTIuMDM3MSA4NS4yODkxIDEyLjEwMzhIODUuNTcyWk04My40NjE0IDEzQzgzLjcxMjkgMTMgODMuOTQwNCAxMi45NDIgODQuMTQ0IDEyLjgyNkM4NC4zNDc2IDEyLjcxIDg0LjUwOTIgMTIuNTUzMyA4NC42MjkgMTIuMzU2MUM4NC43NDg3IDEyLjE1ODkgODQuODA4NiAxMS45Mzg1IDg0LjgwODYgMTEuNjk0OEM4NC44MDg2IDExLjQ1MTIgODQuNzQ4NyAxMS4yMzA4IDg0LjYyOSAxMS4wMzM2Qzg0LjUwOTIgMTAuODM2MyA4NC4zNDc2IDEwLjY3OTcgODQuMTQ0IDEwLjU2MzdDODMuOTQwNCAxMC40NDc3IDgzLjcxMjkgMTAuMzg5NyA4My40NjE0IDEwLjM4OTdDODMuMjA2OSAxMC4zODk3IDgyLjk3NzkgMTAuNDQ3NyA4Mi43NzQzIDEwLjU2MzdDODIuNTcwOCAxMC42Nzk3IDgyLjQwOTEgMTAuODM2MyA4Mi4yODk0IDExLjAzMzZDODIuMTY5NiAxMS4yMzA4IDgyLjEwOTcgMTEuNDUxMiA4Mi4xMDk3IDExLjY5NDhDODIuMTA5NyAxMS45Mzg1IDgyLjE2OTYgMTIuMTU4OSA4Mi4yODk0IDEyLjM1NjFDODIuNDA5MSAxMi41NTMzIDgyLjU3MDggMTIuNzEgODIuNzc0MyAxMi44MjZDODIuOTc3OSAxMi45NDIgODMuMjA2OSAxMyA4My40NjE0IDEzWk03NC41NDMxIDEzQzc0Ljc5NDYgMTMgNzUuMDIyMSAxMi45NDIgNzUuMjI1NyAxMi44MjZDNzUuNDI5MiAxMi43MSA3NS41OTA5IDEyLjU1MzMgNzUuNzEwNiAxMi4zNTYxQzc1LjgzMDQgMTIuMTU4OSA3NS44OTAzIDExLjkzODUgNzUuODkwMyAxMS42OTQ4Qzc1Ljg5MDMgMTEuNDUxMiA3NS44MzA0IDExLjIzMDggNzUuNzEwNiAxMS4wMzM2Qzc1LjU5MDkgMTAuODM2MyA3NS40MjkyIDEwLjY3OTcgNzUuMjI1NyAxMC41NjM3Qzc1LjAyMjEgMTAuNDQ3NyA3NC43OTQ2IDEwLjM4OTcgNzQuNTQzMSAxMC4zODk3Qzc0LjI4ODYgMTAuMzg5NyA3NC4wNTk2IDEwLjQ0NzcgNzMuODU2IDEwLjU2MzdDNzMuNjUyNCAxMC42Nzk3IDczLjQ5MDggMTAuODM2MyA3My4zNzEgMTEuMDMzNkM3My4yNTEzIDExLjIzMDggNzMuMTkxNCAxMS40NTEyIDczLjE5MTQgMTEuNjk0OEM3My4xOTE0IDExLjkzODUgNzMuMjUxMyAxMi4xNTg5IDczLjM3MSAxMi4zNTYxQzczLjQ5MDggMTIuNTUzMyA3My42NTI0IDEyLjcxIDczLjg1NiAxMi44MjZDNzQuMDU5NiAxMi45NDIgNzQuMjg4NiAxMyA3NC41NDMxIDEzWiJ9KX0pfWZ1bmN0aW9uICQ1KHtzaXplOiQ9MTgsc3Ryb2tlV2lkdGg6Sj0yfSl7cmV0dXJuIFgodDUse3NpemU6JCxzdHJva2VXaWR0aDpKfSl9dmFyIFc2PSJBY2Nlc3NpYmlsaXR5IHVuYXZhaWxhYmxlIG9uIHRoaXMgc2ltdWxhdG9yLiI7ZnVuY3Rpb24gaTIoJCl7cmV0dXJuICQ/LmVycm9ycz8uaW5jbHVkZXMoVzYpPz8hMX1mdW5jdGlvbiBvMigkLEope2lmKCQ9PT1KKXJldHVybiEwO2lmKCQuaWQhPT1KLmlkfHwkLnBhdGghPT1KLnBhdGh8fCQubGFiZWwhPT1KLmxhYmVsfHwkLnZhbHVlIT09Si52YWx1ZXx8JC5yb2xlIT09Si5yb2xlfHwkLnR5cGUhPT1KLnR5cGV8fCQuZW5hYmxlZCE9PUouZW5hYmxlZClyZXR1cm4hMTtsZXQgUT0kLmZyYW1lLFo9Si5mcmFtZTtyZXR1cm4gUT09PVp8fFEueD09PVoueCYmUS55PT09Wi55JiZRLndpZHRoPT09Wi53aWR0aCYmUS5oZWlnaHQ9PT1aLmhlaWdodH1mdW5jdGlvbiByMigkLEope2xldCBRPSQubGFiZWx8fCQucm9sZXx8YGVsZW1lbnQgJHtKKzF9YCxaPSQucm9sZXx8JC50eXBlO3JldHVybntpZDokLmlkLHBhdGg6JC5wYXRoLGxhYmVsOlEsdmFsdWU6JC52YWx1ZSxyb2xlOlosdHlwZTokLnR5cGUsZW5hYmxlZDokLmVuYWJsZWQsZnJhbWU6JC5mcmFtZX19ZnVuY3Rpb24gUDYoJCxKKXtsZXQgUT1NYXRoLm1heCgwLCQueCksWj1NYXRoLm1heCgwLCQueSksSz1NYXRoLm1pbihKLndpZHRoLCQueCskLndpZHRoKSxZPU1hdGgubWluKEouaGVpZ2h0LCQueSskLmhlaWdodCkscT1NYXRoLm1heCgwLEstUSksVj1NYXRoLm1heCgwLFktWik7cmV0dXJuIHE+MCYmVj4wP3t4OlEseTpaLHdpZHRoOnEsaGVpZ2h0OlZ9Om51bGx9ZnVuY3Rpb24gZDAoJCl7cmV0dXJuICQuaWR9ZnVuY3Rpb24gYTMoJCl7cmV0dXJuYCR7JC54fSwkeyQueX0gJHskLndpZHRofXgkeyQuaGVpZ2h0fWB9ZnVuY3Rpb24gXzYoJCl7cmV0dXJuW2BBWCBsYWJlbDogJHskLmxhYmVsfHwiVW5sYWJlbGVkIn1gLCQucm9sZT9gcm9sZTogJHskLnJvbGV9YDoiIiwkLnR5cGU/YHR5cGU6ICR7JC50eXBlfWA6IiIsJC52YWx1ZT9gdmFsdWU6ICR7JC52YWx1ZX1gOiIiLCQuaWQ/YGlkOiAkeyQuaWR9YDoiIixgcGF0aDogJHskLnBhdGh9YCxgZnJhbWU6ICR7YTMoJC5mcmFtZSl9YF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIjsgIil9dmFyIFhRPTUwMDAsS1E9MjAwMCxOMj1udWxsLHMzPW51bGwsWVE9MSxxUT0xLGs1PW5ldyBNYXAsSDU9bmV3IE1hcDtmdW5jdGlvbiBWUSgpe2xldCAkPW5ldyBVUkwoYjEoImV4ZWMtd3MiKSx3aW5kb3cubG9jYXRpb24uaHJlZik7cmV0dXJuICQucHJvdG9jb2w9JC5wcm90b2NvbD09PSJodHRwczoiPyJ3c3M6Ijoid3M6IiwkLnRvU3RyaW5nKCl9ZnVuY3Rpb24gR1EoJCl7Zm9yKGxldCBKIG9mIGs1LnZhbHVlcygpKUoucmVqZWN0KCQpO2s1LmNsZWFyKCl9ZnVuY3Rpb24gRDYoKXtyZXR1cm4gTjI/Pz1uZXcgUHJvbWlzZSgoJCxKKT0+e2xldCBRPSExLFo7dHJ5e1o9bmV3IFdlYlNvY2tldChWUSgpKX1jYXRjaChxKXtOMj1udWxsLEoocSk7cmV0dXJufWxldCBLPXNldFRpbWVvdXQoKCk9PntpZighUSlRPSEwLE4yPW51bGwsSihFcnJvcigiY29udHJvbCBzb2NrZXQgY29ubmVjdCB0aW1lb3V0IikpLFouY2xvc2UoKX0sWFEpO1oub25vcGVuPSgpPT57Wi5zZW5kKEpTT04uc3RyaW5naWZ5KHt9KSl9LFoub25tZXNzYWdlPShxKT0+e2xldCBWO3RyeXtWPUpTT04ucGFyc2UoU3RyaW5nKHEuZGF0YSkpfWNhdGNoe3JldHVybn1pZihWLnJlYWR5KXtpZighUSlRPSEwLGNsZWFyVGltZW91dChLKSxzMz1aLCQoWik7cmV0dXJufWlmKHR5cGVvZiBWLnN1Yj09PSJudW1iZXIiKXtsZXQgQj1INS5nZXQoVi5zdWIpO2lmKCFCKXJldHVybjtpZihWLmVuZClINS5kZWxldGUoVi5zdWIpLEIub25FbmQoKTtlbHNlIGlmKHR5cGVvZiBWLmRhdGE9PT0ic3RyaW5nIilCLm9uRGF0YShWLmRhdGEpO3JldHVybn1pZih0eXBlb2YgVi5pZCE9PSJudW1iZXIiKXJldHVybjtsZXQgRz1rNS5nZXQoVi5pZCk7aWYoIUcpcmV0dXJuO2s1LmRlbGV0ZShWLmlkKSxHLnJlc29sdmUoVil9O2xldCBZPSgpPT57TjI9bnVsbCxzMz1udWxsO2xldCBxPUVycm9yKCJjb250cm9sIHNvY2tldCBjbG9zZWQg4oCUIHJlbG9hZCB0aGUgcGFnZSBpZiB0aGlzIHBlcnNpc3RzIik7R1EocSk7bGV0IFY9Wy4uLkg1LnZhbHVlcygpXTtINS5jbGVhcigpO2ZvcihsZXQgRyBvZiBWKUcub25FbmQoKTtpZighUSlRPSEwLGNsZWFyVGltZW91dChLKSxKKHEpfTtaLm9uZXJyb3I9WSxaLm9uY2xvc2U9WX0pLE4yfWFzeW5jIGZ1bmN0aW9uIFQ2KCQsSil7bGV0IFE9YXdhaXQgRDYoKTtpZihRLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTil0aHJvdyBFcnJvcigiY29udHJvbCBzb2NrZXQgbm90IG9wZW4iKTtyZXR1cm4gbmV3IFByb21pc2UoKFosSyk9PntsZXQgWT1ZUSsrLHE9KCk9PntrNS5kZWxldGUoWSksSyhKPy5yZWFzb24/P25ldyBET01FeGNlcHRpb24oIkFib3J0ZWQiLCJBYm9ydEVycm9yIikpfTtpZihKKXtpZihKLmFib3J0ZWQpe3EoKTtyZXR1cm59Si5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIscSx7b25jZTohMH0pfWs1LnNldChZLHtyZXNvbHZlOihWKT0+e0o/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixxKSxaKFYpfSxyZWplY3Q6KFYpPT57Sj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEpLEsoVil9fSksUS5zZW5kKEpTT04uc3RyaW5naWZ5KHtpZDpZLC4uLiR9KSl9KX1hc3luYyBmdW5jdGlvbiB4MSgkLEo9e30sUSl7bGV0IFo9YXdhaXQgVDYoe3JwYzp7bWV0aG9kOiQscGFyYW1zOkp9fSxRPy5zaWduYWwpO2lmKFouZXJyb3IpcmV0dXJue3N0ZG91dDoiIixzdGRlcnI6Wi5lcnJvcixleGl0Q29kZToxMjZ9O2xldHtpZDpLLC4uLll9PVo7cmV0dXJuey4uLlksc3Rkb3V0Olouc3Rkb3V0Pz8iIixzdGRlcnI6Wi5zdGRlcnI/PyIiLGV4aXRDb2RlOlouZXhpdENvZGU/PzB9fWFzeW5jIGZ1bmN0aW9uIG4yKCl7cmV0dXJue3N0ZG91dDoiIixzdGRlcnI6InRoZSBwcmV2aWV3IHBhZ2UgaGFzIG5vIGhvc3Qgc2hlbGwiLGV4aXRDb2RlOjEyNn19YXN5bmMgZnVuY3Rpb24gdDMoJCxKKXtsZXQgUT1hd2FpdCBUNih7dWk6JH0sSj8uc2lnbmFsKTtpZihRLmVycm9yKXRocm93IEVycm9yKFEuZXJyb3IpO3JldHVybiBRLnN0YXR1cz8/bnVsbH1mdW5jdGlvbiBKNSgkKXtsZXQgSj17b25tZXNzYWdlOm51bGwsb25lcnJvcjpudWxsLGNsb3NlOigpPT57fX0sUT0hMSxaPW51bGwsSz1udWxsLFk9IiIscT0oQik9PntZKz1CLnJlcGxhY2UoL1xyXG4vZyxgCmApO2xldCBOO3doaWxlKChOPVkuaW5kZXhPZihgCgpgKSkhPT0tMSl7bGV0IHo9WS5zbGljZSgwLE4pO1k9WS5zbGljZShOKzIpO2xldCBVPXouc3BsaXQoYApgKS5maWx0ZXIoKEgpPT5ILnN0YXJ0c1dpdGgoImRhdGE6IikpLm1hcCgoSCk9Pkguc2xpY2UoNSkucmVwbGFjZSgvXiAvLCIiKSkuam9pbihgCmApO2lmKFUpSi5vbm1lc3NhZ2U/Lih7ZGF0YTpVfSl9fSxWPSgpPT57aWYoUXx8SylyZXR1cm47Si5vbmVycm9yPy4oKSxLPXNldFRpbWVvdXQoKCk9PntLPW51bGwsRygpfSxLUSl9LEc9YXN5bmMoKT0+e2lmKFEpcmV0dXJuO3RyeXtsZXQgQj1hd2FpdCBENigpO2lmKFEpcmV0dXJuO1k9IiIsWj1xUSsrLEg1LnNldChaLHtvbkRhdGE6cSxvbkVuZDpWfSksQi5zZW5kKEpTT04uc3RyaW5naWZ5KHtzdWI6WixwYXRoOiR9KSl9Y2F0Y2h7VigpfX07cmV0dXJuIEcoKSxKLmNsb3NlPSgpPT57aWYoUT0hMCxLKWNsZWFyVGltZW91dChLKTtpZihaIT09bnVsbCl7SDUuZGVsZXRlKFopO3RyeXtzMz8uc2VuZChKU09OLnN0cmluZ2lmeSh7dW5zdWI6Wn0pKX1jYXRjaHt9Wj1udWxsfX0sSn1mdW5jdGlvbiBJNigkKXtsZXRbSixRXT1BKG51bGwpLFtaLEtdPUEoIkFYIG9mZiIpO3JldHVybiBfKCgpPT57aWYoISQpe1EobnVsbCksSygiQVggb2ZmIik7cmV0dXJufVEobnVsbCksSygiQVggd2FpdGluZyIpO2xldCBZPUo1KCQpO3JldHVybiBZLm9ubWVzc2FnZT0ocSk9Pnt0cnl7bGV0IFY9SlNPTi5wYXJzZShxLmRhdGEpO1EoViksSyhpMihWKT8iQVggdW5hdmFpbGFibGUiOmAke1YuZWxlbWVudHMubGVuZ3RofSBBWCBlbGVtZW50c2ApfWNhdGNoe0soIkFYIHBhcnNlIGVycm9yIil9fSxZLm9uZXJyb3I9KCk9PntLKCJBWCByZWNvbm5lY3RpbmciKX0sKCk9PlkuY2xvc2UoKX0sWyRdKSx7c25hcHNob3Q6SixzdGF0dXM6Wn19dmFyIGUzPU0wKHtzbmFwc2hvdDpudWxsLHN0YXR1czoiQVggb2ZmIn0pLCQ4PU0wKG51bGwpO2Z1bmN0aW9uIEM1KCl7cmV0dXJuIFcwKGUzKX1mdW5jdGlvbiBhMigpe2xldCAkPVcwKCQ4KTtpZighJCl0aHJvdyBFcnJvcigiQVggc2VsZWN0aW9uIGNvbnRleHQgaXMgdW5hdmFpbGFibGUiKTtyZXR1cm4gJH1mdW5jdGlvbiBFNigkLEope3JldHVybnt4OiQueCozL0oud2lkdGgseTokLnkqMy9KLmhlaWdodCx3aWR0aDokLndpZHRoKjMvSi53aWR0aCxoZWlnaHQ6JC5oZWlnaHQqMy9KLmhlaWdodH19dmFyIHc2PWEwKGZ1bmN0aW9uKHtlbGVtZW50OkosaW5kZXg6USxzY3JlZW46WixoaWdobGlnaHRlZDpLLHNlbGVjdGVkOlksb25IaWdobGlnaHQ6cSxvblNlbGVjdDpWfSl7bGV0IEc9ZDAoSiksQj1yMihKLFEpLE49UDYoSi5mcmFtZSxaKTtpZighTilyZXR1cm4gbnVsbDtsZXQgej1fNihCKTtyZXR1cm4gWCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiZGF0YS1heC1rZXkiOkcsImRhdGEtYXgtaWQiOkIuaWQsImRhdGEtYXgtcGF0aCI6Qi5wYXRoLCJkYXRhLWF4LWxhYmVsIjpCLmxhYmVsLCJkYXRhLWF4LXZhbHVlIjpCLnZhbHVlLCJkYXRhLWF4LXJvbGUiOkIucm9sZSwiZGF0YS1heC10eXBlIjpCLnR5cGUsImRhdGEtYXgtZW5hYmxlZCI6U3RyaW5nKEIuZW5hYmxlZCksImRhdGEtYXgtZnJhbWUiOmEzKEIuZnJhbWUpLCJkYXRhLWF4LXNlbGVjdGVkIjpTdHJpbmcoWSksImFyaWEtbGFiZWwiOkoubGFiZWx8fHosdGl0bGU6eixvbkNsaWNrOigpPT5WKEcpLG9uTW91c2VFbnRlcjooKT0+cShHKSxvbk1vdXNlTGVhdmU6KCk9PnEobnVsbCksY2xhc3NOYW1lOiJhYnNvbHV0ZSBib3gtYm9yZGVyIG1pbi13LXB4IG1pbi1oLXB4IHAtMCByb3VuZGVkLVszcHhdIGJvcmRlciBjdXJzb3ItcG9pbnRlciBwb2ludGVyLWV2ZW50cy1hdXRvIixzdHlsZTp7bGVmdDpgJHtOLngvWi53aWR0aCoxMDB9JWAsdG9wOmAke04ueS9aLmhlaWdodCoxMDB9JWAsd2lkdGg6YCR7Ti53aWR0aC9aLndpZHRoKjEwMH0lYCxoZWlnaHQ6YCR7Ti5oZWlnaHQvWi5oZWlnaHQqMTAwfSVgLGJvcmRlckNvbG9yOlk/IiM2MGE1ZmEiOks/IiNmYmJmMjQiOiIjMzRkMzk5IixiYWNrZ3JvdW5kOlk/InJnYmEoOTYsMTY1LDI1MCwwLjI0KSI6Sz8icmdiYSgyNDUsMTU4LDExLDAuMjgpIjoicmdiYSgxNiwxODUsMTI5LDAuMTIpIn19KX0sKCQsSik9PiQuaW5kZXg9PT1KLmluZGV4JiYkLmhpZ2hsaWdodGVkPT09Si5oaWdobGlnaHRlZCYmJC5zZWxlY3RlZD09PUouc2VsZWN0ZWQmJiQub25IaWdobGlnaHQ9PT1KLm9uSGlnaGxpZ2h0JiYkLm9uU2VsZWN0PT09Si5vblNlbGVjdCYmJC5zY3JlZW4ud2lkdGg9PT1KLnNjcmVlbi53aWR0aCYmJC5zY3JlZW4uaGVpZ2h0PT09Si5zY3JlZW4uaGVpZ2h0JiZvMigkLmVsZW1lbnQsSi5lbGVtZW50KSk7ZnVuY3Rpb24gSjgoe3Byb2plY3Rpb246JCxzY3JlZW5Db25maWc6Sn09e30pe2xldHtzbmFwc2hvdDpRfT1DNSgpLHtoaWdobGlnaHRlZEtleTpaLHNlbGVjdGVkS2V5Okssc2V0SGlnaGxpZ2h0ZWRLZXk6WSxzZXRTZWxlY3RlZEtleTpxfT1hMigpO2lmKCFRPy5zY3JlZW4ud2lkdGh8fCFRPy5zY3JlZW4uaGVpZ2h0KXJldHVybiBudWxsO2lmKCQmJkopcmV0dXJuIFgoInN2ZyIse3ZpZXdCb3g6IjAgMCAxIDEiLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUiLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCB3LWZ1bGwgaC1mdWxsIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46US5lbGVtZW50cy5tYXAoKFYpPT57bGV0IEc9ZDAoViksQj1WLmZyYW1lLE49RDkoJCxFNihCLEopKSx6PUc9PT1LPyIjNjBhNWZhIjpHPT09Wj8iI2ZiYmYyNCI6IiMzNGQzOTkiO3JldHVybiBOLm1hcCgoVSxIKT0+WCgicG9seWdvbiIse3BvaW50czpVLm1hcCgoRik9PkYuam9pbigiLCIpKS5qb2luKCIgIiksZmlsbDp6LGZpbGxPcGFjaXR5OjAuMTUsc3Ryb2tlOnosc3Ryb2tlV2lkdGg6MSx2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsY2xhc3NOYW1lOiJwb2ludGVyLWV2ZW50cy1hdXRvIGN1cnNvci1wb2ludGVyIiwiZGF0YS1heC1rZXkiOkcscm9sZToiYnV0dG9uIix0YWJJbmRleDowLCJhcmlhLWxhYmVsIjpWLmxhYmVsfHxWLnJvbGV8fCJBWCBlbGVtZW50IixvblBvaW50ZXJEb3duOihGKT0+Ri5zdG9wUHJvcGFnYXRpb24oKSxvbkNsaWNrOigpPT5xKEcpLG9uS2V5RG93bjooRik9PntpZihGLmtleT09PSJFbnRlciJ8fEYua2V5PT09IiAiKUYucHJldmVudERlZmF1bHQoKSxxKEcpfSxvbk1vdXNlRW50ZXI6KCk9PlkoRyksb25Nb3VzZUxlYXZlOigpPT5ZKG51bGwpLGNoaWxkcmVuOlgoInRpdGxlIix7Y2hpbGRyZW46Vi5sYWJlbHx8Vi5yb2xlfSl9LGAke0d9OiR7SH1gKSl9KX0pO3JldHVybiBYKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgei0xMCBvdmVyZmxvdy1oaWRkZW4gcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46US5lbGVtZW50cy5tYXAoKFYsRyk9PntsZXQgQj1kMChWKTtyZXR1cm4gWCh3Nix7ZWxlbWVudDpWLGluZGV4Okcsc2NyZWVuOlEuc2NyZWVuLGhpZ2hsaWdodGVkOkI9PT1aLHNlbGVjdGVkOkI9PT1LLG9uSGlnaGxpZ2h0Olksb25TZWxlY3Q6cX0sQil9KX0pfWZ1bmN0aW9uIGI2KHtlbmRwb2ludDokLGNoaWxkcmVuOkp9KXtsZXR7c25hcHNob3Q6USxzdGF0dXM6Wn09STYoJCksW0ssWV09QShudWxsKSxbcSxWXT1BKG51bGwpO18oKCk9PntpZighJClZKG51bGwpLFYobnVsbCl9LFskXSk7bGV0IEc9UjEoKCk9Pih7c25hcHNob3Q6USxzdGF0dXM6Wn0pLFtRLFpdKSxCPVIxKCgpPT4oe2hpZ2hsaWdodGVkS2V5Okssc2VsZWN0ZWRLZXk6cSxzZXRIaWdobGlnaHRlZEtleTpZLHNldFNlbGVjdGVkS2V5OlZ9KSxbSyxxXSk7cmV0dXJuIFgoZTMse3ZhbHVlOkcsY2hpbGRyZW46WCgkOCx7dmFsdWU6QixjaGlsZHJlbjpKfSl9KX1mdW5jdGlvbiBROCh7b3ZlcmxheUVuYWJsZWQ6JCxzdHJlYW1pbmc6SixvblRvZ2dsZU92ZXJsYXk6UX0pe2xldHtzdGF0dXM6Wn09QzUoKSxbSyxZXT1BKCExKSxxPSQmJko7cmV0dXJuIFgoSTEuQnV0dG9uLHsiYXJpYS1sYWJlbCI6JD8iSGlkZSBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiOiJTaG93IGFjY2Vzc2liaWxpdHkgb3ZlcmxheSIsImFyaWEtcHJlc3NlZCI6JCx0aXRsZTpaLG9uQ2xpY2s6USxvbk1vdXNlRW50ZXI6KCk9PlkoITApLG9uTW91c2VMZWF2ZTooKT0+WSghMSksc3R5bGU6cT97YmFja2dyb3VuZDpLP1QxKDAuMTIpOlQxKDAuMDgpLGNvbG9yOmQxKDAuOTUpfTp2b2lkIDAsY2hpbGRyZW46WChwMCx7c2l6ZToxOSxzdHJva2VXaWR0aDoyfSl9KX1mdW5jdGlvbiB5Nih7aGlkZUNocm9tZTokLG9uVG9nZ2xlOkp9KXtsZXRbUSxaXT1BKCExKTtyZXR1cm4gWChJMS5CdXR0b24seyJhcmlhLWxhYmVsIjokPyJTaG93IGRldmljZSBmcmFtZSI6IkhpZGUgZGV2aWNlIGZyYW1lIiwiYXJpYS1wcmVzc2VkIjokLHRpdGxlOiQ/IlNob3cgZGV2aWNlIGZyYW1lIjoiSGlkZSBkZXZpY2UgZnJhbWUiLG9uQ2xpY2s6Sixvbk1vdXNlRW50ZXI6KCk9PlooITApLG9uTW91c2VMZWF2ZTooKT0+WighMSksc3R5bGU6JD97YmFja2dyb3VuZDpRP1QxKDAuMTIpOlQxKDAuMDgpLGNvbG9yOmQxKDAuOTUpfTp2b2lkIDAsY2hpbGRyZW46WChzMCx7c2l6ZToxOCxzdHJva2VXaWR0aDoyfSl9KX1mdW5jdGlvbiBzMih7Y2xhc3NOYW1lOiQ9IiJ9KXtyZXR1cm4gWCgiYSIse2hyZWY6Imh0dHBzOi8vZ2l0aHViLmNvbS9FdmFuQmFjb24vc2VydmUtc2ltIix0YXJnZXQ6Il9ibGFuayIscmVsOiJub3JlZmVycmVyIixjbGFzc05hbWU6YGlubGluZS1mbGV4IGgtWzMwcHhdIG1pbi13LTAgaXRlbXMtY2VudGVyIHdoaXRlc3BhY2Utbm93cmFwIHJvdW5kZWQtbWQgcHgtMS41IGZvbnQtbW9ubyB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIHRleHQtaW5rLTY1IG5vLXVuZGVybGluZSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6YmctaW5rLzggaG92ZXI6dGV4dC1pbmstODUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lIGZvY3VzLXZpc2libGU6b3V0bGluZS0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtaW5rLzYwICR7JH1gLnRyaW0oKSwiYXJpYS1sYWJlbCI6Ik9wZW4gc2VydmUtc2ltIix0aXRsZToiT3BlbiBzZXJ2ZS1zaW0iLGNoaWxkcmVuOiJzZXJ2ZS1zaW0ifSl9ZnVuY3Rpb24gUzYoe29wZW46JCxvbkNsaWNrOkp9KXtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOmBmaXhlZCB0b3AtMyBsZWZ0LTMgei0zMCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBwLTEgW3RyYW5zaXRpb246b3BhY2l0eV8wLjE4c19lYXNlXSAkeyQ/Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIjoib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byJ9YCxjaGlsZHJlbjpbWCgiYnV0dG9uIix7b25DbGljazpKLGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LWljb24gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLWluay84IGhvdmVyOnRleHQtaW5rIiwiYXJpYS1sYWJlbCI6Ik9wZW4gZGV2aWNlcyBzaWRlYmFyIiwiYXJpYS1wcmVzc2VkIjokLHRpdGxlOiJEZXZpY2VzIixjaGlsZHJlbjpYKEkwLHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pLFgoczIse30pXX0pfWZ1bmN0aW9uIHg2KCQpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCl8fCQ8PTApcmV0dXJuIjAgQiI7bGV0IEo9JC8xMDczNzQxODI0O2lmKEo+PTEpcmV0dXJuYCR7Si50b0ZpeGVkKEo+PTEwPzA6MSl9IEdCYDtyZXR1cm5gJHsoJC8xMDQ4NTc2KS50b0ZpeGVkKDApfSBNQmB9ZnVuY3Rpb24gdDIoJCl7bGV0IEo9JC5tYXRjaCgvXihbYS16QS1aXSspLSguKykkLyk7aWYoIUopcmV0dXJue29zOiQsdmVyc2lvbjoiIn07cmV0dXJue29zOkpbMV0sdmVyc2lvbjpKWzJdLnJlcGxhY2UoLy0vZywiLiIpfX1mdW5jdGlvbiBSNigkKXtyZXR1cm4gdDIoJCkudmVyc2lvbnx8JH1mdW5jdGlvbiBlMigkKXtsZXR7b3M6Six2ZXJzaW9uOlF9PXQyKCQpO3JldHVybiBRP2Ake0p9ICR7UX1gOkp9ZnVuY3Rpb24gRjUoKXtsZXRbJCxKXT1BKCgpPT50eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lm1hdGNoTWVkaWE/LigiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKS5tYXRjaGVzPT09ITApO3JldHVybiBfKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSJ8fCF3aW5kb3cubWF0Y2hNZWRpYSlyZXR1cm47bGV0IFE9d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIiksWj0oKT0+SihRLm1hdGNoZXMpO3JldHVybiBaKCksUS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFopLCgpPT5RLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWil9LFtdKSwkfXZhciBBNT0iMC4yNHMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpIjtmdW5jdGlvbiBKMyh7Y2hyb21lOiQsc2NyZWVuOkosaW50ZXJhY3RpdmU6UT0hMSxmcmFtZWQ6Wj0hMCxvbkJ1dHRvbjpLLG9uQ3Jvd25XaGVlbDpZfSl7bGV0IHE9RjUoKSxWPXE/Im5vbmUiOmBvcGFjaXR5ICR7QTV9YCxHPXE/Im5vbmUiOmBsZWZ0ICR7QTV9LCB0b3AgJHtBNX0sIHdpZHRoICR7QTV9LCBoZWlnaHQgJHtBNX0sIGJvcmRlci1yYWRpdXMgJHtBNX1gLEI9USYmWjtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIiwiZGF0YS1kZXZpY2VraXQtY2hyb21lIjoiIiwiZGF0YS1mcmFtZWQiOlo/Im9uIjoib2ZmIixjaGlsZHJlbjpbWCgiZGl2Iix7ImFyaWEtaGlkZGVuIjpaP3ZvaWQgMDohMCxzdHlsZTp7b3BhY2l0eTpaPzE6MCxwb2ludGVyRXZlbnRzOlo/dm9pZCAwOiJub25lIix0cmFuc2l0aW9uOlZ9LGNoaWxkcmVuOlskLmJ1dHRvbnMubWFwKChOKT0+WChOUSx7Y2hyb21lOiQsYnV0dG9uOk4saW50ZXJhY3RpdmU6QixvbkJ1dHRvbjpLLG9uV2hlZWw6QiYmTi5uYW1lPT09ImRpZ2l0YWwtY3Jvd24iP1k6dm9pZCAwfSxgYnV0dG9uLSR7Ti5uYW1lfWApKSwkLmNvbXBvc2l0ZUltYWdlP1godjYse2Nocm9tZTokLGltYWdlOiQuY29tcG9zaXRlSW1hZ2UscmVjdDokLmJvZHksekluZGV4OjF9KTokLnNsaWNlJiYkLmNvcm5lcj9YKFVRLHtjaHJvbWU6JH0pOm51bGxdfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBvdmVyZmxvdy1oaWRkZW4iLHN0eWxlOnsuLi5CUSgkLFopLGJhY2tncm91bmQ6Wj8iIzAwMCI6dm9pZCAwLHRyYW5zaXRpb246R30sY2hpbGRyZW46Sn0pXX0pfWZ1bmN0aW9uIEJRKCQsSil7aWYoIUopcmV0dXJue2xlZnQ6MCx0b3A6MCx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIix6SW5kZXg6Mixib3JkZXJSYWRpdXM6MH07cmV0dXJuey4uLlo4KCQsJC5zY3JlZW4sMiksYm9yZGVyUmFkaXVzOnpRKCQpfX1mdW5jdGlvbiB6USgkKXtyZXR1cm5gJHskLnNjcmVlblJhZGl1cy8kLnNjcmVlbi53aWR0aCoxMDB9JSAvICR7JC5zY3JlZW5SYWRpdXMvJC5zY3JlZW4uaGVpZ2h0KjEwMH0lYH1mdW5jdGlvbiBOUSh7Y2hyb21lOiQsYnV0dG9uOkosaW50ZXJhY3RpdmU6USxvbkJ1dHRvbjpaLG9uV2hlZWw6S30pe2xldFtZLHFdPUEoITEpLFtWLEddPUEoITEpLEI9VChudWxsKSxOPVQobnVsbCksej1UKEspO3ouY3VycmVudD1LLF8oKCk9PntsZXQgdz1OLmN1cnJlbnQ7aWYoIXd8fCFLKXJldHVybjtsZXQgUz0oUTEpPT57UTEucHJldmVudERlZmF1bHQoKSxRMS5zdG9wUHJvcGFnYXRpb24oKSx6LmN1cnJlbnQ/LihRMS5kZWx0YVksUTEuZGVsdGFNb2RlKX07cmV0dXJuIHcuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLFMse3Bhc3NpdmU6ITF9KSwoKT0+dy5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsUyl9LFshIUtdKTtsZXQgVT1RJiZKLnVzYWdlUGFnZSE9bnVsbCYmSi51c2FnZSE9bnVsbCxIPVAoKCk9PntpZihCLmN1cnJlbnQ9PT1udWxsKXJldHVybjtCLmN1cnJlbnQ9bnVsbCxHKCExKSxaPy4oe3BoYXNlOiJ1cCIsYnV0dG9uOkp9KX0sW0osWl0pLEY9UCgodyk9PntpZih3LmJ1dHRvbiE9PTAmJncucG9pbnRlclR5cGU9PT0ibW91c2UiKXJldHVybjt3LnByZXZlbnREZWZhdWx0KCksdy5zdG9wUHJvcGFnYXRpb24oKSxCLmN1cnJlbnQ9dy5wb2ludGVySWQ7dHJ5e3cuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZSh3LnBvaW50ZXJJZCl9Y2F0Y2h7fUcoITApLFo/Lih7cGhhc2U6ImRvd24iLGJ1dHRvbjpKfSl9LFtKLFpdKSxMPUoub25Ub3A/NTowLGs9VSYmKFl8fFYpLEM9KGs/Si5ob3Zlci54OjApKjEwMCxPPShrP0ouaG92ZXIueTowKSoxMDAseT1WJiZKLmltYWdlRG93bj9KLmltYWdlRG93bjpKLmltYWdlLEU9VT97b25Qb2ludGVyRG93bjpGLG9uUG9pbnRlclVwOkgsb25Qb2ludGVyQ2FuY2VsOkgsb25Qb2ludGVyRW50ZXI6KCk9PnEoITApLG9uUG9pbnRlckxlYXZlOigpPT57cSghMSksSCgpfX06e307cmV0dXJuIFgoImRpdiIse3JlZjpOLHJvbGU6VT8iYnV0dG9uIjp2b2lkIDAsImFyaWEtbGFiZWwiOlU/ajYoSi5uYW1lKTp2b2lkIDAsImFyaWEtaGlkZGVuIjpVP3ZvaWQgMDohMCx0aXRsZTpVP2o2KEoubmFtZSk6dm9pZCAwLGNsYXNzTmFtZToiYWJzb2x1dGUgc2VsZWN0LW5vbmUiLHN0eWxlOnsuLi5aOCgkLEouZnJhbWUsTCksdHJhbnNmb3JtOkN8fE8/YHRyYW5zbGF0ZSgke0N9JSwgJHtPfSUpYDp2b2lkIDAsdHJhbnNpdGlvbjoidHJhbnNmb3JtIDAuMTJzIGVhc2UiLGN1cnNvcjpVPyJwb2ludGVyIjp2b2lkIDAscG9pbnRlckV2ZW50czpVPyJhdXRvIjoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUifSwuLi5FLGNoaWxkcmVuOnkmJlgoImltZyIse2FsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzcmM6ZzYoJC5pZGVudGlmaWVyLHkpLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgc2VsZWN0LW5vbmUiLHN0eWxlOntvYmplY3RGaXQ6ImZpbGwiLGZpbHRlcjpWJiYhSi5pbWFnZURvd24/ImJyaWdodG5lc3MoMS40KSI6dm9pZCAwLHRyYW5zaXRpb246ImZpbHRlciAwLjEycyBlYXNlIixXZWJraXRVc2VyRHJhZzoibm9uZSJ9fSl9KX1mdW5jdGlvbiBqNigkKXtyZXR1cm4gJC5zcGxpdCgiLSIpLm1hcCgoSik9PkouY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrSi5zbGljZSgxKSkuam9pbigiICIpfWZ1bmN0aW9uIFVRKHtjaHJvbWU6JH0pe2lmKCEkLnNsaWNlfHwhJC5jb3JuZXIpcmV0dXJuIG51bGw7bGV0e2JvZHk6Sixjb3JuZXI6USxzbGljZTpafT0kLEs9TWF0aC5tYXgoSi53aWR0aC1RLndpZHRoKjIsMCksWT1NYXRoLm1heChKLmhlaWdodC1RLmhlaWdodCoyLDApLHE9W3trZXk6InRvcC1sZWZ0IixpbWFnZTpaLnRvcExlZnQscmVjdDp7eDpKLngseTpKLnksd2lkdGg6US53aWR0aCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJ0b3AtcmlnaHQiLGltYWdlOloudG9wUmlnaHQscmVjdDp7eDpKLngrSi53aWR0aC1RLndpZHRoLHk6Si55LHdpZHRoOlEud2lkdGgsaGVpZ2h0OlEuaGVpZ2h0fX0se2tleToiYm90dG9tLWxlZnQiLGltYWdlOlouYm90dG9tTGVmdCxyZWN0Ont4OkoueCx5OkoueStKLmhlaWdodC1RLmhlaWdodCx3aWR0aDpRLndpZHRoLGhlaWdodDpRLmhlaWdodH19LHtrZXk6ImJvdHRvbS1yaWdodCIsaW1hZ2U6Wi5ib3R0b21SaWdodCxyZWN0Ont4OkoueCtKLndpZHRoLVEud2lkdGgseTpKLnkrSi5oZWlnaHQtUS5oZWlnaHQsd2lkdGg6US53aWR0aCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJ0b3AiLGltYWdlOloudG9wLHJlY3Q6e3g6Si54K1Eud2lkdGgseTpKLnksd2lkdGg6SyxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJib3R0b20iLGltYWdlOlouYm90dG9tLHJlY3Q6e3g6Si54K1Eud2lkdGgseTpKLnkrSi5oZWlnaHQtUS5oZWlnaHQsd2lkdGg6SyxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJsZWZ0IixpbWFnZTpaLmxlZnQscmVjdDp7eDpKLngseTpKLnkrUS5oZWlnaHQsd2lkdGg6US53aWR0aCxoZWlnaHQ6WX19LHtrZXk6InJpZ2h0IixpbWFnZTpaLnJpZ2h0LHJlY3Q6e3g6Si54K0oud2lkdGgtUS53aWR0aCx5OkoueStRLmhlaWdodCx3aWR0aDpRLndpZHRoLGhlaWdodDpZfX1dO3JldHVybiBYKEsxLHtjaGlsZHJlbjpxLmZpbHRlcigoVik9PlYucmVjdC53aWR0aD4wJiZWLnJlY3QuaGVpZ2h0PjApLm1hcCgoVik9PlgodjYse2Nocm9tZTokLGltYWdlOlYuaW1hZ2UscmVjdDpWLnJlY3QsekluZGV4OjF9LFYua2V5KSl9KX1mdW5jdGlvbiB2Nih7Y2hyb21lOiQsaW1hZ2U6SixyZWN0OlEsekluZGV4Olp9KXtyZXR1cm4gWCgiaW1nIix7YWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHNyYzpnNigkLmlkZW50aWZpZXIsSiksY2xhc3NOYW1lOiJhYnNvbHV0ZSBzZWxlY3Qtbm9uZSIsc3R5bGU6ey4uLlo4KCQsUSxaKSxvYmplY3RGaXQ6ImZpbGwiLHBvaW50ZXJFdmVudHM6Im5vbmUiLFdlYmtpdFVzZXJEcmFnOiJub25lIn19KX1mdW5jdGlvbiBnNigkLEope2xldCBRPWBncmlkL2FwaS9kZXZpY2VraXQtY2hyb21lP2Nocm9tZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX0maW1hZ2U9JHtlbmNvZGVVUklDb21wb25lbnQoSil9YDtyZXR1cm4gdHlwZW9mIHdpbmRvdz4idSI/YC8ke1F9YDpiMShRKX1mdW5jdGlvbiBaOCgkLEosUSl7cmV0dXJue2xlZnQ6JDMoSi54LCQuZnJhbWUud2lkdGgpLHRvcDokMyhKLnksJC5mcmFtZS5oZWlnaHQpLHdpZHRoOiQzKEoud2lkdGgsJC5mcmFtZS53aWR0aCksaGVpZ2h0OiQzKEouaGVpZ2h0LCQuZnJhbWUuaGVpZ2h0KSx6SW5kZXg6UX19ZnVuY3Rpb24gJDMoJCxKKXtyZXR1cm5gJHskL0oqMTAwfSVgfWZ1bmN0aW9uIGg2KHtuYW1lOiQscnVudGltZTpKLGNocm9tZTpRLHBsYWNlaG9sZGVyQXNzZXQ6WixidXN5OkssYnVzeUxhYmVsOlk9IlN0YXJ0aW5n4oCmIixlcnJvcjpxLG9uU3RhcnQ6Vn0pe2xldCBHPUUwKCQpLEI9UzFbR10sTj1aPz9udWxsLHo9Tj9udWxsOlE/P251bGwsVT16P3t3aWR0aDp6LnNjcmVlbi53aWR0aCxoZWlnaHQ6ei5zY3JlZW4uaGVpZ2h0fTpVNShHLCQpLEg9TDUoRyxVKSxGPU4/TFEoRyxOLm5hbWUpOno/SCp6LmZyYW1lLndpZHRoL3ouc2NyZWVuLndpZHRoOkgqQi53aWR0aC8oQi53aWR0aC0yKkIuYmV6ZWxYKSxMPU4/e3dpZHRoOk4ud2lkdGgsaGVpZ2h0Ok4uaGVpZ2h0fTp6P3t3aWR0aDp6LmZyYW1lLndpZHRoLGhlaWdodDp6LmZyYW1lLmhlaWdodH06e3dpZHRoOkIud2lkdGgsaGVpZ2h0OkIuaGVpZ2h0fSxrPWAke0wud2lkdGh9IC8gJHtMLmhlaWdodH1gLEM9KEwud2lkdGgvTC5oZWlnaHQqSFEoRykpLnRvRml4ZWQoMiksTz1HPT09InZpc2lvbiI/WChGUSx7fSk6WChrUSx7dHlwZTpHfSk7cmV0dXJuIFgoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTUgbWluLXctMCB3LWZ1bGwiLGNoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHctZnVsbCIsc3R5bGU6e3dpZHRoOmBtaW4oMTAwJSwgJHtGfXB4LCAke0N9ZHZoKWAsbWF4V2lkdGg6Rixhc3BlY3RSYXRpbzprfSxjaGlsZHJlbjpOP1goQ1Ese25hbWU6Ti5uYW1lLGZhbGxiYWNrOk99KTp6P1goImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpYKEozLHtjaHJvbWU6en0pfSk6T30pLFgoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzE3cHhdIGZvbnQtc2VtaWJvbGQgdGV4dC1pbmstOTAiLGNoaWxkcmVuOiR9KSxYKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIHRleHQtaW5rLTQ1IixjaGlsZHJlbjpbZTIoSiksIiBTaW11bGF0b3IiXX0pXX0pLHEmJlgoImRpdiIse2NsYXNzTmFtZToidGV4dC1kYW5nZXIgdGV4dC1bMTJweF0gZm9udC1tb25vIG1heC13LTkwIHRleHQtY2VudGVyIixjaGlsZHJlbjpxfSksWCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOlYsZGlzYWJsZWQ6SyxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTUgcHktMiByb3VuZGVkLWZ1bGwgdGV4dC1bMTRweF0gZm9udC1tZWRpdW0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c10gJHtLPyJiZy1pbmsvOCB0ZXh0LWluay01NSBjdXJzb3ItZGVmYXVsdCI6ImJnLWluay8xMiB0ZXh0LWluay05MCBob3ZlcjpiZy1pbmsvMTggY3Vyc29yLXBvaW50ZXIifWAsY2hpbGRyZW46W0smJlgoInNwYW4iLHsiYXJpYS1oaWRkZW4iOiEwLGNsYXNzTmFtZToic2l6ZS0zLjUgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci1pbmsvMjUgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSIsc3R5bGU6e2JvcmRlclRvcENvbG9yOlQxKDAuOSl9fSksSz9ZOiJTdGFydCJdfSldfSl9ZnVuY3Rpb24gTFEoJCxKKXtpZigkPT09IndhdGNoIil7aWYoSi5pbmNsdWRlcygidWx0cmEiKSlyZXR1cm4gMjU1O2lmKEouaW5jbHVkZXMoIndhdGNoLXNlLSIpfHxKLmluY2x1ZGVzKCJhcHBsZS13YXRjaC1zZS0iKSlyZXR1cm4gMjM4O3JldHVybiAyNTB9aWYoJD09PSJ2aXNpb24iKXJldHVybiAzOTA7aWYoJD09PSJpcGFkIilyZXR1cm4gMzQwO3JldHVybiAyODB9ZnVuY3Rpb24gSFEoJCl7aWYoJD09PSJ2aXNpb24iKXJldHVybiAzNDtpZigkPT09ImlwYWQiKXJldHVybiA1MDtpZigkPT09IndhdGNoIilyZXR1cm4gNTY7cmV0dXJuIDUyfWZ1bmN0aW9uIGtRKHt0eXBlOiR9KXtsZXQgSj1TMVskXTtyZXR1cm4gWChLMSx7Y2hpbGRyZW46W1goInN2ZyIse3ZpZXdCb3g6YDAgMCAke0oud2lkdGh9ICR7Si5oZWlnaHR9YCxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWlkWU1pZCBtZWV0IixjaGlsZHJlbjpbWCgiZGVmcyIse2NoaWxkcmVuOlgoImxpbmVhckdyYWRpZW50Iix7aWQ6InBsYWNlaG9sZGVyLXNjcmVlbiIseDE6IjAiLHkxOiIwIix4MjoiMSIseTI6IjEiLGNoaWxkcmVuOltYKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjNmZhOGU2In0pLFgoInN0b3AiLHtvZmZzZXQ6IjU1JSIsc3RvcENvbG9yOiIjNWI5M2Q2In0pLFgoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzUxODhjZiJ9KV19KX0pLFgoInJlY3QiLHt4OkouYmV6ZWxYLHk6Si5iZXplbFksd2lkdGg6Si53aWR0aC0yKkouYmV6ZWxYLGhlaWdodDpKLmhlaWdodC0yKkouYmV6ZWxZLHJ4OkouaW5uZXJSYWRpdXMsZmlsbDoidXJsKCNwbGFjZWhvbGRlci1zY3JlZW4pIn0pXX0pLFgoImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpYKGYyLHt0eXBlOiR9KX0pXX0pfWZ1bmN0aW9uIENRKHtuYW1lOiQsZmFsbGJhY2s6Sn0pe2xldFtRLFpdPUEoImxvYWRpbmciKTtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpbUSE9PSJsb2FkZWQiJiZKLFEhPT0iZXJyb3IiJiZYKCJpbWciLHthbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3JjOkFRKCQpLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgc2VsZWN0LW5vbmUgb2JqZWN0LWNvbnRhaW4iLHN0eWxlOntXZWJraXRVc2VyRHJhZzoibm9uZSJ9LG9uTG9hZDooKT0+WigibG9hZGVkIiksb25FcnJvcjooKT0+WigiZXJyb3IiKX0pXX0pfWZ1bmN0aW9uIEZRKCl7bGV0e3dpZHRoOiQsaGVpZ2h0Okp9PVMxLnZpc2lvbjtyZXR1cm4gWCgic3ZnIix7dmlld0JveDpgMCAwICR7JH0gJHtKfWAsY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCIscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pZFlNaWQgbWVldCIsZmlsbDoibm9uZSIsImFyaWEtaGlkZGVuIjohMCxjaGlsZHJlbjpbWCgiZGVmcyIse2NoaWxkcmVuOltYKCJsaW5lYXJHcmFkaWVudCIse2lkOiJ2aXNpb24tcGxhY2Vob2xkZXItc2hlbGwiLHgxOiIwIix5MToiMCIseDI6IjAiLHkyOiIxIixjaGlsZHJlbjpbWCgic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzI4MjgyYiJ9KSxYKCJzdG9wIix7b2Zmc2V0OiI1NCUiLHN0b3BDb2xvcjoiIzEyMTIxNCJ9KSxYKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMwNzA3MDgifSldfSksWCgibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLXBsYWNlaG9sZGVyLWdsYXNzIix4MToiMCIseTE6IjAiLHgyOiIxIix5MjoiMSIsY2hpbGRyZW46W1goInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiMzMTM1M2EifSksWCgic3RvcCIse29mZnNldDoiNDglIixzdG9wQ29sb3I6IiMwYTBiMGQifSksWCgic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjMDEwMTAyIn0pXX0pLFgoInJhZGlhbEdyYWRpZW50Iix7aWQ6InZpc2lvbi1wbGFjZWhvbGRlci1sZW5zIixjeDoiNTAlIixjeToiNDYlIixyOiI2MCUiLGNoaWxkcmVuOltYKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjMjAyODMyIn0pLFgoInN0b3AiLHtvZmZzZXQ6IjcyJSIsc3RvcENvbG9yOiIjMDkwYTBkIn0pLFgoInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzAxMDEwMiJ9KV19KV19KSxYKCJwYXRoIix7ZDoiTTk1IDE3N0M5NSAxMTkgMTQ3IDg2IDIxOCA5MUMyNTcgOTQgMjg2IDExMSAzMjAgMTExQzM1NCAxMTEgMzgzIDk0IDQyMiA5MUM0OTMgODYgNTQ1IDExOSA1NDUgMTc3VjIyMkM1NDUgMjc4IDUwMSAzMTEgNDQzIDMxMEMzOTggMzA5IDM3MSAyODYgMzQ1IDI2OEMzMjkgMjU3IDMxMSAyNTcgMjk1IDI2OEMyNjkgMjg2IDI0MiAzMDkgMTk3IDMxMEMxMzkgMzExIDk1IDI3OCA5NSAyMjJWMTc3WiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItc2hlbGwpIixzdHJva2U6IiMzZDNkNDIiLHN0cm9rZVdpZHRoOiI3In0pLFgoInBhdGgiLHtkOiJNMTE3IDE4MUMxMTcgMTM0IDE1NyAxMTIgMjIwIDExNkMyNjAgMTE5IDI4NyAxMzYgMzIwIDEzNkMzNTMgMTM2IDM4MCAxMTkgNDIwIDExNkM0ODMgMTEyIDUyMyAxMzQgNTIzIDE4MVYyMTdDNTIzIDI2MyA0ODggMjg3IDQzOSAyODdDMzk5IDI4NyAzNjkgMjY0IDM0NSAyNTBDMzI5IDI0MCAzMTEgMjQwIDI5NSAyNTBDMjcxIDI2NCAyNDEgMjg3IDIwMSAyODdDMTUyIDI4NyAxMTcgMjYzIDExNyAyMTdWMTgxWiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItZ2xhc3MpIixzdHJva2U6IiMxNzE4MWIiLHN0cm9rZVdpZHRoOiI1In0pLFgoInBhdGgiLHtkOiJNMTQzIDE4NkMxNDUgMTQ4IDE3NiAxMzUgMjI2IDEzOEMyNjQgMTQxIDI4OSAxNTYgMzIwIDE1NkMzNTEgMTU2IDM3NiAxNDEgNDE0IDEzOEM0NjQgMTM1IDQ5NSAxNDggNDk3IDE4NlYyMTNDNDk3IDI1MCA0NjkgMjY2IDQzMiAyNjZDMzk0IDI2NiAzNjkgMjQ2IDM0MyAyMzVDMzI4IDIyOSAzMTIgMjI5IDI5NyAyMzVDMjcxIDI0NiAyNDYgMjY2IDIwOCAyNjZDMTcxIDI2NiAxNDMgMjUwIDE0MyAyMTNWMTg2WiIsZmlsbDoidXJsKCN2aXNpb24tcGxhY2Vob2xkZXItbGVucykiLHN0cm9rZToiIzI2MmEyZiIsc3Ryb2tlV2lkdGg6IjIifSksWCgicGF0aCIse2Q6Ik0xNTEgMTcxQzE3OSAxNTAgMjE3IDE0NyAyNTEgMTU0TTM4OSAxNTRDNDIzIDE0NyA0NjEgMTUwIDQ4OSAxNzEiLHN0cm9rZToiIzRlNTM1YSIsc3Ryb2tlV2lkdGg6IjMiLHN0cm9rZUxpbmVjYXA6InJvdW5kIn0pLFgoInBhdGgiLHtkOiJNMjc3IDIzM0MyODkgMjI0IDMwNCAyMTkgMzIwIDIxOUMzMzYgMjE5IDM1MSAyMjQgMzYzIDIzMyIsc3Ryb2tlOiIjM2I0MDQ2IixzdHJva2VXaWR0aDoiNCIsc3Ryb2tlTGluZWNhcDoicm91bmQifSldfSl9ZnVuY3Rpb24gQVEoJCl7bGV0IEo9YGdyaWQvYXBpL2RldmljZS1wbGFjZWhvbGRlci1hc3NldD9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfWA7cmV0dXJuIHR5cGVvZiB3aW5kb3c+InUiP2AvJHtKfWA6YjEoSil9ZnVuY3Rpb24gTzUoe29wZW46JCx3aWR0aDpKLGNoaWxkcmVuOlEsc3R5bGU6WixzaWRlOks9InJpZ2h0In0pe3JldHVybiBYKCJhc2lkZSIse2NsYXNzTmFtZTpgZml4ZWQgei0zNSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiBiZy1wYW5lbC1iZyB0ZXh0LWluay05MCBiYWNrZHJvcC1ibHVyLVsxOHB4XSBbZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksc2Fucy1zZXJpZl0gW3RyYW5zaXRpb246dHJhbnNmb3JtXzAuMjVzX2Vhc2Usb3BhY2l0eV8wLjJzX2Vhc2VdIGZsZXggZmxleC1jb2wgJHtgdG9wLTMgYm90dG9tLTMgJHtLPT09ImxlZnQiPyJsZWZ0LTMiOiJyaWdodC0zIn0gcm91bmRlZC1bMTRweF0gYm9yZGVyIGJvcmRlci1pbmsvMTAgc2hhZG93LXBhbmVsYH1gLHN0eWxlOnt3aWR0aDpKLHRyYW5zZm9ybTokPyJ0cmFuc2xhdGVYKDApIjpLPT09ImxlZnQiPyJ0cmFuc2xhdGVYKGNhbGMoLTEwMCUgLSAyNHB4KSkiOiJ0cmFuc2xhdGVYKGNhbGMoMTAwJSArIDI0cHgpKSIsb3BhY2l0eTokPzE6MCxwb2ludGVyRXZlbnRzOiQ/ImF1dG8iOiJub25lIiwuLi5afSwiYXJpYS1oaWRkZW4iOiEkLGNoaWxkcmVuOlF9KX1mdW5jdGlvbiBNNSh7Y2hpbGRyZW46JCxzdHlsZTpKfSl7cmV0dXJuIFgoImhlYWRlciIse2NsYXNzTmFtZToiZmxleCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yLjUgcHgtMi41IHB5LTEuNSBwbC0zIixzdHlsZTpKLGNoaWxkcmVuOiR9KX1mdW5jdGlvbiBmNih7Y2hpbGRyZW46JH0pe3JldHVybiBYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LW1lZGl1bSB0ZXh0LWluay01NSIsY2hpbGRyZW46JH0pfWZ1bmN0aW9uIFEzKHtvbkNsaWNrOiQsYXJpYUxhYmVsOko9IkNsb3NlIHBhbmVsIix0aXRsZTpRLGljb25TaXplOlo9MTZ9KXtyZXR1cm4gWCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOiQsY2xhc3NOYW1lOiJmbGV4IGgtWzMwcHhdIHctWzMwcHhdIHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlci1ub25lIGJnLXRyYW5zcGFyZW50IHAtMCB0ZXh0LWljb24gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLWluay84IGhvdmVyOnRleHQtaW5rIiwiYXJpYS1sYWJlbCI6Six0aXRsZTpRLGNoaWxkcmVuOlgoTDAse3NpemU6WixzdHJva2VXaWR0aDoyfSl9KX1mdW5jdGlvbiBtNigkLEope2xldFtRLFpdPUEobnVsbCk7cmV0dXJuIF8oKCk9PntpZighSnx8ISQpcmV0dXJuO2xldCBLPSExLFk9YXN5bmMoKT0+e3RyeXtsZXQgRz1hd2FpdChhd2FpdCBmZXRjaCgkLHtjYWNoZToibm8tc3RvcmUifSkpLmpzb24oKTtpZighSylaKEcpfWNhdGNoe319O1koKTtsZXQgcT1zZXRJbnRlcnZhbChZLDUwMDApO3JldHVybigpPT57Sz0hMCxjbGVhckludGVydmFsKHEpfX0sWyQsSl0pLFF9dmFyIHA2PSJ2YXIoLS1zZXJ2ZS1zaW0tZGFuZ2VyKSIsdTY9InZhcigtLXNlcnZlLXNpbS1jYXV0aW9uKSIsbDY9InZhcigtLXNlcnZlLXNpbS1zdWNjZXNzKSI7ZnVuY3Rpb24gZDYoe3JlcG9ydDokfSl7aWYoISR8fCQudG90YWxCeXRlcz09PTApcmV0dXJuIG51bGw7bGV0e2VzdGltYXRlZEFkZGl0aW9uYWw6SixhdmFpbGFibGVCeXRlczpRLHRvdGFsQnl0ZXM6WixydW5uaW5nU2ltdWxhdG9yczpLfT0kLFk9TWF0aC5tYXgoMCxNYXRoLm1pbigxLDEtUS9aKSkscT1LK0osVj1KPT09MD9wNjpKPD0xP3U2Omw2LEc9WT4wLjk/cDY6WT4wLjc1P3U2Omw2O3JldHVybiBYKCJkaXYiLHtjbGFzc05hbWU6ImlubGluZS1mbGV4IG1heC13LWZ1bGwgbWluLXctMCBmbGV4LW5vd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBvdmVyZmxvdy1oaWRkZW4gd2hpdGVzcGFjZS1ub3dyYXAgcHgtMiBweS1bM3B4XSByb3VuZGVkLWZ1bGwgYmctcGFuZWwtZGVlcCBib3JkZXIgYm9yZGVyLWluay8xMCBmb250LW1vbm8gdGV4dC1bMTFweF0gdGV4dC1pbmstNzAgbGVhZGluZy1ub25lIixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1bM3B4XSBzaHJpbmstMCIsc3R5bGU6e2JhY2tncm91bmQ6Vn19KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIHRydW5jYXRlIixjaGlsZHJlbjpbWCgic3BhbiIse2NoaWxkcmVuOltLLCIvIixxLCIgc2ltcyJdfSksWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1pbmstNDAiLGNoaWxkcmVuOiIgwrcgIn0pLFgoInNwYW4iLHtjbGFzc05hbWU6InRleHQtaW5rLTU1IixjaGlsZHJlbjpbeDYoUSksIiBmcmVlIl19KV19KSxYKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6Im1sLTAuNSB3LTcgaC1bM3B4XSBzaHJpbmstMCBiZy1pbmsvMTAgcm91bmRlZC1bMnB4XSBvdmVyZmxvdy1oaWRkZW4gaW5saW5lLWJsb2NrIixjaGlsZHJlbjpYKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBoLWZ1bGwgdHJhbnNpdGlvbi1bd2lkdGgsYmFja2dyb3VuZF0gZHVyYXRpb24tMzAwIGVhc2Utb3V0IixzdHlsZTp7d2lkdGg6YCR7KFkqMTAwKS50b0ZpeGVkKDEpfSVgLGJhY2tncm91bmQ6R319KX0pXX0pfWZ1bmN0aW9uIGM2KHtkZXZpY2U6JCxhY3RpdmU6SixzdGFydGluZzpRLHNodXR0aW5nRG93bjpaLG9uU2VsZWN0Okssb25TaHV0ZG93bjpZfSl7bGV0IHE9JC5oZWxwZXIsVj0kLnN0YXRlPT09IkJvb3RlZCIsRz1FMCgkLm5hbWUpLEI9L2R1by9pLnRlc3QoJC5uYW1lKXx8QXJyYXkuaXNBcnJheSgkLmRpc3BsYXlzKSYmJC5kaXNwbGF5cy5sZW5ndGg+MSxOPVI2KCQucnVudGltZSksej1xPyJTdHJlYW1pbmciOlE/Vj8iU3RhcnRpbmfigKYiOiJCb290aW5n4oCmIjpaPyJTaHV0dGluZyBkb3du4oCmIjpWPyJCb290ZWQiOm51bGwsVT1xPyJ2YXIoLS1zZXJ2ZS1zaW0tc3VjY2Vzcy1lbWVyYWxkKSI6Vj8idmFyKC0tc2VydmUtc2ltLWNhdXRpb24pIjpudWxsLEg9cXx8VixGPXE/Sj8iYmctbGl2ZS1pY29uLWFjdGl2ZSI6ImJnLWxpdmUtaWNvbiI6Sj8iYmctaW5rLzE1IjoiYmctaW5rLzYiLEw9cT8idGV4dC1saXZlLWljb24tZmciOko/InRleHQtaW5rLTkwIjoidGV4dC1pbmstNTUiO3JldHVybiBYKCJkaXYiLHtyb2xlOiJidXR0b24iLHRhYkluZGV4OjAsImFyaWEtcHJlc3NlZCI6SixvbkNsaWNrOkssb25LZXlEb3duOihrKT0+e2lmKGsua2V5PT09IkVudGVyInx8ay5rZXk9PT0iICIpay5wcmV2ZW50RGVmYXVsdCgpLEsoKX0sY2xhc3NOYW1lOmBncm91cCByZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHB4LTIgcHktMS41IHJvdW5kZWQtbGcgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEyc10gJHtKPyJiZy1pbmsvMTAgdGV4dC1pbmsiOiJ0ZXh0LWluay05MCBob3ZlcjpiZy1pbmsvOCJ9YCxjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOmByZWxhdGl2ZSBzaHJpbmstMCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTkgcm91bmRlZC1bOXB4XSBvdmVyZmxvdy1oaWRkZW4gJHtGfWAsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6TCxjaGlsZHJlbjpYKHUyLHt0eXBlOkcsZHVvOkIsc2NyZWVuT246Qm9vbGVhbihxKX0pfSksVSYmIXEmJlgoInNwYW4iLHtjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wLjUgcmlnaHQtMC41IHNpemUtMS41IHJvdW5kZWQtZnVsbCByaW5nLTIgcmluZy1wYW5lbC1iZyIsc3R5bGU6e2JhY2tncm91bmQ6VX19KV19KSxYKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIixjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJ0cnVuY2F0ZSB0ZXh0LVsxM3B4XSBmb250LXNlbWlib2xkIGxlYWRpbmctdGlnaHQiLGNoaWxkcmVuOiQubmFtZX0pLHomJlgoImRpdiIse2NsYXNzTmFtZTpgdHJ1bmNhdGUgdGV4dC1bMTFweF0gbGVhZGluZy10aWdodCAke3E/InRleHQtc3VjY2Vzcy1lbWVyYWxkIjpKPyJ0ZXh0LWluay03NSI6InRleHQtaW5rLTQ1In1gLGNoaWxkcmVuOnp9KV19KSxYKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2Utcm93LXRyYWlsaW5nLXNsb3QiLGNsYXNzTmFtZToicmVsYXRpdmUgc2hyaW5rLTAgdy04IGgtNiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6YGFic29sdXRlIHJpZ2h0LTAgdGV4dC1bMTFweF0gZm9udC1tb25vIHRhYnVsYXItbnVtcyBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTJzXSAke0o/InRleHQtaW5rLTg1IjoidGV4dC1pbmstNDAifSAke0g/Imdyb3VwLWhvdmVyOm9wYWNpdHktMCBncm91cC1mb2N1cy13aXRoaW46b3BhY2l0eS0wIjoiIn1gLGNoaWxkcmVuOk59KSxIJiZYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHRpdGxlOlo/IlNodXR0aW5nIGRvd27igKYiOiJTaHV0IGRvd24gc2ltdWxhdG9yIiwiYXJpYS1sYWJlbCI6IlNodXQgZG93biBzaW11bGF0b3IiLG9uQ2xpY2s6KGspPT57ay5wcmV2ZW50RGVmYXVsdCgpLGsuc3RvcFByb3BhZ2F0aW9uKCksWSgpfSxkaXNhYmxlZDpaLGNsYXNzTmFtZTpgYWJzb2x1dGUgcmlnaHQtMCB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS01IHJvdW5kZWQtbWQgb3BhY2l0eS0wIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIGZvY3VzLXZpc2libGU6b3BhY2l0eS0xMDAgW3RyYW5zaXRpb246b3BhY2l0eV8wLjEycyxiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSAke0o/InRleHQtaW5rLTgwIGhvdmVyOmJnLWluay8yMCI6InRleHQtaW5rLTcwIGhvdmVyOmJnLWluay8xMiBob3Zlcjp0ZXh0LWluayJ9YCxjaGlsZHJlbjpYKEwwLHtzaXplOjEzLHN0cm9rZVdpZHRoOjIuMn0pfSldfSldfSl9dmFyIFc1PSJ2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtYmcpIixYOD0idmFyKC0tc2VydmUtc2ltLXBhbmVsLWJnLXRyYW5zcGFyZW50KSI7dmFyIGk2PXtwcmVmZXJlbmNlOiJzeXN0ZW0iLHJlc29sdmVkOiJkYXJrIn07ZnVuY3Rpb24gT1EoJCl7dHJ5e3JldHVybiAkLmxvY2FsU3RvcmFnZX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gTVEoJCl7bGV0IEo9T1EoJCksUT1qMihKKSxaPWw5KCQpLEs9e3ByZWZlcmVuY2U6USxyZXNvbHZlZDpmMyhRLFopfSxZPW5ldyBTZXQscT1udWxsLFY9KCk9PntsZXQgQj1mMyhRLFopO2lmKG0zKCQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LEIpLEsucHJlZmVyZW5jZT09PVEmJksucmVzb2x2ZWQ9PT1CKXJldHVybjtLPXtwcmVmZXJlbmNlOlEscmVzb2x2ZWQ6Qn07Zm9yKGxldCBOIG9mIFkpTigpfSxHPSgpPT57bGV0IEI9dHlwZW9mICQubWF0Y2hNZWRpYT09PSJmdW5jdGlvbiI/JC5tYXRjaE1lZGlhKHA5KTpudWxsLE49KFUpPT57Wj1VLm1hdGNoZXMsVigpfSx6PShVKT0+e2lmKFUua2V5IT09bTkmJlUua2V5IT09bnVsbClyZXR1cm47UT1qMihKKSxWKCl9O3JldHVybiBCPy5hZGRFdmVudExpc3RlbmVyPy4oImNoYW5nZSIsTiksJC5hZGRFdmVudExpc3RlbmVyKCJzdG9yYWdlIix6KSxaPUI/Qi5tYXRjaGVzOlosUT1qMihKKSxWKCksKCk9PntCPy5yZW1vdmVFdmVudExpc3RlbmVyPy4oImNoYW5nZSIsTiksJC5yZW1vdmVFdmVudExpc3RlbmVyKCJzdG9yYWdlIix6KX19O3JldHVybiBtMygkLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxLLnJlc29sdmVkKSx7Z2V0U25hcHNob3Q6KCk9Pkssc3Vic2NyaWJlKEIpe2lmKFkuYWRkKEIpLCFxKXE9RygpO3JldHVybigpPT57aWYoWS5kZWxldGUoQiksWS5zaXplPT09MCYmcSlxKCkscT1udWxsfX0sc2V0UHJlZmVyZW5jZShCKXtRPUIsdTkoSixCKSxWKCl9fX12YXIgV1E9bnVsbDtmdW5jdGlvbiBQUSgpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiBudWxsO3JldHVybiBXUT8/PU1RKHdpbmRvdyl9dmFyIF9RPSgpPT4oKT0+e307ZnVuY3Rpb24gUDUoJD1QUSgpKXtyZXR1cm57Li4udzIoJD8kLnN1YnNjcmliZTpfUSwkPyQuZ2V0U25hcHNob3Q6KCk9Pmk2LCgpPT5pNiksc2V0UHJlZmVyZW5jZTokPyQuc2V0UHJlZmVyZW5jZTooKT0+e319fXZhciBVMj1be3ZhbHVlOiJzeXN0ZW0iLGxhYmVsOiJTeXN0ZW0iLEljb246bjV9LHt2YWx1ZToibGlnaHQiLGxhYmVsOiJMaWdodCIsSWNvbjpKMn0se3ZhbHVlOiJkYXJrIixsYWJlbDoiRGFyayIsSWNvbjphNX1dO2Z1bmN0aW9uIG82KHtwcmVmZXJlbmNlOiQsb25DaGFuZ2U6SixjbGFzc05hbWU6UT0iIn0pe2xldCBaPVA1KCksSz0kPz9aLnByZWZlcmVuY2UsWT1KPz9aLnNldFByZWZlcmVuY2U7cmV0dXJuIFgoImRpdiIse3JvbGU6InJhZGlvZ3JvdXAiLCJhcmlhLWxhYmVsIjoiQXBwZWFyYW5jZSIsb25LZXlEb3duOihWKT0+e2xldCBHPXtBcnJvd1JpZ2h0OjEsQXJyb3dEb3duOjEsQXJyb3dMZWZ0Oi0xLEFycm93VXA6LTF9W1Yua2V5XTtpZighRylyZXR1cm47Vi5wcmV2ZW50RGVmYXVsdCgpO2xldCBOPShVMi5maW5kSW5kZXgoKFUpPT5VLnZhbHVlPT09SykrRytVMi5sZW5ndGgpJVUyLmxlbmd0aDtZKFUyW05dLnZhbHVlKSxWLmN1cnJlbnRUYXJnZXQucXVlcnlTZWxlY3RvckFsbCgiW3JvbGU9cmFkaW9dIilbTl0/LmZvY3VzKCl9LGNsYXNzTmFtZTpgZmxleCBzaHJpbmstMCBpdGVtcy1jZW50ZXIgZ2FwLXB4IHJvdW5kZWQtbGcgYmctaW5rLzYgcC0wLjUgJHtRfWAudHJpbSgpLGNoaWxkcmVuOlUyLm1hcCgoe3ZhbHVlOlYsbGFiZWw6RyxJY29uOkJ9KT0+e2xldCBOPUs9PT1WO3JldHVybiBYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHJvbGU6InJhZGlvIiwiYXJpYS1jaGVja2VkIjpOLHRhYkluZGV4Ok4/MDotMSwiYXJpYS1sYWJlbCI6Ryx0aXRsZTpgJHtHfSBhcHBlYXJhbmNlYCxvbkNsaWNrOigpPT5ZKFYpLGNsYXNzTmFtZTpgZ3JpZCBzaXplLTYgY3Vyc29yLXBvaW50ZXIgcGxhY2UtaXRlbXMtY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyLW5vbmUgcC0wIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZSxjb2xvcl8wLjE1c19lYXNlXSBmb2N1cy12aXNpYmxlOm91dGxpbmUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC0xIGZvY3VzLXZpc2libGU6b3V0bGluZS10aW50ICR7Tj8iYmctY29udHJvbC1zZWxlY3RlZCB0ZXh0LWluay05MCBzaGFkb3ctWzBfMXB4XzJweF9yZ2JhKDAsMCwwLDAuMTgpXSI6ImJnLXRyYW5zcGFyZW50IHRleHQtaWNvbiBob3Zlcjp0ZXh0LWluay05MCJ9YCxjaGlsZHJlbjpYKEIse3NpemU6MTQsc3Ryb2tlV2lkdGg6MiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pfSxWKX0pfSl9dmFyIERRPTEyO2Z1bmN0aW9uIHI2KHtvcGVuOiQsb25DbG9zZTpKLHdpZHRoOlEsc2lkZTpaPSJyaWdodCIsZGV2aWNlczpLLHRvdGFsOlk9MCxoYXNNb3JlOnE9ITEsb25Mb2FkTW9yZTpWLG9uTG9hZEFsbDpHLG9uUmVzZXRQYWdlOkIsc2VsZWN0ZWRVZGlkOk4sb25TZWxlY3Q6eixzdGFydGluZzpVLHNodXR0aW5nRG93bjpILG9uU2h1dGRvd246Rn0pe2xldCBrPSh0eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6d2luZG93Ll9fU0lNX1BSRVZJRVdfXyk/LmdyaWRNZW1vcnlFbmRwb2ludD8/KHR5cGVvZiB3aW5kb3c+InUiP3ZvaWQgMDpiMSgiZ3JpZC9hcGkvbWVtb3J5IikpLEM9bTYoaywkKSxbTyx5XT1BKCIiKSxFPVIxKCgpPT57bGV0IGc9Ty50cmltKCkudG9Mb3dlckNhc2UoKTtpZighZ3x8IUspcmV0dXJuIEs7cmV0dXJuIEsuZmlsdGVyKChoKT0+aC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZyl8fGUyKGgucnVudGltZSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhnKSl9LFtLLE9dKSx3PVQoITEpO18oKCk9PntsZXQgZz0hIU8udHJpbSgpO2lmKGcmJnEpRz8uKCk7ZWxzZSBpZighZyYmdy5jdXJyZW50KUI/LigpO3cuY3VycmVudD1nfSxbTyxxLEcsQl0pO2xldCBTPVQobnVsbCk7cmV0dXJuIFgoTzUse29wZW46JCx3aWR0aDpRLHNpZGU6WixzdHlsZTp7YmFja2dyb3VuZENvbG9yOlc1fSxjaGlsZHJlbjpbWChNNSx7c3R5bGU6e2p1c3RpZnlDb250ZW50OiJmbGV4LXN0YXJ0IixwYWRkaW5nTGVmdDoxNixwYWRkaW5nUmlnaHQ6MTYscGFkZGluZ1RvcDoxNixnYXA6NH0sY2hpbGRyZW46W1goImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpKLGNsYXNzTmFtZToiZmxleCBoLVszMHB4XSB3LVszMHB4XSBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXItbm9uZSBiZy10cmFuc3BhcmVudCB0ZXh0LWljb24gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLWluay84IGhvdmVyOnRleHQtaW5rIiwiYXJpYS1sYWJlbCI6IkNsb3NlIGRldmljZXMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6ITAsdGl0bGU6IkRldmljZXMiLGNoaWxkcmVuOlgoSTAse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSksWChzMix7fSksWChvNix7Y2xhc3NOYW1lOiJtbC1hdXRvIn0pXX0pLFgoImRpdiIse2NsYXNzTmFtZToicHgtNCBwYi0yIHB0LTAuNSBzaHJpbmstMCIsY2hpbGRyZW46WCgibGFiZWwiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTIuNSBoLTggcm91bmRlZC1sZyBiZy1pbmsvNiBmb2N1cy13aXRoaW46YmctaW5rLzEwIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnNdIixjaGlsZHJlbjpbWChlNSx7c2l6ZToxNCxzdHJva2VXaWR0aDoyLGNsYXNzTmFtZToidGV4dC1pbmstNDAgc2hyaW5rLTAifSksWCgiaW5wdXQiLHt2YWx1ZTpPLG9uQ2hhbmdlOihnKT0+eShnLnRhcmdldC52YWx1ZSkscGxhY2Vob2xkZXI6IlNlYXJjaCIsY2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSBvdXRsaW5lLW5vbmUgdGV4dC1bMTNweF0gdGV4dC1pbmstOTAgcGxhY2Vob2xkZXI6dGV4dC1pbmstNDAifSksTyYmWCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6IkNsZWFyIHNlYXJjaCIsb25DbGljazooKT0+eSgiIiksY2xhc3NOYW1lOiJzaHJpbmstMCBncmlkIHBsYWNlLWl0ZW1zLWNlbnRlciBzaXplLTQgcm91bmRlZC1mdWxsIGJnLWluay8xNSB0ZXh0LWluay03MCBob3ZlcjpiZy1pbmsvMjUiLGNoaWxkcmVuOlgoTDAse3NpemU6OSxzdHJva2VXaWR0aDozfSl9KV19KX0pLFgoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgZmxleC0xIG1pbi1oLTAiLGNoaWxkcmVuOltYKCJkaXYiLHtyZWY6UyxvblNjcm9sbDooKT0+e2lmKE8udHJpbSgpfHwhcXx8IVYpcmV0dXJuO2xldCBnPVMuY3VycmVudDtpZighZylyZXR1cm47aWYoZy5zY3JvbGxUb3ArZy5jbGllbnRIZWlnaHQ+PWcuc2Nyb2xsSGVpZ2h0LTI0MClWKCl9LGNsYXNzTmFtZToiaC1mdWxsIG1pbi1oLTAgb3ZlcmZsb3cteS1hdXRvIHB4LTQgcHktMiBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixjaGlsZHJlbjpFPT09bnVsbD9YKFRRLHt9KTpFLmxlbmd0aD09PTA/WCgiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB5LTYgdGV4dC1pbmstNDAgdGV4dC1bMTJweF0gdGV4dC1jZW50ZXIiLGNoaWxkcmVuOk8/Ik5vIG1hdGNoaW5nIHNpbXVsYXRvcnMuIjoiTm8gaU9TIHNpbXVsYXRvcnMgYXZhaWxhYmxlLiJ9KTpYKEsxLHtjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJwdC0xIHBiLTEgdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LWluay00MCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSIsY2hpbGRyZW46IkF2YWlsYWJsZSJ9KSxYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBwYi0xIixjaGlsZHJlbjpFLm1hcCgoZyk9PlgoYzYse2RldmljZTpnLGFjdGl2ZTpnLmRldmljZT09PU4sc3RhcnRpbmc6ISFVW2cuZGV2aWNlXSxzaHV0dGluZ0Rvd246ISFIW2cuZGV2aWNlXSxvblNlbGVjdDooKT0+eihnLmRldmljZSksb25TaHV0ZG93bjooKT0+RihnLmRldmljZSl9LGcuZGV2aWNlKSl9KSwhTyYmcSYmWCgiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB5LTIgdGV4dC1bMTFweF0gdGV4dC1pbmstNDAgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOks/YCR7Sy5sZW5ndGh9IG9mICR7WX1gOm51bGx9KV19KX0pLFgoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1saXN0LXRvcC1mYWRlIixjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIGxlZnQtMCByaWdodC0wIGgtWzE2cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUiLHN0eWxlOntiYWNrZ3JvdW5kOmBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAke1c1fSAwJSwgJHtYOH0gMTAwJSlgfX0pLFgoImRpdiIseyJkYXRhLXRlc3RpZCI6ImRldmljZS1saXN0LWJvdHRvbS1mYWRlIixjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGgtWzE2cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUiLHN0eWxlOntiYWNrZ3JvdW5kOmBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCAke1c1fSAwJSwgJHtYOH0gMTAwJSlgfX0pXX0pLFgoRVEse3JlcG9ydDpDfSldfSl9ZnVuY3Rpb24gVFEoKXtyZXR1cm4gWChLMSx7Y2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToicHgtMiBwdC0xIHBiLTEgdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LWluay00MCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZSIsY2hpbGRyZW46IkF2YWlsYWJsZSJ9KSxYKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2UtbGlzdC1za2VsZXRvbiIsY2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgcGItMSIsImFyaWEtbGFiZWwiOiJMb2FkaW5nIHNpbXVsYXRvcnMiLCJhcmlhLWJ1c3kiOiJ0cnVlIixjaGlsZHJlbjpBcnJheS5mcm9tKHtsZW5ndGg6RFF9LCgkLEopPT5YKElRLHtpbmRleDpKfSxKKSl9KV19KX1mdW5jdGlvbiBJUSh7aW5kZXg6JH0pe2xldCBKPVsidy1bNjIlXSIsInctWzc0JV0iLCJ3LVs1OCVdIiwidy1bNzAlXSJdWyQlNF0sUT1bInctWzQyJV0iLCJ3LVszNiVdIiwidy1bNDglXSIsInctWzMyJV0iXVskJTRdLFo9WyJ3LTciLCJ3LTYiLCJ3LTgiXVskJTNdO3JldHVybiBYKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2Utcm93LXNrZWxldG9uIixjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yLjUgcHgtMiBweS0xLjUgcm91bmRlZC1sZyBzZWxlY3Qtbm9uZSIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgc2hyaW5rLTAgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS05IHJvdW5kZWQtWzlweF0gb3ZlcmZsb3ctaGlkZGVuIGJnLWluay82IixjaGlsZHJlbjpYKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTQgcm91bmRlZC1bNHB4XSBiZy1pbmsvWzAuMTJdIn0pfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBmbGV4IGZsZXgtY29sIGdhcC0xLjUiLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOmBoLTMgcm91bmRlZC1mdWxsIGJnLWluay9bMC4xMl0gJHtKfWB9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOmBoLTIuNSByb3VuZGVkLWZ1bGwgYmctaW5rL1swLjA4XSAke1F9YH0pXX0pLFgoInNwYW4iLHtjbGFzc05hbWU6YHNocmluay0wIGgtMi41IHJvdW5kZWQtZnVsbCBiZy1pbmsvWzAuMDhdICR7Wn1gfSldfSl9ZnVuY3Rpb24gRVEoe3JlcG9ydDokfSl7aWYoISR8fCQudG90YWxCeXRlczw9MClyZXR1cm4gbnVsbDtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiBweC0zIHB5LTIgZmxleCBqdXN0aWZ5LWNlbnRlciIsY2hpbGRyZW46WChkNix7cmVwb3J0OiR9KX0pfWZ1bmN0aW9uIFozKHtwYW5lbFdpZHRoOiQsdmlzaWJsZTpKLG9uUG9pbnRlckRvd246USxhcmlhTGFiZWw6WixzaWRlOks9InJpZ2h0In0pe2xldFtZLHFdPUEoITEpLFtWLEddPUEoITEpLEI9WXx8VixOPTEyKyQtOTtyZXR1cm4gWCgiZGl2Iix7cm9sZToic2VwYXJhdG9yIiwiYXJpYS1vcmllbnRhdGlvbiI6InZlcnRpY2FsIiwiYXJpYS1sYWJlbCI6WiwiYXJpYS1oaWRkZW4iOiFKLG9uUG9pbnRlckRvd246KHopPT57RyghMCksUSh6KX0sb25Qb2ludGVyVXA6KCk9PkcoITEpLG9uUG9pbnRlckNhbmNlbDooKT0+RyghMSksb25Qb2ludGVyRW50ZXI6KCk9PnEoITApLG9uUG9pbnRlckxlYXZlOigpPT5xKCExKSxjbGFzc05hbWU6YGZpeGVkIHRvcC0zIGJvdHRvbS0zIHctNCB6LTM2IGN1cnNvci1jb2wtcmVzaXplIHRvdWNoLW5vbmUgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTIwMCAke0o/Im9wYWNpdHktMTAwIHBvaW50ZXItZXZlbnRzLWF1dG8iOiJvcGFjaXR5LTAgcG9pbnRlci1ldmVudHMtbm9uZSJ9YCxzdHlsZTpLPT09ImxlZnQiP3tsZWZ0Ok59OntyaWdodDpOfSxjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSB0b3AtMCBib3R0b20tMCBsZWZ0LTEvMiB3LXB4IHBvaW50ZXItZXZlbnRzLW5vbmUgdHJhbnNpdGlvbi1vcGFjaXR5IGR1cmF0aW9uLTE1MCAke0I/Im9wYWNpdHktMTAwIjoib3BhY2l0eS0wIn1gLHN0eWxlOnt0cmFuc2Zvcm06InRyYW5zbGF0ZVgoLTAuNXB4KSIsYmFja2dyb3VuZDpgbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgJHtUMSgwKX0gMCUsICR7VDEoMC4yOCl9IDMwJSwgJHtUMSgwLjI4KX0gNzAlLCAke1QxKDApfSAxMDAlKWB9fSksWCgiZGl2Iix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSB0b3AtMS8yIGxlZnQtMS8yIHctMSBoLTcgcm91bmRlZC14cyAtdHJhbnNsYXRlLXgtMS8yIC10cmFuc2xhdGUteS0xLzIgei0xIHBvaW50ZXItZXZlbnRzLW5vbmUgW3RyYW5zaXRpb246b3BhY2l0eV8wLjE1c19lYXNlLGJhY2tncm91bmRfMC4xNXNfZWFzZV0gJHtCPyJvcGFjaXR5LTEwMCI6Im9wYWNpdHktMCJ9ICR7Vj8iYmctZ3JhYmJlci1hY3RpdmUiOiJiZy1ncmFiYmVyIn1gfSldfSl9ZnVuY3Rpb24gbjYoKXtsZXRbJCxKXT1BKCgpPT50eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lm1hdGNoTWVkaWE/LigiKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIikubWF0Y2hlcz09PSEwKTtyZXR1cm4gXygoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwhd2luZG93Lm1hdGNoTWVkaWEpcmV0dXJuO2xldCBRPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb250cmFzdDogbW9yZSkiKSxaPSgpPT5KKFEubWF0Y2hlcyk7cmV0dXJuIFooKSxRLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWiksKCk9PlEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixaKX0sW10pLCR9dmFyIGE2PTI4MDtmdW5jdGlvbiBLOCh7aXNSZXNpemluZzokLGlzSW5lcnRpYTpKLHJlZHVjZWRNb3Rpb246UX0pe2lmKFEpcmV0dXJuIm5vbmUiO3JldHVybiAkfHxKPyJ3aWR0aCA3MG1zIGxpbmVhciI6IndpZHRoIDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSwgYXNwZWN0LXJhdGlvIDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSJ9dmFyIHM2PSJwYWRkaW5nLWxlZnQgMC4yNHMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpLCBwYWRkaW5nLXJpZ2h0IDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSIsdDY9ImN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIixLMz0iY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSIsZTY9ImxpbmVhcigwLCAwLjMyIDklLCAwLjYyIDE4JSwgMC44NSAyNyUsIDEuMDEgMzYlLCAxLjA3IDQ1JSwgMS4wNSA1NiUsIDEuMDIgNzAlLCAxKSIsJDc9IjAuMTZzIixKNz0iMC4ycyIsUTc9NSxaNz17aWRsZToxLGhvdmVyOjEuMDksZHJhZzoxLjEyfSxYNz17aWRsZToidmFyKC0tc2VydmUtc2ltLXJlc2l6ZS1pZGxlLCAjNjg2ZTc4KSIsaG92ZXI6InZhcigtLXNlcnZlLXNpbS1yZXNpemUtaG92ZXIsICNiN2JiYzIpIixkcmFnOiJ2YXIoLS1zZXJ2ZS1zaW0tcmVzaXplLWRyYWcsICNmNGY2ZmEpIn0sSzc9InZhcigtLXNlcnZlLXNpbS1yZXNpemUtb3V0bGluZSwgIzM0MzYzYikiLFk3PXtpZGxlOjIuNjUsaG92ZXI6NC4xNSxkcmFnOjQuNjV9LHE3PXtpZGxlOjAuMzgsaG92ZXI6MC44NixkcmFnOjF9LFgzPW51bGw7ZnVuY3Rpb24gVjcoKXtpZihYMyE9bnVsbClyZXR1cm4gWDM7aWYodHlwZW9mIENTUz4idSJ8fHR5cGVvZiBDU1Muc3VwcG9ydHMhPT0iZnVuY3Rpb24iKXJldHVybiExO3JldHVybiBYMz1DU1Muc3VwcG9ydHMoImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24iLCJsaW5lYXIoMCwgMSkiKSxYM312YXIgd1E9NDAsRzc9MTQsQjc9MjQwLHo3PTMwLE43PTAuMTUsYlE9ODAsVTc9MTUwLEw3PTI1MCxZOD0ic2VydmUtc2ltOnNpbXVsYXRvci1mcmFtZS1zY2FsZSI7ZnVuY3Rpb24gXzUoJCxKLFEsWil7bGV0IEs9JCozLFk9Sj4wP01hdGgubWF4KDE4MCxKLTQ4KTpLLHE9UT4wJiZOdW1iZXIuaXNGaW5pdGUoWikmJlo+MD9NYXRoLm1heCgxODAsKFEtMTM2KSpaKTpLO3JldHVybiBNYXRoLm1heCgxODAsTWF0aC5taW4oSyxZLHEpKX1mdW5jdGlvbiBRNSgkLEosUSxaLEspe2xldCBZPV81KEosUSxaLEspLHE9TWF0aC5taW4oMjgwLFkpO3JldHVybiBNYXRoLm1pbihZLE1hdGgubWF4KHEsJCkpfWZ1bmN0aW9uIEg3KCQsSixRLFosSyl7bGV0IFk9TnVtYmVyLmlzRmluaXRlKEspPyQqSzokO3JldHVybiBRNShZLCQsSixRLFopfWZ1bmN0aW9uIFkzKCQpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCkpcmV0dXJuICQ7bGV0IEo9dHlwZW9mIHdpbmRvdzwidSI/TWF0aC5tYXgoMSx3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MSk6MTtyZXR1cm4gTWF0aC5yb3VuZCgkKkopL0p9ZnVuY3Rpb24gcTgoJCxKKXtpZigkPD0wfHxKPD0wKXJldHVybiAwO2xldCBRPTAuNTUsWj0kKkoqUS8oSitRKiQpO3JldHVybiBNYXRoLm1pbih3USxaKX1mdW5jdGlvbiBrNygkLEosUSl7bGV0IFo9JCxLPVE7Zm9yKGxldCBZIG9mIEope2xldCBxPU1hdGguYWJzKCQtWSk7aWYocTxLKVo9WSxLPXF9cmV0dXJuIFp9ZnVuY3Rpb24gQzcoJCl7bGV0e2Zyb206Six0bzpRLHZlbG9jaXR5Olosc3RpZmZuZXNzOkssZGFtcGluZzpZLG9uVXBkYXRlOnEsb25Db21wbGV0ZTpWfT0kLEc9MC40LEI9MC4wMzMzMzMzMzMzMzMzMzMzMyxOPUosej1aLFU9cGVyZm9ybWFuY2Uubm93KCksSD0wLEY9ITEsTD0oayk9PntpZihGKXJldHVybjtsZXQgQz1NYXRoLm1pbigoay1VKS8xMDAwLDAuMDMzMzMzMzMzMzMzMzMzMzMpO1U9aztsZXQgTz0tSyooTi1RKS1ZKno7aWYoeis9TypDLE4rPXoqQyxNYXRoLmFicyh6KTwwLjQmJk1hdGguYWJzKE4tUSk8MC40KXtxKFEpLFY/LigpO3JldHVybn1xKE4pLEg9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKEwpfTtyZXR1cm4gSD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCksKCk9PntpZihGPSEwLEgpY2FuY2VsQW5pbWF0aW9uRnJhbWUoSCl9fWZ1bmN0aW9uIEY3KCQpe2lmKCQubGVuZ3RoPDIpcmV0dXJuIDA7bGV0IEo9JFskLmxlbmd0aC0xXSxRPSRbMF07Zm9yKGxldCBLPSQubGVuZ3RoLTE7Sz49MDtLLS0paWYoSi50LSRbS10udD49YlEpe1E9JFtLXTticmVha31sZXQgWj0oSi50LVEudCkvMTAwMDtyZXR1cm4gWj4wPyhKLngtUS54KS9aOjB9dmFyIEE3PSJkcm9wLXNoYWRvdygwIDAuNXB4IDFweCByZ2JhKDAsMCwwLDAuMSkpIGRyb3Atc2hhZG93KDAgMnB4IDVweCByZ2JhKDAsMCwwLDAuMTMpKSI7ZnVuY3Rpb24geVEoe2FyYzokLHBoYXNlOkoscmVkdWNlZE1vdGlvbjpRLGhpZ2hDb250cmFzdDpaLGZvY3VzVmlzaWJsZTpLfSl7bGV0IFk9SiE9PSJpZGxlIixxPVo/MS4xMjoxLFY9UT8xOlo3W0pdLEc9WTdbSl0qcSxCPVo/MTpxN1tKXSxOPVk/JDc6Sjcsej1ZP3Q2OkszLFU9WSYmVjcoKT9lNjp6LEg9UT8ibm9uZSI6YHRyYW5zZm9ybSAke059ICR7VX1gLEY9UT8ibm9uZSI6YHN0cm9rZSAke059ICR7en0sIHN0cm9rZS13aWR0aCAke059ICR7en1gLEw9JC52aWV3Qm94U2l6ZSxrPSQuZCxDPXt0cmFuc2Zvcm06YHRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZSgke1Z9KWAsdHJhbnNmb3JtT3JpZ2luOiIxMDAlIDEwMCUiLHRyYW5zaXRpb246SCx3aWxsQ2hhbmdlOlE/dm9pZCAwOiJ0cmFuc2Zvcm0iLGJhY2tmYWNlVmlzaWJpbGl0eToiaGlkZGVuIixXZWJraXRCYWNrZmFjZVZpc2liaWxpdHk6ImhpZGRlbiJ9O3JldHVybiBYKCJzdmciLHt3aWR0aDpMLGhlaWdodDpMLHZpZXdCb3g6YDAgMCAke0x9ICR7TH1gLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsc2hhcGVSZW5kZXJpbmc6Imdlb21ldHJpY1ByZWNpc2lvbiIsc3R5bGU6e2Rpc3BsYXk6ImJsb2NrIixvdmVyZmxvdzoidmlzaWJsZSIsY3Vyc29yOiJpbmhlcml0Iix0b3VjaEFjdGlvbjoibm9uZSIscG9pbnRlckV2ZW50czoibm9uZSJ9LGNoaWxkcmVuOltYKCJnIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsc3R5bGU6e3BvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbWCgicGF0aCIse2Q6ayxmaWxsOiJub25lIixzdHJva2U6InJnYmEoMTAsIDEzMiwgMjU1LCAwLjk1KSIsc3Ryb2tlV2lkdGg6KFE3KjIrNikqcSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Oks/MC45NTowLHRyYW5zaXRpb246UT8ib3BhY2l0eSA4MG1zIGxpbmVhciI6YG9wYWNpdHkgMjAwbXMgJHtLM31gLGZpbHRlcjoiZHJvcC1zaGFkb3coMCAwIDJweCByZ2JhKDEwLDEzMiwyNTUsMC41NSkpIGRyb3Atc2hhZG93KDAgMCA0cHggcmdiYSgxMCwxMzIsMjU1LDAuMzIpKSJ9fSksWCgicGF0aCIse2Q6ayxmaWxsOiJub25lIixzdHJva2U6InJnYmEoMjU1LDI1NSwyNTUsMC45NSkiLHN0cm9rZVdpZHRoOjEuNSpxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6Sz8wLjc6MCx0cmFuc2l0aW9uOlE/Im9wYWNpdHkgODBtcyBsaW5lYXIiOmBvcGFjaXR5IDIwMG1zICR7SzN9YH19KV19KSxYKCJnIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsc3R5bGU6QyxjaGlsZHJlbjpYKCJnIix7c3R5bGU6e3BvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbWCgicGF0aCIse2Q6ayxzdHJva2VXaWR0aDpHKzIuMipxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e3N0cm9rZTpLNyxvcGFjaXR5Ok1hdGgubWluKDEsQiswLjA4KSx0cmFuc2l0aW9uOmAke0Z9LCBvcGFjaXR5ICR7Tn0gJHt6fWAsZmlsdGVyOkE3fX0pLFgoInBhdGgiLHtkOmssc3Ryb2tlV2lkdGg6RyxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntzdHJva2U6WDdbSl0sb3BhY2l0eTpCLHRyYW5zaXRpb246YCR7Rn0sIG9wYWNpdHkgJHtOfSAke3p9YCxmaWx0ZXI6QTd9fSldfSl9KV19KX1mdW5jdGlvbiBPNyh7c2ltdWxhdG9yUmVzaXplOiQsZGV2aWNlVHlwZTpKLHN0cmVhbUNvbmZpZzpRLGNvbnRhaW5lcldpZHRoOlosY29udGFpbmVySGVpZ2h0Okt9KXtsZXQgWT1GNSgpLHE9bjYoKSxbVixHXT1BKCExKSxCPVIxKCgpPT5wMyh7dHlwZTpKLGNvbmZpZzpRPz9udWxsLGNvbnRhaW5lcldpZHRoOlosY29udGFpbmVySGVpZ2h0Okt9KSxbSixRLFosS10pLE49JC5pc1Jlc2l6aW5nfHwkLmlzSW5lcnRpYT8iZHJhZyI6JC5oYW5kbGVIb3ZlcmVkPyJob3ZlciI6ImlkbGUiO3JldHVybiBYKCJkaXYiLHtyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLWxhYmVsIjoiUmVzaXplIHNpbXVsYXRvciB3aWR0aC4gRHJhZyB0aGUgY29ybmVyIG9yIHVzZSBMZWZ0IGFuZCBSaWdodCBBcnJvdyBrZXlzOyBob2xkIFNoaWZ0IGZvciBsYXJnZXIgc3RlcHMuIiwiYXJpYS1vcmllbnRhdGlvbiI6InZlcnRpY2FsIiwiYXJpYS12YWx1ZW1pbiI6TWF0aC5yb3VuZCgkLm1pbldpZHRoKSwiYXJpYS12YWx1ZW1heCI6TWF0aC5yb3VuZCgkLm1heFdpZHRoKSwiYXJpYS12YWx1ZW5vdyI6TWF0aC5yb3VuZCgkLmNvbW1pdHRlZFdpZHRoKSx0YWJJbmRleDowLHJlZjokLmhhbmRsZVJlZixvbktleURvd246JC5vbktleURvd24sb25Qb2ludGVyRG93bjokLm9uUG9pbnRlckRvd24sb25Qb2ludGVyTW92ZTokLm9uUG9pbnRlck1vdmUsb25Qb2ludGVyVXA6JC5vblBvaW50ZXJFbmQsb25Qb2ludGVyQ2FuY2VsOiQub25Qb2ludGVyRW5kLG9uTG9zdFBvaW50ZXJDYXB0dXJlOiQub25Qb2ludGVyRW5kLG9uUG9pbnRlckVudGVyOigpPT4kLnNldEhhbmRsZUhvdmVyZWQoITApLG9uUG9pbnRlckxlYXZlOigpPT4kLnNldEhhbmRsZUhvdmVyZWQoITEpLG9uRm9jdXM6KHopPT57Ryh6LmN1cnJlbnRUYXJnZXQubWF0Y2hlcz8uKCI6Zm9jdXMtdmlzaWJsZSIpPz8hMSl9LG9uQmx1cjooKT0+RyghMSksc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIscmlnaHQ6LTE0LGJvdHRvbTotMTQsd2lkdGg6NjAsaGVpZ2h0OjYwLGJvcmRlcjoibm9uZSIscGFkZGluZzowLG1hcmdpbjowLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImZsZXgtZW5kIixqdXN0aWZ5Q29udGVudDoiZmxleC1lbmQiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50IixjdXJzb3I6Im53c2UtcmVzaXplIix0b3VjaEFjdGlvbjoibm9uZSIscG9pbnRlckV2ZW50czoiYXV0byIsb3V0bGluZToibm9uZSIsekluZGV4OjI1LFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiJ0cmFuc3BhcmVudCJ9LGNoaWxkcmVuOlgoeVEse2FyYzpCLHBoYXNlOk4scmVkdWNlZE1vdGlvbjpZLGhpZ2hDb250cmFzdDpxLGZvY3VzVmlzaWJsZTpWfSl9KX1mdW5jdGlvbiBTUSgkKXtpZighJHx8dHlwZW9mIGRvY3VtZW50PiJ1IilyZXR1cm47bGV0IEo9ZG9jdW1lbnQuaGVhZHx8ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSxRPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7US50eXBlPSJ0ZXh0L2NzcyIsSi5hcHBlbmRDaGlsZChRKSxRLnN0eWxlU2hlZXQ/US5zdHlsZVNoZWV0LmNzc1RleHQ9JDpRLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCQpKX12YXIgeFE9KCQpPT57c3dpdGNoKCQpe2Nhc2Uic3VjY2VzcyI6cmV0dXJuIHZRO2Nhc2UiaW5mbyI6cmV0dXJuIGhRO2Nhc2Uid2FybmluZyI6cmV0dXJuIGdRO2Nhc2UiZXJyb3IiOnJldHVybiBmUTtkZWZhdWx0OnJldHVybiBudWxsfX0sUlE9QXJyYXkoMTIpLmZpbGwoMCksalE9KHt2aXNpYmxlOiQsY2xhc3NOYW1lOkp9KT0+e3JldHVybiB2LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTpbInNvbm5lci1sb2FkaW5nLXdyYXBwZXIiLEpdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIiksImRhdGEtdmlzaWJsZSI6JH0sdi5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InNvbm5lci1zcGlubmVyIn0sUlEubWFwKChRLFopPT52LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToic29ubmVyLWxvYWRpbmctYmFyIixrZXk6YHNwaW5uZXItYmFyLSR7Wn1gfSkpKSl9LHZRPXYuY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjAgMjAiLGZpbGw6ImN1cnJlbnRDb2xvciIsaGVpZ2h0OiIyMCIsd2lkdGg6IjIwIn0sdi5jcmVhdGVFbGVtZW50KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGQ6Ik0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2em0zLjg1Ny05LjgwOWEuNzUuNzUgMCAwMC0xLjIxNC0uODgybC0zLjQ4MyA0Ljc5LTEuODgtMS44OGEuNzUuNzUgMCAxMC0xLjA2IDEuMDYxbDIuNSAyLjVhLjc1Ljc1IDAgMDAxLjEzNy0uMDg5bDQtNS41eiIsY2xpcFJ1bGU6ImV2ZW5vZGQifSkpLGdRPXYuY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsaGVpZ2h0OiIyMCIsd2lkdGg6IjIwIn0sdi5jcmVhdGVFbGVtZW50KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGQ6Ik05LjQwMSAzLjAwM2MxLjE1NS0yIDQuMDQzLTIgNS4xOTcgMGw3LjM1NSAxMi43NDhjMS4xNTQgMi0uMjkgNC41LTIuNTk5IDQuNUg0LjY0NWMtMi4zMDkgMC0zLjc1Mi0yLjUtMi41OTgtNC41TDkuNCAzLjAwM3pNMTIgOC4yNWEuNzUuNzUgMCAwMS43NS43NXYzLjc1YS43NS43NSAwIDAxLTEuNSAwVjlhLjc1Ljc1IDAgMDEuNzUtLjc1em0wIDguMjVhLjc1Ljc1IDAgMTAwLTEuNS43NS43NSAwIDAwMCAxLjV6IixjbGlwUnVsZToiZXZlbm9kZCJ9KSksaFE9di5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyMCAyMCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSx2LmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTE4IDEwYTggOCAwIDExLTE2IDAgOCA4IDAgMDExNiAwem0tNy00YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHpNOSA5YS43NS43NSAwIDAwMCAxLjVoLjI1M2EuMjUuMjUgMCAwMS4yNDQuMzA0bC0uNDU5IDIuMDY2QTEuNzUgMS43NSAwIDAwMTAuNzQ3IDE1SDExYS43NS43NSAwIDAwMC0xLjVoLS4yNTNhLjI1LjI1IDAgMDEtLjI0NC0uMzA0bC40NTktMi4wNjZBMS43NSAxLjc1IDAgMDA5LjI1MyA5SDl6IixjbGlwUnVsZToiZXZlbm9kZCJ9KSksZlE9di5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyMCAyMCIsZmlsbDoiY3VycmVudENvbG9yIixoZWlnaHQ6IjIwIix3aWR0aDoiMjAifSx2LmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsZDoiTTE4IDEwYTggOCAwIDExLTE2IDAgOCA4IDAgMDExNiAwem0tOC01YS43NS43NSAwIDAxLjc1Ljc1djQuNWEuNzUuNzUgMCAwMS0xLjUgMHYtNC41QS43NS43NSAwIDAxMTAgNXptMCAxMGExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnoiLGNsaXBSdWxlOiJldmVub2RkIn0pKSxtUT12LmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6IjEyIixoZWlnaHQ6IjEyIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMS41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn0sdi5jcmVhdGVFbGVtZW50KCJsaW5lIix7eDE6IjE4Iix5MToiNiIseDI6IjYiLHkyOiIxOCJ9KSx2LmNyZWF0ZUVsZW1lbnQoImxpbmUiLHt4MToiNiIseTE6IjYiLHgyOiIxOCIseTI6IjE4In0pKSxwUT0oKT0+e2xldFskLEpdPXYudXNlU3RhdGUoZG9jdW1lbnQuaGlkZGVuKTtyZXR1cm4gdi51c2VFZmZlY3QoKCk9PntsZXQgUT0oKT0+e0ooZG9jdW1lbnQuaGlkZGVuKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLFEpLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsUSl9LFtdKSwkfSxWOD0xO2NsYXNzIFA3e2NvbnN0cnVjdG9yKCl7dGhpcy5zdWJzY3JpYmU9KCQpPT57cmV0dXJuIHRoaXMuc3Vic2NyaWJlcnMucHVzaCgkKSwoKT0+e2xldCBKPXRoaXMuc3Vic2NyaWJlcnMuaW5kZXhPZigkKTt0aGlzLnN1YnNjcmliZXJzLnNwbGljZShKLDEpfX0sdGhpcy5wdWJsaXNoPSgkKT0+e3RoaXMuc3Vic2NyaWJlcnMuZm9yRWFjaCgoSik9PkooJCkpfSx0aGlzLmFkZFRvYXN0PSgkKT0+e3RoaXMucHVibGlzaCgkKSx0aGlzLnRvYXN0cz1bLi4udGhpcy50b2FzdHMsJF19LHRoaXMuY3JlYXRlPSgkKT0+e3ZhciBKO2xldHttZXNzYWdlOlEsLi4uWn09JCxLPXR5cGVvZigkPT1udWxsP3ZvaWQgMDokLmlkKT09PSJudW1iZXIifHwoKEo9JC5pZCk9PW51bGw/dm9pZCAwOkoubGVuZ3RoKT4wPyQuaWQ6VjgrKyxZPXRoaXMudG9hc3RzLmZpbmQoKFYpPT57cmV0dXJuIFYuaWQ9PT1LfSkscT0kLmRpc21pc3NpYmxlPT09dm9pZCAwPyEwOiQuZGlzbWlzc2libGU7aWYodGhpcy5kaXNtaXNzZWRUb2FzdHMuaGFzKEspKXRoaXMuZGlzbWlzc2VkVG9hc3RzLmRlbGV0ZShLKTtpZihZKXRoaXMudG9hc3RzPXRoaXMudG9hc3RzLm1hcCgoVik9PntpZihWLmlkPT09SylyZXR1cm4gdGhpcy5wdWJsaXNoKHsuLi5WLC4uLiQsaWQ6Syx0aXRsZTpRfSksey4uLlYsLi4uJCxpZDpLLGRpc21pc3NpYmxlOnEsdGl0bGU6UX07cmV0dXJuIFZ9KTtlbHNlIHRoaXMuYWRkVG9hc3Qoe3RpdGxlOlEsLi4uWixkaXNtaXNzaWJsZTpxLGlkOkt9KTtyZXR1cm4gS30sdGhpcy5kaXNtaXNzPSgkKT0+e2lmKCQpdGhpcy5kaXNtaXNzZWRUb2FzdHMuYWRkKCQpLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChKKT0+Sih7aWQ6JCxkaXNtaXNzOiEwfSkpKTtlbHNlIHRoaXMudG9hc3RzLmZvckVhY2goKEopPT57dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChRKT0+USh7aWQ6Si5pZCxkaXNtaXNzOiEwfSkpfSk7cmV0dXJuICR9LHRoaXMubWVzc2FnZT0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSixtZXNzYWdlOiR9KX0sdGhpcy5lcnJvcj0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSixtZXNzYWdlOiQsdHlwZToiZXJyb3IifSl9LHRoaXMuc3VjY2Vzcz0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSix0eXBlOiJzdWNjZXNzIixtZXNzYWdlOiR9KX0sdGhpcy5pbmZvPSgkLEopPT57cmV0dXJuIHRoaXMuY3JlYXRlKHsuLi5KLHR5cGU6ImluZm8iLG1lc3NhZ2U6JH0pfSx0aGlzLndhcm5pbmc9KCQsSik9PntyZXR1cm4gdGhpcy5jcmVhdGUoey4uLkosdHlwZToid2FybmluZyIsbWVzc2FnZTokfSl9LHRoaXMubG9hZGluZz0oJCxKKT0+e3JldHVybiB0aGlzLmNyZWF0ZSh7Li4uSix0eXBlOiJsb2FkaW5nIixtZXNzYWdlOiR9KX0sdGhpcy5wcm9taXNlPSgkLEopPT57aWYoIUopcmV0dXJuO2xldCBRPXZvaWQgMDtpZihKLmxvYWRpbmchPT12b2lkIDApUT10aGlzLmNyZWF0ZSh7Li4uSixwcm9taXNlOiQsdHlwZToibG9hZGluZyIsbWVzc2FnZTpKLmxvYWRpbmcsZGVzY3JpcHRpb246dHlwZW9mIEouZGVzY3JpcHRpb24hPT0iZnVuY3Rpb24iP0ouZGVzY3JpcHRpb246dm9pZCAwfSk7bGV0IFo9UHJvbWlzZS5yZXNvbHZlKCQgaW5zdGFuY2VvZiBGdW5jdGlvbj8kKCk6JCksSz1RIT09dm9pZCAwLFkscT1aLnRoZW4oYXN5bmMoRyk9PntpZihZPVsicmVzb2x2ZSIsR10sdi5pc1ZhbGlkRWxlbWVudChHKSlLPSExLHRoaXMuY3JlYXRlKHtpZDpRLHR5cGU6ImRlZmF1bHQiLG1lc3NhZ2U6R30pO2Vsc2UgaWYobFEoRykmJiFHLm9rKXtLPSExO2xldCBOPXR5cGVvZiBKLmVycm9yPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmVycm9yKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7Ry5zdGF0dXN9YCk6Si5lcnJvcix6PXR5cGVvZiBKLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmRlc2NyaXB0aW9uKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7Ry5zdGF0dXN9YCk6Si5kZXNjcmlwdGlvbixIPXR5cGVvZiBOPT09Im9iamVjdCImJiF2LmlzVmFsaWRFbGVtZW50KE4pP046e21lc3NhZ2U6Tn07dGhpcy5jcmVhdGUoe2lkOlEsdHlwZToiZXJyb3IiLGRlc2NyaXB0aW9uOnosLi4uSH0pfWVsc2UgaWYoRyBpbnN0YW5jZW9mIEVycm9yKXtLPSExO2xldCBOPXR5cGVvZiBKLmVycm9yPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmVycm9yKEcpOkouZXJyb3Isej10eXBlb2YgSi5kZXNjcmlwdGlvbj09PSJmdW5jdGlvbiI/YXdhaXQgSi5kZXNjcmlwdGlvbihHKTpKLmRlc2NyaXB0aW9uLEg9dHlwZW9mIE49PT0ib2JqZWN0IiYmIXYuaXNWYWxpZEVsZW1lbnQoTik/Tjp7bWVzc2FnZTpOfTt0aGlzLmNyZWF0ZSh7aWQ6USx0eXBlOiJlcnJvciIsZGVzY3JpcHRpb246eiwuLi5IfSl9ZWxzZSBpZihKLnN1Y2Nlc3MhPT12b2lkIDApe0s9ITE7bGV0IE49dHlwZW9mIEouc3VjY2Vzcz09PSJmdW5jdGlvbiI/YXdhaXQgSi5zdWNjZXNzKEcpOkouc3VjY2Vzcyx6PXR5cGVvZiBKLmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj9hd2FpdCBKLmRlc2NyaXB0aW9uKEcpOkouZGVzY3JpcHRpb24sSD10eXBlb2YgTj09PSJvYmplY3QiJiYhdi5pc1ZhbGlkRWxlbWVudChOKT9OOnttZXNzYWdlOk59O3RoaXMuY3JlYXRlKHtpZDpRLHR5cGU6InN1Y2Nlc3MiLGRlc2NyaXB0aW9uOnosLi4uSH0pfX0pLmNhdGNoKGFzeW5jKEcpPT57aWYoWT1bInJlamVjdCIsR10sSi5lcnJvciE9PXZvaWQgMCl7Sz0hMTtsZXQgQj10eXBlb2YgSi5lcnJvcj09PSJmdW5jdGlvbiI/YXdhaXQgSi5lcnJvcihHKTpKLmVycm9yLE49dHlwZW9mIEouZGVzY3JpcHRpb249PT0iZnVuY3Rpb24iP2F3YWl0IEouZGVzY3JpcHRpb24oRyk6Si5kZXNjcmlwdGlvbixVPXR5cGVvZiBCPT09Im9iamVjdCImJiF2LmlzVmFsaWRFbGVtZW50KEIpP0I6e21lc3NhZ2U6Qn07dGhpcy5jcmVhdGUoe2lkOlEsdHlwZToiZXJyb3IiLGRlc2NyaXB0aW9uOk4sLi4uVX0pfX0pLmZpbmFsbHkoKCk9PntpZihLKXRoaXMuZGlzbWlzcyhRKSxRPXZvaWQgMDtKLmZpbmFsbHk9PW51bGx8fEouZmluYWxseS5jYWxsKEopfSksVj0oKT0+bmV3IFByb21pc2UoKEcsQik9PnEudGhlbigoKT0+WVswXT09PSJyZWplY3QiP0IoWVsxXSk6RyhZWzFdKSkuY2F0Y2goQikpO2lmKHR5cGVvZiBRIT09InN0cmluZyImJnR5cGVvZiBRIT09Im51bWJlciIpcmV0dXJue3Vud3JhcDpWfTtlbHNlIHJldHVybiBPYmplY3QuYXNzaWduKFEse3Vud3JhcDpWfSl9LHRoaXMuY3VzdG9tPSgkLEopPT57bGV0IFE9KEo9PW51bGw/dm9pZCAwOkouaWQpfHxWOCsrO3JldHVybiB0aGlzLmNyZWF0ZSh7anN4OiQoUSksaWQ6USwuLi5KfSksUX0sdGhpcy5nZXRBY3RpdmVUb2FzdHM9KCk9PntyZXR1cm4gdGhpcy50b2FzdHMuZmlsdGVyKCgkKT0+IXRoaXMuZGlzbWlzc2VkVG9hc3RzLmhhcygkLmlkKSl9LHRoaXMuc3Vic2NyaWJlcnM9W10sdGhpcy50b2FzdHM9W10sdGhpcy5kaXNtaXNzZWRUb2FzdHM9bmV3IFNldH19dmFyIFkwPW5ldyBQNyx1UT0oJCxKKT0+e2xldCBRPShKPT1udWxsP3ZvaWQgMDpKLmlkKXx8VjgrKztyZXR1cm4gWTAuYWRkVG9hc3Qoe3RpdGxlOiQsLi4uSixpZDpRfSksUX0sbFE9KCQpPT57cmV0dXJuICQmJnR5cGVvZiAkPT09Im9iamVjdCImJiJvayJpbiAkJiZ0eXBlb2YgJC5vaz09PSJib29sZWFuIiYmInN0YXR1cyJpbiAkJiZ0eXBlb2YgJC5zdGF0dXM9PT0ibnVtYmVyIn0sZFE9dVEsY1E9KCk9PlkwLnRvYXN0cyxpUT0oKT0+WTAuZ2V0QWN0aXZlVG9hc3RzKCksSDA9T2JqZWN0LmFzc2lnbihkUSx7c3VjY2VzczpZMC5zdWNjZXNzLGluZm86WTAuaW5mbyx3YXJuaW5nOlkwLndhcm5pbmcsZXJyb3I6WTAuZXJyb3IsY3VzdG9tOlkwLmN1c3RvbSxtZXNzYWdlOlkwLm1lc3NhZ2UscHJvbWlzZTpZMC5wcm9taXNlLGRpc21pc3M6WTAuZGlzbWlzcyxsb2FkaW5nOlkwLmxvYWRpbmd9LHtnZXRIaXN0b3J5OmNRLGdldFRvYXN0czppUX0pO1NRKCJbZGF0YS1zb25uZXItdG9hc3Rlcl1bZGlyPWx0cl0saHRtbFtkaXI9bHRyXXstLXRvYXN0LWljb24tbWFyZ2luLXN0YXJ0Oi0zcHg7LS10b2FzdC1pY29uLW1hcmdpbi1lbmQ6NHB4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1zdGFydDotMXB4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1lbmQ6MHB4Oy0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydDphdXRvOy0tdG9hc3QtYnV0dG9uLW1hcmdpbi1lbmQ6MDstLXRvYXN0LWNsb3NlLWJ1dHRvbi1zdGFydDowOy0tdG9hc3QtY2xvc2UtYnV0dG9uLWVuZDp1bnNldDstLXRvYXN0LWNsb3NlLWJ1dHRvbi10cmFuc2Zvcm06dHJhbnNsYXRlKC0zNSUsIC0zNSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkaXI9cnRsXSxodG1sW2Rpcj1ydGxdey0tdG9hc3QtaWNvbi1tYXJnaW4tc3RhcnQ6NHB4Oy0tdG9hc3QtaWNvbi1tYXJnaW4tZW5kOi0zcHg7LS10b2FzdC1zdmctbWFyZ2luLXN0YXJ0OjBweDstLXRvYXN0LXN2Zy1tYXJnaW4tZW5kOi0xcHg7LS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0OjA7LS10b2FzdC1idXR0b24tbWFyZ2luLWVuZDphdXRvOy0tdG9hc3QtY2xvc2UtYnV0dG9uLXN0YXJ0OnVuc2V0Oy0tdG9hc3QtY2xvc2UtYnV0dG9uLWVuZDowOy0tdG9hc3QtY2xvc2UtYnV0dG9uLXRyYW5zZm9ybTp0cmFuc2xhdGUoMzUlLCAtMzUlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl17cG9zaXRpb246Zml4ZWQ7d2lkdGg6dmFyKC0td2lkdGgpO2ZvbnQtZmFtaWx5OnVpLXNhbnMtc2VyaWYsc3lzdGVtLXVpLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxOb3RvIFNhbnMsc2Fucy1zZXJpZixBcHBsZSBDb2xvciBFbW9qaSxTZWdvZSBVSSBFbW9qaSxTZWdvZSBVSSBTeW1ib2wsTm90byBDb2xvciBFbW9qaTstLWdyYXkxOmhzbCgwLCAwJSwgOTklKTstLWdyYXkyOmhzbCgwLCAwJSwgOTcuMyUpOy0tZ3JheTM6aHNsKDAsIDAlLCA5NS4xJSk7LS1ncmF5NDpoc2woMCwgMCUsIDkzJSk7LS1ncmF5NTpoc2woMCwgMCUsIDkwLjklKTstLWdyYXk2OmhzbCgwLCAwJSwgODguNyUpOy0tZ3JheTc6aHNsKDAsIDAlLCA4NS44JSk7LS1ncmF5ODpoc2woMCwgMCUsIDc4JSk7LS1ncmF5OTpoc2woMCwgMCUsIDU2LjElKTstLWdyYXkxMDpoc2woMCwgMCUsIDUyLjMlKTstLWdyYXkxMTpoc2woMCwgMCUsIDQzLjUlKTstLWdyYXkxMjpoc2woMCwgMCUsIDklKTstLWJvcmRlci1yYWRpdXM6OHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjA7bWFyZ2luOjA7bGlzdC1zdHlsZTpub25lO291dGxpbmU6MDt6LWluZGV4Ojk5OTk5OTk5OTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNHMgZWFzZX1AbWVkaWEgKGhvdmVyOm5vbmUpIGFuZCAocG9pbnRlcjpjb2Fyc2Upe1tkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLWxpZnRlZD10cnVlXXt0cmFuc2Zvcm06bm9uZX19W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1yaWdodF17cmlnaHQ6dmFyKC0tb2Zmc2V0LXJpZ2h0KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPWxlZnRde2xlZnQ6dmFyKC0tb2Zmc2V0LWxlZnQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249Y2VudGVyXXtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS15LXBvc2l0aW9uPXRvcF17dG9wOnZhcigtLW9mZnNldC10b3ApfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXktcG9zaXRpb249Ym90dG9tXXtib3R0b206dmFyKC0tb2Zmc2V0LWJvdHRvbSl9W2RhdGEtc29ubmVyLXRvYXN0XXstLXk6dHJhbnNsYXRlWSgxMDAlKTstLWxpZnQtYW1vdW50OmNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1nYXApKTt6LWluZGV4OnZhcigtLXotaW5kZXgpO3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6MDt0cmFuc2Zvcm06dmFyKC0teSk7dG91Y2gtYWN0aW9uOm5vbmU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjRzLG9wYWNpdHkgLjRzLGhlaWdodCAuNHMsYm94LXNoYWRvdyAuMnM7Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6MDtvdmVyZmxvdy13cmFwOmFueXdoZXJlfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV17cGFkZGluZzoxNnB4O2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLW5vcm1hbC1ib3JkZXIpO2NvbG9yOnZhcigtLW5vcm1hbC10ZXh0KTtib3JkZXItcmFkaXVzOnZhcigtLWJvcmRlci1yYWRpdXMpO2JveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLC4xKTt3aWR0aDp2YXIoLS13aWR0aCk7Zm9udC1zaXplOjEzcHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4fVtkYXRhLXNvbm5lci10b2FzdF06Zm9jdXMtdmlzaWJsZXtib3gtc2hhZG93OjAgNHB4IDEycHggcmdiYSgwLDAsMCwuMSksMCAwIDAgMnB4IHJnYmEoMCwwLDAsLjIpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPXRvcF17dG9wOjA7LS15OnRyYW5zbGF0ZVkoLTEwMCUpOy0tbGlmdDoxOy0tbGlmdC1hbW91bnQ6Y2FsYygxICogdmFyKC0tZ2FwKSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXktcG9zaXRpb249Ym90dG9tXXtib3R0b206MDstLXk6dHJhbnNsYXRlWSgxMDAlKTstLWxpZnQ6LTE7LS1saWZ0LWFtb3VudDpjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tZ2FwKSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1kZXNjcmlwdGlvbl17Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNDtjb2xvcjojM2YzZjNmfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1kZXNjcmlwdGlvbl17Y29sb3I6aW5oZXJpdH1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtZGVzY3JpcHRpb25de2NvbG9yOiNlOGU4ZTh9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS10aXRsZV17Zm9udC13ZWlnaHQ6NTAwO2xpbmUtaGVpZ2h0OjEuNTtjb2xvcjppbmhlcml0fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtaWNvbl17ZGlzcGxheTpmbGV4O2hlaWdodDoxNnB4O3dpZHRoOjE2cHg7cG9zaXRpb246cmVsYXRpdmU7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3QtaWNvbi1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1pY29uLW1hcmdpbi1lbmQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1wcm9taXNlPXRydWVdIFtkYXRhLWljb25dPnN2Z3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjthbmltYXRpb246c29ubmVyLWZhZGUtaW4gLjNzIGVhc2UgZm9yd2FyZHN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1pY29uXT4qe2ZsZXgtc2hyaW5rOjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1pY29uXSBzdmd7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3Qtc3ZnLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LXN2Zy1tYXJnaW4tZW5kKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWNvbnRlbnRde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjJweH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWJ1dHRvbl17Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjhweDtoZWlnaHQ6MjRweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1ub3JtYWwtYmcpO2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLXRleHQpO21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLWVuZCk7Ym9yZGVyOm5vbmU7Zm9udC13ZWlnaHQ6NTAwO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtc2hyaW5rOjA7dHJhbnNpdGlvbjpvcGFjaXR5IC40cyxib3gtc2hhZG93IC4yc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWJ1dHRvbl06Zm9jdXMtdmlzaWJsZXtib3gtc2hhZG93OjAgMCAwIDJweCByZ2JhKDAsMCwwLC40KX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWJ1dHRvbl06Zmlyc3Qtb2YtdHlwZXttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1lbmQpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY2FuY2VsXXtjb2xvcjp2YXIoLS1ub3JtYWwtdGV4dCk7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wOCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY2FuY2VsXXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjMpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY2xvc2UtYnV0dG9uXXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OnZhcigtLXRvYXN0LWNsb3NlLWJ1dHRvbi1zdGFydCk7cmlnaHQ6dmFyKC0tdG9hc3QtY2xvc2UtYnV0dG9uLWVuZCk7dG9wOjA7aGVpZ2h0OjIwcHg7d2lkdGg6MjBweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowO2NvbG9yOnZhcigtLWdyYXkxMik7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tZ3JheTQpO3RyYW5zZm9ybTp2YXIoLS10b2FzdC1jbG9zZS1idXR0b24tdHJhbnNmb3JtKTtib3JkZXItcmFkaXVzOjUwJTtjdXJzb3I6cG9pbnRlcjt6LWluZGV4OjE7dHJhbnNpdGlvbjpvcGFjaXR5IC4xcyxiYWNrZ3JvdW5kIC4ycyxib3JkZXItY29sb3IgLjJzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtY2xvc2UtYnV0dG9uXTpmb2N1cy12aXNpYmxle2JveC1zaGFkb3c6MCA0cHggMTJweCByZ2JhKDAsMCwwLC4xKSwwIDAgMCAycHggcmdiYSgwLDAsMCwuMil9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1kaXNhYmxlZD10cnVlXXtjdXJzb3I6bm90LWFsbG93ZWR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXTpob3ZlciBbZGF0YS1jbG9zZS1idXR0b25dOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tZ3JheTIpO2JvcmRlci1jb2xvcjp2YXIoLS1ncmF5NSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBpbmc9dHJ1ZV06OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTEwMCU7cmlnaHQ6LTEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDotMX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj10b3BdW2RhdGEtc3dpcGluZz10cnVlXTo6YmVmb3Jle2JvdHRvbTo1MCU7dHJhbnNmb3JtOnNjYWxlWSgzKSB0cmFuc2xhdGVZKDUwJSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXktcG9zaXRpb249Ym90dG9tXVtkYXRhLXN3aXBpbmc9dHJ1ZV06OmJlZm9yZXt0b3A6NTAlO3RyYW5zZm9ybTpzY2FsZVkoMykgdHJhbnNsYXRlWSgtNTAlKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGluZz1mYWxzZV1bZGF0YS1yZW1vdmVkPXRydWVdOjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3RyYW5zZm9ybTpzY2FsZVkoMil9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWV4cGFuZGVkPXRydWVdOjphZnRlcntjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtoZWlnaHQ6Y2FsYyh2YXIoLS1nYXApICsgMXB4KTtib3R0b206MTAwJTt3aWR0aDoxMDAlfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1tb3VudGVkPXRydWVdey0teTp0cmFuc2xhdGVZKDApO29wYWNpdHk6MX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtZXhwYW5kZWQ9ZmFsc2VdW2RhdGEtZnJvbnQ9ZmFsc2Vdey0tc2NhbGU6dmFyKC0tdG9hc3RzLWJlZm9yZSkgKiAwLjA1ICsgMTstLXk6dHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQtYW1vdW50KSAqIHZhcigtLXRvYXN0cy1iZWZvcmUpKSkgc2NhbGUoY2FsYygtMSAqIHZhcigtLXNjYWxlKSkpO2hlaWdodDp2YXIoLS1mcm9udC10b2FzdC1oZWlnaHQpfVtkYXRhLXNvbm5lci10b2FzdF0+Knt0cmFuc2l0aW9uOm9wYWNpdHkgLjRzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS14LXBvc2l0aW9uPXJpZ2h0XXtyaWdodDowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS14LXBvc2l0aW9uPWxlZnRde2xlZnQ6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtZXhwYW5kZWQ9ZmFsc2VdW2RhdGEtZnJvbnQ9ZmFsc2VdW2RhdGEtc3R5bGVkPXRydWVdPip7b3BhY2l0eTowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS12aXNpYmxlPWZhbHNlXXtvcGFjaXR5OjA7cG9pbnRlci1ldmVudHM6bm9uZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtbW91bnRlZD10cnVlXVtkYXRhLWV4cGFuZGVkPXRydWVdey0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1vZmZzZXQpKSk7aGVpZ2h0OnZhcigtLWluaXRpYWwtaGVpZ2h0KX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PXRydWVdW2RhdGEtc3dpcGUtb3V0PWZhbHNlXXstLXk6dHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQpICogLTEwMCUpKTtvcGFjaXR5OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9dHJ1ZV1bZGF0YS1mcm9udD1mYWxzZV1bZGF0YS1zd2lwZS1vdXQ9ZmFsc2VdW2RhdGEtZXhwYW5kZWQ9dHJ1ZV17LS15OnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLW9mZnNldCkgKyB2YXIoLS1saWZ0KSAqIC0xMDAlKSk7b3BhY2l0eTowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPXRydWVdW2RhdGEtZnJvbnQ9ZmFsc2VdW2RhdGEtc3dpcGUtb3V0PWZhbHNlXVtkYXRhLWV4cGFuZGVkPWZhbHNlXXstLXk6dHJhbnNsYXRlWSg0MCUpO29wYWNpdHk6MDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNXMsb3BhY2l0eSAuMnN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9dHJ1ZV1bZGF0YS1mcm9udD1mYWxzZV06OmJlZm9yZXtoZWlnaHQ6Y2FsYyh2YXIoLS1pbml0aWFsLWhlaWdodCkgKyAyMCUpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwaW5nPXRydWVde3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVZKHZhcigtLXN3aXBlLWFtb3VudC15LDApKSB0cmFuc2xhdGVYKHZhcigtLXN3aXBlLWFtb3VudC14LDApKTt0cmFuc2l0aW9uOm5vbmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlZD10cnVlXXt1c2VyLXNlbGVjdDpub25lfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV0sW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXktcG9zaXRpb249dG9wXXthbmltYXRpb24tZHVyYXRpb246LjJzO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1vdXQ7YW5pbWF0aW9uLWZpbGwtbW9kZTpmb3J3YXJkc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPWxlZnRde2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC1sZWZ0fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249cmlnaHRde2FuaW1hdGlvbi1uYW1lOnN3aXBlLW91dC1yaWdodH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPXVwXXthbmltYXRpb24tbmFtZTpzd2lwZS1vdXQtdXB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj1kb3duXXthbmltYXRpb24tbmFtZTpzd2lwZS1vdXQtZG93bn1Aa2V5ZnJhbWVzIHN3aXBlLW91dC1sZWZ0e2Zyb217dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgodmFyKC0tc3dpcGUtYW1vdW50LXgpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVgoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteCkgLSAxMDAlKSk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHN3aXBlLW91dC1yaWdodHtmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVYKHZhcigtLXN3aXBlLWFtb3VudC14KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVYKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXgpICsgMTAwJSkpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzd2lwZS1vdXQtdXB7ZnJvbXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWSh2YXIoLS1zd2lwZS1hbW91bnQteSkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWShjYWxjKHZhcigtLXN3aXBlLWFtb3VudC15KSAtIDEwMCUpKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc3dpcGUtb3V0LWRvd257ZnJvbXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWSh2YXIoLS1zd2lwZS1hbW91bnQteSkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWShjYWxjKHZhcigtLXN3aXBlLWFtb3VudC15KSArIDEwMCUpKTtvcGFjaXR5OjB9fUBtZWRpYSAobWF4LXdpZHRoOjYwMHB4KXtbZGF0YS1zb25uZXItdG9hc3Rlcl17cG9zaXRpb246Zml4ZWQ7cmlnaHQ6dmFyKC0tbW9iaWxlLW9mZnNldC1yaWdodCk7bGVmdDp2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpO3dpZHRoOjEwMCV9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2Rpcj1ydGxde2xlZnQ6Y2FsYyh2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpICogLTEpfVtkYXRhLXNvbm5lci10b2FzdGVyXSBbZGF0YS1zb25uZXItdG9hc3Rde2xlZnQ6MDtyaWdodDowO3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCkgKiAyKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPWxlZnRde2xlZnQ6dmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV17Ym90dG9tOnZhcigtLW1vYmlsZS1vZmZzZXQtYm90dG9tKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS15LXBvc2l0aW9uPXRvcF17dG9wOnZhcigtLW1vYmlsZS1vZmZzZXQtdG9wKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPWNlbnRlcl17bGVmdDp2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpO3JpZ2h0OnZhcigtLW1vYmlsZS1vZmZzZXQtcmlnaHQpO3RyYW5zZm9ybTpub25lfX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9bGlnaHRdey0tbm9ybWFsLWJnOiNmZmY7LS1ub3JtYWwtYm9yZGVyOnZhcigtLWdyYXk0KTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxMik7LS1zdWNjZXNzLWJnOmhzbCgxNDMsIDg1JSwgOTYlKTstLXN1Y2Nlc3MtYm9yZGVyOmhzbCgxNDUsIDkyJSwgODclKTstLXN1Y2Nlc3MtdGV4dDpoc2woMTQwLCAxMDAlLCAyNyUpOy0taW5mby1iZzpoc2woMjA4LCAxMDAlLCA5NyUpOy0taW5mby1ib3JkZXI6aHNsKDIyMSwgOTElLCA5MyUpOy0taW5mby10ZXh0OmhzbCgyMTAsIDkyJSwgNDUlKTstLXdhcm5pbmctYmc6aHNsKDQ5LCAxMDAlLCA5NyUpOy0td2FybmluZy1ib3JkZXI6aHNsKDQ5LCA5MSUsIDg0JSk7LS13YXJuaW5nLXRleHQ6aHNsKDMxLCA5MiUsIDQ1JSk7LS1lcnJvci1iZzpoc2woMzU5LCAxMDAlLCA5NyUpOy0tZXJyb3ItYm9yZGVyOmhzbCgzNTksIDEwMCUsIDk0JSk7LS1lcnJvci10ZXh0OmhzbCgzNjAsIDEwMCUsIDQ1JSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWxpZ2h0XSBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtaW52ZXJ0PXRydWVdey0tbm9ybWFsLWJnOiMwMDA7LS1ub3JtYWwtYm9yZGVyOmhzbCgwLCAwJSwgMjAlKTstLW5vcm1hbC10ZXh0OnZhcigtLWdyYXkxKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWludmVydD10cnVlXXstLW5vcm1hbC1iZzojZmZmOy0tbm9ybWFsLWJvcmRlcjp2YXIoLS1ncmF5Myk7LS1ub3JtYWwtdGV4dDp2YXIoLS1ncmF5MTIpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXXstLW5vcm1hbC1iZzojMDAwOy0tbm9ybWFsLWJnLWhvdmVyOmhzbCgwLCAwJSwgMTIlKTstLW5vcm1hbC1ib3JkZXI6aHNsKDAsIDAlLCAyMCUpOy0tbm9ybWFsLWJvcmRlci1ob3Zlcjpoc2woMCwgMCUsIDI1JSk7LS1ub3JtYWwtdGV4dDp2YXIoLS1ncmF5MSk7LS1zdWNjZXNzLWJnOmhzbCgxNTAsIDEwMCUsIDYlKTstLXN1Y2Nlc3MtYm9yZGVyOmhzbCgxNDcsIDEwMCUsIDEyJSk7LS1zdWNjZXNzLXRleHQ6aHNsKDE1MCwgODYlLCA2NSUpOy0taW5mby1iZzpoc2woMjE1LCAxMDAlLCA2JSk7LS1pbmZvLWJvcmRlcjpoc2woMjIzLCA0MyUsIDE3JSk7LS1pbmZvLXRleHQ6aHNsKDIxNiwgODclLCA2NSUpOy0td2FybmluZy1iZzpoc2woNjQsIDEwMCUsIDYlKTstLXdhcm5pbmctYm9yZGVyOmhzbCg2MCwgMTAwJSwgOSUpOy0td2FybmluZy10ZXh0OmhzbCg0NiwgODclLCA2NSUpOy0tZXJyb3ItYmc6aHNsKDM1OCwgNzYlLCAxMCUpOy0tZXJyb3ItYm9yZGVyOmhzbCgzNTcsIDg5JSwgMTYlKTstLWVycm9yLXRleHQ6aHNsKDM1OCwgMTAwJSwgODElKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLWJnKTtib3JkZXItY29sb3I6dmFyKC0tbm9ybWFsLWJvcmRlcik7Y29sb3I6dmFyKC0tbm9ybWFsLXRleHQpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdIFtkYXRhLWNsb3NlLWJ1dHRvbl06aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1ub3JtYWwtYmctaG92ZXIpO2JvcmRlci1jb2xvcjp2YXIoLS1ub3JtYWwtYm9yZGVyLWhvdmVyKX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPXN1Y2Nlc3Nde2JhY2tncm91bmQ6dmFyKC0tc3VjY2Vzcy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXN1Y2Nlc3MtYm9yZGVyKTtjb2xvcjp2YXIoLS1zdWNjZXNzLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9c3VjY2Vzc10gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLXN1Y2Nlc3MtYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1zdWNjZXNzLWJvcmRlcik7Y29sb3I6dmFyKC0tc3VjY2Vzcy10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWluZm9de2JhY2tncm91bmQ6dmFyKC0taW5mby1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWluZm8tYm9yZGVyKTtjb2xvcjp2YXIoLS1pbmZvLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9aW5mb10gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLWluZm8tYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1pbmZvLWJvcmRlcik7Y29sb3I6dmFyKC0taW5mby10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPXdhcm5pbmdde2JhY2tncm91bmQ6dmFyKC0td2FybmluZy1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLXdhcm5pbmctYm9yZGVyKTtjb2xvcjp2YXIoLS13YXJuaW5nLXRleHQpfVtkYXRhLXJpY2gtY29sb3JzPXRydWVdW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXR5cGU9d2FybmluZ10gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLXdhcm5pbmctYmcpO2JvcmRlci1jb2xvcjp2YXIoLS13YXJuaW5nLWJvcmRlcik7Y29sb3I6dmFyKC0td2FybmluZy10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWVycm9yXXtiYWNrZ3JvdW5kOnZhcigtLWVycm9yLWJnKTtib3JkZXItY29sb3I6dmFyKC0tZXJyb3ItYm9yZGVyKTtjb2xvcjp2YXIoLS1lcnJvci10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWVycm9yXSBbZGF0YS1jbG9zZS1idXR0b25de2JhY2tncm91bmQ6dmFyKC0tZXJyb3ItYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1lcnJvci1ib3JkZXIpO2NvbG9yOnZhcigtLWVycm9yLXRleHQpfS5zb25uZXItbG9hZGluZy13cmFwcGVyey0tc2l6ZToxNnB4O2hlaWdodDp2YXIoLS1zaXplKTt3aWR0aDp2YXIoLS1zaXplKTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3otaW5kZXg6MTB9LnNvbm5lci1sb2FkaW5nLXdyYXBwZXJbZGF0YS12aXNpYmxlPWZhbHNlXXt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjthbmltYXRpb246c29ubmVyLWZhZGUtb3V0IC4ycyBlYXNlIGZvcndhcmRzfS5zb25uZXItc3Bpbm5lcntwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6NTAlO2xlZnQ6NTAlO2hlaWdodDp2YXIoLS1zaXplKTt3aWR0aDp2YXIoLS1zaXplKX0uc29ubmVyLWxvYWRpbmctYmFye2FuaW1hdGlvbjpzb25uZXItc3BpbiAxLjJzIGxpbmVhciBpbmZpbml0ZTtiYWNrZ3JvdW5kOnZhcigtLWdyYXkxMSk7Ym9yZGVyLXJhZGl1czo2cHg7aGVpZ2h0OjglO2xlZnQ6LTEwJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTMuOSU7d2lkdGg6MjQlfS5zb25uZXItbG9hZGluZy1iYXI6Zmlyc3QtY2hpbGR7YW5pbWF0aW9uLWRlbGF5Oi0xLjJzO3RyYW5zZm9ybTpyb3RhdGUoLjAwMDFkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgyKXthbmltYXRpb24tZGVsYXk6LTEuMXM7dHJhbnNmb3JtOnJvdGF0ZSgzMGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDMpe2FuaW1hdGlvbi1kZWxheTotMXM7dHJhbnNmb3JtOnJvdGF0ZSg2MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDQpe2FuaW1hdGlvbi1kZWxheTotLjlzO3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg1KXthbmltYXRpb24tZGVsYXk6LS44czt0cmFuc2Zvcm06cm90YXRlKDEyMGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDYpe2FuaW1hdGlvbi1kZWxheTotLjdzO3RyYW5zZm9ybTpyb3RhdGUoMTUwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNyl7YW5pbWF0aW9uLWRlbGF5Oi0uNnM7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg4KXthbmltYXRpb24tZGVsYXk6LS41czt0cmFuc2Zvcm06cm90YXRlKDIxMGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDkpe2FuaW1hdGlvbi1kZWxheTotLjRzO3RyYW5zZm9ybTpyb3RhdGUoMjQwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMTApe2FuaW1hdGlvbi1kZWxheTotLjNzO3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMTEpe2FuaW1hdGlvbi1kZWxheTotLjJzO3RyYW5zZm9ybTpyb3RhdGUoMzAwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMTIpe2FuaW1hdGlvbi1kZWxheTotLjFzO3RyYW5zZm9ybTpyb3RhdGUoMzMwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9QGtleWZyYW1lcyBzb25uZXItZmFkZS1pbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KX0xMDAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgc29ubmVyLWZhZGUtb3V0ezAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9MTAwJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KX19QGtleWZyYW1lcyBzb25uZXItc3BpbnswJXtvcGFjaXR5OjF9MTAwJXtvcGFjaXR5Oi4xNX19QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uKXsuc29ubmVyLWxvYWRpbmctYmFyLFtkYXRhLXNvbm5lci10b2FzdF0sW2RhdGEtc29ubmVyLXRvYXN0XT4qe3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUhaW1wb3J0YW50fX0uc29ubmVyLWxvYWRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzLHRyYW5zZm9ybSAuMnN9LnNvbm5lci1sb2FkZXJbZGF0YS12aXNpYmxlPWZhbHNlXXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC44KSB0cmFuc2xhdGUoLTUwJSwtNTAlKX0iKTtmdW5jdGlvbiBxMygkKXtyZXR1cm4gJC5sYWJlbCE9PXZvaWQgMH12YXIgb1E9MyxyUT0iMjRweCIsblE9IjE2cHgiLE03PTQwMDAsYVE9MzU2LHNRPTE0LHRRPTQ1LGVRPTIwMDtmdW5jdGlvbiB3MCguLi4kKXtyZXR1cm4gJC5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpfWZ1bmN0aW9uICRaKCQpe2xldFtKLFFdPSQuc3BsaXQoIi0iKSxaPVtdO2lmKEopWi5wdXNoKEopO2lmKFEpWi5wdXNoKFEpO3JldHVybiBafXZhciBKWj0oJCk9Pnt2YXIgSixRLFosSyxZLHEsVixHLEI7bGV0e2ludmVydDpOLHRvYXN0OnosdW5zdHlsZWQ6VSxpbnRlcmFjdGluZzpILHNldEhlaWdodHM6Rix2aXNpYmxlVG9hc3RzOkwsaGVpZ2h0czprLGluZGV4OkMsdG9hc3RzOk8sZXhwYW5kZWQ6eSxyZW1vdmVUb2FzdDpFLGRlZmF1bHRSaWNoQ29sb3JzOncsY2xvc2VCdXR0b246UyxzdHlsZTpRMSxjYW5jZWxCdXR0b25TdHlsZTpnLGFjdGlvbkJ1dHRvblN0eWxlOmgsY2xhc3NOYW1lOkk9IiIsZGVzY3JpcHRpb25DbGFzc05hbWU6dT0iIixkdXJhdGlvbjpaMSxwb3NpdGlvbjpyLGdhcDpNMSxleHBhbmRCeURlZmF1bHQ6SjEsY2xhc3NOYW1lczppLGljb25zOmYsY2xvc2VCdXR0b25BcmlhTGFiZWw6VTE9IkNsb3NlIHRvYXN0In09JCxbWDEsQjFdPXYudXNlU3RhdGUobnVsbCksW0YxLFcxXT12LnVzZVN0YXRlKG51bGwpLFtvLGNdPXYudXNlU3RhdGUoITEpLFtkLG5dPXYudXNlU3RhdGUoITEpLFtZMSxiXT12LnVzZVN0YXRlKCExKSxbaixOMV09di51c2VTdGF0ZSghMSksW0MxLHBdPXYudXNlU3RhdGUoITEpLFtlLGsxXT12LnVzZVN0YXRlKDApLFtQMSxnMV09di51c2VTdGF0ZSgwKSxwMT12LnVzZVJlZih6LmR1cmF0aW9ufHxaMXx8TTcpLGoxPXYudXNlUmVmKG51bGwpLGExPXYudXNlUmVmKG51bGwpLGswPUM9PT0wLFYwPUMrMTw9TCxEMT16LnR5cGUsdTE9ei5kaXNtaXNzaWJsZSE9PSExLEMwPXouY2xhc3NOYW1lfHwiIixWMT16LmRlc2NyaXB0aW9uQ2xhc3NOYW1lfHwiIixaMD12LnVzZU1lbW8oKCk9PmsuZmluZEluZGV4KChXKT0+Vy50b2FzdElkPT09ei5pZCl8fDAsW2ssei5pZF0pLGIwPXYudXNlTWVtbygoKT0+e3ZhciBXO3JldHVybihXPXouY2xvc2VCdXR0b24pIT1udWxsP1c6U30sW3ouY2xvc2VCdXR0b24sU10pLGgxPXYudXNlTWVtbygoKT0+ei5kdXJhdGlvbnx8WjF8fE03LFt6LmR1cmF0aW9uLFoxXSksYzE9di51c2VSZWYoMCksczE9di51c2VSZWYoMCksZTE9di51c2VSZWYoMCksdDE9di51c2VSZWYobnVsbCksW3kwLHYwXT1yLnNwbGl0KCItIiksUzA9di51c2VNZW1vKCgpPT57cmV0dXJuIGsucmVkdWNlKChXLG0sYSk9PntpZihhPj1aMClyZXR1cm4gVztyZXR1cm4gVyttLmhlaWdodH0sMCl9LFtrLFowXSksJDA9cFEoKSxFMT16LmludmVydHx8TixHMD1EMT09PSJsb2FkaW5nIjtzMS5jdXJyZW50PXYudXNlTWVtbygoKT0+WjAqTTErUzAsW1owLFMwXSksdi51c2VFZmZlY3QoKCk9PntwMS5jdXJyZW50PWgxfSxbaDFdKSx2LnVzZUVmZmVjdCgoKT0+e2MoITApfSxbXSksdi51c2VFZmZlY3QoKCk9PntsZXQgVz1hMS5jdXJyZW50O2lmKFcpe2xldCBtPVcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O3JldHVybiBnMShtKSxGKChhKT0+W3t0b2FzdElkOnouaWQsaGVpZ2h0Om0scG9zaXRpb246ei5wb3NpdGlvbn0sLi4uYV0pLCgpPT5GKChhKT0+YS5maWx0ZXIoKEgxKT0+SDEudG9hc3RJZCE9PXouaWQpKX19LFtGLHouaWRdKSx2LnVzZUxheW91dEVmZmVjdCgoKT0+e2lmKCFvKXJldHVybjtsZXQgVz1hMS5jdXJyZW50LG09Vy5zdHlsZS5oZWlnaHQ7Vy5zdHlsZS5oZWlnaHQ9ImF1dG8iO2xldCBhPVcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1cuc3R5bGUuaGVpZ2h0PW0sZzEoYSksRigoSDEpPT57aWYoIUgxLmZpbmQoKHoxKT0+ejEudG9hc3RJZD09PXouaWQpKXJldHVyblt7dG9hc3RJZDp6LmlkLGhlaWdodDphLHBvc2l0aW9uOnoucG9zaXRpb259LC4uLkgxXTtlbHNlIHJldHVybiBIMS5tYXAoKHoxKT0+ejEudG9hc3RJZD09PXouaWQ/ey4uLnoxLGhlaWdodDphfTp6MSl9KX0sW28sei50aXRsZSx6LmRlc2NyaXB0aW9uLEYsei5pZCx6LmpzeCx6LmFjdGlvbix6LmNhbmNlbF0pO2xldCBmMT12LnVzZUNhbGxiYWNrKCgpPT57bighMCksazEoczEuY3VycmVudCksRigoVyk9PlcuZmlsdGVyKChtKT0+bS50b2FzdElkIT09ei5pZCkpLHNldFRpbWVvdXQoKCk9PntFKHopfSxlUSl9LFt6LEUsRixzMV0pO3YudXNlRWZmZWN0KCgpPT57aWYoei5wcm9taXNlJiZEMT09PSJsb2FkaW5nInx8ei5kdXJhdGlvbj09PTEvMHx8ei50eXBlPT09ImxvYWRpbmciKXJldHVybjtsZXQgVyxtPSgpPT57aWYoZTEuY3VycmVudDxjMS5jdXJyZW50KXtsZXQgSDE9bmV3IERhdGUoKS5nZXRUaW1lKCktYzEuY3VycmVudDtwMS5jdXJyZW50PXAxLmN1cnJlbnQtSDF9ZTEuY3VycmVudD1uZXcgRGF0ZSgpLmdldFRpbWUoKX0sYT0oKT0+e2lmKHAxLmN1cnJlbnQ9PT0xLzApcmV0dXJuO2MxLmN1cnJlbnQ9bmV3IERhdGUoKS5nZXRUaW1lKCksVz1zZXRUaW1lb3V0KCgpPT57ei5vbkF1dG9DbG9zZT09bnVsbHx8ei5vbkF1dG9DbG9zZS5jYWxsKHoseiksZjEoKX0scDEuY3VycmVudCl9O2lmKHl8fEh8fCQwKW0oKTtlbHNlIGEoKTtyZXR1cm4oKT0+Y2xlYXJUaW1lb3V0KFcpfSxbeSxILHosRDEsJDAsZjFdKSx2LnVzZUVmZmVjdCgoKT0+e2lmKHouZGVsZXRlKWYxKCksei5vbkRpc21pc3M9PW51bGx8fHoub25EaXNtaXNzLmNhbGwoeix6KX0sW2YxLHouZGVsZXRlXSk7ZnVuY3Rpb24gQjAoKXt2YXIgVztpZihmPT1udWxsP3ZvaWQgMDpmLmxvYWRpbmcpe3ZhciBtO3JldHVybiB2LmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZTp3MChpPT1udWxsP3ZvaWQgMDppLmxvYWRlcix6PT1udWxsP3ZvaWQgMDoobT16LmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDptLmxvYWRlciwic29ubmVyLWxvYWRlciIpLCJkYXRhLXZpc2libGUiOkQxPT09ImxvYWRpbmcifSxmLmxvYWRpbmcpfXJldHVybiB2LmNyZWF0ZUVsZW1lbnQoalEse2NsYXNzTmFtZTp3MChpPT1udWxsP3ZvaWQgMDppLmxvYWRlcix6PT1udWxsP3ZvaWQgMDooVz16LmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpXLmxvYWRlciksdmlzaWJsZTpEMT09PSJsb2FkaW5nIn0pfWxldCBGMD16Lmljb258fChmPT1udWxsP3ZvaWQgMDpmW0QxXSl8fHhRKEQxKTt2YXIgUTAsQTA7cmV0dXJuIHYuY3JlYXRlRWxlbWVudCgibGkiLHt0YWJJbmRleDowLHJlZjphMSxjbGFzc05hbWU6dzAoSSxDMCxpPT1udWxsP3ZvaWQgMDppLnRvYXN0LHo9PW51bGw/dm9pZCAwOihKPXouY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkoudG9hc3QsaT09bnVsbD92b2lkIDA6aS5kZWZhdWx0LGk9PW51bGw/dm9pZCAwOmlbRDFdLHo9PW51bGw/dm9pZCAwOihRPXouY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOlFbRDFdKSwiZGF0YS1zb25uZXItdG9hc3QiOiIiLCJkYXRhLXJpY2gtY29sb3JzIjooUTA9ei5yaWNoQ29sb3JzKSE9bnVsbD9RMDp3LCJkYXRhLXN0eWxlZCI6IUJvb2xlYW4oei5qc3h8fHoudW5zdHlsZWR8fFUpLCJkYXRhLW1vdW50ZWQiOm8sImRhdGEtcHJvbWlzZSI6Qm9vbGVhbih6LnByb21pc2UpLCJkYXRhLXN3aXBlZCI6QzEsImRhdGEtcmVtb3ZlZCI6ZCwiZGF0YS12aXNpYmxlIjpWMCwiZGF0YS15LXBvc2l0aW9uIjp5MCwiZGF0YS14LXBvc2l0aW9uIjp2MCwiZGF0YS1pbmRleCI6QywiZGF0YS1mcm9udCI6azAsImRhdGEtc3dpcGluZyI6WTEsImRhdGEtZGlzbWlzc2libGUiOnUxLCJkYXRhLXR5cGUiOkQxLCJkYXRhLWludmVydCI6RTEsImRhdGEtc3dpcGUtb3V0IjpqLCJkYXRhLXN3aXBlLWRpcmVjdGlvbiI6RjEsImRhdGEtZXhwYW5kZWQiOkJvb2xlYW4oeXx8SjEmJm8pLCJkYXRhLXRlc3RpZCI6ei50ZXN0SWQsc3R5bGU6eyItLWluZGV4IjpDLCItLXRvYXN0cy1iZWZvcmUiOkMsIi0tei1pbmRleCI6Ty5sZW5ndGgtQywiLS1vZmZzZXQiOmAke2Q/ZTpzMS5jdXJyZW50fXB4YCwiLS1pbml0aWFsLWhlaWdodCI6SjE/ImF1dG8iOmAke1AxfXB4YCwuLi5RMSwuLi56LnN0eWxlfSxvbkRyYWdFbmQ6KCk9PntiKCExKSxCMShudWxsKSx0MS5jdXJyZW50PW51bGx9LG9uUG9pbnRlckRvd246KFcpPT57aWYoVy5idXR0b249PT0yKXJldHVybjtpZihHMHx8IXUxKXJldHVybjtpZihqMS5jdXJyZW50PW5ldyBEYXRlLGsxKHMxLmN1cnJlbnQpLFcudGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKFcucG9pbnRlcklkKSxXLnRhcmdldC50YWdOYW1lPT09IkJVVFRPTiIpcmV0dXJuO2IoITApLHQxLmN1cnJlbnQ9e3g6Vy5jbGllbnRYLHk6Vy5jbGllbnRZfX0sb25Qb2ludGVyVXA6KCk9Pnt2YXIgVyxtLGE7aWYoanx8IXUxKXJldHVybjt0MS5jdXJyZW50PW51bGw7bGV0IEgxPU51bWJlcigoKFc9YTEuY3VycmVudCk9PW51bGw/dm9pZCAwOlcuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgiLS1zd2lwZS1hbW91bnQteCIpLnJlcGxhY2UoInB4IiwiIikpfHwwKSxBMT1OdW1iZXIoKChtPWExLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDptLnN0eWxlLmdldFByb3BlcnR5VmFsdWUoIi0tc3dpcGUtYW1vdW50LXkiKS5yZXBsYWNlKCJweCIsIiIpKXx8MCksejE9bmV3IERhdGUoKS5nZXRUaW1lKCktKChhPWoxLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDphLmdldFRpbWUoKSksTzE9WDE9PT0ieCI/SDE6QTEsWDA9TWF0aC5hYnMoTzEpL3oxO2lmKE1hdGguYWJzKE8xKT49dFF8fFgwPjAuMTEpe2lmKGsxKHMxLmN1cnJlbnQpLHoub25EaXNtaXNzPT1udWxsfHx6Lm9uRGlzbWlzcy5jYWxsKHoseiksWDE9PT0ieCIpVzEoSDE+MD8icmlnaHQiOiJsZWZ0Iik7ZWxzZSBXMShBMT4wPyJkb3duIjoidXAiKTtmMSgpLE4xKCEwKTtyZXR1cm59ZWxzZXt2YXIgaTEsbzE7KGkxPWExLmN1cnJlbnQpPT1udWxsfHxpMS5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1zd2lwZS1hbW91bnQteCIsIjBweCIpLChvMT1hMS5jdXJyZW50KT09bnVsbHx8bzEuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXkiLCIwcHgiKX1wKCExKSxiKCExKSxCMShudWxsKX0sb25Qb2ludGVyTW92ZTooVyk9Pnt2YXIgbSxhLEgxO2lmKCF0MS5jdXJyZW50fHwhdTEpcmV0dXJuO2lmKCgobT13aW5kb3cuZ2V0U2VsZWN0aW9uKCkpPT1udWxsP3ZvaWQgMDptLnRvU3RyaW5nKCkubGVuZ3RoKT4wKXJldHVybjtsZXQgejE9Vy5jbGllbnRZLXQxLmN1cnJlbnQueSxPMT1XLmNsaWVudFgtdDEuY3VycmVudC54O3ZhciBYMDtsZXQgaTE9KFgwPSQuc3dpcGVEaXJlY3Rpb25zKSE9bnVsbD9YMDokWihyKTtpZighWDEmJihNYXRoLmFicyhPMSk+MXx8TWF0aC5hYnMoejEpPjEpKUIxKE1hdGguYWJzKE8xKT5NYXRoLmFicyh6MSk/IngiOiJ5Iik7bGV0IG8xPXt4OjAseTowfSx6MD0oTjApPT57cmV0dXJuIDEvKDEuNStNYXRoLmFicyhOMCkvMjApfTtpZihYMT09PSJ5Iil7aWYoaTEuaW5jbHVkZXMoInRvcCIpfHxpMS5pbmNsdWRlcygiYm90dG9tIikpaWYoaTEuaW5jbHVkZXMoInRvcCIpJiZ6MTwwfHxpMS5pbmNsdWRlcygiYm90dG9tIikmJnoxPjApbzEueT16MTtlbHNle2xldCBOMD16MSp6MCh6MSk7bzEueT1NYXRoLmFicyhOMCk8TWF0aC5hYnMoejEpP04wOnoxfX1lbHNlIGlmKFgxPT09IngiKXtpZihpMS5pbmNsdWRlcygibGVmdCIpfHxpMS5pbmNsdWRlcygicmlnaHQiKSlpZihpMS5pbmNsdWRlcygibGVmdCIpJiZPMTwwfHxpMS5pbmNsdWRlcygicmlnaHQiKSYmTzE+MClvMS54PU8xO2Vsc2V7bGV0IE4wPU8xKnowKE8xKTtvMS54PU1hdGguYWJzKE4wKTxNYXRoLmFicyhPMSk/TjA6TzF9fWlmKE1hdGguYWJzKG8xLngpPjB8fE1hdGguYWJzKG8xLnkpPjApcCghMCk7KGE9YTEuY3VycmVudCk9PW51bGx8fGEuc3R5bGUuc2V0UHJvcGVydHkoIi0tc3dpcGUtYW1vdW50LXgiLGAke28xLnh9cHhgKSwoSDE9YTEuY3VycmVudCk9PW51bGx8fEgxLnN0eWxlLnNldFByb3BlcnR5KCItLXN3aXBlLWFtb3VudC15IixgJHtvMS55fXB4YCl9fSxiMCYmIXouanN4JiZEMSE9PSJsb2FkaW5nIj92LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJhcmlhLWxhYmVsIjpVMSwiZGF0YS1kaXNhYmxlZCI6RzAsImRhdGEtY2xvc2UtYnV0dG9uIjohMCxvbkNsaWNrOkcwfHwhdTE/KCk9Pnt9OigpPT57ZjEoKSx6Lm9uRGlzbWlzcz09bnVsbHx8ei5vbkRpc21pc3MuY2FsbCh6LHopfSxjbGFzc05hbWU6dzAoaT09bnVsbD92b2lkIDA6aS5jbG9zZUJ1dHRvbix6PT1udWxsP3ZvaWQgMDooWj16LmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpaLmNsb3NlQnV0dG9uKX0sKEEwPWY9PW51bGw/dm9pZCAwOmYuY2xvc2UpIT1udWxsP0EwOm1RKTpudWxsLChEMXx8ei5pY29ufHx6LnByb21pc2UpJiZ6Lmljb24hPT1udWxsJiYoKGY9PW51bGw/dm9pZCAwOmZbRDFdKSE9PW51bGx8fHouaWNvbik/di5jcmVhdGVFbGVtZW50KCJkaXYiLHsiZGF0YS1pY29uIjoiIixjbGFzc05hbWU6dzAoaT09bnVsbD92b2lkIDA6aS5pY29uLHo9PW51bGw/dm9pZCAwOihLPXouY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOksuaWNvbil9LHoucHJvbWlzZXx8ei50eXBlPT09ImxvYWRpbmciJiYhei5pY29uP3ouaWNvbnx8QjAoKTpudWxsLHoudHlwZSE9PSJsb2FkaW5nIj9GMDpudWxsKTpudWxsLHYuY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtY29udGVudCI6IiIsY2xhc3NOYW1lOncwKGk9PW51bGw/dm9pZCAwOmkuY29udGVudCx6PT1udWxsP3ZvaWQgMDooWT16LmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpZLmNvbnRlbnQpfSx2LmNyZWF0ZUVsZW1lbnQoImRpdiIseyJkYXRhLXRpdGxlIjoiIixjbGFzc05hbWU6dzAoaT09bnVsbD92b2lkIDA6aS50aXRsZSx6PT1udWxsP3ZvaWQgMDoocT16LmNsYXNzTmFtZXMpPT1udWxsP3ZvaWQgMDpxLnRpdGxlKX0sei5qc3g/ei5qc3g6dHlwZW9mIHoudGl0bGU9PT0iZnVuY3Rpb24iP3oudGl0bGUoKTp6LnRpdGxlKSx6LmRlc2NyaXB0aW9uP3YuY3JlYXRlRWxlbWVudCgiZGl2Iix7ImRhdGEtZGVzY3JpcHRpb24iOiIiLGNsYXNzTmFtZTp3MCh1LFYxLGk9PW51bGw/dm9pZCAwOmkuZGVzY3JpcHRpb24sej09bnVsbD92b2lkIDA6KFY9ei5jbGFzc05hbWVzKT09bnVsbD92b2lkIDA6Vi5kZXNjcmlwdGlvbil9LHR5cGVvZiB6LmRlc2NyaXB0aW9uPT09ImZ1bmN0aW9uIj96LmRlc2NyaXB0aW9uKCk6ei5kZXNjcmlwdGlvbik6bnVsbCksdi5pc1ZhbGlkRWxlbWVudCh6LmNhbmNlbCk/ei5jYW5jZWw6ei5jYW5jZWwmJnEzKHouY2FuY2VsKT92LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJkYXRhLWJ1dHRvbiI6ITAsImRhdGEtY2FuY2VsIjohMCxzdHlsZTp6LmNhbmNlbEJ1dHRvblN0eWxlfHxnLG9uQ2xpY2s6KFcpPT57aWYoIXEzKHouY2FuY2VsKSlyZXR1cm47aWYoIXUxKXJldHVybjt6LmNhbmNlbC5vbkNsaWNrPT1udWxsfHx6LmNhbmNlbC5vbkNsaWNrLmNhbGwoei5jYW5jZWwsVyksZjEoKX0sY2xhc3NOYW1lOncwKGk9PW51bGw/dm9pZCAwOmkuY2FuY2VsQnV0dG9uLHo9PW51bGw/dm9pZCAwOihHPXouY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkcuY2FuY2VsQnV0dG9uKX0sei5jYW5jZWwubGFiZWwpOm51bGwsdi5pc1ZhbGlkRWxlbWVudCh6LmFjdGlvbik/ei5hY3Rpb246ei5hY3Rpb24mJnEzKHouYWN0aW9uKT92LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIseyJkYXRhLWJ1dHRvbiI6ITAsImRhdGEtYWN0aW9uIjohMCxzdHlsZTp6LmFjdGlvbkJ1dHRvblN0eWxlfHxoLG9uQ2xpY2s6KFcpPT57aWYoIXEzKHouYWN0aW9uKSlyZXR1cm47aWYoei5hY3Rpb24ub25DbGljaz09bnVsbHx8ei5hY3Rpb24ub25DbGljay5jYWxsKHouYWN0aW9uLFcpLFcuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47ZjEoKX0sY2xhc3NOYW1lOncwKGk9PW51bGw/dm9pZCAwOmkuYWN0aW9uQnV0dG9uLHo9PW51bGw/dm9pZCAwOihCPXouY2xhc3NOYW1lcyk9PW51bGw/dm9pZCAwOkIuYWN0aW9uQnV0dG9uKX0sei5hY3Rpb24ubGFiZWwpOm51bGwpfTtmdW5jdGlvbiBXNygpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiJsdHIiO2lmKHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuImx0ciI7bGV0ICQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7aWYoJD09PSJhdXRvInx8ISQpcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZGlyZWN0aW9uO3JldHVybiAkfWZ1bmN0aW9uIFFaKCQsSil7bGV0IFE9e307cmV0dXJuWyQsSl0uZm9yRWFjaCgoWixLKT0+e2xldCBZPUs9PT0xLHE9WT8iLS1tb2JpbGUtb2Zmc2V0IjoiLS1vZmZzZXQiLFY9WT9uUTpyUTtmdW5jdGlvbiBHKEIpe1sidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoTik9PntRW2Ake3F9LSR7Tn1gXT10eXBlb2YgQj09PSJudW1iZXIiP2Ake0J9cHhgOkJ9KX1pZih0eXBlb2YgWj09PSJudW1iZXIifHx0eXBlb2YgWj09PSJzdHJpbmciKUcoWik7ZWxzZSBpZih0eXBlb2YgWj09PSJvYmplY3QiKVsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0uZm9yRWFjaCgoQik9PntpZihaW0JdPT09dm9pZCAwKVFbYCR7cX0tJHtCfWBdPVY7ZWxzZSBRW2Ake3F9LSR7Qn1gXT10eXBlb2YgWltCXT09PSJudW1iZXIiP2Ake1pbQl19cHhgOlpbQl19KTtlbHNlIEcoVil9KSxRfXZhciBfNz12LmZvcndhcmRSZWYoZnVuY3Rpb24oSixRKXtsZXR7aWQ6WixpbnZlcnQ6Syxwb3NpdGlvbjpZPSJib3R0b20tcmlnaHQiLGhvdGtleTpxPVsiYWx0S2V5IiwiS2V5VCJdLGV4cGFuZDpWLGNsb3NlQnV0dG9uOkcsY2xhc3NOYW1lOkIsb2Zmc2V0Ok4sbW9iaWxlT2Zmc2V0OnosdGhlbWU6VT0ibGlnaHQiLHJpY2hDb2xvcnM6SCxkdXJhdGlvbjpGLHN0eWxlOkwsdmlzaWJsZVRvYXN0czprPW9RLHRvYXN0T3B0aW9uczpDLGRpcjpPPVc3KCksZ2FwOnk9c1EsaWNvbnM6RSxjb250YWluZXJBcmlhTGFiZWw6dz0iTm90aWZpY2F0aW9ucyJ9PUosW1MsUTFdPXYudXNlU3RhdGUoW10pLGc9di51c2VNZW1vKCgpPT57aWYoWilyZXR1cm4gUy5maWx0ZXIoKG8pPT5vLnRvYXN0ZXJJZD09PVopO3JldHVybiBTLmZpbHRlcigobyk9PiFvLnRvYXN0ZXJJZCl9LFtTLFpdKSxoPXYudXNlTWVtbygoKT0+e3JldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoW1ldLmNvbmNhdChnLmZpbHRlcigobyk9Pm8ucG9zaXRpb24pLm1hcCgobyk9Pm8ucG9zaXRpb24pKSkpfSxbZyxZXSksW0ksdV09di51c2VTdGF0ZShbXSksW1oxLHJdPXYudXNlU3RhdGUoITEpLFtNMSxKMV09di51c2VTdGF0ZSghMSksW2ksZl09di51c2VTdGF0ZShVIT09InN5c3RlbSI/VTp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzPyJkYXJrIjoibGlnaHQiOiJsaWdodCIpLFUxPXYudXNlUmVmKG51bGwpLFgxPXEuam9pbigiKyIpLnJlcGxhY2UoL0tleS9nLCIiKS5yZXBsYWNlKC9EaWdpdC9nLCIiKSxCMT12LnVzZVJlZihudWxsKSxGMT12LnVzZVJlZighMSksVzE9di51c2VDYWxsYmFjaygobyk9PntRMSgoYyk9Pnt2YXIgZDtpZighKChkPWMuZmluZCgobik9Pm4uaWQ9PT1vLmlkKSk9PW51bGw/dm9pZCAwOmQuZGVsZXRlKSlZMC5kaXNtaXNzKG8uaWQpO3JldHVybiBjLmZpbHRlcigoe2lkOm59KT0+biE9PW8uaWQpfSl9LFtdKTtyZXR1cm4gdi51c2VFZmZlY3QoKCk9PntyZXR1cm4gWTAuc3Vic2NyaWJlKChvKT0+e2lmKG8uZGlzbWlzcyl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57UTEoKGMpPT5jLm1hcCgoZCk9PmQuaWQ9PT1vLmlkP3suLi5kLGRlbGV0ZTohMH06ZCkpfSk7cmV0dXJufXNldFRpbWVvdXQoKCk9Pnt2LmZsdXNoU3luYygoKT0+e1ExKChjKT0+e2xldCBkPWMuZmluZEluZGV4KChuKT0+bi5pZD09PW8uaWQpO2lmKGQhPT0tMSlyZXR1cm5bLi4uYy5zbGljZSgwLGQpLHsuLi5jW2RdLC4uLm99LC4uLmMuc2xpY2UoZCsxKV07cmV0dXJuW28sLi4uY119KX0pfSl9KX0sW1NdKSx2LnVzZUVmZmVjdCgoKT0+e2lmKFUhPT0ic3lzdGVtIil7ZihVKTtyZXR1cm59aWYoVT09PSJzeXN0ZW0iKWlmKHdpbmRvdy5tYXRjaE1lZGlhJiZ3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpLm1hdGNoZXMpZigiZGFyayIpO2Vsc2UgZigibGlnaHQiKTtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm47bGV0IG89d2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKTt0cnl7by5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCh7bWF0Y2hlczpjfSk9PntpZihjKWYoImRhcmsiKTtlbHNlIGYoImxpZ2h0Iil9KX1jYXRjaChjKXtvLmFkZExpc3RlbmVyKCh7bWF0Y2hlczpkfSk9Pnt0cnl7aWYoZClmKCJkYXJrIik7ZWxzZSBmKCJsaWdodCIpfWNhdGNoKG4pe2NvbnNvbGUuZXJyb3Iobil9fSl9fSxbVV0pLHYudXNlRWZmZWN0KCgpPT57aWYoUy5sZW5ndGg8PTEpcighMSl9LFtTXSksdi51c2VFZmZlY3QoKCk9PntsZXQgbz0oYyk9Pnt2YXIgZDtpZihxLmV2ZXJ5KChiKT0+Y1tiXXx8Yy5jb2RlPT09Yikpe3ZhciBZMTtyKCEwKSwoWTE9VTEuY3VycmVudCk9PW51bGx8fFkxLmZvY3VzKCl9aWYoYy5jb2RlPT09IkVzY2FwZSImJihkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09VTEuY3VycmVudHx8KChkPVUxLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpkLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSkpcighMSl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixvKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsbyl9LFtxXSksdi51c2VFZmZlY3QoKCk9PntpZihVMS5jdXJyZW50KXJldHVybigpPT57aWYoQjEuY3VycmVudClCMS5jdXJyZW50LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksQjEuY3VycmVudD1udWxsLEYxLmN1cnJlbnQ9ITF9fSxbVTEuY3VycmVudF0pLHYuY3JlYXRlRWxlbWVudCgic2VjdGlvbiIse3JlZjpRLCJhcmlhLWxhYmVsIjpgJHt3fSAke1gxfWAsdGFiSW5kZXg6LTEsImFyaWEtbGl2ZSI6InBvbGl0ZSIsImFyaWEtcmVsZXZhbnQiOiJhZGRpdGlvbnMgdGV4dCIsImFyaWEtYXRvbWljIjoiZmFsc2UiLHN1cHByZXNzSHlkcmF0aW9uV2FybmluZzohMH0saC5tYXAoKG8sYyk9Pnt2YXIgZDtsZXRbbixZMV09by5zcGxpdCgiLSIpO2lmKCFnLmxlbmd0aClyZXR1cm4gbnVsbDtyZXR1cm4gdi5jcmVhdGVFbGVtZW50KCJvbCIse2tleTpvLGRpcjpPPT09ImF1dG8iP1c3KCk6Tyx0YWJJbmRleDotMSxyZWY6VTEsY2xhc3NOYW1lOkIsImRhdGEtc29ubmVyLXRvYXN0ZXIiOiEwLCJkYXRhLXNvbm5lci10aGVtZSI6aSwiZGF0YS15LXBvc2l0aW9uIjpuLCJkYXRhLXgtcG9zaXRpb24iOlkxLHN0eWxlOnsiLS1mcm9udC10b2FzdC1oZWlnaHQiOmAkeygoZD1JWzBdKT09bnVsbD92b2lkIDA6ZC5oZWlnaHQpfHwwfXB4YCwiLS13aWR0aCI6YCR7YVF9cHhgLCItLWdhcCI6YCR7eX1weGAsLi4uTCwuLi5RWihOLHopfSxvbkJsdXI6KGIpPT57aWYoRjEuY3VycmVudCYmIWIuY3VycmVudFRhcmdldC5jb250YWlucyhiLnJlbGF0ZWRUYXJnZXQpKXtpZihGMS5jdXJyZW50PSExLEIxLmN1cnJlbnQpQjEuY3VycmVudC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLEIxLmN1cnJlbnQ9bnVsbH19LG9uRm9jdXM6KGIpPT57aWYoYi50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmYi50YXJnZXQuZGF0YXNldC5kaXNtaXNzaWJsZT09PSJmYWxzZSIpcmV0dXJuO2lmKCFGMS5jdXJyZW50KUYxLmN1cnJlbnQ9ITAsQjEuY3VycmVudD1iLnJlbGF0ZWRUYXJnZXR9LG9uTW91c2VFbnRlcjooKT0+cighMCksb25Nb3VzZU1vdmU6KCk9PnIoITApLG9uTW91c2VMZWF2ZTooKT0+e2lmKCFNMSlyKCExKX0sb25EcmFnRW5kOigpPT5yKCExKSxvblBvaW50ZXJEb3duOihiKT0+e2lmKGIudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmIudGFyZ2V0LmRhdGFzZXQuZGlzbWlzc2libGU9PT0iZmFsc2UiKXJldHVybjtKMSghMCl9LG9uUG9pbnRlclVwOigpPT5KMSghMSl9LGcuZmlsdGVyKChiKT0+IWIucG9zaXRpb24mJmM9PT0wfHxiLnBvc2l0aW9uPT09bykubWFwKChiLGopPT57dmFyIE4xLEMxO3JldHVybiB2LmNyZWF0ZUVsZW1lbnQoSlose2tleTpiLmlkLGljb25zOkUsaW5kZXg6aix0b2FzdDpiLGRlZmF1bHRSaWNoQ29sb3JzOkgsZHVyYXRpb246KE4xPUM9PW51bGw/dm9pZCAwOkMuZHVyYXRpb24pIT1udWxsP04xOkYsY2xhc3NOYW1lOkM9PW51bGw/dm9pZCAwOkMuY2xhc3NOYW1lLGRlc2NyaXB0aW9uQ2xhc3NOYW1lOkM9PW51bGw/dm9pZCAwOkMuZGVzY3JpcHRpb25DbGFzc05hbWUsaW52ZXJ0OkssdmlzaWJsZVRvYXN0czprLGNsb3NlQnV0dG9uOihDMT1DPT1udWxsP3ZvaWQgMDpDLmNsb3NlQnV0dG9uKSE9bnVsbD9DMTpHLGludGVyYWN0aW5nOk0xLHBvc2l0aW9uOm8sc3R5bGU6Qz09bnVsbD92b2lkIDA6Qy5zdHlsZSx1bnN0eWxlZDpDPT1udWxsP3ZvaWQgMDpDLnVuc3R5bGVkLGNsYXNzTmFtZXM6Qz09bnVsbD92b2lkIDA6Qy5jbGFzc05hbWVzLGNhbmNlbEJ1dHRvblN0eWxlOkM9PW51bGw/dm9pZCAwOkMuY2FuY2VsQnV0dG9uU3R5bGUsYWN0aW9uQnV0dG9uU3R5bGU6Qz09bnVsbD92b2lkIDA6Qy5hY3Rpb25CdXR0b25TdHlsZSxjbG9zZUJ1dHRvbkFyaWFMYWJlbDpDPT1udWxsP3ZvaWQgMDpDLmNsb3NlQnV0dG9uQXJpYUxhYmVsLHJlbW92ZVRvYXN0OlcxLHRvYXN0czpnLmZpbHRlcigocCk9PnAucG9zaXRpb249PWIucG9zaXRpb24pLGhlaWdodHM6SS5maWx0ZXIoKHApPT5wLnBvc2l0aW9uPT1iLnBvc2l0aW9uKSxzZXRIZWlnaHRzOnUsZXhwYW5kQnlEZWZhdWx0OlYsZ2FwOnksZXhwYW5kZWQ6WjEsc3dpcGVEaXJlY3Rpb25zOkouc3dpcGVEaXJlY3Rpb25zfSl9KSl9KSl9KTt2YXIgWlo9e3pJbmRleDoyMTQ3NDgzNjQ3LCItLW5vcm1hbC1iZyI6InZhcigtLXNlcnZlLXNpbS1wYW5lbCkiLCItLW5vcm1hbC1ib3JkZXIiOlQxKDAuMTIpLCItLW5vcm1hbC10ZXh0IjpkMSgwLjkpLCItLWJvcmRlci1yYWRpdXMiOiI4cHgiLCItLXdpZHRoIjoiMzIwcHgifTtmdW5jdGlvbiBWMyh7Y29sb3I6JH0pe3JldHVybiBYKCJzcGFuIix7ImRhdGEtdGVzdGlkIjoicGxhaW4tdG9hc3QtZG90IixzdHlsZTp7ZGlzcGxheToiYmxvY2siLHdpZHRoOjYsaGVpZ2h0OjYsYm9yZGVyUmFkaXVzOjk5OSxiYWNrZ3JvdW5kOiR9fSl9ZnVuY3Rpb24gRDcoKXtsZXR7cmVzb2x2ZWQ6JH09UDUoKTtyZXR1cm4gWChfNyx7dGhlbWU6JCxwb3NpdGlvbjoiYm90dG9tLWNlbnRlciIsdmlzaWJsZVRvYXN0czo0LGdhcDo4LG9mZnNldDp7Ym90dG9tOjI0fSxjbGFzc05hbWU6InNlcnZlLXNpbS10b2FzdGVyIixpY29uczp7ZXJyb3I6WChWMyx7Y29sb3I6InZhcigtLXNlcnZlLXNpbS1kYW5nZXIpIn0pLHN1Y2Nlc3M6WChWMyx7Y29sb3I6InZhcigtLXNlcnZlLXNpbS1zdWNjZXNzKSJ9KSx3YXJuaW5nOlgoVjMse2NvbG9yOiJ2YXIoLS1zZXJ2ZS1zaW0td2FybmluZykifSksaW5mbzpYKFYzLHtjb2xvcjoidmFyKC0tc2VydmUtc2ltLWFjY2VudCkifSl9LHN0eWxlOlpaLGNvbnRhaW5lckFyaWFMYWJlbDoic2VydmUtc2ltIG5vdGlmaWNhdGlvbnMifSl9ZnVuY3Rpb24gVDcoe3RvYXN0OiR9KXtsZXQgSj0kLnN0YXR1cz09PSJlcnJvciIsUT0kLnN0YXR1cz09PSJ1cGxvYWRpbmciLFo9USYmJC5wcm9ncmVzcyE9PW51bGwsSz0kLnByb2dyZXNzIT1udWxsP01hdGgucm91bmQoJC5wcm9ncmVzcyoxMDApOjA7cmV0dXJuIFgoImRpdiIseyJkYXRhLXRlc3RpZCI6InVwbG9hZC10b2FzdCIsY2xhc3NOYW1lOmBmbGV4IHctW21pbigzMjBweCxjYWxjKDEwMHZ3LTMycHgpKV0gZmxleC1jb2wgZ2FwLTEuNSBweC0zIHB5LTIgYmctcGFuZWwgYm9yZGVyIGJvcmRlci1pbmsvMTIgcm91bmRlZC1sZyB0ZXh0LWluay05MCB0ZXh0LVsxMnB4XSBmb250LW1vbm8gc2hhZG93LXBvcG92ZXIgJHtKPyJzZWxlY3QtdGV4dCBjdXJzb3ItdGV4dCI6InNlbGVjdC1ub25lIGN1cnNvci1kZWZhdWx0In1gLGNoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIG1pbi13LTAiLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjNzXSIsc3R5bGU6e2JhY2tncm91bmQ6UT8idmFyKC0tc2VydmUtc2ltLWFjY2VudCkiOiQuc3RhdHVzPT09InN1Y2Nlc3MiPyJ2YXIoLS1zZXJ2ZS1zaW0tc3VjY2VzcykiOiJ2YXIoLS1zZXJ2ZS1zaW0tZGFuZ2VyKSJ9fSksWCgic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpbUSYmWiYmYFVwbG9hZGluZyAkeyQubmFtZX3igKYgJHtLfSVgLFEmJiFaJiYoJC5raW5kPT09ImlwYSI/YEluc3RhbGxpbmcgJHskLm5hbWV94oCmYDpgQWRkaW5nICR7JC5uYW1lfeKApmApLCQuc3RhdHVzPT09InN1Y2Nlc3MiJiYoJC5raW5kPT09ImlwYSI/YEluc3RhbGxlZCAkeyQubmFtZX1gOmBBZGRlZCAkeyQubmFtZX0gdG8gUGhvdG9zYCksSiYmYCR7JC5uYW1lfTogJHskLm1lc3NhZ2U/PyJVcGxvYWQgZmFpbGVkIn1gXX0pXX0pLFEmJlgoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgaC1bM3B4XSB3LWZ1bGwgYmctaW5rLzggcm91bmRlZC1bMnB4XSBvdmVyZmxvdy1oaWRkZW4iLGNoaWxkcmVuOlo/WCgiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgYmctYWNjZW50IHJvdW5kZWQtWzJweF0gW3RyYW5zaXRpb246d2lkdGhfMTIwbXNfbGluZWFyXSIsc3R5bGU6e3dpZHRoOmAke0t9JWB9fSk6WCgiZGl2Iix7Y2xhc3NOYW1lOiJzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZSBhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgaC1mdWxsIHctWzQwJV0gYmctYWNjZW50IHJvdW5kZWQtWzJweF0ifSl9KV19KX1mdW5jdGlvbiBJNyh7d2lkdGg6JCxoZWlnaHQ6Six2aXNpYmxlOlF9KXtyZXR1cm4gWCgiZGl2Iix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC0zIGJvdHRvbS0zIHotMjAgcG9pbnRlci1ldmVudHMtbm9uZSBzZWxlY3Qtbm9uZSByb3VuZGVkLWxnIHB4LTIuNSBweS0xIHRleHQtWzExLjVweF0gZm9udC1tb25vIGxlYWRpbmctbm9uZSB0cmFja2luZy13aWRlIHRleHQtaW5rLTk1IGJnLXBhbmVsLWJnLXRyYW5zbHVjZW50IHNoYWRvdy1bMF8xcHhfMnB4X3JnYmEoMCwwLDAsMC4xOCksMF82cHhfMThweF9yZ2JhKDAsMCwwLDAuMjgpLGluc2V0XzBfMF8wXzFweF9jb2xvci1taXgoaW5fc3JnYix2YXIoLS1zZXJ2ZS1zaW0taW5rKV82JSx0cmFuc3BhcmVudCldIGJhY2tkcm9wLWJsdXItbWQgYmFja2Ryb3Atc2F0dXJhdGUtMTUwIHdoaXRlc3BhY2Utbm93cmFwIixzdHlsZTp7b3BhY2l0eTpRPzE6MCx0cmFuc2Zvcm06YHRyYW5zbGF0ZVkoJHtRPzA6NH1weCkgc2NhbGUoJHtRPzE6MC45Nn0pYCx0cmFuc2Zvcm1PcmlnaW46IjEwMCUgMTAwJSIsdHJhbnNpdGlvbjoib3BhY2l0eSAxODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLCB0cmFuc2Zvcm0gMjIwbXMgY3ViaWMtYmV6aWVyKDAuMiwgMC44MiwgMC4yMiwgMSkifSxjaGlsZHJlbjpbTWF0aC5yb3VuZCgkKSwiICIsWCgic3BhbiIse2NsYXNzTmFtZToib3BhY2l0eS02MCBteC0wLjUiLGNoaWxkcmVuOiLDlyJ9KSwiICIsTWF0aC5yb3VuZChKKV19KX1mdW5jdGlvbiBYWigkKXtpZigkLnN0YWdlKXJldHVybmBlcnJvciDCtyAkeyQuc3RhZ2V9YDtpZigkLnN0YXR1cylyZXR1cm5gZXJyb3IgwrcgJHskLnN0YXR1c31gO3JldHVybiJlcnJvciDCtyBubyByZXNwb25zZSJ9ZnVuY3Rpb24gRTcoe3N0cmVhbWluZzokLGVycm9yOkp9KXtsZXQgUT0hJCYmSiE9bnVsbCxaPSQ/InZhcigtLXNlcnZlLXNpbS1zdWNjZXNzKSI6UT8idmFyKC0tc2VydmUtc2ltLWRhbmdlcikiOiJ2YXIoLS1zZXJ2ZS1zaW0taWNvbikiLEs9JD8ibGl2ZSI6UT9YWihKKToiY29ubmVjdGluZyI7cmV0dXJuIFgoInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJzdHJlYW0tc3RhdHVzLXBpbGwiLGNsYXNzTmFtZToiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC1bNXB4XSB0ZXh0LVsxMnB4XSBmb250LW1vbm8gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHdoaXRlc3BhY2Utbm93cmFwIixzdHlsZTp7Y29sb3I6Wn0sdGl0bGU6UT9KLnJlYXNvbjp2b2lkIDAsImFyaWEtbGl2ZSI6InBvbGl0ZSIsY2hpbGRyZW46W1goInNwYW4iLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIixjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMThzX2Vhc2VdIixzdHlsZTp7YmFja2dyb3VuZDpafX0pLEtdfSl9ZnVuY3Rpb24gS1ooJCxKLFEpe2xldCBaPVEubGF0Kk1hdGguUEkvMTgwLEs9KCQtUS5sYXQpKk1hdGguUEkvMTgwO3JldHVybnt4OihKLVEubG5nKSpNYXRoLlBJLzE4MCpNYXRoLmNvcyhaKSo2MzcxMDAwLHo6LUsqNjM3MTAwMH19ZnVuY3Rpb24gWVooJCxKLFEpe2xldCBaPVEubGF0Kk1hdGguUEkvMTgwLEs9LUovNjM3MTAwMCooMTgwL01hdGguUEkpLFk9JC8oNjM3MTAwMCpNYXRoLmNvcyhaKSkqKDE4MC9NYXRoLlBJKTtyZXR1cm57bGF0OlEubGF0K0ssbG5nOlEubG5nK1l9fWZ1bmN0aW9uIHFaKCQsSixRLFosSyl7bGV0IFk9SypLLHE9WSpLLFY9KEcsQixOLHopPT4wLjUqKDIqQisoLUcrTikqSysoMipHLTUqQis0Kk4teikqWSsoLUcrMypCLTMqTit6KSpxKTtyZXR1cm57eDpWKCQueCxKLngsUS54LFoueCksejpWKCQueixKLnosUS56LFoueikseTpWKCQueSxKLnksUS55LFoueSkscmF3QWx0OlYoJC5yYXdBbHQsSi5yYXdBbHQsUS5yYXdBbHQsWi5yYXdBbHQpfX1mdW5jdGlvbiBWWigkLEosUSl7aWYoJC5sZW5ndGg8MilyZXR1cm4gJC5zbGljZSgpO2xldCBaPVtdLEs9JC5sZW5ndGgsWT1RP0s6Sy0xO2ZvcihsZXQgcT0wO3E8WTtxKyspe2xldCBWPSRbUT8ocS0xK0spJUs6TWF0aC5tYXgoMCxxLTEpXSxHPSRbcSVLXSxCPSRbKHErMSklS10sTj0kW1E/KHErMiklSzpNYXRoLm1pbihLLTEscSsyKV0sej1CLngtRy54LFU9Qi56LUcueixIPU1hdGguaHlwb3QoeixVKSxGPU1hdGgubWF4KDIsTWF0aC5jZWlsKEgvSikpO2ZvcihsZXQgTD0wO0w8RjtMKyspe2xldCBrPUwvRjtaLnB1c2gocVooVixHLEIsTixrKSl9fWlmKCFRKVoucHVzaCgkW0stMV0pO3JldHVybiBafWZ1bmN0aW9uIHc3KCQpe2lmKCQud2F5cG9pbnRzLmxlbmd0aDwyKXRocm93IEVycm9yKGBUcmFpbCAkeyQuaWR9IG5lZWRzIGF0IGxlYXN0IDIgd2F5cG9pbnRzYCk7bGV0IEo9e2xhdDokLndheXBvaW50cy5yZWR1Y2UoKEwsayk9Pkwray5sYXQsMCkvJC53YXlwb2ludHMubGVuZ3RoLGxuZzokLndheXBvaW50cy5yZWR1Y2UoKEwsayk9Pkwray5sbmcsMCkvJC53YXlwb2ludHMubGVuZ3RofSxRPSQud2F5cG9pbnRzLm1hcCgoTCk9PkwuYWx0Pz8wKSxaPU1hdGgubWluKC4uLlEpLEs9TWF0aC5tYXgoLi4uUSksWT0kLndheXBvaW50cy5tYXAoKEwpPT57bGV0e3g6ayx6OkN9PUtaKEwubGF0LEwubG5nLEopLE89TC5hbHQ/PzA7cmV0dXJue3g6ayx6OkMseTpPLVoscmF3QWx0Ok99fSkscT1WWihZLDgsISEkLmxvb3ApLFY9W10sRz0wO2ZvcihsZXQgTD0wO0w8cS5sZW5ndGg7TCsrKXtsZXQgaz1xW0xdO2lmKEw+MCl7bGV0IEU9cVtMLTFdO0crPU1hdGguaHlwb3Qoay54LUUueCxrLnotRS56LGsueS1FLnkpfWxldHtsYXQ6Qyxsbmc6T309WVooay54LGsueixKKSx5PU1hdGgubWF4KDAsay55KTtWLnB1c2goe3g6ay54LHo6ay56LHksYXJjOkcsbGF0OkMsbG5nOk99KX1sZXQgQj0xLzAsTj0tMS8wLHo9MS8wLFU9LTEvMCxIPTEvMCxGPS0xLzA7Zm9yKGxldCBMIG9mIFYpe2lmKEwueDxCKUI9TC54O2lmKEwueD5OKU49TC54O2lmKEwuejx6KXo9TC56O2lmKEwuej5VKVU9TC56O2lmKEwueTxIKUg9TC55O2lmKEwueT5GKUY9TC55fXJldHVybnt0cmFpbDokLG9yaWdpbjpKLHBvaW50czpWLHRvdGFsRGlzdGFuY2U6VltWLmxlbmd0aC0xXS5hcmMsYm91bmRzOnt4OltCLE5dLHk6W0gsRl0sejpbeixVXX0scmF3TWluQWx0OloscmF3TWF4QWx0Okt9fWZ1bmN0aW9uIFo1KCQsSil7bGV0IFE9JC50b3RhbERpc3RhbmNlO2lmKFE9PT0wKXJldHVybiAkLnBvaW50c1swXTtsZXQgWj1KO2lmKCQudHJhaWwubG9vcClaPShaJVErUSklUTtlbHNle2lmKFo8PTApcmV0dXJuICQucG9pbnRzWzBdO2lmKFo+PVEpcmV0dXJuICQucG9pbnRzWyQucG9pbnRzLmxlbmd0aC0xXX1sZXQgSz0wLFk9JC5wb2ludHMubGVuZ3RoLTE7d2hpbGUoSysxPFkpe2xldCBOPUsrWT4+PjE7aWYoJC5wb2ludHNbTl0uYXJjPD1aKUs9TjtlbHNlIFk9Tn1sZXQgcT0kLnBvaW50c1tLXSxWPSQucG9pbnRzW1ldLEc9Vi5hcmMtcS5hcmMsQj1HPT09MD8wOihaLXEuYXJjKS9HO3JldHVybnt4OnEueCsoVi54LXEueCkqQix6OnEueisoVi56LXEueikqQix5OnEueSsoVi55LXEueSkqQixhcmM6WixsYXQ6cS5sYXQrKFYubGF0LXEubGF0KSpCLGxuZzpxLmxuZysoVi5sbmctcS5sbmcpKkJ9fWZ1bmN0aW9uIEc4KCQpe3N3aXRjaCgkKXtjYXNlIndhbGsiOnJldHVybiAxLjQ7Y2FzZSJydW4iOnJldHVybiAzO2Nhc2UiY3ljbGUiOnJldHVybiA1LjU7Y2FzZSJkcml2ZSI6cmV0dXJuIDEzLjR9fXZhciBHWj1be2xhdDozNy4zMzI3Mixsbmc6LTEyMi4wMDgzMyxhbHQ6NDl9LHtsYXQ6MzcuMzMzMDksbG5nOi0xMjIuMDA3MzUsYWx0OjQ4fSx7bGF0OjM3LjMzMzczLGxuZzotMTIyLjAwNjYzLGFsdDo0OX0se2xhdDozNy4zMzQ1NCxsbmc6LTEyMi4wMDYyNyxhbHQ6NDl9LHtsYXQ6MzcuMzM1NCxsbmc6LTEyMi4wMDYzMyxhbHQ6NDl9LHtsYXQ6MzcuMzM2MTgsbG5nOi0xMjIuMDA2NzksYWx0OjQ1fSx7bGF0OjM3LjMzNjc1LGxuZzotMTIyLjAwNzU5LGFsdDo0NX0se2xhdDozNy4zMzcwNCxsbmc6LTEyMi4wMDg2MSxhbHQ6NDZ9LHtsYXQ6MzcuMzM2OTgsbG5nOi0xMjIuMDA5NjksYWx0OjQ4fSx7bGF0OjM3LjMzNjYyLGxuZzotMTIyLjAxMDY2LGFsdDo0OH0se2xhdDozNy4zMzU5OCxsbmc6LTEyMi4wMTEzOCxhbHQ6NDl9LHtsYXQ6MzcuMzM1MTcsbG5nOi0xMjIuMDExNzQsYWx0OjUwfSx7bGF0OjM3LjMzNDMxLGxuZzotMTIyLjAxMTY5LGFsdDo1MH0se2xhdDozNy4zMzM1NCxsbmc6LTEyMi4wMTEyMixhbHQ6NTB9LHtsYXQ6MzcuMzMyOTYsbG5nOi0xMjIuMDEwNDIsYWx0OjUxfSx7bGF0OjM3LjMzMjY4LGxuZzotMTIyLjAwOTQsYWx0OjUwfV0sQlo9W3tsYXQ6MzcuODMyMTIsbG5nOi0xMjIuNDgwNjUsYWx0OjMwfSx7bGF0OjM3LjgyOTM3LGxuZzotMTIyLjQ3OTc0LGFsdDozMH0se2xhdDozNy44MjY0OSxsbmc6LTEyMi40Nzk0LGFsdDozMH0se2xhdDozNy44MjM2Mixsbmc6LTEyMi40NzkwNyxhbHQ6NDV9LHtsYXQ6MzcuODIwNzQsbG5nOi0xMjIuNDc4NzMsYWx0OjU5fSx7bGF0OjM3LjgxNzg2LGxuZzotMTIyLjQ3ODM5LGFsdDo2Nn0se2xhdDozNy44MTQ5OCxsbmc6LTEyMi40NzgwNixhbHQ6NjZ9LHtsYXQ6MzcuODEyMTEsbG5nOi0xMjIuNDc3NzIsYWx0OjU4fSx7bGF0OjM3LjgwOTIzLGxuZzotMTIyLjQ3NzM0LGFsdDo0NH0se2xhdDozNy44MDk0OSxsbmc6LTEyMi40NzczLGFsdDo0NX0se2xhdDozNy44MTIzNixsbmc6LTEyMi40Nzc2NSxhbHQ6NTl9LHtsYXQ6MzcuODE1MjQsbG5nOi0xMjIuNDc3OTgsYWx0OjY2fSx7bGF0OjM3LjgxODEyLGxuZzotMTIyLjQ3ODMyLGFsdDo2Nn0se2xhdDozNy44MjEsbG5nOi0xMjIuNDc4NjYsYWx0OjU4fSx7bGF0OjM3LjgyMzg3LGxuZzotMTIyLjQ3OSxhbHQ6NDR9LHtsYXQ6MzcuODI2NzUsbG5nOi0xMjIuNDc5MzMsYWx0OjMwfSx7bGF0OjM3LjgyOTYzLGxuZzotMTIyLjQ3OTY3LGFsdDozMH0se2xhdDozNy44MzIzMyxsbmc6LTEyMi40ODA3MixhbHQ6MzB9XSx6Wj1be2xhdDozNy44ODY2NCxsbmc6LTEyMi42MjU5OSxhbHQ6MTIxfSx7bGF0OjM3Ljg4ODg3LGxuZzotMTIyLjYyMzMyLGFsdDoxMzV9LHtsYXQ6MzcuODkxMTUsbG5nOi0xMjIuNjIxNixhbHQ6MTY0fSx7bGF0OjM3Ljg5MzUzLGxuZzotMTIyLjYxOTIxLGFsdDoxODB9LHtsYXQ6MzcuODk0NjYsbG5nOi0xMjIuNjE1NzcsYWx0OjIyMH0se2xhdDozNy44OTYzMSxsbmc6LTEyMi42MTI2OCxhbHQ6MjczfSx7bGF0OjM3Ljg5OTE3LGxuZzotMTIyLjYxMDk4LGFsdDozMTN9LHtsYXQ6MzcuOTAxNjYsbG5nOi0xMjIuNjA4NTUsYWx0OjM0Mn0se2xhdDozNy45MDE5OSxsbmc6LTEyMi42MDYwMSxhbHQ6NDA4fSx7bGF0OjM3LjkwMzM5LGxuZzotMTIyLjYwNDAxLGFsdDo0NTB9LHtsYXQ6MzcuOTA2NjIsbG5nOi0xMjIuNjAyOTEsYWx0OjQ0MH0se2xhdDozNy45MDk3MSxsbmc6LTEyMi42MDE3MyxhbHQ6NDMyfSx7bGF0OjM3LjkxMjEzLGxuZzotMTIyLjYwMDA3LGFsdDo0MzZ9LHtsYXQ6MzcuOTE0MzksbG5nOi0xMjIuNTk3OCxhbHQ6NDEwfSx7bGF0OjM3LjkxMjg1LGxuZzotMTIyLjU5NTA0LGFsdDo0MjJ9LHtsYXQ6MzcuOTEyNzQsbG5nOi0xMjIuNTkyMDIsYWx0OjQyNX0se2xhdDozNy45MTUsbG5nOi0xMjIuNTkwMzIsYWx0OjQxMn0se2xhdDozNy45MTYzNyxsbmc6LTEyMi41ODkwMyxhbHQ6NDA2fSx7bGF0OjM3LjkxNDgxLGxuZzotMTIyLjU4NTk1LGFsdDozODJ9LHtsYXQ6MzcuOTE3NCxsbmc6LTEyMi41ODM5OCxhbHQ6MzcyfSx7bGF0OjM3LjkxNjQyLGxuZzotMTIyLjU4MjM2LGFsdDozNTJ9LHtsYXQ6MzcuOTE0ODEsbG5nOi0xMjIuNTgwMTEsYWx0OjM0Mn1dLE5aPVt7bGF0OjQwLjc4MjE2LGxuZzotNzMuOTYyNTQsYWx0OjM3fSx7bGF0OjQwLjc4MjIxLGxuZzotNzMuOTYwOTgsYWx0OjM2fSx7bGF0OjQwLjc4MzI4LGxuZzotNzMuOTYwMSxhbHQ6MzZ9LHtsYXQ6NDAuNzg0NCxsbmc6LTczLjk1OTMsYWx0OjM2fSx7bGF0OjQwLjc4NTUsbG5nOi03My45NTg0OCxhbHQ6MzZ9LHtsYXQ6NDAuNzg2NjQsbG5nOi03My45NTc3NCxhbHQ6MzZ9LHtsYXQ6NDAuNzg3OSxsbmc6LTczLjk1NzY0LGFsdDozNn0se2xhdDo0MC43ODg5OCxsbmc6LTczLjk1NzkyLGFsdDozNn0se2xhdDo0MC43ODg2OCxsbmc6LTczLjk1OTUxLGFsdDozN30se2xhdDo0MC43ODg5Nyxsbmc6LTczLjk2MTEyLGFsdDozNn0se2xhdDo0MC43ODgzMyxsbmc6LTczLjk2MjUsYWx0OjM3fSx7bGF0OjQwLjc4ODI4LGxuZzotNzMuOTY0MTYsYWx0OjM3fSx7bGF0OjQwLjc4ODA1LGxuZzotNzMuOTY1NzMsYWx0OjM2fSx7bGF0OjQwLjc4NjkxLGxuZzotNzMuOTY2MzYsYWx0OjM2fSx7bGF0OjQwLjc4NTY2LGxuZzotNzMuOTY2NjUsYWx0OjM2fSx7bGF0OjQwLjc4NDU4LGxuZzotNzMuOTY2MDgsYWx0OjM2fSx7bGF0OjQwLjc4NDAyLGxuZzotNzMuOTY0NTksYWx0OjM2fSx7bGF0OjQwLjc4MzIyLGxuZzotNzMuOTYzMzQsYWx0OjM3fV0sVVo9W3tsYXQ6MzcuNTk2NTksbG5nOi0xMjIuNTAzMTYsYWx0OjR9LHtsYXQ6MzcuNTk1NTUsbG5nOi0xMjIuNTA0MjQsYWx0OjR9LHtsYXQ6MzcuNTk0NTIsbG5nOi0xMjIuNTA1MzQsYWx0OjV9LHtsYXQ6MzcuNTkzMjksbG5nOi0xMjIuNTA1ODgsYWx0Ojl9LHtsYXQ6MzcuNTkyMTIsbG5nOi0xMjIuNTA1MDgsYWx0OjIwfSx7bGF0OjM3LjU5MSxsbmc6LTEyMi41MDQxMyxhbHQ6Mjl9LHtsYXQ6MzcuNTg5NzQsbG5nOi0xMjIuNTA0MTYsYWx0OjQwfSx7bGF0OjM3LjU4ODcsbG5nOi0xMjIuNTA1MjQsYWx0OjUxfSx7bGF0OjM3LjU4NzQ1LGxuZzotMTIyLjUwNDk2LGFsdDo2MH0se2xhdDozNy41ODYyNyxsbmc6LTEyMi41MDQyMixhbHQ6NzF9LHtsYXQ6MzcuNTg1MzksbG5nOi0xMjIuNTA1MzQsYWx0OjgyfSx7bGF0OjM3LjU4NTA1LGxuZzotMTIyLjUwNjk4LGFsdDo5M30se2xhdDozNy41ODUzOSxsbmc6LTEyMi41MDUzNCxhbHQ6ODJ9LHtsYXQ6MzcuNTg2MjcsbG5nOi0xMjIuNTA0MjIsYWx0OjcxfSx7bGF0OjM3LjU4NzQ1LGxuZzotMTIyLjUwNDk2LGFsdDo2MH0se2xhdDozNy41ODg3LGxuZzotMTIyLjUwNTI0LGFsdDo1MX0se2xhdDozNy41ODk3NCxsbmc6LTEyMi41MDQxNixhbHQ6NDB9LHtsYXQ6MzcuNTkxLGxuZzotMTIyLjUwNDEzLGFsdDoyOX0se2xhdDozNy41OTIxMixsbmc6LTEyMi41MDUwOCxhbHQ6MjB9LHtsYXQ6MzcuNTkzMjksbG5nOi0xMjIuNTA1ODgsYWx0Ojl9LHtsYXQ6MzcuNTk0NTIsbG5nOi0xMjIuNTA1MzQsYWx0OjV9LHtsYXQ6MzcuNTk1NTUsbG5nOi0xMjIuNTA0MjQsYWx0OjR9XSxYNT1be2lkOiJhcHBsZS1wYXJrLWxvb3AiLG5hbWU6IkFwcGxlIFBhcmsgTG9vcCIsZGVzY3JpcHRpb246IkN1cGVydGlubyDigKIgZmxhdCByaW5nIHJvYWQiLG1vZGU6IndhbGsiLHdheXBvaW50czpHWixsb29wOiEwfSx7aWQ6ImdvbGRlbi1nYXRlIixuYW1lOiJHb2xkZW4gR2F0ZSBDcm9zc2luZyIsZGVzY3JpcHRpb246IlNhbiBGcmFuY2lzY28g4oCiIGJyaWRnZSByb3VuZC10cmlwIixtb2RlOiJydW4iLHdheXBvaW50czpCWixsb29wOiEwfSx7aWQ6InRhbS1yaWRnZSIsbmFtZToiTXQuIFRhbSBSaWRnZSIsZGVzY3JpcHRpb246IlN0aW5zb24gQmVhY2gg4oCiIFN0ZWVwIFJhdmluZSArIE1hdHQgRGF2aXMgbG9vcCIsbW9kZToid2FsayIsd2F5cG9pbnRzOnpaLGxvb3A6ITB9LHtpZDoiY2VudHJhbC1wYXJrIixuYW1lOiJSZXNlcnZvaXIgTG9vcCIsZGVzY3JpcHRpb246IkNlbnRyYWwgUGFyayDigKIgMi41IGttIixtb2RlOiJydW4iLHdheXBvaW50czpOWixsb29wOiEwfSx7aWQ6InBjaC1wYWNpZmljYSIsbmFtZToiUGFjaWZpYyBDb2FzdCBId3kiLGRlc2NyaXB0aW9uOiJQYWNpZmljYSDigKIgRGV2aWwncyBTbGlkZSByb3VuZC10cmlwIixtb2RlOiJkcml2ZSIsd2F5cG9pbnRzOlVaLGxvb3A6ITB9XTtmdW5jdGlvbiBxMCh7b3BlbjokLG9uT3BlbkNoYW5nZTpKLHN1bW1hcnk6USxjaGlsZHJlbjpaLHN1bW1hcnlDbGFzc05hbWU6Sz0iIixib2R5Q2xhc3NOYW1lOlk9ImZsZXggZmxleC1jb2wgZ2FwLTIuNSBwdC0yLjUiLGNsYXNzTmFtZTpxPSIiLC4uLlZ9KXtyZXR1cm4gWCgiZGV0YWlscyIse29wZW46JCxvblRvZ2dsZTooRyk9PkooRy5jdXJyZW50VGFyZ2V0Lm9wZW4pLGNsYXNzTmFtZTpgbGVtLXNlY3Rpb24gYmctcGFuZWwgcm91bmRlZC1bMTBweF0gcHgtMyBweS0yICR7cX1gLC4uLlYsY2hpbGRyZW46W1goInN1bW1hcnkiLHtjbGFzc05hbWU6YGxlbS10b2dnbGUgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgdGV4dC1pbmstOTAgbWluLWgtWzM2cHhdIGxlYWRpbmctbm9uZSBweS0yLjUgcHgtMSAtbXktMiAtbXgtMSB3LVtjYWxjKDEwMCUrOHB4KV0gJHtLfWAsY2hpbGRyZW46W1EsWChHMix7b3BlbjokfSldfSksWCgiZGl2Iix7Y2xhc3NOYW1lOlksY2hpbGRyZW46Wn0pXX0pfWZ1bmN0aW9uIEczKHtsYWJlbDokLHZhbHVlOkosb3B0aW9uczpRLGRpc2FibGVkOlosb25DaGFuZ2U6SyxjbGFzc05hbWU6WX0pe2xldFtxLFZdPUEoITEpLEc9VChudWxsKSxCPVQobnVsbCksW04sel09QShudWxsKSxVPSgpPT57bGV0IGs9Ry5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZighaylyZXR1cm47eih7dG9wOmsuYm90dG9tKzQsbGVmdDprLmxlZnQsbWluV2lkdGg6ay53aWR0aH0pfTtUMCgoKT0+e2lmKHEpVSgpfSxbcV0pLFQwKCgpPT57aWYoIXF8fCFOKXJldHVybjtsZXQgaz1CLmN1cnJlbnQ7aWYoIWspcmV0dXJuO2xldCBDPTgsTz13aW5kb3cuaW5uZXJXaWR0aC1rLm9mZnNldFdpZHRoLUM7aWYoTi5sZWZ0Pk8peih7Li4uTixsZWZ0Ok1hdGgubWF4KEMsTyl9KX0sW3EsTl0pLF8oKCk9PntpZighcSlyZXR1cm47bGV0IGs9KCk9PlYoITEpLEM9KHkpPT57bGV0IEU9eS50YXJnZXQ7aWYoIUIuY3VycmVudD8uY29udGFpbnMoRSkmJiFHLmN1cnJlbnQ/LmNvbnRhaW5zKEUpKWsoKX0sTz0oeSk9PntpZighQi5jdXJyZW50Py5jb250YWlucyh5LnRhcmdldCkpVSgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsQyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsTywhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsayksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixDKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixPLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixrKX19LFtxXSk7bGV0IEg9VCghMSk7XygoKT0+e2lmKCFxKXtILmN1cnJlbnQ9ITE7cmV0dXJufWlmKCFOfHxILmN1cnJlbnQpcmV0dXJuO2xldCBrPUIuY3VycmVudD8ucXVlcnlTZWxlY3RvckFsbCgiW3JvbGU9b3B0aW9uXSIpO2lmKCFrPy5sZW5ndGgpcmV0dXJuO0guY3VycmVudD0hMDtsZXQgQz1RLmZpbmRJbmRleCgoTyk9Pk8udmFsdWU9PT1KKTtrW01hdGgubWF4KEMsMCldPy5mb2N1cygpfSxbcSxOLFEsSl0pO2xldCBGPShrKT0+e2xldCBDPVsuLi5CLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3JBbGwoIltyb2xlPW9wdGlvbl0iKT8/W11dLE89Qy5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO2lmKGsua2V5PT09IkFycm93RG93biJ8fGsua2V5PT09IkFycm93VXAiKXtrLnByZXZlbnREZWZhdWx0KCk7bGV0IHk9ay5rZXk9PT0iQXJyb3dEb3duIj9NYXRoLm1pbihPKzEsQy5sZW5ndGgtMSk6TWF0aC5tYXgoTy0xLDApO0NbeV0/LmZvY3VzKCl9ZWxzZSBpZihrLmtleT09PSJFc2NhcGUiKWsucHJldmVudERlZmF1bHQoKSxWKCExKSxHLmN1cnJlbnQ/LmZvY3VzKCl9LEw9US5maW5kKChrKT0+ay52YWx1ZT09PUopO3JldHVybiBYKEsxLHtjaGlsZHJlbjpbWCgiYnV0dG9uIix7cmVmOkcsdHlwZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6JCwiYXJpYS1oYXNwb3B1cCI6Imxpc3Rib3giLCJhcmlhLWV4cGFuZGVkIjpxLGRpc2FibGVkOlosb25DbGljazooKT0+Vigoayk9PiFrKSxjbGFzc05hbWU6YHRleHQtbGVmdCBmb250LVtpbmhlcml0XSBjdXJzb3ItcG9pbnRlciBkaXNhYmxlZDpjdXJzb3ItZGVmYXVsdCAke1k/PyIifWAsY2hpbGRyZW46WCgic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgdHJ1bmNhdGUiLGNoaWxkcmVuOkw/LmxhYmVsPz9KfSl9KSxxJiZOJiZ5MyhYKCJkaXYiLHtyZWY6Qixyb2xlOiJsaXN0Ym94IiwiYXJpYS1sYWJlbCI6JCxvbktleURvd246RixzdHlsZTp7dG9wOk4udG9wLGxlZnQ6Ti5sZWZ0LG1pbldpZHRoOk4ubWluV2lkdGh9LGNsYXNzTmFtZToiZml4ZWQgbWF4LWgtOTAgb3ZlcmZsb3cteS1hdXRvIGJnLXBhbmVsIGJvcmRlciBib3JkZXItaW5rLzEyIHJvdW5kZWQtWzEwcHhdIHAtMSBzaGFkb3ctcG9wb3ZlciB0ZXh0LVsxMnB4XSB0ZXh0LWluay05MCB6LTUwIixjaGlsZHJlbjpRLm1hcCgoayk9PlgoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIscm9sZToib3B0aW9uIiwiYXJpYS1zZWxlY3RlZCI6ay52YWx1ZT09PUosb25DbGljazooKT0+e0soay52YWx1ZSksVighMSksRy5jdXJyZW50Py5mb2N1cygpfSxjbGFzc05hbWU6YGJsb2NrIHctZnVsbCB0ZXh0LWxlZnQgZm9udC1baW5oZXJpdF0gcHgtMi41IHB5LTEgcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciB3aGl0ZXNwYWNlLW5vd3JhcCB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1pbmsvOCBmb2N1cy12aXNpYmxlOmJnLWluay84IG91dGxpbmUtbm9uZSAke2sudmFsdWU9PT1KPyJ0ZXh0LWFjY2VudCI6IiJ9YCxjaGlsZHJlbjprLmxhYmVsfSxrLnZhbHVlKSl9KSxkb2N1bWVudC5ib2R5KV19KX12YXIgTFo9NjUwLEI4PVsxLDIsNSwyMF0sYjc9MTAwMCx6OD17c3RhdHVzOiJpZGxlIixhcmM6MCxlbGFwc2VkTXM6MH07ZnVuY3Rpb24gdjcoe3VkaWQ6JCxob3N0Okp9KXtsZXRbUSxaXT1BKCExKSxbSyxZXT1BKFg1WzBdLmlkKSxbcSxWXT1BKFg1WzBdLm1vZGUpLFtHLEJdPUEoMSksW04sel09QSh6OCksW1UsSF09QShudWxsKSxGPVIxKCgpPT5YNS5maW5kKChmKT0+Zi5pZD09PUspPz9YNVswXSxbS10pLEw9UjEoKCk9Pnc3KEYpLFtGXSksaz1UKDApLEM9VCgiaWRsZSIpLE89VChHOChxKSpHKSx5PVQoMCksRT1UKEwpLHc9VChudWxsKTtfKCgpPT57Ty5jdXJyZW50PUc4KHEpKkd9LFtxLEddKTtsZXQgUz1UKG51bGwpO18oKCk9PntsZXQgZj1FLmN1cnJlbnQsVTE9ay5jdXJyZW50O2lmKEUuY3VycmVudD1MLGYmJmYhPT1MKVMuY3VycmVudD1DWihmLFUxLEwscGVyZm9ybWFuY2Uubm93KCkpO2suY3VycmVudD0wLHkuY3VycmVudD0wLEMuY3VycmVudD0iaWRsZSIsdy5jdXJyZW50PW51bGwseih6OCl9LFtMXSk7bGV0IFExPVQoMCksZz1UKG51bGwpLGg9VChudWxsKSx7cmVzb2x2ZWQ6SX09UDUoKSx1PVQoVThbSV0pO3UuY3VycmVudD1VOFtJXSxfKCgpPT57bGV0IGY9MCxVMT0oWDEpPT57bGV0IEIxPWcuY3VycmVudCxGMT1CMT09bnVsbD8xNjpNYXRoLm1pbig2NCxYMS1CMSk7aWYoZy5jdXJyZW50PVgxLFExLmN1cnJlbnQ9KFExLmN1cnJlbnQrRjEqMC4wMDAxMiklKE1hdGguUEkqMiksQy5jdXJyZW50PT09InBsYXlpbmciKXtsZXQgbz1PLmN1cnJlbnQqRjEvMTAwMDtrLmN1cnJlbnQrPW8seS5jdXJyZW50Kz1GMTtsZXQgYz1FLmN1cnJlbnQudG90YWxEaXN0YW5jZTtpZighRS5jdXJyZW50LnRyYWlsLmxvb3AmJmsuY3VycmVudD49YylrLmN1cnJlbnQ9YyxDLmN1cnJlbnQ9InBhdXNlZCIseih7c3RhdHVzOiJwYXVzZWQiLGFyYzpjLGVsYXBzZWRNczp5LmN1cnJlbnR9KX1sZXQgVzE9aC5jdXJyZW50O2lmKFcxKXtsZXQgbz1FLmN1cnJlbnQsYz1udWxsLGQ9Uy5jdXJyZW50O2lmKGQpe2xldCBuPShYMS1kLnN0YXJ0TXMpL0xaO2lmKG4+PTEpUy5jdXJyZW50PW51bGw7ZWxzZXtsZXQgWTE9T1oobik7bz1BWihkLFkxKSxjPXt4OmQucHJldk1hcmtlci54KyhkLm5leHRNYXJrZXIueC1kLnByZXZNYXJrZXIueCkqWTEseTpkLnByZXZNYXJrZXIueSsoZC5uZXh0TWFya2VyLnktZC5wcmV2TWFya2VyLnkpKlkxLHo6ZC5wcmV2TWFya2VyLnorKGQubmV4dE1hcmtlci56LWQucHJldk1hcmtlci56KSpZMX19fU1aKFcxLG8say5jdXJyZW50LFExLmN1cnJlbnQsWDEsQy5jdXJyZW50PT09InBsYXlpbmciLGMsdS5jdXJyZW50KX1mPXJlcXVlc3RBbmltYXRpb25GcmFtZShVMSl9O3JldHVybiBmPXJlcXVlc3RBbmltYXRpb25GcmFtZShVMSksKCk9PmNhbmNlbEFuaW1hdGlvbkZyYW1lKGYpfSxbXSksXygoKT0+e2xldCBmPXNldEludGVydmFsKCgpPT57aWYoQy5jdXJyZW50PT09InBsYXlpbmciKXooe3N0YXR1czoicGxheWluZyIsYXJjOmsuY3VycmVudCxlbGFwc2VkTXM6eS5jdXJyZW50fSl9LDI1MCk7cmV0dXJuKCk9PmNsZWFySW50ZXJ2YWwoZil9LFtdKSxfKCgpPT57aWYoTi5zdGF0dXMhPT0icGxheWluZyIpcmV0dXJuO2xldCBmPSExLFUxPTAsWDE9bnVsbCxCMT1hc3luYygpPT57aWYoZnx8WDEpcmV0dXJuO2xldCBXMT1EYXRlLm5vdygpO2lmKFcxLVUxPGI3KXJldHVybjtVMT1XMTtsZXQgbz1aNShFLmN1cnJlbnQsay5jdXJyZW50KTtYMT1KKCJsb2NhdGlvbiIse3VkaWQ6JCxsYXQ6by5sYXQsbG5nOm8ubG5nfSkudGhlbigoYyk9PntpZihmKXJldHVybjtpZihjLmV4aXRDb2RlIT09MClIKGo3KGMuc3RkZXJyKXx8InNpbWN0bCBsb2NhdGlvbiBzZXQgZmFpbGVkIik7ZWxzZSBIKG51bGwpfSkuY2F0Y2goKGMpPT57aWYoIWYpSChjIGluc3RhbmNlb2YgRXJyb3I/Yy5tZXNzYWdlOlN0cmluZyhjKSl9KS5maW5hbGx5KCgpPT57WDE9bnVsbH0pfTtCMSgpO2xldCBGMT1zZXRJbnRlcnZhbChCMSxiNyk7cmV0dXJuKCk9PntmPSEwLGNsZWFySW50ZXJ2YWwoRjEpfX0sW04uc3RhdHVzLCQsSl0pO2xldCBaMT1QKCgpPT57aWYoQy5jdXJyZW50PT09InBsYXlpbmciKXtDLmN1cnJlbnQ9InBhdXNlZCIseigoZik9Pih7Li4uZixzdGF0dXM6InBhdXNlZCJ9KSk7cmV0dXJufWlmKGsuY3VycmVudD49RS5jdXJyZW50LnRvdGFsRGlzdGFuY2UmJiFFLmN1cnJlbnQudHJhaWwubG9vcClrLmN1cnJlbnQ9MCx5LmN1cnJlbnQ9MDtpZih3LmN1cnJlbnQ9PW51bGwpe2xldCBmPVo1KEUuY3VycmVudCxrLmN1cnJlbnQpO3cuY3VycmVudD17bGF0OmYubGF0LGxuZzpmLmxuZ319Qy5jdXJyZW50PSJwbGF5aW5nIix6KChmKT0+KHsuLi5mLHN0YXR1czoicGxheWluZyIsYXJjOmsuY3VycmVudCxlbGFwc2VkTXM6eS5jdXJyZW50fSkpfSxbXSkscj1QKCgpPT57Qy5jdXJyZW50PSJpZGxlIixrLmN1cnJlbnQ9MCx5LmN1cnJlbnQ9MCx6KHo4KTtsZXQgZj13LmN1cnJlbnQ7dy5jdXJyZW50PW51bGw7bGV0IFUxPWY/e3VkaWQ6JCxsYXQ6Zi5sYXQsbG5nOmYubG5nfTp7dWRpZDokfTtKKCJsb2NhdGlvbiIsVTEpLnRoZW4oKFgxKT0+e2lmKFgxLmV4aXRDb2RlIT09MClIKGo3KFgxLnN0ZGVycil8fG51bGwpO2Vsc2UgSChudWxsKX0pfSxbSiwkXSksTTE9UCgoZik9PntZKGYpO2xldCBVMT1YNS5maW5kKChYMSk9PlgxLmlkPT09Zik7aWYoVTEpVihVMS5tb2RlKX0sW10pO18oKCk9PigpPT57aWYoQy5jdXJyZW50PT09ImlkbGUiKXJldHVybjtsZXQgZj13LmN1cnJlbnQsVTE9Zj97dWRpZDokLGxhdDpmLmxhdCxsbmc6Zi5sbmd9Ont1ZGlkOiR9O0ooImxvY2F0aW9uIixVMSkuY2F0Y2goKCk9Pnt9KX0sW0osJF0pO2xldCBKMT1OLnN0YXR1cz09PSJwbGF5aW5nIixpPUoxP2Ake0w4KE4uYXJjKX0gwrcgJHt4NyhOLmVsYXBzZWRNcyl9YDpMOChMLnRvdGFsRGlzdGFuY2UpO3JldHVybiBYKHEwLHtvcGVuOlEsb25PcGVuQ2hhbmdlOlosc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fbWlubWF4KDAsMWZyKV9hdXRvXSBbY29udGFpbmVyLXR5cGU6aW5saW5lLXNpemVdIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6WChLMSx7Y2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC1pbmstNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJMb2NhdGlvbiJ9KSxRP1goInNwYW4iLHsiZGF0YS1sb2NhdGlvbi1zdGF0dXMiOiEwLGNsYXNzTmFtZToibWluLXctMCB0ZXh0LVsxMXB4XSB0ZXh0LWluay01NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUgd2hpdGVzcGFjZS1ub3dyYXAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgbWF4LXctZnVsbCIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6InNpemUtMS41IHJvdW5kZWQtZnVsbCBzaHJpbmstMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMnMsYm94LXNoYWRvd18wLjJzXSIsc3R5bGU6e2JhY2tncm91bmQ6SjE/InZhcigtLXNlcnZlLXNpbS1zdWNjZXNzKSI6TC50b3RhbERpc3RhbmNlPjA/VDEoMC4zKToidHJhbnNwYXJlbnQiLGJveFNoYWRvdzpKMT8iMCAwIDZweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tc2VydmUtc2ltLXN1Y2Nlc3MpIDcwJSwgdHJhbnNwYXJlbnQpIjoibm9uZSJ9fSksWCgic3BhbiIse2NsYXNzTmFtZToibWluLXctMCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyIsY2hpbGRyZW46aX0pLCFKMSYmWCgic3BhbiIseyJkYXRhLWxvY2F0aW9uLXN0YXR1cy10b3RhbCI6ITAsY2xhc3NOYW1lOiJzaHJpbmstMCIsY2hpbGRyZW46InRvdGFsIn0pXX0pOlgoInNwYW4iLHt9KV19KSxjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIixjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBibG9jayIsY2hpbGRyZW46W1goRzMse2xhYmVsOiJUcmFpbCIsdmFsdWU6SyxvbkNoYW5nZTpNMSxvcHRpb25zOlg1Lm1hcCgoZik9Pih7dmFsdWU6Zi5pZCxsYWJlbDpmLm5hbWV9KSksY2xhc3NOYW1lOiJiZy1pbmsvWzAuMDRdIGJvcmRlciBib3JkZXItaW5rLzggcm91bmRlZC1tZCB0ZXh0LWluay05MCB0ZXh0LVsxMnB4XSBweS0xLjUgcHItWzI2cHhdIHBsLTIgdy1mdWxsIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsYm9yZGVyLWNvbG9yXzAuMTJzXSBob3ZlcjpiZy1pbmsvWzAuMDddIGhvdmVyOmJvcmRlci1pbmsvMTYgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOmJnLWluay9bMC4wOF0gZm9jdXM6Ym9yZGVyLWluay8yNCJ9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC1bOXB4XSB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgcG9pbnRlci1ldmVudHMtbm9uZSBmbGV4IGl0ZW1zLWNlbnRlciIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46WChHMix7b3BlbjohMX0pfSldfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMHB4XSB0ZXh0LWluay00NSIsY2hpbGRyZW46Ri5kZXNjcmlwdGlvbn0pXX0pLFgoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIHJvdW5kZWQtWzEwcHhdIG92ZXJmbG93LWhpZGRlbiBib3JkZXIgYm9yZGVyLWluay9bMC4wNl0gW2FzcGVjdC1yYXRpbzoxNi8xMV0iLHN0eWxlOntiYWNrZ3JvdW5kOlU4W0ldLmJhY2tncm91bmRPdXRlcn0sY2hpbGRyZW46W1goImNhbnZhcyIse3JlZjpoLGNsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBibG9jayJ9KSxYKGtaLHtwcmVwYXJlZDpMfSldfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyXzFmcl8xZnJdIGdhcC0xLjUiLGNoaWxkcmVuOltYKE44LHtsYWJlbDoiRGlzdGFuY2UiLHZhbHVlOkw4KE4uYXJjKX0pLFgoTjgse2xhYmVsOiJQYWNlIix2YWx1ZTpQWihPLmN1cnJlbnQpfSksWChOOCx7bGFiZWw6IkVsYXBzZWQiLHZhbHVlOng3KE4uZWxhcHNlZE1zKX0pXX0pLFgoImRpdiIse2NsYXNzTmFtZToiZmxleCBnYXAtMS41IixjaGlsZHJlbjpbWCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOloxLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdICR7SjE/ImJnLWluay9bMC4xNl0gdGV4dC1pbmsgZW5hYmxlZDpob3ZlcjpiZy1pbmsvWzAuMjJdIjoiYmctc3VjY2Vzcy1lbWVyYWxkIHRleHQtb24tc3VjY2VzcyBlbmFibGVkOmhvdmVyOmJyaWdodG5lc3MtWzEuMDhdIn1gLCJhcmlhLXByZXNzZWQiOkoxLHRpdGxlOkoxPyJQYXVzZSI6IlBsYXkiLGNoaWxkcmVuOltKMT9YKGQzLHt9KTpYKEIyLHt9KSxYKCJzcGFuIix7Y2hpbGRyZW46SjE/IlBhdXNlIjoiUGxheSJ9KV19KSxYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6cixjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0zIGJvcmRlciBib3JkZXItaW5rLzEyIHJvdW5kZWQtWzdweF0gdGV4dC1bMTJweF0gZm9udC1tZWRpdW0gYmctdHJhbnNwYXJlbnQgdGV4dC1pbmstODUgY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gZW5hYmxlZDpob3ZlcjpiZy1pbmsvWzAuMDZdIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLWluay8yMCBlbmFibGVkOmhvdmVyOnRleHQtaW5rIGRpc2FibGVkOm9wYWNpdHktNDAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIixkaXNhYmxlZDpOLnN0YXR1cz09PSJpZGxlIiYmTi5hcmM9PT0wLHRpdGxlOiJTdG9wIGFuZCBjbGVhciBzaW11bGF0ZWQgbG9jYXRpb24iLGNoaWxkcmVuOltYKHoyLHt9KSxYKCJzcGFuIix7Y2hpbGRyZW46IlN0b3AifSldfSldfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtcm93IGl0ZW1zLXN0cmV0Y2ggZ2FwLTEuNSIsY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToiZmxleC0xIG1pbi13LTAiLGNoaWxkcmVuOlgoSFose2FyaWFMYWJlbDoiVHJhbnNwb3J0IG1vZGUiLHZhbHVlOnEsb25DaGFuZ2U6KGYpPT5WKGYpLG9wdGlvbnM6W3t2YWx1ZToid2FsayIsbGFiZWw6IldhbGsiLGljb246WChpMyx7fSl9LHt2YWx1ZToicnVuIixsYWJlbDoiUnVuIixpY29uOlgobzMse30pfSx7dmFsdWU6ImN5Y2xlIixsYWJlbDoiQ3ljbGUiLGljb246WChyMyx7fSl9LHt2YWx1ZToiZHJpdmUiLGxhYmVsOiJEcml2ZSIsaWNvbjpYKG4zLHt9KX1dfSl9KSxYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntsZXQgZj1COC5pbmRleE9mKEcpLFUxPUI4WyhmKzEpJUI4Lmxlbmd0aF07QihVMSl9LGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgcHgtMi41IGJvcmRlciByb3VuZGVkLVs3cHhdIGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdIHRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgbWluLXctWzU2cHhdIGFjdGl2ZTpzY2FsZS1bMC45N10gJHtHPjE/ImJnLWluayBib3JkZXItaW5rIHRleHQtaW5rLWludmVyc2UgaG92ZXI6YmctaW5rL1swLjg4XSBob3Zlcjpib3JkZXItaW5rL1swLjg4XSBob3Zlcjp0ZXh0LWluay1pbnZlcnNlIjoiYmctaW5rL1swLjA0XSBib3JkZXItaW5rLzggdGV4dC1pbmstODUgaG92ZXI6YmctaW5rL1swLjA5XSBob3Zlcjpib3JkZXItaW5rLzE4IGhvdmVyOnRleHQtaW5rIn1gLCJhcmlhLWxhYmVsIjpgU3BlZWQgJHtHfcOXIOKAlCB0YXAgdG8gY3ljbGVgLHRpdGxlOmBTcGVlZCAke0d9w5cg4oCUIHRhcCB0byBjeWNsZWAsY2hpbGRyZW46W1goYzMse30pLEc+MSYmWCgic3BhbiIse2NsYXNzTmFtZToiZm9udC1tb25vIFtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXNdIixjaGlsZHJlbjpbRywiw5ciXX0pXX0pXX0pLFUmJlgoImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCIsY2hpbGRyZW46VX0pXX0pfXZhciBOOD1hMChmdW5jdGlvbih7bGFiZWw6Six2YWx1ZTpRfSl7cmV0dXJuIFgoImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IGJnLWluay9bMC4wM10gYm9yZGVyIGJvcmRlci1pbmsvWzAuMDZdIHJvdW5kZWQtbWQgcHktWzVweF0gcHgtWzdweF0gbWluLXctMCIsY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToidGV4dC1bOXB4XSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDZlbV0gdGV4dC1pbmstNDUiLGNoaWxkcmVuOkp9KSxYKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEycHhdIGZvbnQtbW9ubyB0ZXh0LWluayBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46UX0pXX0pfSk7ZnVuY3Rpb24gSFooe3ZhbHVlOiQsb25DaGFuZ2U6SixvcHRpb25zOlEsYXJpYUxhYmVsOlp9KXtyZXR1cm4gWCgiZGl2Iix7cm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpaLGNsYXNzTmFtZToiZmxleCBiZy1pbmsvWzAuMDRdIGJvcmRlciBib3JkZXItaW5rLzggcm91bmRlZC1bN3B4XSBwLTAuNSBnYXAtMC41IixjaGlsZHJlbjpRLm1hcCgoSyk9PntsZXQgWT1LLnZhbHVlPT09JDtyZXR1cm4gWCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT5KKEsudmFsdWUpLGNsYXNzTmFtZTpgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1ub25lIHJvdW5kZWQtWzVweF0gcHktWzVweF0gcHgtMiB0ZXh0LVsxMXB4XSBmb250LW1lZGl1bSBjdXJzb3ItcG9pbnRlciBmb250LVtpbmhlcml0XSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSBtaW4taC1bMjJweF0gJHtZPyJiZy1pbmsvWzAuMTJdIHRleHQtaW5rIjoiYmctdHJhbnNwYXJlbnQgdGV4dC1pbmstNjAgaG92ZXI6YmctaW5rL1swLjA1XSBob3Zlcjp0ZXh0LWluay05MCJ9YCwiYXJpYS1wcmVzc2VkIjpZLCJhcmlhLWxhYmVsIjpLLmljb24/Sy5sYWJlbDp2b2lkIDAsdGl0bGU6Sy5pY29uP0subGFiZWw6dm9pZCAwLGNoaWxkcmVuOksuaWNvbj8/Sy5sYWJlbH0sSy52YWx1ZSl9KX0pfWZ1bmN0aW9uIGtaKHtwcmVwYXJlZDokfSl7aWYoJC5yYXdNYXhBbHQtJC5yYXdNaW5BbHQ8NSlyZXR1cm4gbnVsbDtyZXR1cm4gWChLMSx7Y2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTIgbGVmdC0yLjUgYmctcGFuZWwtb3ZlcmxheSB0ZXh0LWluay04NSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gcHgtMS41IHB5LTAuNSByb3VuZGVkLVs1cHhdIGZsZXggaXRlbXMtY2VudGVyIHRyYWNraW5nLVswLjAyZW1dIGJvcmRlciBib3JkZXItaW5rL1swLjA2XSIsY2hpbGRyZW46W1goYzIse2RpcjoidXAifSksIiAiLFI3KCQucmF3TWF4QWx0KV19KSxYKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0yIHJpZ2h0LTIuNSBiZy1wYW5lbC1vdmVybGF5IHRleHQtaW5rLTg1IHRleHQtWzEwcHhdIGZvbnQtbW9ubyBweC0xLjUgcHktMC41IHJvdW5kZWQtWzVweF0gZmxleCBpdGVtcy1jZW50ZXIgdHJhY2tpbmctWzAuMDJlbV0gYm9yZGVyIGJvcmRlci1pbmsvWzAuMDZdIixjaGlsZHJlbjpbWChjMix7ZGlyOiJkb3duIn0pLCIgIixSNygkLnJhd01pbkFsdCldfSldfSl9dmFyIHk3PTE0MDtmdW5jdGlvbiBTNygkLEope2xldCBRPUFycmF5KEopO2ZvcihsZXQgWj0wO1o8SjtaKyspe2xldCBLPUo9PT0xPzA6Wi8oSi0xKSxZPVo1KCQsSyokLnRvdGFsRGlzdGFuY2UpO1FbWl09e3g6WS54LHk6WS55LHo6WS56fX1yZXR1cm4gUX1mdW5jdGlvbiBDWigkLEosUSxaKXtsZXQgSz0oJC5ib3VuZHMueFswXSskLmJvdW5kcy54WzFdKS8yLFk9KCQuYm91bmRzLnpbMF0rJC5ib3VuZHMuelsxXSkvMixxPSQuYm91bmRzLnlbMF0sVj1NYXRoLm1heCgxLCQuYm91bmRzLnhbMV0tJC5ib3VuZHMueFswXSwkLmJvdW5kcy56WzFdLSQuYm91bmRzLnpbMF0pLEc9KFEuYm91bmRzLnhbMF0rUS5ib3VuZHMueFsxXSkvMixCPShRLmJvdW5kcy56WzBdK1EuYm91bmRzLnpbMV0pLzIsTj1RLmJvdW5kcy55WzBdLFU9TWF0aC5tYXgoMSxRLmJvdW5kcy54WzFdLVEuYm91bmRzLnhbMF0sUS5ib3VuZHMuelsxXS1RLmJvdW5kcy56WzBdKS9WLEY9UzcoJCx5NykubWFwKChTKT0+KHt4OihTLngtSykqVStHLHk6KFMueS1xKSpVK04sejooUy56LVkpKlUrQn0pKSxMPVM3KFEseTcpLGs9KCQudHJhaWwubG9vcHx8US50cmFpbC5sb29wKT8/ITEsQz1GWihGLEwsayksTz1aNSgkLEopLHk9e3g6KE8ueC1LKSpVK0cseTooTy55LXEpKlUrTix6OihPLnotWSkqVStCfSxFPVo1KFEsMCksdz17eDpFLngseTpFLnksejpFLnp9O3JldHVybntmcm9tOiQsdG86USxmcm9tUHRzOkYsdG9QdHM6QyxwcmV2TWFya2VyOnksbmV4dE1hcmtlcjp3LHN0YXJ0TXM6Wn19ZnVuY3Rpb24gRlooJCxKLFEpe2xldCBaPSQubGVuZ3RoLEs9MS8wLFk9MCxxPSExLFY9W0osWy4uLkpdLnJldmVyc2UoKV07Zm9yKGxldCBOPTA7TjxWLmxlbmd0aDtOKyspe2xldCB6PVZbTl0sVT1RP1o6MTtmb3IobGV0IEg9MDtIPFU7SCsrKXtsZXQgRj0wO2ZvcihsZXQgTD0wO0w8WjtMKyspe2xldCBrPSRbTF0sQz16WyhMK0gpJVpdLE89ay54LUMueCx5PWsueS1DLnksRT1rLnotQy56O2lmKEYrPU8qTyt5KnkrRSpFLEY+PUspYnJlYWt9aWYoRjxLKUs9RixZPUgscT1OPT09MX19bGV0IEc9cT9bLi4uSl0ucmV2ZXJzZSgpOkosQj1BcnJheShaKTtmb3IobGV0IE49MDtOPFo7TisrKUJbTl09R1soTitZKSVaXTtyZXR1cm4gQn1mdW5jdGlvbiBBWigkLEope2xldCBRPSQuZnJvbVB0cy5sZW5ndGgsWj1BcnJheShRKSxLPTAsWT1udWxsLHE9MS8wLFY9LTEvMCxHPTEvMCxCPS0xLzAsTj0xLzAsej0tMS8wO2ZvcihsZXQgVT0wO1U8UTtVKyspe2xldCBIPSQuZnJvbVB0c1tVXSxGPSQudG9QdHNbVV0sTD1ILngrKEYueC1ILngpKkosaz1ILnkrKEYueS1ILnkpKkosQz1ILnorKEYuei1ILnopKko7aWYoWSl7bGV0IHk9TC1ZLngsRT1rLVkueSx3PUMtWS56O0srPU1hdGguc3FydCh5KnkrRSpFK3cqdyl9bGV0IE89e3g6TCx5OmssejpDLGFyYzpLLGxhdDowLGxuZzowfTtpZihaW1VdPU8sWT1PLEw8cSlxPUw7aWYoTD5WKVY9TDtpZihrPEcpRz1rO2lmKGs+QilCPWs7aWYoQzxOKU49QztpZihDPnopej1DfXJldHVybnt0cmFpbDokLnRvLnRyYWlsLG9yaWdpbjokLnRvLm9yaWdpbixwb2ludHM6Wix0b3RhbERpc3RhbmNlOkssYm91bmRzOnt4OltxLFZdLHk6W0csQl0sejpbTix6XX0scmF3TWluQWx0OiQudG8ucmF3TWluQWx0KygkLmZyb20ucmF3TWluQWx0LSQudG8ucmF3TWluQWx0KSooMS1KKSxyYXdNYXhBbHQ6JC50by5yYXdNYXhBbHQrKCQuZnJvbS5yYXdNYXhBbHQtJC50by5yYXdNYXhBbHQpKigxLUopfX1mdW5jdGlvbiBPWigkKXtyZXR1cm4gJDwwLjU/MiokKiQ6MS1NYXRoLnBvdygtMiokKzIsMikvMn12YXIgVTg9e2Rhcms6e2JhY2tncm91bmRJbm5lcjoiIzFhMWExZCIsYmFja2dyb3VuZE91dGVyOiIjMGEwYTBjIixkb3RHcmlkOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMDYpIixyaWJib246WyJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIiwicmdiYSgxODAsMTgwLDE4NSwwLjI4KSIsInJnYmEoNDAsNDAsNDUsMC4xOCkiLCJyZ2JhKDAsMCwwLDApIl0sbGluZToiI2ZmZmZmZiIsdHJhdmVsbGVkOiIjZjlkMmE0IixtYXJrZXI6IiNmZmYiLHB1bHNlUmdiOiIyNTUsMjU1LDI1NSJ9LGxpZ2h0OntiYWNrZ3JvdW5kSW5uZXI6IiNmZmZmZmYiLGJhY2tncm91bmRPdXRlcjoiI2U5ZTllZSIsZG90R3JpZDoicmdiYSgwLDAsMCwwLjA3KSIscmliYm9uOlsicmdiYSg2MCw2MCw2NywwLjQpIiwicmdiYSgxMjAsMTIwLDEyOCwwLjIpIiwicmdiYSgyMDAsMjAwLDIwNSwwLjEyKSIsInJnYmEoMjU1LDI1NSwyNTUsMCkiXSxsaW5lOiIjMWMxYzFlIix0cmF2ZWxsZWQ6IiNkOTczMWEiLG1hcmtlcjoiIzFjMWMxZSIscHVsc2VSZ2I6IjAsMCwwIn19O2Z1bmN0aW9uIE1aKCQsSixRLFosSyxZLHEsVil7bGV0IEc9JC5nZXRDb250ZXh0KCIyZCIpO2lmKCFHKXJldHVybjtsZXR7Y2xpZW50V2lkdGg6QixjbGllbnRIZWlnaHQ6Tn09JDtpZihCPT09MHx8Tj09PTApcmV0dXJuO2xldCB6PXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxOjEsVT1NYXRoLnJvdW5kKEIqeiksSD1NYXRoLnJvdW5kKE4qeik7aWYoJC53aWR0aCE9PVV8fCQuaGVpZ2h0IT09SCkkLndpZHRoPVUsJC5oZWlnaHQ9SDtHLnNldFRyYW5zZm9ybSh6LDAsMCx6LDAsMCksRy5jbGVhclJlY3QoMCwwLEIsTik7bGV0IEY9Ry5jcmVhdGVSYWRpYWxHcmFkaWVudChCKjAuNSxOKjAuNTUsTWF0aC5taW4oQixOKSowLjIsQiowLjUsTiowLjU1LE1hdGgubWF4KEIsTikqMC44NSk7Ri5hZGRDb2xvclN0b3AoMCxWLmJhY2tncm91bmRJbm5lciksRi5hZGRDb2xvclN0b3AoMSxWLmJhY2tncm91bmRPdXRlciksRy5maWxsU3R5bGU9RixHLmZpbGxSZWN0KDAsMCxCLE4pLFdaKEcsQixOLFYuZG90R3JpZCk7bGV0e3BvaW50czpMLGJvdW5kczprfT1KO2lmKEwubGVuZ3RoPDIpcmV0dXJuO2xldCBDPTI4Kk1hdGguUEkvMTgwLE89TWF0aC5zaW4oQykseT1NYXRoLmNvcyhDKSxFPU1hdGguc2luKFopLHc9TWF0aC5jb3MoWiksUz0oay54WzBdK2sueFsxXSkvMixRMT0oay56WzBdK2suelsxXSkvMixnPWsueFsxXS1rLnhbMF0saD1rLnpbMV0tay56WzBdLEk9ay55WzFdLWsueVswXSx1PU1hdGgubWF4KGcsaCkqMS4wNSxaMT1NYXRoLm1heChoKnkrSSpPLGcqMC40KSoxLjE1LHI9QiowLjA4LE0xPU4qMC4xOCxKMT1NYXRoLm1pbigoQi1yKjIpL3UsKE4tTTEqMikvWjEpKjEuNDUsaT1JPDE/MTpNYXRoLm1pbigyNCwxNDAvTWF0aC5tYXgoMjAsSSkpLGY9KGMsZCxuKT0+e2xldCBZMT1jLVMsYj1uLVExLGo9WTEqdytiKkUsTjE9LVkxKkUrYip3LEMxPWQqaSxwPUMxKnktTjEqTyxlPUMxKk8rTjEqeTtyZXR1cm57c3g6Qi8yK2oqSjEsc3k6TiowLjU1LXAqSjEsZGVwdGg6ZX19LFUxPTM4LFgxPUwubWFwKChjKT0+e2xldCBkPWYoYy54LGMueSxjLnopLG49ZihjLngsMCxjLnopLFkxPXtzeDpkLnN4LHN5Ok1hdGgubWF4KG4uc3ksZC5zeStVMSksZGVwdGg6bi5kZXB0aH07cmV0dXJue3A6Yyx0b3A6ZCxib3Q6WTF9fSk7Zm9yKGxldCBjPTE7YzxYMS5sZW5ndGg7YysrKXtsZXQgZD1YMVtjLTFdLG49WDFbY10sWTE9Ry5jcmVhdGVMaW5lYXJHcmFkaWVudCgoZC50b3Auc3grbi50b3Auc3gpLzIsKGQudG9wLnN5K24udG9wLnN5KS8yLChkLmJvdC5zeCtuLmJvdC5zeCkvMiwoZC5ib3Quc3krbi5ib3Quc3kpLzIpO1kxLmFkZENvbG9yU3RvcCgwLFYucmliYm9uWzBdKSxZMS5hZGRDb2xvclN0b3AoMC40NSxWLnJpYmJvblsxXSksWTEuYWRkQ29sb3JTdG9wKDAuODUsVi5yaWJib25bMl0pLFkxLmFkZENvbG9yU3RvcCgxLFYucmliYm9uWzNdKSxHLmZpbGxTdHlsZT1ZMSxHLmJlZ2luUGF0aCgpLEcubW92ZVRvKGQudG9wLnN4LGQudG9wLnN5KSxHLmxpbmVUbyhuLnRvcC5zeCxuLnRvcC5zeSksRy5saW5lVG8obi5ib3Quc3gsbi5ib3Quc3kpLEcubGluZVRvKGQuYm90LnN4LGQuYm90LnN5KSxHLmNsb3NlUGF0aCgpLEcuZmlsbCgpfUcuc3Ryb2tlU3R5bGU9Vi5saW5lLEcubGluZVdpZHRoPTEuNixHLmxpbmVDYXA9InJvdW5kIixHLmxpbmVKb2luPSJyb3VuZCIsRy5iZWdpblBhdGgoKTtmb3IobGV0IGM9MDtjPFgxLmxlbmd0aDtjKyspe2xldHt0b3A6ZH09WDFbY107aWYoYz09PTApRy5tb3ZlVG8oZC5zeCxkLnN5KTtlbHNlIEcubGluZVRvKGQuc3gsZC5zeSl9Ry5zdHJva2UoKTtsZXQgQjE9UTtHLnN0cm9rZVN0eWxlPVYudHJhdmVsbGVkLEcubGluZVdpZHRoPTIuMixHLmJlZ2luUGF0aCgpO2xldCBGMT0hMTtmb3IobGV0IGM9MDtjPFgxLmxlbmd0aDtjKyspe2xldHtwOmQsdG9wOm59PVgxW2NdO2lmKGQuYXJjPkIxKWJyZWFrO2lmKCFGMSlHLm1vdmVUbyhuLnN4LG4uc3kpLEYxPSEwO2Vsc2UgRy5saW5lVG8obi5zeCxuLnN5KX1pZihGMSlHLnN0cm9rZSgpO2xldCBXMT1xPz9aNShKLFEpLG89ZihXMS54LFcxLnksVzEueik7aWYoWSl7bGV0IG49SyUyNjAwLzI2MDAsWTE9NCsyMipuLGI9MC4yMiooMS1uKSxqPUcuY3JlYXRlUmFkaWFsR3JhZGllbnQoby5zeCxvLnN5LFkxKjAuNSxvLnN4LG8uc3ksWTEpO2ouYWRkQ29sb3JTdG9wKDAsYHJnYmEoJHtWLnB1bHNlUmdifSwwKWApLGouYWRkQ29sb3JTdG9wKDAuNyxgcmdiYSgke1YucHVsc2VSZ2J9LCR7Yi50b0ZpeGVkKDMpfSlgKSxqLmFkZENvbG9yU3RvcCgxLGByZ2JhKCR7Vi5wdWxzZVJnYn0sMClgKSxHLmZpbGxTdHlsZT1qLEcuYmVnaW5QYXRoKCksRy5hcmMoby5zeCxvLnN5LFkxLDAsTWF0aC5QSSoyKSxHLmZpbGwoKX1HLmZpbGxTdHlsZT1WLm1hcmtlcixHLmJlZ2luUGF0aCgpLEcuYXJjKG8uc3gsby5zeSwzLjgsMCxNYXRoLlBJKjIpLEcuZmlsbCgpfWZ1bmN0aW9uIFdaKCQsSixRLFopeyQuZmlsbFN0eWxlPVo7Zm9yKGxldCBxPTc7cTxRO3ErPTE0KWZvcihsZXQgVj03O1Y8SjtWKz0xNCkkLmJlZ2luUGF0aCgpLCQuYXJjKFYscSwwLjcsMCxNYXRoLlBJKjIpLCQuZmlsbCgpfWZ1bmN0aW9uIEw4KCQpe2lmKCQ8MTAwMClyZXR1cm5gJHskLnRvRml4ZWQoMCl9IG1gO3JldHVybmAkeygkLzEwMDApLnRvRml4ZWQoMil9IGttYH1mdW5jdGlvbiB4NygkKXtsZXQgSj1NYXRoLmZsb29yKCQvMTAwMCksUT1NYXRoLmZsb29yKEovMzYwMCksWj1NYXRoLmZsb29yKEolMzYwMC82MCksSz1KJTYwO2lmKFE+MClyZXR1cm5gJHtRfToke1oudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7Sy50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gO3JldHVybmAke1p9OiR7Sy50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gfWZ1bmN0aW9uIFBaKCQpe2lmKCQ8PTApcmV0dXJuIuKAlCI7aWYoJD43KXJldHVybmAkeygkKjMuNikudG9GaXhlZCgwKX0ga20vaGA7bGV0IEo9MTAwMC8kLFE9TWF0aC5mbG9vcihKLzYwKSxaPU1hdGgucm91bmQoSiU2MCk7cmV0dXJuYCR7UX06JHtaLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS9rbWB9ZnVuY3Rpb24gUjcoJCl7cmV0dXJuYCR7JC50b0ZpeGVkKDApfSBtYH1mdW5jdGlvbiBqNygkKXtsZXQgSj0kLnRyaW0oKTtpZighSilyZXR1cm4iIjtsZXQgUT1KLm1hdGNoKC9SZWFzb246XHMqKC4rKSQvbSk7aWYoUSlyZXR1cm4gUVsxXTtyZXR1cm4gSi5zcGxpdChgCmApLnNsaWNlKC0xKVswXT8/Sn1hc3luYyBmdW5jdGlvbiBIOCgkLEosUSl7bGV0IFo9YXdhaXQgJCgiYXBwRGV0YWlscyIse3VkaWQ6SixidW5kbGVJZDpRfSk7aWYoWi5leGl0Q29kZSE9PTApcmV0dXJue2Vycm9yOlouc3RkZXJyLnRyaW0oKXx8IkFwcCBub3QgZm91bmQgb24gc2ltdWxhdG9yIn07bGV0IEs9KFkpPT50eXBlb2YgWT09PSJzdHJpbmciP1k6dm9pZCAwO3JldHVybnthcHBQYXRoOksoWi5hcHBQYXRoKSxkaXNwbGF5TmFtZTpLKFouZGlzcGxheU5hbWUpLHNob3J0VmVyc2lvbjpLKFouc2hvcnRWZXJzaW9uKSxidW5kbGVWZXJzaW9uOksoWi5idW5kbGVWZXJzaW9uKSxtaW5PUzpLKFoubWluT1MpLGV4ZWN1dGFibGU6SyhaLmV4ZWN1dGFibGUpLGljb25EYXRhVXJsOksoWi5pY29uRGF0YVVybCk/P251bGx9fXZhciBENT1uZXcgTWFwO2Z1bmN0aW9uIGc3KCQsSixRKXtsZXQgWj1gJHtKfToke1F9YCxLPUQ1LmdldChaKTtpZihLIT09dm9pZCAwKXJldHVybiBQcm9taXNlLnJlc29sdmUoSyk7bGV0IFk9SDgoJCxKLFEpLnRoZW4oKHEpPT57bGV0IFY9cS5pY29uRGF0YVVybD8/bnVsbDtyZXR1cm4gRDUuc2V0KFosViksVn0pLmNhdGNoKCgpPT57cmV0dXJuIEQ1LnNldChaLG51bGwpLG51bGx9KTtyZXR1cm4gRDUuc2V0KFosWSksWX1mdW5jdGlvbiBfWigkKXtyZXR1cm4gJC5zdGFydHNXaXRoKCJjb20uYXBwbGUuIil9ZnVuY3Rpb24gRFooJCl7aWYoJD09PSJjb20uYXBwbGUuc3ByaW5nYm9hcmQiKXJldHVybiJTcHJpbmdCb2FyZCI7cmV0dXJuICR9ZnVuY3Rpb24gVFooe2J1bmRsZUlkOiR9KXtsZXQgSj1fWigkKTtyZXR1cm4gWCgiZGl2Iix7ImRhdGEtdGVzdGlkIjpKPyJzeXN0ZW0tYXBwLWljb24iOiJhcHAtaWNvbi1mYWxsYmFjayIsY2xhc3NOYW1lOmB3LTEwIGgtMTAgcm91bmRlZC1bOHB4XSBzaHJpbmstMCBib3JkZXIgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgJHtKPyJib3JkZXItc3lzdGVtLWljb24tYm9yZGVyIGJnLVtsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLHZhcigtLXNlcnZlLXNpbS1zeXN0ZW0taWNvbi1mcm9tKSx2YXIoLS1zZXJ2ZS1zaW0tc3lzdGVtLWljb24tdG8pKV0gdGV4dC1zeXN0ZW0taWNvbi1mZyI6ImJvcmRlci1pbmsvMTAgYmctaW5rL1swLjA2XSB0ZXh0LWluay04MCJ9YCwiYXJpYS1sYWJlbCI6Sj8iU3lzdGVtIGFwcCI6IkFwcCBpY29uIHVuYXZhaWxhYmxlIix0aXRsZTpKPyJTeXN0ZW0gYXBwIjoiQXBwIGljb24gdW5hdmFpbGFibGUiLGNoaWxkcmVuOko/WCgic3ZnIix7cm9sZToiaW1nIix2aWV3Qm94OiIwIDAgMjQgMjQiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2xhc3NOYW1lOiJzaXplLVsxOXB4XSIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpbWCgidGl0bGUiLHtjaGlsZHJlbjoiQXBwbGUifSksWCgicGF0aCIse2Q6Ik0xMi4xNTIgNi44OTZjLS45NDggMC0yLjQxNS0xLjA3OC0zLjk2LTEuMDQtMi4wNC4wMjctMy45MSAxLjE4My00Ljk2MSAzLjAxNC0yLjExNyAzLjY3NS0uNTQ2IDkuMTAzIDEuNTE5IDEyLjA5IDEuMDEzIDEuNDU0IDIuMjA4IDMuMDkgMy43OTIgMy4wMzkgMS41Mi0uMDY1IDIuMDktLjk4NyAzLjkzNS0uOTg3IDEuODMxIDAgMi4zNS45ODcgMy45Ni45NDggMS42MzctLjAyNiAyLjY3Ni0xLjQ4IDMuNjc2LTIuOTQ4IDEuMTU2LTEuNjg4IDEuNjM2LTMuMzI1IDEuNjYyLTMuNDE1LS4wMzktLjAxMy0zLjE4Mi0xLjIyMS0zLjIyLTQuODU3LS4wMjYtMy4wNCAyLjQ4LTQuNDk0IDIuNTk3LTQuNTU5LTEuNDI5LTIuMDktMy42MjMtMi4zMjQtNC4zOS0yLjM3Ni0yLS4xNTYtMy42NzUgMS4wOS00LjYxIDEuMDl6TTE1LjUzIDMuODNjLjg0My0xLjAxMiAxLjQtMi40MjcgMS4yNDUtMy44My0xLjIwNy4wNTItMi42NjIuODA1LTMuNTMyIDEuODE4LS43OC44OTYtMS40NTQgMi4zMzgtMS4yNzMgMy43MTQgMS4zMzguMTA0IDIuNzE1LS42ODggMy41NTktMS43MDEifSldfSk6WChnNSx7c2l6ZToxOSxzdHJva2VXaWR0aDoxLjl9KX0pfWZ1bmN0aW9uIElaKHtidW5kbGVJZDokLGljb25EYXRhVXJsOkp9KXtpZihKKXJldHVybiBYKCJpbWciLHtzcmM6SixjbGFzc05hbWU6InctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIG9iamVjdC1jb3ZlciBib3JkZXIgYm9yZGVyLWluay84IixhbHQ6IiJ9KTtyZXR1cm4gWChUWix7YnVuZGxlSWQ6JH0pfWZ1bmN0aW9uIGg3KHt1ZGlkOiQsY3VycmVudEFwcDpKfSl7bGV0W1EsWl09QShudWxsKSxbSyxZXT1BKCExKTtpZihfKCgpPT57aWYoIUope1oobnVsbCk7cmV0dXJufWxldCBxPSExO3JldHVybiBaKHtidW5kbGVJZDpKLmJ1bmRsZUlkLGlzUmVhY3ROYXRpdmU6Si5pc1JlYWN0TmF0aXZlLHBpZDpKLnBpZCxsb2FkaW5nOiEwfSksSDgoeDEsJCxKLmJ1bmRsZUlkKS50aGVuKChWKT0+e2lmKHEpcmV0dXJuO1ooe2J1bmRsZUlkOkouYnVuZGxlSWQsaXNSZWFjdE5hdGl2ZTpKLmlzUmVhY3ROYXRpdmUscGlkOkoucGlkLGxvYWRpbmc6ITEsLi4uVn0pfSksKCk9PntxPSEwfX0sWyQsSixKPy5idW5kbGVJZCxKPy5waWQsSj8uaXNSZWFjdE5hdGl2ZV0pLCFRKXJldHVybiBYKEVaLHt9KTtyZXR1cm4gWChxMCx7b3BlbjpLLG9uT3BlbkNoYW5nZTpZLHN1bW1hcnlDbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtbGVmdCIsc3VtbWFyeTpYKEsxLHtjaGlsZHJlbjpbWChJWix7YnVuZGxlSWQ6US5idW5kbGVJZCxpY29uRGF0YVVybDpRLmljb25EYXRhVXJsfSksWCh3Wix7YnVuZGxlSWQ6US5idW5kbGVJZCxkaXNwbGF5TmFtZTpRLmRpc3BsYXlOYW1lfSldfSksY2hpbGRyZW46W1EuZXJyb3ImJlgoImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCIsY2hpbGRyZW46US5lcnJvcn0pLFgoImRsIix7Y2xhc3NOYW1lOiJtLTAgZmxleCBmbGV4LWNvbCBnYXAtMS41IixjaGlsZHJlbjpbWChUNSx7bGFiZWw6IlZlcnNpb24iLHZhbHVlOlEuc2hvcnRWZXJzaW9uP2Ake1Euc2hvcnRWZXJzaW9ufSAoJHtRLmJ1bmRsZVZlcnNpb24/PyLigJQifSlgOlEubG9hZGluZz8i4oCmIjoi4oCUIn0pLFgoVDUse2xhYmVsOiJNaW4gaU9TIix2YWx1ZTpRLm1pbk9TPz8oUS5sb2FkaW5nPyLigKYiOiLigJQiKX0pLFgoVDUse2xhYmVsOiJFeGVjdXRhYmxlIix2YWx1ZTpRLmV4ZWN1dGFibGU/PyhRLmxvYWRpbmc/IuKApiI6IuKAlCIpfSksWChUNSx7bGFiZWw6IlBJRCIsdmFsdWU6US5waWQhPW51bGw/U3RyaW5nKFEucGlkKToi4oCUIn0pLFEuaXNSZWFjdE5hdGl2ZSYmWChUNSx7bGFiZWw6IlJlYWN0IE5hdGl2ZSIsdmFsdWU6IlllcyJ9KSxYKFQ1LHtsYWJlbDoiQXBwIHBhdGgiLHZhbHVlOlEuYXBwUGF0aD8/KFEubG9hZGluZz8i4oCmIjoi4oCUIiksbW9ubzohMCxhY3Rpb246US5hcHBQYXRoP3t0aXRsZToiUmV2ZWFsIGluIEZpbmRlciIsb25DbGljazooKT0+e3gxKCJyZXZlYWxBcHAiLHt1ZGlkOiQsYnVuZGxlSWQ6US5idW5kbGVJZH0pfSxpY29uOlgoaDUse3NpemU6MTEsc3Ryb2tlV2lkdGg6Mi4yfSl9OnZvaWQgMH0pXX0pXX0pfWZ1bmN0aW9uIEVaKCl7cmV0dXJuIFgoImRpdiIseyJkYXRhLXRlc3RpZCI6ImFwcC1kZXRlY3Rpb24tc2tlbGV0b24iLGNsYXNzTmFtZToiYmctcGFuZWwgcm91bmRlZC1bMTBweF0gcHgtMyBweS0yIiwiYXJpYS1sYWJlbCI6IldhaXRpbmcgZm9yIGZvcmVncm91bmQgYXBwIixjaGlsZHJlbjpYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtbGVmdCBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6InctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIGJnLWluay9bMC4wOF0ifSksWCgic3BhbiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEgZmxleCBmbGV4LWNvbCBnYXAtMiIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6ImgtMy41IHctWzQ2JV0gcm91bmRlZC1mdWxsIGJnLWluay9bMC4xMl0ifSksWCgic3BhbiIse2NsYXNzTmFtZToiaC0yLjUgdy1bNjglXSByb3VuZGVkLWZ1bGwgYmctaW5rL1swLjA4XSJ9KV19KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJ3LTIuNSBoLTIuNSByb3VuZGVkLWZ1bGwgYmctaW5rL1swLjA4XSJ9KV19KX0pfWZ1bmN0aW9uIHdaKHtidW5kbGVJZDokLGRpc3BsYXlOYW1lOkp9KXtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBsZWFkaW5nLXRpZ2h0IHRleHQtbGVmdCIsY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gZm9udC1zZW1pYm9sZCB0ZXh0LWluay05MCB0cnVuY2F0ZSIsY2hpbGRyZW46Sj8/RFooJCl9KSxYKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtaW5rLTU1IGZvbnQtbW9ubyB0cnVuY2F0ZSIsdGl0bGU6JCxjaGlsZHJlbjokfSldfSl9ZnVuY3Rpb24gVDUoe2xhYmVsOiQsdmFsdWU6Sixtb25vOlEsYWN0aW9uOlp9KXtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOiJncm91cCBmbGV4IGl0ZW1zLWJhc2VsaW5lIGdhcC0yIG1pbi13LTAiLGNoaWxkcmVuOltYKCJkdCIse2NsYXNzTmFtZToibS0wIHRleHQtWzExcHhdIHRleHQtaW5rLTUwIHctMjEgc2hyaW5rLTAiLGNoaWxkcmVuOiR9KSxYKCJkZCIse2NsYXNzTmFtZTpgbS0wIHRleHQtaW5rLTkwIGZsZXgtMSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHJlbGF0aXZlICR7UT8iZm9udC1tb25vIHRleHQtWzExcHhdIjoidGV4dC1bMTJweF0ifWAsdGl0bGU6SixjaGlsZHJlbjpbSixaJiZYKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIHJpZ2h0LTAgYm90dG9tLTAgcGwtNyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3JpZ2h0LHZhcigtLXNlcnZlLXNpbS1wYW5lbC10cmFuc3BhcmVudClfMCUsdmFyKC0tc2VydmUtc2ltLXBhbmVsKV81NSUpXSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTVzX2Vhc2UsdHJhbnNmb3JtXzAuMTVzX2Vhc2VdIG9wYWNpdHktMCB0cmFuc2xhdGUteC0xIHBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZ3JvdXAtaG92ZXI6dHJhbnNsYXRlLXgtMCBncm91cC1ob3Zlcjpwb2ludGVyLWV2ZW50cy1hdXRvIixjaGlsZHJlbjpYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6Wi5vbkNsaWNrLHRpdGxlOloudGl0bGUsImFyaWEtbGFiZWwiOloudGl0bGUsY2xhc3NOYW1lOiJ3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQgdGV4dC1pbmsgY3Vyc29yLXBvaW50ZXIgcC0wIixjaGlsZHJlbjpaLmljb259KX0pXX0pXX0pfXZhciBmNz1be2tleToiY2FtZXJhIixsYWJlbDoiQ2FtZXJhIn0se2tleToibWljcm9waG9uZSIsbGFiZWw6Ik1pY3JvcGhvbmUifSx7a2V5OiJwaG90b3MiLGxhYmVsOiJQaG90b3MifSx7a2V5OiJwaG90b3MtYWRkIixsYWJlbDoiQWRkIHRvIFBob3RvcyJ9LHtrZXk6ImNvbnRhY3RzIixsYWJlbDoiQ29udGFjdHMifSx7a2V5OiJjYWxlbmRhciIsbGFiZWw6IkNhbGVuZGFyIn0se2tleToicmVtaW5kZXJzIixsYWJlbDoiUmVtaW5kZXJzIn0se2tleToibG9jYXRpb24iLGxhYmVsOiJMb2NhdGlvbiJ9LHtrZXk6ImxvY2F0aW9uLWFsd2F5cyIsbGFiZWw6IkxvY2F0aW9uIChBbHdheXMpIn0se2tleToibm90aWZpY2F0aW9ucyIsbGFiZWw6Ik5vdGlmaWNhdGlvbnMifSx7a2V5OiJtb3Rpb24iLGxhYmVsOiJNb3Rpb24ifSx7a2V5OiJtZWRpYS1saWJyYXJ5IixsYWJlbDoiTWVkaWEgTGlicmFyeSJ9LHtrZXk6InNpcmkiLGxhYmVsOiJTaXJpIn1dO2Z1bmN0aW9uIG03KHt1ZGlkOiQsYnVuZGxlSWQ6Sn0pe2xldFtRLFpdPUEoe30pLFtLLFldPUEobnVsbCksW3EsVl09QShudWxsKSxbRyxCXT1BKCExKTtfKCgpPT57Wih7fSksVihudWxsKX0sW0pdKTtsZXQgTj1QKGFzeW5jKFUsSCk9PntpZighSilyZXR1cm47bGV0IEY9YCR7VX06JHtIfWA7WShGKSxWKG51bGwpO3RyeXtsZXQgTD1hd2FpdCB4MSgicGVybWlzc2lvbnMiLHt1ZGlkOiQsYnVuZGxlSWQ6SixhY3Rpb246SCxzZXJ2aWNlOlV9KTtpZihMLmV4aXRDb2RlIT09MCl7VihMLnN0ZGVyci50cmltKCl8fGBzZXJ2ZS1zaW0gcGVybWlzc2lvbnMgZmFpbGVkIChleGl0ICR7TC5leGl0Q29kZX0pYCk7cmV0dXJufVooKGspPT4oey4uLmssW1VdOkg9PT0icmVzZXQiP3ZvaWQgMDpIfSkpfWZpbmFsbHl7WShudWxsKX19LFskLEpdKSx6PVAoYXN5bmMoKT0+e2lmKCFKKXJldHVybjtZKCJfX2FsbF9fIiksVihudWxsKTt0cnl7bGV0IFU9YXdhaXQgeDEoInBlcm1pc3Npb25zIix7dWRpZDokLGJ1bmRsZUlkOkosYWN0aW9uOiJyZXNldCIsc2VydmljZToiYWxsIn0pO2lmKFUuZXhpdENvZGUhPT0wKXtWKFUuc3RkZXJyLnRyaW0oKXx8YHNlcnZlLXNpbSBwZXJtaXNzaW9ucyBmYWlsZWQgKGV4aXQgJHtVLmV4aXRDb2RlfSlgKTtyZXR1cm59Wih7fSl9ZmluYWxseXtZKG51bGwpfX0sWyQsSl0pO2lmKCFKKXJldHVybiBYKGJaLHt9KTtyZXR1cm4gWChxMCx7b3BlbjpHLG9uT3BlbkNoYW5nZTpCLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OlgoSzEse2NoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtaW5rLTUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiUGVybWlzc2lvbnMifSksWCgic3BhbiIse30pXX0pLGNoaWxkcmVuOltxJiZYKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOnF9KSxYKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIixjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJtYXgtaC1bMjYwcHhdIG92ZXJmbG93LXktYXV0byBmbGV4IGZsZXgtY29sIGdhcC0xIHB5LTIgW3Njcm9sbGJhci13aWR0aDp0aGluXSIsY2hpbGRyZW46ZjcubWFwKCh7a2V5OlUsbGFiZWw6SH0pPT57bGV0IEY9UVtVXTtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcHgtMC41IHB5LTEiLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LWluay05MCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46SH0pLFgoImRpdiIse2NsYXNzTmFtZToiZmxleCBnYXAtMC41IGJnLWluay9bMC4wNF0gYm9yZGVyIGJvcmRlci1pbmsvOCByb3VuZGVkLW1kIHAtMC41Iixyb2xlOiJncm91cCIsImFyaWEtbGFiZWwiOkgsY2hpbGRyZW46W1goazgse2FjdGl2ZTpGPT09ImdyYW50IixwZW5kaW5nOks9PT1gJHtVfTpncmFudGAsb25DbGljazooKT0+TihVLCJncmFudCIpLHZhcmlhbnQ6ImdyYW50Iix0aXRsZToiQWxsb3ciLGNoaWxkcmVuOlgobTUse3NpemU6MTEsc3Ryb2tlV2lkdGg6M30pfSksWChrOCx7YWN0aXZlOkY9PT0icmV2b2tlIixwZW5kaW5nOks9PT1gJHtVfTpyZXZva2VgLG9uQ2xpY2s6KCk9Pk4oVSwicmV2b2tlIiksdmFyaWFudDoicmV2b2tlIix0aXRsZToiRGVueSIsY2hpbGRyZW46WChMMCx7c2l6ZToxMSxzdHJva2VXaWR0aDozfSl9KSxYKGs4LHthY3RpdmU6ITEscGVuZGluZzpLPT09YCR7VX06cmVzZXRgLG9uQ2xpY2s6KCk9Pk4oVSwicmVzZXQiKSx2YXJpYW50OiJyZXNldCIsdGl0bGU6IlJlc2V0IixjaGlsZHJlbjpYKCQ1LHtzaXplOjExLHN0cm9rZVdpZHRoOjIuNH0pfSldfSldfSxVKX0pfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNHB4XSBwb2ludGVyLWV2ZW50cy1ub25lIHJvdW5kZWQtdC1bMTBweF0gYmctW2xpbmVhci1ncmFkaWVudCh0b19ib3R0b20sdmFyKC0tc2VydmUtc2ltLXBhbmVsKV8wJSx2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtdHJhbnNwYXJlbnQpXzEwMCUpXSJ9KSxYKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCByaWdodC0wIGgtWzE0cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUgYmctW2xpbmVhci1ncmFkaWVudCh0b190b3AsdmFyKC0tc2VydmUtc2ltLXBhbmVsKV8wJSx2YXIoLS1zZXJ2ZS1zaW0tcGFuZWwtdHJhbnNwYXJlbnQpXzEwMCUpXSJ9KV19KSxYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgganVzdGlmeS1lbmQiLGNoaWxkcmVuOlgoImJ1dHRvbiIse29uQ2xpY2s6eixkaXNhYmxlZDpLPT09Il9fYWxsX18iLGNsYXNzTmFtZToiYmctdHJhbnNwYXJlbnQgYm9yZGVyIGJvcmRlci1pbmsvMTIgdGV4dC1pbmstNzAgdGV4dC1bMTBweF0gcHgtMiBweS1bM3B4XSByb3VuZGVkLVs1cHhdIGN1cnNvci1wb2ludGVyIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNGVtXSIsdGl0bGU6InNlcnZlLXNpbSBwZXJtaXNzaW9ucyByZXNldCBhbGwiLGNoaWxkcmVuOks9PT0iX19hbGxfXyI/IuKApiI6IlJlc2V0IGFsbCJ9KX0pXX0pfWZ1bmN0aW9uIGJaKCl7cmV0dXJuIFgoImRpdiIseyJkYXRhLXRlc3RpZCI6ImFwcC1wZXJtaXNzaW9ucy1sb2FkaW5nIixjbGFzc05hbWU6ImJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIHB4LTMgcHktMiIsImFyaWEtZGlzYWJsZWQiOiJ0cnVlIiwiYXJpYS1idXN5IjoidHJ1ZSIsY2hpbGRyZW46WCgiZGl2Iix7Y2xhc3NOYW1lOiJzZWxlY3Qtbm9uZSB0ZXh0LWluay01NSBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSBncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCBjdXJzb3ItZGVmYXVsdCIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJQZXJtaXNzaW9ucyJ9KSxYKCJzcGFuIix7fSksWCgic3BhbiIseyJkYXRhLXRlc3RpZCI6InBlcm1pc3Npb25zLWxvYWRpbmctaW5kaWNhdG9yIixyb2xlOiJzdGF0dXMiLCJhcmlhLWxhYmVsIjoiTG9hZGluZyBwZXJtaXNzaW9ucyIsY2xhc3NOYW1lOiJzaXplLTIuNSByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1pbmsvMzAgYm9yZGVyLXQtaW5rLzk1IGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjdzX2xpbmVhcl9pbmZpbml0ZV0ifSldfSl9KX1mdW5jdGlvbiBrOCh7YWN0aXZlOiQscGVuZGluZzpKLG9uQ2xpY2s6USx2YXJpYW50OlosdGl0bGU6SyxjaGlsZHJlbjpZfSl7bGV0IHE9Wj09PSJncmFudCI/InZhcigtLXNlcnZlLXNpbS1zdWNjZXNzKSI6Wj09PSJyZXZva2UiPyJ2YXIoLS1zZXJ2ZS1zaW0tZGFuZ2VyKSI6InZhcigtLXNlcnZlLXNpbS1hY2NlbnQpIjtyZXR1cm4gWCgiYnV0dG9uIix7b25DbGljazpRLGRpc2FibGVkOkosdGl0bGU6SywiYXJpYS1sYWJlbCI6SyxjbGFzc05hbWU6InctNiBoLTUuNSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbm9uZSByb3VuZGVkIHAtMCBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzLGNvbG9yXzAuMTJzXSIsc3R5bGU6e2JhY2tncm91bmQ6JD9gY29sb3ItbWl4KGluIHNyZ2IsICR7cX0gMTMlLCB0cmFuc3BhcmVudClgOiJ0cmFuc3BhcmVudCIsY29sb3I6JD9xOmQxKDAuNTUpLG9wYWNpdHk6Sj8wLjU6MX0sY2hpbGRyZW46WX0pfWZ1bmN0aW9uIEk1KHtsYWJlbDokLGNoZWNrZWQ6SixkaXNhYmxlZDpRPSExLG9uQ2hhbmdlOlp9KXtyZXR1cm4gWCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixyb2xlOiJzd2l0Y2giLCJhcmlhLWNoZWNrZWQiOkosImFyaWEtbGFiZWwiOiQsZGlzYWJsZWQ6USxvbkNsaWNrOigpPT5aKCFKKSxjbGFzc05hbWU6YHJlbGF0aXZlIGgtWzE4cHhdIHctOCBzaHJpbmstMCByb3VuZGVkLWZ1bGwgYm9yZGVyLW5vbmUgcC0wIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNdICR7UT8iY3Vyc29yLWRlZmF1bHQgYmctaW5rLzIwIjpKPyJjdXJzb3ItcG9pbnRlciBiZy10aW50IjoiY3Vyc29yLXBvaW50ZXIgYmctaW5rLzIwIn1gLGNoaWxkcmVuOlgoInNwYW4iLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC1bMnB4XSBzaXplLVsxNHB4XSByb3VuZGVkLWZ1bGwgc2hhZG93LVswXzFweF8ycHhfcmdiYSgwLDAsMCwwLjIpXSBbdHJhbnNpdGlvbjpsZWZ0XzAuMTVzXSAke1E/ImJnLXdoaXRlLzUwIjoiYmctd2hpdGUifWAsc3R5bGU6e2xlZnQ6Sj8xNjoyfX0pfSl9dmFyIHlaPSJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSIsU1o9InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC1pbmstNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIG0tMCI7ZnVuY3Rpb24gdTcoe292ZXJsYXlFbmFibGVkOiQsb25Ub2dnbGVPdmVybGF5Okp9KXtsZXR7c25hcHNob3Q6UX09QzUoKSx7aGlnaGxpZ2h0ZWRLZXk6WixzZXRIaWdobGlnaHRlZEtleTpLfT1hMigpLFk9UT8uZWxlbWVudHM/P1tdLHE9aTIoUSksVj1RPy5lcnJvcnM/LlswXT8/bnVsbDtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOmAke3lafSBweC0zIHB5LTJgLGNoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6U1osY2hpbGRyZW46IkFYIFRyZWUifSksWChJNSx7bGFiZWw6IkVuYWJsZSBvdmVybGF5IixjaGVja2VkOiQsb25DaGFuZ2U6Sn0pXX0pLCEkP251bGw6cT9YKHA3LHtjaGlsZHJlbjoiQVggdW5hdmFpbGFibGUgb24gdGhpcyBzaW11bGF0b3IuIn0pOlkubGVuZ3RoPT09MD9YKHA3LHtzcGlubmVyOiFWLGNoaWxkcmVuOlY/PyJXYWl0aW5nIGZvciBhY2Nlc3NpYmlsaXR5IGRhdGHigKYifSk6WCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xIG10LTIgcHktMiBtYXgtaC1bMjYwcHhdIG92ZXJmbG93LXktYXV0byBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixyb2xlOiJsaXN0IixjaGlsZHJlbjpZLm1hcCgoRyxCKT0+e2xldCBOPWQwKEcpO3JldHVybiBYKHhaLHtlbGVtZW50OkcsaW5kZXg6QixhY3RpdmU6Tj09PVosb25IaWdobGlnaHQ6S30sTil9KX0pXX0pfWZ1bmN0aW9uIHA3KHtjaGlsZHJlbjokLHNwaW5uZXI6Sj0hMX0pe3JldHVybiBYKCJkaXYiLHtyb2xlOiJzdGF0dXMiLCJhcmlhLWxpdmUiOiJwb2xpdGUiLGNsYXNzTmFtZToibXQtMiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBweS00IHRleHQtWzEycHhdIHRleHQtaW5rLTQ1IixjaGlsZHJlbjpbSj9YKCJzcGFuIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJzaXplLTMuNSBzaHJpbmstMCByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLWluay8yMCBib3JkZXItdC1pbmsvNjAgYW5pbWF0ZS1bZ3JpZC1zcGluXzAuOHNfbGluZWFyX2luZmluaXRlXSJ9KTpudWxsLFgoInNwYW4iLHtjaGlsZHJlbjokfSldfSl9dmFyIHhaPWEwKGZ1bmN0aW9uKHtlbGVtZW50OkosaW5kZXg6USxhY3RpdmU6WixvbkhpZ2hsaWdodDpLfSl7bGV0IFk9ZDAoSikscT1yMihKLFEpLFY9YCR7TWF0aC5yb3VuZChKLmZyYW1lLndpZHRoKX14JHtNYXRoLnJvdW5kKEouZnJhbWUuaGVpZ2h0KX1gLEc9W3EubGFiZWwscS5yb2xlfHxxLnR5cGV8fCJlbGVtZW50IixWXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpO3JldHVybiBYKCJkaXYiLHtyb2xlOiJsaXN0aXRlbSIsdGFiSW5kZXg6MCwiZGF0YS1heC1rZXkiOlksdGl0bGU6Ryxvbk1vdXNlRW50ZXI6KCk9PksoWSksb25Nb3VzZUxlYXZlOigpPT5LKG51bGwpLG9uRm9jdXM6KCk9PksoWSksb25CbHVyOigpPT5LKG51bGwpLGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHJvdW5kZWQtbWQgcHktMSBweC0wLjUgbWluLXctMCAke1o/ImJnLWluay9bMC4wNl0iOiIifWAsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtaW5rLTkwIHRleHQtWzEycHhdIGZvbnQtbWVkaXVtIixjaGlsZHJlbjpKLmxhYmVsfHxKLnJvbGV8fCJVbmxhYmVsZWQifSksWCgic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1pbmstNDUgZm9udC1tb25vIHRleHQtWzEwcHhdIixjaGlsZHJlbjpKLnJvbGV8fEoudHlwZXx8ImVsZW1lbnQifSldfSksWCgiY29kZSIse2NsYXNzTmFtZToic2hyaW5rLTAgYmctaW5rL1swLjA0XSBib3JkZXIgYm9yZGVyLWluay84IHJvdW5kZWQtbWQgdGV4dC1pbmstNTUgZm9udC1tb25vIHRleHQtWzEwcHhdIHB4LTEuNSBweS1bM3B4XSIsY2hpbGRyZW46Vn0pXX0pfSwoJCxKKT0+JC5pbmRleD09PUouaW5kZXgmJiQuYWN0aXZlPT09Si5hY3RpdmUmJiQub25IaWdobGlnaHQ9PT1KLm9uSGlnaGxpZ2h0JiZvMigkLmVsZW1lbnQsSi5lbGVtZW50KSk7dmFyIFJaPW5ldyBTZXQoWyJpbWFnZS9qcGVnIiwiaW1hZ2UvcG5nIiwiaW1hZ2UvZ2lmIiwiaW1hZ2UvaGVpYyIsImltYWdlL2hlaWYiLCJpbWFnZS93ZWJwIiwidmlkZW8vbXA0IiwidmlkZW8vcXVpY2t0aW1lIl0pO3ZhciBCMz0iYXBwbGljYXRpb24veC1zZXJ2ZS1zaW0taG9zdC1wYXRoIjthc3luYyBmdW5jdGlvbiBsNygkLEosUSl7bGV0IFo9YXdhaXQgSigiYWRkTWVkaWEiLHt1ZGlkOlEscGF0aDokfSk7aWYoWi5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3IoWi5zdGRlcnJ8fGBhZGRtZWRpYSBmYWlsZWQgKGV4aXQgJHtaLmV4aXRDb2RlfSlgKX1mdW5jdGlvbiBFNSgkKXtsZXQgSj0kLm5hbWUsUT1KLmxhc3RJbmRleE9mKCIuIik7aWYoUT49MClyZXR1cm4gSi5zbGljZShRKzEpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTldL2csIiIpLnNsaWNlKDAsMTApfHwiYmluIjtpZigkLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpcmV0dXJuIm1wNCI7cmV0dXJuImpwZyJ9ZnVuY3Rpb24gZDcoJCl7aWYoRTUoJCk9PT0iaXBhIilyZXR1cm4iaXBhIjtpZihSWi5oYXMoJC50eXBlKSlyZXR1cm4ibWVkaWEiO3JldHVybiBudWxsfWZ1bmN0aW9uIGpaKCQpe2xldCBKPW5ldyBVaW50OEFycmF5KCQpLFE9IiI7Zm9yKGxldCBaPTA7WjxKLmxlbmd0aDtaKz0zMjc2OClRKz1TdHJpbmcuZnJvbUNoYXJDb2RlKC4uLkouc3ViYXJyYXkoWixaKzMyNzY4KSk7cmV0dXJuIGJ0b2EoUSl9YXN5bmMgZnVuY3Rpb24gYzcoJCxKLFEsWil7bGV0IEs9MDtmb3IobGV0IFk9MDtZPCQuc2l6ZTtZKz0xOTY2MDgpe2xldCBxPWF3YWl0ICQuc2xpY2UoWSxZKzE5NjYwOCkuYXJyYXlCdWZmZXIoKSxWPWpaKHEpLEc9YXdhaXQgUSgidXBsb2FkQ2h1bmsiLHtwYXRoOkosZGF0YTpWLGFwcGVuZDpZPjB9KTtpZihHLmV4aXRDb2RlIT09MCl0aHJvdyBFcnJvcihHLnN0ZGVycnx8YFdyaXRlIGZhaWxlZCAoZXhpdCAke0cuZXhpdENvZGV9KWApO2lmKCFaKWNvbnRpbnVlO2xldCBCPU1hdGgubWluKFkrMTk2NjA4LCQuc2l6ZSksTj1NYXRoLmZsb29yKEIvJC5zaXplKjEwMCk7aWYoTiE9PUspSz1OLFooQi8kLnNpemUpfX1hc3luYyBmdW5jdGlvbiBpNygkLEosUSxaKXtpZigkLnNpemU+NTI0Mjg4MDAwKXRocm93IEVycm9yKCJGaWxlIHRvbyBsYXJnZSAobWF4IDUwME1CKSIpO2xldCBLPWAvdG1wLyR7Sn0tJHtjcnlwdG8ucmFuZG9tVVVJRCgpfS4ke1F9YDtyZXR1cm4gYXdhaXQgYzcoJCxLLFopLEt9dmFyIHZaPSJJbnN0YWxsaW5nIGFwcHMgcmVxdWlyZXMgc2VydmUtc2ltIC0tYWxsb3ctZXhlYyI7YXN5bmMgZnVuY3Rpb24gbzcoJCxKLFEsWixLLHthbGxvd0luc3RhbGw6WT0hMH09e30pe2lmKCQuc2l6ZT41MjQyODgwMDApdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7aWYoSj09PSJpcGEiJiYhWSl0aHJvdyBFcnJvcih2Wik7bGV0IHE9Sj09PSJpcGEiPyJpcGEiOkU1KCQpLEc9YC90bXAvJHtKPT09ImlwYSI/InNlcnZlLXNpbS1pbnN0YWxsIjoic2VydmUtc2ltLXVwbG9hZCJ9LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX0uJHtxfWA7dHJ5e0soMCksYXdhaXQgYzcoJCxHLFEsSyksSyhudWxsKTtsZXQgQj1hd2FpdCBRKEo9PT0iaXBhIj8iaW5zdGFsbEFwcCI6ImFkZE1lZGlhIix7dWRpZDpaLHBhdGg6R30pO2lmKEIuZXhpdENvZGUhPT0wKXtsZXQgTj1KPT09ImlwYSI/Imluc3RhbGwiOiJhZGRtZWRpYSI7dGhyb3cgRXJyb3IoQi5zdGRlcnJ8fGAke059IGZhaWxlZCAoZXhpdCAke0IuZXhpdENvZGV9KWApfX1maW5hbGx5e1EoInVwbG9hZFJlbW92ZSIse3BhdGg6R30pLmNhdGNoKCgpPT57fSl9fXZhciBnWj0zMDAwO2FzeW5jIGZ1bmN0aW9uIGhaKCQsSj1mZXRjaCl7dHJ5e2xldCBRPWF3YWl0IEooJCx7Y2FjaGU6Im5vLXN0b3JlIn0pO2lmKCFRLm9rKXJldHVybiBudWxsO2xldCBaPWF3YWl0IFEuanNvbigpO3JldHVybiBaJiZ0eXBlb2YgWj09PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShaKT9aOm51bGx9Y2F0Y2h7cmV0dXJuIG51bGx9fXZhciBmWj0yMDk3MTUyMDAsbVo9IkxhcmdlIHZpZGVvICg+MjAwIE1CKSDigJQgbWF5IHN0dXR0ZXIgb24gc2hhcmVkIG1lbW9yeSIsbjc9IkhFSUMgZGVjb2RlIGZhaWxlZCDigJQgZXhwb3J0IGFzIEpQRUcgb3IgUE5HIGFuZCByZXRyeSI7ZnVuY3Rpb24gcFooJCxKKXtpZihKKXJldHVybiJhY3RpdmUiO2lmKCQ9PT0iYWN0aXZlIilyZXR1cm4iZGlzY29ubmVjdGVkIjtpZigkPT09ImRpc2Nvbm5lY3RlZCIpcmV0dXJuInJlYWR5IjtyZXR1cm4gJH1mdW5jdGlvbiB1WigkKXtpZighJC5pbmplY3RlZClyZXR1cm4icGxheSI7aWYoJC5zb3VyY2U9PT0icGxhY2Vob2xkZXIiKXJldHVybiJwbGF5IjtpZigkLmJ1bmRsZUlkJiYhJC5mb3JlZ3JvdW5kSXNJbmplY3RlZClyZXR1cm4iYXR0YWNoIjtyZXR1cm4ic3RvcCJ9ZnVuY3Rpb24gbFooJCl7cmV0dXJuICQuc3BsaXQoYApgKS5tYXAoKEopPT5KLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pLmZsYXRNYXAoKEopPT57bGV0IFE9Si5pbmRleE9mKCJcdCIpO2lmKFE8PTApcmV0dXJuW107bGV0IFo9Si5zbGljZSgwLFEpLnRyaW0oKSxLPUouc2xpY2UoUSsxKS50cmltKCk7aWYoIVp8fCFLKXJldHVybltdO3JldHVyblt7aWQ6WixuYW1lOkt9XX0pfXZhciBkWj1uZXcgU2V0KFsibXA0IiwibTR2IiwibW92IiwicXQiLCJhdmkiLCJta3YiLCJ3ZWJtIiwibXBnIiwibXBlZyIsIjNncCIsIjNnMiIsInRzIiwid212Il0pO2Z1bmN0aW9uIGE3KCQpe2lmKCQudHlwZSYmJC50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpKXJldHVybiEwO2xldCBKPSgkLm5hbWU/PyIiKS50b0xvd2VyQ2FzZSgpLFE9Si5sYXN0SW5kZXhPZigiLiIpO2lmKFE8MClyZXR1cm4hMTtyZXR1cm4gZFouaGFzKEouc2xpY2UoUSsxKSl9ZnVuY3Rpb24gY1ooJCl7cmV0dXJuIGE3KCQpJiYkLnNpemU+Zlp9ZnVuY3Rpb24gaVooJCl7bGV0IEo9KCQudHlwZT8/IiIpLnRvTG93ZXJDYXNlKCk7aWYoSj09PSJpbWFnZS9oZWljInx8Sj09PSJpbWFnZS9oZWlmIilyZXR1cm4hMDtsZXQgUT0oJC5uYW1lPz8iIikudG9Mb3dlckNhc2UoKTtyZXR1cm4gUS5lbmRzV2l0aCgiLmhlaWMiKXx8US5lbmRzV2l0aCgiLmhlaWYiKX1mdW5jdGlvbiBvWih7cmF3TWVzc2FnZTokLGxhc3RGaWxlSXNIZWljOkosc291cmNlOlF9KXtpZihKJiYoUT09PSJpbWFnZSJ8fFE9PT0idmlkZW8iKSlyZXR1cm4gbjc7cmV0dXJuICR9ZnVuY3Rpb24gclooe3N0YXRlOiR9KXtsZXQgSj0kPT09ImFjdGl2ZSI/IkFjdGl2ZSI6JD09PSJkaXNjb25uZWN0ZWQiPyJEaXNjb25uZWN0ZWQiOiJSZWFkeSIsUT0kPT09ImFjdGl2ZSI/InNpemUtMS41IHJvdW5kZWQtZnVsbCBiZy1zdWNjZXNzLWVtZXJhbGQgW2JveC1zaGFkb3c6MF8wXzZweF9jb2xvci1taXgoaW5fc3JnYix2YXIoLS1zZXJ2ZS1zaW0tc3VjY2VzcylfNzAlLHRyYW5zcGFyZW50KV0iOiQ9PT0iZGlzY29ubmVjdGVkIj8ic2l6ZS0xLjUgcm91bmRlZC1mdWxsIGJnLWRhbmdlci1zb2Z0IFtib3gtc2hhZG93OjBfMF82cHhfY29sb3ItbWl4KGluX3NyZ2IsdmFyKC0tc2VydmUtc2ltLWRhbmdlcilfNTUlLHRyYW5zcGFyZW50KV0iOm51bGw7cmV0dXJuIFgoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtaW5rLTU1IGZvbnQtbW9ubyBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBqdXN0aWZ5LXNlbGYtZW5kIGxlYWRpbmctbm9uZSIsImRhdGEtY2FtZXJhLXBpbGwtc3RhdGUiOiQsY2hpbGRyZW46W1EmJlgoInNwYW4iLHtjbGFzc05hbWU6UX0pLEpdfSl9ZnVuY3Rpb24gblooKXtyZXR1cm4gWCgicCIse2NsYXNzTmFtZToibS0wIHRleHQtY2VudGVyIHRleHQtWzEwcHhdIGxlYWRpbmctWzEuNV0gdGV4dC1pbmstNDUiLCJkYXRhLWNhbWVyYS10ZXN0LXBhdHRlcm4taGludCI6ITAsY2hpbGRyZW46IlRlc3QtcGF0dGVybiBmZWVkIn0pfWZ1bmN0aW9uIGFaKHttb2RlOiQsZmlsZU5hbWU6Six3ZWJjYW1OYW1lOlEsc291cmNlS2luZDpafSl7aWYoJD09PSJ1cGxvYWRpbmciKXJldHVybiBYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LWluay01NSIsY2hpbGRyZW46IlVwbG9hZGluZ+KApiJ9KTtpZigkPT09ImZpbGUiKXJldHVybiBYKEsxLHtjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJzaHJpbmstMCB0ZXh0LVs5cHhdIHRyYWNraW5nLVswLjFlbV0gdXBwZXJjYXNlIHRleHQtaW5rLTU1IGJnLWluay9bMC4wNl0gYm9yZGVyIGJvcmRlci1pbmsvOCBweC1bN3B4XSBweS1bMnB4XSByb3VuZGVkLWZ1bGwiLGNoaWxkcmVuOlo9PT0idmlkZW8iPyJWaWRlbyI6IkltYWdlIn0pLFgoInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4tdy0wIHRydW5jYXRlIHRleHQtWzEycHhdIHRleHQtaW5rLTkwIGZvbnQtbW9ubyIsY2hpbGRyZW46Sj8/IiJ9KV19KTtpZigkPT09IndlYmNhbSIpcmV0dXJuIFgoSzEse2NoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIHRleHQtWzlweF0gdHJhY2tpbmctWzAuMWVtXSB1cHBlcmNhc2UgdGV4dC1pbmstNTUgYmctaW5rL1swLjA2XSBib3JkZXIgYm9yZGVyLWluay84IHB4LVs3cHhdIHB5LVsycHhdIHJvdW5kZWQtZnVsbCIsY2hpbGRyZW46IldlYmNhbSJ9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCB0cnVuY2F0ZSB0ZXh0LVsxMnB4XSB0ZXh0LWluay05MCBmb250LW1vbm8iLGNoaWxkcmVuOlE/PyIifSldfSk7cmV0dXJuIFgoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtaW5rLTg1IGZvbnQtbWVkaXVtIixjaGlsZHJlbjoiU2VsZWN0IG9yIGRyb3AgbWVkaWEifSl9ZnVuY3Rpb24gcjcoe2tpbmQ6JCxtZXNzYWdlOkp9KXtyZXR1cm4gWCgiZGl2Iix7Y2xhc3NOYW1lOiQ9PT0id2FybmluZyI/ImJnLXdhcm5pbmcvMTAgYm9yZGVyIGJvcmRlci13YXJuaW5nLzI1IHRleHQtd2FybmluZy1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgYnJlYWstd29yZHMiOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIGJyZWFrLXdvcmRzIiwiZGF0YS1jYW1lcmEtYmFubmVyLWtpbmQiOiQscm9sZTokPT09ImVycm9yIj8iYWxlcnQiOiJzdGF0dXMiLGNoaWxkcmVuOkp9KX1mdW5jdGlvbiBzNyh7dWRpZDokLGJ1bmRsZUlkOkp9KXtsZXRbUSxaXT1BKCExKSxbSyxZXT1BKCJwbGFjZWhvbGRlciIpLFtxLFZdPUEoIiIpLFtHLEJdPUEobnVsbCksW04sel09QSghMSksVT1UKDApLFtILEZdPUEoITEpLFtMLGtdPUEoITEpLEM9VChudWxsKSxbTyx5XT1BKFtdKSxbRSx3XT1BKCExKSxbUyxRMV09QSgiIiksW2csaF09QSgib2ZmIiksW0ksdV09QShudWxsKSxbWjEscl09QShudWxsKSxNMT1JIT09bnVsbHx8WjEhPT1udWxsLFtKMSxpXT1BKG51bGwpLFtmLFUxXT1BKG51bGwpLFssWDFdPUEobnVsbCksW0IxLEYxXT1BKCExKSxbVzEsb109QSgicmVhZHkiKSxbYyxkXT1BKCgpPT5uZXcgU2V0KSxbbixZMV09QShudWxsKSxbYixqXT1BKG51bGwpLE4xPVQoITEpLEMxPVQoITEpLHA9VCgib2ZmIiksZT1UKCExKSxrMT1QKGFzeW5jKCk9PntsZXQgVz13aW5kb3cuX19TSU1fUFJFVklFV19fPy5jYW1lcmFTdGF0dXNFbmRwb2ludDtyZXR1cm4gVz9oWihXKTpudWxsfSxbXSksUDE9VChhc3luYygpPT57fSksZzE9VChKKTtfKCgpPT57ZzEuY3VycmVudD1KfSxbSl0pLF8oKCk9PntsZXQgVz0hMTtyZXR1cm4oYXN5bmMoKT0+e2xldCBtPWF3YWl0IGsxKCk7aWYoV3x8IW18fCFtLmFsaXZlKXJldHVybjtDMS5jdXJyZW50PSEwO2xldCBhPW0uc291cmNlO2lmKGE9PT0icGxhY2Vob2xkZXIifHxhPT09IndlYmNhbSJ8fGE9PT0iaW1hZ2UifHxhPT09InZpZGVvIilZKGEpO2lmKChhPT09ImltYWdlInx8YT09PSJ2aWRlbyIpJiZtLmFyZylWKG0uYXJnKSxCKG0uYXJnLnNwbGl0KCIvIikucG9wKCk/P251bGwpO2lmKGE9PT0id2ViY2FtIiYmbS5hcmcpUTEobS5hcmcpLFAxLmN1cnJlbnQoKTtsZXQgSDE9bS5taXJyb3I9PT0ib24iPyJvbiI6Im9mZiI7aChIMSkscC5jdXJyZW50PUgxLFkxKG0uaGVscGVyUGlkPz9udWxsKSxGMSghMCk7bGV0IEExPUFycmF5LmlzQXJyYXkobS5idW5kbGVJZHMpP20uYnVuZGxlSWRzOltdO2lmKEExLmxlbmd0aD4wKWQobmV3IFNldChBMSkpO2xldCB6MT1nMS5jdXJyZW50LE8xPWEmJmEhPT0icGxhY2Vob2xkZXIiO28oejEmJkExLmluY2x1ZGVzKHoxKSYmTzE/ImFjdGl2ZSI6InJlYWR5IiksWDEoYFJlYXR0YWNoZWQg4oaSICR7YT8/InJ1bm5pbmcgaGVscGVyIn0ke20uYXJnP2AgKCR7bS5hcmd9KWA6IiJ9YCl9KSgpLCgpPT57Vz0hMH19LFskLGsxXSksXygoKT0+e2xldCBXPSExLG09ITEsYT1udWxsLEgxPWFzeW5jKCk9PntpZihXfHxtKXJldHVybjtpZih0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIilyZXR1cm47bT0hMDt0cnl7bGV0IHoxPWF3YWl0IGsxKCk7aWYoVylyZXR1cm47bGV0IE8xPSEhejE/LmFsaXZlLFgwPUFycmF5LmlzQXJyYXkoejE/LmJ1bmRsZUlkcyk/ejEuYnVuZGxlSWRzOm51bGwsaTE9ISFKJiYoWDA/WDAuaW5jbHVkZXMoSik6Yy5oYXMoSikpLG8xPXoxPy5zb3VyY2U/P251bGwsTjA9QjEmJk8xJiZpMSYmISEobzEmJm8xIT09InBsYWNlaG9sZGVyIikmJihuPT1udWxsfHx6MT8uaGVscGVyUGlkPT09bik7aWYobygoRCk9PnBaKEQsTjApKSwhTzEpRjEoKEQpPT57aWYoIUQpcmV0dXJuIEQ7cmV0dXJuIGQobmV3IFNldCksWTEobnVsbCkscC5jdXJyZW50PSJvZmYiLCExfSk7ZWxzZSBpZihCMSYmbiE9bnVsbCYmejE/LmhlbHBlclBpZCE9PW4pRjEoITEpLGQobmV3IFNldCksWTEobnVsbCkscC5jdXJyZW50PSJvZmYiO2Vsc2UgaWYoTzEmJkFycmF5LmlzQXJyYXkoejE/LmJ1bmRsZUlkcykpe2xldCBEPXoxLmJ1bmRsZUlkcztkKChNKT0+e2lmKE0uc2l6ZT09PUQubGVuZ3RoJiZELmV2ZXJ5KChSKT0+TS5oYXMoUikpKXJldHVybiBNO3JldHVybiBuZXcgU2V0KEQpfSl9fWZpbmFsbHl7bT0hMX19O2E9c2V0SW50ZXJ2YWwoKCk9PntIMSgpfSxnWik7bGV0IEExPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09InZpc2libGUiKUgxKCl9O2lmKHR5cGVvZiBkb2N1bWVudDwidSIpZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsQTEpO3JldHVybigpPT57aWYoVz0hMCxhKWNsZWFySW50ZXJ2YWwoYSk7aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixBMSl9fSxbazEsQjEsbixKLGNdKTtsZXQgcDE9UChhc3luYygpPT57dyghMCksaShudWxsKTt0cnl7bGV0IFc9YXdhaXQgeDEoImNhbWVyYUxpc3RXZWJjYW1zIik7aWYoVy5leGl0Q29kZSE9PTApe2koVy5zdGRlcnIudHJpbSgpfHxgLS1saXN0LXdlYmNhbXMgZmFpbGVkICgke1cuZXhpdENvZGV9KWApO3JldHVybn1sZXQgbT1sWihXLnN0ZG91dCk7aWYoeShtKSxtLmxlbmd0aD4wJiYhUylRMShtWzBdLmlkKX1maW5hbGx5e3coITEpfX0sW1NdKTtfKCgpPT57UDEuY3VycmVudD1wMX0sW3AxXSksXygoKT0+e2lmKEwmJk8ubGVuZ3RoPT09MCYmIUUpcDEoKX0sW0wsTy5sZW5ndGgsRSxwMV0pO2xldCBqMT1QKChXKT0+e2kob1ooe3Jhd01lc3NhZ2U6VyxsYXN0RmlsZUlzSGVpYzpOMS5jdXJyZW50LHNvdXJjZTpLfSkpfSxbS10pLGExPVAoYXN5bmMoVyxtLGEpPT57bGV0IEgxPVc9PT0iaW1hZ2UifHxXPT09InZpZGVvIjtpZihIMSYmIWEudHJpbSgpKXJldHVybiBpKCJEcm9wIGEgZmlsZSBpbnRvIHRoZSBwYW5lbCBvciBwaWNrIGFub3RoZXIgc291cmNlLiIpLCExO2xldCBBMT1hd2FpdCB4MSgiY2FtZXJhU3dpdGNoIix7dWRpZDokLHNvdXJjZTpXLC4uLlc9PT0id2ViY2FtIiYmbT97d2ViY2FtSWQ6bX06e30sLi4uSDE/e2ZpbGVQYXRoOmEudHJpbSgpfTp7fX0pO2lmKEExLmV4aXRDb2RlIT09MClyZXR1cm4gajEoQTEuc3RkZXJyLnRyaW0oKXx8QTEuc3Rkb3V0LnRyaW0oKXx8YHN3aXRjaCBmYWlsZWQgKCR7QTEuZXhpdENvZGV9KWApLCExO04xLmN1cnJlbnQ9ITE7dHJ5e2xldCB6MT1KU09OLnBhcnNlKEExLnN0ZG91dC50cmltKCkpO1gxKGBTd2l0Y2hlZCDihpIgJHt6MS5zb3VyY2U/P1d9JHt6MS5hcmc/YCAoJHt6MS5hcmd9KWA6IiJ9YCl9Y2F0Y2h7WDEoYFN3aXRjaGVkIOKGkiAke1d9YCl9cmV0dXJuITB9LFskLGoxXSksazA9UChhc3luYygpPT57aWYoIUopcmV0dXJuO3UoImluamVjdCIpLGkobnVsbCksWDEobnVsbCk7dHJ5e2xldCBXPUs9PT0iaW1hZ2UifHxLPT09InZpZGVvIjtpZihXJiYhcS50cmltKCkpe2koIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIik7cmV0dXJufWxldCBtPWF3YWl0IHgxKCJjYW1lcmFJbmplY3QiLHt1ZGlkOiQsYnVuZGxlSWQ6Sixzb3VyY2U6SyxtaXJyb3I6ZywuLi5XP3tmaWxlUGF0aDpxLnRyaW0oKX06e30sLi4uSz09PSJ3ZWJjYW0iJiZTP3t3ZWJjYW1JZDpTfTp7fX0pO2lmKG0uZXhpdENvZGUhPT0wKXtqMShtLnN0ZGVyci50cmltKCl8fG0uc3Rkb3V0LnRyaW0oKXx8YGluamVjdCBmYWlsZWQgKCR7bS5leGl0Q29kZX0pYCk7cmV0dXJufU4xLmN1cnJlbnQ9ITE7bGV0IGE9bnVsbDt0cnl7bGV0IEgxPUpTT04ucGFyc2UobS5zdGRvdXQudHJpbSgpKTthPUgxLmhlbHBlclBpZD8/bnVsbDtsZXQgQTE9SDEuaGVscGVyUmVsYXVuY2hlZD09PSExPyJBdHRhY2hlZCI6IkluamVjdGVkIix6MT1IMS5waWQ/YCBwaWQgJHtIMS5waWR9YDoiIixPMT1IMS5oZWxwZXJQaWQ/YCwgaGVscGVyIHBpZCAke0gxLmhlbHBlclBpZH1gOiIiO1gxKGAke0ExfSAke0gxLnNvdXJjZT8/S30gaW50byAke0p9JHt6MX0ke08xfWApfWNhdGNoe1gxKG0uc3Rkb3V0LnRyaW0oKXx8IkluamVjdGVkLiIpfUYxKCEwKSxvKEs9PT0icGxhY2Vob2xkZXIiPyJyZWFkeSI6ImFjdGl2ZSIpLFkxKGEpLGQoKEgxKT0+SDEuaGFzKEopP0gxOm5ldyBTZXQoSDEpLmFkZChKKSkscC5jdXJyZW50PWd9ZmluYWxseXt1KG51bGwpfX0sW0osJCxLLHEsUyxnLGoxXSksVjA9QjE/YCR7S306OiR7Sz09PSJ3ZWJjYW0iP1M6IiJ9Ojoke0s9PT0iaW1hZ2UifHxLPT09InZpZGVvIj9xOiIifWA6bnVsbCxEMT0hIUomJmMuaGFzKEopLHUxPUQxJiZLIT09InBsYWNlaG9sZGVyIjtfKCgpPT57aWYoIXUxKXtlLmN1cnJlbnQ9ITE7cmV0dXJufWlmKGUuY3VycmVudClyZXR1cm47ZS5jdXJyZW50PSEwLFooITApfSxbdTFdKSxfKCgpPT57aWYoIWIpcmV0dXJuO2lmKCFKfHxNMXx8SClyZXR1cm47aWYoSyE9PSJ3ZWJjYW0ifHxTIT09YilyZXR1cm47aWYoaihudWxsKSxCMSlyZXR1cm47azAoKX0sW2IsSixNMSxILEssUyxCMSxrMF0pLF8oKCk9PntpZighQjEpcmV0dXJuO2lmKChLPT09ImltYWdlInx8Sz09PSJ2aWRlbyIpJiYhcS50cmltKCkpcmV0dXJuO2lmKEs9PT0id2ViY2FtIiYmIVMpcmV0dXJuO2lmKEMxLmN1cnJlbnQpe0MxLmN1cnJlbnQ9ITE7cmV0dXJufWxldCBXPSExO3JldHVybihhc3luYygpPT57cigic3dpdGNoIiksaShudWxsKTt0cnl7aWYoVylyZXR1cm47YXdhaXQgYTEoSyxTLHEpfWZpbmFsbHl7aWYoIVcpcihudWxsKX19KSgpLCgpPT57Vz0hMH19LFtWMF0pLF8oKCk9PntpZighQjEpcmV0dXJuO2lmKHAuY3VycmVudD09PWcpcmV0dXJuO2xldCBXPWcsbT0hMTtyZXR1cm4oYXN5bmMoKT0+e3IoIm1pcnJvciIpLGkobnVsbCk7dHJ5e2xldCBhPWF3YWl0IHgxKCJjYW1lcmFNaXJyb3IiLHt1ZGlkOiQsbWlycm9yOld9KTtpZihtKXJldHVybjtpZihhLmV4aXRDb2RlIT09MCl7aShhLnN0ZGVyci50cmltKCl8fGEuc3Rkb3V0LnRyaW0oKXx8YG1pcnJvciBmYWlsZWQgKCR7YS5leGl0Q29kZX0pYCk7cmV0dXJufXAuY3VycmVudD1XLFgxKGBNaXJyb3Ig4oaSICR7V31gKX1maW5hbGx5e2lmKCFtKXIobnVsbCl9fSkoKSwoKT0+e209ITB9fSxbZyxCMV0pO2xldCBDMD1QKGFzeW5jKCk9Pnt1KCJzdG9wIiksaShudWxsKTt0cnl7bGV0IFc9YXdhaXQgeDEoImNhbWVyYVN0b3AiLHt1ZGlkOiR9KTtpZihXLmV4aXRDb2RlIT09MCl7aShXLnN0ZGVyci50cmltKCl8fGBzdG9wLXdlYmNhbSBmYWlsZWQgKCR7Vy5leGl0Q29kZX0pYCk7cmV0dXJufVgxKCJDYW1lcmEgaGVscGVyIHN0b3BwZWQuIiksRjEoITEpLG8oInJlYWR5IiksZChuZXcgU2V0KSxwLmN1cnJlbnQ9Im9mZiJ9ZmluYWxseXt1KG51bGwpfX0sWyRdKSxWMT1QKGFzeW5jKFcpPT57bGV0IG09aVooe3R5cGU6Vy50eXBlLG5hbWU6Vy5uYW1lfSksYT1XLnR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIil8fG0sSDE9Vy50eXBlLnN0YXJ0c1dpdGgoInZpZGVvLyIpfHxhNyh7dHlwZTpXLnR5cGUsbmFtZTpXLm5hbWV9KTtpZighYSYmIUgxKXtOMS5jdXJyZW50PSExLGkoYFVuc3VwcG9ydGVkIGZpbGUgdHlwZTogJHtXLnR5cGV8fFcubmFtZX1gKTtyZXR1cm59aWYoRighMCksaShudWxsKSxVMShudWxsKSxjWih7dHlwZTpXLnR5cGUsbmFtZTpXLm5hbWUsc2l6ZTpXLnNpemV9KSlVMShtWik7TjEuY3VycmVudD1tO3RyeXtsZXQgQTE9RTUoVyksejE9YXdhaXQgaTcoVywic2VydmUtc2ltLWNhbXNyYyIsQTEseDEpO0IoVy5uYW1lKSxZKEgxPyJ2aWRlbyI6ImltYWdlIiksVih6MSksWDEoYExvYWRlZCAke1cubmFtZX1gKX1jYXRjaChBMSl7aWYoTjEuY3VycmVudClpKG43KTtlbHNlIGkoQTE/Lm1lc3NhZ2U/PyJVcGxvYWQgZmFpbGVkIil9ZmluYWxseXtGKCExKX19LFtdKSxaMD1QKGFzeW5jKFcpPT57Vy5wcmV2ZW50RGVmYXVsdCgpLFcuc3RvcFByb3BhZ2F0aW9uKCksVS5jdXJyZW50PTAseighMSk7bGV0IG09Vy5kYXRhVHJhbnNmZXI/LmZpbGVzPy5bMF07aWYobSlhd2FpdCBWMShtKX0sW1YxXSksYjA9UCgoKT0+e1koInBsYWNlaG9sZGVyIiksVigiIiksQihudWxsKSxpKG51bGwpLFUxKG51bGwpLE4xLmN1cnJlbnQ9ITF9LFtdKSxoMT1QKCgpPT57Qy5jdXJyZW50Py5jbGljaygpfSxbXSksYzE9UChhc3luYyhXKT0+e2xldCBtPVcudGFyZ2V0LGE9bS5maWxlcz8uWzBdO2lmKG0udmFsdWU9IiIsYSlhd2FpdCBWMShhKX0sW1YxXSk7XygoKT0+e2lmKCFMKXJldHVybjtsZXQgVz0obSk9PntsZXQgYT1tLnRhcmdldDtpZihhIGluc3RhbmNlb2YgRWxlbWVudCYmYS5jbG9zZXN0KCJbZGF0YS1jYW1lcmEtc291cmNlLW1lbnVdIikpcmV0dXJuO2soITEpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsVyksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLFcpfSxbTF0pO2xldCBzMT1QKChXKT0+e2lmKFExKFcuaWQpLFkoIndlYmNhbSIpLEIobnVsbCksaShudWxsKSxOMS5jdXJyZW50PSExLGsoITEpLEopaihXLmlkKX0sW0pdKSxlMT1QKCgpPT57aCgoVyk9Plc9PT0ib24iPyJvZmYiOiJvbiIpfSxbXSksdDE9IUIxfHxLPT09InBsYWNlaG9sZGVyIix5MD1QKChXKT0+e2lmKFcucHJldmVudERlZmF1bHQoKSxVLmN1cnJlbnQrKyxVLmN1cnJlbnQ9PT0xKXooITApfSxbXSksdjA9UCgoVyk9PntpZihXLnByZXZlbnREZWZhdWx0KCksVy5kYXRhVHJhbnNmZXIpVy5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0iY29weSJ9LFtdKSxTMD1QKChXKT0+e2lmKFcucHJldmVudERlZmF1bHQoKSxVLmN1cnJlbnQtLSxVLmN1cnJlbnQ8PTApVS5jdXJyZW50PTAseighMSl9LFtdKSwkMD11Wih7YnVuZGxlSWQ6SixpbmplY3RlZDpCMSxzb3VyY2U6Syxmb3JlZ3JvdW5kSXNJbmplY3RlZDpEMX0pLEUxPSQwPT09InN0b3AiP3tsYWJlbDpJPT09InN0b3AiPyJTdG9wcGluZ+KApiI6IlN0b3AiLG9uQ2xpY2s6QzAsa2luZDoic3RvcCJ9OiQwPT09ImF0dGFjaCI/e2xhYmVsOkk9PT0iaW5qZWN0Ij8iSW5qZWN0aW5n4oCmIjpgSW5qZWN0ICR7Sn1gLG9uQ2xpY2s6azAsa2luZDoiYXR0YWNoIn06e2xhYmVsOkk9PT0iaW5qZWN0Ij8iU3RhcnRpbmfigKYiOiJQbGF5IixvbkNsaWNrOmswLGtpbmQ6InBsYXkifSxHMD0kMD09PSJzdG9wIj9IfHxJIT09bnVsbDohSnx8SHx8SSE9PW51bGwsZjE9Sz09PSJwbGFjZWhvbGRlciIsQjA9Sz09PSJ3ZWJjYW0iLEYwPShLPT09ImltYWdlInx8Sz09PSJ2aWRlbyIpJiYhIUcsUTA9QjA/Ty5maW5kKChXKT0+Vy5pZD09PVMpPy5uYW1lPz9TPz8iV2ViY2FtIjpudWxsLEEwPUg/InVwbG9hZGluZyI6RjA/ImZpbGUiOkIwPyJ3ZWJjYW0iOiJwbGFjZWhvbGRlciI7cmV0dXJuIFgocTAse29wZW46USxvbk9wZW5DaGFuZ2U6Wixib2R5Q2xhc3NOYW1lOiJwdC0yLjUiLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OlgoSzEse2NoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtaW5rLTUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiQ2FtZXJhIn0pLFgoclose3N0YXRlOlcxfSldfSksY2hpbGRyZW46WCgiZGl2Iix7b25EcmFnRW50ZXI6eTAsb25EcmFnT3Zlcjp2MCxvbkRyYWdMZWF2ZTpTMCxvbkRyb3A6WjAsY2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0yLjUiLGNoaWxkcmVuOltYKCJwIix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1bMTBweF0gbGVhZGluZy1bMS41XSB0ZXh0LWluay00NSIsY2hpbGRyZW46IlJlcGxhY2VzIHRoZSBzaW11bGF0b3IncyBjYW1lcmEgZmVlZCBieSBpbmplY3RpbmcgYSBkeWxpYiBhdCBhcHAgbGF1bmNoIGFuZCBzdHJlYW1pbmcgZnJhbWVzIGludG8gc2hhcmVkIG1lbW9yeS4gUGljayBtZWRpYSBvciBhIHdlYmNhbSwgdGhlbiBQbGF5IHRvIGluamVjdCBpbnRvIHRoZSBmb3JlZ3JvdW5kIGFwcC4ifSksWCgiaW5wdXQiLHtyZWY6Qyx0eXBlOiJmaWxlIixhY2NlcHQ6ImltYWdlLyosdmlkZW8vKiIsY2xhc3NOYW1lOiJoaWRkZW4iLG9uQ2hhbmdlOmMxfSksWCgiZGl2Iix7b25DbGljazooVyk9PntpZighZjEpcmV0dXJuO2lmKFcudGFyZ2V0LmNsb3Nlc3QoIltkYXRhLWNsZWFyLW1lZGlhXSIpKXJldHVybjtoMSgpfSx0aXRsZTpmMT8iTm8gc291cmNlIHNlbGVjdGVkIOKAlCBQbGF5IHVzZXMgYSB0ZXN0LXBhdHRlcm4gZmVlZC4gQ2xpY2sgdG8gcGljayBhbiBpbWFnZS92aWRlbywgb3IgZHJvcCBvbmUgaGVyZS4iOkIwP2BTb3VyY2U6ICR7UTB9YDpgU291cmNlOiAke0c/P0t9YCxjbGFzc05hbWU6WyJyZWxhdGl2ZSBtaW4taC1bNDRweF0gZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIuNSBweC0zLjUgcHktMi41IHJvdW5kZWQtWzdweF0gdGV4dC1jZW50ZXIgdHJhbnNpdGlvbi1bYm9yZGVyLWNvbG9yLGJhY2tncm91bmRdIGR1cmF0aW9uLTE1MCIsZjE/ImJnLWluay9bMC4wNF0gYm9yZGVyIGJvcmRlci1kYXNoZWQgYm9yZGVyLWluay8xMiI6ImJnLWluay9bMC4wNF0gYm9yZGVyIGJvcmRlci1pbmsvOCIsTj8iIWJnLXRpbnQvOCAhYm9yZGVyLXRpbnQvNjAiOiIiLEg/ImN1cnNvci1wcm9ncmVzcyI6ZjE/ImN1cnNvci1wb2ludGVyIjoiY3Vyc29yLWRlZmF1bHQiXS5qb2luKCIgIiksY2hpbGRyZW46W1goYVose21vZGU6QTAsZmlsZU5hbWU6Ryx3ZWJjYW1OYW1lOlEwLHNvdXJjZUtpbmQ6S30pLCFmMSYmIUgmJlgoImJ1dHRvbiIseyJkYXRhLWNsZWFyLW1lZGlhIjohMCxvbkNsaWNrOihXKT0+e1cuc3RvcFByb3BhZ2F0aW9uKCksYjAoKX0sY2xhc3NOYW1lOiJzaHJpbmstMCB3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHRleHQtaW5rLTU1IGhvdmVyOnRleHQtaW5rLTkwIGN1cnNvci1wb2ludGVyIHAtMCIsImFyaWEtbGFiZWwiOiJDbGVhciBzb3VyY2UiLHRpdGxlOiJDbGVhciDihpIgcGxhY2Vob2xkZXIiLGNoaWxkcmVuOlgoTDAse3NpemU6MTQsc3Ryb2tlV2lkdGg6Mn0pfSldfSksZjEmJiFIJiZYKG5aLHt9KSxYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtc3RyZXRjaCBnYXAtMS41IixjaGlsZHJlbjpbWCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSIsImRhdGEtY2FtZXJhLXNvdXJjZS1tZW51IjohMCxjaGlsZHJlbjpbWCgiYnV0dG9uIix7b25DbGljazooKT0+aygoVyk9PiFXKSxjbGFzc05hbWU6ImgtZnVsbCBtaW4taC1bMzZweF0gdy0xMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLWluay8xMiB0ZXh0LWluay04NSByb3VuZGVkLVs3cHhdIGN1cnNvci1wb2ludGVyIHAtMCBob3ZlcjpiZy1pbmsvWzAuMDZdIGhvdmVyOmJvcmRlci1pbmsvMjAgaG92ZXI6dGV4dC1pbmsiLCJhcmlhLWhhc3BvcHVwIjoibWVudSIsImFyaWEtZXhwYW5kZWQiOkwsdGl0bGU6Sz09PSJ3ZWJjYW0iP2BTb3VyY2U6IHdlYmNhbSR7Uz9gICgke08uZmluZCgoVyk9PlcuaWQ9PT1TKT8ubmFtZT8/U30pYDoiIn0g4oCUIGNsaWNrIHRvIGNoYW5nZWA6YFNvdXJjZTogJHtLfSDigJQgY2xpY2sgdG8gcGljayBtZWRpYSBvciB3ZWJjYW1gLCJhcmlhLWxhYmVsIjoiQ2hvb3NlIGNhbWVyYSBzb3VyY2UiLGNoaWxkcmVuOlgobzUse3NpemU6MjAsc3Ryb2tlV2lkdGg6Mn0pfSksTCYmWCgiZGl2Iix7cm9sZToibWVudSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtW2NhbGMoMTAwJSs2cHgpXSBsZWZ0LTAgei0xMCBtaW4tdy1bMjAwcHhdIGZsZXggZmxleC1jb2wgZ2FwLXB4IHAtMSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLWluay84IHJvdW5kZWQtWzdweF0gc2hhZG93LXBvcG92ZXIiLGNoaWxkcmVuOltYKCJidXR0b24iLHtyb2xlOiJtZW51aXRlbSIsY2xhc3NOYW1lOiJ0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC1pbmstODUgdGV4dC1bMTJweF0gcHgtMi41IHB5LVs3cHhdIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctaW5rL1swLjA2XSIsb25DbGljazooKT0+e2soITEpLGgxKCl9LHRpdGxlOiJQaWNrIGFuIGltYWdlIG9yIHZpZGVvIGZyb20gZGlzayIsY2hpbGRyZW46IkJyb3dzZSBtZWRpYeKApiJ9KSxYKCJkaXYiLHtjbGFzc05hbWU6ImgtcHggYmctaW5rLzggbXktMSJ9KSxYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBwbC0yLjUgcHItMiBwdC0xIHBiLVsycHhdIixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC1pbmstNDUgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIixjaGlsZHJlbjpFPyJDYW1lcmFzIChsb2FkaW5n4oCmKSI6Ty5sZW5ndGg9PT0wPyJObyBjYW1lcmFzIjoiQ2FtZXJhcyJ9KSxYKCJidXR0b24iLHtvbkNsaWNrOihXKT0+e1cuc3RvcFByb3BhZ2F0aW9uKCkscDEoKX0sZGlzYWJsZWQ6RSxjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctWzIycHhdIGgtWzIycHhdIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtWzVweF0gdGV4dC1pbmstNTUgaG92ZXI6dGV4dC1pbmstOTAgY3Vyc29yLXBvaW50ZXIgcC0wIGRpc2FibGVkOm9wYWNpdHktNTAiLCJhcmlhLWxhYmVsIjoiUmVmcmVzaCBjYW1lcmFzIix0aXRsZToiUmVmcmVzaCBjYW1lcmFzIixjaGlsZHJlbjpYKCQ1LHtzaXplOjEzLHN0cm9rZVdpZHRoOjJ9KX0pXX0pLE8ubWFwKChXKT0+e2xldCBtPUs9PT0id2ViY2FtIiYmUz09PVcuaWQ7cmV0dXJuIFgoImJ1dHRvbiIse3JvbGU6Im1lbnVpdGVtIixjbGFzc05hbWU6WyJ0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC1bMTJweF0gcHgtMi41IHB5LVs3cHhdIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6YmctaW5rL1swLjA2XSIsbT8iIWJnLWluay9bMC4xMl0gIXRleHQtaW5rIjoidGV4dC1pbmstODUiXS5qb2luKCIgIiksb25DbGljazooKT0+czEoVyksdGl0bGU6Vy5uYW1lLGNoaWxkcmVuOlcubmFtZX0sVy5pZCl9KV19KV19KSxYKCJidXR0b24iLHtvbkNsaWNrOkUxLm9uQ2xpY2ssZGlzYWJsZWQ6RzAsY2xhc3NOYW1lOlsiZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0yLjUgYm9yZGVyLW5vbmUgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIGRpc2FibGVkOm9wYWNpdHktNTAgbWluLWgtWzM2cHhdIixFMS5raW5kPT09InN0b3AiPyJiZy1pbmsvWzAuMTZdIHRleHQtaW5rIGVuYWJsZWQ6aG92ZXI6YmctaW5rL1swLjIyXSI6ImJnLXN1Y2Nlc3MtZW1lcmFsZCB0ZXh0LW9uLXN1Y2Nlc3MgZW5hYmxlZDpob3ZlcjpicmlnaHRuZXNzLVsxLjA4XSJdLmpvaW4oIiAiKSx0aXRsZTpFMS5raW5kPT09InN0b3AiPyJTdG9wIHRoZSBjYW1lcmEgaGVscGVyIGFuZCB0ZXJtaW5hdGUgaW5qZWN0ZWQgYXBwcyI6RTEua2luZD09PSJhdHRhY2giP2BJbmplY3QgJHtKfSBzbyBpdCBqb2lucyB0aGUgY2FtZXJhIGZlZWRgOiFKPyJCcmluZyBhbiBhcHAgdG8gdGhlIGZvcmVncm91bmQgZmlyc3QiOiJTdGFydDogaW5qZWN0IHRoZSBkeWxpYiBhbmQgbGF1bmNoIHRoZSBmb3JlZ3JvdW5kIGFwcCB3aXRoIHRoZSBjaG9zZW4gc291cmNlIiwiYXJpYS1wcmVzc2VkIjpFMS5raW5kPT09InN0b3AiLCJhcmlhLWxhYmVsIjpFMS5raW5kPT09InN0b3AiPyJTdG9wIjoiUGxheSIsY2hpbGRyZW46W0UxLmtpbmQ9PT0ic3RvcCI/WCh6Mix7fSk6WChCMix7fSksWCgic3BhbiIse2NoaWxkcmVuOkUxLmtpbmQ9PT0ic3RvcCI/IlN0b3AiOkUxLmtpbmQ9PT0iYXR0YWNoIj8iSW5qZWN0IjoiUGxheSJ9KV19KSxYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6ZTEsZGlzYWJsZWQ6dDEsY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LTEwIG1pbi1oLVszNnB4XSBib3JkZXIgcm91bmRlZC1bN3B4XSBmb250LVtpbmhlcml0XSBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBhY3RpdmU6c2NhbGUtWzAuOTddICR7Zz09PSJvbiI/ImJnLWluayBib3JkZXItaW5rIHRleHQtaW5rLWludmVyc2UgY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy1pbmsvWzAuODhdIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLWluay9bMC44OF0gZW5hYmxlZDpob3Zlcjp0ZXh0LWluay1pbnZlcnNlIjoiYmctaW5rL1swLjA0XSBib3JkZXItaW5rLzggdGV4dC1pbmstODUgY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy1pbmsvWzAuMDldIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLWluay8xOCBlbmFibGVkOmhvdmVyOnRleHQtaW5rIn1gLCJhcmlhLWxhYmVsIjpgTWlycm9yOiAke2d9IOKAlCB0YXAgdG8gdG9nZ2xlYCx0aXRsZTp0MT8iTWlycm9yIHRvZ2dsZSBhdmFpbGFibGUgb25jZSBhIHNvdXJjZSBpcyBzdHJlYW1pbmciOmBNaXJyb3I6ICR7Z30g4oCUIGNsaWNrIHRvIHRvZ2dsZWAsImFyaWEtcHJlc3NlZCI6Zz09PSJvbiIsY2hpbGRyZW46WChjNSx7c2l6ZToyMCxzdHJva2VXaWR0aDoyLGZpbGw6Zz09PSJvbiI/ImN1cnJlbnRDb2xvciI6Im5vbmUifSl9KV19KSxmJiZYKHI3LHtraW5kOiJ3YXJuaW5nIixtZXNzYWdlOmZ9KSxKMSYmWChyNyx7a2luZDoiZXJyb3IiLG1lc3NhZ2U6SjF9KV19KX0pfXZhciB0Nz01MDA7ZnVuY3Rpb24gZTcoe3VkaWQ6JCxldmVudHNFbmRwb2ludDpKfSl7bGV0W1EsWl09QSghMSksW0ssWV09QShbXSksW3EsVl09QSghMSksRz1SMSgoKT0+Sj8/YCR7YjEoImFwaS9ldmVudC1sb2cvZXZlbnRzIil9P2RldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX1gLFtKLCRdKTtfKCgpPT57VighMSksWShbXSk7bGV0IE49SjUoRyk7cmV0dXJuIE4ub25tZXNzYWdlPSh7ZGF0YTp6fSk9Pnt0cnl7bGV0IFU9SlNPTi5wYXJzZSh6KTtpZihWKCExKSxBcnJheS5pc0FycmF5KFUuZXZlbnRzKSlZKFUuZXZlbnRzLnNsaWNlKC10NykpO2Vsc2UgaWYoVS5ldmVudClZKChIKT0+e3JldHVyblsuLi5ILmZpbHRlcigoTCk9PkwuaWQhPT1VLmV2ZW50LmlkKSxVLmV2ZW50XS5zbGljZSgtdDcpfSl9Y2F0Y2h7fX0sTi5vbmVycm9yPSgpPT5WKCEwKSwoKT0+Ti5jbG9zZSgpfSxbR10pO2xldCBCPVIxKCgpPT5LLnNsaWNlKCkucmV2ZXJzZSgpLFtLXSk7cmV0dXJuIFgocTAse29wZW46USxvbk9wZW5DaGFuZ2U6WiwiZGF0YS1ldmVudC1sb2ciOiIiLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvXzFmcl9hdXRvXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OlgoSzEse2NoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtaW5rLTUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUiLGNoaWxkcmVuOiJFdmVudCBMb2cifSksWCgic3BhbiIse30pLFgoInNwYW4iLHtjbGFzc05hbWU6InJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1pbmsvOCBiZy1pbmsvWzAuMDRdIHB4LTEuNSBweS1bM3B4XSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gdGV4dC1pbmstNjAiLGNoaWxkcmVuOksubGVuZ3RofSldfSksY2hpbGRyZW46Qi5sZW5ndGg9PT0wP1goImRpdiIse3JvbGU6InN0YXR1cyIsImFyaWEtbGl2ZSI6InBvbGl0ZSIsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS00IHRleHQtWzEycHhdIHRleHQtaW5rLTQ1IixjaGlsZHJlbjpxPyJEaXNjb25uZWN0ZWQiOiJObyBldmVudHMgeWV0In0pOlgoImRpdiIse2NsYXNzTmFtZToiZmxleCBtYXgtaC1bMzIwcHhdIGZsZXgtY29sIGdhcC0xIG92ZXJmbG93LXktYXV0byBweS0wLjUgW3Njcm9sbGJhci13aWR0aDp0aGluXSIscm9sZToibGlzdCIsY2hpbGRyZW46Qi5tYXAoKE4pPT5YKHNaLHtldmVudDpOfSxOLmlkKSl9KX0pfWZ1bmN0aW9uIHNaKHtldmVudDokfSl7bGV0IEo9dFooJC50aW1lc3RhbXApLFE9WyQuc291cmNlLCQua2luZCwkLmFjdGlvbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAvICIpLFo9JC5tc2c/PyQuc3VtbWFyeSxLPSQuc3RhdHVzPT09ImVycm9yIj8iYm9yZGVyLWRhbmdlci81MCBiZy1kYW5nZXIvMTAgdGV4dC1kYW5nZXItc29mdCI6ImJvcmRlci1pbmsvOCBiZy1pbmsvWzAuMDRdIHRleHQtaW5rLTUwIjtyZXR1cm4gWCgiZGl2Iix7cm9sZToibGlzdGl0ZW0iLHRpdGxlOlEsY2xhc3NOYW1lOiJncmlkIGdyaWQtY29scy1bNTZweF8xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbWQgcHgtMS41IHB5LTEuNSB0ZXh0LVsxMnB4XSBsZWFkaW5nLXRpZ2h0IGhvdmVyOmJnLWluay9bMC4wNV0iLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJmb250LW1vbm8gdGV4dC1bMTBweF0gdGV4dC1pbmstNDUiLGNoaWxkcmVuOkp9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1pbmstOTAiLGNoaWxkcmVuOlp9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJtdC0wLjUgYmxvY2sgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgZm9udC1tb25vIHRleHQtWzEwcHhdIHRleHQtaW5rLTQwIixjaGlsZHJlbjpRfSldfSksJC5zdGF0dXM/WCgic3BhbiIse2NsYXNzTmFtZTpgcm91bmRlZC1tZCBib3JkZXIgcHgtMS41IHB5LVszcHhdIHRleHQtWzEwcHhdIGZvbnQtbW9ubyAke0t9YCxjaGlsZHJlbjokLnN0YXR1c30pOm51bGxdfSl9ZnVuY3Rpb24gdFooJCl7bGV0IEo9bmV3IERhdGUoJCk7aWYoTnVtYmVyLmlzTmFOKEouZ2V0VGltZSgpKSlyZXR1cm4iIjtyZXR1cm4gSi50b0xvY2FsZVRpbWVTdHJpbmcoW10se2hvdXI6IjItZGlnaXQiLG1pbnV0ZToiMi1kaWdpdCIsc2Vjb25kOiIyLWRpZ2l0In0pfXZhciBIMj1bImV4dHJhLXNtYWxsIiwic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsImV4dHJhLWxhcmdlIiwiZXh0cmEtZXh0cmEtbGFyZ2UiLCJleHRyYS1leHRyYS1leHRyYS1sYXJnZSJdLGVaPTI1MCwkWD17YXBwZWFyYW5jZToibGlnaHQiLCJsaXF1aWQtZ2xhc3MiOiJjbGVhciIsImNvbG9yLWZpbHRlciI6Im5vbmUiLCJ0ZXh0LXNpemUiOiJsYXJnZSIsInJlZHVjZS1tb3Rpb24iOiJvZmYiLCJpbmNyZWFzZS1jb250cmFzdCI6Im9mZiIsInNob3ctYm9yZGVycyI6Im9mZiIsInJlZHVjZS10cmFuc3BhcmVuY3kiOiJvZmYiLHZvaWNlb3Zlcjoib2ZmIn0sQzg9e2FwcGVhcmFuY2U6W3t2YWx1ZToibGlnaHQiLGxhYmVsOiJMaWdodCJ9LHt2YWx1ZToiZGFyayIsbGFiZWw6IkRhcmsifV0sImxpcXVpZC1nbGFzcyI6W3t2YWx1ZToiY2xlYXIiLGxhYmVsOiJDbGVhciJ9LHt2YWx1ZToidGludGVkIixsYWJlbDoiVGludGVkIn1dLCJjb2xvci1maWx0ZXIiOlt7dmFsdWU6Im5vbmUiLGxhYmVsOiJOb25lIn0se3ZhbHVlOiJyZWQtZ3JlZW4iLGxhYmVsOiJSZWQvR3JlZW4gKFByb3Rhbm9waWEpIn0se3ZhbHVlOiJncmVlbi1yZWQiLGxhYmVsOiJHcmVlbi9SZWQgKERldXRlcmFub3BpYSkifSx7dmFsdWU6ImJsdWUteWVsbG93IixsYWJlbDoiQmx1ZS9ZZWxsb3cgKFRyaXRhbm9waWEpIn0se3ZhbHVlOiJncmF5c2NhbGUiLGxhYmVsOiJHcmF5c2NhbGUifV19LEpYPVt7a2V5OiJyZWR1Y2UtbW90aW9uIixsYWJlbDoiUmVkdWNlIE1vdGlvbiJ9LHtrZXk6ImluY3JlYXNlLWNvbnRyYXN0IixsYWJlbDoiSW5jcmVhc2UgQ29udHJhc3QifSx7a2V5OiJzaG93LWJvcmRlcnMiLGxhYmVsOiJTaG93IEJvcmRlcnMifSx7a2V5OiJyZWR1Y2UtdHJhbnNwYXJlbmN5IixsYWJlbDoiUmVkdWNlIFRyYW5zcGFyZW5jeSJ9LHtrZXk6InZvaWNlb3ZlciIsbGFiZWw6IlZvaWNlT3ZlciJ9XTtmdW5jdGlvbiBjMCh7aWNvbjokLGxhYmVsOkosY2hpbGRyZW46UX0pe3JldHVybiBYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBtaW4taC1bMzBweF0iLCJkYXRhLXNldHRpbmctcm93IjpKLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LVsxMnB4XSB0ZXh0LWluay05MCB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6ImZsZXggc2l6ZS1bMThweF0gaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtaW5rIixjaGlsZHJlbjokfSksSl19KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IG1pbi13LTAganVzdGlmeS1lbmQiLGNoaWxkcmVuOlF9KV19KX1mdW5jdGlvbiBRWCh7dmFsdWU6JCxkaXNhYmxlZDpKLG9uQ2hhbmdlOlF9KXtsZXRbWixLXT1BKG51bGwpLFk9VChudWxsKSxxPVQobnVsbCksVj1QKChVKT0+e2lmKHEuY3VycmVudD09PVUpcmV0dXJuO3EuY3VycmVudD1VLFEoVSl9LFtRXSksRz1QKChVKT0+e2lmKEsoVSksWS5jdXJyZW50KWNsZWFyVGltZW91dChZLmN1cnJlbnQpO1kuY3VycmVudD1zZXRUaW1lb3V0KCgpPT5WKFUpLGVaKX0sW1ZdKSxCPVAoKCk9PntpZihZLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFkuY3VycmVudCksWS5jdXJyZW50PW51bGw7SygoVSk9PntpZihVIT09bnVsbClWKFUpO3JldHVybiBudWxsfSkscS5jdXJyZW50PW51bGx9LFtWXSksTj1IMi5sZW5ndGgtMTtyZXR1cm4gWCgic3BhbiIse2NsYXNzTmFtZToiZmxleCB3LVsxMjBweF0gbWluLXctMCBmbGV4LWNvbCIsY2hpbGRyZW46W1gobDIseyJhcmlhLWxhYmVsIjoiVGV4dCBTaXplIixtaW46MCxtYXg6TixzdGVwOjEsdmFsdWU6Wj8/JCxkaXNhYmxlZDpKLG9uQ2hhbmdlOihVKT0+RyhOdW1iZXIoVS50YXJnZXQudmFsdWUpKSxvblBvaW50ZXJVcDpCLG9uS2V5VXA6QixvbkJsdXI6Qn0pLFgoInNwYW4iLHsiYXJpYS1oaWRkZW4iOiEwLGNsYXNzTmFtZToicG9pbnRlci1ldmVudHMtbm9uZSBtdC1bM3B4XSBmbGV4IGp1c3RpZnktYmV0d2VlbiBweC1bNS41cHhdIixjaGlsZHJlbjpIMi5tYXAoKFUpPT5YKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLVsycHhdIHJvdW5kZWQtZnVsbCBiZy1pbmsvNDAifSxVKSl9KV19KX1mdW5jdGlvbiBrMih7bGFiZWw6JCx2YWx1ZTpKLG9wdGlvbnM6USxkaXNhYmxlZDpaLG9uQ2hhbmdlOkt9KXtyZXR1cm4gWChHMyx7bGFiZWw6JCx2YWx1ZTpKLG9wdGlvbnM6USxkaXNhYmxlZDpaLG9uQ2hhbmdlOkssY2xhc3NOYW1lOiJiZy1pbmsvWzAuMDZdIGJvcmRlciBib3JkZXItaW5rLzEwIHJvdW5kZWQtbWQgdGV4dC1pbmstOTAgdGV4dC1bMTJweF0gcHktMC41IHB4LTIgbWluLXctMCBtYXgtdy1bMTUwcHhdIGRpc2FibGVkOnRleHQtaW5rLTQwIn0pfXZhciBMMj17YXBwZWFyYW5jZTpYKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbWCgicGF0aCIse2Q6Ik0xMiAydjIifSksWCgicGF0aCIse2Q6Ik0xNC44MzcgMTYuMzg1YTYgNiAwIDEgMS03LjIyMy03LjIyMmMuNjI0LS4xNDcuOTcuNjYuNzE1IDEuMjQ4YTQgNCAwIDAgMCA1LjI2IDUuMjU5Yy41ODktLjI1NSAxLjM5Ni4wOSAxLjI0OC43MTUifSksWCgicGF0aCIse2Q6Ik0xNiAxMmE0IDQgMCAwIDAtNC00In0pLFgoInBhdGgiLHtkOiJtMTkgNS0xLjI1NiAxLjI1NiJ9KSxYKCJwYXRoIix7ZDoiTTIwIDEyaDIifSldfSksZ2xhc3M6WCgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjIwIDIyMCIsZmlsbDoiY3VycmVudENvbG9yIixzdHJva2U6Im5vbmUiLGNoaWxkcmVuOltYKCJwYXRoIix7ZDoiTTE1MiAxODNWMTk1SDEwMFYxODNIMTUyWk0xOTYgMTM5VjEyNkMxOTYgMTAxLjY5OSAxNzYuMzAxIDgyIDE1MiA4MkgxMDBDNzUuNjk5NSA4MiA1NiAxMDEuNjk5IDU2IDEyNlYxMzlDNTYgMTYzLjMwMSA3NS42OTk1IDE4MyAxMDAgMTgzVjE5NUw5OS4yNzY0IDE5NC45OTVDNjguOTIyOCAxOTQuNjExIDQ0LjM4OTMgMTcwLjA3NyA0NC4wMDQ5IDEzOS43MjRMNDQgMTM5VjEyNkM0NCA5NS4wNzIxIDY5LjA3MjEgNzAgMTAwIDcwSDE1MkMxODIuOTI4IDcwIDIwOCA5NS4wNzIxIDIwOCAxMjZWMTM5TDIwNy45OTUgMTM5LjcyNEMyMDcuNjExIDE3MC4wNzcgMTgzLjA3NyAxOTQuNjExIDE1Mi43MjQgMTk0Ljk5NUwxNTIgMTk1VjE4M0MxNzYuMzAxIDE4MyAxOTYgMTYzLjMwMSAxOTYgMTM5WiJ9KSxYKCJwYXRoIix7ZDoiTTEzNiAyNUMxNDcuMDQ2IDI1IDE1NiAzMy45NTQzIDE1NiA0NVY3MEgxNDNWNDVDMTQzIDQxLjEzNCAxMzkuODY2IDM4IDEzNiAzOEg0MUMzNy4xMzQgMzggMzQgNDEuMTM0IDM0IDQ1VjE0MEMzNCAxNDMuODY2IDM3LjEzNCAxNDcgNDEgMTQ3SDQ0Ljg2MDRDNDUuNjQ4NyAxNTEuNTM2IDQ2Ljk2MzQgMTU1Ljg5MSA0OC43NDAyIDE2MEg0MUw0MC40ODM0IDE1OS45OTNDMjkuODQ4MSAxNTkuNzI0IDIxLjI3NjUgMTUxLjE1MiAyMS4wMDY4IDE0MC41MTdMMjEgMTQwVjQ1QzIxIDMzLjk1NDMgMjkuOTU0MyAyNSA0MSAyNUgxMzZaIn0pLFgoInBhdGgiLHtkOiJNMTU2LjE5OSAxNDBDMTU2LjE5OSAxNTAuODczIDE0Ny41MjMgMTU5LjcxOSAxMzYuNzE2IDE1OS45OTNMMTM2LjE5OSAxNjBIODAuOTE3Qzc3Ljk0NjEgMTYwIDc2LjE2MzkgMTYzLjMgNzcuNzkzIDE2NS43ODRDNzkuMjQ1MSAxNjcuOTk5IDc2LjE2NDcgMTcwLjM1MyA3NC40MDk0IDE2OC4zN0w3My42MDU5IDE2Ny40NjJDNjkuMzQ5NyAxNjIuNjU0IDY3IDE1Ni40NTUgNjcgMTUwLjAzNEM2NyAxNDguMzU4IDY4LjM1ODMgMTQ3IDcwLjAzMzkgMTQ3SDEzNi4xOTlDMTQwLjA2NSAxNDcgMTQzLjE5OSAxNDMuODY2IDE0My4xOTkgMTQwVjk2Ljk5NTVDMTQzLjE5OSA5My45ODIyIDE0MS4zNTQgOTEuMjc2MyAxMzguNTQ5IDkwLjE3NjFDMTM3LjM4OSA4OS43MjE1IDEzNy43MTUgODggMTM4Ljk2IDg4TDE0My4xOTkgODhDMTUwLjM3OSA4OCAxNTYuMTk5IDkzLjgyMDMgMTU2LjE5OSAxMDFWMTQwWiJ9KV19KSxmaWx0ZXI6WCgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1goInBhdGgiLHtkOiJNMTEgMTdhNCA0IDAgMCAxLTggMFY1YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAyWiJ9KSxYKCJwYXRoIix7ZDoiTTE2LjcgMTNIMTlhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJINyJ9KSxYKCJwYXRoIix7ZDoiTSA3IDE3aC4wMSJ9KSxYKCJwYXRoIix7ZDoibTExIDggMi4zLTIuM2EyLjQgMi40IDAgMCAxIDMuNDA0LjAwNEwxOC42IDcuNmEyLjQgMi40IDAgMCAxIC4wMjYgMy40MzRMOS45IDE5LjgifSldfSksdGV4dFNpemU6WCgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgNTIgMzQiLGZpbGw6ImN1cnJlbnRDb2xvciIsc3Ryb2tlOiJub25lIixjaGlsZHJlbjpYKCJwYXRoIix7ZDoiTTM5LjcyNjYgMzMuMDIzNEMzOC4xNDg0IDMzLjAyMzQgMzYuNzUgMzIuNzI2NiAzNS41MzEyIDMyLjEzMjhDMzQuMzEyNSAzMS41MzkxIDMzLjM1OTQgMzAuNzEwOSAzMi42NzE5IDI5LjY0ODRDMzIgMjguNTcwMyAzMS42NjQxIDI3LjMxMjUgMzEuNjY0MSAyNS44NzVDMzEuNjY0MSAyMy43ODEyIDMyLjQyOTcgMjIuMTA5NCAzMy45NjA5IDIwLjg1OTRDMzUuNTA3OCAxOS42MDk0IDM3LjcxMDkgMTguOTA2MiA0MC41NzAzIDE4Ljc1TDQ3LjYwMTYgMTguMzUxNlYxNi41QzQ3LjYwMTYgMTUuMDE1NiA0Ny4xMzI4IDEzLjgzNTkgNDYuMTk1MyAxMi45NjA5QzQ1LjI1NzggMTIuMDg1OSA0My45NTMxIDExLjY0ODQgNDIuMjgxMiAxMS42NDg0QzQwLjkwNjIgMTEuNjQ4NCAzOS43NSAxMS45NDUzIDM4LjgxMjUgMTIuNTM5MUMzNy44NzUgMTMuMTMyOCAzNy4wOTM4IDE0LjA0NjkgMzYuNDY4OCAxNS4yODEyQzM2LjI2NTYgMTUuNjA5NCAzNi4wMTU2IDE1Ljg1MTYgMzUuNzE4OCAxNi4wMDc4QzM1LjQyMTkgMTYuMTY0MSAzNS4wNzgxIDE2LjI0MjIgMzQuNjg3NSAxNi4yNDIyQzM0LjE1NjIgMTYuMjQyMiAzMy43MTA5IDE2LjA3ODEgMzMuMzUxNiAxNS43NUMzMy4wMDc4IDE1LjQyMTkgMzIuODM1OSAxNC45OTIyIDMyLjgzNTkgMTQuNDYwOUMzMi44MzU5IDE0LjIyNjYgMzIuODY3MiAxMy45NzY2IDMyLjkyOTcgMTMuNzEwOUMzMy4wMDc4IDEzLjQ0NTMgMzMuMTA5NCAxMy4xNzk3IDMzLjIzNDQgMTIuOTE0MUMzMy44NzUgMTEuNDYwOSAzNS4wMTU2IDEwLjMwNDcgMzYuNjU2MiA5LjQ0NTMxQzM4LjMxMjUgOC41ODU5NCA0MC4yMjY2IDguMTU2MjUgNDIuMzk4NCA4LjE1NjI1QzQ0LjMyMDMgOC4xNTYyNSA0NS45ODQ0IDguNDkyMTkgNDcuMzkwNiA5LjE2NDA2QzQ4LjgxMjUgOS44MjAzMSA0OS44OTg0IDEwLjc1IDUwLjY0ODQgMTEuOTUzMUM1MS40MTQxIDEzLjE1NjIgNTEuNzk2OSAxNC41NzAzIDUxLjc5NjkgMTYuMTk1M1YzMC45MTQxQzUxLjc5NjkgMzEuNTg1OSA1MS42MDk0IDMyLjEwOTQgNTEuMjM0NCAzMi40ODQ0QzUwLjg1OTQgMzIuODU5NCA1MC4zNjcyIDMzLjA0NjkgNDkuNzU3OCAzMy4wNDY5QzQ5LjE2NDEgMzMuMDQ2OSA0OC42Nzk3IDMyLjg2NzIgNDguMzA0NyAzMi41MDc4QzQ3LjkyOTcgMzIuMTQ4NCA0Ny43MzQ0IDMxLjY2NDEgNDcuNzE4OCAzMS4wNTQ3VjI4LjM1OTRINDcuNjcxOUM0Ni45ODQ0IDI5Ljc4MTIgNDUuOTA2MiAzMC45MTQxIDQ0LjQzNzUgMzEuNzU3OEM0Mi45ODQ0IDMyLjYwMTYgNDEuNDE0MSAzMy4wMjM0IDM5LjcyNjYgMzMuMDIzNFpNNDAuODA0NyAyOS42NzE5QzQyLjA3MDMgMjkuNjcxOSA0My4yMTA5IDI5LjQwNjIgNDQuMjI2NiAyOC44NzVDNDUuMjU3OCAyOC4zNDM4IDQ2LjA3ODEgMjcuNjE3MiA0Ni42ODc1IDI2LjY5NTNDNDcuMjk2OSAyNS43NzM0IDQ3LjYwMTYgMjQuNzUgNDcuNjAxNiAyMy42MjVWMjEuMzI4MUw0MS4xMzI4IDIxLjc1QzM5LjQ0NTMgMjEuODU5NCAzOC4xNjQxIDIyLjI3MzQgMzcuMjg5MSAyMi45OTIyQzM2LjQxNDEgMjMuNjk1MyAzNS45NzY2IDI0LjYwOTQgMzUuOTc2NiAyNS43MzQ0QzM1Ljk3NjYgMjYuOTIxOSAzNi40MjE5IDI3Ljg3NSAzNy4zMTI1IDI4LjU5MzhDMzguMjAzMSAyOS4zMTI1IDM5LjM2NzIgMjkuNjcxOSA0MC44MDQ3IDI5LjY3MTlaTTIuMTc5NjkgMzMuMDIzNEMxLjUwNzgxIDMzLjAyMzQgMC45NzY1NjIgMzIuODM1OSAwLjU4NTkzOCAzMi40NjA5QzAuMTk1MzEyIDMyLjA4NTkgMCAzMS41NzgxIDAgMzAuOTM3NUMwIDMwLjUzMTIgMC4wODU5Mzc1IDMwLjA3MDMgMC4yNTc4MTIgMjkuNTU0N0wxMC40MDYyIDIuNDE0MDZDMTAuOTg0NCAwLjgwNDY4OCAxMi4xMDE2IDAgMTMuNzU3OCAwQzE0LjYxNzIgMCAxNS4zMjgxIDAuMjAzMTI1IDE1Ljg5MDYgMC42MDkzNzVDMTYuNDUzMSAxLjAxNTYyIDE2Ljg3NSAxLjYyNSAxNy4xNTYyIDIuNDM3NUwyNy4yNTc4IDI5LjQ4NDRDMjcuNDQ1MyAzMCAyNy41MzkxIDMwLjQ2ODggMjcuNTM5MSAzMC44OTA2QzI3LjUzOTEgMzEuNTQ2OSAyNy4zMzU5IDMyLjA3MDMgMjYuOTI5NyAzMi40NjA5QzI2LjUyMzQgMzIuODM1OSAyNS45NzY2IDMzLjAyMzQgMjUuMjg5MSAzMy4wMjM0QzI0LjYzMjggMzMuMDIzNCAyNC4xMDk0IDMyLjg3NSAyMy43MTg4IDMyLjU3ODFDMjMuMzQzOCAzMi4yODEyIDIzLjAzOTEgMzEuNzg5MSAyMi44MDQ3IDMxLjEwMTZMMTMuODI4MSA1LjM0Mzc1SDEzLjY2NDFMNC42NjQwNiAzMS4xMDE2QzQuNDI5NjkgMzEuNzg5MSA0LjEyNSAzMi4yODEyIDMuNzUgMzIuNTc4MUMzLjM3NSAzMi44NzUgMi44NTE1NiAzMy4wMjM0IDIuMTc5NjkgMzMuMDIzNFpNNi42Nzk2OSAyMy43NDIyQzYuMTQ4NDQgMjMuNzQyMiA1LjcwMzEyIDIzLjU2MjUgNS4zNDM3NSAyMy4yMDMxQzQuOTg0MzggMjIuODQzOCA0LjgwNDY5IDIyLjM5ODQgNC44MDQ2OSAyMS44NjcyQzQuODA0NjkgMjEuMzUxNiA0Ljk4NDM4IDIwLjkxNDEgNS4zNDM3NSAyMC41NTQ3QzUuNzAzMTIgMjAuMTk1MyA2LjE0ODQ0IDIwLjAxNTYgNi42Nzk2OSAyMC4wMTU2SDIwLjg1OTRDMjEuMzc1IDIwLjAxNTYgMjEuODEyNSAyMC4xOTUzIDIyLjE3MTkgMjAuNTU0N0MyMi41MzEyIDIwLjkxNDEgMjIuNzEwOSAyMS4zNTE2IDIyLjcxMDkgMjEuODY3MkMyMi43MTA5IDIyLjM5ODQgMjIuNTMxMiAyMi44NDM4IDIyLjE3MTkgMjMuMjAzMUMyMS44MTI1IDIzLjU2MjUgMjEuMzc1IDIzLjc0MjIgMjAuODU5NCAyMy43NDIySDYuNjc5NjlaIn0pfSksbW90aW9uOlgoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixjaGlsZHJlbjpbWCgiY2lyY2xlIix7Y3g6IjE0IixjeToiMTIiLHI6IjYifSksWCgicGF0aCIse2Q6Ik0zIDhoNE0yIDEyaDRNMyAxNmg0In0pXX0pLGNvbnRyYXN0OlgoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltYKCJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiMTAifSksWCgicGF0aCIse2Q6Ik0xMiAxOGE2IDYgMCAwIDAgMC0xMnYxMnoifSldfSksYm9yZGVyczpYKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbWCgicGF0aCIse2Q6Ik01IDIxYTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMiJ9KSxYKCJwYXRoIix7ZDoiTTkgMjFoMSJ9KSxYKCJwYXRoIix7ZDoiTTE0IDIxaDEifSldfSksdHJhbnNwYXJlbmN5OlgoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDYzIDQ2IixmaWxsOiJjdXJyZW50Q29sb3IiLHN0cm9rZToibm9uZSIsY2hpbGRyZW46WCgicGF0aCIse2Q6Ik0yMi43MzQ0IDQuMTcxODhDMjIuMTg3NSA0LjE3MTg4IDIxLjcxODggMy45NzY1NiAyMS4zMjgxIDMuNTg1OTRDMjAuOTM3NSAzLjE5NTMxIDIwLjc0MjIgMi43MTg3NSAyMC43NDIyIDIuMTU2MjVDMjAuNzQyMiAxLjYwOTM4IDIwLjkzNzUgMS4xNDA2MiAyMS4zMjgxIDAuNzVDMjEuNzE4OCAwLjM1OTM3NSAyMi4xODc1IDAuMTY0MDYyIDIyLjczNDQgMC4xNjQwNjJDMjMuMjgxMiAwLjE2NDA2MiAyMy43NSAwLjM1OTM3NSAyNC4xNDA2IDAuNzVDMjQuNTMxMiAxLjE0MDYyIDI0LjcyNjYgMS42MDkzOCAyNC43MjY2IDIuMTU2MjVDMjQuNzI2NiAyLjcxODc1IDI0LjUzMTIgMy4xOTUzMSAyNC4xNDA2IDMuNTg1OTRDMjMuNzUgMy45NzY1NiAyMy4yODEyIDQuMTcxODggMjIuNzM0NCA0LjE3MTg4Wk0yOS4xMDk0IDUuMjAzMTJDMjguNTQ2OSA1LjIwMzEyIDI4LjA3MDMgNS4wMDc4MSAyNy42Nzk3IDQuNjE3MTlDMjcuMjg5MSA0LjIyNjU2IDI3LjA5MzggMy43NTc4MSAyNy4wOTM4IDMuMjEwOTRDMjcuMDkzOCAyLjY2NDA2IDI3LjI4OTEgMi4xOTUzMSAyNy42Nzk3IDEuODA0NjlDMjguMDcwMyAxLjM5ODQ0IDI4LjU0NjkgMS4xOTUzMSAyOS4xMDk0IDEuMTk1MzFDMjkuNjU2MiAxLjE5NTMxIDMwLjEyNSAxLjM5ODQ0IDMwLjUxNTYgMS44MDQ2OUMzMC45MDYyIDIuMTk1MzEgMzEuMTAxNiAyLjY2NDA2IDMxLjEwMTYgMy4yMTA5NEMzMS4xMDE2IDMuNzU3ODEgMzAuOTA2MiA0LjIyNjU2IDMwLjUxNTYgNC42MTcxOUMzMC4xMjUgNS4wMDc4MSAyOS42NTYyIDUuMjAzMTIgMjkuMTA5NCA1LjIwMzEyWk0zNC44NzUgOC4xMzI4MUMzNC4zMjgxIDguMTMyODEgMzMuODUxNiA3LjkzNzUgMzMuNDQ1MyA3LjU0Njg4QzMzLjA1NDcgNy4xNDA2MiAzMi44NTk0IDYuNjcxODggMzIuODU5NCA2LjE0MDYyQzMyLjg1OTQgNS41NzgxMiAzMy4wNTQ3IDUuMTAxNTYgMzMuNDQ1MyA0LjcxMDk0QzMzLjg1MTYgNC4zMjAzMSAzNC4zMjgxIDQuMTI1IDM0Ljg3NSA0LjEyNUMzNS40MjE5IDQuMTI1IDM1Ljg5MDYgNC4zMjAzMSAzNi4yODEyIDQuNzEwOTRDMzYuNjg3NSA1LjEwMTU2IDM2Ljg5MDYgNS41NzgxMiAzNi44OTA2IDYuMTQwNjJDMzYuODkwNiA2LjY3MTg4IDM2LjY4NzUgNy4xNDA2MiAzNi4yODEyIDcuNTQ2ODhDMzUuODkwNiA3LjkzNzUgMzUuNDIxOSA4LjEzMjgxIDM0Ljg3NSA4LjEzMjgxWk0zOS40NDUzIDEyLjY3OTdDMzguODk4NCAxMi42Nzk3IDM4LjQyMTkgMTIuNDg0NCAzOC4wMTU2IDEyLjA5MzhDMzcuNjI1IDExLjcwMzEgMzcuNDI5NyAxMS4yMzQ0IDM3LjQyOTcgMTAuNjg3NUMzNy40Mjk3IDEwLjE1NjIgMzcuNjI1IDkuNjk1MzEgMzguMDE1NiA5LjMwNDY5QzM4LjQyMTkgOC44OTg0NCAzOC44OTg0IDguNjk1MzEgMzkuNDQ1MyA4LjY5NTMxQzM5Ljk5MjIgOC42OTUzMSA0MC40NjA5IDguODk4NDQgNDAuODUxNiA5LjMwNDY5QzQxLjI0MjIgOS42OTUzMSA0MS40Mzc1IDEwLjE1NjIgNDEuNDM3NSAxMC42ODc1QzQxLjQzNzUgMTEuMjM0NCA0MS4yNDIyIDExLjcwMzEgNDAuODUxNiAxMi4wOTM4QzQwLjQ2MDkgMTIuNDg0NCAzOS45OTIyIDEyLjY3OTcgMzkuNDQ1MyAxMi42Nzk3Wk00Mi4zNzUgMTguMzk4NEM0MS44MTI1IDE4LjM5ODQgNDEuMzI4MSAxOC4yMDMxIDQwLjkyMTkgMTcuODEyNUM0MC41MzEyIDE3LjQyMTkgNDAuMzM1OSAxNi45NTMxIDQwLjMzNTkgMTYuNDA2MkM0MC4zMzU5IDE1Ljg0MzggNDAuNTMxMiAxNS4zNjcyIDQwLjkyMTkgMTQuOTc2NkM0MS4zMjgxIDE0LjU4NTkgNDEuODEyNSAxNC4zOTA2IDQyLjM3NSAxNC4zOTA2QzQyLjkwNjIgMTQuMzkwNiA0My4zNjcyIDE0LjU4NTkgNDMuNzU3OCAxNC45NzY2QzQ0LjE2NDEgMTUuMzY3MiA0NC4zNjcyIDE1Ljg0MzggNDQuMzY3MiAxNi40MDYyQzQ0LjM2NzIgMTYuOTUzMSA0NC4xNjQxIDE3LjQyMTkgNDMuNzU3OCAxNy44MTI1QzQzLjM2NzIgMTguMjAzMSA0Mi45MDYyIDE4LjM5ODQgNDIuMzc1IDE4LjM5ODRaTTQzLjQ1MzEgMjQuNzk2OUM0Mi45MDYyIDI0Ljc5NjkgNDIuNDM3NSAyNC42MDE2IDQyLjA0NjkgMjQuMjEwOUM0MS42NTYyIDIzLjgyMDMgNDEuNDYwOSAyMy4zNDM4IDQxLjQ2MDkgMjIuNzgxMkM0MS40NjA5IDIyLjIzNDQgNDEuNjU2MiAyMS43NjU2IDQyLjA0NjkgMjEuMzc1QzQyLjQzNzUgMjAuOTg0NCA0Mi45MDYyIDIwLjc4OTEgNDMuNDUzMSAyMC43ODkxQzQ0IDIwLjc4OTEgNDQuNDY4OCAyMC45ODQ0IDQ0Ljg1OTQgMjEuMzc1QzQ1LjI2NTYgMjEuNzY1NiA0NS40Njg4IDIyLjIzNDQgNDUuNDY4OCAyMi43ODEyQzQ1LjQ2ODggMjMuMzQzOCA0NS4yNjU2IDIzLjgyMDMgNDQuODU5NCAyNC4yMTA5QzQ0LjQ2ODggMjQuNjAxNiA0NCAyNC43OTY5IDQzLjQ1MzEgMjQuNzk2OVpNNDIuMzc1IDMxLjE3MTlDNDEuODEyNSAzMS4xNzE5IDQxLjMyODEgMzAuOTc2NiA0MC45MjE5IDMwLjU4NTlDNDAuNTMxMiAzMC4xOTUzIDQwLjMzNTkgMjkuNzI2NiA0MC4zMzU5IDI5LjE3OTdDNDAuMzM1OSAyOC42MTcyIDQwLjUzMTIgMjguMTQwNiA0MC45MjE5IDI3Ljc1QzQxLjMyODEgMjcuMzU5NCA0MS44MTI1IDI3LjE2NDEgNDIuMzc1IDI3LjE2NDFDNDIuOTA2MiAyNy4xNjQxIDQzLjM2NzIgMjcuMzU5NCA0My43NTc4IDI3Ljc1QzQ0LjE2NDEgMjguMTQwNiA0NC4zNjcyIDI4LjYxNzIgNDQuMzY3MiAyOS4xNzk3QzQ0LjM2NzIgMjkuNzI2NiA0NC4xNjQxIDMwLjE5NTMgNDMuNzU3OCAzMC41ODU5QzQzLjM2NzIgMzAuOTc2NiA0Mi45MDYyIDMxLjE3MTkgNDIuMzc1IDMxLjE3MTlaTTM5LjQ0NTMgMzYuODkwNkMzOC44OTg0IDM2Ljg5MDYgMzguNDIxOSAzNi42OTUzIDM4LjAxNTYgMzYuMzA0N0MzNy42MjUgMzUuODk4NCAzNy40Mjk3IDM1LjQyMTkgMzcuNDI5NyAzNC44NzVDMzcuNDI5NyAzNC4zMjgxIDM3LjYyNSAzMy44NTk0IDM4LjAxNTYgMzMuNDY4OEMzOC40MjE5IDMzLjA2MjUgMzguODk4NCAzMi44NTk0IDM5LjQ0NTMgMzIuODU5NEMzOS45OTIyIDMyLjg1OTQgNDAuNDYwOSAzMy4wNjI1IDQwLjg1MTYgMzMuNDY4OEM0MS4yNDIyIDMzLjg1OTQgNDEuNDM3NSAzNC4zMjgxIDQxLjQzNzUgMzQuODc1QzQxLjQzNzUgMzUuNDIxOSA0MS4yNDIyIDM1Ljg5ODQgNDAuODUxNiAzNi4zMDQ3QzQwLjQ2MDkgMzYuNjk1MyAzOS45OTIyIDM2Ljg5MDYgMzkuNDQ1MyAzNi44OTA2Wk0zNC44NzUgNDEuNDM3NUMzNC4zMjgxIDQxLjQzNzUgMzMuODUxNiA0MS4yNDIyIDMzLjQ0NTMgNDAuODUxNkMzMy4wNTQ3IDQwLjQ2MDkgMzIuODU5NCAzOS45OTIyIDMyLjg1OTQgMzkuNDQ1M0MzMi44NTk0IDM4Ljg5ODQgMzMuMDU0NyAzOC40Mjk3IDMzLjQ0NTMgMzguMDM5MUMzMy44NTE2IDM3LjYzMjggMzQuMzI4MSAzNy40Mjk3IDM0Ljg3NSAzNy40Mjk3QzM1LjQyMTkgMzcuNDI5NyAzNS44OTA2IDM3LjYzMjggMzYuMjgxMiAzOC4wMzkxQzM2LjY4NzUgMzguNDI5NyAzNi44OTA2IDM4Ljg5ODQgMzYuODkwNiAzOS40NDUzQzM2Ljg5MDYgMzkuOTkyMiAzNi42ODc1IDQwLjQ2MDkgMzYuMjgxMiA0MC44NTE2QzM1Ljg5MDYgNDEuMjQyMiAzNS40MjE5IDQxLjQzNzUgMzQuODc1IDQxLjQzNzVaTTI5LjEwOTQgNDQuMzY3MkMyOC41NDY5IDQ0LjM2NzIgMjguMDcwMyA0NC4xNjQxIDI3LjY3OTcgNDMuNzU3OEMyNy4yODkxIDQzLjM2NzIgMjcuMDkzOCA0Mi44OTg0IDI3LjA5MzggNDIuMzUxNkMyNy4wOTM4IDQxLjgwNDcgMjcuMjg5MSA0MS4zMzU5IDI3LjY3OTcgNDAuOTQ1M0MyOC4wNzAzIDQwLjU1NDcgMjguNTQ2OSA0MC4zNTk0IDI5LjEwOTQgNDAuMzU5NEMyOS42NTYyIDQwLjM1OTQgMzAuMTI1IDQwLjU1NDcgMzAuNTE1NiA0MC45NDUzQzMwLjkwNjIgNDEuMzM1OSAzMS4xMDE2IDQxLjgwNDcgMzEuMTAxNiA0Mi4zNTE2QzMxLjEwMTYgNDIuODk4NCAzMC45MDYyIDQzLjM2NzIgMzAuNTE1NiA0My43NTc4QzMwLjEyNSA0NC4xNjQxIDI5LjY1NjIgNDQuMzY3MiAyOS4xMDk0IDQ0LjM2NzJaTTIyLjczNDQgNDUuMzk4NEMyMi4xODc1IDQ1LjM5ODQgMjEuNzE4OCA0NS4yMDMxIDIxLjMyODEgNDQuODEyNUMyMC45Mzc1IDQ0LjQyMTkgMjAuNzQyMiA0My45NTMxIDIwLjc0MjIgNDMuNDA2MkMyMC43NDIyIDQyLjg0MzggMjAuOTM3NSA0Mi4zNjcyIDIxLjMyODEgNDEuOTc2NkMyMS43MTg4IDQxLjU4NTkgMjIuMTg3NSA0MS4zOTA2IDIyLjczNDQgNDEuMzkwNkMyMy4yODEyIDQxLjM5MDYgMjMuNzUgNDEuNTg1OSAyNC4xNDA2IDQxLjk3NjZDMjQuNTMxMiA0Mi4zNjcyIDI0LjcyNjYgNDIuODQzOCAyNC43MjY2IDQzLjQwNjJDMjQuNzI2NiA0My45NTMxIDI0LjUzMTIgNDQuNDIxOSAyNC4xNDA2IDQ0LjgxMjVDMjMuNzUgNDUuMjAzMSAyMy4yODEyIDQ1LjM5ODQgMjIuNzM0NCA0NS4zOTg0Wk0xNi4zNTk0IDQ0LjM2NzJDMTUuODEyNSA0NC4zNjcyIDE1LjM0MzggNDQuMTY0MSAxNC45NTMxIDQzLjc1NzhDMTQuNTYyNSA0My4zNjcyIDE0LjM2NzIgNDIuODk4NCAxNC4zNjcyIDQyLjM1MTZDMTQuMzY3MiA0MS44MDQ3IDE0LjU2MjUgNDEuMzM1OSAxNC45NTMxIDQwLjk0NTNDMTUuMzQzOCA0MC41NTQ3IDE1LjgxMjUgNDAuMzU5NCAxNi4zNTk0IDQwLjM1OTRDMTYuOTIxOSA0MC4zNTk0IDE3LjM5ODQgNDAuNTU0NyAxNy43ODkxIDQwLjk0NTNDMTguMTc5NyA0MS4zMzU5IDE4LjM3NSA0MS44MDQ3IDE4LjM3NSA0Mi4zNTE2QzE4LjM3NSA0Mi44OTg0IDE4LjE3OTcgNDMuMzY3MiAxNy43ODkxIDQzLjc1NzhDMTcuMzk4NCA0NC4xNjQxIDE2LjkyMTkgNDQuMzY3MiAxNi4zNTk0IDQ0LjM2NzJaTTEwLjU3MDMgNDEuNDM3NUMxMC4wMzkxIDQxLjQzNzUgOS41NzAzMSA0MS4yNDIyIDkuMTY0MDYgNDAuODUxNkM4Ljc3MzQ0IDQwLjQ2MDkgOC41NzgxMiAzOS45OTIyIDguNTc4MTIgMzkuNDQ1M0M4LjU3ODEyIDM4Ljg5ODQgOC43NzM0NCAzOC40Mjk3IDkuMTY0MDYgMzguMDM5MUM5LjU3MDMxIDM3LjYzMjggMTAuMDM5MSAzNy40Mjk3IDEwLjU3MDMgMzcuNDI5N0MxMS4xMzI4IDM3LjQyOTcgMTEuNjA5NCAzNy42MzI4IDEyIDM4LjAzOTFDMTIuMzkwNiAzOC40Mjk3IDEyLjU4NTkgMzguODk4NCAxMi41ODU5IDM5LjQ0NTNDMTIuNTg1OSAzOS45OTIyIDEyLjM5MDYgNDAuNDYwOSAxMiA0MC44NTE2QzExLjYwOTQgNDEuMjQyMiAxMS4xMzI4IDQxLjQzNzUgMTAuNTcwMyA0MS40Mzc1Wk02LjAyMzQ0IDM2Ljg5MDZDNS40NzY1NiAzNi44OTA2IDUgMzYuNjk1MyA0LjU5Mzc1IDM2LjMwNDdDNC4yMDMxMiAzNS44OTg0IDQuMDA3ODEgMzUuNDIxOSA0LjAwNzgxIDM0Ljg3NUM0LjAwNzgxIDM0LjMyODEgNC4yMDMxMiAzMy44NTk0IDQuNTkzNzUgMzMuNDY4OEM1IDMzLjA2MjUgNS40NzY1NiAzMi44NTk0IDYuMDIzNDQgMzIuODU5NEM2LjU3MDMxIDMyLjg1OTQgNy4wMzkwNiAzMy4wNjI1IDcuNDI5NjkgMzMuNDY4OEM3LjgyMDMxIDMzLjg1OTQgOC4wMTU2MiAzNC4zMjgxIDguMDE1NjIgMzQuODc1QzguMDE1NjIgMzUuNDIxOSA3LjgyMDMxIDM1Ljg5ODQgNy40Mjk2OSAzNi4zMDQ3QzcuMDM5MDYgMzYuNjk1MyA2LjU3MDMxIDM2Ljg5MDYgNi4wMjM0NCAzNi44OTA2Wk0zLjA5Mzc1IDMxLjE3MTlDMi41NjI1IDMxLjE3MTkgMi4wOTM3NSAzMC45NzY2IDEuNjg3NSAzMC41ODU5QzEuMjk2ODggMzAuMTk1MyAxLjEwMTU2IDI5LjcyNjYgMS4xMDE1NiAyOS4xNzk3QzEuMTAxNTYgMjguNjE3MiAxLjI5Njg4IDI4LjE0MDYgMS42ODc1IDI3Ljc1QzIuMDkzNzUgMjcuMzU5NCAyLjU2MjUgMjcuMTY0MSAzLjA5Mzc1IDI3LjE2NDFDMy42NTYyNSAyNy4xNjQxIDQuMTMyODEgMjcuMzU5NCA0LjUyMzQ0IDI3Ljc1QzQuOTE0MDYgMjguMTQwNiA1LjEwOTM4IDI4LjYxNzIgNS4xMDkzOCAyOS4xNzk3QzUuMTA5MzggMjkuNzI2NiA0LjkxNDA2IDMwLjE5NTMgNC41MjM0NCAzMC41ODU5QzQuMTMyODEgMzAuOTc2NiAzLjY1NjI1IDMxLjE3MTkgMy4wOTM3NSAzMS4xNzE5Wk0yLjAxNTYyIDI0Ljc5NjlDMS40NTMxMiAyNC43OTY5IDAuOTc2NTYyIDI0LjYwMTYgMC41ODU5MzggMjQuMjEwOUMwLjE5NTMxMiAyMy44MjAzIDAgMjMuMzQzOCAwIDIyLjc4MTJDMCAyMi4yMzQ0IDAuMTk1MzEyIDIxLjc2NTYgMC41ODU5MzggMjEuMzc1QzAuOTc2NTYyIDIwLjk4NDQgMS40NTMxMiAyMC43ODkxIDIuMDE1NjIgMjAuNzg5MUMyLjU2MjUgMjAuNzg5MSAzLjAzMTI1IDIwLjk4NDQgMy40MjE4OCAyMS4zNzVDMy44MTI1IDIxLjc2NTYgNC4wMDc4MSAyMi4yMzQ0IDQuMDA3ODEgMjIuNzgxMkM0LjAwNzgxIDIzLjM0MzggMy44MTI1IDIzLjgyMDMgMy40MjE4OCAyNC4yMTA5QzMuMDMxMjUgMjQuNjAxNiAyLjU2MjUgMjQuNzk2OSAyLjAxNTYyIDI0Ljc5NjlaTTMuMDkzNzUgMTguMzk4NEMyLjU2MjUgMTguMzk4NCAyLjA5Mzc1IDE4LjIwMzEgMS42ODc1IDE3LjgxMjVDMS4yOTY4OCAxNy40MjE5IDEuMTAxNTYgMTYuOTUzMSAxLjEwMTU2IDE2LjQwNjJDMS4xMDE1NiAxNS44NDM4IDEuMjk2ODggMTUuMzY3MiAxLjY4NzUgMTQuOTc2NkMyLjA5Mzc1IDE0LjU4NTkgMi41NjI1IDE0LjM5MDYgMy4wOTM3NSAxNC4zOTA2QzMuNjU2MjUgMTQuMzkwNiA0LjEzMjgxIDE0LjU4NTkgNC41MjM0NCAxNC45NzY2QzQuOTE0MDYgMTUuMzY3MiA1LjEwOTM4IDE1Ljg0MzggNS4xMDkzOCAxNi40MDYyQzUuMTA5MzggMTYuOTUzMSA0LjkxNDA2IDE3LjQyMTkgNC41MjM0NCAxNy44MTI1QzQuMTMyODEgMTguMjAzMSAzLjY1NjI1IDE4LjM5ODQgMy4wOTM3NSAxOC4zOTg0Wk02LjAyMzQ0IDEyLjY3OTdDNS40NzY1NiAxMi42Nzk3IDUgMTIuNDg0NCA0LjU5Mzc1IDEyLjA5MzhDNC4yMDMxMiAxMS43MDMxIDQuMDA3ODEgMTEuMjM0NCA0LjAwNzgxIDEwLjY4NzVDNC4wMDc4MSAxMC4xNTYyIDQuMjAzMTIgOS42OTUzMSA0LjU5Mzc1IDkuMzA0NjlDNSA4Ljg5ODQ0IDUuNDc2NTYgOC42OTUzMSA2LjAyMzQ0IDguNjk1MzFDNi41NzAzMSA4LjY5NTMxIDcuMDM5MDYgOC44OTg0NCA3LjQyOTY5IDkuMzA0NjlDNy44MjAzMSA5LjY5NTMxIDguMDE1NjIgMTAuMTU2MiA4LjAxNTYyIDEwLjY4NzVDOC4wMTU2MiAxMS4yMzQ0IDcuODIwMzEgMTEuNzAzMSA3LjQyOTY5IDEyLjA5MzhDNy4wMzkwNiAxMi40ODQ0IDYuNTcwMzEgMTIuNjc5NyA2LjAyMzQ0IDEyLjY3OTdaTTEwLjU3MDMgOC4xMzI4MUMxMC4wMzkxIDguMTMyODEgOS41NzAzMSA3LjkzNzUgOS4xNjQwNiA3LjU0Njg4QzguNzczNDQgNy4xNDA2MiA4LjU3ODEyIDYuNjcxODggOC41NzgxMiA2LjE0MDYyQzguNTc4MTIgNS41NzgxMiA4Ljc3MzQ0IDUuMTAxNTYgOS4xNjQwNiA0LjcxMDk0QzkuNTcwMzEgNC4zMjAzMSAxMC4wMzkxIDQuMTI1IDEwLjU3MDMgNC4xMjVDMTEuMTMyOCA0LjEyNSAxMS42MDk0IDQuMzIwMzEgMTIgNC43MTA5NEMxMi4zOTA2IDUuMTAxNTYgMTIuNTg1OSA1LjU3ODEyIDEyLjU4NTkgNi4xNDA2MkMxMi41ODU5IDYuNjcxODggMTIuMzkwNiA3LjE0MDYyIDEyIDcuNTQ2ODhDMTEuNjA5NCA3LjkzNzUgMTEuMTMyOCA4LjEzMjgxIDEwLjU3MDMgOC4xMzI4MVpNMTYuMzU5NCA1LjIwMzEyQzE1LjgxMjUgNS4yMDMxMiAxNS4zNDM4IDUuMDA3ODEgMTQuOTUzMSA0LjYxNzE5QzE0LjU2MjUgNC4yMjY1NiAxNC4zNjcyIDMuNzU3ODEgMTQuMzY3MiAzLjIxMDk0QzE0LjM2NzIgMi42NjQwNiAxNC41NjI1IDIuMTk1MzEgMTQuOTUzMSAxLjgwNDY5QzE1LjM0MzggMS4zOTg0NCAxNS44MTI1IDEuMTk1MzEgMTYuMzU5NCAxLjE5NTMxQzE2LjkyMTkgMS4xOTUzMSAxNy4zOTg0IDEuMzk4NDQgMTcuNzg5MSAxLjgwNDY5QzE4LjE3OTcgMi4xOTUzMSAxOC4zNzUgMi42NjQwNiAxOC4zNzUgMy4yMTA5NEMxOC4zNzUgMy43NTc4MSAxOC4xNzk3IDQuMjI2NTYgMTcuNzg5MSA0LjYxNzE5QzE3LjM5ODQgNS4wMDc4MSAxNi45MjE5IDUuMjAzMTIgMTYuMzU5NCA1LjIwMzEyWk00MC4xMDE2IDQ1LjU2MjVDMzYuOTQ1MyA0NS41NjI1IDMzLjk5MjIgNDQuOTY4OCAzMS4yNDIyIDQzLjc4MTJDMjguNTA3OCA0Mi42MDk0IDI2LjA5MzggNDAuOTc2NiAyNCAzOC44ODI4QzIxLjkwNjIgMzYuNzg5MSAyMC4yNjU2IDM0LjM2NzIgMTkuMDc4MSAzMS42MTcyQzE3LjkwNjIgMjguODY3MiAxNy4zMjAzIDI1LjkyMTkgMTcuMzIwMyAyMi43ODEyQzE3LjMyMDMgMTkuNjQwNiAxNy45MDYyIDE2LjY5NTMgMTkuMDc4MSAxMy45NDUzQzIwLjI2NTYgMTEuMTc5NyAyMS45MDYyIDguNzU3ODEgMjQgNi42Nzk2OUMyNi4wOTM4IDQuNTg1OTQgMjguNTA3OCAyLjk1MzEyIDMxLjI0MjIgMS43ODEyNUMzMy45OTIyIDAuNTkzNzUgMzYuOTQ1MyAwIDQwLjEwMTYgMEM0My4yNDIyIDAgNDYuMTg3NSAwLjU5Mzc1IDQ4LjkzNzUgMS43ODEyNUM1MS42ODc1IDIuOTUzMTIgNTQuMTAxNiA0LjU4NTk0IDU2LjE3OTcgNi42Nzk2OUM1OC4yNzM0IDguNzU3ODEgNTkuOTA2MiAxMS4xNzk3IDYxLjA3ODEgMTMuOTQ1M0M2Mi4yNjU2IDE2LjY5NTMgNjIuODU5NCAxOS42NDA2IDYyLjg1OTQgMjIuNzgxMkM2Mi44NTk0IDI1LjkyMTkgNjIuMjY1NiAyOC44NjcyIDYxLjA3ODEgMzEuNjE3MkM1OS45MDYyIDM0LjM2NzIgNTguMjczNCAzNi43ODkxIDU2LjE3OTcgMzguODgyOEM1NC4xMDE2IDQwLjk3NjYgNTEuNjg3NSA0Mi42MDk0IDQ4LjkzNzUgNDMuNzgxMkM0Ni4xODc1IDQ0Ljk2ODggNDMuMjQyMiA0NS41NjI1IDQwLjEwMTYgNDUuNTYyNVpNNDAuMTAxNiA0MS4zOTA2QzQyLjY2NDEgNDEuMzkwNiA0NS4wNzAzIDQwLjkwNjIgNDcuMzIwMyAzOS45Mzc1QzQ5LjU3MDMgMzguOTY4OCA1MS41NDY5IDM3LjYzMjggNTMuMjUgMzUuOTI5N0M1NC45Njg4IDM0LjIyNjYgNTYuMzA0NyAzMi4yNTc4IDU3LjI1NzggMzAuMDIzNEM1OC4yMTA5IDI3Ljc3MzQgNTguNjg3NSAyNS4zNTk0IDU4LjY4NzUgMjIuNzgxMkM1OC42ODc1IDIwLjIwMzEgNTguMjEwOSAxNy43OTY5IDU3LjI1NzggMTUuNTYyNUM1Ni4zMDQ3IDEzLjMxMjUgNTQuOTY4OCAxMS4zMzU5IDUzLjI1IDkuNjMyODFDNTEuNTQ2OSA3LjkyOTY5IDQ5LjU3MDMgNi41OTM3NSA0Ny4zMjAzIDUuNjI1QzQ1LjA3MDMgNC42NTYyNSA0Mi42NjQxIDQuMTcxODggNDAuMTAxNiA0LjE3MTg4QzM3LjUyMzQgNC4xNzE4OCAzNS4xMDk0IDQuNjU2MjUgMzIuODU5NCA1LjYyNUMzMC42MjUgNi41OTM3NSAyOC42NDg0IDcuOTI5NjkgMjYuOTI5NyA5LjYzMjgxQzI1LjIyNjYgMTEuMzM1OSAyMy44OTA2IDEzLjMxMjUgMjIuOTIxOSAxNS41NjI1QzIxLjk2ODggMTcuNzk2OSAyMS40OTIyIDIwLjIwMzEgMjEuNDkyMiAyMi43ODEyQzIxLjQ5MjIgMjUuMzU5NCAyMS45Njg4IDI3Ljc3MzQgMjIuOTIxOSAzMC4wMjM0QzIzLjg5MDYgMzIuMjU3OCAyNS4yMjY2IDM0LjIyNjYgMjYuOTI5NyAzNS45Mjk3QzI4LjY0ODQgMzcuNjMyOCAzMC42MjUgMzguOTY4OCAzMi44NTk0IDM5LjkzNzVDMzUuMTA5NCA0MC45MDYyIDM3LjUyMzQgNDEuMzkwNiA0MC4xMDE2IDQxLjM5MDZaIn0pfSksdm9pY2VvdmVyOlgoInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltYKCJwYXRoIix7ZDoibTExIDcuNjAxLTUuOTk0IDguMTlhMSAxIDAgMCAwIC4xIDEuMjk4bC44MTcuODE4YTEgMSAwIDAgMCAxLjMxNC4wODdMMTUuMDkgMTIifSksWCgicGF0aCIse2Q6Ik0xNi41IDIxLjE3NEMxNS41IDIwLjUgMTQuMzcyIDIwIDEzIDIwYy0yLjA1OCAwLTMuOTI4IDIuMzU2LTYgMi0yLjA3Mi0uMzU2LTIuNzc1LTMuMzY5LTEuNS00LjUifSksWCgiY2lyY2xlIix7Y3g6IjE2IixjeToiNyIscjoiNSJ9KV19KX07ZnVuY3Rpb24gWlgoJCl7aWYoISQpcmV0dXJuITA7cmV0dXJuIHQyKCQpLm9zLnRvTG93ZXJDYXNlKCk9PT0iaW9zIn1mdW5jdGlvbiAkNCh7dWRpZDokLHJ1bnRpbWU6Sn0pe2xldFtRLFpdPUEoITApLFtLLFldPUEobnVsbCksW3EsVl09QShudWxsKSxbRyxCXT1BKG51bGwpLE49WlgoSiksej1QKGFzeW5jKCk9PntCKG51bGwpO3RyeXtsZXQgRT1hd2FpdCB0Myh7ZGV2aWNlOiR9LHtzaWduYWw6QWJvcnRTaWduYWwudGltZW91dCgxNTAwMCl9KTtpZihFKVkoRSk7ZWxzZSBCKCJVbmV4cGVjdGVkIHNpbXVsYXRvci1zZXR0aW5ncyByZXBseSIpfWNhdGNoKEUpe0IoRSBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiYmRS5uYW1lPT09IlRpbWVvdXRFcnJvciI/IlRpbWVkIG91dCByZWFkaW5nIHNpbXVsYXRvciBzZXR0aW5ncyI6RSBpbnN0YW5jZW9mIEVycm9yJiZFLm1lc3NhZ2UhPT0iRmFpbGVkIHRvIGZldGNoIj9FLm1lc3NhZ2U6IkNvdWxkIG5vdCByZWFjaCB0aGUgcHJldmlldyBzZXJ2ZXIg4oCUIHJlbG9hZCB0aGUgcGFnZSBpZiB0aGlzIHBlcnNpc3RzIil9fSxbJF0pO18oKCk9PntpZihZKG51bGwpLCFOKXJldHVybjt6KCl9LFt6LE5dKTtsZXQgVT1QKGFzeW5jKEUsdyk9PntWKEUpLEIobnVsbCksWSgoUyk9PlM/ey4uLlMsW0VdOnd9OlMpO3RyeXthd2FpdCB0Myh7ZGV2aWNlOiQsb3B0aW9uOkUsdmFsdWU6d30se3NpZ25hbDpBYm9ydFNpZ25hbC50aW1lb3V0KDE1MDAwKX0pfWNhdGNoKFMpe0IoUyBpbnN0YW5jZW9mIEVycm9yP1MubWVzc2FnZTpgRmFpbGVkIHRvIHNldCAke0V9YCkseigpfWZpbmFsbHl7VihudWxsKX19LFskLHpdKSxIPVQoe3J1bm5pbmc6ITEsbmV4dDpudWxsfSksRj1UKFUpO0YuY3VycmVudD1VO2xldCBMPVAoKEUpPT57bGV0IHc9SC5jdXJyZW50O2lmKHcubmV4dD1FLHcucnVubmluZylyZXR1cm47dy5ydW5uaW5nPSEwLChhc3luYygpPT57d2hpbGUody5uZXh0IT09bnVsbCl7bGV0IFM9dy5uZXh0O3cubmV4dD1udWxsLGF3YWl0IEYuY3VycmVudCgidGV4dC1zaXplIixIMltTXSl9dy5ydW5uaW5nPSExfSkoKX0sW10pLGs9SyE9PW51bGwsQz1LPz8kWCxPPUgyLmluZGV4T2YoQ1sidGV4dC1zaXplIl0pLHk9Tz49MD9POkNbInRleHQtc2l6ZSJdPy5zdGFydHNXaXRoKCJhY2Nlc3NpYmlsaXR5Iik/SDIubGVuZ3RoLTE6MztyZXR1cm4gWChxMCx7b3BlbjpRLG9uT3BlbkNoYW5nZTpaLCJkYXRhLXNpbXVsYXRvci1zZXR0aW5ncyI6IiIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6WChLMSx7Y2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC1pbmstNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJTaW11bGF0b3IifSksWCgic3BhbiIse30pXX0pLGNoaWxkcmVuOiFOP1goImRpdiIse2NsYXNzTmFtZToidGV4dC1pbmstNDUgdGV4dC1bMTFweF0gcHgtMC41IHB5LTEiLGNoaWxkcmVuOiJTaW11bGF0b3Igc2V0dGluZ3MgYXJlIGF2YWlsYWJsZSBvbiBpT1Mgc2ltdWxhdG9ycyBvbmx5LiJ9KTpYKEsxLHtjaGlsZHJlbjpbRyYmWCgiZGl2Iix7Y2xhc3NOYW1lOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiIsY2hpbGRyZW46W1goInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAiLGNoaWxkcmVuOkd9KSxYKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PnZvaWQgeigpLGNsYXNzTmFtZToic2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgcm91bmRlZCBib3JkZXIgYm9yZGVyLWRhbmdlci8zMCBiZy10cmFuc3BhcmVudCBweC0xLjUgcHktMC41IHRleHQtWzExcHhdIHRleHQtZGFuZ2VyLXNvZnQiLGNoaWxkcmVuOiJSZXRyeSJ9KV19KSxYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEuNSBwYi0xLjUiLGNoaWxkcmVuOltYKGMwLHtpY29uOkwyLmFwcGVhcmFuY2UsbGFiZWw6IkFwcGVhcmFuY2UiLGNoaWxkcmVuOlgoazIse2xhYmVsOiJBcHBlYXJhbmNlIix2YWx1ZTpDLmFwcGVhcmFuY2U/PyJsaWdodCIsb3B0aW9uczpDOC5hcHBlYXJhbmNlLGRpc2FibGVkOiFrfHxxPT09ImFwcGVhcmFuY2UiLG9uQ2hhbmdlOihFKT0+VSgiYXBwZWFyYW5jZSIsRSl9KX0pLFgoYzAse2ljb246TDIuZ2xhc3MsbGFiZWw6IkxpcXVpZCBHbGFzcyIsY2hpbGRyZW46WChrMix7bGFiZWw6IkxpcXVpZCBHbGFzcyIsdmFsdWU6Q1sibGlxdWlkLWdsYXNzIl0/PyJjbGVhciIsb3B0aW9uczpDOFsibGlxdWlkLWdsYXNzIl0sZGlzYWJsZWQ6IWt8fHE9PT0ibGlxdWlkLWdsYXNzIixvbkNoYW5nZTooRSk9PlUoImxpcXVpZC1nbGFzcyIsRSl9KX0pLFgoYzAse2ljb246TDIuZmlsdGVyLGxhYmVsOiJDb2xvciBGaWx0ZXIiLGNoaWxkcmVuOlgoazIse2xhYmVsOiJDb2xvciBGaWx0ZXIiLHZhbHVlOkNbImNvbG9yLWZpbHRlciJdPz8ibm9uZSIsb3B0aW9uczpDOFsiY29sb3ItZmlsdGVyIl0sZGlzYWJsZWQ6IWt8fHE9PT0iY29sb3ItZmlsdGVyIixvbkNoYW5nZTooRSk9PlUoImNvbG9yLWZpbHRlciIsRSl9KX0pLFgoYzAse2ljb246TDIudGV4dFNpemUsbGFiZWw6IlRleHQgU2l6ZSIsY2hpbGRyZW46WChRWCx7dmFsdWU6eSxkaXNhYmxlZDohayxvbkNoYW5nZTpMfSl9KSxKWC5tYXAoKHtrZXk6RSxsYWJlbDp3fSk9PlgoYzAse2ljb246TDJbRT09PSJyZWR1Y2UtbW90aW9uIj8ibW90aW9uIjpFPT09ImluY3JlYXNlLWNvbnRyYXN0Ij8iY29udHJhc3QiOkU9PT0ic2hvdy1ib3JkZXJzIj8iYm9yZGVycyI6RT09PSJyZWR1Y2UtdHJhbnNwYXJlbmN5Ij8idHJhbnNwYXJlbmN5Ijoidm9pY2VvdmVyIl0sbGFiZWw6dyxjaGlsZHJlbjpYKEk1LHtsYWJlbDp3LGNoZWNrZWQ6Q1tFXT09PSJvbiIsZGlzYWJsZWQ6IWt8fHE9PT1FLG9uQ2hhbmdlOihTKT0+VShFLFM/Im9uIjoib2ZmIil9KX0sRSkpXX0pXX0pfSl9dmFyIEY4PSJzZXJ2ZS1zaW06Y29kZWMiLFhYPVt7dmFsdWU6ImF1dG8iLGxhYmVsOiJILjI2NCAoSGFyZHdhcmUpIn0se3ZhbHVlOiJtanBlZyIsbGFiZWw6Ik1KUEVHIChDb21wYXRpYmlsaXR5KSJ9XSxLWD1YKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbWCgicGF0aCIse2Q6Im0xNiAxMyA1LjIyMyAzLjQ4MmEuNS41IDAgMCAwIC43NzctLjQxNlY3Ljg3YS41LjUgMCAwIDAtLjc1Mi0uNDMyTDE2IDEwLjUifSksWCgicmVjdCIse3g6IjIiLHk6IjYiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxMiIscng6IjIifSldfSk7ZnVuY3Rpb24gSjQoe3ByZWZlcmVuY2U6JCxvblByZWZlcmVuY2VDaGFuZ2U6SixhY3RpdmVDb2RlYzpRLGF2Y2NTdXBwb3J0ZWQ6WixjaHJvbWVBdmFpbGFibGU6Sz0hMSxoaWRlQ2hyb21lOlk9ITEsb25IaWRlQ2hyb21lQ2hhbmdlOnF9KXtsZXRbVixHXT1BKCExKSxCPVo/JDoibWpwZWciO3JldHVybiBYKHEwLHtvcGVuOlYsb25PcGVuQ2hhbmdlOkcsImRhdGEtc3RyZWFtLXNldHRpbmdzIjoiIixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpYKEsxLHtjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LWluay01MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IlN0cmVhbSJ9KSxYKCJzcGFuIix7fSldfSksY2hpbGRyZW46WCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xLjUgcGItMS41IixjaGlsZHJlbjpbWChjMCx7aWNvbjpLWCxsYWJlbDoiQ29kZWMiLGNoaWxkcmVuOlgoazIse2xhYmVsOiJDb2RlYyIsdmFsdWU6QixvcHRpb25zOlhYLGRpc2FibGVkOiFaLG9uQ2hhbmdlOih6KT0+Sih6KX0pfSksSyYmcSYmWChLMSx7Y2hpbGRyZW46W1goYzAse2ljb246WChzMCx7c2l6ZToxNCxzdHJva2VXaWR0aDoyfSksbGFiZWw6IkRldmljZSBmcmFtZSIsY2hpbGRyZW46WChJNSx7bGFiZWw6IkRldmljZSBmcmFtZSIsY2hlY2tlZDohWSxvbkNoYW5nZTooeik9PnEoIXopfSl9KSxYKCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LWluay01NSBsZWFkaW5nLXNudWcgcHgtMC41IixjaGlsZHJlbjoiVHVybiBvZmYgdG8gaGlkZSB0aGUgYmV6ZWwgd2hlbiB2aWV3aW5nIHRoZSBzaW11bGF0b3Igb24gYSBwaG9uZSwgc28gbmVzdGVkIGZyYW1lcyBkb24ndCBzaHJpbmsgdGhlIHNjcmVlbi4ifSldfSksWCgicCIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC1pbmstNTUgbGVhZGluZy1zbnVnIHB4LTAuNSIsY2hpbGRyZW46IVo/IlRoaXMgYnJvd3NlciBjYW4ndCBkZWNvZGUgSC4yNjQsIHNvIHRoZSBzdHJlYW0gdXNlcyBNSlBFRy4iOkI9PT0iYXV0byImJlE9PT0ibWpwZWciPyJILjI2NCB3YXMgdW5hdmFpbGFibGUgZm9yIHRoaXMgc3RyZWFtLCBzbyBpdCBmZWxsIGJhY2sgdG8gTUpQRUcuIjoiU3dpdGNoIHRvIE1KUEVHIGlmIHRoZSBzdHJlYW0gc3R1dHRlcnMgb3IgZHJvcHMgd2hpbGUgc2NyZWVuIHJlY29yZGluZyB0aGUgYnJvd3NlciB3aW5kb3cuIn0pXX0pfSl9ZnVuY3Rpb24gUTQoe29wZW46JCxvbkNsb3NlOkosdWRpZDpRLGRldmljZVJ1bnRpbWU6WixjdXJyZW50QXBwOkssZXZlbnRMb2dFdmVudHNFbmRwb2ludDpZLGF4T3ZlcmxheUVuYWJsZWQ6cSxvblRvZ2dsZUF4T3ZlcmxheTpWLGNvZGVjUHJlZmVyZW5jZTpHLG9uQ29kZWNQcmVmZXJlbmNlQ2hhbmdlOkIsYWN0aXZlQ29kZWM6TixhdmNjU3VwcG9ydGVkOnosY2hyb21lQXZhaWxhYmxlOlU9ITEsaGlkZUNocm9tZTpIPSExLG9uSGlkZUNocm9tZUNoYW5nZTpGLHdpZHRoOkx9KXtyZXR1cm4gWChPNSx7b3BlbjokLHdpZHRoOkwsc3R5bGU6e2JhY2tncm91bmRDb2xvcjpXNX0sY2hpbGRyZW46W1goTTUse2NoaWxkcmVuOltYKGY2LHtjaGlsZHJlbjoiVG9vbHMifSksWChRMyx7b25DbGljazpKfSldfSksJCYmWCgiZGl2Iix7Y2xhc3NOYW1lOiJwLTMuNSBvdmVyZmxvdy15LWF1dG8gZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTMiLGNoaWxkcmVuOltYKGg3LHt1ZGlkOlEsY3VycmVudEFwcDpLfSksWChlNyx7dWRpZDpRLGV2ZW50c0VuZHBvaW50Oll9KSxYKCQ0LHt1ZGlkOlEscnVudGltZTpafSksWCh1Nyx7b3ZlcmxheUVuYWJsZWQ6cSxvblRvZ2dsZU92ZXJsYXk6Vn0pLFgoczcse3VkaWQ6USxidW5kbGVJZDpLPy5idW5kbGVJZD8/bnVsbH0pLFgodjcse3VkaWQ6USxob3N0OngxfSksWChtNyx7dWRpZDpRLGJ1bmRsZUlkOks/LmJ1bmRsZUlkPz9udWxsfSksWChKNCx7cHJlZmVyZW5jZTpHLG9uUHJlZmVyZW5jZUNoYW5nZTpCLGFjdGl2ZUNvZGVjOk4sYXZjY1N1cHBvcnRlZDp6LGNocm9tZUF2YWlsYWJsZTpVLGhpZGVDaHJvbWU6SCxvbkhpZGVDaHJvbWVDaGFuZ2U6Rn0pXX0pXX0pfWZ1bmN0aW9uIFo0KCQsSil7bGV0IFE7dHJ5e1E9bmV3IFVSTCgkLndlYlNvY2tldERlYnVnZ2VyVXJsKX1jYXRjaHtyZXR1cm4gJH1sZXQgWj1gJHtRLnBhdGhuYW1lfSR7US5zZWFyY2h9YCxLPUoucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiIsWT1KLnByb3RvY29sPT09Imh0dHBzOiI/IndzcyI6IndzIixxPWAke0ouaG9zdH0ke1p9YCxWPSQuZGV2dG9vbHNGcm9udGVuZFVybDt0cnl7bGV0IEc9bmV3IFVSTCgkLmRldnRvb2xzRnJvbnRlbmRVcmwsYCR7Si5wcm90b2NvbH0vLyR7Si5ob3N0fWApO0cuc2VhcmNoUGFyYW1zLmRlbGV0ZSgid3MiKSxHLnNlYXJjaFBhcmFtcy5kZWxldGUoIndzcyIpLEcuc2VhcmNoUGFyYW1zLnNldChZLHEpLFY9YCR7Ry5wYXRobmFtZX0ke0cuc2VhcmNofSR7Ry5oYXNofWB9Y2F0Y2h7fXJldHVybnsuLi4kLHdlYlNvY2tldERlYnVnZ2VyVXJsOmAke0t9Ly8ke0ouaG9zdH0ke1p9YCxkZXZ0b29sc0Zyb250ZW5kVXJsOlZ9fWZ1bmN0aW9uIEMyKCQsSil7ZmV0Y2goYjEoImRldnRvb2xzL2hpZ2hsaWdodCIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dGFyZ2V0SWQ6JCxvbjpKfSksa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiBBOCgpe2xldCAkPWIxKCJkZXZ0b29scy9yZWxlYXNlIik7dHJ5e2lmKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3Iuc2VuZEJlYWNvbil7bGV0IEo9bmV3IEJsb2IoWyJ7fSJdLHt0eXBlOiJhcHBsaWNhdGlvbi9qc29uIn0pO2lmKG5hdmlnYXRvci5zZW5kQmVhY29uKCQsSikpcmV0dXJufX1jYXRjaHt9ZmV0Y2goJCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6Int9IixrZWVwYWxpdmU6ITB9KS5jYXRjaCgoKT0+e30pfWZ1bmN0aW9uIFg0KCQpe2xldCBKPSQuY29udGVudERvY3VtZW50O2lmKCFKKXJldHVybjtsZXQgUT0oKT0+e2xldCBZPVtKXTt3aGlsZShZLmxlbmd0aCl7bGV0IHE9WS5wb3AoKSxWPXEucXVlcnlTZWxlY3RvckFsbCgiW2FyaWEtbGFiZWxdLFt0aXRsZV0iKTtmb3IobGV0IEcgb2YgVil7bGV0IEI9Ry5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8Ry50aXRsZXx8IiI7aWYoL150b2dnbGUgc2NyZWVuY2FzdCQvaS50ZXN0KEIpKXJldHVybiBHfWZvcihsZXQgRyBvZiBxLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKSlpZihHLnNoYWRvd1Jvb3QpWS5wdXNoKEcuc2hhZG93Um9vdCl9cmV0dXJuIG51bGx9LFo9MCxLPSgpPT57WisrO2xldCBZPVEoKTtpZihZJiZZLmdldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIikhPT0iZmFsc2UiKXtZLmNsaWNrKCk7cmV0dXJufWlmKFo8MjApc2V0VGltZW91dChLLDEwMCl9O0soKX1mdW5jdGlvbiBLNCgkKXtsZXQgSj1bXSxRPW5ldyBNYXA7Zm9yKGxldCBaIG9mICQpe2xldCBLPVouYXBwTmFtZXx8Wi5idW5kbGVJZHx8IlVua25vd24iLFk9Wi5idW5kbGVJZHx8SyxxPVEuZ2V0KFkpO2lmKCFxKXE9e2tleTpZLGFwcE5hbWU6SyxidW5kbGVJZDpaLmJ1bmRsZUlkLHRhcmdldHM6W119LFEuc2V0KFkscSksSi5wdXNoKFkpO3EudGFyZ2V0cy5wdXNoKFopfXJldHVybiBKLm1hcCgoWik9PlEuZ2V0KFopKX1mdW5jdGlvbiBZNCgkLEope2xldFtRLFpdPUEoe30pLEs9UjEoKCk9Pkouc2xpY2UoKS5zb3J0KCkuam9pbigifCIpLFtKXSk7cmV0dXJuIF8oKCk9PntpZighJClyZXR1cm47bGV0IFk9ITE7Zm9yKGxldCBxIG9mIEope2lmKCFxKWNvbnRpbnVlO2xldCBWPWAkeyR9OiR7cX1gLEc9RDUuZ2V0KFYpO2lmKHR5cGVvZiBHPT09InN0cmluZyJ8fEc9PT1udWxsKXtaKChCKT0+QltxXT09PUc/Qjp7Li4uQixbcV06R30pO2NvbnRpbnVlfWc3KHgxLCQscSkudGhlbigoQik9PntpZihZKXJldHVybjtaKChOKT0+KHsuLi5OLFtxXTpCfSkpfSl9cmV0dXJuKCk9PntZPSEwfX0sWyQsS10pLFF9ZnVuY3Rpb24gcTQoe3VkaWQ6JCx0YXJnZXRzOkosc2VsZWN0ZWQ6USxvblNlbGVjdFRhcmdldDpaLG9uUmVmcmVzaDpLfSl7bGV0IFk9SzQoSikscT1ZLm1hcCgoTCk9PkwuYnVuZGxlSWQpLmZpbHRlcigoTCk9PiEhTCksVj1ZNCgkLHEpLFtHLEJdPUEoITEpLFtOLHpdPUEobnVsbCksVT1UKG51bGwpLEg9VChudWxsKTtfKCgpPT57aWYoIUcpcmV0dXJuO2xldCBMPShrKT0+e2lmKCFILmN1cnJlbnQpcmV0dXJuO2lmKCFILmN1cnJlbnQuY29udGFpbnMoay50YXJnZXQpKUIoITEpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixMKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixMKX0sW0ddKSxfKCgpPT57aWYoRylyZXR1cm47aWYoVS5jdXJyZW50KUMyKFUuY3VycmVudCwhMSksVS5jdXJyZW50PW51bGw7QTgoKX0sW0ddKSxfKCgpPT57bGV0IEw9KCk9PkE4KCk7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsTCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsTCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLEwpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLEwpfX0sW10pO2xldCBGPVE/KFEudGl0bGV8fFEudXJsfHxRLmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApOiJTZWxlY3QgdGFyZ2V0IjtyZXR1cm4gWCgiZGl2Iix7cmVmOkgsY2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwgbWluLXctMCIsY2hpbGRyZW46W1goImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+e0IoKEwpPT57aWYoIUwpSygpO3JldHVybiFMfSl9LGNsYXNzTmFtZToidy1mdWxsIG1pbi13LTAgaC1bMjZweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIGJnLXBhbmVsIHRleHQtaW5rLTkwIGJvcmRlciBib3JkZXItaW5rLzEyIHJvdW5kZWQtbWQgdGV4dC1bMTJweF0gcHgtMiBjdXJzb3ItcG9pbnRlciB0ZXh0LWxlZnQiLCJhcmlhLWhhc3BvcHVwIjoibGlzdGJveCIsImFyaWEtZXhwYW5kZWQiOkcsImFyaWEtbGFiZWwiOiJXZWJLaXQgdGFyZ2V0IixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgbWluLXctMCIsY2hpbGRyZW46Rn0pLFgocDUse3NpemU6MTIsc3Ryb2tlV2lkdGg6Mn0pXX0pLEcmJlgoInVsIix7cm9sZToibGlzdGJveCIsY2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtW2NhbGMoMTAwJSs0cHgpXSBsZWZ0LTAgbS0wIHAtMSBsaXN0LW5vbmUgYmctcGFuZWwgYm9yZGVyIGJvcmRlci1pbmsvMTIgcm91bmRlZC1sZyBzaGFkb3ctcG9wb3ZlciBtaW4tdy1bMjIwcHhdIG1heC13LVszNjBweF0gbWF4LWgtWzMyMHB4XSBvdmVyZmxvdy15LWF1dG8gei01MCIsY2hpbGRyZW46WS5tYXAoKEwpPT57bGV0IGs9TC5idW5kbGVJZD9WW0wuYnVuZGxlSWRdOm51bGw7cmV0dXJuIFgoImxpIix7Y2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCIsY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMS41IHB0LTEgcGItMC41IHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgdGV4dC1pbmstOTIiLGNoaWxkcmVuOltrP1goImltZyIse3NyYzprLGFsdDoiIixjbGFzc05hbWU6InctNCBoLTQgcm91bmRlZC1bM3B4XSBzaHJpbmstMCBvYmplY3QtY292ZXIifSk6WCgic3BhbiIse2NsYXNzTmFtZToidy00IGgtNCByb3VuZGVkLVszcHhdIHNocmluay0wIG9iamVjdC1jb3ZlciIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46TC5hcHBOYW1lfSldfSksWCgidWwiLHtyb2xlOiJncm91cCIsY2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCBwbC1bMjZweF0iLGNoaWxkcmVuOkwudGFyZ2V0cy5tYXAoKEMpPT57bGV0IE89UT8uaWQ9PT1DLmlkLHk9ISFDLmluVXNlQnlPdGhlckluc3BlY3RvciYmIU8sRT0oQy50aXRsZXx8Qy51cmx8fEMuYXBwTmFtZXx8IlVudGl0bGVkIikuc2xpY2UoMCw5MCksdz1OPT09Qy5pZCYmIXksUz0iZmxleCBmbGV4LWNvbCBweC0yIHB5LVszcHhdIHJvdW5kZWQgdGV4dC1bMTJweF0gbGVhZGluZy1bMS4zNV0iO3JldHVybiBYKCJsaSIse3JvbGU6Im9wdGlvbiIsImFyaWEtc2VsZWN0ZWQiOk8sImFyaWEtZGlzYWJsZWQiOnksdGFiSW5kZXg6eT8tMTowLHRpdGxlOnk/IkFscmVhZHkgYmVpbmcgaW5zcGVjdGVkIGJ5IGFub3RoZXIgZGVidWdnZXIiOnZvaWQgMCxvbk1vdXNlRW50ZXI6KCk9PntpZih5KXJldHVybjtpZihVLmN1cnJlbnQmJlUuY3VycmVudCE9PUMuaWQpQzIoVS5jdXJyZW50LCExKTtVLmN1cnJlbnQ9Qy5pZCx6KEMuaWQpLEMyKEMuaWQsITApfSxvbk1vdXNlTGVhdmU6KCk9PntpZihVLmN1cnJlbnQ9PT1DLmlkKUMyKEMuaWQsITEpLFUuY3VycmVudD1udWxsO3ooKGcpPT5nPT09Qy5pZD9udWxsOmcpfSxvbkNsaWNrOigpPT57aWYoeSlyZXR1cm47WihDLmlkKSxCKCExKX0sY2xhc3NOYW1lOmBmbGV4IGZsZXgtY29sIHB4LTIgcHktWzNweF0gcm91bmRlZCB0ZXh0LVsxMnB4XSBsZWFkaW5nLVsxLjM1XSAke3k/Im9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkIGl0YWxpYyB0ZXh0LWluay04NSI6dz8iYmctdGludC8yMiB0ZXh0LWluay04NSBjdXJzb3ItcG9pbnRlciI6Tz8iYmctaW5rL1swLjA2XSB0ZXh0LWluay04NSBjdXJzb3ItcG9pbnRlciI6InRleHQtaW5rLTg1IGN1cnNvci1wb2ludGVyIn1gLGNoaWxkcmVuOltYKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46RX0pLEMudXJsJiZDLnVybCE9PSJhYm91dDpibGFuayImJlgoInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LWluay00MiBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46Qy51cmx9KV19LEMuaWQpfSl9KV19LEwua2V5KX0pfSldfSl9ZnVuY3Rpb24gVjQoe29wZW46JCxvbkNsb3NlOkosdWRpZDpRLHRhcmdldHM6WixzZWxlY3RlZFRhcmdldElkOkssb25TZWxlY3RUYXJnZXQ6WSxsb2FkaW5nOnEsZXJyb3I6VixvblJlZnJlc2g6Ryx3aWR0aDpCfSl7bGV0IE49Sz9aLmZpbmQoKHopPT56LmlkPT09Syk/P251bGw6bnVsbDtyZXR1cm4gWChPNSx7b3BlbjokLHdpZHRoOkIsY2hpbGRyZW46W1goTTUse2NoaWxkcmVuOltaLmxlbmd0aD4wP1gocTQse3VkaWQ6USx0YXJnZXRzOlosc2VsZWN0ZWQ6TixvblNlbGVjdFRhcmdldDpZLG9uUmVmcmVzaDpHfSk6WCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0gdGV4dC1pbmstNDggb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAiLGNoaWxkcmVuOnE/Ikxvb2tpbmcgZm9yIFNhZmFyaSBhbmQgaW5zcGVjdGFibGUgd2Vidmlld3MuLi4iOiJObyBpbnNwZWN0YWJsZSBTYWZhcmkgb3IgV0tXZWJWaWV3IHRhcmdldHMifSksWChRMyx7b25DbGljazpKLGFyaWFMYWJlbDoiQ2xvc2UgV2ViS2l0IERldlRvb2xzIix0aXRsZToiQ2xvc2UiLGljb25TaXplOjE1fSldfSksWCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLWgtMCBiZy13aGl0ZSByZWxhdGl2ZSIsY2hpbGRyZW46Vj9YKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctcGFuZWwtZGVlcCB0ZXh0LWluay01OCB0ZXh0LWNlbnRlciB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46Vn0pOk4mJiQ/WCgiaWZyYW1lIix7c3JjOk4uZGV2dG9vbHNGcm9udGVuZFVybCx0aXRsZTpgV2ViS2l0IERldlRvb2xzIC0gJHtOLnRpdGxlfHxOLnVybHx8Ti5pZH1gLGNsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBib3JkZXItbm9uZSBibG9jayBiZy13aGl0ZSIsb25Mb2FkOih6KT0+WDQoei5jdXJyZW50VGFyZ2V0KX0sTi5pZCk6WCgiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcC02IGJnLXBhbmVsLWRlZXAgdGV4dC1pbmstNTggdGV4dC1jZW50ZXIgdGV4dC1bMTNweF0iLGNoaWxkcmVuOk4/IkRldlRvb2xzIHBhdXNlZCDigJQgb3BlbiB0aGUgcGFuZWwgdG8gcmVhdHRhY2guIjoiT3BlbiBTYWZhcmkgb3IgYW4gaW5zcGVjdGFibGUgV0tXZWJWaWV3IGluIHRoZSBzaW11bGF0b3IuIn0pfSldfSl9ZnVuY3Rpb24gWVgoe2hvc3RQYXRoOiQsaG9zdDpKLHVkaWQ6USxvblVwbG9hZFN0YXJ0Olosb25VcGxvYWRQcm9ncmVzczpLLG9uVXBsb2FkRW5kOlksb25Ib3N0UGF0aERyb3A6cX0pe3E/LigkKTtsZXQgVj0kLnNwbGl0KCIvIikucG9wKCk/PyJpbWFnZSIsRz1aKFYsIm1lZGlhIik7cmV0dXJuIEsoRyxudWxsKSxsNygkLEosUSkudGhlbigoKT0+WShHLCEwKSkuY2F0Y2goKEIpPT5ZKEcsITEsQiBpbnN0YW5jZW9mIEVycm9yP0IubWVzc2FnZToiQWRkIGZhaWxlZCIpKX1mdW5jdGlvbiBHNCh7aG9zdDokLHVkaWQ6SixlbmFibGVkOlEsb25VcGxvYWRTdGFydDpaLG9uVXBsb2FkUHJvZ3Jlc3M6SyxvblVwbG9hZEVuZDpZLG9uVW5zdXBwb3J0ZWQ6cSxvbkhvc3RQYXRoRHJvcDpWfSl7bGV0W0csQl09QSghMSksTj1UKDApLHo9UChhc3luYyhMKT0+e2lmKEwucHJldmVudERlZmF1bHQoKSxMLnN0b3BQcm9wYWdhdGlvbigpLE4uY3VycmVudD0wLEIoITEpLCFRfHwhSilyZXR1cm47bGV0IGs9TC5kYXRhVHJhbnNmZXIuZ2V0RGF0YShCMyk7aWYoayl7WVgoe2hvc3RQYXRoOmssaG9zdDokLHVkaWQ6SixvblVwbG9hZFN0YXJ0Olosb25VcGxvYWRQcm9ncmVzczpLLG9uVXBsb2FkRW5kOlksb25Ib3N0UGF0aERyb3A6Vn0pO3JldHVybn1sZXQgQz1BcnJheS5mcm9tKEwuZGF0YVRyYW5zZmVyLmZpbGVzKTtpZihDLmxlbmd0aD09PTApcmV0dXJuO2ZvcihsZXQgTyBvZiBDKXtsZXQgeT1kNyhPKTtpZigheSl7cShPKTtjb250aW51ZX1sZXQgRT1aKE8ubmFtZSx5KTtvNyhPLHksJCxKLCh3KT0+SyhFLHcpLHthbGxvd0luc3RhbGw6d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uYWxsb3dFeGVjPT09ITB9KS50aGVuKCgpPT5ZKEUsITApKS5jYXRjaCgodyk9PlkoRSwhMSx3IGluc3RhbmNlb2YgRXJyb3I/dy5tZXNzYWdlOiJVcGxvYWQgZmFpbGVkIikpfX0sW1EsSiwkLFosSyxZLHEsVl0pLFU9UCgoTCk9PntpZihMLnByZXZlbnREZWZhdWx0KCksUSlMLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJjb3B5In0sW1FdKSxIPVAoKEwpPT57aWYoTC5wcmV2ZW50RGVmYXVsdCgpLCFRKXJldHVybjtpZihOLmN1cnJlbnQrKyxOLmN1cnJlbnQ9PT0xKUIoITApfSxbUV0pLEY9UCgoTCk9PntpZihMLnByZXZlbnREZWZhdWx0KCksTi5jdXJyZW50LS0sTi5jdXJyZW50PD0wKU4uY3VycmVudD0wLEIoITEpfSxbXSk7cmV0dXJue2lzRHJhZ092ZXI6Ryxkcm9wWm9uZVByb3BzOntvbkRyYWdPdmVyOlUsb25EcmFnRW50ZXI6SCxvbkRyYWdMZWF2ZTpGLG9uRHJvcDp6fX19ZnVuY3Rpb24gQjQoKXtsZXRbJF09QSh0MCk7cmV0dXJue3N1cHBvcnRlZDokfX1mdW5jdGlvbiB6MygkLEosUSxaLEs9ImxlZnQiKXtsZXQgWT1QKChVLEgpPT5LPT09ImxlZnQiP1UtSDpILVUsW0tdKSxxPVAoKFUpPT5NYXRoLm1heChRLE1hdGgubWluKFosVSkpLFtRLFpdKSxbVixHXT1BKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuIEo7bGV0IFU9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCQpLEg9VSE9bnVsbD9OdW1iZXIoVSk6TmFOO3JldHVybiBOdW1iZXIuaXNGaW5pdGUoSCk/cShIKTpKfSksQj10eXBlb2Ygd2luZG93PCJ1Ij9NYXRoLm1pbihaLHdpbmRvdy5pbm5lcldpZHRoLTMyKTpaLE49TWF0aC5tYXgoUSxNYXRoLm1pbihCLFYpKSx6PVAoKFUpPT57VS5wcmV2ZW50RGVmYXVsdCgpO2xldCBIPVUuY2xpZW50WCxGPU4sTD1VLmN1cnJlbnRUYXJnZXQ7TC5zZXRQb2ludGVyQ2FwdHVyZShVLnBvaW50ZXJJZCk7bGV0IGs9KE8pPT57bGV0IHk9cShGK1koSCxPLmNsaWVudFgpKTtHKHkpfSxDPShPKT0+e0wucmVsZWFzZVBvaW50ZXJDYXB0dXJlKE8ucG9pbnRlcklkKSxMLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixrKSxMLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsQyksTC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixDKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCQsU3RyaW5nKHEoRitZKEgsTy5jbGllbnRYKSkpKX1jYXRjaHt9fTtMLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixrKSxMLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsQyksTC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixDKX0sW3EsWSxOLCRdKTtyZXR1cm57d2lkdGg6TixvblBvaW50ZXJEb3duOnp9fXZhciBxWD04MDAwO2Z1bmN0aW9uIFZYKCQpe3JldHVybiJmaWxlOi8vIiskLnNwbGl0KCIvIikubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbigiLyIpfWZ1bmN0aW9uIEdYKCQpe3JldHVybiAkIT09Im5vbmUifWZ1bmN0aW9uIHo0KHt0b2FzdDokLG9uUmV2ZWFsOkosb25EaXNtaXNzOlEsb25QYXVzZTpaLG9uUmVzdW1lOkt9KXtsZXRbWSxxXT1BKCExKSxWPVQobnVsbCksRz1UKG51bGwpLEI9KCk9PntpZihHLmN1cnJlbnQpY2xlYXJUaW1lb3V0KEcuY3VycmVudCk7Ry5jdXJyZW50PW51bGx9O18oKCk9PigpPT5CKCksW10pO2xldCBOPShVKT0+e2lmKCEkLnBhdGgpe1UucHJldmVudERlZmF1bHQoKTtyZXR1cm59QigpLFooKSxHLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e0cuY3VycmVudD1udWxsLHEoITEpLEsoKX0scVgpLFUuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLFZYKCQucGF0aCkpLFUuZGF0YVRyYW5zZmVyLnNldERhdGEoQjMsJC5wYXRoKSxVLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkPSJjb3B5IjtsZXQgSD1WLmN1cnJlbnQ7aWYoSClVLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoSCxILm9mZnNldFdpZHRoLzIsSC5vZmZzZXRIZWlnaHQvMik7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT5xKCEwKSl9LHo9KFUpPT57aWYoQigpLHEoITEpLEdYKFUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QpKVEoKTtlbHNlIEsoKX07cmV0dXJuIFgoImRpdiIseyJkYXRhLXRlc3RpZCI6InNjcmVlbnNob3QtdG9hc3QiLGNsYXNzTmFtZToidy1bbWluKDMyMHB4LGNhbGMoMTAwdnctMzJweCkpXSIsb25Nb3VzZUVudGVyOlosb25Nb3VzZUxlYXZlOkssY2hpbGRyZW46WyQudGh1bWImJlgoImltZyIse3JlZjpWLCJkYXRhLXRlc3RpZCI6ImRyYWctaW1hZ2UiLHNyYzokLnRodW1iLGFsdDoiIiwiYXJpYS1oaWRkZW4iOiEwLGRyYWdnYWJsZTohMSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIix0b3A6LTk5OTksbGVmdDowLHdpZHRoOjgwLGhlaWdodDo4MCxib3JkZXJSYWRpdXM6MTIsb2JqZWN0Rml0OiJjb3ZlciIscG9pbnRlckV2ZW50czoibm9uZSJ9fSksJC5zdGF0dXM9PT0iZXJyb3IiP1goImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMy41IHB5LTIuNSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLWluay8xMiByb3VuZGVkLXhsIHRleHQtaW5rLTkwIHRleHQtWzEycHhdIHNoYWRvdy1wb3BvdmVyIixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIHNocmluay0wIGJnLWRhbmdlciJ9KSxYKCJzcGFuIix7Y2xhc3NOYW1lOiJzZWxlY3QtdGV4dCIsY2hpbGRyZW46JC5tZXNzYWdlPz8iU2NyZWVuc2hvdCBmYWlsZWQifSldfSk6WCgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOkosZGlzYWJsZWQ6JC5zdGF0dXMhPT0ic2F2ZWQiLGRyYWdnYWJsZTokLnN0YXR1cz09PSJzYXZlZCIsb25EcmFnU3RhcnQ6TixvbkRyYWdFbmQ6eiwiYXJpYS1sYWJlbCI6Ik9wZW4gc2NyZWVuc2hvdCBpbiBGaW5kZXIiLHRpdGxlOiJDbGljayB0byByZXZlYWwgaW4gRmluZGVyIMK3IGRyYWcgdG8gY29weSB0aGUgZmlsZSIsY2xhc3NOYW1lOmBncm91cCBmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIgZ2FwLTMgcGwtMiBwci0zLjUgcHktMiBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLWluay8xMiByb3VuZGVkLXhsIHNoYWRvdy1wb3BvdmVyIHRleHQtbGVmdCBjdXJzb3ItcG9pbnRlciBlbmFibGVkOmhvdmVyOmJnLXBhbmVsLWhvdmVyIGRpc2FibGVkOmN1cnNvci1kZWZhdWx0IFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNfZWFzZV0gJHtZPyJpbnZpc2libGUiOiIifWAsY2hpbGRyZW46W1goImRpdiIse2NsYXNzTmFtZToic2l6ZS05IHJvdW5kZWQtbWQgb3ZlcmZsb3ctaGlkZGVuIGJnLWluay8xMCBzaHJpbmstMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByaW5nLTEgcmluZy1pbmsvMTAgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46JC50aHVtYj9YKCJpbWciLHtzcmM6JC50aHVtYixhbHQ6IiIsY2xhc3NOYW1lOiJzaXplLWZ1bGwgb2JqZWN0LWNvdmVyIixkcmFnZ2FibGU6ITF9KTpYKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBzaXplLTQgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci1pbmsvMzAgYm9yZGVyLXQtaW5rIGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjhzX2xpbmVhcl9pbmZpbml0ZV0ifSl9KSxYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgbGVhZGluZy10aWdodCBwb2ludGVyLWV2ZW50cy1ub25lIixjaGlsZHJlbjpbWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gZm9udC1zZW1pYm9sZCB0ZXh0LWluayIsY2hpbGRyZW46JC5zdGF0dXM9PT0ic2F2aW5nIj8iU2F2aW5nIFNjcmVlbnNob3TigKYiOiJTY3JlZW5zaG90IFNhdmVkIn0pLCQuc3RhdHVzPT09InNhdmVkIiYmWCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC1pbmstNjAiLGNoaWxkcmVuOiJPcGVuIGluIEZpbmRlciJ9KV19KSwkLnN0YXR1cz09PSJzYXZlZCImJlgodTUse2NsYXNzTmFtZToibWwtYXV0byB0ZXh0LWluay04MCBwb2ludGVyLWV2ZW50cy1ub25lIixzaXplOjE2LHN0cm9rZVdpZHRoOjIuMjV9KV19KV19KX12YXIgTjQ9MzUwMCxVND00MDAwO2Z1bmN0aW9uIEw0KCQsSil7bGV0IFE9VChudWxsKSxaPVQobnVsbCksSz1UKG51bGwpLFk9VChudWxsKSxxPVQobnVsbCksVj1QKCgpPT57aWYoSy5jdXJyZW50KWNsZWFyVGltZW91dChLLmN1cnJlbnQpO0suY3VycmVudD1udWxsLFkuY3VycmVudD1udWxsfSxbXSksRz1QKChMKT0+e2xldCBrPUw/P1ouY3VycmVudD8/dm9pZCAwO2lmKFYoKSxxLmN1cnJlbnQ9bnVsbCxIMC5kaXNtaXNzKGspLGs9PT12b2lkIDB8fFouY3VycmVudD09PVN0cmluZyhrKSlRLmN1cnJlbnQ9bnVsbCxaLmN1cnJlbnQ9bnVsbH0sW1ZdKSxCPVAoKCk9PntsZXQgTD1RLmN1cnJlbnQ7aWYoTD8ucGF0aCl4MSgicmV2ZWFsU2NyZWVuc2hvdCIse3BhdGg6TC5wYXRofSl9LFtdKSxOPVAoKEwpPT57VigpO2xldCBrPU1hdGgubWF4KDAsTCksQz1aLmN1cnJlbnQ7cS5jdXJyZW50PWssWS5jdXJyZW50PURhdGUubm93KCkrayxLLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+RyhDPz92b2lkIDApLGspfSxbVixHXSksej1QKCgpPT57aWYoIUsuY3VycmVudHx8WS5jdXJyZW50PT1udWxsKXJldHVybjtxLmN1cnJlbnQ9TWF0aC5tYXgoMCxZLmN1cnJlbnQtRGF0ZS5ub3coKSksVigpfSxbVl0pLFU9UCgoKT0+e2xldCBMPXEuY3VycmVudDtpZihMPT1udWxsKXJldHVybjtOKEwpfSxbTl0pLEg9UCgoTCxrPTEvMCk9PntpZihRLmN1cnJlbnQ9TCxaLmN1cnJlbnQ9TC5pZCxIMC5jdXN0b20oKEMpPT5YKHo0LHt0b2FzdDpMLG9uUmV2ZWFsOkIsb25EaXNtaXNzOigpPT5HKEMpLG9uUGF1c2U6eixvblJlc3VtZTpVfSkse2lkOkwuaWQsZHVyYXRpb246MS8wLHVuc3R5bGVkOiEwfSksTnVtYmVyLmlzRmluaXRlKGspKU4oayk7ZWxzZSBWKCkscS5jdXJyZW50PW51bGx9LFtWLEcseixVLEIsTl0pO3JldHVybntjYXB0dXJlOlAoYXN5bmMoKT0+e2lmKCEkKXJldHVybjtsZXQgTD1jcnlwdG8ucmFuZG9tVVVJRCgpO0goe2lkOkwsc3RhdHVzOiJzYXZpbmciLHBoYXNlOiJpbiJ9KTtsZXQgazt0cnl7bGV0IEM9YXdhaXQgeDEoInNjcmVlbnNob3QiLHt1ZGlkOiQsLi4uSj97ZGlzcGxheTpKfTp7fX0pO2lmKGs9dHlwZW9mIEMucGF0aD09PSJzdHJpbmciP0MucGF0aDoiIixDLmV4aXRDb2RlIT09MHx8IWspe0goe2lkOkwsc3RhdHVzOiJlcnJvciIscGhhc2U6ImluIixtZXNzYWdlOkMuc3RkZXJyLnRyaW0oKXx8IlNjcmVlbnNob3QgZmFpbGVkIn0sVTQpO3JldHVybn19Y2F0Y2goQyl7SCh7aWQ6TCxzdGF0dXM6ImVycm9yIixwaGFzZToiaW4iLG1lc3NhZ2U6QyBpbnN0YW5jZW9mIEVycm9yP0MubWVzc2FnZToiU2NyZWVuc2hvdCBmYWlsZWQifSxVNCk7cmV0dXJufUgoe2lkOkwsc3RhdHVzOiJzYXZlZCIscGhhc2U6ImluIixwYXRoOmt9LE40KTt0cnl7bGV0IEM9YXdhaXQgeDEoInNjcmVlbnNob3RUaHVtYm5haWwiLHtwYXRoOmt9KSxPPXR5cGVvZiBDLmRhdGE9PT0ic3RyaW5nIj9DLmRhdGEucmVwbGFjZSgvXHMrL2csIiIpOiIiO2lmKE8pe2xldCB5PVEuY3VycmVudDtpZih5Py5pZD09PUwpSCh7Li4ueSx0aHVtYjpgZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7T31gfSxONCl9fWNhdGNoe319LFskLEosSF0pLHJldmVhbDpCLGRpc21pc3M6R319ZnVuY3Rpb24gSDQoJD1uZXcgRGF0ZSl7bGV0IEo9KFopPT5TdHJpbmcoWikucGFkU3RhcnQoMiwiMCIpO3JldHVybmBzZXJ2ZS1zaW0tcmVjb3JkaW5nLSR7WyQuZ2V0RnVsbFllYXIoKSxKKCQuZ2V0TW9udGgoKSsxKSxKKCQuZ2V0RGF0ZSgpKSxKKCQuZ2V0SG91cnMoKSksSigkLmdldE1pbnV0ZXMoKSksSigkLmdldFNlY29uZHMoKSldLmpvaW4oIi0iKX0ubXA0YH1mdW5jdGlvbiBVMygkLEosUSl7bGV0IFo9UT9gP3Rva2VuPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFEpfWA6IiI7cmV0dXJuIGIxKGBoZWxwZXIvJHtlbmNvZGVVUklDb21wb25lbnQoJCl9L3JlY29yZGluZyR7Sj9gLyR7Sn1gOiIifSR7Wn1gKX1mdW5jdGlvbiBCWCgkKXtyZXR1cm4oJD8vZmlsZW5hbWU9IihbXiJdKykiLy5leGVjKCQpOm51bGwpPy5bMV0/P251bGx9YXN5bmMgZnVuY3Rpb24gazQoJCl7bGV0IEo9YXdhaXQgJC5qc29uKCkuY2F0Y2goKCk9Pm51bGwpO3JldHVybiBKPy5tZXNzYWdlPz9KPy5lcnJvcj8/YEhUVFAgJHskLnN0YXR1c31gfWZ1bmN0aW9uIHpYKCQsSil7bGV0IFE9VVJMLmNyZWF0ZU9iamVjdFVSTCgkKSxaPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtaLmhyZWY9USxaLmRvd25sb2FkPUosZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChaKSxaLmNsaWNrKCksWi5yZW1vdmUoKSxzZXRUaW1lb3V0KCgpPT5VUkwucmV2b2tlT2JqZWN0VVJMKFEpLDFlNCl9dmFyIE5YPTIwMDA7ZnVuY3Rpb24gTjMoJCl7bGV0IEo9JD9EYXRlLnBhcnNlKCQpOkRhdGUubm93KCk7cmV0dXJue3N0YXR1czoicmVjb3JkaW5nIixzdGFydGVkQXQ6TnVtYmVyLmlzRmluaXRlKEopP0o6RGF0ZS5ub3coKX19YXN5bmMgZnVuY3Rpb24gTzgoJCl7dHJ5e2xldCBKPWF3YWl0IGZldGNoKFUzKCQpKTtyZXR1cm4gSi5vaz9hd2FpdCBKLmpzb24oKTpudWxsfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBDNCgkLHtwb2xsTXM6Sj1OWH09e30pe2xldFtRLFpdPUEoe3N0YXR1czoiaWRsZSJ9KSxLPVQodm9pZCAwKSxZPVQoMCkscT1UKDApLFY9VChudWxsKSxHPVQoUSk7XygoKT0+e0cuY3VycmVudD1RfSxbUV0pO2xldCBCPVAoYXN5bmMoKT0+e2xldCBVPUsuY3VycmVudDtpZighVSlyZXR1cm47WS5jdXJyZW50Kys7bGV0IEg9Ry5jdXJyZW50O1ooe3N0YXR1czoic2F2aW5nIn0pO2xldCBGPVYuY3VycmVudD8uZGV2aWNlPT09VT9WLmN1cnJlbnQudG9rZW46dm9pZCAwO3RyeXtsZXQgTD1hd2FpdCBmZXRjaChVMyhVLCJzdG9wIixGKSx7bWV0aG9kOiJQT1NUIn0pO2lmKCFMLm9rKXRocm93IEVycm9yKGF3YWl0IGs0KEwpKTtpZihWLmN1cnJlbnQ/LnRva2VuPT09RilWLmN1cnJlbnQ9bnVsbDtsZXQgaz1CWChMLmhlYWRlcnMuZ2V0KCJjb250ZW50LWRpc3Bvc2l0aW9uIikpPz9INCgpO2lmKHpYKGF3YWl0IEwuYmxvYigpLGspLEgwLnN1Y2Nlc3MoYFNhdmVkICR7a31gKSxLLmN1cnJlbnQ9PT1VKVooe3N0YXR1czoiaWRsZSJ9KX1jYXRjaChMKXtIMC5lcnJvcihgQ291bGQgbm90IHNhdmUgcmVjb3JkaW5nOiAke0wgaW5zdGFuY2VvZiBFcnJvcj9MLm1lc3NhZ2U6U3RyaW5nKEwpfWApO2xldCBrPWF3YWl0IE84KFUpO2lmKEsuY3VycmVudCE9PVUpcmV0dXJuO2lmKCFrKVooSC5zdGF0dXM9PT0ic2F2aW5nIj97c3RhdHVzOiJpZGxlIn06SCk7ZWxzZSBaKGsucmVjb3JkaW5nP04zKGsuc3RhcnRlZEF0KTp7c3RhdHVzOiJpZGxlIn0pfX0sW10pO18oKCk9PntpZihLLmN1cnJlbnQ9JCxaKHtzdGF0dXM6ImlkbGUifSksISQpcmV0dXJuO2xldCBVPSExLEg9YXN5bmMoKT0+e2lmKHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKXJldHVybjtsZXQgTD1ZLmN1cnJlbnQsaz0rK3EuY3VycmVudCxDPWF3YWl0IE84KCQpO2lmKFV8fCFDfHxMIT09WS5jdXJyZW50fHxrIT09cS5jdXJyZW50KXJldHVybjtsZXQgTz1HLmN1cnJlbnQ7aWYoTy5zdGF0dXM9PT0ic3RhcnRpbmcifHxPLnN0YXR1cz09PSJzYXZpbmciKXJldHVybjtpZighQy5yZWNvcmRpbmcpe2lmKFYuY3VycmVudD8uZGV2aWNlPT09JClWLmN1cnJlbnQ9bnVsbDtpZihPLnN0YXR1cyE9PSJpZGxlIilaKHtzdGF0dXM6ImlkbGUifSk7cmV0dXJufWlmKEMubGltaXRSZWFjaGVkJiZPLnN0YXR1cz09PSJyZWNvcmRpbmciJiZWLmN1cnJlbnQ/LmRldmljZT09PSQpe0gwLm1lc3NhZ2UoIlJlY29yZGluZyByZWFjaGVkIHRoZSBzZXJ2ZXIncyB0aW1lIGxpbWl0OyBzYXZpbmciKSxCKCk7cmV0dXJufWxldCB5PU4zKEMuc3RhcnRlZEF0KTtpZihPLnN0YXR1cyE9PSJyZWNvcmRpbmcifHxPLnN0YXJ0ZWRBdCE9PXkuc3RhcnRlZEF0KVooeSl9O0goKTtsZXQgRj1zZXRJbnRlcnZhbCgoKT0+e0goKX0sSik7cmV0dXJuKCk9PntpZihVPSEwLGNsZWFySW50ZXJ2YWwoRiksSy5jdXJyZW50PT09JClLLmN1cnJlbnQ9dm9pZCAwfX0sWyQsSixCXSk7bGV0IE49UChhc3luYygpPT57bGV0IFU9Sy5jdXJyZW50O2lmKCFVKXJldHVybjtZLmN1cnJlbnQrKyxaKHtzdGF0dXM6InN0YXJ0aW5nIn0pO3RyeXtsZXQgSD1hd2FpdCBmZXRjaChVMyhVLCJzdGFydCIpLHttZXRob2Q6IlBPU1QifSk7aWYoIUgub2spdGhyb3cgRXJyb3IoYXdhaXQgazQoSCkpO2xldCBGPWF3YWl0IEguanNvbigpO2lmKEsuY3VycmVudCE9PVUpe2ZldGNoKFUzKFUsInN0b3AiLEYudG9rZW4pLHttZXRob2Q6IlBPU1QifSkudGhlbigoTCk9PkwuYm9keT8uY2FuY2VsKCkpLmNhdGNoKCgpPT57fSk7cmV0dXJufVYuY3VycmVudD1GLnRva2VuP3tkZXZpY2U6VSx0b2tlbjpGLnRva2VufTpudWxsLFooTjMoRi5zdGFydGVkQXQpKX1jYXRjaChIKXtIMC5lcnJvcihgQ291bGQgbm90IHN0YXJ0IHJlY29yZGluZzogJHtIIGluc3RhbmNlb2YgRXJyb3I/SC5tZXNzYWdlOlN0cmluZyhIKX1gKTtsZXQgRj1hd2FpdCBPOChVKTtpZihLLmN1cnJlbnQhPT1VKXJldHVybjtaKEY/LnJlY29yZGluZz9OMyhGLnN0YXJ0ZWRBdCk6e3N0YXR1czoiaWRsZSJ9KX19LFtdKSx6PVAoKCk9PntpZihRLnN0YXR1cz09PSJpZGxlIilOKCk7ZWxzZSBpZihRLnN0YXR1cz09PSJyZWNvcmRpbmciKUIoKX0sW1Euc3RhdHVzLE4sQl0pO3JldHVybntzdGF0ZTpRLHN0YXJ0Ok4sc3RvcDpCLHRvZ2dsZTp6fX12YXIgVVg9IiNmZjNiMzAiO2Z1bmN0aW9uIExYKCQpe2xldCBKPU1hdGgubWF4KDAsTWF0aC5mbG9vcigkLzEwMDApKTtyZXR1cm5gJHtNYXRoLmZsb29yKEovNjApfToke1N0cmluZyhKJTYwKS5wYWRTdGFydCgyLCIwIil9YH1mdW5jdGlvbiBGNCh7c3RhdGU6JCxvblRvZ2dsZTpKfSl7bGV0IFE9JC5zdGF0dXM9PT0icmVjb3JkaW5nIixaPSQuc3RhdHVzPT09InN0YXJ0aW5nInx8JC5zdGF0dXM9PT0ic2F2aW5nIixbSyxZXT1BKCgpPT5EYXRlLm5vdygpKTtfKCgpPT57aWYoIVEpcmV0dXJuO1koRGF0ZS5ub3coKSk7bGV0IFY9c2V0SW50ZXJ2YWwoKCk9PlkoRGF0ZS5ub3coKSksNTAwKTtyZXR1cm4oKT0+Y2xlYXJJbnRlcnZhbChWKX0sW1FdKTtsZXQgcT1RPyJTdG9wIHJlY29yZGluZyI6JC5zdGF0dXM9PT0ic2F2aW5nIj8iU2F2aW5nIHJlY29yZGluZ+KApiI6JC5zdGF0dXM9PT0ic3RhcnRpbmciPyJTdGFydGluZyByZWNvcmRpbmfigKYiOiJSZWNvcmQgc2NyZWVuIjtyZXR1cm4gWChJMS5CdXR0b24seyJhcmlhLWxhYmVsIjpxLCJhcmlhLXByZXNzZWQiOlEsdGl0bGU6cSxmb3JjZURpc2FibGVkOlosb25DbGljazooVik9PntWLnByZXZlbnREZWZhdWx0KCksSigpfSxzdHlsZTpRP3tjb2xvcjpVWCxnYXA6NH06dm9pZCAwLGNoaWxkcmVuOlo/WChtMCx7c2l6ZToxOCxzdHJva2VXaWR0aDoyLGNsYXNzTmFtZToiYW5pbWF0ZS1zcGluIn0pOlE/WChLMSx7Y2hpbGRyZW46W1goJDIse3NpemU6MTQsc3Ryb2tlV2lkdGg6MCxmaWxsOiJjdXJyZW50Q29sb3IifSksWCgic3BhbiIseyJkYXRhLXRlc3RpZCI6InJlY29yZGluZy1lbGFwc2VkIixzdHlsZTp7Zm9udFNpemU6MTIsZm9udFZhcmlhbnROdW1lcmljOiJ0YWJ1bGFyLW51bXMiLGxpbmVIZWlnaHQ6IjE4cHgifSxjaGlsZHJlbjpMWChLLSQuc3RhcnRlZEF0KX0pXX0pOlgobDUse3NpemU6MTgsc3Ryb2tlV2lkdGg6Mn0pfSl9ZnVuY3Rpb24gTzQoe2RlZmF1bHRXaWR0aDokLHZpZXdwb3J0V2lkdGg6Six2aWV3cG9ydEhlaWdodDpRLGFzcGVjdFJhdGlvOlosaW5pdGlhbEZpdDpLPSExLG9uU3RhcnQ6WX0pe2xldCBxPUY1KCksW1YsR109QSghMSksW0IsTl09QSghMSksW3osVV09QSghMSksSD1UKG51bGwpLEY9VChbXSksTD1UKG51bGwpLGs9VChudWxsKSxDPVQobnVsbCksTz1UKG51bGwpLHk9VChLKSxFPVQoITEpO18oKCk9PntFLmN1cnJlbnQ9ITB9LFtdKTtsZXQgdz1QKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuICQ7aWYoeS5jdXJyZW50JiYhRS5jdXJyZW50KXJldHVybiBfNSgkLEosUSxaKTtsZXQgYj1OYU47dHJ5e2xldCBqPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShZOCk7Yj1qIT1udWxsP051bWJlcihqKTpOYU59Y2F0Y2h7fXJldHVybiBINygkLEosUSxaLGIpfSxbWiwkLFEsSl0pLFM9UjEoKCk9PncoKSxbd10pLFtRMSxnXT1BKFMpLGg9VChTKSxJPVQoJCksdT1fNSgkLEosUSxaKSxaMT1NYXRoLm1pbihhNix1KSxyPVExPz8kLE0xPVE1KHIsJCxKLFEsWiksSjE9UCgoYik9PntsZXQgaj1ZMyhiKTtoLmN1cnJlbnQ9aixnKGopfSxbXSksaT1QKChiKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwkPD0wKXJldHVybjtsZXQgaj1RNShiLCQsSixRLFopO3RyeXt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oWTgsU3RyaW5nKGovJCkpfWNhdGNoe319LFtaLCQsUSxKXSksZj1QKChiKT0+e2lmKEMuY3VycmVudCE9bnVsbCljbGVhclRpbWVvdXQoQy5jdXJyZW50KTtDLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e0MuY3VycmVudD1udWxsLGkoYil9LEw3KX0sW2ldKTtfKCgpPT57aWYoVnx8QilyZXR1cm47bGV0IGI9aC5jdXJyZW50O2lmKGI9PW51bGwpcmV0dXJuO2xldCBqPVE1KGIsJCxKLFEsWik7aWYoaiE9PWIpSjEoail9LFtaLCQsQixWLFEsSixKMV0pLF8oKCk9PntpZihJLmN1cnJlbnQ9PT0kKXJldHVybjtJLmN1cnJlbnQ9JCxKMSh3KCkpfSxbJCx3LEoxXSksXygoKT0+e2lmKCFWJiYhQilyZXR1cm47bGV0IGI9ZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3Isaj1kb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QsTjE9ZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0O3JldHVybiBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj0ibndzZS1yZXNpemUiLGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdD0ibm9uZSIsZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PSJub25lIiwoKT0+e2RvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yPWIsZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0PWosZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PU4xfX0sW1YsQl0pLF8oKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm47bGV0IGI9KCk9PntsZXQgTjE9aC5jdXJyZW50O2lmKE4xPT1udWxsKXJldHVybjtpZihDLmN1cnJlbnQhPW51bGwpY2xlYXJUaW1lb3V0KEMuY3VycmVudCksQy5jdXJyZW50PW51bGw7aShOMSl9LGo9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIiliKCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLGIpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLGopLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixiKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixqKX19LFtpXSk7bGV0IFUxPVAoKGIpPT57aWYoYj51KXJldHVybiB1K3E4KGItdSx1KTtpZihiPFoxKXJldHVybiBaMS1xOChaMS1iLHUpO3JldHVybiBifSxbdSxaMV0pLFgxPVAoKCk9PntpZihrLmN1cnJlbnQpay5jdXJyZW50KCksay5jdXJyZW50PW51bGw7TighMSl9LFtdKSxCMT1QKChiKT0+e2xldCBqPXBlcmZvcm1hbmNlLm5vdygpLE4xPUYuY3VycmVudDtOMS5wdXNoKHt0OmoseDpifSk7d2hpbGUoTjEubGVuZ3RoPjEmJmotTjFbMF0udD5VNylOMS5zaGlmdCgpfSxbXSksRjE9UCgoYik9PntsZXQgaj1VMShiKTtpZihMLmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoTC5jdXJyZW50KTtMLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57TC5jdXJyZW50PW51bGwsSjEoaiksQjEoail9KX0sW1UxLEIxLEoxXSksVzE9UCgoYixqLE4xKT0+e1gxKCk7bGV0IEMxPWguY3VycmVudD8/JDtILmN1cnJlbnQ9e3BvaW50ZXJJZDpiLHN0YXJ0WDpqLHN0YXJ0WTpOMSxzdGFydFdpZHRoOkMxfSxGLmN1cnJlbnQ9W3t0OnBlcmZvcm1hbmNlLm5vdygpLHg6QzF9XSxZKCksRyghMCl9LFtYMSwkLFldKSxvPVAoKCk9PntsZXQgYj1ILmN1cnJlbnQ7aWYoSC5jdXJyZW50PW51bGwsTC5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEwuY3VycmVudCksTC5jdXJyZW50PW51bGw7aWYoYiYmYi5wb2ludGVySWQ+PTApe2xldCBrMT1PLmN1cnJlbnQ7aWYoazE/Lmhhc1BvaW50ZXJDYXB0dXJlKGIucG9pbnRlcklkKSlrMS5yZWxlYXNlUG9pbnRlckNhcHR1cmUoYi5wb2ludGVySWQpfUcoITEpO2xldCBqPWguY3VycmVudD8/JCxOMT1GNyhGLmN1cnJlbnQpO0YuY3VycmVudD1bXTtsZXQgQzE9UTUoaitOMSpONywkLEosUSxaKSxwPVkzKGs3KEMxLFskXSxHNykpLGU9TWF0aC5hYnMoai1wKTwwLjUmJk1hdGguYWJzKE4xKTw4O2lmKHF8fGUpe0oxKHApLGYocCk7cmV0dXJufU4oITApLGsuY3VycmVudD1DNyh7ZnJvbTpqLHRvOnAsdmVsb2NpdHk6TjEsc3RpZmZuZXNzOkI3LGRhbXBpbmc6ejcsb25VcGRhdGU6SjEsb25Db21wbGV0ZTooKT0+e2suY3VycmVudD1udWxsLE4oITEpLGYocCl9fSl9LFtaLCQscSxmLFEsSixKMV0pO18oKCk9PntyZXR1cm4oKT0+e2lmKFgxKCksTC5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEwuY3VycmVudCk7aWYoQy5jdXJyZW50IT1udWxsKXtpZihjbGVhclRpbWVvdXQoQy5jdXJyZW50KSxoLmN1cnJlbnQhPW51bGwpaShoLmN1cnJlbnQpfX19LFtYMSxpXSksXygoKT0+e2lmKCFWKXJldHVybjtsZXQgYj0oKT0+bygpLGo9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIilvKCl9LE4xPShDMSk9PntsZXQgcD1ILmN1cnJlbnQ7aWYoIXB8fHAucG9pbnRlcklkIT09QzEucG9pbnRlcklkKXJldHVybjtDMS5wcmV2ZW50RGVmYXVsdCgpLEYxKEE0KHAsQzEuY2xpZW50WCxDMS5jbGllbnRZLFopKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIixiKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLE4xLHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixiLCEwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsYiwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsaiksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsYiksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixOMSwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsYiwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLGIsITApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLGopfX0sW1osbyxWLEYxXSk7bGV0IGM9UCgoYik9PntsZXQgaj1ILmN1cnJlbnQ7aWYoIWp8fGoucG9pbnRlcklkIT09Yi5wb2ludGVySWQpcmV0dXJuO2IucHJldmVudERlZmF1bHQoKSxiLnN0b3BQcm9wYWdhdGlvbigpLG8oKX0sW29dKSxkPVAoKGIpPT57aWYoYi5idXR0b24hPT0wKXJldHVybjtiLnByZXZlbnREZWZhdWx0KCksYi5zdG9wUHJvcGFnYXRpb24oKSxiLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoYi5wb2ludGVySWQpLFcxKGIucG9pbnRlcklkLGIuY2xpZW50WCxiLmNsaWVudFkpfSxbVzFdKSxuPVAoKGIpPT57bGV0IGo9SC5jdXJyZW50O2lmKCFqfHxqLnBvaW50ZXJJZCE9PWIucG9pbnRlcklkKXJldHVybjtiLnByZXZlbnREZWZhdWx0KCksRjEoQTQoaixiLmNsaWVudFgsYi5jbGllbnRZLFopKX0sW1osRjFdKSxZMT1QKChiKT0+e2xldCBqPWIua2V5PT09IkFycm93UmlnaHQifHxiLmtleT09PSJBcnJvd0Rvd24iPzE6Yi5rZXk9PT0iQXJyb3dMZWZ0Inx8Yi5rZXk9PT0iQXJyb3dVcCI/LTE6MDtpZihqPT09MClyZXR1cm47Yi5wcmV2ZW50RGVmYXVsdCgpLFgxKCk7bGV0IE4xPWIuc2hpZnRLZXk/ODA6MjQsQzE9WTMoUTUoTTEraipOMSwkLEosUSxaKSk7SjEoQzEpLGYoQzEpfSxbWixYMSxNMSwkLGYsUSxKLEoxXSk7cmV0dXJue2hhbmRsZVJlZjpPLHdpZHRoOnIsY29tbWl0dGVkV2lkdGg6TTEsbWluV2lkdGg6WjEsbWF4V2lkdGg6dSxpc1Jlc2l6aW5nOlYsaXNJbmVydGlhOkIscmVkdWNlZE1vdGlvbjpxLGhhbmRsZUhvdmVyZWQ6eixoYW5kbGVBY3RpdmU6enx8Vnx8QixzZXRIYW5kbGVIb3ZlcmVkOlUsb25Qb2ludGVyRG93bjpkLG9uUG9pbnRlck1vdmU6bixvblBvaW50ZXJFbmQ6YyxvbktleURvd246WTF9fWZ1bmN0aW9uIEE0KCQsSixRLFope2xldCBLPUotJC5zdGFydFgsWT0oUS0kLnN0YXJ0WSkqWjtyZXR1cm4gJC5zdGFydFdpZHRoKyhNYXRoLmFicyhLKT49TWF0aC5hYnMoWSk/SzpZKX1mdW5jdGlvbiBNNCgpe2xldCAkPVQobmV3IE1hcCksSj1UKG5ldyBNYXApLFE9UCgoVik9PntsZXQgRz1KLmN1cnJlbnQuZ2V0KFYpO2lmKEcpY2xlYXJUaW1lb3V0KEcpO0ouY3VycmVudC5kZWxldGUoVil9LFtdKSxaPVAoKFYsRz0xLzApPT57SDAuY3VzdG9tKCgpPT5YKFQ3LHt0b2FzdDpWfSkse2lkOlYuaWQsZHVyYXRpb246Ryx1bnN0eWxlZDohMH0pfSxbXSksSz1QKChWLEcpPT57bGV0IEI9Y3J5cHRvLnJhbmRvbVVVSUQoKSxOPXtpZDpCLG5hbWU6VixraW5kOkcsc3RhdHVzOiJ1cGxvYWRpbmciLHByb2dyZXNzOjB9O3JldHVybiAkLmN1cnJlbnQuc2V0KEIsTiksWihOKSxCfSxbWl0pLFk9UCgoVixHKT0+e2xldCBCPSQuY3VycmVudC5nZXQoVik7aWYoIUIpcmV0dXJuO1EoVik7bGV0IE49ey4uLkIsLi4uR307aWYoJC5jdXJyZW50LnNldChWLE4pLFooTixHLnN0YXR1cz09PSJzdWNjZXNzInx8Ry5zdGF0dXM9PT0iZXJyb3IiPzMwMDA6MS8wKSxHLnN0YXR1cz09PSJzdWNjZXNzInx8Ry5zdGF0dXM9PT0iZXJyb3IiKXtsZXQgej1zZXRUaW1lb3V0KCgpPT57JC5jdXJyZW50LmRlbGV0ZShWKSxKLmN1cnJlbnQuZGVsZXRlKFYpfSwzMDAwKTtKLmN1cnJlbnQuc2V0KFYseil9fSxbUSxaXSkscT1QKChWLEcpPT57bGV0IEI9JC5jdXJyZW50LmdldChWKTtpZighQilyZXR1cm47bGV0IE49ey4uLkIscHJvZ3Jlc3M6R307JC5jdXJyZW50LnNldChWLE4pLFooTil9LFtaXSk7cmV0dXJue2FkZDpLLHVwZGF0ZTpZLHNldFByb2dyZXNzOnF9fWZ1bmN0aW9uIFc0KCQsSil7bGV0W1EsWl09QShbXSksW0ssWV09QShudWxsKSxbcSxWXT1BKCExKSxHPVAoYXN5bmMoKT0+e2lmKCEkKXJldHVybjtWKCEwKSxZKG51bGwpO3RyeXtsZXQgQj1hd2FpdCBmZXRjaCgkLHtjYWNoZToibm8tc3RvcmUifSksTj1hd2FpdCBCLmpzb24oKTtpZighQi5va3x8Ti5lcnJvcil0aHJvdyBFcnJvcihOLmVycm9yfHwiRmFpbGVkIHRvIGxpc3QgV2ViS2l0IHRhcmdldHMiKTtsZXQgej10eXBlb2Ygd2luZG93PiJ1Ij9udWxsOndpbmRvdy5sb2NhdGlvbixVPU4udGFyZ2V0cz8/W107Wih6P1UubWFwKChIKT0+WjQoSCx6KSk6VSl9Y2F0Y2goQil7WShCIGluc3RhbmNlb2YgRXJyb3I/Qi5tZXNzYWdlOiJGYWlsZWQgdG8gc3RhcnQgV2ViS2l0IERldlRvb2xzIil9ZmluYWxseXtWKCExKX19LFskXSk7cmV0dXJuIF8oKCk9PntpZighSilyZXR1cm47RygpO2xldCBCPXNldEludGVydmFsKCgpPT52b2lkIEcoKSwyNTAwKTtyZXR1cm4oKT0+Y2xlYXJJbnRlcnZhbChCKX0sW0osR10pLHt0YXJnZXRzOlEsZXJyb3I6Syxsb2FkaW5nOnEscmVmcmVzaDpHfX12YXIgSFg9NjAsa1g9MTAwMDtmdW5jdGlvbiBQNCgkLEosUSxaPUhYKXtsZXRbSyxZXT1BKG51bGwpLFtxLFZdPUEoMCksW0csQl09QShaKSxbTix6XT1BKDApO18oKCk9PntpZighSnx8ISQpcmV0dXJuO2xldCBDPSExLE89JC5pbmNsdWRlcygiPyIpPyImIjoiPyIseT1hc3luYygpPT57dHJ5e2xldCBTPWF3YWl0KGF3YWl0IGZldGNoKGAkeyR9JHtPfWxpbWl0PSR7R30mb2Zmc2V0PTBgLHtjYWNoZToibm8tc3RvcmUifSkpLmpzb24oKTtpZihDKXJldHVybjtpZihZKFMuZGV2aWNlcz8/W10pLHR5cGVvZiBTLnRvdGFsPT09Im51bWJlciIpVihTLnRvdGFsKX1jYXRjaHtpZighQylZKFtdKX19O3koKTtsZXQgRT1zZXRJbnRlcnZhbCh5LFE/NzUwOjMwMDApO3JldHVybigpPT57Qz0hMCxjbGVhckludGVydmFsKEUpfX0sWyQsSixOLFEsR10pO2xldCBVPVAoKCk9PnooKEMpPT5DKzEpLFtdKSxIPVAoKCk9PkIoKEMpPT5DK1opLFtaXSksRj1QKCgpPT5CKGtYKSxbXSksTD1QKCgpPT5CKFopLFtaXSksaz1xPihLPy5sZW5ndGg/PzApO3JldHVybntkZXZpY2VzOkssdG90YWw6cSxyZWZyZXNoOlUsbG9hZE1vcmU6SCxsb2FkQWxsOkYscmVzZXRQYWdlOkwsaGFzTW9yZTprfX1mdW5jdGlvbiBDWCgkLEope3JldHVybiAkLndpZHRoPT09Si53aWR0aCYmJC5oZWlnaHQ9PT1KLmhlaWdodHx8JC53aWR0aD09PUouaGVpZ2h0JiYkLmhlaWdodD09PUoud2lkdGh9ZnVuY3Rpb24gXzQoJCxKLFEpe2lmKCEkPy5sZW5ndGh8fCEoSj4wKXx8IShRPjApKXJldHVybiBudWxsO2xldCBaPXt3aWR0aDpKLGhlaWdodDpRfTtyZXR1cm4gJC5maW5kKChLKT0+Q1goSyxaKSk/P251bGx9ZnVuY3Rpb24gRDQoJCl7cmV0dXJuICQ9PT0iaW5uZXIiPyJwcmltYXJ5LTEiOiQ9PT0iY292ZXIiPyJwcmltYXJ5Ijp2b2lkIDB9dmFyIE04PXtzdHJlYW1lZDohMSxmZWxsQmFjazohMX07ZnVuY3Rpb24gVDQoJCxKKXtzd2l0Y2goSil7Y2FzZSJmcmFtZSI6cmV0dXJuICQuc3RyZWFtZWQ/JDp7Li4uJCxzdHJlYW1lZDohMH07Y2FzZSJ0aW1lb3V0IjpyZXR1cm4gJC5zdHJlYW1lZHx8JC5mZWxsQmFjaz8kOnsuLi4kLGZlbGxCYWNrOiEwfTtjYXNlImVycm9yIjpyZXR1cm4gJC5mZWxsQmFjaz8kOnsuLi4kLGZlbGxCYWNrOiEwfTtjYXNlInJlc2V0IjpyZXR1cm4gTTh9fXZhciBJND00MDAwO3ZhciBGWD17S2V5QTo0LEtleUI6NSxLZXlDOjYsS2V5RDo3LEtleUU6OCxLZXlGOjksS2V5RzoxMCxLZXlIOjExLEtleUk6MTIsS2V5SjoxMyxLZXlLOjE0LEtleUw6MTUsS2V5TToxNixLZXlOOjE3LEtleU86MTgsS2V5UDoxOSxLZXlROjIwLEtleVI6MjEsS2V5UzoyMixLZXlUOjIzLEtleVU6MjQsS2V5VjoyNSxLZXlXOjI2LEtleVg6MjcsS2V5WToyOCxLZXlaOjI5LERpZ2l0MTozMCxEaWdpdDI6MzEsRGlnaXQzOjMyLERpZ2l0NDozMyxEaWdpdDU6MzQsRGlnaXQ2OjM1LERpZ2l0NzozNixEaWdpdDg6MzcsRGlnaXQ5OjM4LERpZ2l0MDozOSxFbnRlcjo0MCxFc2NhcGU6NDEsQmFja3NwYWNlOjQyLFRhYjo0MyxTcGFjZTo0NCxNaW51czo0NSxFcXVhbDo0NixCcmFja2V0TGVmdDo0NyxCcmFja2V0UmlnaHQ6NDgsQmFja3NsYXNoOjQ5LFNlbWljb2xvbjo1MSxRdW90ZTo1MixCYWNrcXVvdGU6NTMsQ29tbWE6NTQsUGVyaW9kOjU1LFNsYXNoOjU2LENhcHNMb2NrOjU3LEYxOjU4LEYyOjU5LEYzOjYwLEY0OjYxLEY1OjYyLEY2OjYzLEY3OjY0LEY4OjY1LEY5OjY2LEYxMDo2NyxGMTE6NjgsRjEyOjY5LFByaW50U2NyZWVuOjcwLFNjcm9sbExvY2s6NzEsUGF1c2U6NzIsSW5zZXJ0OjczLEhvbWU6NzQsUGFnZVVwOjc1LERlbGV0ZTo3NixFbmQ6NzcsUGFnZURvd246NzgsQXJyb3dSaWdodDo3OSxBcnJvd0xlZnQ6ODAsQXJyb3dEb3duOjgxLEFycm93VXA6ODIsTnVtTG9jazo4MyxOdW1wYWREaXZpZGU6ODQsTnVtcGFkTXVsdGlwbHk6ODUsTnVtcGFkU3VidHJhY3Q6ODYsTnVtcGFkQWRkOjg3LE51bXBhZEVudGVyOjg4LE51bXBhZDE6ODksTnVtcGFkMjo5MCxOdW1wYWQzOjkxLE51bXBhZDQ6OTIsTnVtcGFkNTo5MyxOdW1wYWQ2Ojk0LE51bXBhZDc6OTUsTnVtcGFkODo5NixOdW1wYWQ5Ojk3LE51bXBhZDA6OTgsTnVtcGFkRGVjaW1hbDo5OSxDb250cm9sTGVmdDoyMjQsU2hpZnRMZWZ0OjIyNSxBbHRMZWZ0OjIyNixNZXRhTGVmdDoyMjcsQ29udHJvbFJpZ2h0OjIyOCxTaGlmdFJpZ2h0OjIyOSxBbHRSaWdodDoyMzAsTWV0YVJpZ2h0OjIzMX07ZnVuY3Rpb24gRTQoJCl7cmV0dXJuIEZYWyRdPz9udWxsfWFzeW5jIGZ1bmN0aW9uIHc0KCQsSix7ZmV0Y2hJbXBsOlE9ZmV0Y2gsdGltZW91dE1zOlo9MzAwMH09e30pe2xldCBLO3RyeXtLPWF3YWl0IFEoJCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe2J1bmRsZUlkOkp9KSxzaWduYWw6QWJvcnRTaWduYWwudGltZW91dChaKX0pfWNhdGNoKFkpe3JldHVybiBZPy5uYW1lPT09IlRpbWVvdXRFcnJvciI/InVua25vd24iOiJub3Qtc2VudCJ9aWYoIUsub2spcmV0dXJuIm5vdC1zZW50Ijt0cnl7cmV0dXJuKGF3YWl0IEsuanNvbigpKS5zZW50PT09ITA/InNlbnQiOiJub3Qtc2VudCJ9Y2F0Y2h7cmV0dXJuIm5vdC1zZW50In19ZnVuY3Rpb24gVzgoJCl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoJCkmJiQ+PTIyNCYmJDw9MjMxfXZhciBBWD0yMSxPWD1uZXcgU2V0KFsyMjcsMjMxXSk7ZnVuY3Rpb24gYjQoJCl7cmV0dXJuICQuY29kZT09PSJLZXlSIiYmJC5tZXRhS2V5JiYhJC5jdHJsS2V5JiYhJC5hbHRLZXkmJiEkLnNoaWZ0S2V5fXZhciBNWD1uZXcgU2V0KFsiVGFiIiwiRW50ZXIiLCJOdW1wYWRFbnRlciIsIlNwYWNlIl0pO2Z1bmN0aW9uIHk0KCQpe3JldHVybiBNWC5oYXMoJCl9ZnVuY3Rpb24gUDgoJCl7bGV0IEo9JDtyZXR1cm4gdHlwZW9mIEo/LmNsb3Nlc3Q9PT0iZnVuY3Rpb24iJiZKLmNsb3Nlc3QoImlucHV0LCBzZWxlY3QsIHRleHRhcmVhIikhPW51bGx9dmFyIFdYPSJidXR0b24sIGFbaHJlZl0sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBzdW1tYXJ5LCBbdGFiaW5kZXhdLCBbY29udGVudGVkaXRhYmxlXSI7ZnVuY3Rpb24gUzQoJCl7bGV0IEo9JDtyZXR1cm4gdHlwZW9mIEo/LmNsb3Nlc3Q9PT0iZnVuY3Rpb24iJiZKLmNsb3Nlc3QoV1gpIT1udWxsfWZ1bmN0aW9uIHg0KCQpe2xldCBKPSQuYWN0aXZlRWxlbWVudDtpZihKJiZKIT09JC5ib2R5JiZ0eXBlb2YgSi5ibHVyPT09ImZ1bmN0aW9uIilKLmJsdXIoKX1mdW5jdGlvbiBSNCgpe2xldCAkPW5ldyBTZXQsSj1uZXcgU2V0LFE9KCk9PntsZXQgWj1bLi4uJF0ubWFwKChLKT0+KHt0eXBlOiJ1cCIsdXNhZ2U6S30pKTtyZXR1cm4gJC5jbGVhcigpLEouY2xlYXIoKSxafTtyZXR1cm57aGVsZDokLGZvcndhcmQoWixLKXtpZihKLmRlbGV0ZShLKSxaPT09ImRvd24iKXJldHVybiAkLmFkZChLKSxbe3R5cGU6Wix1c2FnZTpLfV07aWYoISQuaGFzKEspKXJldHVybltdOyQuZGVsZXRlKEspO2xldCBZPVtdO2lmKE9YLmhhcyhLKSlmb3IobGV0IHEgb2ZbLi4uJF0pe2lmKFc4KHEpKWNvbnRpbnVlOyQuZGVsZXRlKHEpLFkucHVzaCh7dHlwZToidXAiLHVzYWdlOnF9KX1yZXR1cm4gWS5wdXNoKHt0eXBlOlosdXNhZ2U6S30pLFl9LHJlbGVhc2VBbGw6USxyZWxvYWRFdmVudHMoKXtsZXQgWj1RKCk7Zm9yKGxldCBLIG9mIFopaWYoVzgoSy51c2FnZSkpSi5hZGQoSy51c2FnZSk7cmV0dXJue3JlbGVhc2U6Wix0YXA6QVh9fSxyZXN0b3JlRXZlbnRzKCl7bGV0IFo9Wy4uLkpdLmZpbHRlcigoSyk9PiEkLmhhcyhLKSkubWFwKChLKT0+KHt0eXBlOiJkb3duIix1c2FnZTpLfSkpO2ZvcihsZXQgSyBvZiBaKSQuYWRkKEsudXNhZ2UpO3JldHVybiBKLmNsZWFyKCksWn19fXZhciBfOD0zMjAsajQ9NzYwLEQ4PTMwMDt2YXIgUFg9bmV3IFNldChbIjAiLCJvZmYiLCJmYWxzZSIsImhpZGUiLCJiYXJlIl0pLF9YPW5ldyBTZXQoWyIxIiwib24iLCJ0cnVlIiwic2hvdyJdKTtmdW5jdGlvbiBEWCgkKXtpZigkPT1udWxsKXJldHVybiBudWxsO2xldCBRPSh0eXBlb2YgJD09PSJzdHJpbmciP25ldyBVUkxTZWFyY2hQYXJhbXMoJC5zdGFydHNXaXRoKCI/Iik/JC5zbGljZSgxKTokKTokKS5nZXQoImNocm9tZSIpO2lmKFE9PW51bGwpcmV0dXJuIG51bGw7bGV0IFo9US50cmltKCkudG9Mb3dlckNhc2UoKTtpZihQWC5oYXMoWikpcmV0dXJuITA7aWYoX1guaGFzKFopKXJldHVybiExO3JldHVybiBudWxsfWZ1bmN0aW9uIHY0KHtzZWFyY2g6JCxzdG9yYWdlOkp9PXt9KXtsZXQgUT1EWCgkKTtpZihRIT1udWxsKXJldHVybiBRO3RyeXtyZXR1cm4gSj8uZ2V0SXRlbSgic2VydmUtc2ltOmNocm9tZSIpPT09ImhpZGRlbiJ9Y2F0Y2h7cmV0dXJuITF9fWZ1bmN0aW9uIGc0KCQse3N0b3JhZ2U6Sixsb2NhdGlvbjpRLHJlcGxhY2VTdGF0ZTpafT17fSl7dHJ5e0o/LnNldEl0ZW0oInNlcnZlLXNpbTpjaHJvbWUiLCQ/ImhpZGRlbiI6InNob3duIil9Y2F0Y2h7fWlmKCFRfHwhWilyZXR1cm47dHJ5e2xldCBLPW5ldyBVUkwoUS5ocmVmKSxZPUsuc2VhcmNoO2lmKCQpSy5zZWFyY2hQYXJhbXMuc2V0KCJjaHJvbWUiLCIwIik7ZWxzZSBLLnNlYXJjaFBhcmFtcy5kZWxldGUoImNocm9tZSIpO2lmKEsuc2VhcmNoPT09WSlyZXR1cm47WihgJHtLLnBhdGhuYW1lfSR7Sy5zZWFyY2h9JHtLLmhhc2h9YCl9Y2F0Y2h7fX1mdW5jdGlvbiBoNCh7aGFzQ2hyb21lOiQsaXNMYW5kc2NhcGU6SixoaWRlQ2hyb21lOlF9KXtyZXR1cm4gJCYmIUomJiFRfWZ1bmN0aW9uIGY0KHtoYXNDaHJvbWU6JCxpc0xhbmRzY2FwZTpKfSl7cmV0dXJuICQmJiFKfWZ1bmN0aW9uIFQ4KCQsSil7aWYoISQpcmV0dXJuIG51bGw7aWYoISQuZGV2aWNlKXJldHVybiAkO2lmKCEkLnByb3h5SGVscGVycylyZXR1cm4gJDtsZXQgWj1gJHskLmJhc2VQYXRoPT09Ii8iPyIiOigkLmJhc2VQYXRoPz8iIikucmVwbGFjZSgvXC8rJC8sIiIpfS9oZWxwZXIvJHtlbmNvZGVVUklDb21wb25lbnQoJC5kZXZpY2UpfWAsSz1gJHtKLnByb3RvY29sfS8vJHtKLmhvc3R9YCxZPUoucHJvdG9jb2w9PT0iaHR0cHM6Ij8id3NzOiI6IndzOiI7cmV0dXJuey4uLiQsdXJsOmAke0t9JHtafWAsc3RyZWFtVXJsOmAke0t9JHtafS9zdHJlYW0ubWpwZWdgLHdzVXJsOmAke1l9Ly8ke0ouaG9zdH0ke1p9L3dzYH19ZnVuY3Rpb24gSTgoJCl7aWYoJD8uaW5jbHVkZXMoImRldnRvb2xzIikpcmV0dXJuImRldnRvb2xzIjtpZigkPy5pbmNsdWRlcygidG9vbHMiKSlyZXR1cm4idG9vbHMiO3JldHVybiBudWxsfWZ1bmN0aW9uIFRYKCQsSil7bGV0IFE9JC5pbmNsdWRlcygiPyIpPyImIjoiPyI7cmV0dXJuYCR7JH0ke1F9ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KEopfWB9YXN5bmMgZnVuY3Rpb24gbTQoJCxKLFE9e30pe2xldCBLPWF3YWl0KFEuZmV0Y2hJbXBsPz9mZXRjaCkoVFgoJCxKKSx7Y2FjaGU6Im5vLXN0b3JlIixzaWduYWw6US5zaWduYWx9KTtpZighSy5vaylyZXR1cm4gbnVsbDtsZXQgWT1lMChhd2FpdCBLLmpzb24oKSk7cmV0dXJuIFk/LmRldmljZT09PUo/WTpudWxsfWZ1bmN0aW9uIHA0KCQsSixRKXtsZXQgWj0hMDtyZXR1cm4gJC5vbm1lc3NhZ2U9KEspPT57aWYoIVopcmV0dXJuO3RyeXtsZXQgWT1lMChKU09OLnBhcnNlKEsuZGF0YSkpO2lmKFkmJkomJlkuZGV2aWNlIT09SilyZXR1cm47UShZKX1jYXRjaHt9fSwoKT0+e1o9ITEsJC5jbG9zZSgpfX1mdW5jdGlvbiB1NCgkLEope2xldCBRPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShKKSksWj1uZXcgVWludDhBcnJheSgxK1EubGVuZ3RoKTtyZXR1cm4gWlswXT0kLFouc2V0KFEsMSksWn1mdW5jdGlvbiBJWCgkLEosUT0zMil7bGV0IFo9Wy4uLiQsSl07cmV0dXJuIFoubGVuZ3RoPlE/Wi5zbGljZShaLmxlbmd0aC1RKTpafWZ1bmN0aW9uIEU4KCQsSixRPURhdGUubm93KCksWj0xNTAwKXtsZXQgSz1KLmZpbHRlcigoWSk9PlEtWS5jcmVhdGVkQXQ8PVopO2lmKCEkfHwkLnJlYWR5U3RhdGUhPT0xKXJldHVybiBLO2ZvcihsZXQgWSBvZiBLKSQuc2VuZCh1NChZLnRhZyxZLnBheWxvYWQpLmJ1ZmZlcik7cmV0dXJuW119ZnVuY3Rpb24gbDQoJCxKLFEsWixLPURhdGUubm93KCkpe2xldCBZPUU4KCQsSixLKTtpZigkPy5yZWFkeVN0YXRlPT09MSlyZXR1cm4gJC5zZW5kKHU0KFEsWikuYnVmZmVyKSxZO3JldHVybiBJWChZLHt0YWc6USxwYXlsb2FkOlosY3JlYXRlZEF0Okt9KX1mdW5jdGlvbiBkNCgkKXtyZXR1cm4gJD9gJHskLmRldmljZX06JHskLnBpZH06JHskLnN0cmVhbVVybH06JHskLndzVXJsfWA6IiJ9ZnVuY3Rpb24gRVgoKXtsZXQgJD13aW5kb3cuX19TSU1fUFJFVklFV19fPy5pbml0aWFsU3RhdGUsSj1JOCgkPy5wYW5lcyksW1EsWl09QSgoKT0+VDgoZTAod2luZG93Ll9fU0lNX1BSRVZJRVdfXyksd2luZG93LmxvY2F0aW9uKSksW0ssWV09QSghMSksW3EsVl09QSgoKT0+e2xldCBwPWUwKHdpbmRvdy5fX1NJTV9QUkVWSUVXX18pO2lmKHApcmV0dXJuIHAuZGV2aWNlO3JldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgiZGV2aWNlIil9KSxbRyxCXT1BKCExKSxbTix6XT1BKEo9PT0iZGV2dG9vbHMiKSxbVSxIXT1BKCgpPT57aWYoJD8ucGFuZXMpcmV0dXJuICQucGFuZXMuaW5jbHVkZXMoImRldmljZXMiKTtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4hMTtyZXR1cm4gd2luZG93LmlubmVyV2lkdGg+PUQ4KzUyMH0pLHt3aWR0aDpGLG9uUG9pbnRlckRvd246TH09ejMoInNlcnZlLXNpbTpkZXZpY2Utc2lkZWJhci13aWR0aCIsRDgsMjQwLDY0MCwicmlnaHQiKSxbayxDXT1BKG51bGwpLE89d2luZG93Ll9fU0lNX1BSRVZJRVdfXyx5PU8/LmdyaWRBcGlFbmRwb2ludD8/YjEoImdyaWQvYXBpIiksRT1PPy5ncmlkU3RhcnRFbmRwb2ludD8/YjEoImdyaWQvYXBpL3N0YXJ0Iiksdz1PPy5ncmlkU2h1dGRvd25FbmRwb2ludD8/YjEoImdyaWQvYXBpL3NodXRkb3duIiksW1MsUTFdPUEoe30pLFtnLGhdPUEoe30pLFtJLHVdPUEoe30pLFtaMSxyXT1BKCgpPT5uZXcgU2V0KSxNMT1PYmplY3QudmFsdWVzKFMpLnNvbWUoQm9vbGVhbil8fE9iamVjdC52YWx1ZXMoZykuc29tZShCb29sZWFuKSx7ZGV2aWNlczpKMSx0b3RhbDppLHJlZnJlc2g6Zixsb2FkTW9yZTpVMSxsb2FkQWxsOlgxLHJlc2V0UGFnZTpCMSxoYXNNb3JlOkYxfT1QNCh5LCEwLE0xKSxXMT0hIShxJiZKMT8uZmluZCgocCk9PnAuZGV2aWNlPT09cSk/LmhlbHBlciksbz1QKChwKT0+e1YocCk7dHJ5e2xldCBlPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO2Uuc2VhcmNoUGFyYW1zLnNldCgiZGV2aWNlIixwKSx3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwiIixlLnRvU3RyaW5nKCkpfWNhdGNoe319LFtdKSxjPVAoYXN5bmMocCxlPTIwMDAwKT0+e2xldCBrMT1EYXRlLm5vdygpK2U7d2hpbGUoRGF0ZS5ub3coKTxrMSl7dHJ5e2lmKCgoYXdhaXQoYXdhaXQgZmV0Y2goeSx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCkpLmRldmljZXM/P1tdKS5zb21lKChwMSk9PnAxLmRldmljZT09PXAmJnAxLmhlbHBlcikpcmV0dXJuITB9Y2F0Y2h7fWF3YWl0IG5ldyBQcm9taXNlKChQMSk9PnNldFRpbWVvdXQoUDEsNDAwKSl9cmV0dXJuITF9LFt5XSksZD1QKGFzeW5jKHApPT57UTEoKGUpPT4oey4uLmUsW3BdOiEwfSkpLHUoKGUpPT4oey4uLmUsW3BdOm51bGx9KSk7dHJ5e2xldCBlPWF3YWl0IGZldGNoKEUse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHt1ZGlkOnB9KX0pLGsxPWF3YWl0IGUuanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZighZS5va3x8IWsxLm9rKXt1KChQMSk9Pih7Li4uUDEsW3BdOmsxLmVycm9yPz9gSFRUUCAke2Uuc3RhdHVzfWB9KSk7cmV0dXJufXIoKFAxKT0+UDEuaGFzKHApP1AxOm5ldyBTZXQoUDEpLmFkZChwKSksYXdhaXQgYyhwKX1jYXRjaChlKXt1KChrMSk9Pih7Li4uazEsW3BdOmU/Lm1lc3NhZ2U/PyJSZXF1ZXN0IGZhaWxlZCJ9KSl9ZmluYWxseXtRMSgoZSk9Pih7Li4uZSxbcF06ITF9KSksZigpfX0sW0UsYyxmXSksbj1QKGFzeW5jKHApPT57aCgoZSk9Pih7Li4uZSxbcF06ITB9KSksdSgoZSk9Pih7Li4uZSxbcF06bnVsbH0pKTt0cnl7bGV0IGU9YXdhaXQgZmV0Y2godyx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3VkaWQ6cH0pfSksazE9YXdhaXQgZS5qc29uKCkuY2F0Y2goKCk9Pih7fSkpO2lmKCFlLm9rfHwhazEub2spdSgoUDEpPT4oey4uLlAxLFtwXTprMS5lcnJvcj8/YEhUVFAgJHtlLnN0YXR1c31gfSkpfWNhdGNoKGUpe3UoKGsxKT0+KHsuLi5rMSxbcF06ZT8ubWVzc2FnZT8/IlJlcXVlc3QgZmFpbGVkIn0pKX1maW5hbGx5e2goKGUpPT4oey4uLmUsW3BdOiExfSkpLGYoKX19LFt3LGZdKTtfKCgpPT57aWYocSlyZXR1cm47aWYoUT8uZGV2aWNlKXtWKFEuZGV2aWNlKTtyZXR1cm59aWYoIUoxfHxKMS5sZW5ndGg9PT0wKXJldHVybjtsZXQgcD1KMS5maW5kKChlKT0+ZS5oZWxwZXIpPz9KMS5maW5kKChlKT0+ZS5zdGF0ZT09PSJCb290ZWQiKT8/SjFbMF07aWYocClWKHAuZGV2aWNlKX0sW3EsUT8uZGV2aWNlLEoxXSk7bGV0IFkxPVAoKHApPT57WigoZSk9PntpZihwPVQ4KGUwKHApLHdpbmRvdy5sb2NhdGlvbiksZDQoZSk9PT1kNChwKSlyZXR1cm4gZTtpZihwKXdpbmRvdy5fX1NJTV9QUkVWSUVXX189cDtlbHNlIGlmKHdpbmRvdy5fX1NJTV9QUkVWSUVXX18pe2xldHtiYXNlUGF0aDprMSxhbGxvd0V4ZWM6UDF9PXdpbmRvdy5fX1NJTV9QUkVWSUVXX187d2luZG93Ll9fU0lNX1BSRVZJRVdfXz17YmFzZVBhdGg6azEsYWxsb3dFeGVjOlAxfX1yZXR1cm4gcH0pfSxbXSk7XygoKT0+e2xldCBwPWAke2IxKCJhcGkvZXZlbnRzIil9JHtxP2A/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHEpfWA6IiJ9YCxlPUo1KHApO3JldHVybiBwNChlLHEsWTEpfSxbcSxXMSxZMV0pLF8oKCk9PntpZighcXx8IVcxfHxRPy5kZXZpY2U9PT1xKXJldHVybjtsZXQgcD1uZXcgQWJvcnRDb250cm9sbGVyLGU9ITEsazE9bnVsbCxQMT03NTAsZzE9YXN5bmMoKT0+e3RyeXtsZXQgcDE9YXdhaXQgbTQoYjEoImFwaSIpLHEse3NpZ25hbDpwLnNpZ25hbH0pO2lmKCFlJiZwMSl7WTEocDEpO3JldHVybn19Y2F0Y2h7fWlmKCFlKWsxPXNldFRpbWVvdXQoZzEsUDEpLFAxPU1hdGgubWluKFAxKjIsNTAwMCl9O3JldHVybiBnMSgpLCgpPT57aWYoZT0hMCxwLmFib3J0KCksazEpY2xlYXJUaW1lb3V0KGsxKX19LFtxLFcxLFE/LmRldmljZSxZMV0pO2xldCBiPXE/P1E/LmRldmljZT8/bnVsbCxqPUoxPy5maW5kKChwKT0+cC5kZXZpY2U9PT1iKT8/bnVsbCxOMT0hIVEmJlEuZGV2aWNlPT09YixDMTtpZihOMSYmUSlDMT1YKHdYLHtjb25maWc6USxkZXZpY2VOYW1lOmo/Lm5hbWU/P251bGwsZGV2aWNlUnVudGltZTpqPy5ydW50aW1lPz9udWxsLGNocm9tZTpqPy5jaHJvbWU/P251bGwsZGlzcGxheXM6aj8uZGlzcGxheXM/P251bGwscHJlZmVyTWpwZWc6WjEuaGFzKFEuZGV2aWNlKSxheE92ZXJsYXlFbmFibGVkOkcsc2V0QXhPdmVybGF5RW5hYmxlZDpCLGRldnRvb2xzT3BlbjpOLHNldERldnRvb2xzT3Blbjp6LGdyaWRPcGVuOlUsc2V0R3JpZE9wZW46SCxncmlkUGFuZWxXaWR0aDpGLHNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDprLHNldFNlbGVjdGVkRGV2dG9vbHNUYXJnZXRJZDpDLHN0cmVhbWluZzpLLHNldFN0cmVhbWluZzpZfSk7ZWxzZXtsZXQgcD1VPzEyK0YrMjQ6MjQ7QzE9WCgiZGl2Iix7Y2xhc3NOYW1lOiJoLXNjcmVlbiBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMyBiZy1wYWdlIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIgW3RyYW5zaXRpb246cGFkZGluZ18wLjI1c19lYXNlXSIsc3R5bGU6e3BhZGRpbmdMZWZ0OnAscGFkZGluZ1JpZ2h0OjI0fSxjaGlsZHJlbjpqP1goaDYse25hbWU6ai5uYW1lLHJ1bnRpbWU6ai5ydW50aW1lLGNocm9tZTpqLmNocm9tZT8/bnVsbCxwbGFjZWhvbGRlckFzc2V0OmoucGxhY2Vob2xkZXJBc3NldD8/bnVsbCxidXN5OiEhai5oZWxwZXJ8fCEhU1tqLmRldmljZV0sYnVzeUxhYmVsOmouaGVscGVyPyJDb25uZWN0aW5n4oCmIjoiU3RhcnRpbmfigKYiLGVycm9yOklbai5kZXZpY2VdPz9udWxsLG9uU3RhcnQ6KCk9PmQoai5kZXZpY2UpfSk6WCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMyB0ZXh0LWNlbnRlciIsY2hpbGRyZW46W1goImgxIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxOHB4XSBtLTAgdGV4dC1pbmstOTAiLGNoaWxkcmVuOiJObyBzaW11bGF0b3JzIGF2YWlsYWJsZSJ9KSxYKCJwIix7Y2xhc3NOYW1lOiJ0ZXh0LWluay01NSB0ZXh0LVsxNHB4XSBtYXgtdy0xMjAiLGNoaWxkcmVuOlsiQ3JlYXRlIGEgc2ltdWxhdG9yIGluIFhjb2RlLCBvciBzdGFydCBvbmUgd2l0aCIsIiAiLFgoImNvZGUiLHtjbGFzc05hbWU6ImJnLWluay8xMCBweC0xLjUgcHktMC41IHJvdW5kZWQgdGV4dC1bMTNweF0iLGNoaWxkcmVuOiJidW54IHNlcnZlLXNpbSAtLWRldGFjaCJ9KSwiLiJdfSldfSl9KX1yZXR1cm4gWChLMSx7Y2hpbGRyZW46W0MxLFgoRDcse30pLFgocjYse29wZW46VSxvbkNsb3NlOigpPT5IKCExKSx3aWR0aDpGLHNpZGU6ImxlZnQiLGRldmljZXM6SjEsdG90YWw6aSxoYXNNb3JlOkYxLG9uTG9hZE1vcmU6VTEsb25Mb2FkQWxsOlgxLG9uUmVzZXRQYWdlOkIxLHNlbGVjdGVkVWRpZDpiLG9uU2VsZWN0Om8sc3RhcnRpbmc6UyxzaHV0dGluZ0Rvd246ZyxvblNodXRkb3duOm59KSxYKFozLHtwYW5lbFdpZHRoOkYsdmlzaWJsZTpVLG9uUG9pbnRlckRvd246TCxhcmlhTGFiZWw6IlJlc2l6ZSBzaW11bGF0b3JzIHNpZGViYXIiLHNpZGU6ImxlZnQifSksWChTNix7b3BlbjpVLG9uQ2xpY2s6KCk9PkgoITApfSldfSl9ZnVuY3Rpb24gd1goe2NvbmZpZzokLGRldmljZU5hbWU6SixkZXZpY2VSdW50aW1lOlEsY2hyb21lOlosZGlzcGxheXM6SyxwcmVmZXJNanBlZzpZLGF4T3ZlcmxheUVuYWJsZWQ6cSxzZXRBeE92ZXJsYXlFbmFibGVkOlYsZGV2dG9vbHNPcGVuOkcsc2V0RGV2dG9vbHNPcGVuOkIsZ3JpZE9wZW46TixzZXRHcmlkT3Blbjp6LGdyaWRQYW5lbFdpZHRoOlUsc2VsZWN0ZWREZXZ0b29sc1RhcmdldElkOkgsc2V0U2VsZWN0ZWREZXZ0b29sc1RhcmdldElkOkYsc3RyZWFtaW5nOkwsc2V0U3RyZWFtaW5nOmt9KXtsZXQgQz0kLmluaXRpYWxTdGF0ZSxPPUk4KEM/LnBhbmVzKTtfKCgpPT57ZG9jdW1lbnQudGl0bGU9Sj9gU2ltdWxhdG9yIC0gJHtKfWA6IlNpbXVsYXRvciBQcmV2aWV3In0sW0pdKTtsZXQgeT1FMChKKSxFPVc0KCQuZGV2dG9vbHNFbmRwb2ludD8/YjEoImRldnRvb2xzIiksRyk7XygoKT0+e2lmKCFHKXJldHVybjtpZihIJiZFLnRhcmdldHMuc29tZSgoeCk9PnguaWQ9PT1IKSlyZXR1cm47RihFLnRhcmdldHMubGVuZ3RoPT09MT9FLnRhcmdldHNbMF0uaWQ6bnVsbCl9LFtHLEUudGFyZ2V0cyxILEZdKSxfKCgpPT57RihudWxsKX0sWyQuZGV2aWNlLEZdKTtsZXQgdz1CNCgpLFtTLFExXT1uMChUNCxNOCksW2ddPUEoKCk9Pm5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCJjb2RlYyIpPT09Im1qcGVnIiksW2gsSV09QSgoKT0+d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKEY4KT09PSJtanBlZyI/Im1qcGVnIjoiYXV0byIpO18oKCk9Pnt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oRjgsaCl9LFtoXSk7bGV0W3UsWjFdPUEoKCk9PnY0KHtzZWFyY2g6d2luZG93LmxvY2F0aW9uLnNlYXJjaCxzdG9yYWdlOndpbmRvdy5sb2NhbFN0b3JhZ2V9KSk7XygoKT0+e2c0KHUse3N0b3JhZ2U6d2luZG93LmxvY2FsU3RvcmFnZSxsb2NhdGlvbjp3aW5kb3cubG9jYXRpb24scmVwbGFjZVN0YXRlOih4KT0+d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIiIseCl9KX0sW3VdKTtsZXQgcj0oSz8ubGVuZ3RoPz8wKT4xLEoxPSQuY29kZWMhPT0ibWpwZWciJiZ3LnN1cHBvcnRlZCYmIVMuZmVsbEJhY2smJiFZJiYhZyYmaCE9PSJtanBlZyIsaT15MihyfHxKMT9udWxsOiQuc3RyZWFtVXJsKSxbZixVMV09QShudWxsKSxYMT1yP2Y6SjE/bnVsbDppLmVycm9yO18oKCk9PntrKCExKSxVMShudWxsKSxRMSgicmVzZXQiKX0sWyQuc3RyZWFtVXJsLGtdKSxfKCgpPT57aWYoSjEmJkwpUTEoImZyYW1lIil9LFtKMSxMXSksXygoKT0+e2lmKCFKMSlyZXR1cm47bGV0IHg9c2V0VGltZW91dCgoKT0+UTEoInRpbWVvdXQiKSxJNCk7cmV0dXJuKCk9PmNsZWFyVGltZW91dCh4KX0sW0oxLCQuc3RyZWFtVXJsXSk7bGV0W0IxLEYxXT1BKG51bGwpLFtXMSxvXT1BKG51bGwpLFtjLGRdPUEobnVsbCksbj1jLFkxPVcxPz9uPz9VNSh5LEopLGI9XzQoSyxZMS53aWR0aCxZMS5oZWlnaHQpLGo9Yj8uY2hyb21lPz9aLE4xPWgyKHksWTEpLEMxPUw1KHksWTEpLHA9ZzIoWTEpLGU9ejUoWTEpLGsxPWU/ZS53aWR0aC9lLmhlaWdodDoxLFAxPWwwKFkxKSxnMT0hciYmaDQoe2hhc0Nocm9tZTohIWosaXNMYW5kc2NhcGU6UDEsaGlkZUNocm9tZTp1fSkscDE9IXImJmY0KHtoYXNDaHJvbWU6ISFqLGlzTGFuZHNjYXBlOlAxfSksajE9ZzE/ai5mcmFtZS53aWR0aC9qLnNjcmVlbi53aWR0aDoxLGExPUIxJiZCMS53aWR0aD4wJiZCMS5oZWlnaHQ+MD9CMS53aWR0aC9CMS5oZWlnaHQ6MS4xMTExMTExMTExMTExMTEyLGswPXI/TWF0aC5tYXgoQzEsQjE/LndpZHRoPz8wKTpDMSpqMSxWMD1yP2ExOmcxP2ouZnJhbWUud2lkdGgvai5mcmFtZS5oZWlnaHQ6azEsRDE9cj9TdHJpbmcoYTEpOmcxP2Ake2ouZnJhbWUud2lkdGh9IC8gJHtqLmZyYW1lLmhlaWdodH1gOnAsdTE9VChudWxsKSxDMD1UKFtdKTtfKCgpPT57bGV0IHg9ITEsJDE9bnVsbCxtMT1udWxsO0MwLmN1cnJlbnQ9W107bGV0IHM9KCk9PntpZih4fHwkMSlyZXR1cm47JDE9c2V0VGltZW91dCgoKT0+eyQxPW51bGwscjEoKX0sMTAwMCl9LHIxPSgpPT57bGV0IFUwPW5ldyBXZWJTb2NrZXQoJC53c1VybCk7VTAuYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLG0xPVUwLHUxLmN1cnJlbnQ9VTAsVTAub25vcGVuPSgpPT57QzAuY3VycmVudD1FOChVMCxDMC5jdXJyZW50KX0sVTAub25tZXNzYWdlPShGMik9PntpZighKEYyLmRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuO2xldCBvMD1uZXcgVWludDhBcnJheShGMi5kYXRhKTtpZihvMFswXT09PTEzMSl7dHJ5e0YxKEpTT04ucGFyc2UobmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG8wLnN1YmFycmF5KDEpKSkpfWNhdGNoe31yZXR1cm59aWYobzBbMF09PT0xNCl7dHJ5e2lmKEpTT04ucGFyc2UobmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG8wLnN1YmFycmF5KDEpKSkub2s9PT0hMSlzMShudWxsKSxIMC5lcnJvcigiQ291bGQgbm90IGNoYW5nZSB0aGUgc2ltdWxhdG9yIGZvbGQgcG9zZS4iKX1jYXRjaHt9cmV0dXJufWlmKG8wLmxlbmd0aDwxfHxvMFswXSE9PTEzMClyZXR1cm47dHJ5e2xldCB4MD1KU09OLnBhcnNlKG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShvMC5zdWJhcnJheSgxKSkpO2lmKHgwLndpZHRoPD0wfHx4MC5oZWlnaHQ8PTApcmV0dXJuO2QoKHIwKT0+cjAmJnIwLndpZHRoPT09eDAud2lkdGgmJnIwLmhlaWdodD09PXgwLmhlaWdodCYmcjAub3JpZW50YXRpb249PT14MC5vcmllbnRhdGlvbiYmcjAuaGluZ2VEZWdyZWVzPT09eDAuaGluZ2VEZWdyZWVzJiZyMC5kdW9WaWV3T3JpZW50YXRpb249PT14MC5kdW9WaWV3T3JpZW50YXRpb24/cjA6eDApfWNhdGNoe319LFUwLm9uY2xvc2U9KCk9PntpZih1MS5jdXJyZW50PT09VTApdTEuY3VycmVudD1udWxsO3MoKX0sVTAub25lcnJvcj0oKT0+e1UwLmNsb3NlKCl9fTtyZXR1cm4gcjEoKSwoKT0+e2lmKHg9ITAsJDEpY2xlYXJUaW1lb3V0KCQxKTtpZih1MS5jdXJyZW50PT09bTEpdTEuY3VycmVudD1udWxsO20xPy5jbG9zZSgpfX0sWyQud3NVcmxdKTtsZXQgVjE9UCgoeCwkMSk9PntDMC5jdXJyZW50PWw0KHUxLmN1cnJlbnQsQzAuY3VycmVudCx4LCQxKX0sW10pLFowPVAoKHgpPT5WMSgzLHgpLFtWMV0pLGIwPVAoKHgpPT5WMSg1LHgpLFtWMV0pLGgxPVAoKHgpPT5WMSg0LHtidXR0b246eH0pLFtWMV0pLFtjMSxzMV09QShudWxsKSxlMT1UKG51bGwpLHQxPVQobnVsbCkseTA9UCgoeCk9PntpZihzMSh4PT09bj8uaGluZ2VEZWdyZWVzP251bGw6eCksdDEuY3VycmVudD14LGUxLmN1cnJlbnQpcmV0dXJuO2UxLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e2UxLmN1cnJlbnQ9bnVsbCxWMSgxNCx7aGluZ2U6dDEuY3VycmVudH0pfSw1MCl9LFtWMSxuPy5oaW5nZURlZ3JlZXNdKSx2MD1QKCh4KT0+e2lmKGUxLmN1cnJlbnQpY2xlYXJUaW1lb3V0KGUxLmN1cnJlbnQpO2UxLmN1cnJlbnQ9bnVsbCxzMShudWxsKSxWMSgxNCx7cG9zZTp4fSl9LFtWMV0pO18oKCk9PigpPT57aWYoZTEuY3VycmVudCljbGVhclRpbWVvdXQoZTEuY3VycmVudCl9LFtdKSxfKCgpPT57aWYobj8uaGluZ2VEZWdyZWVzIT1udWxsKXMxKCh4KT0+eCE9bnVsbCYmTWF0aC5hYnMoeC1uLmhpbmdlRGVncmVlcyk8MC42P251bGw6eCl9LFtuPy5oaW5nZURlZ3JlZXNdKTtsZXQgUzA9YzE/P24/LmhpbmdlRGVncmVlcz8/KGI/LnJvbGU9PT0iaW5uZXIiPzE4MDowKSwkMD1QKCh7cGhhc2U6eCxidXR0b246JDF9KT0+e2lmKCQxLnVzYWdlUGFnZT09bnVsbHx8JDEudXNhZ2U9PW51bGwpcmV0dXJuO1YxKDQse2J1dHRvbjokMS5uYW1lLHBhZ2U6JDEudXNhZ2VQYWdlLHVzYWdlOiQxLnVzYWdlLHBoYXNlOnh9KX0sW1YxXSksRTE9UCgoeCwkMSk9PntWMSg0LHtidXR0b246eC5uYW1lLHBhZ2U6eC5wYWdlLHVzYWdlOngudXNhZ2UscGhhc2U6JDF9KX0sW1YxXSksRzA9UCgoeCk9PlYxKDEwLHtkZWx0YTp4fSksW1YxXSksZjE9UCgoeCk9PlYxKDExLHgpLFtWMV0pLEIwPVAoKHgpPT57bygoJDEpPT4kMSYmJDEud2lkdGg9PT14LndpZHRoJiYkMS5oZWlnaHQ9PT14LmhlaWdodCYmJDEub3JpZW50YXRpb249PT14Lm9yaWVudGF0aW9uPyQxOngpfSxbXSksRjA9UCgoeCk9PntWMSg3LHtvcmllbnRhdGlvbjp4fSl9LFtWMV0pLFEwPVkxLmR1b1ZpZXdPcmllbnRhdGlvbj8/WTEub3JpZW50YXRpb24/PyJwb3J0cmFpdCIsQTA9eSE9PSJ3YXRjaCImJnkhPT0idmlzaW9uIixXPVAoKHgpPT57aWYoIUEwKXJldHVybjtsZXQgJDE9KHg9PT0ibGVmdCI/SzI6UjMpW1EwXTtGMCgkMSl9LFtBMCxRMCxGMF0pO18oKCk9PntvKG51bGwpLGQobnVsbCksRjEobnVsbCksczEobnVsbCl9LFskLnN0cmVhbVVybF0pLF8oKCk9PntsZXQgeD1uO2lmKCF4KXJldHVybjtvKCgkMSk9PiQxJiYkMS53aWR0aD09PXgud2lkdGgmJiQxLmhlaWdodD09PXguaGVpZ2h0JiYkMS5vcmllbnRhdGlvbj09PXgub3JpZW50YXRpb24/JDE6bnVsbCl9LFtuLG4/LndpZHRoLG4/LmhlaWdodCxuPy5vcmllbnRhdGlvbl0pO2xldCBtPVAoKHgsJDEpPT57VjEoNix7dHlwZTp4LHVzYWdlOiQxfSl9LFtWMV0pLFthLEgxXT1BKG51bGwpLFtBMSx6MV09QSgoKT0+e2lmKEM/LnBhbmVzKXJldHVybiBPPT09InRvb2xzIjtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4hMTtsZXQgeD1OdW1iZXIod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJzZXJ2ZS1zaW06dG9vbHMtcGFuZWwtd2lkdGgiKSksJDE9TnVtYmVyLmlzRmluaXRlKHgpJiZ4PjA/eDpfODtyZXR1cm4gd2luZG93LmlubmVyV2lkdGg+PSQxKzQ4MH0pLHt3aWR0aDpPMSxvblBvaW50ZXJEb3duOlgwfT16Mygic2VydmUtc2ltOnRvb2xzLXBhbmVsLXdpZHRoIixfOCwyNDAsNzIwKSx7d2lkdGg6aTEsb25Qb2ludGVyRG93bjpvMX09ejMoInNlcnZlLXNpbTpkZXZ0b29scy1wYW5lbC13aWR0aCIsajQsNDIwLDE0MDApLFt6MCxOMF09QSgoKT0+dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmlubmVyV2lkdGg6MCksW0QsTV09QSgoKT0+dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmlubmVySGVpZ2h0OjApO18oKCk9PntsZXQgeD0oKT0+e04wKHdpbmRvdy5pbm5lcldpZHRoKSxNKHdpbmRvdy5pbm5lckhlaWdodCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix4KSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIseCl9LFtdKSxfKCgpPT57bGV0IHg9SjUoJC5hcHBTdGF0ZUVuZHBvaW50Pz9iMSgiYXBwc3RhdGUiKSksJDE9bnVsbDtyZXR1cm4geC5vbm1lc3NhZ2U9KG0xKT0+e3RyeXtsZXQgcz1KU09OLnBhcnNlKG0xLmRhdGEpO2lmKCQxKWNsZWFyVGltZW91dCgkMSk7bGV0IHIxPXM/LmlzUmVhY3ROYXRpdmU/MDo2MDA7JDE9c2V0VGltZW91dCgoKT0+SDEocykscjEpfWNhdGNoe319LCgpPT57aWYoJDEpY2xlYXJUaW1lb3V0KCQxKTt4LmNsb3NlKCl9fSxbJC5hcHBTdGF0ZUVuZHBvaW50XSk7bGV0W1JdPUEoUjQpLGw9VChhKTtfKCgpPT57bC5jdXJyZW50PWF9LFthXSk7bGV0IEcxPSQucmVsb2FkRW5kcG9pbnQ/P2Ake2IxKCJyZWxvYWQiKX0/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQuZGV2aWNlKX1gLEwxPVAoYXN5bmMoKT0+e2xldCB4PWwuY3VycmVudD8uYnVuZGxlSWQ7aWYoeCYmYXdhaXQgdzQoRzEseCkhPT0ibm90LXNlbnQiKXJldHVybjtsZXR7cmVsZWFzZTokMSx0YXA6bTF9PVIucmVsb2FkRXZlbnRzKCk7Zm9yKGxldCBzIG9mICQxKW0ocy50eXBlLHMudXNhZ2UpO20oImRvd24iLG0xKSxhd2FpdCBuZXcgUHJvbWlzZSgocyk9PnNldFRpbWVvdXQocywzMCkpLG0oInVwIixtMSk7Zm9yKGxldCBzIG9mIFIucmVzdG9yZUV2ZW50cygpKW0ocy50eXBlLHMudXNhZ2UpfSxbbSxSLEcxXSksXzE9VChudWxsKSx3MT1UKG51bGwpLFtKMCxLNV09QSgwKSxbUDAsdzVdPUEoMCk7XygoKT0+e2xldCB4PV8xLmN1cnJlbnQ7aWYoIXh8fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCAkMT1uZXcgUmVzaXplT2JzZXJ2ZXIoKG0xKT0+e2xldCBzPW0xWzBdPy5jb250ZW50UmVjdDtLNShzPy53aWR0aD8/MCksdzUocz8uaGVpZ2h0Pz8wKX0pO3JldHVybiAkMS5vYnNlcnZlKHgpLCgpPT4kMS5kaXNjb25uZWN0KCl9LFtdKTtsZXRbWTUsaTBdPUEoITApLHc4PVQoITApO3c4LmN1cnJlbnQ9WTUsXygoKT0+e2xldCB4PSgkMSk9PntsZXQgbTE9JDEudGFyZ2V0LHM9ISFfMS5jdXJyZW50Py5jb250YWlucyhtMSk7aWYocyl4NChkb2N1bWVudCk7bGV0IHIxPXN8fCEhdzEuY3VycmVudD8uY29udGFpbnMobTEpJiYhUDgobTEpO2kwKHIxKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIix4LCEwKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHgsITApfSxbXSksXygoKT0+e2lmKFk1KXJldHVybjtmb3IobGV0IHggb2YgUi5yZWxlYXNlQWxsKCkpVjEoNix4KX0sW1k1LFYxLFJdKSxfKCgpPT57bGV0IHg9KCk9Pntmb3IobGV0ICQxIG9mIFIucmVsZWFzZUFsbCgpKVYxKDYsJDEpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHgpLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIseCl9LFtWMSxSXSksXygoKT0+e2xldCB4PShzLHIxKT0+e2lmKCF3OC5jdXJyZW50KXJldHVybjtpZihQOChzLnRhcmdldCkpcmV0dXJuO2lmKHk0KHMuY29kZSkmJlM0KHMudGFyZ2V0KSlyZXR1cm47aWYocy5jb2RlPT09IktleUgiJiZzLm1ldGFLZXkmJnMuc2hpZnRLZXkpe2lmKHMucHJldmVudERlZmF1bHQoKSxyMT09PSJkb3duIiYmIXMucmVwZWF0KVYxKDQse2J1dHRvbjoiaG9tZSJ9KTtyZXR1cm59aWYoKHMuY29kZT09PSJBcnJvd0xlZnQifHxzLmNvZGU9PT0iQXJyb3dSaWdodCIpJiZzLm1ldGFLZXkmJiFzLnNoaWZ0S2V5JiYhcy5hbHRLZXkmJiFzLmN0cmxLZXkpe2lmKHMucHJldmVudERlZmF1bHQoKSxyMT09PSJkb3duIiYmIXMucmVwZWF0KVcocy5jb2RlPT09IkFycm93TGVmdCI/ImxlZnQiOiJyaWdodCIpO3JldHVybn1pZihzLmNvZGU9PT0iS2V5QSImJnMubWV0YUtleSYmcy5zaGlmdEtleSl7aWYocy5wcmV2ZW50RGVmYXVsdCgpLHIxPT09ImRvd24iJiYhcy5yZXBlYXQpeDEoInRvZ2dsZUFwcGVhcmFuY2UiLHt1ZGlkOiQuZGV2aWNlfSkuY2F0Y2goKCk9Pnt9KTtyZXR1cm59aWYocy5jb2RlPT09IktleUsiJiZzLm1ldGFLZXkmJiFzLnNoaWZ0S2V5JiYhcy5hbHRLZXkmJiFzLmN0cmxLZXkpe2lmKHMucHJldmVudERlZmF1bHQoKSxyMT09PSJkb3duIiYmIXMucmVwZWF0KVYxKDEyLHt9KTtyZXR1cm59aWYoYjQocykmJmwuY3VycmVudD8uaXNSZWFjdE5hdGl2ZSl7aWYocy5wcmV2ZW50RGVmYXVsdCgpLHIxPT09ImRvd24iJiYhcy5yZXBlYXQpTDEoKTtyZXR1cm59bGV0IFUwPUU0KHMuY29kZSk7aWYoVTA9PW51bGwpcmV0dXJuO3MucHJldmVudERlZmF1bHQoKTtmb3IobGV0IEYyIG9mIFIuZm9yd2FyZChyMSxVMCkpVjEoNixGMil9LCQxPShzKT0+eChzLCJkb3duIiksbTE9KHMpPT54KHMsInVwIik7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwkMSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixtMSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsJDEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsbTEpfX0sW1YxLCQuZGV2aWNlLFcsTDEsUl0pO2xldCBiNT1NNCgpLGI4PUw0KCQuZGV2aWNlLEQ0KGI/LnJvbGU/P0IxPy5wYW5lbCkpLHk4PUM0KCQuZGV2aWNlKSxTOD1HNCh7aG9zdDp4MSx1ZGlkOiQuZGV2aWNlLGVuYWJsZWQ6TCxvblVwbG9hZFN0YXJ0OmI1LmFkZCxvblVwbG9hZFByb2dyZXNzOmI1LnNldFByb2dyZXNzLG9uVXBsb2FkRW5kOih4LCQxLG0xKT0+YjUudXBkYXRlKHgse3N0YXR1czokMT8ic3VjY2VzcyI6ImVycm9yIixtZXNzYWdlOm0xfSksb25VbnN1cHBvcnRlZDooeCk9PntsZXQgJDE9YjUuYWRkKHgubmFtZSwibWVkaWEiKTtiNS51cGRhdGUoJDEse3N0YXR1czoiZXJyb3IiLG1lc3NhZ2U6YFVuc3VwcG9ydGVkOiAke3gudHlwZXx8RTUoeCl9YH0pfSxvbkhvc3RQYXRoRHJvcDpiOC5kaXNtaXNzfSksTzA9TzQoe2RlZmF1bHRXaWR0aDprMCx2aWV3cG9ydFdpZHRoOnowLHZpZXdwb3J0SGVpZ2h0OkQsYXNwZWN0UmF0aW86VjAsaW5pdGlhbEZpdDpyfHxDPy5maXQ9PT0hMCxvblN0YXJ0OigpPT5pMCghMSl9KSxMMz1HP2kxOkExP08xOjAsZzA9cj9fNShrMCxNYXRoLm1heCgyNDAsejAtKE4/VTowKS1MMy05NiksRCxWMCk6TzAud2lkdGgsYzQ9MTIseDg9MjQsaTQ9SjA+MD9NYXRoLm1pbihKMCxnMCk6ZzAsUjg9KHgpPT57aWYoeDw9MClyZXR1cm4gMDtsZXQgJDE9ejAtYzQteCxzPXowLzIraTQvMi0oJDEteDgpO2lmKHM8PTApcmV0dXJuIDA7bGV0IHIxPTIqcztyZXR1cm4gcjE8PXgreDg/cjE6MH0sbzQ9cj9MMzpSOChMMykscjQ9cj9OP1U6MDpSOChOP1U6MCk7cmV0dXJuIFgoYjYse2VuZHBvaW50OnE/JD8uYXhFbmRwb2ludDp2b2lkIDAsY2hpbGRyZW46WCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBoLXNjcmVlbiBiZy1wYWdlIHB5LTYgZ2FwLTMgZm9udC1zeXN0ZW0gYm94LWJvcmRlciIsc3R5bGU6e3BhZGRpbmdMZWZ0OjI0K3I0LHBhZGRpbmdSaWdodDoyNCtvNCx0cmFuc2l0aW9uOk8wLmlzUmVzaXppbmd8fE8wLmlzSW5lcnRpYT8ibm9uZSI6czZ9LGNoaWxkcmVuOltYKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0zIG1pbi13LTAiLHN0eWxlOnt3aWR0aDpnMCx0cmFuc2l0aW9uOks4KE8wKX0sY2hpbGRyZW46W1goSTEse2V4ZWM6bjIsb25Sb3RhdGU6RjAsb3JpZW50YXRpb246UTAsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOkosZGV2aWNlUnVudGltZTpRLHN0cmVhbWluZzpMLCJhcmlhLWxhYmVsIjoiU2ltdWxhdG9yIHN0YXR1cyIsc3R5bGU6e2FsaWduU2VsZjoiY2VudGVyIix3aWR0aDoiYXV0byIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsZmxleFdyYXA6Im5vd3JhcCIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsZ2FwOjEwLHBhZGRpbmc6IjZweCAxMHB4Iixib3JkZXJSYWRpdXM6MTh9LGNoaWxkcmVuOltYKEkxLlRpdGxlLHtvbkNsaWNrOigpPT56KCh4KT0+IXgpLCJhcmlhLWxhYmVsIjoiVG9nZ2xlIHNpbXVsYXRvcnMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6Tix0aXRsZToiU2ltdWxhdG9ycyIsaGlkZVN1YnRpdGxlOiEwLGhpZGVDaGV2cm9uOiEwLHN0eWxlOnttYXhXaWR0aDoibWluKDIzMHB4LCBjYWxjKDEwMHZ3IC0gMTcwcHgpKSJ9fSksWChFNyx7c3RyZWFtaW5nOkwsZXJyb3I6WDF9KV19KSxYKCJkaXYiLHtyZWY6XzEsY2xhc3NOYW1lOiJyZWxhdGl2ZSBtYXgtaC1mdWxsIHNlbGVjdC1ub25lIiwiZGF0YS1kZXZpY2UtY2hyb21lIjpnMT8ib24iOiJvZmYiLHN0eWxlOnt3aWR0aDpnMCxhc3BlY3RSYXRpbzpEMSx0cmFuc2l0aW9uOks4KE8wKSx3aWxsQ2hhbmdlOk8wLmlzUmVzaXppbmd8fE8wLmlzSW5lcnRpYT8id2lkdGgiOnZvaWQgMH0sLi4uUzguZHJvcFpvbmVQcm9wcyxjaGlsZHJlbjpbKCgpPT57aWYocilyZXR1cm4gWChRNix7dXJsOiQuc3RyZWFtVXJsLnJlcGxhY2UoInN0cmVhbS5tanBlZyIsInN0cmVhbS4zZC5tanBlZyIpLHByb2plY3Rpb246QjEsc2NyZWVuQ29uZmlnOlkxLG9uU3RyZWFtaW5nQ2hhbmdlOmssb25TdHJlYW1FcnJvcjpVMSxvbkhhcmR3YXJlUHJlc3M6RTEsb25Ub3VjaDpaMCxvbk11bHRpVG91Y2g6YjAsb25FcnJvcjooKT0+SDAuZXJyb3IoIkRldmljZSByZW5kZXJpbmcgaXMgdW5hdmFpbGFibGUuIENoZWNrIHRoZSBzZWxlY3RlZCBYY29kZSBhbmQgc2VydmVyIGxvZy4iKSxjaGlsZHJlbjpxJiZCMSYmWChKOCx7cHJvamVjdGlvbjpCMSxzY3JlZW5Db25maWc6WTF9KX0pO2xldCB4PVgodjIse3VybDokLnVybCx3c1VybDokLndzVXJsLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixib3JkZXI6Im5vbmUiLHBvaW50ZXJFdmVudHM6TzAuaXNSZXNpemluZ3x8TzAuaXNJbmVydGlhPyJub25lIjp2b2lkIDB9LGltYWdlU3R5bGU6e2JvcmRlclJhZGl1czpnMT8wOk4xLGNvcm5lclNoYXBlOmcxP3ZvaWQgMDoic3VwZXJlbGxpcHNlKDEuMykiLC4uLmcxP3t9Ontib3hTaGFkb3c6Imluc2V0IDAgMCAwIDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikifX0saGlkZUNvbnRyb2xzOiEwLG9uU3RyZWFtaW5nQ2hhbmdlOmssb25TdHJlYW1Ub3VjaDpaMCxvblN0cmVhbU11bHRpVG91Y2g6YjAsb25TdHJlYW1CdXR0b246aDEsb25TdHJlYW1EaWdpdGFsQ3Jvd246RzAsb25TdHJlYW1TY3JvbGw6ZjEsY29kZWM6SjE/ImF2Y2MiOiJtanBlZyIsb25BdmNjRXJyb3I6KCk9PlExKCJlcnJvciIpLHN1YnNjcmliZUZyYW1lOkoxP3ZvaWQgMDppLnN1YnNjcmliZUZyYW1lLHN0cmVhbUZyYW1lOkoxP3ZvaWQgMDppLmZyYW1lLHN0cmVhbUNvbmZpZzpZMSxlbmFibGVEaWdpdGFsQ3Jvd246eT09PSJ3YXRjaCIsb25TY3JlZW5Db25maWdDaGFuZ2U6QjB9KSwkMT1YKEsxLHtjaGlsZHJlbjpbeCxxJiZYKEo4LHt9KV19KTtpZighcDEpcmV0dXJuICQxO3JldHVybiBYKEozLHtjaHJvbWU6aixmcmFtZWQ6ZzEsaW50ZXJhY3RpdmU6ZzEsb25CdXR0b246JDAsb25Dcm93bldoZWVsOihtMSxzKT0+e2xldCByMT1WMihtMSxzLFAwfHwxKTtpZihyMSE9bnVsbClHMChyMSl9LHNjcmVlbjokMX0pfSkoKSxTOC5pc0RyYWdPdmVyJiZYKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgYm9yZGVyLTIgYm9yZGVyLWRhc2hlZCBib3JkZXItWyNhNWI0ZmNdIGJnLVtyZ2JhKDk5LDEwMiwyNDEsMC4xOCldIHRleHQtWyNhNWI0ZmNdIHBvaW50ZXItZXZlbnRzLW5vbmUgei0yMCIsc3R5bGU6e2JvcmRlclJhZGl1czpnMT92b2lkIDA6TjF9LGNoaWxkcmVuOltYKFEyLHtzaXplOjMyLHN0cm9rZVdpZHRoOjEuNX0pLFgoInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtbWVkaXVtIixjaGlsZHJlbjoiRHJvcCBtZWRpYSBvciAuaXBhIn0pXX0pLCFyJiZYKEsxLHtjaGlsZHJlbjpbWChPNyx7c2ltdWxhdG9yUmVzaXplOk8wLGRldmljZVR5cGU6eSxzdHJlYW1Db25maWc6WTEsY29udGFpbmVyV2lkdGg6SjB8fGcwLGNvbnRhaW5lckhlaWdodDpQMHx8KFYwPjA/ZzAvVjA6MCl9KSxYKEk3LHt3aWR0aDpKMHx8ZzAsaGVpZ2h0OlAwfHwoVjA+MD9nMC9WMDowKSx2aXNpYmxlOk8wLmlzUmVzaXppbmd8fE8wLmlzSW5lcnRpYX0pXX0pXX0pLFgoImRpdiIse3JlZjp3MSxjbGFzc05hbWU6YGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiAke3I/IiI6Im1heC13LWZ1bGwifWAsY2hpbGRyZW46W1goSTEse2V4ZWM6bjIsb25Sb3RhdGU6RjAsb3JpZW50YXRpb246UTAsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOkosZGV2aWNlUnVudGltZTpRLHN0cmVhbWluZzpMLCJhcmlhLWxhYmVsIjoiU2ltdWxhdG9yIGFjdGlvbnMiLHN0eWxlOnthbGlnblNlbGY6ImNlbnRlciIsbWluV2lkdGg6MCxqdXN0aWZ5Q29udGVudDoiY2VudGVyIixwYWRkaW5nOiI2cHggOHB4Iixib3JkZXJSYWRpdXM6MTgsLi4ucj97ZmxleFdyYXA6Im5vd3JhcCIsd2lkdGg6Im1heC1jb250ZW50IixtYXhXaWR0aDoibm9uZSJ9Ont3aWR0aDoiYXV0byIsbWF4V2lkdGg6IjEwMCUifX0sY2hpbGRyZW46WChJMS5BY3Rpb25zLHtjaGlsZHJlbjpbYT8uaXNSZWFjdE5hdGl2ZSYmWChJMS5CdXR0b24seyJhcmlhLWxhYmVsIjoiUmVsb2FkIFJlYWN0IE5hdGl2ZSBidW5kbGUiLHRpdGxlOiJSZWxvYWQgKFIsIOKMmFIpIixvbkNsaWNrOigpPT52b2lkIEwxKCksY2hpbGRyZW46WCgkNSx7fSl9KSxYKEkxLkhvbWVCdXR0b24se3RpdGxlOiJIb21lIixvbkNsaWNrOih4KT0+e3gucHJldmVudERlZmF1bHQoKSx4MSgiaG9tZSIse3VkaWQ6JC5kZXZpY2Usd2F0Y2g6eT09PSJ3YXRjaCJ9KX19KSxYKEkxLlNjcmVlbnNob3RCdXR0b24se3RpdGxlOiJTY3JlZW5zaG90IixvbkNsaWNrOih4KT0+e3gucHJldmVudERlZmF1bHQoKSxiOC5jYXB0dXJlKCl9fSksWChGNCx7c3RhdGU6eTguc3RhdGUsb25Ub2dnbGU6eTgudG9nZ2xlfSksWChJMS5Sb3RhdGVCdXR0b24se3RpdGxlOiJSb3RhdGUgZGV2aWNlIn0pLCFyJiYhIWomJlgoeTYse2hpZGVDaHJvbWU6dSxvblRvZ2dsZTooKT0+WjEoKHgpPT4heCl9KSxyJiZYKEsxLHtjaGlsZHJlbjpbWChROCx7b3ZlcmxheUVuYWJsZWQ6cSxzdHJlYW1pbmc6TCxvblRvZ2dsZU92ZXJsYXk6KCk9PlYoKHgpPT4heCl9KSxYKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6Im14LTEgaC00IHctcHggc2hyaW5rLTAgYmctaW5rLzE1In0pLFgoSzYse29yaWVudGF0aW9uOlEwLGFuZ2xlOlMwLG9uQ2hhbmdlOnkwLG9uUG9zZTp2MH0pXX0pXX0pfSksIXImJlgoSTEse2V4ZWM6bjIsb25Sb3RhdGU6RjAsb3JpZW50YXRpb246UTAsZGV2aWNlVWRpZDokLmRldmljZSxkZXZpY2VOYW1lOkosZGV2aWNlUnVudGltZTpRLHN0cmVhbWluZzpMLCJhcmlhLWxhYmVsIjoiQWNjZXNzaWJpbGl0eSBvdmVybGF5IixzdHlsZTp7d2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIscGFkZGluZzo2LGJvcmRlclJhZGl1czoyMn0sY2hpbGRyZW46WChROCx7b3ZlcmxheUVuYWJsZWQ6cSxzdHJlYW1pbmc6TCxvblRvZ2dsZU92ZXJsYXk6KCk9PlYoKHgpPT4heCl9KX0pXX0pXX0pLFgoImRpdiIse2NsYXNzTmFtZTpgZml4ZWQgdG9wLTMgcmlnaHQtMyBmbGV4IGZsZXgtY29sIGdhcC0xIHAtMSBiZy1wYW5lbC1iZyBib3JkZXIgYm9yZGVyLWluay84IHJvdW5kZWQtWzEwcHhdIGJhY2tkcm9wLWJsdXItWzEycHhdIFstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpibHVyKDEycHgpXSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMThzX2Vhc2VdIHotNDAgJHtBMXx8Rz8ib3BhY2l0eS0wIHBvaW50ZXItZXZlbnRzLW5vbmUiOiJvcGFjaXR5LTEwMCBwb2ludGVyLWV2ZW50cy1hdXRvIn1gLGNoaWxkcmVuOltYKCJidXR0b24iLHtvbkNsaWNrOigpPT57QighMSksejEoKHgpPT4heCl9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LWljb24gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLWluay84IGhvdmVyOnRleHQtaW5rIiwiYXJpYS1sYWJlbCI6Ik9wZW4gdG9vbHMgcGFuZWwiLCJhcmlhLXByZXNzZWQiOkExLHRpdGxlOiJUb29scyIsY2hpbGRyZW46WChzNSx7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KSxYKCJidXR0b24iLHtvbkNsaWNrOigpPT57ejEoITEpLEIoKHgpPT4heCl9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LWljb24gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLWluay84IGhvdmVyOnRleHQtaW5rIiwiYXJpYS1sYWJlbCI6Ik9wZW4gV2ViS2l0IERldlRvb2xzIiwiYXJpYS1wcmVzc2VkIjpHLHRpdGxlOiJXZWJLaXQgRGV2VG9vbHMiLGNoaWxkcmVuOlgoaTUse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSldfSksWChRNCx7b3BlbjpBMSxvbkNsb3NlOigpPT56MSghMSksdWRpZDokLmRldmljZSxkZXZpY2VSdW50aW1lOlEsY3VycmVudEFwcDphLGV2ZW50TG9nRXZlbnRzRW5kcG9pbnQ6JC5ldmVudExvZ0V2ZW50c0VuZHBvaW50LGF4T3ZlcmxheUVuYWJsZWQ6cSxvblRvZ2dsZUF4T3ZlcmxheTooKT0+VigoeCk9PiF4KSxjb2RlY1ByZWZlcmVuY2U6aCxvbkNvZGVjUHJlZmVyZW5jZUNoYW5nZTpJLGFjdGl2ZUNvZGVjOkoxPyJoMjY0IjoibWpwZWciLGF2Y2NTdXBwb3J0ZWQ6dy5zdXBwb3J0ZWQsY2hyb21lQXZhaWxhYmxlOiEhaiYmIXIsaGlkZUNocm9tZTp1LG9uSGlkZUNocm9tZUNoYW5nZTpaMSx3aWR0aDpPMX0pLFgoWjMse3BhbmVsV2lkdGg6TzEsdmlzaWJsZTpBMSxvblBvaW50ZXJEb3duOlgwLGFyaWFMYWJlbDoiUmVzaXplIHRvb2xzIHBhbmVsIn0pLFgoVjQse29wZW46RyxvbkNsb3NlOigpPT5CKCExKSx1ZGlkOiQuZGV2aWNlLHRhcmdldHM6RS50YXJnZXRzLHNlbGVjdGVkVGFyZ2V0SWQ6SCxvblNlbGVjdFRhcmdldDpGLGxvYWRpbmc6RS5sb2FkaW5nLGVycm9yOkUuZXJyb3Isb25SZWZyZXNoOigpPT52b2lkIEUucmVmcmVzaCgpLHdpZHRoOmkxfSksWChaMyx7cGFuZWxXaWR0aDppMSx2aXNpYmxlOkcsb25Qb2ludGVyRG93bjpvMSxhcmlhTGFiZWw6IlJlc2l6ZSBXZWJLaXQgRGV2VG9vbHMgcGFuZWwifSldfSl9KX1NNihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicm9vdCIpKS5yZW5kZXIoWChFWCx7fSkpOwo8L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=","base64").toString("utf-8");return l$}async function gY($,Q=D5){return V8(await Q(),$)}function D5(){return new Promise(($)=>{n0("xcrun",o(["list","devices","-j"]),{encoding:"utf-8",timeout:3000},(Q,Z)=>{if(Q)return $([]);try{let J=JSON.parse(Z),Y=[];for(let[X,K]of Object.entries(J.devices)){if(!/SimRuntime\.(iOS|watchOS|visionOS|xrOS)-/i.test(X))continue;for(let V of K){if(V.isAvailable===!1)continue;Y.push({...V,runtime:X.replace(/^.*SimRuntime\./,"")})}}$(Y)}catch{$([])}})})}var uY=1610612736;function mY(){try{let $=Number(w6("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Q=Number(w6("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),Z=w6("vm_stat",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}),J=(X)=>{let K=Z.match(X);return K?Number(K[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 lY(){try{let $=w6("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(`
|
|
110
|
+
`)){let X=Y.trimStart();if(!X)continue;let K=J.exec(X);if(!K)continue;let V=Number(X.split(/\s+/,1)[0]);if(!Number.isFinite(V))continue;let G=V*1024,z=K[1].toUpperCase();Q[z]=(Q[z]??0)+G,Z+=G}return{perUdid:Q,totalBytes:Z}}catch{return{perUdid:{},totalBytes:0}}}function pY(){let{totalBytes:$,availableBytes:Q}=mY(),Z=lY(),J=Object.keys(Z.perUdid).length,Y=J>0?Z.totalBytes/J:0,X=Y>=268435456?"measured":"estimated",K=X==="measured"?Y:uY,V=K>0?Math.max(0,Math.floor(Q/K)):0;return{totalBytes:$,availableBytes:Q,runningSimulators:J,perSimAvgBytes:K,perSimSource:X,estimatedAdditional:V}}function cY($,Q){let Z=Buffer.from($),J=Buffer.from(Q);if(Z.length!==J.length)return!1;return VY(Z,J)}var dY={401:"Unauthorized",403:"Forbidden"};function nY($,Q){$.writeHead(Q.status,{"Content-Type":"application/json","Cache-Control":"no-store",...Q.status===401?{"WWW-Authenticate":'Bearer realm="serve-sim"'}:{}}),$.end(JSON.stringify({error:Q.status===401?"unauthorized":"forbidden",message:Q.message}))}function L5($,Q,Z){try{$.end(`HTTP/1.1 ${Q} ${dY[Q]??"Error"}\r
|
|
111
111
|
Content-Type: text/plain; charset=utf-8\r
|
|
112
112
|
Connection: close\r
|
|
113
113
|
\r
|
|
114
|
-
`+Z)}catch{$.destroy()}}function nY($){if(!$)return!1;return $.split(";",1)[0].trim().toLowerCase()==="application/json"}function wG($){let Q=($?.basePath??"/.sim").replace(/\/+$/,""),Z=LY(Q),J=OY(Q),Y=$?.proxyHelpers??!0,X=$?.inspectWebKitBridge??SY,K=$?.execToken??WY(32).toString("base64url"),z=$?.allowExec===!0,G=j8($?.authToken),V=DY($?.diagnostics),W=$?.serveSimBin??bY();D0();let H=(P)=>Q===""||P===Q||P.startsWith(Q+"/"),N=(P)=>P===Q||P===Q+"/",j=`${Q}/auth`,O=x4(j),T=10,q=60000,A=1024,R=new Map,_=(P,M)=>{let f=(R.get(P)??[]).filter((v)=>M-v<q);if(f.length===0)R.delete(P);else R.set(P,f);return f},D=(P,M)=>{let f=R.get(P);if(f){f.push(M);return}if(R.size>=A){for(let[v,n]of R)if(!n.some((S)=>M-S<q))R.delete(v);if(R.size>=A)R.delete(R.keys().next().value)}R.set(P,[M])},E=(P,M)=>{let f=(Z0,V0,r={})=>{M.writeHead(Z0,{"Content-Type":"application/json","Cache-Control":"no-store",...r}),M.end(JSON.stringify({error:V0}))};if((P.method??"GET").toUpperCase()!=="POST")return f(405,"method_not_allowed",{Allow:"POST"});if(Q6(P)!=="same")return f(403,"cross_origin_request_blocked");if(!G)return f(403,"remote_access_disabled");let v=Date.now(),n=n9(P)??"unknown";if(_(n,v).length>=T)return f(429,"too_many_attempts",{"Retry-After":String(Math.ceil(q/1000))});let S=String(P.headers[M8]??"").trim();if(!S||!a6(S,G))return D(n,v),f(401,"unauthorized");let Y0=String(P.headers["x-forwarded-proto"]??"").split(",")[0].trim()==="https"||P.socket.encrypted===!0;M.writeHead(204,{"Set-Cookie":`${d9}=${o9(G)}; Path=${Q===""?"/":Q}; HttpOnly; SameSite=Lax`+(Y0?"; Secure":""),"Cache-Control":"no-store"}),M.end()},F=(P)=>{P.writeHead(401,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store","Content-Security-Policy":O.csp,"Referrer-Policy":"no-referrer","WWW-Authenticate":'Bearer realm="serve-sim"'}),P.end(O.html)},B=I4({serveSimBin:W,allowExec:z,isKnownDevice:$?.isKnownDevice??(async(P)=>(await _5())?.has(P)??!1),onCommandResult:(P,M)=>v$(P,M)}),U=async(P)=>{let M=P??{};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 L4(M.device)};if(!u0[M.option])throw Error(`unknown option: ${M.option}`);let f=typeof M.value==="string"?j4(M.option,M.value):null;if(f===null)throw Error(`invalid value for ${M.option}: ${M.value}`);await K9(M.device,M.option,f);try{_0({device:M.device,source:"ui",kind:"ui-setting",action:M.option,status:"ok",summary:`UI ${M.option} ${f}`,details:{option:M.option,value:f}})}catch{}return{ok:!0}},C=async(P,M,f)=>{let v=P.url??"",n=v.indexOf("?"),S=n===-1?v:v.slice(0,n),s=g$(v),Y0=U5(v),Z0=Y0??$?.device??null,V0=Q==="/"?"/devtools-frontend":`${Q}/devtools-frontend`,r=I0(P);if(H(s)){if(s===j){E(P,M);return}if(!r){let k=a9(P,G);if(!k.ok){let b=(P.method??"GET").toUpperCase();if(k.status===401&&(b==="GET"||b==="HEAD")&&N(s))F(M);else dY(M,k);return}}let u=(P.method??"GET").toUpperCase();if(u!=="GET"&&u!=="HEAD"&&Q6(P)==="cross"){M.writeHead(403,{"Content-Type":"application/json"}),M.end(JSON.stringify({error:"cross_origin_request_blocked"}));return}}let f0=j5(v,Z);if(f0&&H(s)){let u=f0.device??Z0;if(qY(P,M,u,f0.upstreamPath))return;M.writeHead(404,{"Content-Type":"text/plain; charset=utf-8"}),M.end("No serve-sim device");return}if(H(s)&&(s===V0||s.startsWith(`${V0}/`))){let u=s===V0?"inspector.html":s.slice(V0.length+1);if(u.split("/").some((k)=>{let b;try{b=decodeURIComponent(k)}catch{return!0}return b==="."||b===".."||/[\\/]/.test(b)})){M.writeHead(400,{"Content-Type":"text/plain; charset=utf-8"}),M.end("Invalid asset path");return}try{let k=await fetch(`https://chrome-devtools-frontend.appspot.com/serve_rev/@${VY}/${u}${n===-1?"":v.slice(n)}`),b={"Cache-Control":"public, max-age=604800"},l=k.headers.get("content-type");if(l)b["Content-Type"]=l;M.writeHead(k.status,b),M.end(Buffer.from(await k.arrayBuffer()))}catch(k){M.writeHead(502,{"Content-Type":"text/plain; charset=utf-8"}),M.end(k instanceof Error?k.message:"Failed to load DevTools frontend")}return}if(S===Q||S===Q+"/"){let u=await y0(),k=c0(u,Z0),b=vY();if(!k){let l=JSON.stringify({basePath:Q,...z&&r?{allowExec:!0}:{},...$?.initialState?{initialState:$.initialState}:{}});b=b.replace("<!--__SIM_PREVIEW_CONFIG__-->",`<script>window.__SIM_PREVIEW__=${l}</script>`)}if(k){let l=M9(k,I6(P),Q,U9(P),Y),$0=`<script>window.__SIM_PREVIEW__=${JSON.stringify(u$(l,Q,r?W:"",z&&r,$?.codec,Y,$?.initialState))}</script>`;b=b.replace("<!--__SIM_PREVIEW_CONFIG__-->",$0)}M.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store"}),M.end(b);return}if(S===Q+"/grid/api/memory"){M.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),M.end(JSON.stringify(lY()));return}if(S===Q+"/grid/api/devicekit-chrome"){e8(new URL(v||"/","http://serve-sim.local"),M);return}if(S===Q+"/grid/api/device-placeholder-asset"){$4(new URL(v||"/","http://serve-sim.local"),M);return}if(S===Q+"/grid/api"){let u=await y0(),k=new Map(u.map((p)=>[p.device,p])),b=await q5(),l=jY(),c=(p)=>{if(/iphone/i.test(p))return 0;if(/ipad/i.test(p))return 1;if(/watch/i.test(p))return 2;if(/(apple\s*tv|^tv\b)/i.test(p))return 3;if(/vision|reality/i.test(p))return 4;return 5},$0=(p)=>{if(k.has(p.udid))return 0;if(Z0&&p.udid===Z0)return 1;if(p.state==="Booted")return 2;if(p.udid===l)return 3;return 4},Q0=(p)=>{let H0=p.match(/-(\d+)-(\d+)/),L=H0?Number(H0[1]):0,w=H0?Number(H0[2]):0;return-(L*1000+w)};b.sort((p,H0)=>$0(p)-$0(H0)||c(p.name)-c(H0.name)||p.name.localeCompare(H0.name)||Q0(p.runtime)-Q0(H0.runtime));let t=b.length,{limit:d,offset:X0}=CY(v),C0=(d==null?b:b.slice(X0,X0+d)).map((p)=>{let H0=k.get(p.udid),L=H0?M9(H0,I6(P),Q,U9(P),Y):null,w=H$(p);return{device:p.udid,name:p.name,runtime:p.runtime,state:p.state,chrome:t8(p),displays:w.length>1?w:void 0,placeholderAsset:s8(p),helper:L?{port:L.port,url:L.url,streamUrl:L.streamUrl,wsUrl:L.wsUrl}:null}});M.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),M.end(JSON.stringify({devices:C0,total:t,offset:d==null?0:X0,limit:d??t}));return}if(S===Q+"/grid/api/shutdown"&&P.method==="POST"){let u="";P.on("data",(k)=>{u+=typeof k==="string"?k:k.toString()}),P.on("end",()=>{let k="";try{k=JSON.parse(u).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(k)){M.writeHead(400,{"Content-Type":"application/json"}),M.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}p9(k),x6={at:0,booted:null},n0("xcrun",a(["shutdown",k]),{timeout:30000},(b,l,c)=>{if(b){M.writeHead(500,{"Content-Type":"application/json"}),M.end(JSON.stringify({ok:!1,error:c?.toString().trim()||b.message}));return}M.writeHead(200,{"Content-Type":"application/json"}),M.end(JSON.stringify({ok:!0}))})});return}if(S===Q+"/grid/api/start"&&P.method==="POST"){let u="";P.on("data",(k)=>{u+=typeof k==="string"?k:k.toString()}),P.on("end",()=>{let k="";try{k=JSON.parse(u).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(k)){M.writeHead(400,{"Content-Type":"application/json"}),M.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}let b=P.socket.localPort??0;EY(k,b,Q,{authTokenSha256:S8(G),allowExec:z}).then((l)=>{if(M.writableEnded)return;if(l)M.writeHead(500,{"Content-Type":"application/json"}),M.end(JSON.stringify({ok:!1,error:l}));else M.writeHead(200,{"Content-Type":"application/json"}),M.end(JSON.stringify({ok:!0}))})});return}if(S===Q+"/devtools"){let u=await y0();if(!c0(u,Z0)){M.writeHead(404,{"Content-Type":"application/json"}),M.end(JSON.stringify({error:"No serve-sim device"}));return}try{let b=await X(),l=await b.listTargets(),c=Y?yY(P):"ws",$0=Y?`${I6(P)??`127.0.0.1:${b.port}`}${J}`:`127.0.0.1:${b.port}/devtools`,Q0=l.map((t)=>({...t,webSocketDebuggerUrl:`${c}://${$0}/page/${encodeURIComponent(t.id)}`,devtoolsFrontendUrl:fY(V0,c,$0,t.id)}));M.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),M.end(JSON.stringify({port:b.port,targets:Q0}))}catch(b){M.writeHead(500,{"Content-Type":"application/json"}),M.end(JSON.stringify({error:b instanceof Error?b.message:"Failed to start inspect-webkit"}))}return}if(S===Q+"/devtools/release"&&P.method==="POST"){let u="";P.on("data",(k)=>u+=k),P.on("end",async()=>{try{let k=u?JSON.parse(u):{};(await X()).releaseHighlight?.(k.targetId),M.writeHead(200,{"Content-Type":"application/json"}),M.end("{}")}catch(k){M.writeHead(500,{"Content-Type":"application/json"}),M.end(JSON.stringify({error:k instanceof Error?k.message:"Failed to release"}))}});return}if(S===Q+"/devtools/highlight"&&P.method==="POST"){let u="";P.on("data",(k)=>u+=k),P.on("end",async()=>{try{let{targetId:k,on:b}=JSON.parse(u||"{}");if(!k){M.writeHead(400,{"Content-Type":"application/json"}),M.end(JSON.stringify({error:"Missing targetId"}));return}let l=await X();if(!l.highlightTarget){M.writeHead(501,{"Content-Type":"application/json"}),M.end(JSON.stringify({error:"highlightTarget not supported by inspect-webkit"}));return}await l.highlightTarget(k,!!b),M.writeHead(200,{"Content-Type":"application/json"}),M.end("{}")}catch(k){M.writeHead(500,{"Content-Type":"application/json"}),M.end(JSON.stringify({error:k instanceof Error?k.message:"Failed to highlight target"}))}});return}if(S===Q+"/api"){let u=await y0(),k=c0(u,Z0),b=`${Z0??"(any)"}|${u.length}|${k?`${k.device}@${k.port}`:"none"}`;if(b!==V5)V5=b,O6("GET /api selectedDevice=%s states=%d chose=%s",Z0??"(any)",u.length,k?`${k.device}@${k.port}`:"none");M.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"});let l=k?M9(k,I6(P),Q,U9(P),Y):null;M.end(JSON.stringify(l?u$(l,Q,r?W:"",z&&r,$?.codec,Y,$?.initialState):null));return}if(S===Q+"/api/diagnostics"){await V(P,M,Y0);return}if(S===Q+"/api/event-log"){M.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),M.end(JSON.stringify({events:i6({device:Y0,sinceId:B5(v),limit:H5(v)})}));return}if(S===Q+"/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(`:
|
|
114
|
+
`+Z)}catch{$.destroy()}}function iY($){if(!$)return!1;return $.split(";",1)[0].trim().toLowerCase()==="application/json"}function SG($){let Q=($?.basePath??"/.sim").replace(/\/+$/,""),Z=OY(Q),J=RY(Q),Y=$?.proxyHelpers??!0,X=$?.inspectWebKitBridge??kY,K=$?.execToken??GY(32).toString("base64url"),V=$?.allowExec===!0,G=U8($?.authToken),z=qY($?.diagnostics),W=$?.serveSimBin??vY();D0();let B=(P)=>Q===""||P===Q||P.startsWith(Q+"/"),N=(P)=>P===Q||P===Q+"/",j=`${Q}/auth`,O=I4(j),T=10,q=60000,A=1024,R=new Map,_=(P,M)=>{let f=(R.get(P)??[]).filter((v)=>M-v<q);if(f.length===0)R.delete(P);else R.set(P,f);return f},D=(P,M)=>{let f=R.get(P);if(f){f.push(M);return}if(R.size>=A){for(let[v,n]of R)if(!n.some((S)=>M-S<q))R.delete(v);if(R.size>=A)R.delete(R.keys().next().value)}R.set(P,[M])},E=(P,M)=>{let f=(Z0,V0,r={})=>{M.writeHead(Z0,{"Content-Type":"application/json","Cache-Control":"no-store",...r}),M.end(JSON.stringify({error:V0}))};if((P.method??"GET").toUpperCase()!=="POST")return f(405,"method_not_allowed",{Allow:"POST"});if(Q6(P)!=="same")return f(403,"cross_origin_request_blocked");if(!G)return f(403,"remote_access_disabled");let v=Date.now(),n=i9(P)??"unknown";if(_(n,v).length>=T)return f(429,"too_many_attempts",{"Retry-After":String(Math.ceil(q/1000))});let S=String(P.headers[F8]??"").trim();if(!S||!a6(S,G))return D(n,v),f(401,"unauthorized");let Y0=String(P.headers["x-forwarded-proto"]??"").split(",")[0].trim()==="https"||P.socket.encrypted===!0;M.writeHead(204,{"Set-Cookie":`${n9}=${a9(G)}; Path=${Q===""?"/":Q}; HttpOnly; SameSite=Lax`+(Y0?"; Secure":""),"Cache-Control":"no-store"}),M.end()},F=(P)=>{P.writeHead(401,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store","Content-Security-Policy":O.csp,"Referrer-Policy":"no-referrer","WWW-Authenticate":'Bearer realm="serve-sim"'}),P.end(O.html)},H=E4({serveSimBin:W,allowExec:V,isKnownDevice:$?.isKnownDevice??(async(P)=>(await R5())?.has(P)??!1),onCommandResult:(P,M)=>h$(P,M)}),U=async(P)=>{let M=P??{};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 C4(M.device)};if(!u0[M.option])throw Error(`unknown option: ${M.option}`);let f=typeof M.value==="string"?U4(M.option,M.value):null;if(f===null)throw Error(`invalid value for ${M.option}: ${M.value}`);await K9(M.device,M.option,f);try{_0({device:M.device,source:"ui",kind:"ui-setting",action:M.option,status:"ok",summary:`UI ${M.option} ${f}`,details:{option:M.option,value:f}})}catch{}return{ok:!0}},C=async(P,M,f)=>{let v=P.url??"",n=v.indexOf("?"),S=n===-1?v:v.slice(0,n),s=u$(v),Y0=M5(v),Z0=Y0??$?.device??null,V0=Q==="/"?"/devtools-frontend":`${Q}/devtools-frontend`,r=I0(P);if(B(s)){if(s===j){E(P,M);return}if(!r){let k=r9(P,G);if(!k.ok){let b=(P.method??"GET").toUpperCase();if(k.status===401&&(b==="GET"||b==="HEAD")&&N(s))F(M);else nY(M,k);return}}let u=(P.method??"GET").toUpperCase();if(u!=="GET"&&u!=="HEAD"&&Q6(P)==="cross"){M.writeHead(403,{"Content-Type":"application/json"}),M.end(JSON.stringify({error:"cross_origin_request_blocked"}));return}}let f0=U5(v,Z);if(f0&&B(s)){let u=f0.device??Z0;if(EY(P,M,u,f0.upstreamPath))return;M.writeHead(404,{"Content-Type":"text/plain; charset=utf-8"}),M.end("No serve-sim device");return}if(B(s)&&(s===V0||s.startsWith(`${V0}/`))){let u=s===V0?"inspector.html":s.slice(V0.length+1);if(u.split("/").some((k)=>{let b;try{b=decodeURIComponent(k)}catch{return!0}return b==="."||b===".."||/[\\/]/.test(b)})){M.writeHead(400,{"Content-Type":"text/plain; charset=utf-8"}),M.end("Invalid asset path");return}try{let k=await fetch(`https://chrome-devtools-frontend.appspot.com/serve_rev/@${zY}/${u}${n===-1?"":v.slice(n)}`),b={"Cache-Control":"public, max-age=604800"},l=k.headers.get("content-type");if(l)b["Content-Type"]=l;M.writeHead(k.status,b),M.end(Buffer.from(await k.arrayBuffer()))}catch(k){M.writeHead(502,{"Content-Type":"text/plain; charset=utf-8"}),M.end(k instanceof Error?k.message:"Failed to load DevTools frontend")}return}if(S===Q||S===Q+"/"){let u=await y0(),k=c0(u,Z0),b=hY();if(!k){let l=JSON.stringify({basePath:Q,...V&&r?{allowExec:!0}:{},...$?.initialState?{initialState:$.initialState}:{}});b=b.replace("<!--__SIM_PREVIEW_CONFIG__-->",`<script>window.__SIM_PREVIEW__=${l}</script>`)}if(k){let l=M9(k,I6(P),Q,U9(P),Y),$0=`<script>window.__SIM_PREVIEW__=${JSON.stringify(m$(l,Q,r?W:"",V&&r,$?.codec,Y,$?.initialState))}</script>`;b=b.replace("<!--__SIM_PREVIEW_CONFIG__-->",$0)}M.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store"}),M.end(b);return}if(S===Q+"/grid/api/memory"){M.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),M.end(JSON.stringify(pY()));return}if(S===Q+"/grid/api/devicekit-chrome"){s8(new URL(v||"/","http://serve-sim.local"),M);return}if(S===Q+"/grid/api/device-placeholder-asset"){e8(new URL(v||"/","http://serve-sim.local"),M);return}if(S===Q+"/grid/api"){let u=await y0(),k=new Map(u.map((p)=>[p.device,p])),b=await D5(),l=CY(),c=(p)=>{if(/iphone/i.test(p))return 0;if(/ipad/i.test(p))return 1;if(/watch/i.test(p))return 2;if(/(apple\s*tv|^tv\b)/i.test(p))return 3;if(/vision|reality/i.test(p))return 4;return 5},$0=(p)=>{if(k.has(p.udid))return 0;if(Z0&&p.udid===Z0)return 1;if(p.state==="Booted")return 2;if(p.udid===l)return 3;return 4},Q0=(p)=>{let B0=p.match(/-(\d+)-(\d+)/),L=B0?Number(B0[1]):0,w=B0?Number(B0[2]):0;return-(L*1000+w)};b.sort((p,B0)=>$0(p)-$0(B0)||c(p.name)-c(B0.name)||p.name.localeCompare(B0.name)||Q0(p.runtime)-Q0(B0.runtime));let t=b.length,{limit:d,offset:X0}=LY(v),C0=(d==null?b:b.slice(X0,X0+d)).map((p)=>{let B0=k.get(p.udid),L=B0?M9(B0,I6(P),Q,U9(P),Y):null,w=H$(p);return{device:p.udid,name:p.name,runtime:p.runtime,state:p.state,chrome:r8(p),displays:w.length>1?w:void 0,placeholderAsset:t8(p),helper:L?{port:L.port,url:L.url,streamUrl:L.streamUrl,wsUrl:L.wsUrl}:null}});M.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),M.end(JSON.stringify({devices:C0,total:t,offset:d==null?0:X0,limit:d??t}));return}if(S===Q+"/grid/api/shutdown"&&P.method==="POST"){let u="";P.on("data",(k)=>{u+=typeof k==="string"?k:k.toString()}),P.on("end",()=>{let k="";try{k=JSON.parse(u).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(k)){M.writeHead(400,{"Content-Type":"application/json"}),M.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}c9(k),x6={at:0,booted:null},n0("xcrun",o(["shutdown",k]),{timeout:30000},(b,l,c)=>{if(b){M.writeHead(500,{"Content-Type":"application/json"}),M.end(JSON.stringify({ok:!1,error:c?.toString().trim()||b.message}));return}M.writeHead(200,{"Content-Type":"application/json"}),M.end(JSON.stringify({ok:!0}))})});return}if(S===Q+"/grid/api/start"&&P.method==="POST"){let u="";P.on("data",(k)=>{u+=typeof k==="string"?k:k.toString()}),P.on("end",()=>{let k="";try{k=JSON.parse(u).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(k)){M.writeHead(400,{"Content-Type":"application/json"}),M.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}let b=P.socket.localPort??0;IY(k,b,Q,{authTokenSha256:w8(G),allowExec:V}).then((l)=>{if(M.writableEnded)return;if(l)M.writeHead(500,{"Content-Type":"application/json"}),M.end(JSON.stringify({ok:!1,error:l}));else M.writeHead(200,{"Content-Type":"application/json"}),M.end(JSON.stringify({ok:!0}))})});return}if(S===Q+"/devtools"){let u=await y0();if(!c0(u,Z0)){M.writeHead(404,{"Content-Type":"application/json"}),M.end(JSON.stringify({error:"No serve-sim device"}));return}try{let b=await X(),l=await b.listTargets(),c=Y?fY(P):"ws",$0=Y?`${I6(P)??`127.0.0.1:${b.port}`}${J}`:`127.0.0.1:${b.port}/devtools`,Q0=l.map((t)=>({...t,webSocketDebuggerUrl:`${c}://${$0}/page/${encodeURIComponent(t.id)}`,devtoolsFrontendUrl:bY(V0,c,$0,t.id)}));M.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),M.end(JSON.stringify({port:b.port,targets:Q0}))}catch(b){M.writeHead(500,{"Content-Type":"application/json"}),M.end(JSON.stringify({error:b instanceof Error?b.message:"Failed to start inspect-webkit"}))}return}if(S===Q+"/devtools/release"&&P.method==="POST"){let u="";P.on("data",(k)=>u+=k),P.on("end",async()=>{try{let k=u?JSON.parse(u):{};(await X()).releaseHighlight?.(k.targetId),M.writeHead(200,{"Content-Type":"application/json"}),M.end("{}")}catch(k){M.writeHead(500,{"Content-Type":"application/json"}),M.end(JSON.stringify({error:k instanceof Error?k.message:"Failed to release"}))}});return}if(S===Q+"/devtools/highlight"&&P.method==="POST"){let u="";P.on("data",(k)=>u+=k),P.on("end",async()=>{try{let{targetId:k,on:b}=JSON.parse(u||"{}");if(!k){M.writeHead(400,{"Content-Type":"application/json"}),M.end(JSON.stringify({error:"Missing targetId"}));return}let l=await X();if(!l.highlightTarget){M.writeHead(501,{"Content-Type":"application/json"}),M.end(JSON.stringify({error:"highlightTarget not supported by inspect-webkit"}));return}await l.highlightTarget(k,!!b),M.writeHead(200,{"Content-Type":"application/json"}),M.end("{}")}catch(k){M.writeHead(500,{"Content-Type":"application/json"}),M.end(JSON.stringify({error:k instanceof Error?k.message:"Failed to highlight target"}))}});return}if(S===Q+"/api"){let u=await y0(),k=c0(u,Z0),b=`${Z0??"(any)"}|${u.length}|${k?`${k.device}@${k.port}`:"none"}`;if(b!==G5)G5=b,O6("GET /api selectedDevice=%s states=%d chose=%s",Z0??"(any)",u.length,k?`${k.device}@${k.port}`:"none");M.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"});let l=k?M9(k,I6(P),Q,U9(P),Y):null;M.end(JSON.stringify(l?m$(l,Q,r?W:"",V&&r,$?.codec,Y,$?.initialState):null));return}if(S===Q+"/api/diagnostics"){await z(P,M,Y0);return}if(S===Q+"/api/event-log"){M.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),M.end(JSON.stringify({events:i6({device:Y0,sinceId:B5(v),limit:z5(v)})}));return}if(S===Q+"/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(`:
|
|
115
115
|
|
|
116
|
-
`),M.write("data: "+JSON.stringify({events:i6({device:Y0,sinceId:B5(v),limit:
|
|
116
|
+
`),M.write("data: "+JSON.stringify({events:i6({device:Y0,sinceId:B5(v),limit:z5(v)})})+`
|
|
117
117
|
|
|
118
|
-
`);let u=
|
|
118
|
+
`);let u=g7((b)=>{if(Y0&&b.device!==Y0)return;if(M.writableEnded)return;M.write("data: "+JSON.stringify({event:b})+`
|
|
119
119
|
|
|
120
120
|
`)}),k=setInterval(()=>{if(!M.writableEnded)M.write(`:
|
|
121
121
|
|
|
122
|
-
`)},15000);P.on("close",()=>{clearInterval(k),u()});return}if(S===Q+"/api/events"){let u=async()=>{let F0=await y0(),C0=c0(F0,Z0),p=C0?M9(C0,I6(P),Q,U9(P),Y):null;return JSON.stringify(p?
|
|
122
|
+
`)},15000);P.on("close",()=>{clearInterval(k),u()});return}if(S===Q+"/api/events"){let u=async()=>{let F0=await y0(),C0=c0(F0,Z0),p=C0?M9(C0,I6(P),Q,U9(P),Y):null;return JSON.stringify(p?m$(p,Q,r?W:"",V&&r,$?.codec,Y,$?.initialState):null)};M.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),M.write(`:
|
|
123
123
|
|
|
124
124
|
`);let k=await u();M.write("data: "+k+`
|
|
125
125
|
|
|
126
126
|
`);let b=!1,l=async()=>{if(b||M.writableEnded)return;let F0=await u();if(F0===k)return;k=F0,M.write("data: "+F0+`
|
|
127
127
|
|
|
128
|
-
`)},c=null,$0=()=>{if(c)return;c=setTimeout(()=>{c=null,l()},150)},Q0=null,t=null,d=()=>{if(b||M.writableEnded||Q0||t)return;t=setTimeout(()=>{if(t=null,b||M.writableEnded||Q0)return;try{Q0
|
|
128
|
+
`)},c=null,$0=()=>{if(c)return;c=setTimeout(()=>{c=null,l()},150)},Q0=null,t=null,d=()=>{if(b||M.writableEnded||Q0||t)return;t=setTimeout(()=>{if(t=null,b||M.writableEnded||Q0)return;try{Q0=$Y(p$,$0),Q0.on("error",()=>{Q0?.close(),Q0=null,d()}),l()}catch{d()}},250)};d();let X0=setInterval(()=>{if(b||M.writableEnded)return;M.write(`:
|
|
129
129
|
|
|
130
130
|
`),d()},15000);P.on("close",()=>{if(b=!0,c)clearTimeout(c);if(t)clearTimeout(t);clearInterval(X0),Q0?.close()});return}if(S===Q+"/ax"){let u=await y0(),k=c0(u,Z0);if(!k){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(`:
|
|
131
131
|
|
|
132
|
-
`),
|
|
132
|
+
`),V5.prune(u.map((c)=>c.device));let l=V5.get(k.device).addClient(M);P.on("close",l);return}if((S===Q+"/exec"||S===Q+"/exec/")&&P.method==="POST"){if(!V){M.writeHead(403,{"Content-Type":"application/json"}),M.end(JSON.stringify({error:Y9}));return}if(!r){M.writeHead(403,{"Content-Type":"application/json"}),M.end(JSON.stringify({stdout:"",stderr:"exec is only available to loopback clients",exitCode:1}));return}if(!iY(P.headers["content-type"])){M.writeHead(415,{"Content-Type":"application/json"}),M.end(JSON.stringify({stdout:"",stderr:"Unsupported Media Type",exitCode:1}));return}if(!Z6(P)){M.writeHead(403,{"Content-Type":"application/json"}),M.end(JSON.stringify({stdout:"",stderr:"Origin required",exitCode:1}));return}let u=P.headers.authorization??"",k=/^Bearer\s+(.+)$/i.exec(u);if(!k||!cY(k[1].trim(),K)){M.writeHead(401,{"Content-Type":"application/json"}),M.end(JSON.stringify({stdout:"",stderr:"Unauthorized",exitCode:1}));return}let b="",l=!1;P.on("data",(c)=>{if(b+=typeof c==="string"?c:c.toString(),b.length>4194304)l=!0,M.writeHead(413,{"Content-Type":"application/json"}),M.end(JSON.stringify({stdout:"",stderr:"Payload Too Large",exitCode:1})),P.destroy()}),P.on("end",()=>{if(l)return;let c="";try{c=JSON.parse(b).command??""}catch{}if(!c){M.writeHead(400,{"Content-Type":"application/json"}),M.end(JSON.stringify({stdout:"",stderr:"Missing command",exitCode:1}));return}ZY(c,{maxBuffer:16777216},($0,Q0,t)=>{let d=$0?$0.code??1:0;h$(c,{exitCode:d}),M.writeHead(200,{"Content-Type":"application/json"}),M.end(JSON.stringify({stdout:Q0.toString(),stderr:t.toString(),exitCode:d}))})});return}if(S===Q+"/reload"&&P.method==="POST"){if(!Z0){M.writeHead(400,{"Content-Type":"application/json"}),M.end(JSON.stringify({sent:!1,error:"Missing device"}));return}let u=[],k=0,b=!1;P.on("data",(l)=>{if(b)return;if(u.push(l),k+=l.length,k>HY)b=!0,u=[],M.writeHead(413,{"Content-Type":"application/json",Connection:"close"}),M.end(JSON.stringify({sent:!1,error:"Body too large"}))}),P.on("end",async()=>{if(b)return;try{let l=Buffer.concat(u).toString("utf8"),c=l?JSON.parse(l):{},$0=typeof c.bundleId==="string"?c.bundleId:"",Q0={sent:!1,reason:"no-metro"};if($0&&!d9($0))Q0={sent:!1,reason:"unsupported-app"};else if($0){let t=y0().then((d)=>{let X0=c0(d,Z0);return X0?gY(X0.device):void 0});Q0=await z8($0,t)}M.writeHead(200,{"Content-Type":"application/json"}),M.end(JSON.stringify({...Q0,confirmed:!1}))}catch(l){M.writeHead(400,{"Content-Type":"application/json"}),M.end(JSON.stringify({sent:!1,error:l instanceof Error?l.message:"Failed to reload"}))}});return}if(S===Q+"/appstate"){let u=await y0(),k=c0(u,Z0);if(!k){M.writeHead(404),M.end("No serve-sim device");return}let b=k.device;M.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),M.write(`:
|
|
133
133
|
|
|
134
|
-
`);let l="";try{let d=JSON.parse(await l6(b));if(!d.bundleId||!
|
|
134
|
+
`);let l="";try{let d=JSON.parse(await l6(b));if(!d.bundleId||!H5(d.bundleId))return;if(M.writableEnded)return;l=d.bundleId;let X0=await N5(b,d.bundleId);if(M.writableEnded)return;M.write("data: "+JSON.stringify({bundleId:d.bundleId,pid:d.pid,isReactNative:X0})+`
|
|
135
135
|
|
|
136
|
-
`)}catch{}let c
|
|
136
|
+
`)}catch{}let c=QY("xcrun",o(["spawn",b,"log","stream","--style","ndjson","--level","info","--predicate",'process == "SpringBoard" AND eventMessage CONTAINS "Setting process visibility to: Foreground"']),{stdio:["ignore","pipe","ignore"]}),$0=!1,Q0=async(d,X0)=>{if(!H5(d))return;if(d===l)return;l=d;let F0=await N5(b,d);if(!$0)M.write("data: "+JSON.stringify({bundleId:d,pid:X0,isReactNative:F0})+`
|
|
137
137
|
|
|
138
138
|
`)},t="";c.stdout.on("data",(d)=>{t+=d.toString();let X0;while((X0=t.indexOf(`
|
|
139
|
-
`))!==-1){let F0=t.slice(0,X0).trim();if(t=t.slice(X0+1),!F0)continue;let C0;try{C0=JSON.parse(F0).eventMessage??""}catch{continue}let p=
|
|
139
|
+
`))!==-1){let F0=t.slice(0,X0).trim();if(t=t.slice(X0+1),!F0)continue;let C0;try{C0=JSON.parse(F0).eventMessage??""}catch{continue}let p=jY(C0);if(!p)continue;Q0(p.bundleId,p.pid)}if(t.length>BY)t=""}),c.on("error",()=>{$0=!0;try{M.end()}catch{}}),c.on("close",()=>M.end()),P.on("close",()=>{$0=!0,c.stdout?.destroy(),c.kill()});return}if(f)return f()};C.handleUpgrade=(P,M,f)=>{let v=P.url??"",n=M5(v)??$?.device??null,S=u$(v),s=B(S)?U5(v,Z):null,Y0=B(S)?_Y(v,J):null;if(Y0){(async()=>{try{let V0=await X();TY(P,M,f,`ws://127.0.0.1:${V0.port}${Y0.upstreamPath}`)}catch(V0){let r=V0 instanceof Error?V0.message:"Failed to start inspect-webkit";M.end(`HTTP/1.1 502 Bad Gateway\r
|
|
140
140
|
Content-Type: text/plain; charset=utf-8\r
|
|
141
141
|
\r
|
|
142
|
-
${r}`)}})();return}if(!s){M.destroy();return}let Z0=s.device??n;if(s.upstreamPath==="/ws"){if(
|
|
142
|
+
${r}`)}})();return}if(!s){M.destroy();return}let Z0=s.device??n;if(s.upstreamPath==="/ws"){if(wY(P,M,f,Z0))return;M.end(`HTTP/1.1 404 Not Found\r
|
|
143
143
|
\r
|
|
144
144
|
`);return}M.end(`HTTP/1.1 400 Bad Request\r
|
|
145
145
|
\r
|
|
146
|
-
`)};let I,x=
|
|
146
|
+
`)};let I,x=z4({path:`${Q}/exec-ws`,serverPort:()=>I,allowExec:V,execToken:K,allowShell:(P)=>I0(P)&&Z6(P),allowRpc:(P)=>I0(P)&&Z6(P),onRpcRequest:H,ssePrefixes:[`${Q}/api/events`,`${Q}/api/event-log/events`,`${Q}/appstate`,`${Q}/ax`],onUiRequest:U,onCommandResult:(P,M)=>h$(P,M)}),y=C.handleUpgrade;return C.handleUpgrade=(P,M,f)=>{let v=P.url??"",n=u$(v);if(B(n)){if(!I0(P)){let S=r9(P,G);if(!S.ok){L5(M,S.status,S.message);return}}if(Q6(P)==="cross"){L5(M,403,"Cross-origin WebSocket blocked");return}}if(x(P,M,f))return;y(P,M,f)},C.setServerPort=(P)=>{I=P},C}export{IY as startDeviceInProcess,gY as simulatorName,SG as simMiddleware,c0 as selectServeSimState,M9 as rewriteStateForRequestHost,vY as resolveServeSimBin,y0 as readServeSimStates,_5 as publicState,m$ as previewConfigForState,LY as parseGridPaging,jY as parseForegroundAppLogMessage,wG as matchInstalledAppByDisplayName};
|
|
147
147
|
|
|
148
|
-
//# debugId=
|
|
148
|
+
//# debugId=42CB724DF9056D3C64756E2164756E21
|
|
149
149
|
//# sourceMappingURL=middleware.js.map
|