serve-sim-sjchmiela 0.1.34 → 0.1.35

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/dist/serve-sim.js CHANGED
@@ -1,30 +1,30 @@
1
1
  #!/usr/bin/env node
2
- import{createRequire as cL}from"node:module";var _L=Object.create;var{getPrototypeOf:tL,defineProperty:ne,getOwnPropertyNames:TL}=Object;var bL=Object.prototype.hasOwnProperty;function LL(H){return this[H]}var aL,rL,Ie=(H,$,e)=>{var _=H!=null&&typeof H==="object";if(_){var t=$?aL??=new WeakMap:rL??=new WeakMap,T=t.get(H);if(T)return T}e=H!=null?_L(tL(H)):{};let b=$||!H||!H.__esModule?ne(e,"default",{value:H,enumerable:!0}):e;for(let A of TL(H))if(!bL.call(b,A))ne(b,A,{get:LL.bind(H,A),enumerable:!0});if(_)t.set(H,b);return b};var $H=(H,$)=>()=>($||H(($={exports:{}}).exports,$),$.exports);var AL=(H)=>H;function oL(H,$){this[H]=AL.bind(null,$)}var at=(H,$)=>{for(var e in $)ne(H,e,{get:$[e],enumerable:!0,configurable:!0,set:oL.bind($,e)})};var DH=(H,$)=>()=>(H&&($=H(H=0)),$);var k=cL(import.meta.url);var c$=$H((RL)=>{class De extends Error{constructor(H,$,e){super(e);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=$,this.exitCode=H,this.nestedError=void 0}}class rt extends De{constructor(H){super(1,"commander.invalidArgument",H);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}}RL.CommanderError=De;RL.InvalidArgumentError=rt});var G$=$H((nL)=>{var{InvalidArgumentError:hL}=c$();class At{constructor(H,$){switch(this.description=$||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,H[0]){case"<":this.required=!0,this._name=H.slice(1,-1);break;case"[":this.required=!1,this._name=H.slice(1,-1);break;default:this.required=!0,this._name=H;break}if(this._name.endsWith("..."))this.variadic=!0,this._name=this._name.slice(0,-3)}name(){return this._name}_collectValue(H,$){if($===this.defaultValue||!Array.isArray($))return[H];return $.push(H),$}default(H,$){return this.defaultValue=H,this.defaultValueDescription=$,this}argParser(H){return this.parseArg=H,this}choices(H){return this.argChoices=H.slice(),this.parseArg=($,e)=>{if(!this.argChoices.includes($))throw new hL(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue($,e);return $},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}}function iL(H){let $=H.name()+(H.variadic===!0?"...":"");return H.required?"<"+$+">":"["+$+"]"}nL.Argument=At;nL.humanReadableArgName=iL});var fe=$H((EL)=>{var{humanReadableArgName:fL}=G$();class ot{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(H){this.helpWidth=this.helpWidth??H.helpWidth??80}visibleCommands(H){let $=H.commands.filter((_)=>!_._hidden),e=H._getHelpCommand();if(e&&!e._hidden)$.push(e);if(this.sortSubcommands)$.sort((_,t)=>{return _.name().localeCompare(t.name())});return $}compareOptions(H,$){let e=(_)=>{return _.short?_.short.replace(/^-/,""):_.long.replace(/^--/,"")};return e(H).localeCompare(e($))}visibleOptions(H){let $=H.options.filter((_)=>!_.hidden),e=H._getHelpOption();if(e&&!e.hidden){let _=e.short&&H._findOption(e.short),t=e.long&&H._findOption(e.long);if(!_&&!t)$.push(e);else if(e.long&&!t)$.push(H.createOption(e.long,e.description));else if(e.short&&!_)$.push(H.createOption(e.short,e.description))}if(this.sortOptions)$.sort(this.compareOptions);return $}visibleGlobalOptions(H){if(!this.showGlobalOptions)return[];let $=[];for(let e=H.parent;e;e=e.parent){let _=e.options.filter((t)=>!t.hidden);$.push(..._)}if(this.sortOptions)$.sort(this.compareOptions);return $}visibleArguments(H){if(H._argsDescription)H.registeredArguments.forEach(($)=>{$.description=$.description||H._argsDescription[$.name()]||""});if(H.registeredArguments.find(($)=>$.description))return H.registeredArguments;return[]}subcommandTerm(H){let $=H.registeredArguments.map((e)=>fL(e)).join(" ");return H._name+(H._aliases[0]?"|"+H._aliases[0]:"")+(H.options.length?" [options]":"")+($?" "+$:"")}optionTerm(H){return H.flags}argumentTerm(H){return H.name()}longestSubcommandTermLength(H,$){return $.visibleCommands(H).reduce((e,_)=>{return Math.max(e,this.displayWidth($.styleSubcommandTerm($.subcommandTerm(_))))},0)}longestOptionTermLength(H,$){return $.visibleOptions(H).reduce((e,_)=>{return Math.max(e,this.displayWidth($.styleOptionTerm($.optionTerm(_))))},0)}longestGlobalOptionTermLength(H,$){return $.visibleGlobalOptions(H).reduce((e,_)=>{return Math.max(e,this.displayWidth($.styleOptionTerm($.optionTerm(_))))},0)}longestArgumentTermLength(H,$){return $.visibleArguments(H).reduce((e,_)=>{return Math.max(e,this.displayWidth($.styleArgumentTerm($.argumentTerm(_))))},0)}commandUsage(H){let $=H._name;if(H._aliases[0])$=$+"|"+H._aliases[0];let e="";for(let _=H.parent;_;_=_.parent)e=_.name()+" "+e;return e+$+" "+H.usage()}commandDescription(H){return H.description()}subcommandDescription(H){return H.summary()||H.description()}optionDescription(H){let $=[];if(H.argChoices)$.push(`choices: ${H.argChoices.map((e)=>JSON.stringify(e)).join(", ")}`);if(H.defaultValue!==void 0){if(H.required||H.optional||H.isBoolean()&&typeof H.defaultValue==="boolean")$.push(`default: ${H.defaultValueDescription||JSON.stringify(H.defaultValue)}`)}if(H.presetArg!==void 0&&H.optional)$.push(`preset: ${JSON.stringify(H.presetArg)}`);if(H.envVar!==void 0)$.push(`env: ${H.envVar}`);if($.length>0){let e=`(${$.join(", ")})`;if(H.description)return`${H.description} ${e}`;return e}return H.description}argumentDescription(H){let $=[];if(H.argChoices)$.push(`choices: ${H.argChoices.map((e)=>JSON.stringify(e)).join(", ")}`);if(H.defaultValue!==void 0)$.push(`default: ${H.defaultValueDescription||JSON.stringify(H.defaultValue)}`);if($.length>0){let e=`(${$.join(", ")})`;if(H.description)return`${H.description} ${e}`;return e}return H.description}formatItemList(H,$,e){if($.length===0)return[];return[e.styleTitle(H),...$,""]}groupItems(H,$,e){let _=new Map;return H.forEach((t)=>{let T=e(t);if(!_.has(T))_.set(T,[])}),$.forEach((t)=>{let T=e(t);if(!_.has(T))_.set(T,[]);_.get(T).push(t)}),_}formatHelp(H,$){let e=$.padWidth(H,$),_=$.helpWidth??80;function t(L,c){return $.formatItem(L,e,c,$)}let T=[`${$.styleTitle("Usage:")} ${$.styleUsage($.commandUsage(H))}`,""],b=$.commandDescription(H);if(b.length>0)T=T.concat([$.boxWrap($.styleCommandDescription(b),_),""]);let A=$.visibleArguments(H).map((L)=>{return t($.styleArgumentTerm($.argumentTerm(L)),$.styleArgumentDescription($.argumentDescription(L)))});if(T=T.concat(this.formatItemList("Arguments:",A,$)),this.groupItems(H.options,$.visibleOptions(H),(L)=>L.helpGroupHeading??"Options:").forEach((L,c)=>{let u=L.map((n)=>{return t($.styleOptionTerm($.optionTerm(n)),$.styleOptionDescription($.optionDescription(n)))});T=T.concat(this.formatItemList(c,u,$))}),$.showGlobalOptions){let L=$.visibleGlobalOptions(H).map((c)=>{return t($.styleOptionTerm($.optionTerm(c)),$.styleOptionDescription($.optionDescription(c)))});T=T.concat(this.formatItemList("Global Options:",L,$))}return this.groupItems(H.commands,$.visibleCommands(H),(L)=>L.helpGroup()||"Commands:").forEach((L,c)=>{let u=L.map((n)=>{return t($.styleSubcommandTerm($.subcommandTerm(n)),$.styleSubcommandDescription($.subcommandDescription(n)))});T=T.concat(this.formatItemList(c,u,$))}),T.join(`
3
- `)}displayWidth(H){return ct(H).length}styleTitle(H){return H}styleUsage(H){return H.split(" ").map(($)=>{if($==="[options]")return this.styleOptionText($);if($==="[command]")return this.styleSubcommandText($);if($[0]==="["||$[0]==="<")return this.styleArgumentText($);return this.styleCommandText($)}).join(" ")}styleCommandDescription(H){return this.styleDescriptionText(H)}styleOptionDescription(H){return this.styleDescriptionText(H)}styleSubcommandDescription(H){return this.styleDescriptionText(H)}styleArgumentDescription(H){return this.styleDescriptionText(H)}styleDescriptionText(H){return H}styleOptionTerm(H){return this.styleOptionText(H)}styleSubcommandTerm(H){return H.split(" ").map(($)=>{if($==="[options]")return this.styleOptionText($);if($[0]==="["||$[0]==="<")return this.styleArgumentText($);return this.styleSubcommandText($)}).join(" ")}styleArgumentTerm(H){return this.styleArgumentText(H)}styleOptionText(H){return H}styleArgumentText(H){return H}styleSubcommandText(H){return H}styleCommandText(H){return H}padWidth(H,$){return Math.max($.longestOptionTermLength(H,$),$.longestGlobalOptionTermLength(H,$),$.longestSubcommandTermLength(H,$),$.longestArgumentTermLength(H,$))}preformatted(H){return/\n[^\S\r\n]/.test(H)}formatItem(H,$,e,_){let T=" ".repeat(2);if(!e)return T+H;let b=H.padEnd($+H.length-_.displayWidth(H)),A=2,r=(this.helpWidth??80)-$-A-2,L;if(r<this.minWidthToWrap||_.preformatted(e))L=e;else L=_.boxWrap(e,r).replace(/\n/g,`
2
+ import{createRequire as RL}from"node:module";var tL=Object.create;var{getPrototypeOf:TL,defineProperty:ne,getOwnPropertyNames:bL}=Object;var LL=Object.prototype.hasOwnProperty;function aL(H){return this[H]}var rL,AL,Ie=(H,$,e)=>{var _=H!=null&&typeof H==="object";if(_){var t=$?rL??=new WeakMap:AL??=new WeakMap,T=t.get(H);if(T)return T}e=H!=null?tL(TL(H)):{};let b=$||!H||!H.__esModule?ne(e,"default",{value:H,enumerable:!0}):e;for(let A of bL(H))if(!LL.call(b,A))ne(b,A,{get:aL.bind(H,A),enumerable:!0});if(_)t.set(H,b);return b};var $H=(H,$)=>()=>($||H(($={exports:{}}).exports,$),$.exports);var oL=(H)=>H;function cL(H,$){this[H]=oL.bind(null,$)}var rt=(H,$)=>{for(var e in $)ne(H,e,{get:$[e],enumerable:!0,configurable:!0,set:cL.bind($,e)})};var DH=(H,$)=>()=>(H&&($=H(H=0)),$);var k=RL(import.meta.url);var c$=$H((sL)=>{class De extends Error{constructor(H,$,e){super(e);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=$,this.exitCode=H,this.nestedError=void 0}}class At extends De{constructor(H){super(1,"commander.invalidArgument",H);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}}sL.CommanderError=De;sL.InvalidArgumentError=At});var G$=$H((IL)=>{var{InvalidArgumentError:iL}=c$();class ot{constructor(H,$){switch(this.description=$||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,H[0]){case"<":this.required=!0,this._name=H.slice(1,-1);break;case"[":this.required=!1,this._name=H.slice(1,-1);break;default:this.required=!0,this._name=H;break}if(this._name.endsWith("..."))this.variadic=!0,this._name=this._name.slice(0,-3)}name(){return this._name}_collectValue(H,$){if($===this.defaultValue||!Array.isArray($))return[H];return $.push(H),$}default(H,$){return this.defaultValue=H,this.defaultValueDescription=$,this}argParser(H){return this.parseArg=H,this}choices(H){return this.argChoices=H.slice(),this.parseArg=($,e)=>{if(!this.argChoices.includes($))throw new iL(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue($,e);return $},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}}function nL(H){let $=H.name()+(H.variadic===!0?"...":"");return H.required?"<"+$+">":"["+$+"]"}IL.Argument=ot;IL.humanReadableArgName=nL});var fe=$H((CL)=>{var{humanReadableArgName:EL}=G$();class ct{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(H){this.helpWidth=this.helpWidth??H.helpWidth??80}visibleCommands(H){let $=H.commands.filter((_)=>!_._hidden),e=H._getHelpCommand();if(e&&!e._hidden)$.push(e);if(this.sortSubcommands)$.sort((_,t)=>{return _.name().localeCompare(t.name())});return $}compareOptions(H,$){let e=(_)=>{return _.short?_.short.replace(/^-/,""):_.long.replace(/^--/,"")};return e(H).localeCompare(e($))}visibleOptions(H){let $=H.options.filter((_)=>!_.hidden),e=H._getHelpOption();if(e&&!e.hidden){let _=e.short&&H._findOption(e.short),t=e.long&&H._findOption(e.long);if(!_&&!t)$.push(e);else if(e.long&&!t)$.push(H.createOption(e.long,e.description));else if(e.short&&!_)$.push(H.createOption(e.short,e.description))}if(this.sortOptions)$.sort(this.compareOptions);return $}visibleGlobalOptions(H){if(!this.showGlobalOptions)return[];let $=[];for(let e=H.parent;e;e=e.parent){let _=e.options.filter((t)=>!t.hidden);$.push(..._)}if(this.sortOptions)$.sort(this.compareOptions);return $}visibleArguments(H){if(H._argsDescription)H.registeredArguments.forEach(($)=>{$.description=$.description||H._argsDescription[$.name()]||""});if(H.registeredArguments.find(($)=>$.description))return H.registeredArguments;return[]}subcommandTerm(H){let $=H.registeredArguments.map((e)=>EL(e)).join(" ");return H._name+(H._aliases[0]?"|"+H._aliases[0]:"")+(H.options.length?" [options]":"")+($?" "+$:"")}optionTerm(H){return H.flags}argumentTerm(H){return H.name()}longestSubcommandTermLength(H,$){return $.visibleCommands(H).reduce((e,_)=>{return Math.max(e,this.displayWidth($.styleSubcommandTerm($.subcommandTerm(_))))},0)}longestOptionTermLength(H,$){return $.visibleOptions(H).reduce((e,_)=>{return Math.max(e,this.displayWidth($.styleOptionTerm($.optionTerm(_))))},0)}longestGlobalOptionTermLength(H,$){return $.visibleGlobalOptions(H).reduce((e,_)=>{return Math.max(e,this.displayWidth($.styleOptionTerm($.optionTerm(_))))},0)}longestArgumentTermLength(H,$){return $.visibleArguments(H).reduce((e,_)=>{return Math.max(e,this.displayWidth($.styleArgumentTerm($.argumentTerm(_))))},0)}commandUsage(H){let $=H._name;if(H._aliases[0])$=$+"|"+H._aliases[0];let e="";for(let _=H.parent;_;_=_.parent)e=_.name()+" "+e;return e+$+" "+H.usage()}commandDescription(H){return H.description()}subcommandDescription(H){return H.summary()||H.description()}optionDescription(H){let $=[];if(H.argChoices)$.push(`choices: ${H.argChoices.map((e)=>JSON.stringify(e)).join(", ")}`);if(H.defaultValue!==void 0){if(H.required||H.optional||H.isBoolean()&&typeof H.defaultValue==="boolean")$.push(`default: ${H.defaultValueDescription||JSON.stringify(H.defaultValue)}`)}if(H.presetArg!==void 0&&H.optional)$.push(`preset: ${JSON.stringify(H.presetArg)}`);if(H.envVar!==void 0)$.push(`env: ${H.envVar}`);if($.length>0){let e=`(${$.join(", ")})`;if(H.description)return`${H.description} ${e}`;return e}return H.description}argumentDescription(H){let $=[];if(H.argChoices)$.push(`choices: ${H.argChoices.map((e)=>JSON.stringify(e)).join(", ")}`);if(H.defaultValue!==void 0)$.push(`default: ${H.defaultValueDescription||JSON.stringify(H.defaultValue)}`);if($.length>0){let e=`(${$.join(", ")})`;if(H.description)return`${H.description} ${e}`;return e}return H.description}formatItemList(H,$,e){if($.length===0)return[];return[e.styleTitle(H),...$,""]}groupItems(H,$,e){let _=new Map;return H.forEach((t)=>{let T=e(t);if(!_.has(T))_.set(T,[])}),$.forEach((t)=>{let T=e(t);if(!_.has(T))_.set(T,[]);_.get(T).push(t)}),_}formatHelp(H,$){let e=$.padWidth(H,$),_=$.helpWidth??80;function t(L,c){return $.formatItem(L,e,c,$)}let T=[`${$.styleTitle("Usage:")} ${$.styleUsage($.commandUsage(H))}`,""],b=$.commandDescription(H);if(b.length>0)T=T.concat([$.boxWrap($.styleCommandDescription(b),_),""]);let A=$.visibleArguments(H).map((L)=>{return t($.styleArgumentTerm($.argumentTerm(L)),$.styleArgumentDescription($.argumentDescription(L)))});if(T=T.concat(this.formatItemList("Arguments:",A,$)),this.groupItems(H.options,$.visibleOptions(H),(L)=>L.helpGroupHeading??"Options:").forEach((L,c)=>{let u=L.map((n)=>{return t($.styleOptionTerm($.optionTerm(n)),$.styleOptionDescription($.optionDescription(n)))});T=T.concat(this.formatItemList(c,u,$))}),$.showGlobalOptions){let L=$.visibleGlobalOptions(H).map((c)=>{return t($.styleOptionTerm($.optionTerm(c)),$.styleOptionDescription($.optionDescription(c)))});T=T.concat(this.formatItemList("Global Options:",L,$))}return this.groupItems(H.commands,$.visibleCommands(H),(L)=>L.helpGroup()||"Commands:").forEach((L,c)=>{let u=L.map((n)=>{return t($.styleSubcommandTerm($.subcommandTerm(n)),$.styleSubcommandDescription($.subcommandDescription(n)))});T=T.concat(this.formatItemList(c,u,$))}),T.join(`
3
+ `)}displayWidth(H){return Rt(H).length}styleTitle(H){return H}styleUsage(H){return H.split(" ").map(($)=>{if($==="[options]")return this.styleOptionText($);if($==="[command]")return this.styleSubcommandText($);if($[0]==="["||$[0]==="<")return this.styleArgumentText($);return this.styleCommandText($)}).join(" ")}styleCommandDescription(H){return this.styleDescriptionText(H)}styleOptionDescription(H){return this.styleDescriptionText(H)}styleSubcommandDescription(H){return this.styleDescriptionText(H)}styleArgumentDescription(H){return this.styleDescriptionText(H)}styleDescriptionText(H){return H}styleOptionTerm(H){return this.styleOptionText(H)}styleSubcommandTerm(H){return H.split(" ").map(($)=>{if($==="[options]")return this.styleOptionText($);if($[0]==="["||$[0]==="<")return this.styleArgumentText($);return this.styleSubcommandText($)}).join(" ")}styleArgumentTerm(H){return this.styleArgumentText(H)}styleOptionText(H){return H}styleArgumentText(H){return H}styleSubcommandText(H){return H}styleCommandText(H){return H}padWidth(H,$){return Math.max($.longestOptionTermLength(H,$),$.longestGlobalOptionTermLength(H,$),$.longestSubcommandTermLength(H,$),$.longestArgumentTermLength(H,$))}preformatted(H){return/\n[^\S\r\n]/.test(H)}formatItem(H,$,e,_){let T=" ".repeat(2);if(!e)return T+H;let b=H.padEnd($+H.length-_.displayWidth(H)),A=2,r=(this.helpWidth??80)-$-A-2,L;if(r<this.minWidthToWrap||_.preformatted(e))L=e;else L=_.boxWrap(e,r).replace(/\n/g,`
4
4
  `+" ".repeat($+A));return T+b+" ".repeat(A)+L.replace(/\n/g,`
5
5
  ${T}`)}boxWrap(H,$){if($<this.minWidthToWrap)return H;let e=H.split(/\r\n|\n/),_=/[\s]*[^\s]+/g,t=[];return e.forEach((T)=>{let b=T.match(_);if(b===null){t.push("");return}let A=[b.shift()],a=this.displayWidth(A[0]);b.forEach((r)=>{let L=this.displayWidth(r);if(a+L<=$){A.push(r),a+=L;return}t.push(A.join(""));let c=r.trimStart();A=[c],a=this.displayWidth(c)}),t.push(A.join(""))}),t.join(`
6
- `)}}function ct(H){let $=/\x1b\[\d*(;\d*)*m/g;return H.replace($,"")}EL.Help=ot;EL.stripColor=ct});var Ee=$H((pL)=>{var{InvalidArgumentError:dL}=c$();class st{constructor(H,$){this.flags=H,this.description=$||"",this.required=H.includes("<"),this.optional=H.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(H),this.mandatory=!1;let e=lL(H);if(this.short=e.shortFlag,this.long=e.longFlag,this.negate=!1,this.long)this.negate=this.long.startsWith("--no-");this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0,this.helpGroupHeading=void 0}default(H,$){return this.defaultValue=H,this.defaultValueDescription=$,this}preset(H){return this.presetArg=H,this}conflicts(H){return this.conflictsWith=this.conflictsWith.concat(H),this}implies(H){let $=H;if(typeof H==="string")$={[H]:!0};return this.implied=Object.assign(this.implied||{},$),this}env(H){return this.envVar=H,this}argParser(H){return this.parseArg=H,this}makeOptionMandatory(H=!0){return this.mandatory=!!H,this}hideHelp(H=!0){return this.hidden=!!H,this}_collectValue(H,$){if($===this.defaultValue||!Array.isArray($))return[H];return $.push(H),$}choices(H){return this.argChoices=H.slice(),this.parseArg=($,e)=>{if(!this.argChoices.includes($))throw new dL(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue($,e);return $},this}name(){if(this.long)return this.long.replace(/^--/,"");return this.short.replace(/^-/,"")}attributeName(){if(this.negate)return Rt(this.name().replace(/^no-/,""));return Rt(this.name())}helpGroup(H){return this.helpGroupHeading=H,this}is(H){return this.short===H||this.long===H}isBoolean(){return!this.required&&!this.optional&&!this.negate}}class ut{constructor(H){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,H.forEach(($)=>{if($.negate)this.negativeOptions.set($.attributeName(),$);else this.positiveOptions.set($.attributeName(),$)}),this.negativeOptions.forEach(($,e)=>{if(this.positiveOptions.has(e))this.dualOptions.add(e)})}valueFromOption(H,$){let e=$.attributeName();if(!this.dualOptions.has(e))return!0;let _=this.negativeOptions.get(e).presetArg,t=_!==void 0?_:!1;return $.negate===(t===H)}}function Rt(H){return H.split("-").reduce(($,e)=>{return $+e[0].toUpperCase()+e.slice(1)})}function lL(H){let $,e,_=/^-[^-]$/,t=/^--[^-]/,T=H.split(/[ |,]+/).concat("guard");if(_.test(T[0]))$=T.shift();if(t.test(T[0]))e=T.shift();if(!$&&_.test(T[0]))$=T.shift();if(!$&&t.test(T[0]))$=e,e=T.shift();if(T[0].startsWith("-")){let b=T[0],A=`option creation failed due to '${b}' in option flags '${H}'`;if(/^-[^-][^-]/.test(b))throw Error(`${A}
6
+ `)}}function Rt(H){let $=/\x1b\[\d*(;\d*)*m/g;return H.replace($,"")}CL.Help=ct;CL.stripColor=Rt});var Ee=$H((BL)=>{var{InvalidArgumentError:lL}=c$();class ut{constructor(H,$){this.flags=H,this.description=$||"",this.required=H.includes("<"),this.optional=H.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(H),this.mandatory=!1;let e=pL(H);if(this.short=e.shortFlag,this.long=e.longFlag,this.negate=!1,this.long)this.negate=this.long.startsWith("--no-");this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0,this.helpGroupHeading=void 0}default(H,$){return this.defaultValue=H,this.defaultValueDescription=$,this}preset(H){return this.presetArg=H,this}conflicts(H){return this.conflictsWith=this.conflictsWith.concat(H),this}implies(H){let $=H;if(typeof H==="string")$={[H]:!0};return this.implied=Object.assign(this.implied||{},$),this}env(H){return this.envVar=H,this}argParser(H){return this.parseArg=H,this}makeOptionMandatory(H=!0){return this.mandatory=!!H,this}hideHelp(H=!0){return this.hidden=!!H,this}_collectValue(H,$){if($===this.defaultValue||!Array.isArray($))return[H];return $.push(H),$}choices(H){return this.argChoices=H.slice(),this.parseArg=($,e)=>{if(!this.argChoices.includes($))throw new lL(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._collectValue($,e);return $},this}name(){if(this.long)return this.long.replace(/^--/,"");return this.short.replace(/^-/,"")}attributeName(){if(this.negate)return st(this.name().replace(/^no-/,""));return st(this.name())}helpGroup(H){return this.helpGroupHeading=H,this}is(H){return this.short===H||this.long===H}isBoolean(){return!this.required&&!this.optional&&!this.negate}}class ht{constructor(H){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,H.forEach(($)=>{if($.negate)this.negativeOptions.set($.attributeName(),$);else this.positiveOptions.set($.attributeName(),$)}),this.negativeOptions.forEach(($,e)=>{if(this.positiveOptions.has(e))this.dualOptions.add(e)})}valueFromOption(H,$){let e=$.attributeName();if(!this.dualOptions.has(e))return!0;let _=this.negativeOptions.get(e).presetArg,t=_!==void 0?_:!1;return $.negate===(t===H)}}function st(H){return H.split("-").reduce(($,e)=>{return $+e[0].toUpperCase()+e.slice(1)})}function pL(H){let $,e,_=/^-[^-]$/,t=/^--[^-]/,T=H.split(/[ |,]+/).concat("guard");if(_.test(T[0]))$=T.shift();if(t.test(T[0]))e=T.shift();if(!$&&_.test(T[0]))$=T.shift();if(!$&&t.test(T[0]))$=e,e=T.shift();if(T[0].startsWith("-")){let b=T[0],A=`option creation failed due to '${b}' in option flags '${H}'`;if(/^-[^-][^-]/.test(b))throw Error(`${A}
7
7
  - a short flag is a single dash and a single character
8
8
  - either use a single dash and a single character (for a short flag)
9
9
  - or use a double dash for a long option (and can have two, like '--ws, --workspace')`);if(_.test(b))throw Error(`${A}
10
10
  - too many short flags`);if(t.test(b))throw Error(`${A}
11
11
  - too many long flags`);throw Error(`${A}
12
- - unrecognised flag format`)}if($===void 0&&e===void 0)throw Error(`option creation failed due to no flags found in '${H}'.`);return{shortFlag:$,longFlag:e}}pL.Option=st;pL.DualOptions=ut});var ht=$H((gL)=>{function ML(H,$){if(Math.abs(H.length-$.length)>3)return Math.max(H.length,$.length);let e=[];for(let _=0;_<=H.length;_++)e[_]=[_];for(let _=0;_<=$.length;_++)e[0][_]=_;for(let _=1;_<=$.length;_++)for(let t=1;t<=H.length;t++){let T=1;if(H[t-1]===$[_-1])T=0;else T=1;if(e[t][_]=Math.min(e[t-1][_]+1,e[t][_-1]+1,e[t-1][_-1]+T),t>1&&_>1&&H[t-1]===$[_-2]&&H[t-2]===$[_-1])e[t][_]=Math.min(e[t][_],e[t-2][_-2]+1)}return e[H.length][$.length]}function GL(H,$){if(!$||$.length===0)return"";$=Array.from(new Set($));let e=H.startsWith("--");if(e)H=H.slice(2),$=$.map((b)=>b.slice(2));let _=[],t=3,T=0.4;if($.forEach((b)=>{if(b.length<=1)return;let A=ML(H,b),a=Math.max(H.length,b.length);if((a-A)/a>T){if(A<t)t=A,_=[b];else if(A===t)_.push(b)}}),_.sort((b,A)=>b.localeCompare(A)),e)_=_.map((b)=>`--${b}`);if(_.length>1)return`
12
+ - unrecognised flag format`)}if($===void 0&&e===void 0)throw Error(`option creation failed due to no flags found in '${H}'.`);return{shortFlag:$,longFlag:e}}BL.Option=ut;BL.DualOptions=ht});var it=$H((SL)=>{function GL(H,$){if(Math.abs(H.length-$.length)>3)return Math.max(H.length,$.length);let e=[];for(let _=0;_<=H.length;_++)e[_]=[_];for(let _=0;_<=$.length;_++)e[0][_]=_;for(let _=1;_<=$.length;_++)for(let t=1;t<=H.length;t++){let T=1;if(H[t-1]===$[_-1])T=0;else T=1;if(e[t][_]=Math.min(e[t-1][_]+1,e[t][_-1]+1,e[t-1][_-1]+T),t>1&&_>1&&H[t-1]===$[_-2]&&H[t-2]===$[_-1])e[t][_]=Math.min(e[t][_],e[t-2][_-2]+1)}return e[H.length][$.length]}function gL(H,$){if(!$||$.length===0)return"";$=Array.from(new Set($));let e=H.startsWith("--");if(e)H=H.slice(2),$=$.map((b)=>b.slice(2));let _=[],t=3,T=0.4;if($.forEach((b)=>{if(b.length<=1)return;let A=GL(H,b),a=Math.max(H.length,b.length);if((a-A)/a>T){if(A<t)t=A,_=[b];else if(A===t)_.push(b)}}),_.sort((b,A)=>b.localeCompare(A)),e)_=_.map((b)=>`--${b}`);if(_.length>1)return`
13
13
  (Did you mean one of ${_.join(", ")}?)`;if(_.length===1)return`
14
- (Did you mean ${_[0]}?)`;return""}gL.suggestSimilar=GL});var Dt=$H((WL)=>{var kL=k("node:events").EventEmitter,Ce=k("node:child_process"),fH=k("node:path"),g$=k("node:fs"),Z=k("node:process"),{Argument:mL,humanReadableArgName:qL}=G$(),{CommanderError:Ne}=c$(),{Help:PL,stripColor:xL}=fe(),{Option:it,DualOptions:yL}=Ee(),{suggestSimilar:nt}=ht();class le extends kL{constructor(H){super();this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=H||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:($)=>Z.stdout.write($),writeErr:($)=>Z.stderr.write($),outputError:($,e)=>e($),getOutHelpWidth:()=>Z.stdout.isTTY?Z.stdout.columns:void 0,getErrHelpWidth:()=>Z.stderr.isTTY?Z.stderr.columns:void 0,getOutHasColors:()=>de()??(Z.stdout.isTTY&&Z.stdout.hasColors?.()),getErrHasColors:()=>de()??(Z.stderr.isTTY&&Z.stderr.hasColors?.()),stripColor:($)=>xL($)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={},this._helpGroupHeading=void 0,this._defaultCommandGroup=void 0,this._defaultOptionGroup=void 0}copyInheritedSettings(H){return this._outputConfiguration=H._outputConfiguration,this._helpOption=H._helpOption,this._helpCommand=H._helpCommand,this._helpConfiguration=H._helpConfiguration,this._exitCallback=H._exitCallback,this._storeOptionsAsProperties=H._storeOptionsAsProperties,this._combineFlagAndOptionalValue=H._combineFlagAndOptionalValue,this._allowExcessArguments=H._allowExcessArguments,this._enablePositionalOptions=H._enablePositionalOptions,this._showHelpAfterError=H._showHelpAfterError,this._showSuggestionAfterError=H._showSuggestionAfterError,this}_getCommandAndAncestors(){let H=[];for(let $=this;$;$=$.parent)H.push($);return H}command(H,$,e){let _=$,t=e;if(typeof _==="object"&&_!==null)t=_,_=null;t=t||{};let[,T,b]=H.match(/([^ ]+) *(.*)/),A=this.createCommand(T);if(_)A.description(_),A._executableHandler=!0;if(t.isDefault)this._defaultCommandName=A._name;if(A._hidden=!!(t.noHelp||t.hidden),A._executableFile=t.executableFile||null,b)A.arguments(b);if(this._registerCommand(A),A.parent=this,A.copyInheritedSettings(this),_)return this;return A}createCommand(H){return new le(H)}createHelp(){return Object.assign(new PL,this.configureHelp())}configureHelp(H){if(H===void 0)return this._helpConfiguration;return this._helpConfiguration=H,this}configureOutput(H){if(H===void 0)return this._outputConfiguration;return this._outputConfiguration={...this._outputConfiguration,...H},this}showHelpAfterError(H=!0){if(typeof H!=="string")H=!!H;return this._showHelpAfterError=H,this}showSuggestionAfterError(H=!0){return this._showSuggestionAfterError=!!H,this}addCommand(H,$){if(!H._name)throw Error(`Command passed to .addCommand() must have a name
15
- - specify the name in Command constructor or using .name()`);if($=$||{},$.isDefault)this._defaultCommandName=H._name;if($.noHelp||$.hidden)H._hidden=!0;return this._registerCommand(H),H.parent=this,H._checkForBrokenPassThrough(),this}createArgument(H,$){return new mL(H,$)}argument(H,$,e,_){let t=this.createArgument(H,$);if(typeof e==="function")t.default(_).argParser(e);else t.default(e);return this.addArgument(t),this}arguments(H){return H.trim().split(/ +/).forEach(($)=>{this.argument($)}),this}addArgument(H){let $=this.registeredArguments.slice(-1)[0];if($?.variadic)throw Error(`only the last argument can be variadic '${$.name()}'`);if(H.required&&H.defaultValue!==void 0&&H.parseArg===void 0)throw Error(`a default value for a required argument is never used: '${H.name()}'`);return this.registeredArguments.push(H),this}helpCommand(H,$){if(typeof H==="boolean"){if(this._addImplicitHelpCommand=H,H&&this._defaultCommandGroup)this._initCommandGroup(this._getHelpCommand());return this}let e=H??"help [command]",[,_,t]=e.match(/([^ ]+) *(.*)/),T=$??"display help for command",b=this.createCommand(_);if(b.helpOption(!1),t)b.arguments(t);if(T)b.description(T);if(this._addImplicitHelpCommand=!0,this._helpCommand=b,H||$)this._initCommandGroup(b);return this}addHelpCommand(H,$){if(typeof H!=="object")return this.helpCommand(H,$),this;return this._addImplicitHelpCommand=!0,this._helpCommand=H,this._initCommandGroup(H),this}_getHelpCommand(){if(this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))){if(this._helpCommand===void 0)this.helpCommand(void 0,void 0);return this._helpCommand}return null}hook(H,$){let e=["preSubcommand","preAction","postAction"];if(!e.includes(H))throw Error(`Unexpected value for event passed to hook : '${H}'.
16
- Expecting one of '${e.join("', '")}'`);if(this._lifeCycleHooks[H])this._lifeCycleHooks[H].push($);else this._lifeCycleHooks[H]=[$];return this}exitOverride(H){if(H)this._exitCallback=H;else this._exitCallback=($)=>{if($.code!=="commander.executeSubCommandAsync")throw $};return this}_exit(H,$,e){if(this._exitCallback)this._exitCallback(new Ne(H,$,e));Z.exit(H)}action(H){let $=(e)=>{let _=this.registeredArguments.length,t=e.slice(0,_);if(this._storeOptionsAsProperties)t[_]=this;else t[_]=this.opts();return t.push(this),H.apply(this,t)};return this._actionHandler=$,this}createOption(H,$){return new it(H,$)}_callParseArg(H,$,e,_){try{return H.parseArg($,e)}catch(t){if(t.code==="commander.invalidArgument"){let T=`${_} ${t.message}`;this.error(T,{exitCode:t.exitCode,code:t.code})}throw t}}_registerOption(H){let $=H.short&&this._findOption(H.short)||H.long&&this._findOption(H.long);if($){let e=H.long&&this._findOption(H.long)?H.long:H.short;throw Error(`Cannot add option '${H.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${e}'
17
- - already used by option '${$.flags}'`)}this._initOptionGroup(H),this.options.push(H)}_registerCommand(H){let $=(_)=>{return[_.name()].concat(_.aliases())},e=$(H).find((_)=>this._findCommand(_));if(e){let _=$(this._findCommand(e)).join("|"),t=$(H).join("|");throw Error(`cannot add command '${t}' as already have command '${_}'`)}this._initCommandGroup(H),this.commands.push(H)}addOption(H){this._registerOption(H);let $=H.name(),e=H.attributeName();if(H.negate){let t=H.long.replace(/^--no-/,"--");if(!this._findOption(t))this.setOptionValueWithSource(e,H.defaultValue===void 0?!0:H.defaultValue,"default")}else if(H.defaultValue!==void 0)this.setOptionValueWithSource(e,H.defaultValue,"default");let _=(t,T,b)=>{if(t==null&&H.presetArg!==void 0)t=H.presetArg;let A=this.getOptionValue(e);if(t!==null&&H.parseArg)t=this._callParseArg(H,t,A,T);else if(t!==null&&H.variadic)t=H._collectValue(t,A);if(t==null)if(H.negate)t=!1;else if(H.isBoolean()||H.optional)t=!0;else t="";this.setOptionValueWithSource(e,t,b)};if(this.on("option:"+$,(t)=>{let T=`error: option '${H.flags}' argument '${t}' is invalid.`;_(t,T,"cli")}),H.envVar)this.on("optionEnv:"+$,(t)=>{let T=`error: option '${H.flags}' value '${t}' from env '${H.envVar}' is invalid.`;_(t,T,"env")});return this}_optionEx(H,$,e,_,t){if(typeof $==="object"&&$ instanceof it)throw Error("To add an Option object use addOption() instead of option() or requiredOption()");let T=this.createOption($,e);if(T.makeOptionMandatory(!!H.mandatory),typeof _==="function")T.default(t).argParser(_);else if(_ instanceof RegExp){let b=_;_=(A,a)=>{let r=b.exec(A);return r?r[0]:a},T.default(t).argParser(_)}else T.default(_);return this.addOption(T)}option(H,$,e,_){return this._optionEx({},H,$,e,_)}requiredOption(H,$,e,_){return this._optionEx({mandatory:!0},H,$,e,_)}combineFlagAndOptionalValue(H=!0){return this._combineFlagAndOptionalValue=!!H,this}allowUnknownOption(H=!0){return this._allowUnknownOption=!!H,this}allowExcessArguments(H=!0){return this._allowExcessArguments=!!H,this}enablePositionalOptions(H=!0){return this._enablePositionalOptions=!!H,this}passThroughOptions(H=!0){return this._passThroughOptions=!!H,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(H=!0){if(this.options.length)throw Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!H,this}getOptionValue(H){if(this._storeOptionsAsProperties)return this[H];return this._optionValues[H]}setOptionValue(H,$){return this.setOptionValueWithSource(H,$,void 0)}setOptionValueWithSource(H,$,e){if(this._storeOptionsAsProperties)this[H]=$;else this._optionValues[H]=$;return this._optionValueSources[H]=e,this}getOptionValueSource(H){return this._optionValueSources[H]}getOptionValueSourceWithGlobals(H){let $;return this._getCommandAndAncestors().forEach((e)=>{if(e.getOptionValueSource(H)!==void 0)$=e.getOptionValueSource(H)}),$}_prepareUserArgs(H,$){if(H!==void 0&&!Array.isArray(H))throw Error("first parameter to parse must be array or undefined");if($=$||{},H===void 0&&$.from===void 0){if(Z.versions?.electron)$.from="electron";let _=Z.execArgv??[];if(_.includes("-e")||_.includes("--eval")||_.includes("-p")||_.includes("--print"))$.from="eval"}if(H===void 0)H=Z.argv;this.rawArgs=H.slice();let e;switch($.from){case void 0:case"node":this._scriptPath=H[1],e=H.slice(2);break;case"electron":if(Z.defaultApp)this._scriptPath=H[1],e=H.slice(2);else e=H.slice(1);break;case"user":e=H.slice(0);break;case"eval":e=H.slice(1);break;default:throw Error(`unexpected parse option { from: '${$.from}' }`)}if(!this._name&&this._scriptPath)this.nameFromFilename(this._scriptPath);return this._name=this._name||"program",e}parse(H,$){this._prepareForParse();let e=this._prepareUserArgs(H,$);return this._parseCommand([],e),this}async parseAsync(H,$){this._prepareForParse();let e=this._prepareUserArgs(H,$);return await this._parseCommand([],e),this}_prepareForParse(){if(this._savedState===null)this.saveStateBeforeParse();else this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw Error(`Can not call parse again when storeOptionsAsProperties is true.
14
+ (Did you mean ${_[0]}?)`;return""}SL.suggestSimilar=gL});var ft=$H((FL)=>{var mL=k("node:events").EventEmitter,Ce=k("node:child_process"),fH=k("node:path"),g$=k("node:fs"),Z=k("node:process"),{Argument:qL,humanReadableArgName:PL}=G$(),{CommanderError:Ne}=c$(),{Help:xL,stripColor:yL}=fe(),{Option:nt,DualOptions:WL}=Ee(),{suggestSimilar:It}=it();class le extends mL{constructor(H){super();this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=H||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:($)=>Z.stdout.write($),writeErr:($)=>Z.stderr.write($),outputError:($,e)=>e($),getOutHelpWidth:()=>Z.stdout.isTTY?Z.stdout.columns:void 0,getErrHelpWidth:()=>Z.stderr.isTTY?Z.stderr.columns:void 0,getOutHasColors:()=>de()??(Z.stdout.isTTY&&Z.stdout.hasColors?.()),getErrHasColors:()=>de()??(Z.stderr.isTTY&&Z.stderr.hasColors?.()),stripColor:($)=>yL($)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={},this._helpGroupHeading=void 0,this._defaultCommandGroup=void 0,this._defaultOptionGroup=void 0}copyInheritedSettings(H){return this._outputConfiguration=H._outputConfiguration,this._helpOption=H._helpOption,this._helpCommand=H._helpCommand,this._helpConfiguration=H._helpConfiguration,this._exitCallback=H._exitCallback,this._storeOptionsAsProperties=H._storeOptionsAsProperties,this._combineFlagAndOptionalValue=H._combineFlagAndOptionalValue,this._allowExcessArguments=H._allowExcessArguments,this._enablePositionalOptions=H._enablePositionalOptions,this._showHelpAfterError=H._showHelpAfterError,this._showSuggestionAfterError=H._showSuggestionAfterError,this}_getCommandAndAncestors(){let H=[];for(let $=this;$;$=$.parent)H.push($);return H}command(H,$,e){let _=$,t=e;if(typeof _==="object"&&_!==null)t=_,_=null;t=t||{};let[,T,b]=H.match(/([^ ]+) *(.*)/),A=this.createCommand(T);if(_)A.description(_),A._executableHandler=!0;if(t.isDefault)this._defaultCommandName=A._name;if(A._hidden=!!(t.noHelp||t.hidden),A._executableFile=t.executableFile||null,b)A.arguments(b);if(this._registerCommand(A),A.parent=this,A.copyInheritedSettings(this),_)return this;return A}createCommand(H){return new le(H)}createHelp(){return Object.assign(new xL,this.configureHelp())}configureHelp(H){if(H===void 0)return this._helpConfiguration;return this._helpConfiguration=H,this}configureOutput(H){if(H===void 0)return this._outputConfiguration;return this._outputConfiguration={...this._outputConfiguration,...H},this}showHelpAfterError(H=!0){if(typeof H!=="string")H=!!H;return this._showHelpAfterError=H,this}showSuggestionAfterError(H=!0){return this._showSuggestionAfterError=!!H,this}addCommand(H,$){if(!H._name)throw Error(`Command passed to .addCommand() must have a name
15
+ - specify the name in Command constructor or using .name()`);if($=$||{},$.isDefault)this._defaultCommandName=H._name;if($.noHelp||$.hidden)H._hidden=!0;return this._registerCommand(H),H.parent=this,H._checkForBrokenPassThrough(),this}createArgument(H,$){return new qL(H,$)}argument(H,$,e,_){let t=this.createArgument(H,$);if(typeof e==="function")t.default(_).argParser(e);else t.default(e);return this.addArgument(t),this}arguments(H){return H.trim().split(/ +/).forEach(($)=>{this.argument($)}),this}addArgument(H){let $=this.registeredArguments.slice(-1)[0];if($?.variadic)throw Error(`only the last argument can be variadic '${$.name()}'`);if(H.required&&H.defaultValue!==void 0&&H.parseArg===void 0)throw Error(`a default value for a required argument is never used: '${H.name()}'`);return this.registeredArguments.push(H),this}helpCommand(H,$){if(typeof H==="boolean"){if(this._addImplicitHelpCommand=H,H&&this._defaultCommandGroup)this._initCommandGroup(this._getHelpCommand());return this}let e=H??"help [command]",[,_,t]=e.match(/([^ ]+) *(.*)/),T=$??"display help for command",b=this.createCommand(_);if(b.helpOption(!1),t)b.arguments(t);if(T)b.description(T);if(this._addImplicitHelpCommand=!0,this._helpCommand=b,H||$)this._initCommandGroup(b);return this}addHelpCommand(H,$){if(typeof H!=="object")return this.helpCommand(H,$),this;return this._addImplicitHelpCommand=!0,this._helpCommand=H,this._initCommandGroup(H),this}_getHelpCommand(){if(this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))){if(this._helpCommand===void 0)this.helpCommand(void 0,void 0);return this._helpCommand}return null}hook(H,$){let e=["preSubcommand","preAction","postAction"];if(!e.includes(H))throw Error(`Unexpected value for event passed to hook : '${H}'.
16
+ Expecting one of '${e.join("', '")}'`);if(this._lifeCycleHooks[H])this._lifeCycleHooks[H].push($);else this._lifeCycleHooks[H]=[$];return this}exitOverride(H){if(H)this._exitCallback=H;else this._exitCallback=($)=>{if($.code!=="commander.executeSubCommandAsync")throw $};return this}_exit(H,$,e){if(this._exitCallback)this._exitCallback(new Ne(H,$,e));Z.exit(H)}action(H){let $=(e)=>{let _=this.registeredArguments.length,t=e.slice(0,_);if(this._storeOptionsAsProperties)t[_]=this;else t[_]=this.opts();return t.push(this),H.apply(this,t)};return this._actionHandler=$,this}createOption(H,$){return new nt(H,$)}_callParseArg(H,$,e,_){try{return H.parseArg($,e)}catch(t){if(t.code==="commander.invalidArgument"){let T=`${_} ${t.message}`;this.error(T,{exitCode:t.exitCode,code:t.code})}throw t}}_registerOption(H){let $=H.short&&this._findOption(H.short)||H.long&&this._findOption(H.long);if($){let e=H.long&&this._findOption(H.long)?H.long:H.short;throw Error(`Cannot add option '${H.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${e}'
17
+ - already used by option '${$.flags}'`)}this._initOptionGroup(H),this.options.push(H)}_registerCommand(H){let $=(_)=>{return[_.name()].concat(_.aliases())},e=$(H).find((_)=>this._findCommand(_));if(e){let _=$(this._findCommand(e)).join("|"),t=$(H).join("|");throw Error(`cannot add command '${t}' as already have command '${_}'`)}this._initCommandGroup(H),this.commands.push(H)}addOption(H){this._registerOption(H);let $=H.name(),e=H.attributeName();if(H.negate){let t=H.long.replace(/^--no-/,"--");if(!this._findOption(t))this.setOptionValueWithSource(e,H.defaultValue===void 0?!0:H.defaultValue,"default")}else if(H.defaultValue!==void 0)this.setOptionValueWithSource(e,H.defaultValue,"default");let _=(t,T,b)=>{if(t==null&&H.presetArg!==void 0)t=H.presetArg;let A=this.getOptionValue(e);if(t!==null&&H.parseArg)t=this._callParseArg(H,t,A,T);else if(t!==null&&H.variadic)t=H._collectValue(t,A);if(t==null)if(H.negate)t=!1;else if(H.isBoolean()||H.optional)t=!0;else t="";this.setOptionValueWithSource(e,t,b)};if(this.on("option:"+$,(t)=>{let T=`error: option '${H.flags}' argument '${t}' is invalid.`;_(t,T,"cli")}),H.envVar)this.on("optionEnv:"+$,(t)=>{let T=`error: option '${H.flags}' value '${t}' from env '${H.envVar}' is invalid.`;_(t,T,"env")});return this}_optionEx(H,$,e,_,t){if(typeof $==="object"&&$ instanceof nt)throw Error("To add an Option object use addOption() instead of option() or requiredOption()");let T=this.createOption($,e);if(T.makeOptionMandatory(!!H.mandatory),typeof _==="function")T.default(t).argParser(_);else if(_ instanceof RegExp){let b=_;_=(A,a)=>{let r=b.exec(A);return r?r[0]:a},T.default(t).argParser(_)}else T.default(_);return this.addOption(T)}option(H,$,e,_){return this._optionEx({},H,$,e,_)}requiredOption(H,$,e,_){return this._optionEx({mandatory:!0},H,$,e,_)}combineFlagAndOptionalValue(H=!0){return this._combineFlagAndOptionalValue=!!H,this}allowUnknownOption(H=!0){return this._allowUnknownOption=!!H,this}allowExcessArguments(H=!0){return this._allowExcessArguments=!!H,this}enablePositionalOptions(H=!0){return this._enablePositionalOptions=!!H,this}passThroughOptions(H=!0){return this._passThroughOptions=!!H,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(H=!0){if(this.options.length)throw Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!H,this}getOptionValue(H){if(this._storeOptionsAsProperties)return this[H];return this._optionValues[H]}setOptionValue(H,$){return this.setOptionValueWithSource(H,$,void 0)}setOptionValueWithSource(H,$,e){if(this._storeOptionsAsProperties)this[H]=$;else this._optionValues[H]=$;return this._optionValueSources[H]=e,this}getOptionValueSource(H){return this._optionValueSources[H]}getOptionValueSourceWithGlobals(H){let $;return this._getCommandAndAncestors().forEach((e)=>{if(e.getOptionValueSource(H)!==void 0)$=e.getOptionValueSource(H)}),$}_prepareUserArgs(H,$){if(H!==void 0&&!Array.isArray(H))throw Error("first parameter to parse must be array or undefined");if($=$||{},H===void 0&&$.from===void 0){if(Z.versions?.electron)$.from="electron";let _=Z.execArgv??[];if(_.includes("-e")||_.includes("--eval")||_.includes("-p")||_.includes("--print"))$.from="eval"}if(H===void 0)H=Z.argv;this.rawArgs=H.slice();let e;switch($.from){case void 0:case"node":this._scriptPath=H[1],e=H.slice(2);break;case"electron":if(Z.defaultApp)this._scriptPath=H[1],e=H.slice(2);else e=H.slice(1);break;case"user":e=H.slice(0);break;case"eval":e=H.slice(1);break;default:throw Error(`unexpected parse option { from: '${$.from}' }`)}if(!this._name&&this._scriptPath)this.nameFromFilename(this._scriptPath);return this._name=this._name||"program",e}parse(H,$){this._prepareForParse();let e=this._prepareUserArgs(H,$);return this._parseCommand([],e),this}async parseAsync(H,$){this._prepareForParse();let e=this._prepareUserArgs(H,$);return await this._parseCommand([],e),this}_prepareForParse(){if(this._savedState===null)this.saveStateBeforeParse();else this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw Error(`Can not call parse again when storeOptionsAsProperties is true.
18
18
  - either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(H,$,e){if(g$.existsSync(H))return;let _=$?`searched for local subcommand relative to directory '${$}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",t=`'${H}' does not exist
19
19
  - if '${e}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
20
20
  - if the default executable name is not suitable, use the executableFile option to supply a custom name or path
21
- - ${_}`;throw Error(t)}_executeSubCommand(H,$){$=$.slice();let e=!1,_=[".js",".ts",".tsx",".mjs",".cjs"];function t(r,L){let c=fH.resolve(r,L);if(g$.existsSync(c))return c;if(_.includes(fH.extname(L)))return;let u=_.find((n)=>g$.existsSync(`${c}${n}`));if(u)return`${c}${u}`;return}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let T=H._executableFile||`${this._name}-${H._name}`,b=this._executableDir||"";if(this._scriptPath){let r;try{r=g$.realpathSync(this._scriptPath)}catch{r=this._scriptPath}b=fH.resolve(fH.dirname(r),b)}if(b){let r=t(b,T);if(!r&&!H._executableFile&&this._scriptPath){let L=fH.basename(this._scriptPath,fH.extname(this._scriptPath));if(L!==this._name)r=t(b,`${L}-${H._name}`)}T=r||T}e=_.includes(fH.extname(T));let A;if(Z.platform!=="win32")if(e)$.unshift(T),$=It(Z.execArgv).concat($),A=Ce.spawn(Z.argv[0],$,{stdio:"inherit"});else A=Ce.spawn(T,$,{stdio:"inherit"});else this._checkForMissingExecutable(T,b,H._name),$.unshift(T),$=It(Z.execArgv).concat($),A=Ce.spawn(Z.execPath,$,{stdio:"inherit"});if(!A.killed)["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach((L)=>{Z.on(L,()=>{if(A.killed===!1&&A.exitCode===null)A.kill(L)})});let a=this._exitCallback;A.on("close",(r)=>{if(r=r??1,!a)Z.exit(r);else a(new Ne(r,"commander.executeSubCommandAsync","(close)"))}),A.on("error",(r)=>{if(r.code==="ENOENT")this._checkForMissingExecutable(T,b,H._name);else if(r.code==="EACCES")throw Error(`'${T}' not executable`);if(!a)Z.exit(1);else{let L=new Ne(1,"commander.executeSubCommandAsync","(error)");L.nestedError=r,a(L)}}),this.runningCommand=A}_dispatchSubcommand(H,$,e){let _=this._findCommand(H);if(!_)this.help({error:!0});_._prepareForParse();let t;return t=this._chainOrCallSubCommandHook(t,_,"preSubcommand"),t=this._chainOrCall(t,()=>{if(_._executableHandler)this._executeSubCommand(_,$.concat(e));else return _._parseCommand($,e)}),t}_dispatchHelpCommand(H){if(!H)this.help();let $=this._findCommand(H);if($&&!$._executableHandler)$.help();return this._dispatchSubcommand(H,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){if(this.registeredArguments.forEach((H,$)=>{if(H.required&&this.args[$]==null)this.missingArgument(H.name())}),this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)return;if(this.args.length>this.registeredArguments.length)this._excessArguments(this.args)}_processArguments(){let H=(e,_,t)=>{let T=_;if(_!==null&&e.parseArg){let b=`error: command-argument value '${_}' is invalid for argument '${e.name()}'.`;T=this._callParseArg(e,_,t,b)}return T};this._checkNumberOfArguments();let $=[];this.registeredArguments.forEach((e,_)=>{let t=e.defaultValue;if(e.variadic){if(_<this.args.length){if(t=this.args.slice(_),e.parseArg)t=t.reduce((T,b)=>{return H(e,b,T)},e.defaultValue)}else if(t===void 0)t=[]}else if(_<this.args.length){if(t=this.args[_],e.parseArg)t=H(e,t,e.defaultValue)}$[_]=t}),this.processedArgs=$}_chainOrCall(H,$){if(H?.then&&typeof H.then==="function")return H.then(()=>$());return $()}_chainOrCallHooks(H,$){let e=H,_=[];if(this._getCommandAndAncestors().reverse().filter((t)=>t._lifeCycleHooks[$]!==void 0).forEach((t)=>{t._lifeCycleHooks[$].forEach((T)=>{_.push({hookedCommand:t,callback:T})})}),$==="postAction")_.reverse();return _.forEach((t)=>{e=this._chainOrCall(e,()=>{return t.callback(t.hookedCommand,this)})}),e}_chainOrCallSubCommandHook(H,$,e){let _=H;if(this._lifeCycleHooks[e]!==void 0)this._lifeCycleHooks[e].forEach((t)=>{_=this._chainOrCall(_,()=>{return t(this,$)})});return _}_parseCommand(H,$){let e=this.parseOptions($);if(this._parseOptionsEnv(),this._parseOptionsImplied(),H=H.concat(e.operands),$=e.unknown,this.args=H.concat($),H&&this._findCommand(H[0]))return this._dispatchSubcommand(H[0],H.slice(1),$);if(this._getHelpCommand()&&H[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(H[1]);if(this._defaultCommandName)return this._outputHelpIfRequested($),this._dispatchSubcommand(this._defaultCommandName,H,$);if(this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName)this.help({error:!0});this._outputHelpIfRequested(e.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let _=()=>{if(e.unknown.length>0)this.unknownOption(e.unknown[0])},t=`command:${this.name()}`;if(this._actionHandler){_(),this._processArguments();let T;if(T=this._chainOrCallHooks(T,"preAction"),T=this._chainOrCall(T,()=>this._actionHandler(this.processedArgs)),this.parent)T=this._chainOrCall(T,()=>{this.parent.emit(t,H,$)});return T=this._chainOrCallHooks(T,"postAction"),T}if(this.parent?.listenerCount(t))_(),this._processArguments(),this.parent.emit(t,H,$);else if(H.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",H,$);if(this.listenerCount("command:*"))this.emit("command:*",H,$);else if(this.commands.length)this.unknownCommand();else _(),this._processArguments()}else if(this.commands.length)_(),this.help({error:!0});else _(),this._processArguments()}_findCommand(H){if(!H)return;return this.commands.find(($)=>$._name===H||$._aliases.includes(H))}_findOption(H){return this.options.find(($)=>$.is(H))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach((H)=>{H.options.forEach(($)=>{if($.mandatory&&H.getOptionValue($.attributeName())===void 0)H.missingMandatoryOptionValue($)})})}_checkForConflictingLocalOptions(){let H=this.options.filter((e)=>{let _=e.attributeName();if(this.getOptionValue(_)===void 0)return!1;return this.getOptionValueSource(_)!=="default"});H.filter((e)=>e.conflictsWith.length>0).forEach((e)=>{let _=H.find((t)=>e.conflictsWith.includes(t.attributeName()));if(_)this._conflictingOption(e,_)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach((H)=>{H._checkForConflictingLocalOptions()})}parseOptions(H){let $=[],e=[],_=$;function t(r){return r.length>1&&r[0]==="-"}let T=(r)=>{if(!/^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/.test(r))return!1;return!this._getCommandAndAncestors().some((L)=>L.options.map((c)=>c.short).some((c)=>/^-\d$/.test(c)))},b=null,A=null,a=0;while(a<H.length||A){let r=A??H[a++];if(A=null,r==="--"){if(_===e)_.push(r);_.push(...H.slice(a));break}if(b&&(!t(r)||T(r))){this.emit(`option:${b.name()}`,r);continue}if(b=null,t(r)){let L=this._findOption(r);if(L){if(L.required){let c=H[a++];if(c===void 0)this.optionMissingArgument(L);this.emit(`option:${L.name()}`,c)}else if(L.optional){let c=null;if(a<H.length&&(!t(H[a])||T(H[a])))c=H[a++];this.emit(`option:${L.name()}`,c)}else this.emit(`option:${L.name()}`);b=L.variadic?L:null;continue}}if(r.length>2&&r[0]==="-"&&r[1]!=="-"){let L=this._findOption(`-${r[1]}`);if(L){if(L.required||L.optional&&this._combineFlagAndOptionalValue)this.emit(`option:${L.name()}`,r.slice(2));else this.emit(`option:${L.name()}`),A=`-${r.slice(2)}`;continue}}if(/^--[^=]+=/.test(r)){let L=r.indexOf("="),c=this._findOption(r.slice(0,L));if(c&&(c.required||c.optional)){this.emit(`option:${c.name()}`,r.slice(L+1));continue}}if(_===$&&t(r)&&!(this.commands.length===0&&T(r)))_=e;if((this._enablePositionalOptions||this._passThroughOptions)&&$.length===0&&e.length===0){if(this._findCommand(r)){$.push(r),e.push(...H.slice(a));break}else if(this._getHelpCommand()&&r===this._getHelpCommand().name()){$.push(r,...H.slice(a));break}else if(this._defaultCommandName){e.push(r,...H.slice(a));break}}if(this._passThroughOptions){_.push(r,...H.slice(a));break}_.push(r)}return{operands:$,unknown:e}}opts(){if(this._storeOptionsAsProperties){let H={},$=this.options.length;for(let e=0;e<$;e++){let _=this.options[e].attributeName();H[_]=_===this._versionOptionName?this._version:this[_]}return H}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((H,$)=>Object.assign(H,$.opts()),{})}error(H,$){if(this._outputConfiguration.outputError(`${H}
21
+ - ${_}`;throw Error(t)}_executeSubCommand(H,$){$=$.slice();let e=!1,_=[".js",".ts",".tsx",".mjs",".cjs"];function t(r,L){let c=fH.resolve(r,L);if(g$.existsSync(c))return c;if(_.includes(fH.extname(L)))return;let u=_.find((n)=>g$.existsSync(`${c}${n}`));if(u)return`${c}${u}`;return}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let T=H._executableFile||`${this._name}-${H._name}`,b=this._executableDir||"";if(this._scriptPath){let r;try{r=g$.realpathSync(this._scriptPath)}catch{r=this._scriptPath}b=fH.resolve(fH.dirname(r),b)}if(b){let r=t(b,T);if(!r&&!H._executableFile&&this._scriptPath){let L=fH.basename(this._scriptPath,fH.extname(this._scriptPath));if(L!==this._name)r=t(b,`${L}-${H._name}`)}T=r||T}e=_.includes(fH.extname(T));let A;if(Z.platform!=="win32")if(e)$.unshift(T),$=Dt(Z.execArgv).concat($),A=Ce.spawn(Z.argv[0],$,{stdio:"inherit"});else A=Ce.spawn(T,$,{stdio:"inherit"});else this._checkForMissingExecutable(T,b,H._name),$.unshift(T),$=Dt(Z.execArgv).concat($),A=Ce.spawn(Z.execPath,$,{stdio:"inherit"});if(!A.killed)["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach((L)=>{Z.on(L,()=>{if(A.killed===!1&&A.exitCode===null)A.kill(L)})});let a=this._exitCallback;A.on("close",(r)=>{if(r=r??1,!a)Z.exit(r);else a(new Ne(r,"commander.executeSubCommandAsync","(close)"))}),A.on("error",(r)=>{if(r.code==="ENOENT")this._checkForMissingExecutable(T,b,H._name);else if(r.code==="EACCES")throw Error(`'${T}' not executable`);if(!a)Z.exit(1);else{let L=new Ne(1,"commander.executeSubCommandAsync","(error)");L.nestedError=r,a(L)}}),this.runningCommand=A}_dispatchSubcommand(H,$,e){let _=this._findCommand(H);if(!_)this.help({error:!0});_._prepareForParse();let t;return t=this._chainOrCallSubCommandHook(t,_,"preSubcommand"),t=this._chainOrCall(t,()=>{if(_._executableHandler)this._executeSubCommand(_,$.concat(e));else return _._parseCommand($,e)}),t}_dispatchHelpCommand(H){if(!H)this.help();let $=this._findCommand(H);if($&&!$._executableHandler)$.help();return this._dispatchSubcommand(H,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){if(this.registeredArguments.forEach((H,$)=>{if(H.required&&this.args[$]==null)this.missingArgument(H.name())}),this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)return;if(this.args.length>this.registeredArguments.length)this._excessArguments(this.args)}_processArguments(){let H=(e,_,t)=>{let T=_;if(_!==null&&e.parseArg){let b=`error: command-argument value '${_}' is invalid for argument '${e.name()}'.`;T=this._callParseArg(e,_,t,b)}return T};this._checkNumberOfArguments();let $=[];this.registeredArguments.forEach((e,_)=>{let t=e.defaultValue;if(e.variadic){if(_<this.args.length){if(t=this.args.slice(_),e.parseArg)t=t.reduce((T,b)=>{return H(e,b,T)},e.defaultValue)}else if(t===void 0)t=[]}else if(_<this.args.length){if(t=this.args[_],e.parseArg)t=H(e,t,e.defaultValue)}$[_]=t}),this.processedArgs=$}_chainOrCall(H,$){if(H?.then&&typeof H.then==="function")return H.then(()=>$());return $()}_chainOrCallHooks(H,$){let e=H,_=[];if(this._getCommandAndAncestors().reverse().filter((t)=>t._lifeCycleHooks[$]!==void 0).forEach((t)=>{t._lifeCycleHooks[$].forEach((T)=>{_.push({hookedCommand:t,callback:T})})}),$==="postAction")_.reverse();return _.forEach((t)=>{e=this._chainOrCall(e,()=>{return t.callback(t.hookedCommand,this)})}),e}_chainOrCallSubCommandHook(H,$,e){let _=H;if(this._lifeCycleHooks[e]!==void 0)this._lifeCycleHooks[e].forEach((t)=>{_=this._chainOrCall(_,()=>{return t(this,$)})});return _}_parseCommand(H,$){let e=this.parseOptions($);if(this._parseOptionsEnv(),this._parseOptionsImplied(),H=H.concat(e.operands),$=e.unknown,this.args=H.concat($),H&&this._findCommand(H[0]))return this._dispatchSubcommand(H[0],H.slice(1),$);if(this._getHelpCommand()&&H[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(H[1]);if(this._defaultCommandName)return this._outputHelpIfRequested($),this._dispatchSubcommand(this._defaultCommandName,H,$);if(this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName)this.help({error:!0});this._outputHelpIfRequested(e.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let _=()=>{if(e.unknown.length>0)this.unknownOption(e.unknown[0])},t=`command:${this.name()}`;if(this._actionHandler){_(),this._processArguments();let T;if(T=this._chainOrCallHooks(T,"preAction"),T=this._chainOrCall(T,()=>this._actionHandler(this.processedArgs)),this.parent)T=this._chainOrCall(T,()=>{this.parent.emit(t,H,$)});return T=this._chainOrCallHooks(T,"postAction"),T}if(this.parent?.listenerCount(t))_(),this._processArguments(),this.parent.emit(t,H,$);else if(H.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",H,$);if(this.listenerCount("command:*"))this.emit("command:*",H,$);else if(this.commands.length)this.unknownCommand();else _(),this._processArguments()}else if(this.commands.length)_(),this.help({error:!0});else _(),this._processArguments()}_findCommand(H){if(!H)return;return this.commands.find(($)=>$._name===H||$._aliases.includes(H))}_findOption(H){return this.options.find(($)=>$.is(H))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach((H)=>{H.options.forEach(($)=>{if($.mandatory&&H.getOptionValue($.attributeName())===void 0)H.missingMandatoryOptionValue($)})})}_checkForConflictingLocalOptions(){let H=this.options.filter((e)=>{let _=e.attributeName();if(this.getOptionValue(_)===void 0)return!1;return this.getOptionValueSource(_)!=="default"});H.filter((e)=>e.conflictsWith.length>0).forEach((e)=>{let _=H.find((t)=>e.conflictsWith.includes(t.attributeName()));if(_)this._conflictingOption(e,_)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach((H)=>{H._checkForConflictingLocalOptions()})}parseOptions(H){let $=[],e=[],_=$;function t(r){return r.length>1&&r[0]==="-"}let T=(r)=>{if(!/^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/.test(r))return!1;return!this._getCommandAndAncestors().some((L)=>L.options.map((c)=>c.short).some((c)=>/^-\d$/.test(c)))},b=null,A=null,a=0;while(a<H.length||A){let r=A??H[a++];if(A=null,r==="--"){if(_===e)_.push(r);_.push(...H.slice(a));break}if(b&&(!t(r)||T(r))){this.emit(`option:${b.name()}`,r);continue}if(b=null,t(r)){let L=this._findOption(r);if(L){if(L.required){let c=H[a++];if(c===void 0)this.optionMissingArgument(L);this.emit(`option:${L.name()}`,c)}else if(L.optional){let c=null;if(a<H.length&&(!t(H[a])||T(H[a])))c=H[a++];this.emit(`option:${L.name()}`,c)}else this.emit(`option:${L.name()}`);b=L.variadic?L:null;continue}}if(r.length>2&&r[0]==="-"&&r[1]!=="-"){let L=this._findOption(`-${r[1]}`);if(L){if(L.required||L.optional&&this._combineFlagAndOptionalValue)this.emit(`option:${L.name()}`,r.slice(2));else this.emit(`option:${L.name()}`),A=`-${r.slice(2)}`;continue}}if(/^--[^=]+=/.test(r)){let L=r.indexOf("="),c=this._findOption(r.slice(0,L));if(c&&(c.required||c.optional)){this.emit(`option:${c.name()}`,r.slice(L+1));continue}}if(_===$&&t(r)&&!(this.commands.length===0&&T(r)))_=e;if((this._enablePositionalOptions||this._passThroughOptions)&&$.length===0&&e.length===0){if(this._findCommand(r)){$.push(r),e.push(...H.slice(a));break}else if(this._getHelpCommand()&&r===this._getHelpCommand().name()){$.push(r,...H.slice(a));break}else if(this._defaultCommandName){e.push(r,...H.slice(a));break}}if(this._passThroughOptions){_.push(r,...H.slice(a));break}_.push(r)}return{operands:$,unknown:e}}opts(){if(this._storeOptionsAsProperties){let H={},$=this.options.length;for(let e=0;e<$;e++){let _=this.options[e].attributeName();H[_]=_===this._versionOptionName?this._version:this[_]}return H}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((H,$)=>Object.assign(H,$.opts()),{})}error(H,$){if(this._outputConfiguration.outputError(`${H}
22
22
  `,this._outputConfiguration.writeErr),typeof this._showHelpAfterError==="string")this._outputConfiguration.writeErr(`${this._showHelpAfterError}
23
23
  `);else if(this._showHelpAfterError)this._outputConfiguration.writeErr(`
24
- `),this.outputHelp({error:!0});let e=$||{},_=e.exitCode||1,t=e.code||"commander.error";this._exit(_,t,H)}_parseOptionsEnv(){this.options.forEach((H)=>{if(H.envVar&&H.envVar in Z.env){let $=H.attributeName();if(this.getOptionValue($)===void 0||["default","config","env"].includes(this.getOptionValueSource($)))if(H.required||H.optional)this.emit(`optionEnv:${H.name()}`,Z.env[H.envVar]);else this.emit(`optionEnv:${H.name()}`)}})}_parseOptionsImplied(){let H=new yL(this.options),$=(e)=>{return this.getOptionValue(e)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(e))};this.options.filter((e)=>e.implied!==void 0&&$(e.attributeName())&&H.valueFromOption(this.getOptionValue(e.attributeName()),e)).forEach((e)=>{Object.keys(e.implied).filter((_)=>!$(_)).forEach((_)=>{this.setOptionValueWithSource(_,e.implied[_],"implied")})})}missingArgument(H){let $=`error: missing required argument '${H}'`;this.error($,{code:"commander.missingArgument"})}optionMissingArgument(H){let $=`error: option '${H.flags}' argument missing`;this.error($,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(H){let $=`error: required option '${H.flags}' not specified`;this.error($,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(H,$){let e=(T)=>{let b=T.attributeName(),A=this.getOptionValue(b),a=this.options.find((L)=>L.negate&&b===L.attributeName()),r=this.options.find((L)=>!L.negate&&b===L.attributeName());if(a&&(a.presetArg===void 0&&A===!1||a.presetArg!==void 0&&A===a.presetArg))return a;return r||T},_=(T)=>{let b=e(T),A=b.attributeName();if(this.getOptionValueSource(A)==="env")return`environment variable '${b.envVar}'`;return`option '${b.flags}'`},t=`error: ${_(H)} cannot be used with ${_($)}`;this.error(t,{code:"commander.conflictingOption"})}unknownOption(H){if(this._allowUnknownOption)return;let $="";if(H.startsWith("--")&&this._showSuggestionAfterError){let _=[],t=this;do{let T=t.createHelp().visibleOptions(t).filter((b)=>b.long).map((b)=>b.long);_=_.concat(T),t=t.parent}while(t&&!t._enablePositionalOptions);$=nt(H,_)}let e=`error: unknown option '${H}'${$}`;this.error(e,{code:"commander.unknownOption"})}_excessArguments(H){if(this._allowExcessArguments)return;let $=this.registeredArguments.length,e=$===1?"":"s",t=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${$} argument${e} but got ${H.length}.`;this.error(t,{code:"commander.excessArguments"})}unknownCommand(){let H=this.args[0],$="";if(this._showSuggestionAfterError){let _=[];this.createHelp().visibleCommands(this).forEach((t)=>{if(_.push(t.name()),t.alias())_.push(t.alias())}),$=nt(H,_)}let e=`error: unknown command '${H}'${$}`;this.error(e,{code:"commander.unknownCommand"})}version(H,$,e){if(H===void 0)return this._version;this._version=H,$=$||"-V, --version",e=e||"output the version number";let _=this.createOption($,e);return this._versionOptionName=_.attributeName(),this._registerOption(_),this.on("option:"+_.name(),()=>{this._outputConfiguration.writeOut(`${H}
25
- `),this._exit(0,"commander.version",H)}),this}description(H,$){if(H===void 0&&$===void 0)return this._description;if(this._description=H,$)this._argsDescription=$;return this}summary(H){if(H===void 0)return this._summary;return this._summary=H,this}alias(H){if(H===void 0)return this._aliases[0];let $=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)$=this.commands[this.commands.length-1];if(H===$._name)throw Error("Command alias can't be the same as its name");let e=this.parent?._findCommand(H);if(e){let _=[e.name()].concat(e.aliases()).join("|");throw Error(`cannot add alias '${H}' to command '${this.name()}' as already have command '${_}'`)}return $._aliases.push(H),this}aliases(H){if(H===void 0)return this._aliases;return H.forEach(($)=>this.alias($)),this}usage(H){if(H===void 0){if(this._usage)return this._usage;let $=this.registeredArguments.map((e)=>{return qL(e)});return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?$:[]).join(" ")}return this._usage=H,this}name(H){if(H===void 0)return this._name;return this._name=H,this}helpGroup(H){if(H===void 0)return this._helpGroupHeading??"";return this._helpGroupHeading=H,this}commandsGroup(H){if(H===void 0)return this._defaultCommandGroup??"";return this._defaultCommandGroup=H,this}optionsGroup(H){if(H===void 0)return this._defaultOptionGroup??"";return this._defaultOptionGroup=H,this}_initOptionGroup(H){if(this._defaultOptionGroup&&!H.helpGroupHeading)H.helpGroup(this._defaultOptionGroup)}_initCommandGroup(H){if(this._defaultCommandGroup&&!H.helpGroup())H.helpGroup(this._defaultCommandGroup)}nameFromFilename(H){return this._name=fH.basename(H,fH.extname(H)),this}executableDir(H){if(H===void 0)return this._executableDir;return this._executableDir=H,this}helpInformation(H){let $=this.createHelp(),e=this._getOutputContext(H);$.prepareContext({error:e.error,helpWidth:e.helpWidth,outputHasColors:e.hasColors});let _=$.formatHelp(this,$);if(e.hasColors)return _;return this._outputConfiguration.stripColor(_)}_getOutputContext(H){H=H||{};let $=!!H.error,e,_,t;if($)e=(b)=>this._outputConfiguration.writeErr(b),_=this._outputConfiguration.getErrHasColors(),t=this._outputConfiguration.getErrHelpWidth();else e=(b)=>this._outputConfiguration.writeOut(b),_=this._outputConfiguration.getOutHasColors(),t=this._outputConfiguration.getOutHelpWidth();return{error:$,write:(b)=>{if(!_)b=this._outputConfiguration.stripColor(b);return e(b)},hasColors:_,helpWidth:t}}outputHelp(H){let $;if(typeof H==="function")$=H,H=void 0;let e=this._getOutputContext(H),_={error:e.error,write:e.write,command:this};this._getCommandAndAncestors().reverse().forEach((T)=>T.emit("beforeAllHelp",_)),this.emit("beforeHelp",_);let t=this.helpInformation({error:e.error});if($){if(t=$(t),typeof t!=="string"&&!Buffer.isBuffer(t))throw Error("outputHelp callback must return a string or a Buffer")}if(e.write(t),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",_),this._getCommandAndAncestors().forEach((T)=>T.emit("afterAllHelp",_))}helpOption(H,$){if(typeof H==="boolean"){if(H){if(this._helpOption===null)this._helpOption=void 0;if(this._defaultOptionGroup)this._initOptionGroup(this._getHelpOption())}else this._helpOption=null;return this}if(this._helpOption=this.createOption(H??"-h, --help",$??"display help for command"),H||$)this._initOptionGroup(this._helpOption);return this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption(H){return this._helpOption=H,this._initOptionGroup(H),this}help(H){this.outputHelp(H);let $=Number(Z.exitCode??0);if($===0&&H&&typeof H!=="function"&&H.error)$=1;this._exit($,"commander.help","(outputHelp)")}addHelpText(H,$){let e=["beforeAll","before","after","afterAll"];if(!e.includes(H))throw Error(`Unexpected value for position to addHelpText.
24
+ `),this.outputHelp({error:!0});let e=$||{},_=e.exitCode||1,t=e.code||"commander.error";this._exit(_,t,H)}_parseOptionsEnv(){this.options.forEach((H)=>{if(H.envVar&&H.envVar in Z.env){let $=H.attributeName();if(this.getOptionValue($)===void 0||["default","config","env"].includes(this.getOptionValueSource($)))if(H.required||H.optional)this.emit(`optionEnv:${H.name()}`,Z.env[H.envVar]);else this.emit(`optionEnv:${H.name()}`)}})}_parseOptionsImplied(){let H=new WL(this.options),$=(e)=>{return this.getOptionValue(e)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(e))};this.options.filter((e)=>e.implied!==void 0&&$(e.attributeName())&&H.valueFromOption(this.getOptionValue(e.attributeName()),e)).forEach((e)=>{Object.keys(e.implied).filter((_)=>!$(_)).forEach((_)=>{this.setOptionValueWithSource(_,e.implied[_],"implied")})})}missingArgument(H){let $=`error: missing required argument '${H}'`;this.error($,{code:"commander.missingArgument"})}optionMissingArgument(H){let $=`error: option '${H.flags}' argument missing`;this.error($,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(H){let $=`error: required option '${H.flags}' not specified`;this.error($,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(H,$){let e=(T)=>{let b=T.attributeName(),A=this.getOptionValue(b),a=this.options.find((L)=>L.negate&&b===L.attributeName()),r=this.options.find((L)=>!L.negate&&b===L.attributeName());if(a&&(a.presetArg===void 0&&A===!1||a.presetArg!==void 0&&A===a.presetArg))return a;return r||T},_=(T)=>{let b=e(T),A=b.attributeName();if(this.getOptionValueSource(A)==="env")return`environment variable '${b.envVar}'`;return`option '${b.flags}'`},t=`error: ${_(H)} cannot be used with ${_($)}`;this.error(t,{code:"commander.conflictingOption"})}unknownOption(H){if(this._allowUnknownOption)return;let $="";if(H.startsWith("--")&&this._showSuggestionAfterError){let _=[],t=this;do{let T=t.createHelp().visibleOptions(t).filter((b)=>b.long).map((b)=>b.long);_=_.concat(T),t=t.parent}while(t&&!t._enablePositionalOptions);$=It(H,_)}let e=`error: unknown option '${H}'${$}`;this.error(e,{code:"commander.unknownOption"})}_excessArguments(H){if(this._allowExcessArguments)return;let $=this.registeredArguments.length,e=$===1?"":"s",t=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${$} argument${e} but got ${H.length}.`;this.error(t,{code:"commander.excessArguments"})}unknownCommand(){let H=this.args[0],$="";if(this._showSuggestionAfterError){let _=[];this.createHelp().visibleCommands(this).forEach((t)=>{if(_.push(t.name()),t.alias())_.push(t.alias())}),$=It(H,_)}let e=`error: unknown command '${H}'${$}`;this.error(e,{code:"commander.unknownCommand"})}version(H,$,e){if(H===void 0)return this._version;this._version=H,$=$||"-V, --version",e=e||"output the version number";let _=this.createOption($,e);return this._versionOptionName=_.attributeName(),this._registerOption(_),this.on("option:"+_.name(),()=>{this._outputConfiguration.writeOut(`${H}
25
+ `),this._exit(0,"commander.version",H)}),this}description(H,$){if(H===void 0&&$===void 0)return this._description;if(this._description=H,$)this._argsDescription=$;return this}summary(H){if(H===void 0)return this._summary;return this._summary=H,this}alias(H){if(H===void 0)return this._aliases[0];let $=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)$=this.commands[this.commands.length-1];if(H===$._name)throw Error("Command alias can't be the same as its name");let e=this.parent?._findCommand(H);if(e){let _=[e.name()].concat(e.aliases()).join("|");throw Error(`cannot add alias '${H}' to command '${this.name()}' as already have command '${_}'`)}return $._aliases.push(H),this}aliases(H){if(H===void 0)return this._aliases;return H.forEach(($)=>this.alias($)),this}usage(H){if(H===void 0){if(this._usage)return this._usage;let $=this.registeredArguments.map((e)=>{return PL(e)});return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?$:[]).join(" ")}return this._usage=H,this}name(H){if(H===void 0)return this._name;return this._name=H,this}helpGroup(H){if(H===void 0)return this._helpGroupHeading??"";return this._helpGroupHeading=H,this}commandsGroup(H){if(H===void 0)return this._defaultCommandGroup??"";return this._defaultCommandGroup=H,this}optionsGroup(H){if(H===void 0)return this._defaultOptionGroup??"";return this._defaultOptionGroup=H,this}_initOptionGroup(H){if(this._defaultOptionGroup&&!H.helpGroupHeading)H.helpGroup(this._defaultOptionGroup)}_initCommandGroup(H){if(this._defaultCommandGroup&&!H.helpGroup())H.helpGroup(this._defaultCommandGroup)}nameFromFilename(H){return this._name=fH.basename(H,fH.extname(H)),this}executableDir(H){if(H===void 0)return this._executableDir;return this._executableDir=H,this}helpInformation(H){let $=this.createHelp(),e=this._getOutputContext(H);$.prepareContext({error:e.error,helpWidth:e.helpWidth,outputHasColors:e.hasColors});let _=$.formatHelp(this,$);if(e.hasColors)return _;return this._outputConfiguration.stripColor(_)}_getOutputContext(H){H=H||{};let $=!!H.error,e,_,t;if($)e=(b)=>this._outputConfiguration.writeErr(b),_=this._outputConfiguration.getErrHasColors(),t=this._outputConfiguration.getErrHelpWidth();else e=(b)=>this._outputConfiguration.writeOut(b),_=this._outputConfiguration.getOutHasColors(),t=this._outputConfiguration.getOutHelpWidth();return{error:$,write:(b)=>{if(!_)b=this._outputConfiguration.stripColor(b);return e(b)},hasColors:_,helpWidth:t}}outputHelp(H){let $;if(typeof H==="function")$=H,H=void 0;let e=this._getOutputContext(H),_={error:e.error,write:e.write,command:this};this._getCommandAndAncestors().reverse().forEach((T)=>T.emit("beforeAllHelp",_)),this.emit("beforeHelp",_);let t=this.helpInformation({error:e.error});if($){if(t=$(t),typeof t!=="string"&&!Buffer.isBuffer(t))throw Error("outputHelp callback must return a string or a Buffer")}if(e.write(t),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",_),this._getCommandAndAncestors().forEach((T)=>T.emit("afterAllHelp",_))}helpOption(H,$){if(typeof H==="boolean"){if(H){if(this._helpOption===null)this._helpOption=void 0;if(this._defaultOptionGroup)this._initOptionGroup(this._getHelpOption())}else this._helpOption=null;return this}if(this._helpOption=this.createOption(H??"-h, --help",$??"display help for command"),H||$)this._initOptionGroup(this._helpOption);return this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption(H){return this._helpOption=H,this._initOptionGroup(H),this}help(H){this.outputHelp(H);let $=Number(Z.exitCode??0);if($===0&&H&&typeof H!=="function"&&H.error)$=1;this._exit($,"commander.help","(outputHelp)")}addHelpText(H,$){let e=["beforeAll","before","after","afterAll"];if(!e.includes(H))throw Error(`Unexpected value for position to addHelpText.
26
26
  Expecting one of '${e.join("', '")}'`);let _=`${H}Help`;return this.on(_,(t)=>{let T;if(typeof $==="function")T=$({error:t.error,command:t.command});else T=$;if(T)t.write(`${T}
27
- `)}),this}_outputHelpIfRequested(H){let $=this._getHelpOption();if($&&H.find((_)=>$.is(_)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function It(H){return H.map(($)=>{if(!$.startsWith("--inspect"))return $;let e,_="127.0.0.1",t="9229",T;if((T=$.match(/^(--inspect(-brk)?)$/))!==null)e=T[1];else if((T=$.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(e=T[1],/^\d+$/.test(T[3]))t=T[3];else _=T[3];else if((T=$.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)e=T[1],_=T[3],t=T[4];if(e&&t!=="0")return`${e}=${_}:${parseInt(t)+1}`;return $})}function de(){if(Z.env.NO_COLOR||Z.env.FORCE_COLOR==="0"||Z.env.FORCE_COLOR==="false")return!1;if(Z.env.FORCE_COLOR||Z.env.CLICOLOR_FORCE!==void 0)return!0;return}WL.Command=le;WL.useColor=de});var Nt=$H((wL)=>{var{Argument:ft}=G$(),{Command:pe}=Dt(),{CommanderError:UL,InvalidArgumentError:Et}=c$(),{Help:JL}=fe(),{Option:Ct}=Ee();wL.program=new pe;wL.createCommand=(H)=>new pe(H);wL.createOption=(H,$)=>new Ct(H,$);wL.createArgument=(H,$)=>new ft(H,$);wL.Command=pe;wL.Option=Ct;wL.Argument=ft;wL.Help=JL;wL.CommanderError=UL;wL.InvalidArgumentError=Et;wL.InvalidOptionArgumentError=Et});import{fileURLToPath as La}from"url";import{dirname as aa}from"path";import{createServer as ra}from"http";import{createServer as Aa}from"net";function P$(H){return aa(La(H))}function mH(H){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,H)}async function Ot(H){return new Promise(($)=>{let e=Aa();e.once("error",()=>$(!1)),e.once("listening",()=>e.close(()=>$(!0))),e.listen(H)})}async function Mt(H){let $=ra((e,_)=>{H.middleware(e,_,()=>{if(!_.headersSent)_.statusCode=404;_.end("Not found")})});return $.on("upgrade",(e,_,t)=>{if(!H.middleware.handleUpgrade?.(e,_,t))_.destroy()}),$.keepAliveTimeout=0,$.headersTimeout=0,$.requestTimeout=0,$.timeout=0,await new Promise((e,_)=>{let t=(b)=>{$.removeListener("listening",T),_(b)},T=()=>{$.removeListener("error",t),e()};$.once("error",t),$.once("listening",T),$.listen(H.port,H.host??"127.0.0.1")}),{stop:()=>$.close()}}var x$=()=>{};import{execSync as gt}from"child_process";function aH(){try{let H=gt("xcrun simctl list devices booted -j",{encoding:"utf-8"}),$=JSON.parse(H),e=null;for(let[_,t]of Object.entries($.devices))for(let T of t){if(T.state!=="Booted")continue;if(/iOS/i.test(_))return T.udid;e??=T.udid}return e}catch{}return null}function eH(H){if(/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(H))return H;try{let $=gt("xcrun simctl list devices -j",{encoding:"utf-8"}),e=JSON.parse($);for(let _ of Object.values(e.devices))for(let t of _)if(t.name.toLowerCase()===H.toLowerCase())return t.udid}catch{}console.error(`Could not resolve device: ${H}`),process.exit(1)}var y$=()=>{};import{execFile as Ga}from"child_process";import{existsSync as Ut}from"fs";import{join as ke,resolve as ga}from"path";function qe(H,$){let e=CH[H];if(!e)return null;let _=$.toLowerCase();if(e.toggle){if(ma.has(_))return"on";if(qa.has(_))return"off";return null}let t=e.aliases?.[_]??_;if(e.values.includes(t))return t;if(e.extraValues?.includes(t))return t;return null}function Pa(H){let $=[],e,_=!1;for(let b=0;b<H.length;b++){let A=H[b];if(A==="-d"||A==="--device"){if(b+1>=H.length)return{command:"get",json:_,error:`${A} requires a value`};e=H[++b]}else if(A==="--json")_=!0;else $.push(A)}if($.length===0||$[0]==="status")return{command:"status",json:_,...e?{device:e}:{}};let t=$[0].toLowerCase();if(!CH[t])return{command:"get",json:_,error:`unknown option: ${t}`};if($.length===1)return{command:"get",option:t,json:_,...e?{device:e}:{}};let T=qe(t,$[1]);if(T===null){let b=CH[t],A=[...b.values,...b.extraValues??[]].join("|");return{command:"set",option:t,json:_,error:`invalid value for ${t}: ${$[1]} (accepted: ${A})`}}return{command:"set",option:t,value:T,json:_,...e?{device:e}:{}}}function Ft(){let H=[ke(me,"..","dist","simax","serve-sim-ax-settings"),ke(me,"simax","serve-sim-ax-settings")];for(let $ of H)if(Ut($))return ga($);return null}function xa(){return W$??=(async()=>{let H=Ft();if(H)return H;let $=ke(me,"..","Sources","SimAXSettings","build.sh");if(!Ut($))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 Pe("bash",[$]);let e=Ft();if(!e)throw Error("Build succeeded but sim-ax-settings not found.");return e})(),W$.catch(()=>{W$=null}),W$}function Pe(H,$){return new Promise((e,_)=>{Ga(H,$,{encoding:"utf-8",maxBuffer:4194304},(t,T,b)=>{if(t)_(Error(String(b).trim()||t.message));else e(String(T).trim())})})}function wt(H,$,e){let _=["simctl","ui",H,$];if(e!==void 0)_.push(e);return Pe("xcrun",_)}async function xe(H,...$){let e=await xa();return Pe("xcrun",["simctl","spawn",H,e,...$])}function ya(H){return H==="enabled"?"on":"off"}function Wa(H){return H==="on"?"enabled":"disabled"}async function Xt(H,$){let e=CH[$];if(!e)throw Error(`unknown option: ${$}`);if(e.via==="ax")return xe(H,"get",$);let _=(await wt(H,e.via)).toLowerCase();return e.toggle?ya(_):_}async function ye(H,$,e){let _=CH[$];if(!_)throw Error(`unknown option: ${$}`);if(_.via==="ax"){await xe(H,"set",$,e);return}await wt(H,_.via,_.toggle?Wa(e):e)}async function We(H){let $=Object.entries(CH).filter(([,T])=>T.via!=="ax"),[e,..._]=await Promise.all([xe(H,"status").then((T)=>JSON.parse(T)).catch(()=>({})),...$.map(([T])=>Xt(H,T).catch(()=>"unsupported"))]),t={};for(let[T,b]of Object.entries(CH))if(b.via==="ax")t[T]=e[T]??"unsupported";return $.forEach(([T],b)=>{t[T]=_[b]}),t}async function Kt(H){if(H.includes("-h")||H.includes("--help")){console.log(Zt);return}let $=Pa(H);if($.error)console.error($.error),console.error(Zt),process.exit(1);let e=$.device?eH($.device):aH();if(!e)console.error("No booted simulator found. Boot one or pass -d <udid>."),process.exit(1);if($.command==="status"){let _=await We(e);if($.json)console.log(JSON.stringify(_));else for(let[t,T]of Object.entries(_))console.log(`${t.padEnd(20)} ${T}`);return}if($.command==="get"){console.log(await Xt(e,$.option));return}await ye(e,$.option,$.value)}var me,Jt,Sa,ka,s$,ma,qa,CH,W$=null,Zt;var Fe=DH(()=>{y$();x$();me=P$(import.meta.url),Jt=["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"],Sa=["none","grayscale","red-green","green-red","blue-yellow"],ka={protanopia:"red-green",deuteranopia:"green-red",tritanopia:"blue-yellow"},s$=["on","off"],ma=new Set(["on","true","enabled","1","yes"]),qa=new Set(["off","false","disabled","0","no"]),CH={appearance:{via:"appearance",values:["light","dark"]},"liquid-glass":{via:"ax",values:["clear","tinted"]},"color-filter":{via:"ax",values:Sa,aliases:ka},"text-size":{via:"content_size",values:Jt,extraValues:["increment","decrement"]},"reduce-motion":{via:"ax",values:s$,toggle:!0},"increase-contrast":{via:"increase_contrast",values:s$,toggle:!0},"show-borders":{via:"ax",values:s$,toggle:!0},"reduce-transparency":{via:"ax",values:s$,toggle:!0},voiceover:{via:"ax",values:s$,toggle:!0}};Zt=`Usage: serve-sim ui [status] [--json] [-d udid]
27
+ `)}),this}_outputHelpIfRequested(H){let $=this._getHelpOption();if($&&H.find((_)=>$.is(_)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function Dt(H){return H.map(($)=>{if(!$.startsWith("--inspect"))return $;let e,_="127.0.0.1",t="9229",T;if((T=$.match(/^(--inspect(-brk)?)$/))!==null)e=T[1];else if((T=$.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(e=T[1],/^\d+$/.test(T[3]))t=T[3];else _=T[3];else if((T=$.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)e=T[1],_=T[3],t=T[4];if(e&&t!=="0")return`${e}=${_}:${parseInt(t)+1}`;return $})}function de(){if(Z.env.NO_COLOR||Z.env.FORCE_COLOR==="0"||Z.env.FORCE_COLOR==="false")return!1;if(Z.env.FORCE_COLOR||Z.env.CLICOLOR_FORCE!==void 0)return!0;return}FL.Command=le;FL.useColor=de});var dt=$H((XL)=>{var{Argument:Et}=G$(),{Command:pe}=ft(),{CommanderError:JL,InvalidArgumentError:Ct}=c$(),{Help:wL}=fe(),{Option:Nt}=Ee();XL.program=new pe;XL.createCommand=(H)=>new pe(H);XL.createOption=(H,$)=>new Nt(H,$);XL.createArgument=(H,$)=>new Et(H,$);XL.Command=pe;XL.Option=Nt;XL.Argument=Et;XL.Help=wL;XL.CommanderError=JL;XL.InvalidArgumentError=Ct;XL.InvalidOptionArgumentError=Ct});import{fileURLToPath as aa}from"url";import{dirname as ra}from"path";import{createServer as Aa}from"http";import{createServer as oa}from"net";function P$(H){return ra(aa(H))}function mH(H){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,H)}async function Mt(H){return new Promise(($)=>{let e=oa();e.once("error",()=>$(!1)),e.once("listening",()=>e.close(()=>$(!0))),e.listen(H)})}async function Gt(H){let $=Aa((e,_)=>{H.middleware(e,_,()=>{if(!_.headersSent)_.statusCode=404;_.end("Not found")})});return $.on("upgrade",(e,_,t)=>{if(!H.middleware.handleUpgrade?.(e,_,t))_.destroy()}),$.keepAliveTimeout=0,$.headersTimeout=0,$.requestTimeout=0,$.timeout=0,await new Promise((e,_)=>{let t=(b)=>{$.removeListener("listening",T),_(b)},T=()=>{$.removeListener("error",t),e()};$.once("error",t),$.once("listening",T),$.listen(H.port,H.host??"127.0.0.1")}),{stop:()=>$.close()}}var x$=()=>{};import{execSync as St}from"child_process";function aH(){try{let H=St("xcrun simctl list devices booted -j",{encoding:"utf-8"}),$=JSON.parse(H),e=null;for(let[_,t]of Object.entries($.devices))for(let T of t){if(T.state!=="Booted")continue;if(/iOS/i.test(_))return T.udid;e??=T.udid}return e}catch{}return null}function eH(H){if(/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(H))return H;try{let $=St("xcrun simctl list devices -j",{encoding:"utf-8"}),e=JSON.parse($);for(let _ of Object.values(e.devices))for(let t of _)if(t.name.toLowerCase()===H.toLowerCase())return t.udid}catch{}console.error(`Could not resolve device: ${H}`),process.exit(1)}var y$=()=>{};import{execFile as ga}from"child_process";import{existsSync as Jt}from"fs";import{join as ke,resolve as Sa}from"path";function qe(H,$){let e=CH[H];if(!e)return null;let _=$.toLowerCase();if(e.toggle){if(qa.has(_))return"on";if(Pa.has(_))return"off";return null}let t=e.aliases?.[_]??_;if(e.values.includes(t))return t;if(e.extraValues?.includes(t))return t;return null}function xa(H){let $=[],e,_=!1;for(let b=0;b<H.length;b++){let A=H[b];if(A==="-d"||A==="--device"){if(b+1>=H.length)return{command:"get",json:_,error:`${A} requires a value`};e=H[++b]}else if(A==="--json")_=!0;else $.push(A)}if($.length===0||$[0]==="status")return{command:"status",json:_,...e?{device:e}:{}};let t=$[0].toLowerCase();if(!CH[t])return{command:"get",json:_,error:`unknown option: ${t}`};if($.length===1)return{command:"get",option:t,json:_,...e?{device:e}:{}};let T=qe(t,$[1]);if(T===null){let b=CH[t],A=[...b.values,...b.extraValues??[]].join("|");return{command:"set",option:t,json:_,error:`invalid value for ${t}: ${$[1]} (accepted: ${A})`}}return{command:"set",option:t,value:T,json:_,...e?{device:e}:{}}}function Zt(){let H=[ke(me,"..","dist","simax","serve-sim-ax-settings"),ke(me,"simax","serve-sim-ax-settings")];for(let $ of H)if(Jt($))return Sa($);return null}function ya(){return W$??=(async()=>{let H=Zt();if(H)return H;let $=ke(me,"..","Sources","SimAXSettings","build.sh");if(!Jt($))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 Pe("bash",[$]);let e=Zt();if(!e)throw Error("Build succeeded but sim-ax-settings not found.");return e})(),W$.catch(()=>{W$=null}),W$}function Pe(H,$){return new Promise((e,_)=>{ga(H,$,{encoding:"utf-8",maxBuffer:4194304},(t,T,b)=>{if(t)_(Error(String(b).trim()||t.message));else e(String(T).trim())})})}function Xt(H,$,e){let _=["simctl","ui",H,$];if(e!==void 0)_.push(e);return Pe("xcrun",_)}async function xe(H,...$){let e=await ya();return Pe("xcrun",["simctl","spawn",H,e,...$])}function Wa(H){return H==="enabled"?"on":"off"}function Fa(H){return H==="on"?"enabled":"disabled"}async function Kt(H,$){let e=CH[$];if(!e)throw Error(`unknown option: ${$}`);if(e.via==="ax")return xe(H,"get",$);let _=(await Xt(H,e.via)).toLowerCase();return e.toggle?Wa(_):_}async function ye(H,$,e){let _=CH[$];if(!_)throw Error(`unknown option: ${$}`);if(_.via==="ax"){await xe(H,"set",$,e);return}await Xt(H,_.via,_.toggle?Fa(e):e)}async function We(H){let $=Object.entries(CH).filter(([,T])=>T.via!=="ax"),[e,..._]=await Promise.all([xe(H,"status").then((T)=>JSON.parse(T)).catch(()=>({})),...$.map(([T])=>Kt(H,T).catch(()=>"unsupported"))]),t={};for(let[T,b]of Object.entries(CH))if(b.via==="ax")t[T]=e[T]??"unsupported";return $.forEach(([T],b)=>{t[T]=_[b]}),t}async function vt(H){if(H.includes("-h")||H.includes("--help")){console.log(Ut);return}let $=xa(H);if($.error)console.error($.error),console.error(Ut),process.exit(1);let e=$.device?eH($.device):aH();if(!e)console.error("No booted simulator found. Boot one or pass -d <udid>."),process.exit(1);if($.command==="status"){let _=await We(e);if($.json)console.log(JSON.stringify(_));else for(let[t,T]of Object.entries(_))console.log(`${t.padEnd(20)} ${T}`);return}if($.command==="get"){console.log(await Kt(e,$.option));return}await ye(e,$.option,$.value)}var me,wt,ka,ma,s$,qa,Pa,CH,W$=null,Ut;var Fe=DH(()=>{y$();x$();me=P$(import.meta.url),wt=["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"],ka=["none","grayscale","red-green","green-red","blue-yellow"],ma={protanopia:"red-green",deuteranopia:"green-red",tritanopia:"blue-yellow"},s$=["on","off"],qa=new Set(["on","true","enabled","1","yes"]),Pa=new Set(["off","false","disabled","0","no"]),CH={appearance:{via:"appearance",values:["light","dark"]},"liquid-glass":{via:"ax",values:["clear","tinted"]},"color-filter":{via:"ax",values:ka,aliases:ma},"text-size":{via:"content_size",values:wt,extraValues:["increment","decrement"]},"reduce-motion":{via:"ax",values:s$,toggle:!0},"increase-contrast":{via:"increase_contrast",values:s$,toggle:!0},"show-borders":{via:"ax",values:s$,toggle:!0},"reduce-transparency":{via:"ax",values:s$,toggle:!0},voiceover:{via:"ax",values:s$,toggle:!0}};Ut=`Usage: serve-sim ui [status] [--json] [-d udid]
28
28
  serve-sim ui <option> [-d udid] Print the current value
29
29
  serve-sim ui <option> <value> [-d udid] Change the value
30
30
 
@@ -33,33 +33,33 @@ Simulator-wide UI options:
33
33
  liquid-glass clear | tinted
34
34
  color-filter none | grayscale | red-green | green-red | blue-yellow
35
35
  (protanopia/deuteranopia/tritanopia aliases accepted)
36
- text-size ${Jt.slice(0,4).join(" | ")} | …
36
+ text-size ${wt.slice(0,4).join(" | ")} | …
37
37
  (12 content-size categories, or increment | decrement)
38
38
  reduce-motion on | off
39
39
  increase-contrast on | off
40
40
  show-borders on | off
41
41
  reduce-transparency on | off
42
- voiceover on | off`});var Vt=$H((zs,vt)=>{var YH=1000,zH=YH*60,H$=zH*60,PH=H$*24,Fa=PH*7,Za=PH*365.25;vt.exports=function(H,$){$=$||{};var e=typeof H;if(e==="string"&&H.length>0)return Ua(H);else if(e==="number"&&isFinite(H))return $.long?wa(H):Ja(H);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify(H))};function Ua(H){if(H=String(H),H.length>100)return;var $=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(H);if(!$)return;var e=parseFloat($[1]),_=($[2]||"ms").toLowerCase();switch(_){case"years":case"year":case"yrs":case"yr":case"y":return e*Za;case"weeks":case"week":case"w":return e*Fa;case"days":case"day":case"d":return e*PH;case"hours":case"hour":case"hrs":case"hr":case"h":return e*H$;case"minutes":case"minute":case"mins":case"min":case"m":return e*zH;case"seconds":case"second":case"secs":case"sec":case"s":return e*YH;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return e;default:return}}function Ja(H){var $=Math.abs(H);if($>=PH)return Math.round(H/PH)+"d";if($>=H$)return Math.round(H/H$)+"h";if($>=zH)return Math.round(H/zH)+"m";if($>=YH)return Math.round(H/YH)+"s";return H+"ms"}function wa(H){var $=Math.abs(H);if($>=PH)return F$(H,$,PH,"day");if($>=H$)return F$(H,$,H$,"hour");if($>=zH)return F$(H,$,zH,"minute");if($>=YH)return F$(H,$,YH,"second");return H+" ms"}function F$(H,$,e,_){var t=$>=e*1.5;return Math.round(H/e)+" "+_+(t?"s":"")}});var Ze=$H((H9,jt)=>{function Xa(H){e.debug=e,e.default=e,e.coerce=a,e.disable=b,e.enable=t,e.enabled=A,e.humanize=Vt(),e.destroy=r,Object.keys(H).forEach((L)=>{e[L]=H[L]}),e.names=[],e.skips=[],e.formatters={};function $(L){let c=0;for(let u=0;u<L.length;u++)c=(c<<5)-c+L.charCodeAt(u),c|=0;return e.colors[Math.abs(c)%e.colors.length]}e.selectColor=$;function e(L){let c,u=null,n,h;function I(...l){if(!I.enabled)return;let N=I,C=Number(new Date),D=C-(c||C);if(N.diff=D,N.prev=c,N.curr=C,c=C,l[0]=e.coerce(l[0]),typeof l[0]!=="string")l.unshift("%O");let d=0;l[0]=l[0].replace(/%([a-zA-Z%])/g,(R,o)=>{if(R==="%%")return"%";d++;let s=e.formatters[o];if(typeof s==="function"){let i=l[d];R=s.call(N,i),l.splice(d,1),d--}return R}),e.formatArgs.call(N,l),(N.log||e.log).apply(N,l)}if(I.namespace=L,I.useColors=e.useColors(),I.color=e.selectColor(L),I.extend=_,I.destroy=e.destroy,Object.defineProperty(I,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(u!==null)return u;if(n!==e.namespaces)n=e.namespaces,h=e.enabled(L);return h},set:(l)=>{u=l}}),typeof e.init==="function")e.init(I);return I}function _(L,c){let u=e(this.namespace+(typeof c>"u"?":":c)+L);return u.log=this.log,u}function t(L){e.save(L),e.namespaces=L,e.names=[],e.skips=[];let c=(typeof L==="string"?L:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let u of c)if(u[0]==="-")e.skips.push(u.slice(1));else e.names.push(u)}function T(L,c){let u=0,n=0,h=-1,I=0;while(u<L.length)if(n<c.length&&(c[n]===L[u]||c[n]==="*"))if(c[n]==="*")h=n,I=u,n++;else u++,n++;else if(h!==-1)n=h+1,I++,u=I;else return!1;while(n<c.length&&c[n]==="*")n++;return n===c.length}function b(){let L=[...e.names,...e.skips.map((c)=>"-"+c)].join(",");return e.enable(""),L}function A(L){for(let c of e.skips)if(T(L,c))return!1;for(let c of e.names)if(T(L,c))return!0;return!1}function a(L){if(L instanceof Error)return L.stack||L.message;return L}function r(){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 e.enable(e.load()),e}jt.exports=Xa});var Yt=$H((Qt,Z$)=>{Qt.formatArgs=va;Qt.save=Va;Qt.load=ja;Qt.useColors=Ka;Qt.storage=Qa();Qt.destroy=(()=>{let H=!1;return()=>{if(!H)H=!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`.")}})();Qt.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 Ka(){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 H;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&&(H=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(H[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function va(H){if(H[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+H[0]+(this.useColors?"%c ":" ")+"+"+Z$.exports.humanize(this.diff),!this.useColors)return;let $="color: "+this.color;H.splice(1,0,$,"color: inherit");let e=0,_=0;H[0].replace(/%[a-zA-Z%]/g,(t)=>{if(t==="%%")return;if(e++,t==="%c")_=e}),H.splice(_,0,$)}Qt.log=console.debug||console.log||(()=>{});function Va(H){try{if(H)Qt.storage.setItem("debug",H);else Qt.storage.removeItem("debug")}catch($){}}function ja(){let H;try{H=Qt.storage.getItem("debug")||Qt.storage.getItem("DEBUG")}catch($){}if(!H&&typeof process<"u"&&"env"in process)H=process.env.DEBUG;return H}function Qa(){try{return localStorage}catch(H){}}Z$.exports=Ze()(Qt);var{formatters:Ya}=Z$.exports;Ya.j=function(H){try{return JSON.stringify(H)}catch($){return"[UnexpectedJSONParseError]: "+$.message}}});var eT=$H((HT,J$)=>{var br=k("tty"),U$=k("util");HT.init=Rr;HT.log=Ar;HT.formatArgs=ar;HT.save=or;HT.load=cr;HT.useColors=Lr;HT.destroy=U$.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");HT.colors=[6,2,3,4,5,1];try{let H=(()=>{throw new Error("Cannot require module "+"supports-color");})();if(H&&(H.stderr||H).level>=2)HT.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(H){}HT.inspectOpts=Object.keys(process.env).filter((H)=>{return/^debug_/i.test(H)}).reduce((H,$)=>{let e=$.substring(6).toLowerCase().replace(/_([a-z])/g,(t,T)=>{return T.toUpperCase()}),_=process.env[$];if(/^(yes|on|true|enabled)$/i.test(_))_=!0;else if(/^(no|off|false|disabled)$/i.test(_))_=!1;else if(_==="null")_=null;else _=Number(_);return H[e]=_,H},{});function Lr(){return"colors"in HT.inspectOpts?Boolean(HT.inspectOpts.colors):br.isatty(process.stderr.fd)}function ar(H){let{namespace:$,useColors:e}=this;if(e){let _=this.color,t="\x1B[3"+(_<8?_:"8;5;"+_),T=` ${t};1m${$} \x1B[0m`;H[0]=T+H[0].split(`
42
+ voiceover on | off`});var jt=$H((e9,Vt)=>{var YH=1000,zH=YH*60,H$=zH*60,PH=H$*24,Za=PH*7,Ua=PH*365.25;Vt.exports=function(H,$){$=$||{};var e=typeof H;if(e==="string"&&H.length>0)return Ja(H);else if(e==="number"&&isFinite(H))return $.long?Xa(H):wa(H);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify(H))};function Ja(H){if(H=String(H),H.length>100)return;var $=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(H);if(!$)return;var e=parseFloat($[1]),_=($[2]||"ms").toLowerCase();switch(_){case"years":case"year":case"yrs":case"yr":case"y":return e*Ua;case"weeks":case"week":case"w":return e*Za;case"days":case"day":case"d":return e*PH;case"hours":case"hour":case"hrs":case"hr":case"h":return e*H$;case"minutes":case"minute":case"mins":case"min":case"m":return e*zH;case"seconds":case"second":case"secs":case"sec":case"s":return e*YH;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return e;default:return}}function wa(H){var $=Math.abs(H);if($>=PH)return Math.round(H/PH)+"d";if($>=H$)return Math.round(H/H$)+"h";if($>=zH)return Math.round(H/zH)+"m";if($>=YH)return Math.round(H/YH)+"s";return H+"ms"}function Xa(H){var $=Math.abs(H);if($>=PH)return F$(H,$,PH,"day");if($>=H$)return F$(H,$,H$,"hour");if($>=zH)return F$(H,$,zH,"minute");if($>=YH)return F$(H,$,YH,"second");return H+" ms"}function F$(H,$,e,_){var t=$>=e*1.5;return Math.round(H/e)+" "+_+(t?"s":"")}});var Ze=$H((_9,Qt)=>{function Ka(H){e.debug=e,e.default=e,e.coerce=a,e.disable=b,e.enable=t,e.enabled=A,e.humanize=jt(),e.destroy=r,Object.keys(H).forEach((L)=>{e[L]=H[L]}),e.names=[],e.skips=[],e.formatters={};function $(L){let c=0;for(let u=0;u<L.length;u++)c=(c<<5)-c+L.charCodeAt(u),c|=0;return e.colors[Math.abs(c)%e.colors.length]}e.selectColor=$;function e(L){let c,u=null,n,h;function I(...l){if(!I.enabled)return;let N=I,C=Number(new Date),D=C-(c||C);if(N.diff=D,N.prev=c,N.curr=C,c=C,l[0]=e.coerce(l[0]),typeof l[0]!=="string")l.unshift("%O");let d=0;l[0]=l[0].replace(/%([a-zA-Z%])/g,(R,o)=>{if(R==="%%")return"%";d++;let s=e.formatters[o];if(typeof s==="function"){let i=l[d];R=s.call(N,i),l.splice(d,1),d--}return R}),e.formatArgs.call(N,l),(N.log||e.log).apply(N,l)}if(I.namespace=L,I.useColors=e.useColors(),I.color=e.selectColor(L),I.extend=_,I.destroy=e.destroy,Object.defineProperty(I,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(u!==null)return u;if(n!==e.namespaces)n=e.namespaces,h=e.enabled(L);return h},set:(l)=>{u=l}}),typeof e.init==="function")e.init(I);return I}function _(L,c){let u=e(this.namespace+(typeof c>"u"?":":c)+L);return u.log=this.log,u}function t(L){e.save(L),e.namespaces=L,e.names=[],e.skips=[];let c=(typeof L==="string"?L:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let u of c)if(u[0]==="-")e.skips.push(u.slice(1));else e.names.push(u)}function T(L,c){let u=0,n=0,h=-1,I=0;while(u<L.length)if(n<c.length&&(c[n]===L[u]||c[n]==="*"))if(c[n]==="*")h=n,I=u,n++;else u++,n++;else if(h!==-1)n=h+1,I++,u=I;else return!1;while(n<c.length&&c[n]==="*")n++;return n===c.length}function b(){let L=[...e.names,...e.skips.map((c)=>"-"+c)].join(",");return e.enable(""),L}function A(L){for(let c of e.skips)if(T(L,c))return!1;for(let c of e.names)if(T(L,c))return!0;return!1}function a(L){if(L instanceof Error)return L.stack||L.message;return L}function r(){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 e.enable(e.load()),e}Qt.exports=Ka});var zt=$H((Yt,Z$)=>{Yt.formatArgs=Va;Yt.save=ja;Yt.load=Qa;Yt.useColors=va;Yt.storage=Ya();Yt.destroy=(()=>{let H=!1;return()=>{if(!H)H=!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`.")}})();Yt.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 va(){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 H;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&&(H=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(H[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function Va(H){if(H[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+H[0]+(this.useColors?"%c ":" ")+"+"+Z$.exports.humanize(this.diff),!this.useColors)return;let $="color: "+this.color;H.splice(1,0,$,"color: inherit");let e=0,_=0;H[0].replace(/%[a-zA-Z%]/g,(t)=>{if(t==="%%")return;if(e++,t==="%c")_=e}),H.splice(_,0,$)}Yt.log=console.debug||console.log||(()=>{});function ja(H){try{if(H)Yt.storage.setItem("debug",H);else Yt.storage.removeItem("debug")}catch($){}}function Qa(){let H;try{H=Yt.storage.getItem("debug")||Yt.storage.getItem("DEBUG")}catch($){}if(!H&&typeof process<"u"&&"env"in process)H=process.env.DEBUG;return H}function Ya(){try{return localStorage}catch(H){}}Z$.exports=Ze()(Yt);var{formatters:za}=Z$.exports;za.j=function(H){try{return JSON.stringify(H)}catch($){return"[UnexpectedJSONParseError]: "+$.message}}});var _T=$H(($T,J$)=>{var Lr=k("tty"),U$=k("util");$T.init=sr;$T.log=or;$T.formatArgs=rr;$T.save=cr;$T.load=Rr;$T.useColors=ar;$T.destroy=U$.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");$T.colors=[6,2,3,4,5,1];try{let H=(()=>{throw new Error("Cannot require module "+"supports-color");})();if(H&&(H.stderr||H).level>=2)$T.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(H){}$T.inspectOpts=Object.keys(process.env).filter((H)=>{return/^debug_/i.test(H)}).reduce((H,$)=>{let e=$.substring(6).toLowerCase().replace(/_([a-z])/g,(t,T)=>{return T.toUpperCase()}),_=process.env[$];if(/^(yes|on|true|enabled)$/i.test(_))_=!0;else if(/^(no|off|false|disabled)$/i.test(_))_=!1;else if(_==="null")_=null;else _=Number(_);return H[e]=_,H},{});function ar(){return"colors"in $T.inspectOpts?Boolean($T.inspectOpts.colors):Lr.isatty(process.stderr.fd)}function rr(H){let{namespace:$,useColors:e}=this;if(e){let _=this.color,t="\x1B[3"+(_<8?_:"8;5;"+_),T=` ${t};1m${$} \x1B[0m`;H[0]=T+H[0].split(`
43
43
  `).join(`
44
- `+T),H.push(t+"m+"+J$.exports.humanize(this.diff)+"\x1B[0m")}else H[0]=rr()+$+" "+H[0]}function rr(){if(HT.inspectOpts.hideDate)return"";return new Date().toISOString()+" "}function Ar(...H){return process.stderr.write(U$.formatWithOptions(HT.inspectOpts,...H)+`
45
- `)}function or(H){if(H)process.env.DEBUG=H;else delete process.env.DEBUG}function cr(){return process.env.DEBUG}function Rr(H){H.inspectOpts={};let $=Object.keys(HT.inspectOpts);for(let e=0;e<$.length;e++)H.inspectOpts[$[e]]=HT.inspectOpts[$[e]]}J$.exports=Ze()(HT);var{formatters:zt}=J$.exports;zt.o=function(H){return this.inspectOpts.colors=this.useColors,U$.inspect(H,this.inspectOpts).split(`
46
- `).map(($)=>$.trim()).join(" ")};zt.O=function(H){return this.inspectOpts.colors=this.useColors,U$.inspect(H,this.inspectOpts)}});var _T=$H((_9,Ue)=>{if(typeof process>"u"||process.type==="renderer"||!1||process.__nwjs)Ue.exports=Yt();else Ue.exports=eT()});var h$,Je,TH,NH,w$;var we=DH(()=>{h$=Ie(_T(),1),Je=h$.default("serve-sim:cli"),TH=h$.default("serve-sim:helper"),NH=h$.default("serve-sim:state"),w$=h$.default("serve-sim:mw")});var tT=$H((T9,fr)=>{fr.exports=k("./ngrok.darwin-universal-js9zx1ck.node")});var TT=$H((b9,Er)=>{Er.exports=k("./ngrok.darwin-arm64-8jkcjhvc.node")});var uT=$H((Xr,X)=>{var __dirname="/Users/sjchmiela/Developer/serve-sim/node_modules/.bun/@ngrok+ngrok@1.7.0/node_modules/@ngrok/ngrok",{existsSync:Q,readFileSync:Cr}=k("fs"),{join:Y}=k("path"),{platform:i$,arch:iH}=process,y=null,W=!1,K=null;function X$(){if(!process.report||typeof process.report.getReport!=="function")try{let H=k("child_process").execSync("which ldd").toString().trim();return Cr(H,"utf8").includes("musl")}catch(H){return!0}else{let{glibcVersionRuntime:H}=process.report.getReport().header;return!H}}switch(i$){case"android":switch(iH){case"arm64":W=Q(Y(__dirname,"ngrok.android-arm64.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.android-arm64.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-android-arm64");})()}catch(H){K=H}break;case"arm":W=Q(Y(__dirname,"ngrok.android-arm-eabi.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.android-arm-eabi.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-android-arm-eabi");})()}catch(H){K=H}break;default:throw Error(`Unsupported architecture on Android ${iH}`)}break;case"win32":switch(iH){case"x64":W=Q(Y(__dirname,"ngrok.win32-x64-msvc.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.win32-x64-msvc.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-win32-x64-msvc");})()}catch(H){K=H}break;case"ia32":W=Q(Y(__dirname,"ngrok.win32-ia32-msvc.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.win32-ia32-msvc.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-win32-ia32-msvc");})()}catch(H){K=H}break;case"arm64":W=Q(Y(__dirname,"ngrok.win32-arm64-msvc.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.win32-arm64-msvc.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-win32-arm64-msvc");})()}catch(H){K=H}break;default:throw Error(`Unsupported architecture on Windows: ${iH}`)}break;case"darwin":W=Q(Y(__dirname,"ngrok.darwin-universal.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.darwin-universal.node");})();else y=tT();break}catch{}switch(iH){case"x64":W=Q(Y(__dirname,"ngrok.darwin-x64.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.darwin-x64.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-darwin-x64");})()}catch(H){K=H}break;case"arm64":W=Q(Y(__dirname,"ngrok.darwin-arm64.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.darwin-arm64.node");})();else y=TT()}catch(H){K=H}break;default:throw Error(`Unsupported architecture on macOS: ${iH}`)}break;case"freebsd":if(iH!=="x64")throw Error(`Unsupported architecture on FreeBSD: ${iH}`);W=Q(Y(__dirname,"ngrok.freebsd-x64.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.freebsd-x64.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-freebsd-x64");})()}catch(H){K=H}break;case"linux":switch(iH){case"x64":if(X$()){W=Q(Y(__dirname,"ngrok.linux-x64-musl.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.linux-x64-musl.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-linux-x64-musl");})()}catch(H){K=H}}else{W=Q(Y(__dirname,"ngrok.linux-x64-gnu.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.linux-x64-gnu.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-linux-x64-gnu");})()}catch(H){K=H}}break;case"arm64":if(X$()){W=Q(Y(__dirname,"ngrok.linux-arm64-musl.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.linux-arm64-musl.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-linux-arm64-musl");})()}catch(H){K=H}}else{W=Q(Y(__dirname,"ngrok.linux-arm64-gnu.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.linux-arm64-gnu.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-linux-arm64-gnu");})()}catch(H){K=H}}break;case"arm":if(X$()){W=Q(Y(__dirname,"ngrok.linux-arm-musleabihf.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.linux-arm-musleabihf.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-linux-arm-musleabihf");})()}catch(H){K=H}}else{W=Q(Y(__dirname,"ngrok.linux-arm-gnueabihf.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.linux-arm-gnueabihf.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-linux-arm-gnueabihf");})()}catch(H){K=H}}break;case"riscv64":if(X$()){W=Q(Y(__dirname,"ngrok.linux-riscv64-musl.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.linux-riscv64-musl.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-linux-riscv64-musl");})()}catch(H){K=H}}else{W=Q(Y(__dirname,"ngrok.linux-riscv64-gnu.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.linux-riscv64-gnu.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-linux-riscv64-gnu");})()}catch(H){K=H}}break;case"s390x":W=Q(Y(__dirname,"ngrok.linux-s390x-gnu.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.linux-s390x-gnu.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-linux-s390x-gnu");})()}catch(H){K=H}break;default:throw Error(`Unsupported architecture on Linux: ${iH}`)}break;default:throw Error(`Unsupported OS: ${i$}, architecture: ${iH}`)}if(!y){if(K)throw K;throw Error("Failed to load native binding")}var{connect:Nr,forward:aT,disconnect:dr,kill:lr,Listener:pr,listeners:Br,getListener:Or,getListenerByUrl:Mr,HttpListenerBuilder:n$,TcpListenerBuilder:I$,TlsListenerBuilder:D$,LabeledListenerBuilder:f$,loggingCallback:Ke,authtoken:Gr,SessionBuilder:E$,Session:gr,UpdateRequest:Sr}=y;Xr.connect=Nr;Xr.forward=aT;Xr.disconnect=dr;Xr.kill=lr;Xr.Listener=pr;Xr.listeners=Br;Xr.getListener=Or;Xr.getListenerByUrl=Mr;Xr.HttpListenerBuilder=n$;Xr.TcpListenerBuilder=I$;Xr.TlsListenerBuilder=D$;Xr.LabeledListenerBuilder=f$;Xr.loggingCallback=Ke;Xr.authtoken=Gr;Xr.SessionBuilder=E$;Xr.Session=gr;Xr.UpdateRequest=Sr;var kr=k("net"),dH=k("fs"),Xe=k("os"),bT=k("path");E$.prototype._connect=E$.prototype.connect;E$.prototype.connect=mr;n$.prototype._listen=n$.prototype.listen;I$.prototype._listen=I$.prototype.listen;D$.prototype._listen=D$.prototype.listen;f$.prototype._listen=f$.prototype.listen;n$.prototype.listen=K$;I$.prototype.listen=K$;D$.prototype.listen=K$;f$.prototype.listen=K$;n$.prototype.listenAndServe=v$;I$.prototype.listenAndServe=v$;D$.prototype.listenAndServe=v$;f$.prototype.listenAndServe=v$;async function mr(){try{return await this._connect()}catch(H){throw ve(H),H}}async function K$(H){try{let $=await this._listen();if(H!==!1){let e=await Pr();$.socket=e,qr($,e)}return $}catch($){throw ve($),$}}async function v$(H){let $=await this._listen();return $.socket=await AT(H,$),$}function ve(H){if(H.message){let $=/error_code: (ERR_NGROK_\d+)$/,e=H.message.match($);if(e&&e.length>1)H.errorCode=e[1]}}function qr(H,$){Object.defineProperty(H,"handle",{get:function(){return H.forward("localhost:"+$.address().port),$._handle}})}async function Pr(){return await Ve(new kr.Server,{host:"localhost",port:0})}function Ve(H,$){return new Promise((e,_)=>{let t=H.listen($);t.once("listening",()=>{e(t)}).once("error",(T)=>{_(T)})})}async function rT(H){var $=new E$;$.authtokenFromEnv();var e=await $.connect(),_=await e.httpEndpoint().listen(H);return _.session=e,_}async function xr(){return await rT()}async function AT(H,$){if($&&$.socket)$.socket.close();if(!$)$=await rT(!1);try{socket=await Fr($,H)}catch(e){console.debug("Using TCP socket. "+e),socket=await yr($,H)}return Zr($,socket),H.listener=$,socket.listener=$,socket}async function yr(H,$){let e=await Ve($,{host:"localhost",port:0});return H.forward("localhost:"+e.address().port),e}function Wr(H,$){var e="tun-"+H.id()+".sock";if(i$=="win32")return"\\\\.\\pipe\\"+e;let _=".ngrok";try{dH.mkdirSync(_)}catch(t){}try{return dH.accessSync(_,dH.constants.W_OK),_+bT.sep+e}catch(t){}if(Xe.tmpdir().length<90)try{if(dH.accessSync(Xe.tmpdir(),dH.constants.W_OK),filepath=Xe.tmpdir()+bT.sep+e,filepath.length>100)filepath=filepath.substring(0,100);return filepath}catch(t){}return dH.accessSync(process.cwd(),dH.constants.W_OK),e}async function Fr(H,$){var e=Wr(H);let _=await Ve($,{path:e});try{if(i$!="win32")dH.chmodSync(e,dH.constants.S_IRWXU)}catch(T){console.debug("Cannot change permissions of file: "+e)}var t="unix:"+e;if(i$=="win32")t="pipe:"+e.replace("\\\\.\\pipe\\","//./");return H.forward(t),_.path=e,_}var LT=!1;function Zr(H,$){for(let e of["SIGINT","SIGTERM"])process.on(e,function(){if(process.listenerCount(e)>1)return;if(LT)return;if(LT=!0,H)H.close().catch((_)=>{console.error(`Error closing listener: ${_}`)});if($)$.close();Ke()})}function Ur(H){Ke(($,e,_)=>{console.log(`${$} ${e} - ${_}`)},H)}var Jr=aT;async function oT(H){if(H==null)H=80;if(Number.isInteger(H)||typeof H==="string"||H instanceof String){if(address=String(H),Number.isInteger(H)&&!address.includes(":"))address=`localhost:${address}`;H={addr:address}}if(typeof H.port==="string"||H.port instanceof String){let T=parseInt(H.port,10);if(isNaN(T))throw Error(`port must be a number: '${H.port}'`);H.port=T}let $=H.addr;if(Number.isInteger($))H.addr="localhost:"+String(H.addr);["allow_user_agent","auth","basic_auth","deny_user_agent","ip_restriction.allow_cidrs","ip_restriction.deny_cidrs","labels","oauth.allow_domains","oauth.allow_emails","oauth.scopes","oidc.scopes","oidc.allow_domains","oidc.allow_emails","request_header.add","request_header.remove","response_header.add","response_header.remove","schemes"].forEach((T)=>{cT(H,T)}),["ip_restriction.allow_cidrs","ip_restriction.deny_cidrs","oauth.allow_domains","oauth.allow_emails","oauth.scopes","oauth.provider","oidc.client_id","oidc.client_secret","oidc.scopes","oidc.issuer_url","oidc.allow_domains","oidc.allow_emails","request_header.add","request_header.remove","response_header.add","response_header.remove","verify_webhook.provider","verify_webhook.secret"].forEach((T)=>{wr(H,T)});var e;if(H.onLogEvent){let T=H.onLogEvent;e=(b,A,a)=>{T(`${b} ${A} - ${a}`)},H.onLogEvent=!0}var _,t;if(H.onStatusChange){let T=H.onStatusChange;_=(b,A)=>{T(b)},t=(b,A)=>{T("closed")},H.onStatusChange=!0}try{return await Jr(H,e,_,t)}catch(T){throw ve(T),T}}function wr(H,$){let e=$.replace(".","_");if(H[$]==null)return;if(H[e]==null){H[e]=H[$];return}if(H[$]instanceof Array&&H[e]instanceof Array)for(let _ of H[$])H[e].push(_)}function cT(H,$){let e=$.replace(".","_");if($!=e)cT(H,e);if(H[$]==null)return;if(!(H[$]instanceof Array))H[$]=[H[$]]}Xr.connect=oT;Xr.forward=oT;Xr.consoleLog=Ur;Xr.listen=AT;Xr.listenable=xr});var V$="Accessibility unavailable on this simulator.";function NA(H){return H[0]?.frame??{x:0,y:0,width:1,height:1}}function dA(H,$){return Math.abs(H.x-$.x)<0.5&&Math.abs(H.y-$.y)<0.5&&Math.abs(H.width-$.width)<0.5&&Math.abs(H.height-$.height)<0.5}function lA(H){let $=NA(H),e=[],_=(t,T)=>{if(e.length>=Ye)return;let b=t.frame;if(!dA(b,$))e.push({id:t.AXUniqueId??T,path:T,label:t.AXLabel??"",value:t.AXValue??"",role:t.role_description,type:t.type,enabled:t.enabled!==!1,frame:b});for(let a=0;a<t.children.length&&e.length<Ye;a++)_(t.children[a],`${T}.${a}`)};for(let t=0;t<H.length&&e.length<Ye;t++)_(H[t],String(t));return{screen:{width:$.width,height:$.height},elements:e}}async function pA(H){let $=new AbortController,e=setTimeout(()=>$.abort(),fA);try{let _=await fetch(`http://127.0.0.1:${H}/ax`,{signal:$.signal});if(_.status===503)return{screen:{width:1,height:1},elements:[],errors:[V$]};if(!_.ok)throw Error(`HTTP ${_.status} ${_.statusText}`);return lA(await _.json())}finally{clearTimeout(e)}}function BA(H){return H?.errors?.includes(V$)??!1}function OA(H){return H.elements.length>0&&H.screen.width>1&&H.screen.height>1}async function MA(H){let $=[];try{let e=await pA(H);if(e.errors?.length)return e;if(!OA(e))throw Error(`helper returned ${e.elements.length} elements in ${e.screen.width}x${e.screen.height} AX space`);return{...e,errors:$}}catch(e){let _=e,t=_.cause?.code??_.code,T=_.message||String(e),b=t==="ECONNREFUSED"||t==="ECONNRESET"||/unable to connect|fetch failed|ECONNREFUSED/i.test(T);$.push(b?V$:T)}return{screen:{width:1,height:1},elements:[],errors:$}}function GA(H){return`data: ${JSON.stringify(H)}
44
+ `+T),H.push(t+"m+"+J$.exports.humanize(this.diff)+"\x1B[0m")}else H[0]=Ar()+$+" "+H[0]}function Ar(){if($T.inspectOpts.hideDate)return"";return new Date().toISOString()+" "}function or(...H){return process.stderr.write(U$.formatWithOptions($T.inspectOpts,...H)+`
45
+ `)}function cr(H){if(H)process.env.DEBUG=H;else delete process.env.DEBUG}function Rr(){return process.env.DEBUG}function sr(H){H.inspectOpts={};let $=Object.keys($T.inspectOpts);for(let e=0;e<$.length;e++)H.inspectOpts[$[e]]=$T.inspectOpts[$[e]]}J$.exports=Ze()($T);var{formatters:HT}=J$.exports;HT.o=function(H){return this.inspectOpts.colors=this.useColors,U$.inspect(H,this.inspectOpts).split(`
46
+ `).map(($)=>$.trim()).join(" ")};HT.O=function(H){return this.inspectOpts.colors=this.useColors,U$.inspect(H,this.inspectOpts)}});var tT=$H((b9,Ue)=>{if(typeof process>"u"||process.type==="renderer"||!1||process.__nwjs)Ue.exports=zt();else Ue.exports=_T()});var h$,Je,TH,NH,w$;var we=DH(()=>{h$=Ie(tT(),1),Je=h$.default("serve-sim:cli"),TH=h$.default("serve-sim:helper"),NH=h$.default("serve-sim:state"),w$=h$.default("serve-sim:mw")});var TT=$H((a9,Er)=>{Er.exports=k("./ngrok.darwin-universal-js9zx1ck.node")});var bT=$H((r9,Cr)=>{Cr.exports=k("./ngrok.darwin-arm64-8jkcjhvc.node")});var hT=$H((Kr,X)=>{var __dirname="/Users/sjchmiela/Developer/serve-sim/node_modules/.bun/@ngrok+ngrok@1.7.0/node_modules/@ngrok/ngrok",{existsSync:Q,readFileSync:Nr}=k("fs"),{join:Y}=k("path"),{platform:i$,arch:iH}=process,y=null,W=!1,K=null;function X$(){if(!process.report||typeof process.report.getReport!=="function")try{let H=k("child_process").execSync("which ldd").toString().trim();return Nr(H,"utf8").includes("musl")}catch(H){return!0}else{let{glibcVersionRuntime:H}=process.report.getReport().header;return!H}}switch(i$){case"android":switch(iH){case"arm64":W=Q(Y(__dirname,"ngrok.android-arm64.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.android-arm64.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-android-arm64");})()}catch(H){K=H}break;case"arm":W=Q(Y(__dirname,"ngrok.android-arm-eabi.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.android-arm-eabi.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-android-arm-eabi");})()}catch(H){K=H}break;default:throw Error(`Unsupported architecture on Android ${iH}`)}break;case"win32":switch(iH){case"x64":W=Q(Y(__dirname,"ngrok.win32-x64-msvc.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.win32-x64-msvc.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-win32-x64-msvc");})()}catch(H){K=H}break;case"ia32":W=Q(Y(__dirname,"ngrok.win32-ia32-msvc.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.win32-ia32-msvc.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-win32-ia32-msvc");})()}catch(H){K=H}break;case"arm64":W=Q(Y(__dirname,"ngrok.win32-arm64-msvc.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.win32-arm64-msvc.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-win32-arm64-msvc");})()}catch(H){K=H}break;default:throw Error(`Unsupported architecture on Windows: ${iH}`)}break;case"darwin":W=Q(Y(__dirname,"ngrok.darwin-universal.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.darwin-universal.node");})();else y=TT();break}catch{}switch(iH){case"x64":W=Q(Y(__dirname,"ngrok.darwin-x64.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.darwin-x64.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-darwin-x64");})()}catch(H){K=H}break;case"arm64":W=Q(Y(__dirname,"ngrok.darwin-arm64.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.darwin-arm64.node");})();else y=bT()}catch(H){K=H}break;default:throw Error(`Unsupported architecture on macOS: ${iH}`)}break;case"freebsd":if(iH!=="x64")throw Error(`Unsupported architecture on FreeBSD: ${iH}`);W=Q(Y(__dirname,"ngrok.freebsd-x64.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.freebsd-x64.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-freebsd-x64");})()}catch(H){K=H}break;case"linux":switch(iH){case"x64":if(X$()){W=Q(Y(__dirname,"ngrok.linux-x64-musl.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.linux-x64-musl.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-linux-x64-musl");})()}catch(H){K=H}}else{W=Q(Y(__dirname,"ngrok.linux-x64-gnu.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.linux-x64-gnu.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-linux-x64-gnu");})()}catch(H){K=H}}break;case"arm64":if(X$()){W=Q(Y(__dirname,"ngrok.linux-arm64-musl.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.linux-arm64-musl.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-linux-arm64-musl");})()}catch(H){K=H}}else{W=Q(Y(__dirname,"ngrok.linux-arm64-gnu.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.linux-arm64-gnu.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-linux-arm64-gnu");})()}catch(H){K=H}}break;case"arm":if(X$()){W=Q(Y(__dirname,"ngrok.linux-arm-musleabihf.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.linux-arm-musleabihf.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-linux-arm-musleabihf");})()}catch(H){K=H}}else{W=Q(Y(__dirname,"ngrok.linux-arm-gnueabihf.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.linux-arm-gnueabihf.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-linux-arm-gnueabihf");})()}catch(H){K=H}}break;case"riscv64":if(X$()){W=Q(Y(__dirname,"ngrok.linux-riscv64-musl.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.linux-riscv64-musl.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-linux-riscv64-musl");})()}catch(H){K=H}}else{W=Q(Y(__dirname,"ngrok.linux-riscv64-gnu.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.linux-riscv64-gnu.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-linux-riscv64-gnu");})()}catch(H){K=H}}break;case"s390x":W=Q(Y(__dirname,"ngrok.linux-s390x-gnu.node"));try{if(W)y=(()=>{throw new Error("Cannot require module "+"./ngrok.linux-s390x-gnu.node");})();else y=(()=>{throw new Error("Cannot require module "+"@ngrok/ngrok-linux-s390x-gnu");})()}catch(H){K=H}break;default:throw Error(`Unsupported architecture on Linux: ${iH}`)}break;default:throw Error(`Unsupported OS: ${i$}, architecture: ${iH}`)}if(!y){if(K)throw K;throw Error("Failed to load native binding")}var{connect:dr,forward:rT,disconnect:lr,kill:pr,Listener:Br,listeners:Or,getListener:Mr,getListenerByUrl:Gr,HttpListenerBuilder:n$,TcpListenerBuilder:I$,TlsListenerBuilder:D$,LabeledListenerBuilder:f$,loggingCallback:Ke,authtoken:gr,SessionBuilder:E$,Session:Sr,UpdateRequest:kr}=y;Kr.connect=dr;Kr.forward=rT;Kr.disconnect=lr;Kr.kill=pr;Kr.Listener=Br;Kr.listeners=Or;Kr.getListener=Mr;Kr.getListenerByUrl=Gr;Kr.HttpListenerBuilder=n$;Kr.TcpListenerBuilder=I$;Kr.TlsListenerBuilder=D$;Kr.LabeledListenerBuilder=f$;Kr.loggingCallback=Ke;Kr.authtoken=gr;Kr.SessionBuilder=E$;Kr.Session=Sr;Kr.UpdateRequest=kr;var mr=k("net"),dH=k("fs"),Xe=k("os"),LT=k("path");E$.prototype._connect=E$.prototype.connect;E$.prototype.connect=qr;n$.prototype._listen=n$.prototype.listen;I$.prototype._listen=I$.prototype.listen;D$.prototype._listen=D$.prototype.listen;f$.prototype._listen=f$.prototype.listen;n$.prototype.listen=K$;I$.prototype.listen=K$;D$.prototype.listen=K$;f$.prototype.listen=K$;n$.prototype.listenAndServe=v$;I$.prototype.listenAndServe=v$;D$.prototype.listenAndServe=v$;f$.prototype.listenAndServe=v$;async function qr(){try{return await this._connect()}catch(H){throw ve(H),H}}async function K$(H){try{let $=await this._listen();if(H!==!1){let e=await xr();$.socket=e,Pr($,e)}return $}catch($){throw ve($),$}}async function v$(H){let $=await this._listen();return $.socket=await oT(H,$),$}function ve(H){if(H.message){let $=/error_code: (ERR_NGROK_\d+)$/,e=H.message.match($);if(e&&e.length>1)H.errorCode=e[1]}}function Pr(H,$){Object.defineProperty(H,"handle",{get:function(){return H.forward("localhost:"+$.address().port),$._handle}})}async function xr(){return await Ve(new mr.Server,{host:"localhost",port:0})}function Ve(H,$){return new Promise((e,_)=>{let t=H.listen($);t.once("listening",()=>{e(t)}).once("error",(T)=>{_(T)})})}async function AT(H){var $=new E$;$.authtokenFromEnv();var e=await $.connect(),_=await e.httpEndpoint().listen(H);return _.session=e,_}async function yr(){return await AT()}async function oT(H,$){if($&&$.socket)$.socket.close();if(!$)$=await AT(!1);try{socket=await Zr($,H)}catch(e){console.debug("Using TCP socket. "+e),socket=await Wr($,H)}return Ur($,socket),H.listener=$,socket.listener=$,socket}async function Wr(H,$){let e=await Ve($,{host:"localhost",port:0});return H.forward("localhost:"+e.address().port),e}function Fr(H,$){var e="tun-"+H.id()+".sock";if(i$=="win32")return"\\\\.\\pipe\\"+e;let _=".ngrok";try{dH.mkdirSync(_)}catch(t){}try{return dH.accessSync(_,dH.constants.W_OK),_+LT.sep+e}catch(t){}if(Xe.tmpdir().length<90)try{if(dH.accessSync(Xe.tmpdir(),dH.constants.W_OK),filepath=Xe.tmpdir()+LT.sep+e,filepath.length>100)filepath=filepath.substring(0,100);return filepath}catch(t){}return dH.accessSync(process.cwd(),dH.constants.W_OK),e}async function Zr(H,$){var e=Fr(H);let _=await Ve($,{path:e});try{if(i$!="win32")dH.chmodSync(e,dH.constants.S_IRWXU)}catch(T){console.debug("Cannot change permissions of file: "+e)}var t="unix:"+e;if(i$=="win32")t="pipe:"+e.replace("\\\\.\\pipe\\","//./");return H.forward(t),_.path=e,_}var aT=!1;function Ur(H,$){for(let e of["SIGINT","SIGTERM"])process.on(e,function(){if(process.listenerCount(e)>1)return;if(aT)return;if(aT=!0,H)H.close().catch((_)=>{console.error(`Error closing listener: ${_}`)});if($)$.close();Ke()})}function Jr(H){Ke(($,e,_)=>{console.log(`${$} ${e} - ${_}`)},H)}var wr=rT;async function cT(H){if(H==null)H=80;if(Number.isInteger(H)||typeof H==="string"||H instanceof String){if(address=String(H),Number.isInteger(H)&&!address.includes(":"))address=`localhost:${address}`;H={addr:address}}if(typeof H.port==="string"||H.port instanceof String){let T=parseInt(H.port,10);if(isNaN(T))throw Error(`port must be a number: '${H.port}'`);H.port=T}let $=H.addr;if(Number.isInteger($))H.addr="localhost:"+String(H.addr);["allow_user_agent","auth","basic_auth","deny_user_agent","ip_restriction.allow_cidrs","ip_restriction.deny_cidrs","labels","oauth.allow_domains","oauth.allow_emails","oauth.scopes","oidc.scopes","oidc.allow_domains","oidc.allow_emails","request_header.add","request_header.remove","response_header.add","response_header.remove","schemes"].forEach((T)=>{RT(H,T)}),["ip_restriction.allow_cidrs","ip_restriction.deny_cidrs","oauth.allow_domains","oauth.allow_emails","oauth.scopes","oauth.provider","oidc.client_id","oidc.client_secret","oidc.scopes","oidc.issuer_url","oidc.allow_domains","oidc.allow_emails","request_header.add","request_header.remove","response_header.add","response_header.remove","verify_webhook.provider","verify_webhook.secret"].forEach((T)=>{Xr(H,T)});var e;if(H.onLogEvent){let T=H.onLogEvent;e=(b,A,a)=>{T(`${b} ${A} - ${a}`)},H.onLogEvent=!0}var _,t;if(H.onStatusChange){let T=H.onStatusChange;_=(b,A)=>{T(b)},t=(b,A)=>{T("closed")},H.onStatusChange=!0}try{return await wr(H,e,_,t)}catch(T){throw ve(T),T}}function Xr(H,$){let e=$.replace(".","_");if(H[$]==null)return;if(H[e]==null){H[e]=H[$];return}if(H[$]instanceof Array&&H[e]instanceof Array)for(let _ of H[$])H[e].push(_)}function RT(H,$){let e=$.replace(".","_");if($!=e)RT(H,e);if(H[$]==null)return;if(!(H[$]instanceof Array))H[$]=[H[$]]}Kr.connect=cT;Kr.forward=cT;Kr.consoleLog=Jr;Kr.listen=oT;Kr.listenable=yr});var V$="Accessibility unavailable on this simulator.";function dA(H){return H[0]?.frame??{x:0,y:0,width:1,height:1}}function lA(H,$){return Math.abs(H.x-$.x)<0.5&&Math.abs(H.y-$.y)<0.5&&Math.abs(H.width-$.width)<0.5&&Math.abs(H.height-$.height)<0.5}function pA(H){let $=dA(H),e=[],_=(t,T)=>{if(e.length>=Ye)return;let b=t.frame;if(!lA(b,$))e.push({id:t.AXUniqueId??T,path:T,label:t.AXLabel??"",value:t.AXValue??"",role:t.role_description,type:t.type,enabled:t.enabled!==!1,frame:b});for(let a=0;a<t.children.length&&e.length<Ye;a++)_(t.children[a],`${T}.${a}`)};for(let t=0;t<H.length&&e.length<Ye;t++)_(H[t],String(t));return{screen:{width:$.width,height:$.height},elements:e}}async function BA(H){let $=new AbortController,e=setTimeout(()=>$.abort(),EA);try{let _=await fetch(`http://127.0.0.1:${H}/ax`,{signal:$.signal});if(_.status===503)return{screen:{width:1,height:1},elements:[],errors:[V$]};if(!_.ok)throw Error(`HTTP ${_.status} ${_.statusText}`);return pA(await _.json())}finally{clearTimeout(e)}}function OA(H){return H?.errors?.includes(V$)??!1}function MA(H){return H.elements.length>0&&H.screen.width>1&&H.screen.height>1}async function GA(H){let $=[];try{let e=await BA(H);if(e.errors?.length)return e;if(!MA(e))throw Error(`helper returned ${e.elements.length} elements in ${e.screen.width}x${e.screen.height} AX space`);return{...e,errors:$}}catch(e){let _=e,t=_.cause?.code??_.code,T=_.message||String(e),b=t==="ECONNREFUSED"||t==="ECONNRESET"||/unable to connect|fetch failed|ECONNREFUSED/i.test(T);$.push(b?V$:T)}return{screen:{width:1,height:1},elements:[],errors:$}}function gA(H){return`data: ${JSON.stringify(H)}
47
47
 
48
- `}function gA({port:H}){let $=new Set,e=null,_=null,t=ze,T=!1,b=H,A=!1,a=()=>{if(A||$.size===0||e)return;e=setTimeout(r,t)},r=async()=>{if(e=null,A||T||$.size===0){a();return}T=!0;try{let L=await MA(b),c=GA(L);if(c!==_){for(let u of $)u.write(c);t=ze}else t=Math.min(t*2,EA);if(_=c,BA(L))t=CA}finally{T=!1,a()}};return{setPort(L){if(A||L===b)return;if(b=L,_=null,t=ze,e)clearTimeout(e),e=null;r()},addClient(L){if(A)return()=>{};if($.add(L),_)L.write(_);return r(),()=>{if($.delete(L),$.size===0&&e)clearTimeout(e),e=null}},dispose(){if(A)return;if(A=!0,e)clearTimeout(e),e=null;$.clear(),_=null}}}function nT(){let H=new Map;return{get($,e){let _=H.get($);if(_)return _.setPort(e),_;let t=gA({port:e});return H.set($,t),t},prune($){let e=$ instanceof Set?$:new Set($);for(let[_,t]of H)if(!e.has(_))t.dispose(),H.delete(_)},size(){return H.size}}}var fA=3500,Ye=500,ze=500,EA=2000,CA=15000;var IT=()=>{};import{execFileSync as j$}from"child_process";import{createHash as lT}from"crypto";import{existsSync as RH,mkdirSync as pT,readdirSync as SA,readFileSync as yH,renameSync as BT,statSync as OT,unlinkSync as DT}from"fs";import{tmpdir as MT}from"os";import{basename as GT,dirname as gT,join as v}from"path";import{inflateSync as kA}from"zlib";function Y$(H){return H.startsWith(fT)?H.slice(fT.length):H}function kT(H){let $=typeof H==="string"?H:H.toString("latin1"),e=/\/CropBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec($)??/\/MediaBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec($);if(!e)return null;let _=Number(e[1]),t=Number(e[2]),T=Number(e[3]),b=Number(e[4]),A=Math.abs(T-_),a=Math.abs(b-t);return A>0&&a>0?{width:A,height:a}:null}function qA(H,$){let e=jA(H);if(e)return e;let _=typeof H.framebufferMask==="string"?H.framebufferMask:null;if(!_)return null;let t=typeof H.__profileDir==="string"?H.__profileDir:null;if(!t)return null;let T=v(t,`${_}.pdf`);if(!RH(T))return null;let b=kT(yH(T));if(!b)return null;let A=QA($);return{width:b.width/A,height:b.height/A}}function mT(H){let $=r_(H),e=$;if(e_.has(e))return e_.get(e)??null;let _=WA($);return e_.set(e,_),_}function qT(H){let $=r_(H);if(__.has($))return __.get($)??null;let e=PA(H);return __.set($,e),e}function PA(H){let $=FA(H),e=$?WT($):null,_=ZA(e)??UA(H.name);if(!_)return null;let t=yT(_);return t?{name:_,width:t.width,height:t.height}:null}function PT(H,$){let e=Y$(H.searchParams.get("chrome")??""),_=H.searchParams.get("image")??"";if(!/^[A-Za-z0-9_-]+$/.test(e)||!_){e$($,400,"Invalid chrome asset request");return}let t=UT(e);if(!t||!t.allowedImages.has(_)||_.includes("/")){e$($,404,"Chrome asset not found");return}let T=JT(e,_);if(!RH(T)){e$($,404,"Chrome asset not found");return}try{let b=YA(e,_,T),A=yH(b);$.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(A.byteLength)}),$.end(A)}catch(b){e$($,500,b instanceof Error?b.message:"Failed to render chrome asset")}}function xT(H,$){let e=H.searchParams.get("name")??"";try{let _=yT(e);if(!_){e$($,404,"Placeholder asset not found");return}let t=yH(_.pngPath);$.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(t.byteLength)}),$.end(t)}catch(_){e$($,500,_ instanceof Error?_.message:"Failed to render placeholder asset")}}function yT(H){if(!/^[A-Za-z0-9._-]+$/.test(H))return null;if(T_.has(H))return T_.get(H)??null;let $=xA(H),e=$?zA(H,$):null;return T_.set(H,e),e}function xA(H){let e=yA(H)?.paths.find((t)=>RH(t));if(e)return e;if(!ZT().some((t)=>t.iconName===H))return null;let _=v(OH,`${H}.icns`);return RH(_)?_:null}function yA(H){return Object.prototype.hasOwnProperty.call(NT,H)?NT[H]:null}function WA(H){let $=FT(H);if(!RH($))return null;let e=WT($);if(!e?.chromeIdentifier)return null;let _=UT(e.chromeIdentifier);if(!_)return null;let t=null;if(_.compositeImage)t=b_(_.identifier,_.compositeImage);let T=t?{width:t.width-_.insets.left-_.insets.right,height:t.height-_.insets.top-_.insets.bottom}:e.screenSize;if(!T||T.width<=0||T.height<=0)return null;let b=t??{width:T.width+_.insets.left+_.insets.right,height:T.height+_.insets.top+_.insets.bottom},A={x:_.devicePadding.left,y:_.devicePadding.top,width:b.width,height:b.height},a={width:b.width+_.devicePadding.left+_.devicePadding.right,height:b.height+_.devicePadding.top+_.devicePadding.bottom},r={x:A.x+_.insets.left,y:A.y+_.insets.top,width:T.width,height:T.height},L=_.slice?b_(_.identifier,_.slice.topLeft):null,c=_.buttons.flatMap((u)=>{let n=b_(_.identifier,u.image);if(!n)return[];let h=KA(u,n,b,_.devicePadding);return[{name:u.name,image:u.image,onTop:u.onTop,frame:{...h,...n}}]});return{identifier:_.identifier,frame:a,body:A,screen:r,insets:_.insets,outerCornerRadius:_.outerCornerRadius,innerCornerRadius:_.innerCornerRadius,compositeImage:_.compositeImage,slice:_.slice,corner:L,buttons:c}}function WT(H){let $=Q$(H);if(!$)return null;let e=typeof $.chromeIdentifier==="string"?$.chromeIdentifier:null,_=e?Y$(e):null;return{chromeIdentifier:_,modelIdentifier:typeof $.modelIdentifier==="string"?$.modelIdentifier:null,productClass:typeof $.productClass==="string"?$.productClass:null,screenSize:_?qA({...$,__profileDir:gT(H)},_):null}}function r_(H){return vA(H.deviceTypeIdentifier)??H.name}function FA(H){let $=FT(r_(H));return RH($)?$:null}function FT(H){return v(L_,`${H}.simdevicetype`,"Contents","Resources","profile.plist")}function ZA(H){if(!H)return null;let $=new Set;if(H.modelIdentifier)$.add(H.modelIdentifier);if(H.productClass)$.add(H.productClass),$.add(`${H.productClass}AP`);if($.size===0)return null;for(let e of ZT())if(e.modelCodes.some((_)=>$.has(_)))return e.iconName;return null}function UA(H){let $=H.toLowerCase();if($.includes("vision"))return"vision-pro";if(/iphone\s+17e\b/.test($))return"iphone-17e";if(/ipad\s+air\s+11-inch\s+\(m4\)/.test($))return"ipad-air-11-inch-m4";if(/ipad\s+air\s+13-inch\s+\(m4\)/.test($))return"ipad-air-13-inch-m4";return null}function ZT(){if(t_)return t_;let H=Q$(v(OH,"MobileDevices-Info.plist"))??Q$(v(gT(OH),"Info.plist")),$=Array.isArray(H?.UTExportedTypeDeclarations)?H.UTExportedTypeDeclarations:[],e=[];for(let _ of $){let t=cH(_),T=bH(t.UTTypeIconFile);if(!T||!T.endsWith(".icns"))continue;let b=v(OH,T);if(!RH(b))continue;let a=cH(t.UTTypeTagSpecification)["com.apple.device-model-code"],r=Array.isArray(a)?a.filter((L)=>typeof L==="string"&&L.length>0):[];if(r.length===0)continue;e.push({description:bH(t.UTTypeDescription)??"",iconFile:T,iconName:GT(T,".icns"),modelCodes:r})}return t_=e,e}function UT(H){let $=Y$(H);if(!/^[A-Za-z0-9_-]+$/.test($))return null;if($_.has($))return $_.get($)??null;let e=v(ST,`${$}.devicechrome`,"Contents","Resources","chrome.json"),_=null;try{let t=JSON.parse(yH(e,"utf-8"));_=JA(t)}catch{_=null}return $_.set($,_),_}function JA(H){let $=typeof H.identifier==="string"?H.identifier:null;if(!$)return null;let e=Y$($),_=cH(H.images),t=cH(_.sizing),T=cH(H.paths),b=lH(cH(T.simpleOutsideBorder).cornerRadiusX),A={top:lH(t.topHeight),left:lH(t.leftWidth),bottom:lH(t.bottomHeight),right:lH(t.rightWidth)},a=cH(_.devicePadding),r={top:lH(a.top),left:lH(a.left),bottom:lH(a.bottom),right:lH(a.right)},L=typeof _.composite==="string"?_.composite:null,c=wA(_),u=Array.isArray(H.inputs)?H.inputs.flatMap((h)=>{let I=XA(cH(h));return I?[I]:[]}):[],n=new Set;for(let h of Object.values(_))if(typeof h==="string")n.add(h);for(let h of u)n.add(h.image);if(Array.isArray(H.inputs))for(let h of H.inputs){let I=cH(h);if(typeof I.imageDown==="string")n.add(I.imageDown)}return{identifier:e,insets:A,devicePadding:r,outerCornerRadius:b,innerCornerRadius:Math.max(b-Math.max(A.left,A.top),0),compositeImage:L,slice:c,buttons:u,allowedImages:n}}function wA(H){let $=bH(H.topLeft),e=bH(H.top),_=bH(H.topRight),t=bH(H.right),T=bH(H.bottomRight),b=bH(H.bottom),A=bH(H.bottomLeft),a=bH(H.left);if(!$||!e||!_||!t||!T||!b||!A||!a)return null;return{topLeft:$,top:e,topRight:_,right:t,bottomRight:T,bottom:b,bottomLeft:A,left:a}}function XA(H){let $=bH(H.name),e=bH(H.image);if(!$||!e)return null;let _=bH(H.anchor),t=bH(H.align),T=cH(H.offsets),b=dT(cH(T.normal)),A=dT(cH(T.rollover));return{name:$,image:e,onTop:H.onTop===!0,anchor:_==="right"||_==="top"||_==="bottom"?_:"left",align:t==="trailing"?"trailing":"leading",normalOffset:b??A??{x:0,y:0},rolloverOffset:A??b??{x:0,y:0}}}function KA(H,$,e,_){let{left:t,top:T}=_,b=2*H.normalOffset.x-H.rolloverOffset.x,A=2*H.normalOffset.y-H.rolloverOffset.y,a=H.align==="trailing"?t+e.width+b-$.width:t+b;switch(H.anchor){case"left":return{x:t+H.rolloverOffset.x-$.width/2,y:T+H.rolloverOffset.y};case"right":return{x:t+e.width+b,y:T+A};case"top":return{x:a,y:T+A-$.height};case"bottom":return{x:a,y:T+e.height+A}}}function vA(H){if(!H)return null;if(!H_)H_=VA();return H_.get(H)??null}function VA(){let H=new Map;try{for(let $ of SA(L_)){if(!$.endsWith(".simdevicetype"))continue;let e=v(L_,$),_=Q$(v(e,"Contents","Info.plist")),t=typeof _?.CFBundleIdentifier==="string"?_.CFBundleIdentifier:null,T=typeof _?.CFBundleName==="string"?_.CFBundleName:GT($,".simdevicetype");if(t)H.set(t,T)}}catch{}return H}function Q$(H){try{let $=j$("plutil",["-convert","json","-o","-",H],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:2000});return JSON.parse($)}catch{return null}}function jA(H){let $=_$(H.mainScreenWidth),e=_$(H.mainScreenHeight),_=_$(H.mainScreenScale);if(!$||!e||!_||_<=0)return null;return{width:$/_,height:e/_}}function QA(H){if(H.startsWith("phone"))return 3;if(H.startsWith("tablet"))return 2;if(H.startsWith("watch"))return 2;return 1}function b_(H,$){let e=JT(H,$);if(!RH(e))return null;return kT(yH(e))}function JT(H,$){return v(ST,`${H}.devicechrome`,"Contents","Resources",`${$}.pdf`)}function YA(H,$,e){pT(ET,{recursive:!0});let _=OT(e),t=lT("sha1").update(H).update("\x00").update($).update("\x00").update(String(_.mtimeMs)).update("\x00").update(String(_.size)).digest("hex"),T=v(ET,`${H}-${t}.png`);if(RH(T))return T;let b=`${T}.${process.pid}.tmp`;return j$("sips",["-s","format","png",e,"--out",b],{stdio:["ignore","ignore","ignore"],timeout:1e4}),BT(b,T),T}function zA(H,$){pT(CT,{recursive:!0});let e=OT($),_=lT("sha1").update(H).update("\x00").update($).update("\x00").update(String(e.mtimeMs)).update("\x00").update(String(e.size)).digest("hex"),t=v(CT,`${H}-${_}.png`);if(RH(t)){let A=a_(yH(t));return{sourcePath:$,pngPath:t,width:A.width,height:A.height}}let T=`${t}.${process.pid}.tmp`,b=`${t}.${process.pid}.raw.png`;try{j$("sips",["-s","format","png",$,"--out",b],{stdio:["ignore","ignore","ignore"],timeout:1e4});let A=yH(b),a=Ho(A)??{x:0,y:0,...a_(A)};return j$("sips",["-c",String(a.height),String(a.width),"--cropOffset",String(a.y),String(a.x),"-s","format","png",$,"--out",T],{stdio:["ignore","ignore","ignore"],timeout:1e4}),BT(T,t),{sourcePath:$,pngPath:t,width:a.width,height:a.height}}finally{try{if(RH(b))DT(b)}catch{}try{if(RH(T))DT(T)}catch{}}}function a_(H){if(H.byteLength<24||H[0]!==137||H.toString("ascii",1,4)!=="PNG")throw Error("Invalid PNG placeholder asset");return{width:H.readUInt32BE(16),height:H.readUInt32BE(20)}}function Ho(H){let{width:$,height:e}=a_(H),_=8,t=0,T=0,b=[];while(_<H.byteLength){let l=H.readUInt32BE(_);_+=4;let N=H.toString("ascii",_,_+4);_+=4;let C=H.subarray(_,_+l);if(_+=l+4,N==="IHDR")t=C[8]??0,T=C[9]??0;else if(N==="IDAT")b.push(C);else if(N==="IEND")break}let A=T===6?4:T===4?2:0;if(t!==8||A===0||b.length===0)return{x:0,y:0,width:$,height:e};let a=kA(Buffer.concat(b)),r=$*A,L=Buffer.alloc(r),c=0,u=$,n=e,h=-1,I=-1;for(let l=0;l<e;l++){let N=a[c++]??0,C=Buffer.from(a.subarray(c,c+r));c+=r,$o(C,L,A,N);for(let D=0;D<$;D++){if((C[D*A+A-1]??0)<=0)continue;if(D<u)u=D;if(l<n)n=l;if(D>h)h=D;if(l>I)I=l}L=C}if(h<u||I<n)return null;return{x:u,y:n,width:h-u+1,height:I-n+1}}function $o(H,$,e,_){for(let t=0;t<H.byteLength;t++){let T=t>=e?H[t-e]:0,b=$[t]??0,A=t>=e?$[t-e]:0;switch(_){case 0:break;case 1:H[t]=H[t]+T&255;break;case 2:H[t]=H[t]+b&255;break;case 3:H[t]=H[t]+Math.floor((T+b)/2)&255;break;case 4:H[t]=H[t]+eo(T,b,A)&255;break;default:throw Error(`Unsupported PNG filter ${_}`)}}}function eo(H,$,e){let _=H+$-e,t=Math.abs(_-H),T=Math.abs(_-$),b=Math.abs(_-e);if(t<=T&&t<=b)return H;return T<=b?$:e}function e$(H,$,e){H.writeHead($,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(JSON.stringify({ok:!1,error:e}))}function lH(H){return _$(H)??0}function _$(H){if(typeof H==="number"&&Number.isFinite(H))return H;if(typeof H==="string"&&H.trim()){let $=Number(H);return Number.isFinite($)?$:null}return null}function bH(H){return typeof H==="string"&&H?H:null}function cH(H){return H&&typeof H==="object"&&!Array.isArray(H)?H:{}}function dT(H){let $=_$(H.x),e=_$(H.y);return $===null||e===null?null:{x:$,y:e}}var L_="/Library/Developer/CoreSimulator/Profiles/DeviceTypes",ST="/Library/Developer/DeviceKit/Chrome",fT="com.apple.dt.devicekit.chrome.",ET,CT,OH="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle/Contents/Resources",mA="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/CoreTypes-0006.bundle/Contents/Resources",NT,H_=null,$_,e_,__,t_=null,T_;var wT=DH(()=>{ET=v(MT(),"serve-sim-devicekit-chrome"),CT=v(MT(),"serve-sim-device-placeholder-assets"),NT={"vision-pro":{paths:[v(OH,"com.apple.vision-pro.icns"),v(mA,"com.apple.visionpro.icns")]},"iphone-17e":{paths:[v(OH,"com.apple.iphone-16-e-1.icns")]},"ipad-air-11-inch-m4":{paths:[v(OH,"com.apple.ipad-air-m3-1.icns")]},"ipad-air-13-inch-m4":{paths:[v(OH,"com.apple.ipad-air-m3-1.icns")]}},$_=new Map,e_=new Map,__=new Map,T_=new Map});import{exec as _o}from"child_process";import{createHash as XT,timingSafeEqual as to}from"crypto";import{request as To}from"http";import{WebSocketServer as bo}from"ws";function ro(H,$){let e=XT("sha256").update(H).digest(),_=XT("sha256").update($).digest();return to(e,_)}function Ao(H,$,e){let _=!1,t=new Map,T=e.ssePrefixes??[],b=(r)=>{if(H.readyState===H.OPEN)H.send(JSON.stringify(r))},A=setTimeout(()=>{if(!_)H.close()},Lo);A.unref?.();let a=(r,L)=>{if(t.has(r))return;let c=L.split("?")[0];if(!L.startsWith("/")||!T.some((n)=>c===n)){b({sub:r,end:!0,error:"path not allowed"});return}if(!$){b({sub:r,end:!0,error:"no local port"});return}let u=To({host:"127.0.0.1",port:$,path:L,headers:{accept:"text/event-stream"}},(n)=>{n.on("data",(h)=>b({sub:r,data:h.toString("utf-8")})),n.on("end",()=>{t.delete(r),b({sub:r,end:!0})})});u.on("error",()=>{t.delete(r),b({sub:r,end:!0})}),u.end(),t.set(r,{destroy:()=>u.destroy()})};H.on("message",(r)=>{let L;try{L=JSON.parse(r.toString())}catch{return}if(!_){if(typeof L.token==="string"&&ro(L.token,e.execToken))_=!0,clearTimeout(A),b({ready:!0});else H.close();return}if(typeof L.unsub==="number"){t.get(L.unsub)?.destroy(),t.delete(L.unsub);return}if(typeof L.sub==="number"&&typeof L.path==="string"){a(L.sub,L.path);return}if(typeof L.id==="number"&&L.ui!==void 0){let{id:n}=L;if(!e.onUiRequest){b({id:n,error:"ui requests not supported"});return}e.onUiRequest(L.ui).then((h)=>b({id:n,...h})).catch((h)=>b({id:n,error:h instanceof Error?h.message:String(h)}));return}if(typeof L.id!=="number"||typeof L.command!=="string"||!L.command)return;let{id:c,command:u}=L;_o(u,{maxBuffer:16777216},(n,h,I)=>{b({id:c,stdout:h.toString(),stderr:I.toString(),exitCode:n?n.code??1:0})})}),H.on("error",()=>H.close()),H.on("close",()=>{clearTimeout(A);for(let r of t.values())r.destroy();t.clear()})}function KT(H){let $=new bo({noServer:!0,maxPayload:ao});return function(_,t,T){let b=_.url??"",A=b.indexOf("?"),a=A===-1?b:b.slice(0,A);if(a!==H.path&&a!==`${H.path}/`)return!1;let r=_.headers.origin;if(r)try{if(new URL(r).host!==_.headers.host)return t.destroy(),!0}catch{return t.destroy(),!0}let L=t.localPort;if(!L){let c=Number((_.headers.host??"").split(":")[1]);if(Number.isFinite(c)&&c>0)L=c}return $.handleUpgrade(_,t,T,(c)=>{Ao(c,L,H)}),!0}}var Lo=1e4,ao=4194304;var vT=()=>{};var Nb={};at(Nb,{startCdpServer:()=>kc,startBunCdpServer:()=>Wc,listTargets:()=>Fc,listDevices:()=>Eb});import{createRequire as oo}from"node:module";import*as Tb from"node:net";import*as rb from"node:net";import{spawnSync as mo}from"node:child_process";import*as cb from"node:tls";import*as hb from"node:http";function ho(H){return this[H]}function jT(H){return H.replace(/[&<>'"]/g,($)=>$==="&"?"&amp;":$==="<"?"&lt;":$===">"?"&gt;":$==="'"?"&apos;":"&quot;")}function lo(H){let $="";for(let e=0;e<H.length;e++)$+=String.fromCharCode(H[e]);return btoa($)}function po(H){let $=atob(H.replace(/\s+/g,"")),e=new Uint8Array($.length);for(let _=0;_<$.length;_++)e[_]=$.charCodeAt(_);return e}function u_(H,$){if(H===null||H===void 0)return`${$}<string></string>`;if(typeof H==="boolean")return`${$}<${H?"true":"false"}/>`;if(typeof H==="string")return`${$}<string>${jT(H)}</string>`;if(typeof H==="number"){if(Number.isInteger(H))return`${$}<integer>${H}</integer>`;return`${$}<real>${H}</real>`}if(typeof H==="bigint")return`${$}<integer>${H.toString()}</integer>`;if(H instanceof Uint8Array)return`${$}<data>${lo(H)}</data>`;if(H instanceof Date)return`${$}<date>${H.toISOString().replace(/\.\d+Z$/,"Z")}</date>`;if(Array.isArray(H)){if(H.length===0)return`${$}<array/>`;let t=H.map((T)=>u_(T,$+"\t")).join(`
48
+ `}function SA({port:H}){let $=new Set,e=null,_=null,t=ze,T=!1,b=H,A=!1,a=()=>{if(A||$.size===0||e)return;e=setTimeout(r,t)},r=async()=>{if(e=null,A||T||$.size===0){a();return}T=!0;try{let L=await GA(b),c=gA(L);if(c!==_){for(let u of $)u.write(c);t=ze}else t=Math.min(t*2,CA);if(_=c,OA(L))t=NA}finally{T=!1,a()}};return{setPort(L){if(A||L===b)return;if(b=L,_=null,t=ze,e)clearTimeout(e),e=null;r()},addClient(L){if(A)return()=>{};if($.add(L),_)L.write(_);return r(),()=>{if($.delete(L),$.size===0&&e)clearTimeout(e),e=null}},dispose(){if(A)return;if(A=!0,e)clearTimeout(e),e=null;$.clear(),_=null}}}function IT(){let H=new Map;return{get($,e){let _=H.get($);if(_)return _.setPort(e),_;let t=SA({port:e});return H.set($,t),t},prune($){let e=$ instanceof Set?$:new Set($);for(let[_,t]of H)if(!e.has(_))t.dispose(),H.delete(_)},size(){return H.size}}}var EA=3500,Ye=500,ze=500,CA=2000,NA=15000;var DT=()=>{};import{execFileSync as j$}from"child_process";import{createHash as pT}from"crypto";import{existsSync as RH,mkdirSync as BT,readdirSync as kA,readFileSync as yH,renameSync as OT,statSync as MT,unlinkSync as fT}from"fs";import{tmpdir as GT}from"os";import{basename as gT,dirname as ST,join as v}from"path";import{inflateSync as mA}from"zlib";function Y$(H){return H.startsWith(ET)?H.slice(ET.length):H}function mT(H){let $=typeof H==="string"?H:H.toString("latin1"),e=/\/CropBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec($)??/\/MediaBox\s*\[\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*\]/.exec($);if(!e)return null;let _=Number(e[1]),t=Number(e[2]),T=Number(e[3]),b=Number(e[4]),A=Math.abs(T-_),a=Math.abs(b-t);return A>0&&a>0?{width:A,height:a}:null}function PA(H,$){let e=QA(H);if(e)return e;let _=typeof H.framebufferMask==="string"?H.framebufferMask:null;if(!_)return null;let t=typeof H.__profileDir==="string"?H.__profileDir:null;if(!t)return null;let T=v(t,`${_}.pdf`);if(!RH(T))return null;let b=mT(yH(T));if(!b)return null;let A=YA($);return{width:b.width/A,height:b.height/A}}function qT(H){let $=r_(H),e=$;if(e_.has(e))return e_.get(e)??null;let _=FA($);return e_.set(e,_),_}function PT(H){let $=r_(H);if(__.has($))return __.get($)??null;let e=xA(H);return __.set($,e),e}function xA(H){let $=ZA(H),e=$?FT($):null,_=UA(e)??JA(H.name);if(!_)return null;let t=WT(_);return t?{name:_,width:t.width,height:t.height}:null}function xT(H,$){let e=Y$(H.searchParams.get("chrome")??""),_=H.searchParams.get("image")??"";if(!/^[A-Za-z0-9_-]+$/.test(e)||!_){e$($,400,"Invalid chrome asset request");return}let t=JT(e);if(!t||!t.allowedImages.has(_)||_.includes("/")){e$($,404,"Chrome asset not found");return}let T=wT(e,_);if(!RH(T)){e$($,404,"Chrome asset not found");return}try{let b=zA(e,_,T),A=yH(b);$.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(A.byteLength)}),$.end(A)}catch(b){e$($,500,b instanceof Error?b.message:"Failed to render chrome asset")}}function yT(H,$){let e=H.searchParams.get("name")??"";try{let _=WT(e);if(!_){e$($,404,"Placeholder asset not found");return}let t=yH(_.pngPath);$.writeHead(200,{"Content-Type":"image/png","Cache-Control":"public, max-age=604800, immutable","Content-Length":String(t.byteLength)}),$.end(t)}catch(_){e$($,500,_ instanceof Error?_.message:"Failed to render placeholder asset")}}function WT(H){if(!/^[A-Za-z0-9._-]+$/.test(H))return null;if(T_.has(H))return T_.get(H)??null;let $=yA(H),e=$?Ho(H,$):null;return T_.set(H,e),e}function yA(H){let e=WA(H)?.paths.find((t)=>RH(t));if(e)return e;if(!UT().some((t)=>t.iconName===H))return null;let _=v(OH,`${H}.icns`);return RH(_)?_:null}function WA(H){return Object.prototype.hasOwnProperty.call(dT,H)?dT[H]:null}function FA(H){let $=ZT(H);if(!RH($))return null;let e=FT($);if(!e?.chromeIdentifier)return null;let _=JT(e.chromeIdentifier);if(!_)return null;let t=null;if(_.compositeImage)t=b_(_.identifier,_.compositeImage);let T=t?{width:t.width-_.insets.left-_.insets.right,height:t.height-_.insets.top-_.insets.bottom}:e.screenSize;if(!T||T.width<=0||T.height<=0)return null;let b=t??{width:T.width+_.insets.left+_.insets.right,height:T.height+_.insets.top+_.insets.bottom},A={x:_.devicePadding.left,y:_.devicePadding.top,width:b.width,height:b.height},a={width:b.width+_.devicePadding.left+_.devicePadding.right,height:b.height+_.devicePadding.top+_.devicePadding.bottom},r={x:A.x+_.insets.left,y:A.y+_.insets.top,width:T.width,height:T.height},L=_.slice?b_(_.identifier,_.slice.topLeft):null,c=_.buttons.flatMap((u)=>{let n=b_(_.identifier,u.image);if(!n)return[];let h=vA(u,n,b,_.devicePadding);return[{name:u.name,image:u.image,onTop:u.onTop,frame:{...h,...n}}]});return{identifier:_.identifier,frame:a,body:A,screen:r,insets:_.insets,outerCornerRadius:_.outerCornerRadius,innerCornerRadius:_.innerCornerRadius,compositeImage:_.compositeImage,slice:_.slice,corner:L,buttons:c}}function FT(H){let $=Q$(H);if(!$)return null;let e=typeof $.chromeIdentifier==="string"?$.chromeIdentifier:null,_=e?Y$(e):null;return{chromeIdentifier:_,modelIdentifier:typeof $.modelIdentifier==="string"?$.modelIdentifier:null,productClass:typeof $.productClass==="string"?$.productClass:null,screenSize:_?PA({...$,__profileDir:ST(H)},_):null}}function r_(H){return VA(H.deviceTypeIdentifier)??H.name}function ZA(H){let $=ZT(r_(H));return RH($)?$:null}function ZT(H){return v(L_,`${H}.simdevicetype`,"Contents","Resources","profile.plist")}function UA(H){if(!H)return null;let $=new Set;if(H.modelIdentifier)$.add(H.modelIdentifier);if(H.productClass)$.add(H.productClass),$.add(`${H.productClass}AP`);if($.size===0)return null;for(let e of UT())if(e.modelCodes.some((_)=>$.has(_)))return e.iconName;return null}function JA(H){let $=H.toLowerCase();if($.includes("vision"))return"vision-pro";if(/iphone\s+17e\b/.test($))return"iphone-17e";if(/ipad\s+air\s+11-inch\s+\(m4\)/.test($))return"ipad-air-11-inch-m4";if(/ipad\s+air\s+13-inch\s+\(m4\)/.test($))return"ipad-air-13-inch-m4";return null}function UT(){if(t_)return t_;let H=Q$(v(OH,"MobileDevices-Info.plist"))??Q$(v(ST(OH),"Info.plist")),$=Array.isArray(H?.UTExportedTypeDeclarations)?H.UTExportedTypeDeclarations:[],e=[];for(let _ of $){let t=cH(_),T=bH(t.UTTypeIconFile);if(!T||!T.endsWith(".icns"))continue;let b=v(OH,T);if(!RH(b))continue;let a=cH(t.UTTypeTagSpecification)["com.apple.device-model-code"],r=Array.isArray(a)?a.filter((L)=>typeof L==="string"&&L.length>0):[];if(r.length===0)continue;e.push({description:bH(t.UTTypeDescription)??"",iconFile:T,iconName:gT(T,".icns"),modelCodes:r})}return t_=e,e}function JT(H){let $=Y$(H);if(!/^[A-Za-z0-9_-]+$/.test($))return null;if($_.has($))return $_.get($)??null;let e=v(kT,`${$}.devicechrome`,"Contents","Resources","chrome.json"),_=null;try{let t=JSON.parse(yH(e,"utf-8"));_=wA(t)}catch{_=null}return $_.set($,_),_}function wA(H){let $=typeof H.identifier==="string"?H.identifier:null;if(!$)return null;let e=Y$($),_=cH(H.images),t=cH(_.sizing),T=cH(H.paths),b=lH(cH(T.simpleOutsideBorder).cornerRadiusX),A={top:lH(t.topHeight),left:lH(t.leftWidth),bottom:lH(t.bottomHeight),right:lH(t.rightWidth)},a=cH(_.devicePadding),r={top:lH(a.top),left:lH(a.left),bottom:lH(a.bottom),right:lH(a.right)},L=typeof _.composite==="string"?_.composite:null,c=XA(_),u=Array.isArray(H.inputs)?H.inputs.flatMap((h)=>{let I=KA(cH(h));return I?[I]:[]}):[],n=new Set;for(let h of Object.values(_))if(typeof h==="string")n.add(h);for(let h of u)n.add(h.image);if(Array.isArray(H.inputs))for(let h of H.inputs){let I=cH(h);if(typeof I.imageDown==="string")n.add(I.imageDown)}return{identifier:e,insets:A,devicePadding:r,outerCornerRadius:b,innerCornerRadius:Math.max(b-Math.max(A.left,A.top),0),compositeImage:L,slice:c,buttons:u,allowedImages:n}}function XA(H){let $=bH(H.topLeft),e=bH(H.top),_=bH(H.topRight),t=bH(H.right),T=bH(H.bottomRight),b=bH(H.bottom),A=bH(H.bottomLeft),a=bH(H.left);if(!$||!e||!_||!t||!T||!b||!A||!a)return null;return{topLeft:$,top:e,topRight:_,right:t,bottomRight:T,bottom:b,bottomLeft:A,left:a}}function KA(H){let $=bH(H.name),e=bH(H.image);if(!$||!e)return null;let _=bH(H.anchor),t=bH(H.align),T=cH(H.offsets),b=lT(cH(T.normal)),A=lT(cH(T.rollover));return{name:$,image:e,onTop:H.onTop===!0,anchor:_==="right"||_==="top"||_==="bottom"?_:"left",align:t==="trailing"?"trailing":"leading",normalOffset:b??A??{x:0,y:0},rolloverOffset:A??b??{x:0,y:0}}}function vA(H,$,e,_){let{left:t,top:T}=_,b=2*H.normalOffset.x-H.rolloverOffset.x,A=2*H.normalOffset.y-H.rolloverOffset.y,a=H.align==="trailing"?t+e.width+b-$.width:t+b;switch(H.anchor){case"left":return{x:t+H.rolloverOffset.x-$.width/2,y:T+H.rolloverOffset.y};case"right":return{x:t+e.width+b,y:T+A};case"top":return{x:a,y:T+A-$.height};case"bottom":return{x:a,y:T+e.height+A}}}function VA(H){if(!H)return null;if(!H_)H_=jA();return H_.get(H)??null}function jA(){let H=new Map;try{for(let $ of kA(L_)){if(!$.endsWith(".simdevicetype"))continue;let e=v(L_,$),_=Q$(v(e,"Contents","Info.plist")),t=typeof _?.CFBundleIdentifier==="string"?_.CFBundleIdentifier:null,T=typeof _?.CFBundleName==="string"?_.CFBundleName:gT($,".simdevicetype");if(t)H.set(t,T)}}catch{}return H}function Q$(H){try{let $=j$("plutil",["-convert","json","-o","-",H],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:2000});return JSON.parse($)}catch{return null}}function QA(H){let $=_$(H.mainScreenWidth),e=_$(H.mainScreenHeight),_=_$(H.mainScreenScale);if(!$||!e||!_||_<=0)return null;return{width:$/_,height:e/_}}function YA(H){if(H.startsWith("phone"))return 3;if(H.startsWith("tablet"))return 2;if(H.startsWith("watch"))return 2;return 1}function b_(H,$){let e=wT(H,$);if(!RH(e))return null;return mT(yH(e))}function wT(H,$){return v(kT,`${H}.devicechrome`,"Contents","Resources",`${$}.pdf`)}function zA(H,$,e){BT(CT,{recursive:!0});let _=MT(e),t=pT("sha1").update(H).update("\x00").update($).update("\x00").update(String(_.mtimeMs)).update("\x00").update(String(_.size)).digest("hex"),T=v(CT,`${H}-${t}.png`);if(RH(T))return T;let b=`${T}.${process.pid}.tmp`;return j$("sips",["-s","format","png",e,"--out",b],{stdio:["ignore","ignore","ignore"],timeout:1e4}),OT(b,T),T}function Ho(H,$){BT(NT,{recursive:!0});let e=MT($),_=pT("sha1").update(H).update("\x00").update($).update("\x00").update(String(e.mtimeMs)).update("\x00").update(String(e.size)).digest("hex"),t=v(NT,`${H}-${_}.png`);if(RH(t)){let A=a_(yH(t));return{sourcePath:$,pngPath:t,width:A.width,height:A.height}}let T=`${t}.${process.pid}.tmp`,b=`${t}.${process.pid}.raw.png`;try{j$("sips",["-s","format","png",$,"--out",b],{stdio:["ignore","ignore","ignore"],timeout:1e4});let A=yH(b),a=$o(A)??{x:0,y:0,...a_(A)};return j$("sips",["-c",String(a.height),String(a.width),"--cropOffset",String(a.y),String(a.x),"-s","format","png",$,"--out",T],{stdio:["ignore","ignore","ignore"],timeout:1e4}),OT(T,t),{sourcePath:$,pngPath:t,width:a.width,height:a.height}}finally{try{if(RH(b))fT(b)}catch{}try{if(RH(T))fT(T)}catch{}}}function a_(H){if(H.byteLength<24||H[0]!==137||H.toString("ascii",1,4)!=="PNG")throw Error("Invalid PNG placeholder asset");return{width:H.readUInt32BE(16),height:H.readUInt32BE(20)}}function $o(H){let{width:$,height:e}=a_(H),_=8,t=0,T=0,b=[];while(_<H.byteLength){let l=H.readUInt32BE(_);_+=4;let N=H.toString("ascii",_,_+4);_+=4;let C=H.subarray(_,_+l);if(_+=l+4,N==="IHDR")t=C[8]??0,T=C[9]??0;else if(N==="IDAT")b.push(C);else if(N==="IEND")break}let A=T===6?4:T===4?2:0;if(t!==8||A===0||b.length===0)return{x:0,y:0,width:$,height:e};let a=mA(Buffer.concat(b)),r=$*A,L=Buffer.alloc(r),c=0,u=$,n=e,h=-1,I=-1;for(let l=0;l<e;l++){let N=a[c++]??0,C=Buffer.from(a.subarray(c,c+r));c+=r,eo(C,L,A,N);for(let D=0;D<$;D++){if((C[D*A+A-1]??0)<=0)continue;if(D<u)u=D;if(l<n)n=l;if(D>h)h=D;if(l>I)I=l}L=C}if(h<u||I<n)return null;return{x:u,y:n,width:h-u+1,height:I-n+1}}function eo(H,$,e,_){for(let t=0;t<H.byteLength;t++){let T=t>=e?H[t-e]:0,b=$[t]??0,A=t>=e?$[t-e]:0;switch(_){case 0:break;case 1:H[t]=H[t]+T&255;break;case 2:H[t]=H[t]+b&255;break;case 3:H[t]=H[t]+Math.floor((T+b)/2)&255;break;case 4:H[t]=H[t]+_o(T,b,A)&255;break;default:throw Error(`Unsupported PNG filter ${_}`)}}}function _o(H,$,e){let _=H+$-e,t=Math.abs(_-H),T=Math.abs(_-$),b=Math.abs(_-e);if(t<=T&&t<=b)return H;return T<=b?$:e}function e$(H,$,e){H.writeHead($,{"Content-Type":"application/json","Cache-Control":"no-store"}),H.end(JSON.stringify({ok:!1,error:e}))}function lH(H){return _$(H)??0}function _$(H){if(typeof H==="number"&&Number.isFinite(H))return H;if(typeof H==="string"&&H.trim()){let $=Number(H);return Number.isFinite($)?$:null}return null}function bH(H){return typeof H==="string"&&H?H:null}function cH(H){return H&&typeof H==="object"&&!Array.isArray(H)?H:{}}function lT(H){let $=_$(H.x),e=_$(H.y);return $===null||e===null?null:{x:$,y:e}}var L_="/Library/Developer/CoreSimulator/Profiles/DeviceTypes",kT="/Library/Developer/DeviceKit/Chrome",ET="com.apple.dt.devicekit.chrome.",CT,NT,OH="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle/Contents/Resources",qA="/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/CoreTypes-0006.bundle/Contents/Resources",dT,H_=null,$_,e_,__,t_=null,T_;var XT=DH(()=>{CT=v(GT(),"serve-sim-devicekit-chrome"),NT=v(GT(),"serve-sim-device-placeholder-assets"),dT={"vision-pro":{paths:[v(OH,"com.apple.vision-pro.icns"),v(qA,"com.apple.visionpro.icns")]},"iphone-17e":{paths:[v(OH,"com.apple.iphone-16-e-1.icns")]},"ipad-air-11-inch-m4":{paths:[v(OH,"com.apple.ipad-air-m3-1.icns")]},"ipad-air-13-inch-m4":{paths:[v(OH,"com.apple.ipad-air-m3-1.icns")]}},$_=new Map,e_=new Map,__=new Map,T_=new Map});import{exec as to}from"child_process";import{createHash as KT,timingSafeEqual as To}from"crypto";import{request as bo}from"http";import{WebSocketServer as Lo}from"ws";function Ao(H,$){let e=KT("sha256").update(H).digest(),_=KT("sha256").update($).digest();return To(e,_)}function oo(H,$,e){let _=!1,t=new Map,T=e.ssePrefixes??[],b=(r)=>{if(H.readyState===H.OPEN)H.send(JSON.stringify(r))},A=setTimeout(()=>{if(!_)H.close()},ao);A.unref?.();let a=(r,L)=>{if(t.has(r))return;let c=L.split("?")[0];if(!L.startsWith("/")||!T.some((n)=>c===n)){b({sub:r,end:!0,error:"path not allowed"});return}if(!$){b({sub:r,end:!0,error:"no local port"});return}let u=bo({host:"127.0.0.1",port:$,path:L,headers:{accept:"text/event-stream"}},(n)=>{n.on("data",(h)=>b({sub:r,data:h.toString("utf-8")})),n.on("end",()=>{t.delete(r),b({sub:r,end:!0})})});u.on("error",()=>{t.delete(r),b({sub:r,end:!0})}),u.end(),t.set(r,{destroy:()=>u.destroy()})};H.on("message",(r)=>{let L;try{L=JSON.parse(r.toString())}catch{return}if(!_){if(typeof L.token==="string"&&Ao(L.token,e.execToken))_=!0,clearTimeout(A),b({ready:!0});else H.close();return}if(typeof L.unsub==="number"){t.get(L.unsub)?.destroy(),t.delete(L.unsub);return}if(typeof L.sub==="number"&&typeof L.path==="string"){a(L.sub,L.path);return}if(typeof L.id==="number"&&L.ui!==void 0){let{id:n}=L;if(!e.onUiRequest){b({id:n,error:"ui requests not supported"});return}e.onUiRequest(L.ui).then((h)=>b({id:n,...h})).catch((h)=>b({id:n,error:h instanceof Error?h.message:String(h)}));return}if(typeof L.id!=="number"||typeof L.command!=="string"||!L.command)return;let{id:c,command:u}=L;to(u,{maxBuffer:16777216},(n,h,I)=>{b({id:c,stdout:h.toString(),stderr:I.toString(),exitCode:n?n.code??1:0})})}),H.on("error",()=>H.close()),H.on("close",()=>{clearTimeout(A);for(let r of t.values())r.destroy();t.clear()})}function vT(H){let $=new Lo({noServer:!0,maxPayload:ro});return function(_,t,T){let b=_.url??"",A=b.indexOf("?"),a=A===-1?b:b.slice(0,A);if(a!==H.path&&a!==`${H.path}/`)return!1;let r=_.headers.origin;if(r)try{if(new URL(r).host!==_.headers.host)return t.destroy(),!0}catch{return t.destroy(),!0}let L=t.localPort;if(!L){let c=Number((_.headers.host??"").split(":")[1]);if(Number.isFinite(c)&&c>0)L=c}return $.handleUpgrade(_,t,T,(c)=>{oo(c,L,H)}),!0}}var ao=1e4,ro=4194304;var VT=()=>{};var db={};rt(db,{startCdpServer:()=>mc,startBunCdpServer:()=>Fc,listTargets:()=>Zc,listDevices:()=>Cb});import{createRequire as co}from"node:module";import*as bb from"node:net";import*as Ab from"node:net";import{spawnSync as qo}from"node:child_process";import*as Rb from"node:tls";import*as ib from"node:http";function io(H){return this[H]}function QT(H){return H.replace(/[&<>'"]/g,($)=>$==="&"?"&amp;":$==="<"?"&lt;":$===">"?"&gt;":$==="'"?"&apos;":"&quot;")}function po(H){let $="";for(let e=0;e<H.length;e++)$+=String.fromCharCode(H[e]);return btoa($)}function Bo(H){let $=atob(H.replace(/\s+/g,"")),e=new Uint8Array($.length);for(let _=0;_<$.length;_++)e[_]=$.charCodeAt(_);return e}function u_(H,$){if(H===null||H===void 0)return`${$}<string></string>`;if(typeof H==="boolean")return`${$}<${H?"true":"false"}/>`;if(typeof H==="string")return`${$}<string>${QT(H)}</string>`;if(typeof H==="number"){if(Number.isInteger(H))return`${$}<integer>${H}</integer>`;return`${$}<real>${H}</real>`}if(typeof H==="bigint")return`${$}<integer>${H.toString()}</integer>`;if(H instanceof Uint8Array)return`${$}<data>${po(H)}</data>`;if(H instanceof Date)return`${$}<date>${H.toISOString().replace(/\.\d+Z$/,"Z")}</date>`;if(Array.isArray(H)){if(H.length===0)return`${$}<array/>`;let t=H.map((T)=>u_(T,$+"\t")).join(`
49
49
  `);return`${$}<array>
50
50
  ${t}
51
- ${$}</array>`}let e=Object.keys(H);if(e.length===0)return`${$}<dict/>`;let _=e.map((t)=>`${$} <key>${jT(t)}</key>
51
+ ${$}</array>`}let e=Object.keys(H);if(e.length===0)return`${$}<dict/>`;let _=e.map((t)=>`${$} <key>${QT(t)}</key>
52
52
  `+u_(H[t],$+"\t")).join(`
53
53
  `);return`${$}<dict>
54
54
  ${_}
55
- ${$}</dict>`}function C_(H){let $=u_(H,"");return new TextEncoder().encode(Co+$+No)}class bb{src;pos=0;constructor(H){this.src=H}skip(){while(this.pos<this.src.length){let H=this.src[this.pos];if(H===" "||H==="\t"||H===`
56
- `||H==="\r")this.pos++;else if(this.src.startsWith("<!--",this.pos)){let $=this.src.indexOf("-->",this.pos+4);if($<0)throw Error("unterminated comment");this.pos=$+3}else if(this.src.startsWith("<?",this.pos)){let $=this.src.indexOf("?>",this.pos+2);if($<0)throw Error("unterminated processing instruction");this.pos=$+2}else if(this.src.startsWith("<!DOCTYPE",this.pos)){let $=0;while(this.pos<this.src.length){let e=this.src[this.pos++];if(e==="[")$++;else if(e==="]")$--;else if(e===">"&&$===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 H=this.src.indexOf(">",this.pos);if(H<0)throw Error("unterminated tag");let $=this.src.slice(this.pos+1,H);this.pos=H+1;let e=$.startsWith("/"),_=$.endsWith("/");return{name:$.replace(/^\/?/,"").replace(/\/$/,"").trim().split(/\s+/)[0],selfClose:_,isClose:e}}readText(){let H=this.src.indexOf("<",this.pos),$=H<0?this.src.slice(this.pos):this.src.slice(this.pos,H);return this.pos=H<0?this.src.length:H,$.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&apos;/g,"'").replace(/&amp;/g,"&")}}function h_(H,$){let e=(_)=>{let t=H.nextTag();if(!t||!t.isClose||t.name!==_)throw Error(`expected </${_}>`)};switch($){case"true":case"false":throw Error(`<${$}> must be self-closing`);case"string":case"key":{let _=H.readText();return e($),_}case"integer":{let _=H.readText().trim();if(e("integer"),/^-?\d+$/.test(_)&&Math.abs(Number(_))<=Number.MAX_SAFE_INTEGER)return Number(_);return BigInt(_)}case"real":{let _=Number(H.readText().trim());return e("real"),_}case"data":{let _=po(H.readText());return e("data"),_}case"date":{let _=new Date(H.readText().trim());return e("date"),_}case"array":{let _=[];while(!0){let t=H.nextTag();if(!t)throw Error("unterminated <array>");if(t.isClose&&t.name==="array")return _;_.push(t.selfClose?i_(t.name):h_(H,t.name))}}case"dict":{let _={};while(!0){let t=H.nextTag();if(!t)throw Error("unterminated <dict>");if(t.isClose&&t.name==="dict")return _;if(t.name!=="key")throw Error(`expected <key>, got <${t.name}>`);let T=H.readText();e("key");let b=H.nextTag();if(!b)throw Error("unterminated <dict>");_[T]=b.selfClose?i_(b.name):h_(H,b.name)}}default:throw Error(`unknown plist tag <${$}>`)}}function i_(H){if(H==="true")return!0;if(H==="false")return!1;if(H==="string")return"";if(H==="data")return new Uint8Array(0);if(H==="array")return[];if(H==="dict")return{};throw Error(`self-closing <${H}/> not supported`)}function $e(H){let $=typeof H==="string"?H:new TextDecoder().decode(H),e=new bb($);while(!0){let t=e.nextTag();if(!t)throw Error("no <plist> root");if(t.name==="plist"&&!t.isClose)break}let _=e.nextTag();if(!_)throw Error("empty plist");return _.selfClose?i_(_.name):h_(e,_.name)}function WH(H,$,e){let _=0;for(let t=0;t<e;t++)_=_*256+H[$+t];return _}function Bo(H){if(H.length<41)throw Error("bplist too short");let $=new TextDecoder().decode(H.slice(0,8));if($!=="bplist00")throw Error(`bad magic: ${$}`);let e=H.length-32,_=H[e+6],t=H[e+7],T=WH(H,e+8,8),b=WH(H,e+16,8),A=WH(H,e+24,8),a=Array(T);for(let c=0;c<T;c++)a[c]=WH(H,A+c*_,_);function r(c){return WH(H,c,t)}function L(c){let u=a[c],n=H[u],h=n>>4,I=n&15;function l(N){if(I!==15)return{len:I,next:N};let C=H[N];if((C&240)!==16)throw Error("expected int marker for length");let D=1<<(C&15);return{len:WH(H,N+1,D),next:N+1+D}}switch(h){case 0:if(I===0)return null;if(I===8)return!1;if(I===9)return!0;if(I===15)return null;throw Error(`unknown singleton ${I}`);case 1:{let N=1<<I,C=WH(H,u+1,N);if(N===8&&C>Number.MAX_SAFE_INTEGER)return BigInt(C);return C}case 2:{let N=1<<I,C=new DataView(H.buffer,H.byteOffset+u+1,N);return N===4?C.getFloat32(0,!1):C.getFloat64(0,!1)}case 3:{let C=new DataView(H.buffer,H.byteOffset+u+1,8).getFloat64(0,!1);return new Date(Date.UTC(2001,0,1)+C*1000)}case 4:{let{len:N,next:C}=l(u+1);return H.slice(C,C+N)}case 5:{let{len:N,next:C}=l(u+1);return new TextDecoder("ascii").decode(H.slice(C,C+N))}case 6:{let{len:N,next:C}=l(u+1),D=H.slice(C,C+N*2),d=new Uint8Array(D.length);for(let E=0;E<D.length;E+=2)d[E]=D[E+1],d[E+1]=D[E];return new TextDecoder("utf-16le").decode(d)}case 10:{let{len:N,next:C}=l(u+1),D=[];for(let d=0;d<N;d++)D.push(L(r(C+d*t)));return D}case 13:{let{len:N,next:C}=l(u+1),D={};for(let d=0;d<N;d++){let E=L(r(C+d*t)),R=L(r(C+(N+d)*t));if(typeof E!=="string")throw Error(`non-string dict key: ${typeof E}`);D[E]=R}return D}default:throw Error(`unknown bplist marker 0x${n.toString(16)} at ${u}`)}}return L(b)}function Oo(H){if(H.length>=8){if(new TextDecoder().decode(H.slice(0,8))==="bplist00")return Bo(H)}return $e(H)}class ee{chunks=[];size=0;waiters=[];closed=!1;closeErr=null;push(H){if(H.length===0)return;this.chunks.push(H),this.size+=H.length,this.drain()}close(H){this.closed=!0,this.closeErr=H??null;for(let $ of this.waiters)$.reject(H??Error("stream closed"));this.waiters=[]}read(H){return new Promise(($,e)=>{if(this.closed&&this.size<H){e(this.closeErr??Error("stream closed"));return}this.waiters.push({n:H,resolve:$,reject:e}),this.drain()})}drain(){while(this.waiters.length>0&&this.waiters[0].n<=this.size){let H=this.waiters.shift(),$=new Uint8Array(H.n),e=0;while(e<H.n){let _=this.chunks[0],t=H.n-e;if(_.length<=t)$.set(_,e),e+=_.length,this.chunks.shift();else $.set(_.subarray(0,t),e),this.chunks[0]=_.subarray(t),e+=t}this.size-=H.n,H.resolve($)}}}function N_(H,$){let e=(T)=>{$.push(new Uint8Array(T.buffer,T.byteOffset,T.byteLength))},_=()=>$.close(),t=(T)=>$.close(T);return H.on("data",e),H.on("close",_),H.on("error",t),()=>{H.off("data",e),H.off("close",_),H.off("error",t)}}async function d_(){let H=new ee;return new Promise(($,e)=>{let _=Tb.createConnection({path:go}),t=(T)=>{H.close(T),e(T)};_.once("error",t),_.once("connect",()=>{_.off("error",t);let T=N_(_,H);$({socket:_,stream:H,detach:T})})})}async function So(H){let $=await H.read(4),e=new DataView($.buffer,$.byteOffset,4).getUint32(0,!0);return(await H.read(e-4)).slice(12)}function ko(H,$,e){let _=16+e.length,t=new Uint8Array(16),T=new DataView(t.buffer);T.setUint32(0,_,!0),T.setUint32(4,Mo,!0),T.setUint32(8,Go,!0),T.setUint32(12,$,!0),H.write(t),H.write(e)}async function l_(H,$,e,_){let t=C_({ClientVersionString:"inspect-webkit-1.0",ProgName:"inspect-webkit",kLibUSBMuxVersion:3,..._});ko(H,e,t);let T=await So($);return $e(T)}async function Lb(){let{socket:H,stream:$}=await d_();try{return(await l_(H,$,1,{MessageType:"ListDevices"})).DeviceList??[]}finally{H.end()}}async function ab(H){let{socket:$,stream:e}=await d_();try{let t=(await l_($,e,1,{MessageType:"ReadPairRecord",PairRecordID:H})).PairRecordData;if(!t)throw Error(`no pair record for ${H} — pair the device first (open Finder/iTunes, tap "Trust")`);return $e(t)}finally{$.end()}}async function QT(H,$){let{socket:e,stream:_,detach:t}=await d_(),T=($&255)<<8|$>>8&255,b=await l_(e,_,1,{MessageType:"Connect",DeviceID:H,PortNumber:T});if(b.MessageType!=="Result"||b.Number!==0){e.end();let A=b.Number??"?";throw Error(`Connect to device ${H} port ${$} failed (code ${A})`)}return{socket:e,stream:_,detach:t}}async function Ab(){let H=mo("lsof",["-U"],{stdio:["ignore","pipe","ignore"]});if(H.status!==0||!H.stdout)return[];let $=H.stdout.toString("utf8"),e=new Map;for(let _ of $.split(`
57
- `)){if(!/com\.apple\.webinspectord_sim\.socket\b/.test(_))continue;let t=_.split(/\s+/),T=Number(t[1]),b=t[t.length-1];if(b)e.set(b,T)}return Array.from(e,([_,t])=>({socketPath:_,pid:t}))}async function ob(H){let $=new ee;return new Promise((e,_)=>{let t=rb.createConnection({path:H}),T=(b)=>{$.close(b),_(b)};t.once("error",T),t.once("connect",()=>{t.off("error",T),N_(t,$),e({socket:t,stream:$})})})}async function A_(H){let $=await H.read(4),e=new DataView($.buffer,$.byteOffset,4).getUint32(0,!1),_=await H.read(e);return $e(_)}function o_(H,$){let e=C_({Label:"inspect-webkit",...$}),_=new Uint8Array(4);new DataView(_.buffer).setUint32(0,e.length,!1),H.write(_),H.write(e)}function c_(H,$){if(H.Error)throw Error(`lockdown ${$} error: ${String(H.Error)}`);if(H.Request!==$)throw Error(`lockdown expected Request=${$}, got ${String(H.Request)}`)}function zT(H,$,e,_){return new Promise((t,T)=>{$();let b=new ee,A=cb.connect({socket:H,cert:Buffer.from(e.HostCertificate),key:Buffer.from(e.HostPrivateKey),ca:Buffer.from(e.RootCertificate),rejectUnauthorized:!1}),a=(r)=>{sH(`${_} tls error:`,r),b.close(r),T(r)};A.once("error",a),A.once("secureConnect",()=>{sH(`${_} tls handshake complete`),A.off("error",a);let r=N_(A,b);t({socket:A,stream:b,detach:r})})})}class _e{socket;stream;pair;udid;deviceID;detach;constructor(H,$,e,_,t,T){this.socket=H,this.stream=$,this.pair=e,this.udid=_,this.deviceID=t,this.detach=T}static async open(H,$){sH("connecting usbmux tunnel to lockdown port",YT);let{socket:e,stream:_,detach:t}=await QT(H.DeviceID,YT),T=new _e(e,_,$,H.Properties.SerialNumber,H.DeviceID,t);sH("sending QueryType"),o_(e,{Request:"QueryType"});let b=await A_(_);if(sH("QueryType reply:",b),c_(b,"QueryType"),b.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(b.Type)}`);return T}async startSession(){sH("StartSession with HostID",this.pair.HostID),o_(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let H=await A_(this.stream);if(sH("StartSession reply:",H),c_(H,"StartSession"),H.EnableSessionSSL){sH("upgrading to TLS");let $=await zT(this.socket,this.detach,this.pair,"lockdown");this.socket=$.socket,this.stream=$.stream,this.detach=$.detach,sH("TLS upgrade complete")}}async startService(H){sH("StartService",H),o_(this.socket,{Request:"StartService",Service:H});let $=await A_(this.stream);return sH("StartService reply:",$),c_($,"StartService"),{port:$.Port,enableServiceSSL:Boolean($.EnableServiceSSL),service:H}}async connectService(H){sH("connecting service tunnel to port",H.port,"ssl=",H.enableServiceSSL);let{socket:$,stream:e,detach:_}=await QT(this.deviceID,H.port);if(!H.enableServiceSSL)return{socket:$,stream:e};let t=await zT($,_,this.pair,"service");return{socket:t.socket,stream:t.stream}}close(){this.socket.end()}}async function qo(H){let $=await H.read(4),e=new DataView($.buffer,$.byteOffset,4).getUint32(0,!1),_=await H.read(e);return Oo(_)}function Po(H,$){let e=C_($),_=new Uint8Array(4);new DataView(_.buffer).setUint32(0,e.length,!1),H.write(_),H.write(e)}function xo(){let H=crypto.getRandomValues(new Uint8Array(16));H[6]=H[6]&15|64,H[8]=H[8]&63|128;let $=Array.from(H,(e)=>e.toString(16).padStart(2,"0")).join("");return`${$.slice(0,8)}-${$.slice(8,12)}-${$.slice(12,16)}-${$.slice(16,20)}-${$.slice(20)}`}class d${socket;stream;connectionId=xo();subscribers=new Set;reading;constructor(H,$){this.socket=H,this.stream=$,this.reading=(async()=>{try{while(!$.closed){let e=await qo($);for(let _ of[...this.subscribers])try{_(e)}catch{}}}catch{}})()}subscribe(H){return this.subscribers.add(H),()=>this.subscribers.delete(H)}waitFor(H,$=5000){return new Promise((e,_)=>{let t=setTimeout(()=>{T(),_(Error(`timeout waiting for ${H} after ${$}ms`))},$),T=this.subscribe((b)=>{if(b.__selector===H)clearTimeout(t),T(),e(b)})})}send(H,$){Po(this.socket,{__selector:H,__argument:{WIRConnectionIdentifierKey:this.connectionId,...$}})}async reportIdentifier(){this.send("_rpc_reportIdentifier:",{})}async listApplications(){this.send("_rpc_getConnectedApplications:",{});let H=await this.waitFor("_rpc_reportConnectedApplicationList:",3000).catch(()=>null);if(!H)return[];let e=H.__argument.WIRApplicationDictionaryKey??{},_=[];for(let[t,T]of Object.entries(e)){let b=T;_.push({appId:t,bundleId:b.WIRApplicationBundleIdentifierKey,name:b.WIRApplicationNameKey,isProxy:Boolean(b.WIRIsApplicationProxyKey),isActive:Boolean(b.WIRIsApplicationActiveKey),hostAppId:b.WIRHostApplicationIdentifierKey})}return _}async getListing(H){this.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:H});let $=await this.waitFor("_rpc_applicationSentListing:",3000).catch(()=>null);if(!$)return[];let _=$.__argument.WIRListingKey??{},t=[];for(let T of Object.values(_)){let b=T;t.push({pageId:Number(b.WIRPageIdentifierKey??0),title:b.WIRTitleKey??"",url:b.WIRURLKey??"",type:b.WIRTypeKey??""})}return t}get connection(){return this.connectionId}forwardSocketSetup(H,$,e){this.send("_rpc_forwardSocketSetup:",{WIRApplicationIdentifierKey:H,WIRPageIdentifierKey:$,WIRSenderKey:e,WIRAutomaticallyPause:!1})}forwardSocketData(H,$,e,_){this.send("_rpc_forwardSocketData:",{WIRApplicationIdentifierKey:H,WIRPageIdentifierKey:$,WIRSenderKey:e,WIRSocketDataKey:_})}forwardDidClose(H,$,e){this.send("_rpc_forwardDidClose:",{WIRApplicationIdentifierKey:H,WIRPageIdentifierKey:$,WIRSenderKey:e})}onMessage(H){return this.subscribe(H)}close(){this.socket.end()}}class z${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(H,$,e,_,t){this.ws=H,this.wi=$,this.appId=e,this.pageId=_,this.senderKey=t}addMessageFilter(H,$){let e=this.filters.get(H);if(!e)this.filters.set(H,e=[]);e.push($)}callTarget(H,$={}){return new Promise((e,_)=>{let t=--this.requestId;this.adapterRequestMap.set(t,{resolve:e,reject:_}),this.sendRaw(JSON.stringify({id:t,method:H,params:$}))})}fireEventToTools(H,$){this.sendToTools(JSON.stringify({method:H,params:$}))}fireResultToTools(H,$){this.sendToTools(JSON.stringify({id:H,result:$}))}fireErrorToTools(H,$){this.sendToTools(JSON.stringify({id:H,error:{code:$.code??-32000,message:$.message}}))}replyEmpty(H){if(typeof H.id==="number")this.fireResultToTools(H.id,{});return Promise.resolve(null)}async onMessageFromTools(H){let $;try{$=JSON.parse(H)}catch{return}if(typeof $.method==="string"&&typeof $.id==="number")this.toolRequestMap.set($.id,$.method);let e=`tools::${$.method}`,_=this.filters.get(e),t=$;if(_)for(let T of _){if(!t)break;t=await T(t)}if(t)this.sendRaw(JSON.stringify(t))}async onMessageFromTarget(H){let $;try{$=JSON.parse(H)}catch{return}if($.method==="Target.targetCreated"){this.sawAnyTargetCreated=!0;let T=$.params?.targetInfo;if(T?.type==="page"&&!this.innerTargetId)this.innerTargetId=T.targetId,this.flushQueue();return}if($.method==="Target.didCommitProvisionalTarget"){let T=$.params?.newTargetId;if(typeof T==="string")this.innerTargetId=T;return}if($.method==="Target.targetDestroyed")return;if($.method==="Target.dispatchMessageFromTarget"){let T=$.params?.message;if(typeof T==="string")return this.onMessageFromTarget(T);return}if(typeof $.id==="number"&&this.wrappedAckIds.has($.id)){this.wrappedAckIds.delete($.id);return}if(typeof $.id==="number"){let T=this.adapterRequestMap.get($.id);if(T){if(this.adapterRequestMap.delete($.id),"error"in $&&$.error)T.reject($.error);else T.resolve($.result??{});return}let b=this.toolRequestMap.get($.id);if(b){this.toolRequestMap.delete($.id);let A=`target::${b}`;if("error"in $&&this.filters.has("target::error"))A="target::error";let a=this.filters.get(A);if(!a)return this.sendToTools(H);let r=$;for(let L of a){if(!r)break;r=await L(r)}if(r)this.sendToTools(JSON.stringify(r));return}return this.sendToTools(H)}let e=`target::${$.method}`,_=this.filters.get(e);if(!_)return this.sendToTools(H);let t=$;for(let T of _){if(!t)break;t=await T(t)}if(t)this.sendToTools(JSON.stringify(t))}sendRaw(H){let $=null;try{$=JSON.parse(H)}catch{}let e=$&&typeof $.method==="string"&&$.method.startsWith("Target.");if(this.innerTargetId&&$&&!e){if(typeof $.id==="number")this.wrappedAckIds.add($.id);let _={id:$.id,method:"Target.sendMessageToTarget",params:{id:$.id,message:H,targetId:this.innerTargetId}};this.writeFrame(JSON.stringify(_));return}if(!this.innerTargetId&&$&&!e){if(this.outgoingQueue.push(H),this.outgoingQueue.length===1)setTimeout(()=>{if(!this.innerTargetId&&!this.sawAnyTargetCreated&&this.outgoingQueue.length>0){let _=this.outgoingQueue;this.outgoingQueue=[];for(let t of _)this.writeFrame(t)}},250);return}this.writeFrame(H)}flushQueue(){if(this.outgoingQueue.length===0)return;let H=this.outgoingQueue;this.outgoingQueue=[];for(let $ of H)this.sendRaw($)}writeFrame(H){this.wi.forwardSocketData(this.appId,this.pageId,this.senderKey,new TextEncoder().encode(H))}sendToTools(H){if(this.ws.readyState===1)this.ws.send(H)}}function Wo(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function P(H,$,e){return H.fireResultToTools($.id,e),Promise.resolve(null)}function Fo(H,$){H.addMessageFilter("tools::Debugger.canSetScriptSource",(e)=>P(H,e,{result:!1})),H.addMessageFilter("tools::Debugger.setBlackboxPatterns",(e)=>P(H,e,{})),H.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(e)=>P(H,e,{})),H.addMessageFilter("target::Debugger.enable",(e)=>{return H.callTarget("Debugger.setBreakpointsActive",{active:!0}).catch(()=>{}),H.callTarget("Debugger.setPauseOnDebuggerStatements",{enabled:!0}).catch(()=>{}),Promise.resolve(e)}),H.addMessageFilter("target::Debugger.scriptParsed",(e)=>{if(e.params?.scriptId)$.lastScriptEval.value=String(e.params.scriptId);return Promise.resolve(e)}),H.addMessageFilter("tools::Debugger.setBreakpoint",(e)=>{let _=e.params??{};return e.params={location:_.location,options:_.condition?{condition:_.condition}:{}},Promise.resolve(e)}),H.addMessageFilter("tools::Debugger.setBreakpointByUrl",(e)=>{let _=e.params??{};return e.params={lineNumber:_.lineNumber,url:_.url,urlRegex:_.urlRegex,columnNumber:_.columnNumber,options:_.condition?{condition:_.condition}:{}},Promise.resolve(e)});for(let e of["removeBreakpoint","continueToLocation","stepInto","stepOver","stepOut","resume","pause","getScriptSource","evaluateOnCallFrame"])H.addMessageFilter(`tools::Debugger.${e}`,(_)=>Promise.resolve(_));H.addMessageFilter("target::Debugger.paused",(e)=>{let _=e.params?.callFrames;if(Array.isArray(_))for(let t of _){if(t.functionName==null&&typeof t.name==="string")t.functionName=t.name;if(!t.location&&t.sourceCodeLocation)t.location={scriptId:String(t.sourceCodeLocation.scriptId??""),lineNumber:t.sourceCodeLocation.lineNumber??0,columnNumber:t.sourceCodeLocation.columnNumber??0};if(Array.isArray(t.scopeChain)){for(let T of t.scopeChain)if(!T.object&&T.value)T.object=T.value}}return Promise.resolve(e)}),H.addMessageFilter("tools::Debugger.setBlackboxedRanges",(e)=>P(H,e,{})),H.addMessageFilter("tools::Debugger.setSkipAllPauses",(e)=>P(H,e,{})),H.addMessageFilter("tools::Debugger.setPauseOnExceptions",(e)=>{return Promise.resolve(e)})}function Zo(H,$){H.addMessageFilter("target::Runtime.executionContextCreated",(e)=>{let _=e.params?.context;if(_){if(!_.origin)_.origin=_.name??"";let t=Number(_.id),T=!!(_.isPageContext||_.type==="normal");if(Number.isFinite(t)&&t>0){if(!$.pageExecCtx.id||T&&!$.pageExecCtx.isPage)$.pageExecCtx.id=t,$.pageExecCtx.isPage=T}if(_.frameId)_.auxData={frameId:_.frameId,isDefault:!0},delete _.frameId}return Promise.resolve(e)}),H.addMessageFilter("tools::Runtime.evaluate",(e)=>{let _=e.params;if(!_)return Promise.resolve(e);if(_.throwOnSideEffect)return P(H,e,{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 _)_.doNotPauseOnExceptionsAndMuteConsole=!!_.silent,delete _.silent;if("userGesture"in _)_.emulateUserGesture=!!_.userGesture,delete _.userGesture;return Promise.resolve(e)}),H.addMessageFilter("target::Runtime.evaluate",(e)=>{let _=e.result;if(_?.wasThrown){if(_.result)_.result.subtype="error";_.exceptionDetails={exceptionId:0,text:_.result?.description??"Uncaught",url:"",scriptId:$.lastScriptEval.value,lineNumber:0,columnNumber:0,stackTrace:{callFrames:[{functionName:"",scriptId:$.lastScriptEval.value,url:"",lineNumber:0,columnNumber:0}]},exception:_.result}}return Promise.resolve(e)}),H.addMessageFilter("target::Runtime.getProperties",(e)=>{let _=e.result;if(!_)return Promise.resolve(e);let t=Array.isArray(_.result)?_.result:Array.isArray(_.properties)?_.properties:null;if(t)_.result=t.filter((T)=>T.isOwn||T.nativeGetter).map((T)=>({...T,isOwn:!0})),delete _.properties;if(Array.isArray(_.internalProperties))_.internalProperties=_.internalProperties.map((T)=>({name:T.name,value:T.value}));return Promise.resolve(e)}),H.addMessageFilter("tools::Runtime.compileScript",(e)=>P(H,e,{scriptId:null,exceptionDetails:null})),H.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(e)=>P(H,e,{names:[]})),H.addMessageFilter("tools::Runtime.terminateExecution",(e)=>P(H,e,{})),H.addMessageFilter("tools::Runtime.getIsolateId",(e)=>P(H,e,{id:"inspect-webkit"})),H.addMessageFilter("tools::Runtime.getHeapUsage",(e)=>P(H,e,{usedSize:0,totalSize:0})),H.addMessageFilter("tools::Runtime.discardConsoleEntries",(e)=>{return e.method="Console.clearMessages",Promise.resolve(e)}),H.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(e)=>P(H,e,{})),H.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(e)=>P(H,e,{})),H.addMessageFilter("tools::Runtime.releaseObject",(e)=>Promise.resolve(e)),H.addMessageFilter("tools::Runtime.releaseObjectGroup",(e)=>Promise.resolve(e)),H.addMessageFilter("tools::Runtime.callFunctionOn",(e)=>Promise.resolve(e)),H.addMessageFilter("tools::Runtime.queryObjects",(e)=>Promise.resolve(e)),H.addMessageFilter("target::Debugger.globalObjectCleared",(e)=>{return H.fireEventToTools("Runtime.executionContextsCleared",{}),Promise.resolve(null)})}function Uo(H,$){H.addMessageFilter("tools::Log.startViolationsReport",(e)=>P(H,e,{})),H.addMessageFilter("tools::Log.stopViolationsReport",(e)=>P(H,e,{})),H.addMessageFilter("tools::Log.clear",(e)=>{return e.method="Console.clearMessages",Promise.resolve(e)}),H.addMessageFilter("tools::Log.disable",(e)=>{return e.method="Console.disable",Promise.resolve(e)}),H.addMessageFilter("tools::Log.enable",(e)=>{return e.method="Console.enable",Promise.resolve(e)}),H.addMessageFilter("tools::Runtime.enable",(e)=>{return H.callTarget("Console.enable",{}).catch(()=>{}),Promise.resolve(e)}),H.addMessageFilter("target::Console.messageAdded",(e)=>{let _=e.params?.message??{},T=(Array.isArray(_.stackTrace)?_.stackTrace:Array.isArray(_.stackTrace?.callFrames)?_.stackTrace.callFrames:[]).map((a)=>({functionName:a.functionName??"",scriptId:a.scriptId??"",url:a.url??"",lineNumber:Number(a.lineNumber??0),columnNumber:Number(a.columnNumber??0)})),b=T.length?{callFrames:T}:void 0,A=Date.now();if(_.source==="console-api"){let a=_.type==="log"?_.level??"log":_.type??"log",r=Jo(a),L=Array.isArray(_.parameters)&&_.parameters.length>0?_.parameters:[{type:"string",value:String(_.text??"")}],c={type:r,args:L,executionContextId:$.pageExecCtx.id||1,timestamp:A,stackTrace:b};return $.lastConsoleApiCalled.value=c,H.fireEventToTools("Runtime.consoleAPICalled",c),Promise.resolve(null)}if(_.source==="javascript"&&_.level==="error")return H.fireEventToTools("Runtime.exceptionThrown",{timestamp:A,exceptionDetails:{exceptionId:0,text:String(_.text??"Uncaught"),lineNumber:Number(_.line??0),columnNumber:Number(_.column??0),scriptId:$.lastScriptEval.value,url:_.url,stackTrace:b,exception:{type:"string",value:String(_.text??"")}}}),Promise.resolve(null);return H.fireEventToTools("Log.entryAdded",{entry:{source:_.source??"other",level:wo(_.level??_.type??"log"),text:String(_.text??""),timestamp:A,url:_.url,lineNumber:_.line,stackTrace:b,networkRequestId:_.networkRequestId}}),Promise.resolve(null)}),H.addMessageFilter("target::Console.messagesCleared",()=>{return H.fireEventToTools("Log.entriesCleared",{}),H.fireEventToTools("Runtime.consoleAPICalled",{type:"clear",args:[],executionContextId:$.pageExecCtx.id||1,timestamp:Date.now()}),$.lastConsoleApiCalled.value=null,Promise.resolve(null)}),H.addMessageFilter("target::Console.messageRepeatCountUpdated",()=>{let e=$.lastConsoleApiCalled.value;if(e)H.fireEventToTools("Runtime.consoleAPICalled",{...e,timestamp:Date.now()});return Promise.resolve(null)}),H.addMessageFilter("target::Console.heapSnapshot",()=>Promise.resolve(null))}function Jo(H){switch(H){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 H;default:return"log"}}function wo(H){switch(H){case"log":case"debug":return"verbose";case"info":return"info";case"warn":case"warning":return"warning";case"error":return"error";default:return"info"}}function Xo(H){let $=new Set;H.addMessageFilter("tools::DOM.enable",(e)=>P(H,e,{})),H.addMessageFilter("tools::DOM.setInspectMode",(e)=>{if(e.method="DOM.setInspectModeEnabled",e.params)e.params.enabled=e.params.mode==="searchForNode",delete e.params.mode,delete e.params.highlightConfig;return Promise.resolve(e)}),H.addMessageFilter("tools::DOM.setInspectedNode",(e)=>{return e.method="Console.addInspectedNode",Promise.resolve(e)}),H.addMessageFilter("tools::DOM.performSearch",(e)=>{if(e.params)e.params={query:e.params.query,caseSensitive:!!e.params.caseSensitive};return Promise.resolve(e)}),H.addMessageFilter("target::DOM.performSearch",(e)=>{let _=e.result?.searchId;if(typeof _==="string")$.add(_);return Promise.resolve(e)}),H.addMessageFilter("tools::DOM.discardSearchResults",(e)=>{let _=e.params?.searchId;if(typeof _==="string")$.delete(_);return Promise.resolve(e)}),H.addMessageFilter("tools::DOM.pushNodesByBackendIdsToFrontend",async(e)=>{let _=e.params?.backendNodeIds??[],t=await Promise.all(_.map((T)=>H.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:T}).then((b)=>b.nodeId).catch(()=>T)));return H.fireResultToTools(e.id,{nodeIds:t}),null}),H.addMessageFilter("tools::DOM.getBoxModel",(e)=>{return H.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:e.params?.nodeId}).catch(()=>{}),Promise.resolve(null)}),H.addMessageFilter("tools::DOM.getNodeForLocation",async(e)=>{try{let t=(await H.callTarget("Runtime.evaluate",{expression:`document.elementFromPoint(${e.params?.x},${e.params?.y})`})).result?.objectId;if(!t)return H.fireResultToTools(e.id,{nodeId:0}),null;let T=await H.callTarget("DOM.requestNode",{objectId:t});H.fireResultToTools(e.id,{nodeId:T.nodeId,backendNodeId:T.nodeId})}catch(_){H.fireErrorToTools(e.id,{message:_?.message??String(_)})}return null}),H.addMessageFilter("tools::DOM.resolveNode",(e)=>{if(e.params&&e.params.objectGroup===void 0)delete e.params.objectGroup;return Promise.resolve(e)})}function Ko(H){H.addMessageFilter("tools::DOMDebugger.getEventListeners",async($)=>{try{let e=await H.callTarget("DOM.requestNode",{objectId:$.params?.objectId}),t=((await H.callTarget("DOM.getEventListenersForNode",{nodeId:e.nodeId,objectGroup:"event-listeners-panel"})).listeners??[]).map((T)=>({type:T.type,useCapture:!!T.useCapture,passive:!!T.passive,once:!!T.once,location:T.location,handler:T.handler}));H.fireResultToTools($.id,{listeners:t})}catch(e){H.fireErrorToTools($.id,{message:e?.message??String(e)})}return null}),H.addMessageFilter("tools::DOMDebugger.setXHRBreakpoint",($)=>P(H,$,{})),H.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",($)=>P(H,$,{})),H.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",($)=>P(H,$,{})),H.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",($)=>P(H,$,{}))}function vo(H,$){H.addMessageFilter("tools::Page.setOverlayMessage",(T)=>{return T.method="Debugger.setOverlayMessage",Promise.resolve(T)}),H.addMessageFilter("tools::Page.configureOverlay",(T)=>{return T.method="Debugger.setOverlayMessage",Promise.resolve(T)}),H.addMessageFilter("tools::Page.getNavigationHistory",async(T)=>{try{let b=await H.callTarget("Runtime.evaluate",{expression:"window.location.href"}),A=await H.callTarget("Runtime.evaluate",{expression:"document.title"});H.fireResultToTools(T.id,{currentIndex:0,entries:[{id:0,url:b.result?.value??"",userTypedURL:b.result?.value??"",title:A.result?.value??"",transitionType:"link"}]})}catch(b){H.fireErrorToTools(T.id,{message:b?.message??String(b)})}return null}),H.addMessageFilter("target::Page.frameNavigated",(T)=>{return sb(T.params?.frame),Promise.resolve(T)}),H.addMessageFilter("target::Page.getResourceTree",(T)=>{return n_(T.result?.frameTree),Promise.resolve(T)}),H.addMessageFilter("tools::Page.getFrameTree",async(T)=>{if(typeof T.id!=="number")return null;try{let b=await H.callTarget("Page.getResourceTree",{}),A=ub(b?.frameTree);n_(A),H.fireResultToTools(T.id,{frameTree:A})}catch(b){H.fireErrorToTools(T.id,{message:b?.message??String(b)})}return null}),H.addMessageFilter("tools::Page.createIsolatedWorld",(T)=>{if(typeof T.id!=="number")return Promise.resolve(null);return P(H,T,{executionContextId:$.pageExecCtx.id||1})});let e=1;H.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(T)=>P(H,T,{identifier:`pptr-${e++}`})),H.addMessageFilter("tools::WebMCP.enable",(T)=>P(H,T,{})),H.addMessageFilter("tools::WebMCP.disable",(T)=>P(H,T,{})),H.addMessageFilter("tools::Page.captureScreenshot",(T)=>{return H.fireErrorToTools(T.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),H.addMessageFilter("tools::Page.startScreencast",(T)=>P(H,T,{})),H.addMessageFilter("tools::Page.stopScreencast",(T)=>P(H,T,{})),H.addMessageFilter("tools::Page.screencastFrameAck",(T)=>P(H,T,{})),H.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(T)=>P(H,T,{}));let _="",t="0.1";H.addMessageFilter("target::Page.frameNavigated",(T)=>{let b=T.params?.frame;if(b)t=b.id??t,_=b.loaderId??_,H.fireEventToTools("Page.frameStartedLoading",{frameId:t}),H.fireEventToTools("Page.lifecycleEvent",{frameId:t,loaderId:_,name:"init",timestamp:0}),H.fireEventToTools("Page.lifecycleEvent",{frameId:t,loaderId:_,name:"commit",timestamp:0});return Promise.resolve(T)}),H.addMessageFilter("target::Page.domContentEventFired",(T)=>{return H.fireEventToTools("Page.lifecycleEvent",{frameId:t,loaderId:_,name:"DOMContentLoaded",timestamp:T.params?.timestamp??0}),Promise.resolve(T)}),H.addMessageFilter("target::Page.loadEventFired",(T)=>{return H.fireEventToTools("Page.lifecycleEvent",{frameId:t,loaderId:_,name:"load",timestamp:T.params?.timestamp??0}),H.fireEventToTools("Page.lifecycleEvent",{frameId:t,loaderId:_,name:"networkAlmostIdle",timestamp:T.params?.timestamp??0}),H.fireEventToTools("Page.lifecycleEvent",{frameId:t,loaderId:_,name:"networkIdle",timestamp:T.params?.timestamp??0}),H.fireEventToTools("Page.frameStoppedLoading",{frameId:t}),Promise.resolve(T)})}function sb(H){if(!H)return;if(!H.securityOrigin)try{H.securityOrigin=new URL(H.url??"").origin}catch{H.securityOrigin="://"}if(!H.mimeType)H.mimeType="text/html"}function n_(H){if(!H)return;if(sb(H.frame),Array.isArray(H.childFrames))H.childFrames.forEach(n_)}function ub(H){if(!H)return H;let $={frame:H.frame};if(Array.isArray(H.childFrames))$.childFrames=H.childFrames.map(ub);return $}function Vo(H){H.addMessageFilter("tools::Overlay.enable",($)=>P(H,$,{})),H.addMessageFilter("tools::Overlay.disable",($)=>P(H,$,{})),H.addMessageFilter("tools::Overlay.highlightNode",($)=>{let e=$.params??{};return $.method="DOM.highlightNode",$.params={highlightConfig:e.highlightConfig,nodeId:e.nodeId,objectId:e.objectId},Promise.resolve($)}),H.addMessageFilter("tools::Overlay.highlightFrame",($)=>{return $.method="DOM.highlightFrame",Promise.resolve($)}),H.addMessageFilter("tools::Overlay.highlightQuad",($)=>{return $.method="DOM.highlightQuad",Promise.resolve($)}),H.addMessageFilter("tools::Overlay.highlightRect",($)=>{return $.method="DOM.highlightRect",Promise.resolve($)}),H.addMessageFilter("tools::Overlay.hideHighlight",($)=>{return $.method="DOM.hideHighlight",Promise.resolve($)}),H.addMessageFilter("tools::Overlay.setShowPaintRects",($)=>{return $.method="Page.setShowPaintRects",Promise.resolve($)}),H.addMessageFilter("tools::Overlay.setInspectMode",($)=>{let e=$.params??{};return $.method="DOM.setInspectModeEnabled",$.params={enabled:typeof e.mode==="string"&&e.mode!=="none",highlightConfig:e.highlightConfig},Promise.resolve($)})}function jo(H){H.addMessageFilter("tools::Emulation.canEmulate",($)=>P(H,$,{result:!0})),H.addMessageFilter("tools::Emulation.setTouchEmulationEnabled",($)=>{return $.method="Page.setTouchEmulationEnabled",Promise.resolve($)}),H.addMessageFilter("tools::Emulation.setScriptExecutionDisabled",($)=>{return $.method="Page.setScriptExecutionDisabled",Promise.resolve($)}),H.addMessageFilter("tools::Emulation.setEmulatedMedia",($)=>{return $.method="Page.setEmulatedMedia",Promise.resolve($)}),H.addMessageFilter("tools::Rendering.setShowPaintRects",($)=>{return $.method="Page.setShowPaintRects",Promise.resolve($)}),H.addMessageFilter("tools::Emulation.setDeviceMetricsOverride",($)=>P(H,$,{})),H.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",($)=>P(H,$,{})),H.addMessageFilter("tools::Emulation.setUserAgentOverride",($)=>{let e=$.params?.userAgent??"";return $.method="Page.overrideUserAgent",$.params={value:e},Promise.resolve($)}),H.addMessageFilter("tools::Emulation.setFocusEmulationEnabled",($)=>P(H,$,{})),H.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",($)=>P(H,$,{}))}function R_(H){switch(H){case"Document":case"Image":case"Font":case"Script":case"XHR":case"Fetch":case"Ping":case"WebSocket":return H;case"StyleSheet":return"Stylesheet";default:return"Other"}}function tc(H){if(!H)return H;return{...ec,...H,hasPostData:H.postData!=null}}function Tc(H){if(!H)return H;let $=0,e=H.headers??{},_=e["Content-Length"]??e["content-length"];if(_!=null)$=Number(_)||0;return{..._c,...H,fromDiskCache:H.source==="disk-cache",fromServiceWorker:H.source==="service-worker",encodedDataLength:$}}function bc(H,$){if(!H)return;for(let[e,_]of Object.entries($))if(e in H&&!(_ in H))H[_]=H[e],delete H[e]}function Lc(H){let $=typeof H.size==="number"?H.size:(H.name?.length??0)+(H.value?.length??0);return{name:H.name,value:H.value,domain:H.domain,path:H.path,expires:H.expires??-1,size:$,httpOnly:!!H.httpOnly,secure:!!H.secure,session:!!H.session,...H.sameSite?{sameSite:H.sameSite}:{}}}function ac(H,$){let e=new Map,_=1e4,t=1024,T=4194304,b=Promise.resolve(),A=(r)=>{let L=b.then(r,r);return b=L.catch(()=>{}),L};for(let[r,L]of Object.entries(Qo))H.addMessageFilter(`tools::${r}`,(c)=>{return c.method=L,Promise.resolve(c)});H.addMessageFilter("tools::Network.setCacheDisabled",(r)=>{if(r.params&&"cacheDisabled"in r.params)r.params={disabled:!!r.params.cacheDisabled};return Promise.resolve(r)});let a=async(r)=>{try{let L=await H.callTarget("Page.getCookies",{}),c=Array.isArray(L?.cookies)?L.cookies.map(Lc):[];H.fireResultToTools(r.id,{cookies:c})}catch(L){H.fireErrorToTools(r.id,{message:L?.message??String(L)})}return null};H.addMessageFilter("tools::Network.getCookies",a),H.addMessageFilter("tools::Network.getAllCookies",a),H.addMessageFilter("tools::Network.setCookie",(r)=>{let L=r.params??{};return r.method="Page.setCookie",r.params={cookie:{name:L.name,value:L.value,domain:L.domain??"",path:L.path??"/",expires:L.expires??-1,session:!1,httpOnly:!!L.httpOnly,secure:!!L.secure,sameSite:L.sameSite??"None"}},Promise.resolve(r)}),H.addMessageFilter("tools::Network.setCookies",async(r)=>{let L=Array.isArray(r.params?.cookies)?r.params.cookies:[];try{await Promise.all(L.map((c)=>H.callTarget("Page.setCookie",{cookie:c}))),H.fireResultToTools(r.id,{})}catch(c){H.fireErrorToTools(r.id,{message:c?.message??String(c)})}return null}),H.addMessageFilter("tools::Network.deleteCookies",(r)=>{let L=r.params??{},c=L.url??`https://${(L.domain??"").replace(/^\./,"")}${L.path??"/"}`;return r.method="Page.deleteCookie",r.params={cookieName:L.name,url:c},Promise.resolve(r)}),H.addMessageFilter("tools::Network.deleteCookie",(r)=>{return r.method="Page.deleteCookie",Promise.resolve(r)}),H.addMessageFilter("tools::Network.clearBrowserCookies",async(r)=>{try{let L=await H.callTarget("Page.getCookies",{}),c=Array.isArray(L?.cookies)?L.cookies:[];await Promise.all(c.map((u)=>H.callTarget("Page.deleteCookie",{cookieName:u.name,url:`${u.secure?"https":"http"}://${(u.domain??"").replace(/^\./,"")}${u.path??"/"}`}).catch(()=>{}))),H.fireResultToTools(r.id,{})}catch(L){H.fireErrorToTools(r.id,{message:L?.message??String(L)})}return null}),H.addMessageFilter("tools::Network.canEmulateNetworkConditions",(r)=>P(H,r,{result:!1})),H.addMessageFilter("tools::Network.setExtraHTTPHeaders",(r)=>P(H,r,{})),H.addMessageFilter("tools::Network.setBlockedURLs",(r)=>P(H,r,{})),H.addMessageFilter("tools::Network.emulateNetworkConditions",(r)=>P(H,r,{})),H.addMessageFilter("tools::Network.setMonitoringXHREnabled",(r)=>P(H,r,{})),H.addMessageFilter("tools::Network.getResponseBody",async(r)=>{let L=r.params?.requestId,c=typeof L==="string"?e.get(L):void 0;if(!c)return H.fireErrorToTools(r.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;if(c.method&&c.method.toUpperCase()!=="GET")return H.fireErrorToTools(r.id,{message:`Network.getResponseBody: cannot recover ${c.method} response body (bridge re-fetch is GET-only)`}),null;if(c.bytes===0)return H.fireResultToTools(r.id,{body:"",base64Encoded:!1}),null;return A(async()=>{try{let u={};for(let[E,R]of Object.entries(c.headers??{})){let o=E.toLowerCase();if(o==="if-none-match"||o==="if-modified-since"||o==="host"||o==="connection")continue;u[E]=String(R)}let n=new AbortController,h=setTimeout(()=>n.abort(),1e4),I;try{I=await fetch(c.url,{headers:u,redirect:"follow",signal:n.signal})}finally{clearTimeout(h)}let l=Number(I.headers.get("content-length")??"");if(Number.isFinite(l)&&l>4194304){H.fireErrorToTools(r.id,{message:`Network.getResponseBody: response too large (${l} bytes > ${"4194304"}) — skipped re-fetch`});try{await I.arrayBuffer()}catch{}return}let N=Buffer.from(await I.arrayBuffer());if(N.byteLength>4194304){H.fireErrorToTools(r.id,{message:`Network.getResponseBody: response too large (${N.byteLength} bytes > 4194304)`});return}let C=((I.headers.get("content-type")??"").split(";")[0]??"").trim(),D=/^(text\/|image\/svg\+xml|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))$/.test(C),d=D?N.toString("utf8"):N.toString("base64");H.fireResultToTools(r.id,{body:d,base64Encoded:!D})}catch(u){H.fireErrorToTools(r.id,{message:`Network.getResponseBody re-fetch failed: ${u?.message??String(u)}`})}}),null});for(let[r,L]of Object.entries(Yo))H.addMessageFilter(`target::${r}`,(c)=>{return bc(c.params,L),Promise.resolve(c)});H.addMessageFilter("target::Network.requestWillBeSent",(r)=>{let L=r.params;if(L){if(Object.assign(L,{...zo,...L}),L.request=tc(L.request),L.type=R_(L.type),typeof L.requestId==="string"&&typeof L.request?.url==="string"){if(e.size>=1024){let c=e.keys().next().value;if(c!==void 0)e.delete(c)}e.set(L.requestId,{url:L.request.url,method:L.request.method,headers:L.request.headers,frameId:L.frameId,bytes:0})}}return Promise.resolve(r)}),H.addMessageFilter("target::Network.responseReceived",(r)=>{let L=r.params;if(L)Object.assign(L,{...Hc,...L}),L.response=Tc(L.response),L.type=R_(L.type);return Promise.resolve(r)}),H.addMessageFilter("target::Network.loadingFinished",(r)=>{let L=r.params;if(L){let c=L.metrics?.responseBodyBytesReceived;if(typeof c==="number"&&L.encodedDataLength==null)L.encodedDataLength=c;if(Object.assign(L,{...$c,...L}),typeof L.requestId==="string"&&typeof c==="number"){let u=e.get(L.requestId);if(u&&c>u.bytes)u.bytes=c}}return Promise.resolve(r)}),H.addMessageFilter("target::Network.dataReceived",(r)=>{let L=r.params;if(L&&typeof L.requestId==="string"){let c=e.get(L.requestId);if(c){let u=Number(L.dataLength)||0;c.bytes+=u}}return Promise.resolve(r)}),H.addMessageFilter("target::Network.loadingFailed",(r)=>{let L=r.params;if(L){if(L.type=R_(L.type),!("canceled"in L))L.canceled=!1}return Promise.resolve(r)}),H.addMessageFilter("target::Network.requestServedFromMemoryCache",(r)=>{if(r.method="Network.requestServedFromCache",r.params)r.params={requestId:r.params.requestId};return Promise.resolve(r)}),H.addMessageFilter("tools::Network.loadNetworkResource",async(r)=>{let L=r.params??{};if(!$)return H.fireResultToTools(r.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let c=await H.callTarget("Network.loadResource",{frameId:L.frameId,url:L.url}),u=!!c?.content&&(c?.status??0)>=200&&(c?.status??0)<300,n;if(u)n=`network-resource:${L.frameId??""}:${L.url}`,$.set(n,String(c.content));H.fireResultToTools(r.id,{resource:{success:u,stream:n,httpStatusCode:c?.status,headers:c?.headers,mimeType:c?.mimeType}})}catch(c){H.fireResultToTools(r.id,{resource:{success:!1,netError:2,netErrorName:c?.message??"ERR_FAILED"}})}return null})}function rc(H){for(let $ of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])H.addMessageFilter(`tools::${$}`,(e)=>P(H,e,{}))}function Ac(H){H.addMessageFilter("target::Inspector.inspect",async($)=>{let e=$.params?.object?.objectId;if(typeof e!=="string")return null;try{let t=(await H.callTarget("DOM.requestNode",{objectId:e}))?.nodeId;if(typeof t==="number")H.fireEventToTools("Overlay.inspectNodeRequested",{backendNodeId:t}),H.fireEventToTools("DOM.inspectNodeRequested",{backendNodeId:t})}catch{}return null})}function cc(H){if(!H)return H;let $=H.origin==="inspector";return{styleSheetId:H.styleSheetId,frameId:H.frameId,sourceURL:H.sourceURL??"",origin:H.origin==="author"?"regular":H.origin,title:H.title??"",disabled:!!H.disabled,isInline:!!H.isInline,startLine:H.startLine??0,startColumn:H.startColumn??0,isMutable:$,isConstructed:$,length:H.length??0,endLine:H.endLine??0,endColumn:H.endColumn??0,hasSourceURL:!!H.sourceURL}}function I_(H){if(!H)return H;let $={origin:H.origin==="author"?"regular":H.origin,style:FH(H.style),selectorList:uc(H.selectorList)};if(H.ruleId?.styleSheetId)$.styleSheetId=H.ruleId.styleSheetId;if(Array.isArray(H.groupings))$.media=H.groupings.map((e)=>({text:e.text,sourceURL:e.sourceURL,source:sc[e.type]}));return $}function nc(H){let $={lastNodeId:0},e=new Map;async function _(t,T){let b=e.get(t);if(!b)try{if(b=(await H.callTarget("CSS.getStyleSheet",{styleSheetId:t}))?.styleSheet,b)e.set(t,b)}catch{}let A=b?.rules??[];for(let a=0;a<A.length;a++)if(oc(A[a]?.style?.range,T))return{styleSheetId:t,ordinal:a};return{styleSheetId:t,ordinal:0}}H.addMessageFilter("tools::CSS.enable",(t)=>{return H.fireResultToTools(t.id,{}),Promise.resolve(null)}),H.addMessageFilter("target::CSS.styleSheetAdded",(t)=>{if(t.params?.header)t.params.header=cc(t.params.header);return Promise.resolve(t)}),H.addMessageFilter("target::CSS.getInlineStylesForNode",(t)=>{let T=t.result;if(T)t.result={inlineStyle:FH(T.inlineStyle),attributesStyle:FH(T.attributesStyle)};return Promise.resolve(t)}),H.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(t)=>{if(typeof t.params?.nodeId==="number")$.lastNodeId=t.params.nodeId;try{let[T,b]=await Promise.all([H.callTarget("CSS.getInlineStylesForNode",{nodeId:t.params.nodeId}),H.callTarget("CSS.getMatchedStylesForNode",{nodeId:t.params.nodeId,includePseudo:!0,includeInherited:!0})]);H.fireResultToTools(t.id,{inlineStyle:FH(T?.inlineStyle),attributesStyle:FH(T?.attributesStyle),matchedCSSRules:p_(b?.matchedCSSRules),pseudoElements:hc(b?.pseudoElements),inherited:ic(b?.inherited),cssKeyframesRules:[]})}catch(T){H.fireErrorToTools(t.id,{message:T?.message??String(T)})}return null}),H.addMessageFilter("tools::CSS.setStyleTexts",async(t)=>{let T=t.params?.edits??[],b=[];for(let A of T)try{let a=await _(A.styleSheetId,A.range),r=await H.callTarget("CSS.setStyleText",{styleId:a,text:A.text});b.push(FH(r?.style)),e.delete(A.styleSheetId),H.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:A.styleSheetId})}catch{b.push(null)}return H.fireResultToTools(t.id,{styles:b}),null}),H.addMessageFilter("tools::CSS.setRuleSelector",async(t)=>{let{styleSheetId:T,range:b,selector:A}=t.params??{};try{let a=await _(T,b);t.params={ruleId:a,selector:A}}catch(a){return H.fireErrorToTools(t.id,{message:a?.message??String(a)}),null}return t}),H.addMessageFilter("target::CSS.setRuleSelector",(t)=>{if(t.result?.rule)t.result={rule:I_(t.result.rule)};return Promise.resolve(t)}),H.addMessageFilter("tools::CSS.addRule",async(t)=>{let T=t.params??{},b=String(T.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let A=await H.callTarget("CSS.addRule",{contextNodeId:$.lastNodeId,styleSheetId:T.styleSheetId,selector:b});H.fireResultToTools(t.id,{rule:I_(A?.rule)})}catch(A){H.fireErrorToTools(t.id,{message:A?.message??String(A)})}return null})}function Dc(H){H.addMessageFilter("tools::Browser.getVersion",($)=>P(H,$,Ic)),H.addMessageFilter("tools::Browser.getWindowForTarget",($)=>P(H,$,{windowId:1,bounds:{}})),H.addMessageFilter("tools::Browser.setWindowBounds",($)=>P(H,$,{}))}function Ec(H){switch(H){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function Cc(H){let $=async(e)=>{let _=e.params??{},t=Ec(_.type);if(!t)return H.fireResultToTools(e.id,{}),null;let T=t==="click"?["mousedown","click","mouseup"]:[t];try{for(let b of T){let A={x:Number(_.x)||0,y:Number(_.y)||0,modifiers:Number(_.modifiers)||0,button:_.button??"none",type:b},a=`(${fc}, __sd_simulate(${JSON.stringify(A)}))`;await H.callTarget("Runtime.evaluate",{expression:a})}H.fireResultToTools(e.id,{})}catch(b){H.fireErrorToTools(e.id,{message:b?.message??String(b)})}return null};H.addMessageFilter("tools::Input.dispatchMouseEvent",$),H.addMessageFilter("tools::Input.emulateTouchFromMouseEvent",$),H.addMessageFilter("tools::Input.setIgnoreInputEvents",(e)=>{return H.fireResultToTools(e.id,{}),Promise.resolve(null)})}function dc(H){let $=new Map;return H.addMessageFilter("tools::IO.read",(e)=>{let _=String(e.params?.handle??""),t=Number(e.params?.size)||Nc,T=Number(e.params?.offset)||0,b=$.get(_);if(b===void 0)return H.fireResultToTools(e.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let A=b.slice(T,T+t),a=T+t>=b.length;return H.fireResultToTools(e.id,{data:A,eof:a,base64Encoded:!1}),Promise.resolve(null)}),H.addMessageFilter("tools::IO.close",(e)=>{return $.delete(String(e.params?.handle??"")),H.fireResultToTools(e.id,{}),Promise.resolve(null)}),$}function lc(H){H.addMessageFilter("tools::Accessibility.enable",($)=>P(H,$,{})),H.addMessageFilter("tools::Accessibility.disable",($)=>P(H,$,{})),H.addMessageFilter("tools::Accessibility.getPartialAXTree",async($)=>{let e=$.params??{},_=e.nodeId??e.backendNodeId;if(typeof _!=="number")return H.fireResultToTools($.id,{nodes:[]}),null;try{let T=(await H.callTarget("DOM.getAccessibilityPropertiesForNode",{nodeId:_}))?.properties??{},b={nodeId:String(_),ignored:Boolean(T.ignored),role:T.role?{type:"role",value:String(T.role)}:void 0,name:T.label?{type:"computedString",value:String(T.label)}:void 0,backendDOMNodeId:_,childIds:[],properties:[]};H.fireResultToTools($.id,{nodes:[b]})}catch(t){H.fireResultToTools($.id,{nodes:[]})}return null})}function Oc(H){for(let[e,_]of Object.entries(Bc))H.addMessageFilter(`tools::${e}`,(t)=>P(H,t,_));for(let e of pc)for(let _ of["enable","disable"])H.addMessageFilter(`tools::${e}.${_}`,(t)=>P(H,t,{}));let $=[["Autofill.setAddresses",{}],["Storage.getStorageKey",{storageKey:""}],["Storage.trackCacheStorageForOrigin",{}],["Storage.trackIndexedDBForOrigin",{}],["Storage.untrackCacheStorageForOrigin",{}],["Storage.untrackIndexedDBForOrigin",{}],["Storage.getCookies",{cookies:[]}],["ServiceWorker.unregister",{}]];for(let[e,_]of $)H.addMessageFilter(`tools::${e}`,(t)=>P(H,t,_))}function D_(H){let $=Wo();Oc(H);let e=dc(H);Fo(H,$),Zo(H,$),Uo(H,$),Xo(H),Ko(H),vo(H,$),Vo(H),jo(H),ac(H,e),rc(H),Ac(H),nc(H),Dc(H),Cc(H),lc(H)}function ib(H){let $=`${H.reqHost}/devtools/page/${H.id}`;return{description:H.description,devtoolsFrontendUrl:`devtools://devtools/bundled/inspector.html?ws=${$}`,devtoolsFrontendUrlCompat:`devtools://devtools/bundled/inspector.html?ws=${$}`,id:H.id,title:H.title,type:H.type,url:H.url,webSocketDebuggerUrl:`ws://${$}`,faviconUrl:""}}function t$(H){return H.replace(/[&<>"']/g,($)=>Mc[$])}function nb(H){return hb.createServer(($,e)=>{let _=new URL($.url??"/","http://placeholder"),t=$.headers.host??"";if(_.pathname==="/json/version"){let T=typeof H.version==="function"?H.version(t):H.version;return s_(e,T)}if(_.pathname==="/json"||_.pathname==="/json/list")return s_(e,H.listTargets(t));if(_.pathname==="/json/protocol")return s_(e,{});if(_.pathname==="/")return Gc(e,H,t);e.writeHead(404,{"content-type":"text/plain"}),e.end("not found")})}function s_(H,$,e=200){H.writeHead(e,{"content-type":"application/json; charset=utf-8"}),H.end(JSON.stringify($))}function Gc(H,$,e){let _=$.listTargets(e),t=_.map((a)=>`<li><strong>${t$(a.title||a.url||a.id)}</strong><br><small>${t$(a.url)}</small><br><small>copy &amp; paste into Chrome's address bar:</small><br><code style="user-select:all">${t$(a.devtoolsFrontendUrl)}</code></li>`).join(""),T=`inspect-webkit${$.brand?` (${$.brand})`:""}`,b=$.indexNote??'<p>Open <code style="display:inline;padding:1px 4px">chrome://inspect</code> → <em>Configure…</em> → add '+`<code style="display:inline;padding:1px 4px">${t$(e)}</code>.</p>`,A=`<!doctype html><meta charset=utf-8><title>${t$(T)}</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>${t$(T)} — ${_.length} target${_.length===1?"":"s"}</h1>`+b+`<ul>${t}</ul>`+'<hr><p>JSON: <a href="/json/list">/json/list</a> · <a href="/json/version">/json/version</a></p>';H.writeHead(200,{"content-type":"text/html; charset=utf-8"}),H.end(A)}function Ib(H,$,e){return new Promise((_,t)=>{H.once("error",(b)=>{if(b.port==null)b.port=e;if(b.host==null)b.host=$;t(b)});let T=$==="localhost"||$==="::1"||$==="127.0.0.1"?"::":$;H.listen({port:e,host:T,ipv6Only:!1},()=>{H.off("error",t),_()})})}function Db(H){let $=!process.env.NO_COLOR&&process.stderr.isTTY===!0,e=(a,r)=>$?`\x1B[${a}m${r}\x1B[0m`:r,_=(a)=>e("1",a),t=(a)=>e("2",a),T=(a)=>e("36",a),b=(a)=>e("32",a),A=`http://${H.host}:${H.port}`;console.error(`${b("●")} ${_(`${H.brand} CDP`)} ${T(A)}`),console.error(` ${t("chrome")} chrome://inspect → ${H.host}:${H.port}`),console.error(` ${t("vscode")} "type": "chrome", "port": ${H.port}`)}function gc(H,$){let e=!!process.env.INSPECT_WEBKIT_DEBUG,_=new Map,t=!1,T=!1,b=!1,A=new Map,a=null;function r(D){if(H.readyState!==1)return;let d=JSON.stringify(D);if(e)console.error(`[browser] tools<< ${d.slice(0,240)}`);H.send(d)}function L(D,d){let E={method:D,params:d};if(a)E.sessionId=a;r(E)}function c(D,d){return{targetId:D.targetId,type:D.type==="page"?"page":D.type||"other",title:D.title||"",url:D.url||"",attached:d,canAccessOpener:!1,browserContextId:"default"}}function u(D){for(let d of _.values())if(d.targetId===D)return!0;return!1}function n(D,d){let E=$.listEntries().find((i)=>i.targetId===D);if(!E)return null;let R=crypto.randomUUID(),o=(i)=>{let p;try{p=JSON.parse(i)}catch{return}p.sessionId=R,r(p)},s=$.createPageSession(D,o);if(!s)return null;return _.set(R,{handle:s,targetId:D}),L("Target.attachedToTarget",{sessionId:R,targetInfo:c(E,!0),waitingForDebugger:d}),{sessionId:R,entry:E}}function h(D){let d=_.get(D);if(!d)return!1;try{d.handle.close()}catch{}return _.delete(D),L("Target.detachedFromTarget",{sessionId:D,targetId:d.targetId}),!0}function I(){let D=$.listEntries(),d=new Set;for(let E of D){d.add(E.targetId);let R=A.get(E.targetId);if(!R){if(A.set(E.targetId,E),t)L("Target.targetCreated",{targetInfo:c(E,u(E.targetId))});if(T&&!u(E.targetId))n(E.targetId,b)}else if(R.title!==E.title||R.url!==E.url){if(A.set(E.targetId,E),t)L("Target.targetInfoChanged",{targetInfo:c(E,u(E.targetId))})}}for(let E of[...A.keys()]){if(d.has(E))continue;A.delete(E);for(let[R,o]of _)if(o.targetId===E)h(R);if(t)L("Target.targetDestroyed",{targetId:E})}}let l=setInterval(I,$.refreshMs??1000);function N(D,d){if(D)d.sessionId=D;r(d)}function C(D,d){let{id:E,method:R}=D,o=D.params??{};switch(R){case"Browser.getVersion":return N(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(!a)a=crypto.randomUUID();return N(d,{id:E,result:{sessionId:a}})}case"Target.setDiscoverTargets":{if(t=!!o.discover,t)for(let s of $.listEntries())A.set(s.targetId,s),L("Target.targetCreated",{targetInfo:c(s,u(s.targetId))});if(typeof E==="number")N(d,{id:E,result:{}});return}case"Target.getTargets":{let s=$.listEntries().map((i)=>c(i,u(i.targetId)));return N(d,{id:E,result:{targetInfos:s}})}case"Target.setAutoAttach":{if(T=!!o.autoAttach,b=!!o.waitForDebuggerOnStart,T){for(let s of $.listEntries())if(!u(s.targetId))n(s.targetId,b)}if(typeof E==="number")N(d,{id:E,result:{}});return}case"Target.attachToTarget":{for(let[i,p]of _)if(p.targetId===o.targetId){if(typeof E==="number")N(d,{id:E,result:{sessionId:i}});return}let s=n(o.targetId,!1);if(!s){if(typeof E==="number")N(d,{id:E,error:{code:-32000,message:"No target with given id found"}});return}if(typeof E==="number")N(d,{id:E,result:{sessionId:s.sessionId}});return}case"Target.detachFromTarget":{if(h(o.sessionId),typeof E==="number")N(d,{id:E,result:{}});return}case"Target.sendMessageToTarget":{let s=_.get(o.sessionId);if(s)s.handle.onMessageFromTools(o.message);if(typeof E==="number")N(d,{id:E,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof E==="number")N(d,{id:E,result:{}});return;case"Target.getBrowserContexts":{if(typeof E==="number")N(d,{id:E,result:{browserContextIds:["default"]}});return}}if(typeof E==="number")N(d,{id:E,error:{code:-32601,message:`Browser-level method '${R??"?"}' not implemented`}})}H.on("message",(D,d)=>{let E=d?new TextDecoder().decode(D):D.toString();if(e)console.error(`[browser] tools>> ${E.slice(0,240)}`);let R;try{R=JSON.parse(E)}catch{return}if(typeof R.sessionId==="string"){if(R.sessionId===a){let i={...R};return delete i.sessionId,C(i,R.sessionId)}let o=_.get(R.sessionId);if(!o){if(typeof R.id==="number")r({id:R.id,sessionId:R.sessionId,error:{code:-32000,message:`Session ${R.sessionId} not found`}});return}let s={...R};delete s.sessionId,o.handle.onMessageFromTools(JSON.stringify(s));return}C(R,void 0)}),H.on("close",()=>{clearInterval(l);for(let[,D]of _)try{D.handle.close()}catch{}_.clear()})}async function kc(H={}){let $=H.port??9222,e=H.host??"localhost",_=await mc();if(_.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 t=new Map,T=new WeakMap,b=new Map;for(let R of _)b.set(R,[]),T.set(R,new Set),R.wi.subscribe((o)=>{let{__selector:s,__argument:i}=o;if(!s||!i)return;if(s==="_rpc_reportConnectedApplicationList:"){let p=i.WIRApplicationDictionaryKey??{},B=Object.entries(p).map(([G,m])=>({appId:G,bundleId:m.WIRApplicationBundleIdentifierKey,name:m.WIRApplicationNameKey??m.WIRApplicationBundleIdentifierKey??G,isProxy:Boolean(m.WIRIsApplicationProxyKey)}));b.set(R,B);let M=T.get(R);for(let G of B){if(G.isProxy||M.has(G.appId))continue;M.add(G.appId),R.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:G.appId})}}else if(s==="_rpc_applicationConnected:"){let p=i,B=b.get(R)??[];if(!B.find((M)=>M.appId===p.WIRApplicationIdentifierKey))B.push({appId:p.WIRApplicationIdentifierKey,bundleId:p.WIRApplicationBundleIdentifierKey,name:p.WIRApplicationNameKey??p.WIRApplicationBundleIdentifierKey,isProxy:Boolean(p.WIRIsApplicationProxyKey)}),b.set(R,B);if(!p.WIRIsApplicationProxyKey){let M=T.get(R);if(!M.has(p.WIRApplicationIdentifierKey))M.add(p.WIRApplicationIdentifierKey),R.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:p.WIRApplicationIdentifierKey})}}else if(s==="_rpc_applicationDisconnected:"){let p=b.get(R)??[];b.set(R,p.filter((B)=>B.appId!==i.WIRApplicationIdentifierKey)),t.delete(`${R.id}:${i.WIRApplicationIdentifierKey}`)}else if(s==="_rpc_applicationSentListing:"){let p=i.WIRApplicationIdentifierKey,B=i.WIRListingKey??{},M=new Map;for(let[G,m]of Object.entries(B))M.set(G,{pageId:Number(m.WIRPageIdentifierKey??0),title:m.WIRTitleKey??"",url:m.WIRURLKey??"",type:m.WIRTypeKey??"",connectionId:typeof m.WIRConnectionIdentifierKey==="string"?m.WIRConnectionIdentifierKey:null});t.set(`${R.id}:${p}`,M)}}),R.wi.send("_rpc_reportIdentifier:",{}),R.wi.send("_rpc_getConnectedApplications:",{});let A=setInterval(()=>{for(let R of _){let o=b.get(R)??[];for(let s of o){if(s.isProxy)continue;R.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:s.appId})}}},Sc),a=new Map;function r(){let R=[];for(let o of _){let s=b.get(o)??[];for(let i of s){if(i.isProxy)continue;let p=t.get(`${o.id}:${i.appId}`);if(!p)continue;for(let B of p.values()){let M=!!B.connectionId&&B.connectionId!==o.wi.connection;R.push({targetId:`${o.id}:${i.appId}:${B.pageId}`,source:o,appId:i.appId,appName:i.name,bundleId:i.bundleId,pageId:B.pageId,title:B.title,url:B.url,type:B.type,inUseByOtherInspector:M})}}}return R}let L=crypto.randomUUID(),c=nb({brand:"",version:(R)=>({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://${R}/devtools/browser/${L}`}),listTargets:(R)=>r().map((o)=>ib({reqHost:R,id:o.targetId,description:`${o.source.label}${o.bundleId?` (${o.bundleId})`:""}`,title:o.title||o.appName,url:/^https?:/i.test(o.url)?o.url:"about:blank",type:$b(o.type)}))}),u=new Rb.default({noServer:!0}),n=`/devtools/browser/${L}`;c.on("upgrade",(R,o,s)=>{let i=new URL(R.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${i.pathname}`),i.pathname===n){u.handleUpgrade(R,o,s,(B)=>{gc(B,{listEntries:()=>r().map((M)=>({targetId:M.targetId,type:$b(M.type),title:M.title||M.appName,url:M.url})),createPageSession:(M,G)=>{let m=r().find((q)=>q.targetId===M);if(!m)return null;return h(m,G)}})});return}if(!i.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${i.pathname}`),o.destroy();return}let p=decodeURIComponent(i.pathname.slice(15));u.handleUpgrade(R,o,s,(B)=>{E(B,p)})});function h(R,o){let s=crypto.randomUUID(),p=new z$({readyState:1,send:(G)=>o(G)},R.source.wi,R.appId,R.pageId,s);D_(p),a.set(s,p);let B=!!process.env.INSPECT_WEBKIT_DEBUG,M=R.source.wi.subscribe((G)=>{if(G.__selector!=="_rpc_applicationSentData:")return;let m=G.__argument;if(!m)return;if(m.WIRDestinationKey&&m.WIRDestinationKey!==s)return;if(m.WIRApplicationIdentifierKey!==R.appId)return;if(m.WIRPageIdentifierKey!==void 0&&Number(m.WIRPageIdentifierKey)!==R.pageId)return;let q=m.WIRMessageDataKey??m.WIRSocketDataKey;if(!q)return;let F=typeof q==="string"?q:new TextDecoder().decode(q);if(B)console.error(`[cdp] target>> ${F.slice(0,240)}`);p.onMessageFromTarget(F)});return R.source.wi.forwardSocketSetup(R.appId,R.pageId,s),console.error(`# devtools attached: ${R.source.label} :: ${R.appName} :: ${R.title||R.url}`),{onMessageFromTools(G){if(B)console.error(`[cdp] tools>> ${G.slice(0,300)}`);p.onMessageFromTools(G)},close(){M();try{p.wi.forwardDidClose(p.appId,p.pageId,p.senderKey)}catch{}a.delete(p.senderKey)}}}let I=new Map,l=8000;function N(R){let o=I.get(R);if(o)return o;let s=r().find((q)=>q.targetId===R);if(!s)return null;let i=crypto.randomUUID(),B=new z$({readyState:1,send:()=>{}},s.source.wi,s.appId,s.pageId,i);D_(B),a.set(i,B);let M=s.source.wi.subscribe((q)=>{if(q.__selector!=="_rpc_applicationSentData:")return;let F=q.__argument;if(!F)return;if(F.WIRDestinationKey&&F.WIRDestinationKey!==i)return;if(F.WIRApplicationIdentifierKey!==s.appId)return;if(F.WIRPageIdentifierKey!==void 0&&Number(F.WIRPageIdentifierKey)!==s.pageId)return;let HH=F.WIRMessageDataKey??F.WIRSocketDataKey;if(!HH)return;let g=typeof HH==="string"?HH:new TextDecoder().decode(HH);B.onMessageFromTarget(g)});s.source.wi.forwardSocketSetup(s.appId,s.pageId,i);let G=Promise.race([B.callTarget("DOM.getDocument",{depth:0}).then((q)=>q?.root?.nodeId),new Promise((q,F)=>setTimeout(()=>F(Error("DOM.getDocument timeout")),5000))]),m={cdp:B,rootNodeIdPromise:G,idleTimer:null,close(){if(m.idleTimer)clearTimeout(m.idleTimer);M();try{B.wi.forwardDidClose(B.appId,B.pageId,B.senderKey)}catch{}a.delete(i),I.delete(R)}};return I.set(R,m),G.catch(()=>m.close()),m}function C(R){if(R.idleTimer)clearTimeout(R.idleTimer);R.idleTimer=setTimeout(()=>R.close(),l)}function D(R){if(R){I.get(R)?.close();return}for(let o of I.values())o.close()}async function d(R,o){let s=N(R);if(!s)return;C(s);try{if(o){let i=await s.rootNodeIdPromise;if(!i)return;await s.cdp.callTarget("DOM.highlightNode",{nodeId:i,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 s.cdp.callTarget("DOM.hideHighlight",{})}catch{s.close()}}function E(R,o){let s=r().find((M)=>M.targetId===o);if(!s){console.error(`# ws closed: unknown target ${o} (known: ${r().map((M)=>M.targetId).join(", ")||"none"})`),R.close(1011,`unknown target ${o}`);return}let i=h(s,(M)=>{if(R.readyState===1)R.send(M)}),p=!0;R.on("pong",()=>{p=!0});let B=setInterval(()=>{if(!p){try{R.terminate()}catch{}return}p=!1;try{R.ping()}catch{}},15000);R.on("message",(M,G)=>{let m=G?new TextDecoder().decode(M):M.toString();i.onMessageFromTools(m)}),R.on("close",()=>{clearInterval(B),i.close()})}return await Ib(c,e,$),Db({brand:"safari",host:e,port:$}),{stop(){clearInterval(A);for(let R of I.values())R.close();u.close(),c.close();for(let R of _)try{R.wi.close(),R.lockdown?.close()}catch{}},getTargets(){return r()},highlightTarget(R,o){return d(R,o)},releaseHighlight(R){D(R)}}}async function mc(){let[H,$]=await Promise.all([qc(),xc()]);return[...H,...$]}async function qc(){let H=[];try{H=await Lb()}catch(e){return console.error(`warn: usbmux: ${e.message}`),[]}return(await Promise.all(H.map(Pc))).filter((e)=>e!==null)}async function Pc(H){try{let $=await ab(H.Properties.SerialNumber),e=await _e.open(H,$);await e.startSession();let _=await e.startService("com.apple.webinspector"),{socket:t,stream:T}=await e.connectService(_),b=new d$(t,T);return await b.reportIdentifier(),{kind:"device",id:`device:${H.Properties.SerialNumber}`,label:`device:${H.Properties.SerialNumber.slice(0,8)}`,wi:b,lockdown:e}}catch($){return console.error(`warn: device ${H.Properties.SerialNumber}: ${$.message}`),null}}async function xc(){let H=[];try{H=await Ab()}catch(e){return console.error(`warn: simulator discovery: ${e.message}`),[]}return(await Promise.all(H.map(yc))).filter((e)=>e!==null)}async function yc(H){try{let{socket:$,stream:e}=await ob(H.socketPath),_=new d$($,e);return await _.reportIdentifier(),{kind:"simulator",id:`sim:${H.pid}`,label:`sim:${H.pid}`,wi:_}}catch($){return console.error(`warn: simulator ${H.socketPath}: ${$.message}`),null}}function $b(H){switch(H){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class fb{url;ws;handlers=new Set;openPromise;constructor(H){this.url=H,this.ws=new Hb(H),this.ws.binaryType="nodebuffer",this.openPromise=new Promise(($,e)=>{this.ws.once("open",()=>$()),this.ws.once("error",(_)=>e(_))}),this.ws.on("message",($,e)=>{let _=e?new TextDecoder().decode($):$.toString();for(let t of this.handlers)t(_)})}ready(){return this.openPromise}onFrame(H){return this.handlers.add(H),()=>this.handlers.delete(H)}forwardSocketData(H,$,e,_){if(this.ws.readyState!==Hb.OPEN)return;this.ws.send(new TextDecoder().decode(_))}forwardDidClose(H,$,e){}close(){try{this.ws.close()}catch{}}}async function Wc(H){let $=H.port??9223,e=H.host??"localhost",{upstreams:_}=H,t=nb({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(A)=>_.map((a)=>ib({reqHost:A,id:encodeURIComponent(a.url),description:a.label??"bun",title:a.label??a.url,url:a.url,type:"node"}))}),T=new Rb.default({noServer:!0});t.on("upgrade",(A,a,r)=>{let L=new URL(A.url??"/","http://placeholder");if(!L.pathname.startsWith("/devtools/page/")){a.destroy();return}let c=decodeURIComponent(L.pathname.slice(15)),u=_.find((n)=>n.url===c);if(!u){a.destroy();return}T.handleUpgrade(A,a,r,(n)=>{b(n,u).catch((h)=>{console.error(`# bun attach failed: ${h.message}`);try{n.close(1011,h.message)}catch{}})})});async function b(A,a){let r=!!process.env.INSPECT_WEBKIT_DEBUG,L=new fb(a.url);await L.ready();let c=crypto.randomUUID(),u=new z$(A,L,"bun",0,c);D_(u);let n=L.onFrame((h)=>{if(r)console.error(`[bun] target>> ${h.slice(0,240)}`);u.onMessageFromTarget(h)});A.on("message",(h,I)=>{let l=I?new TextDecoder().decode(h):h.toString();if(r)console.error(`[bun] tools>> ${l.slice(0,300)}`);u.onMessageFromTools(l)}),A.on("close",()=>{n(),L.close()}),console.error(`# devtools attached: ${a.label??a.url}`)}return await Ib(t,e,$),Db({brand:"bun",host:e,port:$}),{stop(){T.close(),t.close()},getTargets(){return _.slice()}}}async function Eb(){return Lb()}async function Fc(){let[H,$]=await Promise.all([Zc(),Uc()]);return[...H.flat(),...$.flat()]}async function Zc(){let H=await Eb();return Promise.all(H.map(Jc))}async function Uc(){let H=await Ab();return Promise.all(H.map(wc))}async function Jc(H){let $=null;try{return $=await Xc(H),await Cb($.client,{source:"device",udid:H.Properties.SerialNumber,deviceID:H.DeviceID})}catch(e){return console.error(`warn: ${H.Properties.SerialNumber}: ${e.message}`),[]}finally{$?.client.close(),$?.lockdown.close()}}async function wc(H){let $=null;try{let{socket:e,stream:_}=await ob(H.socketPath);return $=new d$(e,_),await $.reportIdentifier(),await Cb($,{source:"simulator",udid:`sim:${H.pid}`})}catch(e){return console.error(`warn: simulator (${H.socketPath}): ${e.message}`),[]}finally{$?.close()}}async function Xc(H){let $=await ab(H.Properties.SerialNumber),e=await _e.open(H,$);await e.startSession();let _=await e.startService("com.apple.webinspector"),{socket:t,stream:T}=await e.connectService(_),b=new d$(t,T);return await b.reportIdentifier(),{client:b,lockdown:e}}async function Cb(H,$){let e=(await H.listApplications()).filter((T)=>!T.isProxy),_=await Promise.all(e.map((T)=>H.getListing(T.appId))),t=[];for(let T=0;T<e.length;T++){let b=e[T];for(let A of _[T])t.push({...$,appId:b.appId,appName:b.name??b.bundleId??b.appId,bundleId:b.bundleId,pageId:A.pageId,title:A.title,url:A.url,type:A.type})}return t}var co,Ro,VT,so,uo,io,no,MH=(H,$,e)=>{var _=H!=null&&typeof H==="object";if(_){var t=$?io??=new WeakMap:no??=new WeakMap,T=t.get(H);if(T)return T}e=H!=null?co(Ro(H)):{};let b=$||!H||!H.__esModule?VT(e,"default",{value:H,enumerable:!0}):e;for(let A of so(H))if(!uo.call(b,A))VT(b,A,{get:ho.bind(H,A),enumerable:!0});if(_)t.set(H,b);return b},rH=(H,$)=>()=>($||H(($={exports:{}}).exports,$),$.exports),z,GH,He,Io,C$,N$,eb,_b,Do,f_,E_,fo,tb,Eo,Co=`<?xml version="1.0" encoding="UTF-8"?>
55
+ ${$}</dict>`}function C_(H){let $=u_(H,"");return new TextEncoder().encode(No+$+lo)}class Lb{src;pos=0;constructor(H){this.src=H}skip(){while(this.pos<this.src.length){let H=this.src[this.pos];if(H===" "||H==="\t"||H===`
56
+ `||H==="\r")this.pos++;else if(this.src.startsWith("<!--",this.pos)){let $=this.src.indexOf("-->",this.pos+4);if($<0)throw Error("unterminated comment");this.pos=$+3}else if(this.src.startsWith("<?",this.pos)){let $=this.src.indexOf("?>",this.pos+2);if($<0)throw Error("unterminated processing instruction");this.pos=$+2}else if(this.src.startsWith("<!DOCTYPE",this.pos)){let $=0;while(this.pos<this.src.length){let e=this.src[this.pos++];if(e==="[")$++;else if(e==="]")$--;else if(e===">"&&$===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 H=this.src.indexOf(">",this.pos);if(H<0)throw Error("unterminated tag");let $=this.src.slice(this.pos+1,H);this.pos=H+1;let e=$.startsWith("/"),_=$.endsWith("/");return{name:$.replace(/^\/?/,"").replace(/\/$/,"").trim().split(/\s+/)[0],selfClose:_,isClose:e}}readText(){let H=this.src.indexOf("<",this.pos),$=H<0?this.src.slice(this.pos):this.src.slice(this.pos,H);return this.pos=H<0?this.src.length:H,$.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&apos;/g,"'").replace(/&amp;/g,"&")}}function h_(H,$){let e=(_)=>{let t=H.nextTag();if(!t||!t.isClose||t.name!==_)throw Error(`expected </${_}>`)};switch($){case"true":case"false":throw Error(`<${$}> must be self-closing`);case"string":case"key":{let _=H.readText();return e($),_}case"integer":{let _=H.readText().trim();if(e("integer"),/^-?\d+$/.test(_)&&Math.abs(Number(_))<=Number.MAX_SAFE_INTEGER)return Number(_);return BigInt(_)}case"real":{let _=Number(H.readText().trim());return e("real"),_}case"data":{let _=Bo(H.readText());return e("data"),_}case"date":{let _=new Date(H.readText().trim());return e("date"),_}case"array":{let _=[];while(!0){let t=H.nextTag();if(!t)throw Error("unterminated <array>");if(t.isClose&&t.name==="array")return _;_.push(t.selfClose?i_(t.name):h_(H,t.name))}}case"dict":{let _={};while(!0){let t=H.nextTag();if(!t)throw Error("unterminated <dict>");if(t.isClose&&t.name==="dict")return _;if(t.name!=="key")throw Error(`expected <key>, got <${t.name}>`);let T=H.readText();e("key");let b=H.nextTag();if(!b)throw Error("unterminated <dict>");_[T]=b.selfClose?i_(b.name):h_(H,b.name)}}default:throw Error(`unknown plist tag <${$}>`)}}function i_(H){if(H==="true")return!0;if(H==="false")return!1;if(H==="string")return"";if(H==="data")return new Uint8Array(0);if(H==="array")return[];if(H==="dict")return{};throw Error(`self-closing <${H}/> not supported`)}function $e(H){let $=typeof H==="string"?H:new TextDecoder().decode(H),e=new Lb($);while(!0){let t=e.nextTag();if(!t)throw Error("no <plist> root");if(t.name==="plist"&&!t.isClose)break}let _=e.nextTag();if(!_)throw Error("empty plist");return _.selfClose?i_(_.name):h_(e,_.name)}function WH(H,$,e){let _=0;for(let t=0;t<e;t++)_=_*256+H[$+t];return _}function Oo(H){if(H.length<41)throw Error("bplist too short");let $=new TextDecoder().decode(H.slice(0,8));if($!=="bplist00")throw Error(`bad magic: ${$}`);let e=H.length-32,_=H[e+6],t=H[e+7],T=WH(H,e+8,8),b=WH(H,e+16,8),A=WH(H,e+24,8),a=Array(T);for(let c=0;c<T;c++)a[c]=WH(H,A+c*_,_);function r(c){return WH(H,c,t)}function L(c){let u=a[c],n=H[u],h=n>>4,I=n&15;function l(N){if(I!==15)return{len:I,next:N};let C=H[N];if((C&240)!==16)throw Error("expected int marker for length");let D=1<<(C&15);return{len:WH(H,N+1,D),next:N+1+D}}switch(h){case 0:if(I===0)return null;if(I===8)return!1;if(I===9)return!0;if(I===15)return null;throw Error(`unknown singleton ${I}`);case 1:{let N=1<<I,C=WH(H,u+1,N);if(N===8&&C>Number.MAX_SAFE_INTEGER)return BigInt(C);return C}case 2:{let N=1<<I,C=new DataView(H.buffer,H.byteOffset+u+1,N);return N===4?C.getFloat32(0,!1):C.getFloat64(0,!1)}case 3:{let C=new DataView(H.buffer,H.byteOffset+u+1,8).getFloat64(0,!1);return new Date(Date.UTC(2001,0,1)+C*1000)}case 4:{let{len:N,next:C}=l(u+1);return H.slice(C,C+N)}case 5:{let{len:N,next:C}=l(u+1);return new TextDecoder("ascii").decode(H.slice(C,C+N))}case 6:{let{len:N,next:C}=l(u+1),D=H.slice(C,C+N*2),d=new Uint8Array(D.length);for(let E=0;E<D.length;E+=2)d[E]=D[E+1],d[E+1]=D[E];return new TextDecoder("utf-16le").decode(d)}case 10:{let{len:N,next:C}=l(u+1),D=[];for(let d=0;d<N;d++)D.push(L(r(C+d*t)));return D}case 13:{let{len:N,next:C}=l(u+1),D={};for(let d=0;d<N;d++){let E=L(r(C+d*t)),R=L(r(C+(N+d)*t));if(typeof E!=="string")throw Error(`non-string dict key: ${typeof E}`);D[E]=R}return D}default:throw Error(`unknown bplist marker 0x${n.toString(16)} at ${u}`)}}return L(b)}function Mo(H){if(H.length>=8){if(new TextDecoder().decode(H.slice(0,8))==="bplist00")return Oo(H)}return $e(H)}class ee{chunks=[];size=0;waiters=[];closed=!1;closeErr=null;push(H){if(H.length===0)return;this.chunks.push(H),this.size+=H.length,this.drain()}close(H){this.closed=!0,this.closeErr=H??null;for(let $ of this.waiters)$.reject(H??Error("stream closed"));this.waiters=[]}read(H){return new Promise(($,e)=>{if(this.closed&&this.size<H){e(this.closeErr??Error("stream closed"));return}this.waiters.push({n:H,resolve:$,reject:e}),this.drain()})}drain(){while(this.waiters.length>0&&this.waiters[0].n<=this.size){let H=this.waiters.shift(),$=new Uint8Array(H.n),e=0;while(e<H.n){let _=this.chunks[0],t=H.n-e;if(_.length<=t)$.set(_,e),e+=_.length,this.chunks.shift();else $.set(_.subarray(0,t),e),this.chunks[0]=_.subarray(t),e+=t}this.size-=H.n,H.resolve($)}}}function N_(H,$){let e=(T)=>{$.push(new Uint8Array(T.buffer,T.byteOffset,T.byteLength))},_=()=>$.close(),t=(T)=>$.close(T);return H.on("data",e),H.on("close",_),H.on("error",t),()=>{H.off("data",e),H.off("close",_),H.off("error",t)}}async function d_(){let H=new ee;return new Promise(($,e)=>{let _=bb.createConnection({path:So}),t=(T)=>{H.close(T),e(T)};_.once("error",t),_.once("connect",()=>{_.off("error",t);let T=N_(_,H);$({socket:_,stream:H,detach:T})})})}async function ko(H){let $=await H.read(4),e=new DataView($.buffer,$.byteOffset,4).getUint32(0,!0);return(await H.read(e-4)).slice(12)}function mo(H,$,e){let _=16+e.length,t=new Uint8Array(16),T=new DataView(t.buffer);T.setUint32(0,_,!0),T.setUint32(4,Go,!0),T.setUint32(8,go,!0),T.setUint32(12,$,!0),H.write(t),H.write(e)}async function l_(H,$,e,_){let t=C_({ClientVersionString:"inspect-webkit-1.0",ProgName:"inspect-webkit",kLibUSBMuxVersion:3,..._});mo(H,e,t);let T=await ko($);return $e(T)}async function ab(){let{socket:H,stream:$}=await d_();try{return(await l_(H,$,1,{MessageType:"ListDevices"})).DeviceList??[]}finally{H.end()}}async function rb(H){let{socket:$,stream:e}=await d_();try{let t=(await l_($,e,1,{MessageType:"ReadPairRecord",PairRecordID:H})).PairRecordData;if(!t)throw Error(`no pair record for ${H} — pair the device first (open Finder/iTunes, tap "Trust")`);return $e(t)}finally{$.end()}}async function YT(H,$){let{socket:e,stream:_,detach:t}=await d_(),T=($&255)<<8|$>>8&255,b=await l_(e,_,1,{MessageType:"Connect",DeviceID:H,PortNumber:T});if(b.MessageType!=="Result"||b.Number!==0){e.end();let A=b.Number??"?";throw Error(`Connect to device ${H} port ${$} failed (code ${A})`)}return{socket:e,stream:_,detach:t}}async function ob(){let H=qo("lsof",["-U"],{stdio:["ignore","pipe","ignore"]});if(H.status!==0||!H.stdout)return[];let $=H.stdout.toString("utf8"),e=new Map;for(let _ of $.split(`
57
+ `)){if(!/com\.apple\.webinspectord_sim\.socket\b/.test(_))continue;let t=_.split(/\s+/),T=Number(t[1]),b=t[t.length-1];if(b)e.set(b,T)}return Array.from(e,([_,t])=>({socketPath:_,pid:t}))}async function cb(H){let $=new ee;return new Promise((e,_)=>{let t=Ab.createConnection({path:H}),T=(b)=>{$.close(b),_(b)};t.once("error",T),t.once("connect",()=>{t.off("error",T),N_(t,$),e({socket:t,stream:$})})})}async function A_(H){let $=await H.read(4),e=new DataView($.buffer,$.byteOffset,4).getUint32(0,!1),_=await H.read(e);return $e(_)}function o_(H,$){let e=C_({Label:"inspect-webkit",...$}),_=new Uint8Array(4);new DataView(_.buffer).setUint32(0,e.length,!1),H.write(_),H.write(e)}function c_(H,$){if(H.Error)throw Error(`lockdown ${$} error: ${String(H.Error)}`);if(H.Request!==$)throw Error(`lockdown expected Request=${$}, got ${String(H.Request)}`)}function Hb(H,$,e,_){return new Promise((t,T)=>{$();let b=new ee,A=Rb.connect({socket:H,cert:Buffer.from(e.HostCertificate),key:Buffer.from(e.HostPrivateKey),ca:Buffer.from(e.RootCertificate),rejectUnauthorized:!1}),a=(r)=>{sH(`${_} tls error:`,r),b.close(r),T(r)};A.once("error",a),A.once("secureConnect",()=>{sH(`${_} tls handshake complete`),A.off("error",a);let r=N_(A,b);t({socket:A,stream:b,detach:r})})})}class _e{socket;stream;pair;udid;deviceID;detach;constructor(H,$,e,_,t,T){this.socket=H,this.stream=$,this.pair=e,this.udid=_,this.deviceID=t,this.detach=T}static async open(H,$){sH("connecting usbmux tunnel to lockdown port",zT);let{socket:e,stream:_,detach:t}=await YT(H.DeviceID,zT),T=new _e(e,_,$,H.Properties.SerialNumber,H.DeviceID,t);sH("sending QueryType"),o_(e,{Request:"QueryType"});let b=await A_(_);if(sH("QueryType reply:",b),c_(b,"QueryType"),b.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(b.Type)}`);return T}async startSession(){sH("StartSession with HostID",this.pair.HostID),o_(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let H=await A_(this.stream);if(sH("StartSession reply:",H),c_(H,"StartSession"),H.EnableSessionSSL){sH("upgrading to TLS");let $=await Hb(this.socket,this.detach,this.pair,"lockdown");this.socket=$.socket,this.stream=$.stream,this.detach=$.detach,sH("TLS upgrade complete")}}async startService(H){sH("StartService",H),o_(this.socket,{Request:"StartService",Service:H});let $=await A_(this.stream);return sH("StartService reply:",$),c_($,"StartService"),{port:$.Port,enableServiceSSL:Boolean($.EnableServiceSSL),service:H}}async connectService(H){sH("connecting service tunnel to port",H.port,"ssl=",H.enableServiceSSL);let{socket:$,stream:e,detach:_}=await YT(this.deviceID,H.port);if(!H.enableServiceSSL)return{socket:$,stream:e};let t=await Hb($,_,this.pair,"service");return{socket:t.socket,stream:t.stream}}close(){this.socket.end()}}async function Po(H){let $=await H.read(4),e=new DataView($.buffer,$.byteOffset,4).getUint32(0,!1),_=await H.read(e);return Mo(_)}function xo(H,$){let e=C_($),_=new Uint8Array(4);new DataView(_.buffer).setUint32(0,e.length,!1),H.write(_),H.write(e)}function yo(){let H=crypto.getRandomValues(new Uint8Array(16));H[6]=H[6]&15|64,H[8]=H[8]&63|128;let $=Array.from(H,(e)=>e.toString(16).padStart(2,"0")).join("");return`${$.slice(0,8)}-${$.slice(8,12)}-${$.slice(12,16)}-${$.slice(16,20)}-${$.slice(20)}`}class d${socket;stream;connectionId=yo();subscribers=new Set;reading;constructor(H,$){this.socket=H,this.stream=$,this.reading=(async()=>{try{while(!$.closed){let e=await Po($);for(let _ of[...this.subscribers])try{_(e)}catch{}}}catch{}})()}subscribe(H){return this.subscribers.add(H),()=>this.subscribers.delete(H)}waitFor(H,$=5000){return new Promise((e,_)=>{let t=setTimeout(()=>{T(),_(Error(`timeout waiting for ${H} after ${$}ms`))},$),T=this.subscribe((b)=>{if(b.__selector===H)clearTimeout(t),T(),e(b)})})}send(H,$){xo(this.socket,{__selector:H,__argument:{WIRConnectionIdentifierKey:this.connectionId,...$}})}async reportIdentifier(){this.send("_rpc_reportIdentifier:",{})}async listApplications(){this.send("_rpc_getConnectedApplications:",{});let H=await this.waitFor("_rpc_reportConnectedApplicationList:",3000).catch(()=>null);if(!H)return[];let e=H.__argument.WIRApplicationDictionaryKey??{},_=[];for(let[t,T]of Object.entries(e)){let b=T;_.push({appId:t,bundleId:b.WIRApplicationBundleIdentifierKey,name:b.WIRApplicationNameKey,isProxy:Boolean(b.WIRIsApplicationProxyKey),isActive:Boolean(b.WIRIsApplicationActiveKey),hostAppId:b.WIRHostApplicationIdentifierKey})}return _}async getListing(H){this.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:H});let $=await this.waitFor("_rpc_applicationSentListing:",3000).catch(()=>null);if(!$)return[];let _=$.__argument.WIRListingKey??{},t=[];for(let T of Object.values(_)){let b=T;t.push({pageId:Number(b.WIRPageIdentifierKey??0),title:b.WIRTitleKey??"",url:b.WIRURLKey??"",type:b.WIRTypeKey??""})}return t}get connection(){return this.connectionId}forwardSocketSetup(H,$,e){this.send("_rpc_forwardSocketSetup:",{WIRApplicationIdentifierKey:H,WIRPageIdentifierKey:$,WIRSenderKey:e,WIRAutomaticallyPause:!1})}forwardSocketData(H,$,e,_){this.send("_rpc_forwardSocketData:",{WIRApplicationIdentifierKey:H,WIRPageIdentifierKey:$,WIRSenderKey:e,WIRSocketDataKey:_})}forwardDidClose(H,$,e){this.send("_rpc_forwardDidClose:",{WIRApplicationIdentifierKey:H,WIRPageIdentifierKey:$,WIRSenderKey:e})}onMessage(H){return this.subscribe(H)}close(){this.socket.end()}}class z${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(H,$,e,_,t){this.ws=H,this.wi=$,this.appId=e,this.pageId=_,this.senderKey=t}addMessageFilter(H,$){let e=this.filters.get(H);if(!e)this.filters.set(H,e=[]);e.push($)}callTarget(H,$={}){return new Promise((e,_)=>{let t=--this.requestId;this.adapterRequestMap.set(t,{resolve:e,reject:_}),this.sendRaw(JSON.stringify({id:t,method:H,params:$}))})}fireEventToTools(H,$){this.sendToTools(JSON.stringify({method:H,params:$}))}fireResultToTools(H,$){this.sendToTools(JSON.stringify({id:H,result:$}))}fireErrorToTools(H,$){this.sendToTools(JSON.stringify({id:H,error:{code:$.code??-32000,message:$.message}}))}replyEmpty(H){if(typeof H.id==="number")this.fireResultToTools(H.id,{});return Promise.resolve(null)}async onMessageFromTools(H){let $;try{$=JSON.parse(H)}catch{return}if(typeof $.method==="string"&&typeof $.id==="number")this.toolRequestMap.set($.id,$.method);let e=`tools::${$.method}`,_=this.filters.get(e),t=$;if(_)for(let T of _){if(!t)break;t=await T(t)}if(t)this.sendRaw(JSON.stringify(t))}async onMessageFromTarget(H){let $;try{$=JSON.parse(H)}catch{return}if($.method==="Target.targetCreated"){this.sawAnyTargetCreated=!0;let T=$.params?.targetInfo;if(T?.type==="page"&&!this.innerTargetId)this.innerTargetId=T.targetId,this.flushQueue();return}if($.method==="Target.didCommitProvisionalTarget"){let T=$.params?.newTargetId;if(typeof T==="string")this.innerTargetId=T;return}if($.method==="Target.targetDestroyed")return;if($.method==="Target.dispatchMessageFromTarget"){let T=$.params?.message;if(typeof T==="string")return this.onMessageFromTarget(T);return}if(typeof $.id==="number"&&this.wrappedAckIds.has($.id)){this.wrappedAckIds.delete($.id);return}if(typeof $.id==="number"){let T=this.adapterRequestMap.get($.id);if(T){if(this.adapterRequestMap.delete($.id),"error"in $&&$.error)T.reject($.error);else T.resolve($.result??{});return}let b=this.toolRequestMap.get($.id);if(b){this.toolRequestMap.delete($.id);let A=`target::${b}`;if("error"in $&&this.filters.has("target::error"))A="target::error";let a=this.filters.get(A);if(!a)return this.sendToTools(H);let r=$;for(let L of a){if(!r)break;r=await L(r)}if(r)this.sendToTools(JSON.stringify(r));return}return this.sendToTools(H)}let e=`target::${$.method}`,_=this.filters.get(e);if(!_)return this.sendToTools(H);let t=$;for(let T of _){if(!t)break;t=await T(t)}if(t)this.sendToTools(JSON.stringify(t))}sendRaw(H){let $=null;try{$=JSON.parse(H)}catch{}let e=$&&typeof $.method==="string"&&$.method.startsWith("Target.");if(this.innerTargetId&&$&&!e){if(typeof $.id==="number")this.wrappedAckIds.add($.id);let _={id:$.id,method:"Target.sendMessageToTarget",params:{id:$.id,message:H,targetId:this.innerTargetId}};this.writeFrame(JSON.stringify(_));return}if(!this.innerTargetId&&$&&!e){if(this.outgoingQueue.push(H),this.outgoingQueue.length===1)setTimeout(()=>{if(!this.innerTargetId&&!this.sawAnyTargetCreated&&this.outgoingQueue.length>0){let _=this.outgoingQueue;this.outgoingQueue=[];for(let t of _)this.writeFrame(t)}},250);return}this.writeFrame(H)}flushQueue(){if(this.outgoingQueue.length===0)return;let H=this.outgoingQueue;this.outgoingQueue=[];for(let $ of H)this.sendRaw($)}writeFrame(H){this.wi.forwardSocketData(this.appId,this.pageId,this.senderKey,new TextEncoder().encode(H))}sendToTools(H){if(this.ws.readyState===1)this.ws.send(H)}}function Fo(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function P(H,$,e){return H.fireResultToTools($.id,e),Promise.resolve(null)}function Zo(H,$){H.addMessageFilter("tools::Debugger.canSetScriptSource",(e)=>P(H,e,{result:!1})),H.addMessageFilter("tools::Debugger.setBlackboxPatterns",(e)=>P(H,e,{})),H.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(e)=>P(H,e,{})),H.addMessageFilter("target::Debugger.enable",(e)=>{return H.callTarget("Debugger.setBreakpointsActive",{active:!0}).catch(()=>{}),H.callTarget("Debugger.setPauseOnDebuggerStatements",{enabled:!0}).catch(()=>{}),Promise.resolve(e)}),H.addMessageFilter("target::Debugger.scriptParsed",(e)=>{if(e.params?.scriptId)$.lastScriptEval.value=String(e.params.scriptId);return Promise.resolve(e)}),H.addMessageFilter("tools::Debugger.setBreakpoint",(e)=>{let _=e.params??{};return e.params={location:_.location,options:_.condition?{condition:_.condition}:{}},Promise.resolve(e)}),H.addMessageFilter("tools::Debugger.setBreakpointByUrl",(e)=>{let _=e.params??{};return e.params={lineNumber:_.lineNumber,url:_.url,urlRegex:_.urlRegex,columnNumber:_.columnNumber,options:_.condition?{condition:_.condition}:{}},Promise.resolve(e)});for(let e of["removeBreakpoint","continueToLocation","stepInto","stepOver","stepOut","resume","pause","getScriptSource","evaluateOnCallFrame"])H.addMessageFilter(`tools::Debugger.${e}`,(_)=>Promise.resolve(_));H.addMessageFilter("target::Debugger.paused",(e)=>{let _=e.params?.callFrames;if(Array.isArray(_))for(let t of _){if(t.functionName==null&&typeof t.name==="string")t.functionName=t.name;if(!t.location&&t.sourceCodeLocation)t.location={scriptId:String(t.sourceCodeLocation.scriptId??""),lineNumber:t.sourceCodeLocation.lineNumber??0,columnNumber:t.sourceCodeLocation.columnNumber??0};if(Array.isArray(t.scopeChain)){for(let T of t.scopeChain)if(!T.object&&T.value)T.object=T.value}}return Promise.resolve(e)}),H.addMessageFilter("tools::Debugger.setBlackboxedRanges",(e)=>P(H,e,{})),H.addMessageFilter("tools::Debugger.setSkipAllPauses",(e)=>P(H,e,{})),H.addMessageFilter("tools::Debugger.setPauseOnExceptions",(e)=>{return Promise.resolve(e)})}function Uo(H,$){H.addMessageFilter("target::Runtime.executionContextCreated",(e)=>{let _=e.params?.context;if(_){if(!_.origin)_.origin=_.name??"";let t=Number(_.id),T=!!(_.isPageContext||_.type==="normal");if(Number.isFinite(t)&&t>0){if(!$.pageExecCtx.id||T&&!$.pageExecCtx.isPage)$.pageExecCtx.id=t,$.pageExecCtx.isPage=T}if(_.frameId)_.auxData={frameId:_.frameId,isDefault:!0},delete _.frameId}return Promise.resolve(e)}),H.addMessageFilter("tools::Runtime.evaluate",(e)=>{let _=e.params;if(!_)return Promise.resolve(e);if(_.throwOnSideEffect)return P(H,e,{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 _)_.doNotPauseOnExceptionsAndMuteConsole=!!_.silent,delete _.silent;if("userGesture"in _)_.emulateUserGesture=!!_.userGesture,delete _.userGesture;return Promise.resolve(e)}),H.addMessageFilter("target::Runtime.evaluate",(e)=>{let _=e.result;if(_?.wasThrown){if(_.result)_.result.subtype="error";_.exceptionDetails={exceptionId:0,text:_.result?.description??"Uncaught",url:"",scriptId:$.lastScriptEval.value,lineNumber:0,columnNumber:0,stackTrace:{callFrames:[{functionName:"",scriptId:$.lastScriptEval.value,url:"",lineNumber:0,columnNumber:0}]},exception:_.result}}return Promise.resolve(e)}),H.addMessageFilter("target::Runtime.getProperties",(e)=>{let _=e.result;if(!_)return Promise.resolve(e);let t=Array.isArray(_.result)?_.result:Array.isArray(_.properties)?_.properties:null;if(t)_.result=t.filter((T)=>T.isOwn||T.nativeGetter).map((T)=>({...T,isOwn:!0})),delete _.properties;if(Array.isArray(_.internalProperties))_.internalProperties=_.internalProperties.map((T)=>({name:T.name,value:T.value}));return Promise.resolve(e)}),H.addMessageFilter("tools::Runtime.compileScript",(e)=>P(H,e,{scriptId:null,exceptionDetails:null})),H.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(e)=>P(H,e,{names:[]})),H.addMessageFilter("tools::Runtime.terminateExecution",(e)=>P(H,e,{})),H.addMessageFilter("tools::Runtime.getIsolateId",(e)=>P(H,e,{id:"inspect-webkit"})),H.addMessageFilter("tools::Runtime.getHeapUsage",(e)=>P(H,e,{usedSize:0,totalSize:0})),H.addMessageFilter("tools::Runtime.discardConsoleEntries",(e)=>{return e.method="Console.clearMessages",Promise.resolve(e)}),H.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(e)=>P(H,e,{})),H.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(e)=>P(H,e,{})),H.addMessageFilter("tools::Runtime.releaseObject",(e)=>Promise.resolve(e)),H.addMessageFilter("tools::Runtime.releaseObjectGroup",(e)=>Promise.resolve(e)),H.addMessageFilter("tools::Runtime.callFunctionOn",(e)=>Promise.resolve(e)),H.addMessageFilter("tools::Runtime.queryObjects",(e)=>Promise.resolve(e)),H.addMessageFilter("target::Debugger.globalObjectCleared",(e)=>{return H.fireEventToTools("Runtime.executionContextsCleared",{}),Promise.resolve(null)})}function Jo(H,$){H.addMessageFilter("tools::Log.startViolationsReport",(e)=>P(H,e,{})),H.addMessageFilter("tools::Log.stopViolationsReport",(e)=>P(H,e,{})),H.addMessageFilter("tools::Log.clear",(e)=>{return e.method="Console.clearMessages",Promise.resolve(e)}),H.addMessageFilter("tools::Log.disable",(e)=>{return e.method="Console.disable",Promise.resolve(e)}),H.addMessageFilter("tools::Log.enable",(e)=>{return e.method="Console.enable",Promise.resolve(e)}),H.addMessageFilter("tools::Runtime.enable",(e)=>{return H.callTarget("Console.enable",{}).catch(()=>{}),Promise.resolve(e)}),H.addMessageFilter("target::Console.messageAdded",(e)=>{let _=e.params?.message??{},T=(Array.isArray(_.stackTrace)?_.stackTrace:Array.isArray(_.stackTrace?.callFrames)?_.stackTrace.callFrames:[]).map((a)=>({functionName:a.functionName??"",scriptId:a.scriptId??"",url:a.url??"",lineNumber:Number(a.lineNumber??0),columnNumber:Number(a.columnNumber??0)})),b=T.length?{callFrames:T}:void 0,A=Date.now();if(_.source==="console-api"){let a=_.type==="log"?_.level??"log":_.type??"log",r=wo(a),L=Array.isArray(_.parameters)&&_.parameters.length>0?_.parameters:[{type:"string",value:String(_.text??"")}],c={type:r,args:L,executionContextId:$.pageExecCtx.id||1,timestamp:A,stackTrace:b};return $.lastConsoleApiCalled.value=c,H.fireEventToTools("Runtime.consoleAPICalled",c),Promise.resolve(null)}if(_.source==="javascript"&&_.level==="error")return H.fireEventToTools("Runtime.exceptionThrown",{timestamp:A,exceptionDetails:{exceptionId:0,text:String(_.text??"Uncaught"),lineNumber:Number(_.line??0),columnNumber:Number(_.column??0),scriptId:$.lastScriptEval.value,url:_.url,stackTrace:b,exception:{type:"string",value:String(_.text??"")}}}),Promise.resolve(null);return H.fireEventToTools("Log.entryAdded",{entry:{source:_.source??"other",level:Xo(_.level??_.type??"log"),text:String(_.text??""),timestamp:A,url:_.url,lineNumber:_.line,stackTrace:b,networkRequestId:_.networkRequestId}}),Promise.resolve(null)}),H.addMessageFilter("target::Console.messagesCleared",()=>{return H.fireEventToTools("Log.entriesCleared",{}),H.fireEventToTools("Runtime.consoleAPICalled",{type:"clear",args:[],executionContextId:$.pageExecCtx.id||1,timestamp:Date.now()}),$.lastConsoleApiCalled.value=null,Promise.resolve(null)}),H.addMessageFilter("target::Console.messageRepeatCountUpdated",()=>{let e=$.lastConsoleApiCalled.value;if(e)H.fireEventToTools("Runtime.consoleAPICalled",{...e,timestamp:Date.now()});return Promise.resolve(null)}),H.addMessageFilter("target::Console.heapSnapshot",()=>Promise.resolve(null))}function wo(H){switch(H){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 H;default:return"log"}}function Xo(H){switch(H){case"log":case"debug":return"verbose";case"info":return"info";case"warn":case"warning":return"warning";case"error":return"error";default:return"info"}}function Ko(H){let $=new Set;H.addMessageFilter("tools::DOM.enable",(e)=>P(H,e,{})),H.addMessageFilter("tools::DOM.setInspectMode",(e)=>{if(e.method="DOM.setInspectModeEnabled",e.params)e.params.enabled=e.params.mode==="searchForNode",delete e.params.mode,delete e.params.highlightConfig;return Promise.resolve(e)}),H.addMessageFilter("tools::DOM.setInspectedNode",(e)=>{return e.method="Console.addInspectedNode",Promise.resolve(e)}),H.addMessageFilter("tools::DOM.performSearch",(e)=>{if(e.params)e.params={query:e.params.query,caseSensitive:!!e.params.caseSensitive};return Promise.resolve(e)}),H.addMessageFilter("target::DOM.performSearch",(e)=>{let _=e.result?.searchId;if(typeof _==="string")$.add(_);return Promise.resolve(e)}),H.addMessageFilter("tools::DOM.discardSearchResults",(e)=>{let _=e.params?.searchId;if(typeof _==="string")$.delete(_);return Promise.resolve(e)}),H.addMessageFilter("tools::DOM.pushNodesByBackendIdsToFrontend",async(e)=>{let _=e.params?.backendNodeIds??[],t=await Promise.all(_.map((T)=>H.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:T}).then((b)=>b.nodeId).catch(()=>T)));return H.fireResultToTools(e.id,{nodeIds:t}),null}),H.addMessageFilter("tools::DOM.getBoxModel",(e)=>{return H.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:e.params?.nodeId}).catch(()=>{}),Promise.resolve(null)}),H.addMessageFilter("tools::DOM.getNodeForLocation",async(e)=>{try{let t=(await H.callTarget("Runtime.evaluate",{expression:`document.elementFromPoint(${e.params?.x},${e.params?.y})`})).result?.objectId;if(!t)return H.fireResultToTools(e.id,{nodeId:0}),null;let T=await H.callTarget("DOM.requestNode",{objectId:t});H.fireResultToTools(e.id,{nodeId:T.nodeId,backendNodeId:T.nodeId})}catch(_){H.fireErrorToTools(e.id,{message:_?.message??String(_)})}return null}),H.addMessageFilter("tools::DOM.resolveNode",(e)=>{if(e.params&&e.params.objectGroup===void 0)delete e.params.objectGroup;return Promise.resolve(e)})}function vo(H){H.addMessageFilter("tools::DOMDebugger.getEventListeners",async($)=>{try{let e=await H.callTarget("DOM.requestNode",{objectId:$.params?.objectId}),t=((await H.callTarget("DOM.getEventListenersForNode",{nodeId:e.nodeId,objectGroup:"event-listeners-panel"})).listeners??[]).map((T)=>({type:T.type,useCapture:!!T.useCapture,passive:!!T.passive,once:!!T.once,location:T.location,handler:T.handler}));H.fireResultToTools($.id,{listeners:t})}catch(e){H.fireErrorToTools($.id,{message:e?.message??String(e)})}return null}),H.addMessageFilter("tools::DOMDebugger.setXHRBreakpoint",($)=>P(H,$,{})),H.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",($)=>P(H,$,{})),H.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",($)=>P(H,$,{})),H.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",($)=>P(H,$,{}))}function Vo(H,$){H.addMessageFilter("tools::Page.setOverlayMessage",(T)=>{return T.method="Debugger.setOverlayMessage",Promise.resolve(T)}),H.addMessageFilter("tools::Page.configureOverlay",(T)=>{return T.method="Debugger.setOverlayMessage",Promise.resolve(T)}),H.addMessageFilter("tools::Page.getNavigationHistory",async(T)=>{try{let b=await H.callTarget("Runtime.evaluate",{expression:"window.location.href"}),A=await H.callTarget("Runtime.evaluate",{expression:"document.title"});H.fireResultToTools(T.id,{currentIndex:0,entries:[{id:0,url:b.result?.value??"",userTypedURL:b.result?.value??"",title:A.result?.value??"",transitionType:"link"}]})}catch(b){H.fireErrorToTools(T.id,{message:b?.message??String(b)})}return null}),H.addMessageFilter("target::Page.frameNavigated",(T)=>{return ub(T.params?.frame),Promise.resolve(T)}),H.addMessageFilter("target::Page.getResourceTree",(T)=>{return n_(T.result?.frameTree),Promise.resolve(T)}),H.addMessageFilter("tools::Page.getFrameTree",async(T)=>{if(typeof T.id!=="number")return null;try{let b=await H.callTarget("Page.getResourceTree",{}),A=hb(b?.frameTree);n_(A),H.fireResultToTools(T.id,{frameTree:A})}catch(b){H.fireErrorToTools(T.id,{message:b?.message??String(b)})}return null}),H.addMessageFilter("tools::Page.createIsolatedWorld",(T)=>{if(typeof T.id!=="number")return Promise.resolve(null);return P(H,T,{executionContextId:$.pageExecCtx.id||1})});let e=1;H.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(T)=>P(H,T,{identifier:`pptr-${e++}`})),H.addMessageFilter("tools::WebMCP.enable",(T)=>P(H,T,{})),H.addMessageFilter("tools::WebMCP.disable",(T)=>P(H,T,{})),H.addMessageFilter("tools::Page.captureScreenshot",(T)=>{return H.fireErrorToTools(T.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),H.addMessageFilter("tools::Page.startScreencast",(T)=>P(H,T,{})),H.addMessageFilter("tools::Page.stopScreencast",(T)=>P(H,T,{})),H.addMessageFilter("tools::Page.screencastFrameAck",(T)=>P(H,T,{})),H.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(T)=>P(H,T,{}));let _="",t="0.1";H.addMessageFilter("target::Page.frameNavigated",(T)=>{let b=T.params?.frame;if(b)t=b.id??t,_=b.loaderId??_,H.fireEventToTools("Page.frameStartedLoading",{frameId:t}),H.fireEventToTools("Page.lifecycleEvent",{frameId:t,loaderId:_,name:"init",timestamp:0}),H.fireEventToTools("Page.lifecycleEvent",{frameId:t,loaderId:_,name:"commit",timestamp:0});return Promise.resolve(T)}),H.addMessageFilter("target::Page.domContentEventFired",(T)=>{return H.fireEventToTools("Page.lifecycleEvent",{frameId:t,loaderId:_,name:"DOMContentLoaded",timestamp:T.params?.timestamp??0}),Promise.resolve(T)}),H.addMessageFilter("target::Page.loadEventFired",(T)=>{return H.fireEventToTools("Page.lifecycleEvent",{frameId:t,loaderId:_,name:"load",timestamp:T.params?.timestamp??0}),H.fireEventToTools("Page.lifecycleEvent",{frameId:t,loaderId:_,name:"networkAlmostIdle",timestamp:T.params?.timestamp??0}),H.fireEventToTools("Page.lifecycleEvent",{frameId:t,loaderId:_,name:"networkIdle",timestamp:T.params?.timestamp??0}),H.fireEventToTools("Page.frameStoppedLoading",{frameId:t}),Promise.resolve(T)})}function ub(H){if(!H)return;if(!H.securityOrigin)try{H.securityOrigin=new URL(H.url??"").origin}catch{H.securityOrigin="://"}if(!H.mimeType)H.mimeType="text/html"}function n_(H){if(!H)return;if(ub(H.frame),Array.isArray(H.childFrames))H.childFrames.forEach(n_)}function hb(H){if(!H)return H;let $={frame:H.frame};if(Array.isArray(H.childFrames))$.childFrames=H.childFrames.map(hb);return $}function jo(H){H.addMessageFilter("tools::Overlay.enable",($)=>P(H,$,{})),H.addMessageFilter("tools::Overlay.disable",($)=>P(H,$,{})),H.addMessageFilter("tools::Overlay.highlightNode",($)=>{let e=$.params??{};return $.method="DOM.highlightNode",$.params={highlightConfig:e.highlightConfig,nodeId:e.nodeId,objectId:e.objectId},Promise.resolve($)}),H.addMessageFilter("tools::Overlay.highlightFrame",($)=>{return $.method="DOM.highlightFrame",Promise.resolve($)}),H.addMessageFilter("tools::Overlay.highlightQuad",($)=>{return $.method="DOM.highlightQuad",Promise.resolve($)}),H.addMessageFilter("tools::Overlay.highlightRect",($)=>{return $.method="DOM.highlightRect",Promise.resolve($)}),H.addMessageFilter("tools::Overlay.hideHighlight",($)=>{return $.method="DOM.hideHighlight",Promise.resolve($)}),H.addMessageFilter("tools::Overlay.setShowPaintRects",($)=>{return $.method="Page.setShowPaintRects",Promise.resolve($)}),H.addMessageFilter("tools::Overlay.setInspectMode",($)=>{let e=$.params??{};return $.method="DOM.setInspectModeEnabled",$.params={enabled:typeof e.mode==="string"&&e.mode!=="none",highlightConfig:e.highlightConfig},Promise.resolve($)})}function Qo(H){H.addMessageFilter("tools::Emulation.canEmulate",($)=>P(H,$,{result:!0})),H.addMessageFilter("tools::Emulation.setTouchEmulationEnabled",($)=>{return $.method="Page.setTouchEmulationEnabled",Promise.resolve($)}),H.addMessageFilter("tools::Emulation.setScriptExecutionDisabled",($)=>{return $.method="Page.setScriptExecutionDisabled",Promise.resolve($)}),H.addMessageFilter("tools::Emulation.setEmulatedMedia",($)=>{return $.method="Page.setEmulatedMedia",Promise.resolve($)}),H.addMessageFilter("tools::Rendering.setShowPaintRects",($)=>{return $.method="Page.setShowPaintRects",Promise.resolve($)}),H.addMessageFilter("tools::Emulation.setDeviceMetricsOverride",($)=>P(H,$,{})),H.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",($)=>P(H,$,{})),H.addMessageFilter("tools::Emulation.setUserAgentOverride",($)=>{let e=$.params?.userAgent??"";return $.method="Page.overrideUserAgent",$.params={value:e},Promise.resolve($)}),H.addMessageFilter("tools::Emulation.setFocusEmulationEnabled",($)=>P(H,$,{})),H.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",($)=>P(H,$,{}))}function R_(H){switch(H){case"Document":case"Image":case"Font":case"Script":case"XHR":case"Fetch":case"Ping":case"WebSocket":return H;case"StyleSheet":return"Stylesheet";default:return"Other"}}function Tc(H){if(!H)return H;return{..._c,...H,hasPostData:H.postData!=null}}function bc(H){if(!H)return H;let $=0,e=H.headers??{},_=e["Content-Length"]??e["content-length"];if(_!=null)$=Number(_)||0;return{...tc,...H,fromDiskCache:H.source==="disk-cache",fromServiceWorker:H.source==="service-worker",encodedDataLength:$}}function Lc(H,$){if(!H)return;for(let[e,_]of Object.entries($))if(e in H&&!(_ in H))H[_]=H[e],delete H[e]}function ac(H){let $=typeof H.size==="number"?H.size:(H.name?.length??0)+(H.value?.length??0);return{name:H.name,value:H.value,domain:H.domain,path:H.path,expires:H.expires??-1,size:$,httpOnly:!!H.httpOnly,secure:!!H.secure,session:!!H.session,...H.sameSite?{sameSite:H.sameSite}:{}}}function rc(H,$){let e=new Map,_=1e4,t=1024,T=4194304,b=Promise.resolve(),A=(r)=>{let L=b.then(r,r);return b=L.catch(()=>{}),L};for(let[r,L]of Object.entries(Yo))H.addMessageFilter(`tools::${r}`,(c)=>{return c.method=L,Promise.resolve(c)});H.addMessageFilter("tools::Network.setCacheDisabled",(r)=>{if(r.params&&"cacheDisabled"in r.params)r.params={disabled:!!r.params.cacheDisabled};return Promise.resolve(r)});let a=async(r)=>{try{let L=await H.callTarget("Page.getCookies",{}),c=Array.isArray(L?.cookies)?L.cookies.map(ac):[];H.fireResultToTools(r.id,{cookies:c})}catch(L){H.fireErrorToTools(r.id,{message:L?.message??String(L)})}return null};H.addMessageFilter("tools::Network.getCookies",a),H.addMessageFilter("tools::Network.getAllCookies",a),H.addMessageFilter("tools::Network.setCookie",(r)=>{let L=r.params??{};return r.method="Page.setCookie",r.params={cookie:{name:L.name,value:L.value,domain:L.domain??"",path:L.path??"/",expires:L.expires??-1,session:!1,httpOnly:!!L.httpOnly,secure:!!L.secure,sameSite:L.sameSite??"None"}},Promise.resolve(r)}),H.addMessageFilter("tools::Network.setCookies",async(r)=>{let L=Array.isArray(r.params?.cookies)?r.params.cookies:[];try{await Promise.all(L.map((c)=>H.callTarget("Page.setCookie",{cookie:c}))),H.fireResultToTools(r.id,{})}catch(c){H.fireErrorToTools(r.id,{message:c?.message??String(c)})}return null}),H.addMessageFilter("tools::Network.deleteCookies",(r)=>{let L=r.params??{},c=L.url??`https://${(L.domain??"").replace(/^\./,"")}${L.path??"/"}`;return r.method="Page.deleteCookie",r.params={cookieName:L.name,url:c},Promise.resolve(r)}),H.addMessageFilter("tools::Network.deleteCookie",(r)=>{return r.method="Page.deleteCookie",Promise.resolve(r)}),H.addMessageFilter("tools::Network.clearBrowserCookies",async(r)=>{try{let L=await H.callTarget("Page.getCookies",{}),c=Array.isArray(L?.cookies)?L.cookies:[];await Promise.all(c.map((u)=>H.callTarget("Page.deleteCookie",{cookieName:u.name,url:`${u.secure?"https":"http"}://${(u.domain??"").replace(/^\./,"")}${u.path??"/"}`}).catch(()=>{}))),H.fireResultToTools(r.id,{})}catch(L){H.fireErrorToTools(r.id,{message:L?.message??String(L)})}return null}),H.addMessageFilter("tools::Network.canEmulateNetworkConditions",(r)=>P(H,r,{result:!1})),H.addMessageFilter("tools::Network.setExtraHTTPHeaders",(r)=>P(H,r,{})),H.addMessageFilter("tools::Network.setBlockedURLs",(r)=>P(H,r,{})),H.addMessageFilter("tools::Network.emulateNetworkConditions",(r)=>P(H,r,{})),H.addMessageFilter("tools::Network.setMonitoringXHREnabled",(r)=>P(H,r,{})),H.addMessageFilter("tools::Network.getResponseBody",async(r)=>{let L=r.params?.requestId,c=typeof L==="string"?e.get(L):void 0;if(!c)return H.fireErrorToTools(r.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;if(c.method&&c.method.toUpperCase()!=="GET")return H.fireErrorToTools(r.id,{message:`Network.getResponseBody: cannot recover ${c.method} response body (bridge re-fetch is GET-only)`}),null;if(c.bytes===0)return H.fireResultToTools(r.id,{body:"",base64Encoded:!1}),null;return A(async()=>{try{let u={};for(let[E,R]of Object.entries(c.headers??{})){let o=E.toLowerCase();if(o==="if-none-match"||o==="if-modified-since"||o==="host"||o==="connection")continue;u[E]=String(R)}let n=new AbortController,h=setTimeout(()=>n.abort(),1e4),I;try{I=await fetch(c.url,{headers:u,redirect:"follow",signal:n.signal})}finally{clearTimeout(h)}let l=Number(I.headers.get("content-length")??"");if(Number.isFinite(l)&&l>4194304){H.fireErrorToTools(r.id,{message:`Network.getResponseBody: response too large (${l} bytes > ${"4194304"}) — skipped re-fetch`});try{await I.arrayBuffer()}catch{}return}let N=Buffer.from(await I.arrayBuffer());if(N.byteLength>4194304){H.fireErrorToTools(r.id,{message:`Network.getResponseBody: response too large (${N.byteLength} bytes > 4194304)`});return}let C=((I.headers.get("content-type")??"").split(";")[0]??"").trim(),D=/^(text\/|image\/svg\+xml|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))$/.test(C),d=D?N.toString("utf8"):N.toString("base64");H.fireResultToTools(r.id,{body:d,base64Encoded:!D})}catch(u){H.fireErrorToTools(r.id,{message:`Network.getResponseBody re-fetch failed: ${u?.message??String(u)}`})}}),null});for(let[r,L]of Object.entries(zo))H.addMessageFilter(`target::${r}`,(c)=>{return Lc(c.params,L),Promise.resolve(c)});H.addMessageFilter("target::Network.requestWillBeSent",(r)=>{let L=r.params;if(L){if(Object.assign(L,{...Hc,...L}),L.request=Tc(L.request),L.type=R_(L.type),typeof L.requestId==="string"&&typeof L.request?.url==="string"){if(e.size>=1024){let c=e.keys().next().value;if(c!==void 0)e.delete(c)}e.set(L.requestId,{url:L.request.url,method:L.request.method,headers:L.request.headers,frameId:L.frameId,bytes:0})}}return Promise.resolve(r)}),H.addMessageFilter("target::Network.responseReceived",(r)=>{let L=r.params;if(L)Object.assign(L,{...$c,...L}),L.response=bc(L.response),L.type=R_(L.type);return Promise.resolve(r)}),H.addMessageFilter("target::Network.loadingFinished",(r)=>{let L=r.params;if(L){let c=L.metrics?.responseBodyBytesReceived;if(typeof c==="number"&&L.encodedDataLength==null)L.encodedDataLength=c;if(Object.assign(L,{...ec,...L}),typeof L.requestId==="string"&&typeof c==="number"){let u=e.get(L.requestId);if(u&&c>u.bytes)u.bytes=c}}return Promise.resolve(r)}),H.addMessageFilter("target::Network.dataReceived",(r)=>{let L=r.params;if(L&&typeof L.requestId==="string"){let c=e.get(L.requestId);if(c){let u=Number(L.dataLength)||0;c.bytes+=u}}return Promise.resolve(r)}),H.addMessageFilter("target::Network.loadingFailed",(r)=>{let L=r.params;if(L){if(L.type=R_(L.type),!("canceled"in L))L.canceled=!1}return Promise.resolve(r)}),H.addMessageFilter("target::Network.requestServedFromMemoryCache",(r)=>{if(r.method="Network.requestServedFromCache",r.params)r.params={requestId:r.params.requestId};return Promise.resolve(r)}),H.addMessageFilter("tools::Network.loadNetworkResource",async(r)=>{let L=r.params??{};if(!$)return H.fireResultToTools(r.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let c=await H.callTarget("Network.loadResource",{frameId:L.frameId,url:L.url}),u=!!c?.content&&(c?.status??0)>=200&&(c?.status??0)<300,n;if(u)n=`network-resource:${L.frameId??""}:${L.url}`,$.set(n,String(c.content));H.fireResultToTools(r.id,{resource:{success:u,stream:n,httpStatusCode:c?.status,headers:c?.headers,mimeType:c?.mimeType}})}catch(c){H.fireResultToTools(r.id,{resource:{success:!1,netError:2,netErrorName:c?.message??"ERR_FAILED"}})}return null})}function Ac(H){for(let $ of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])H.addMessageFilter(`tools::${$}`,(e)=>P(H,e,{}))}function oc(H){H.addMessageFilter("target::Inspector.inspect",async($)=>{let e=$.params?.object?.objectId;if(typeof e!=="string")return null;try{let t=(await H.callTarget("DOM.requestNode",{objectId:e}))?.nodeId;if(typeof t==="number")H.fireEventToTools("Overlay.inspectNodeRequested",{backendNodeId:t}),H.fireEventToTools("DOM.inspectNodeRequested",{backendNodeId:t})}catch{}return null})}function Rc(H){if(!H)return H;let $=H.origin==="inspector";return{styleSheetId:H.styleSheetId,frameId:H.frameId,sourceURL:H.sourceURL??"",origin:H.origin==="author"?"regular":H.origin,title:H.title??"",disabled:!!H.disabled,isInline:!!H.isInline,startLine:H.startLine??0,startColumn:H.startColumn??0,isMutable:$,isConstructed:$,length:H.length??0,endLine:H.endLine??0,endColumn:H.endColumn??0,hasSourceURL:!!H.sourceURL}}function I_(H){if(!H)return H;let $={origin:H.origin==="author"?"regular":H.origin,style:FH(H.style),selectorList:hc(H.selectorList)};if(H.ruleId?.styleSheetId)$.styleSheetId=H.ruleId.styleSheetId;if(Array.isArray(H.groupings))$.media=H.groupings.map((e)=>({text:e.text,sourceURL:e.sourceURL,source:uc[e.type]}));return $}function Ic(H){let $={lastNodeId:0},e=new Map;async function _(t,T){let b=e.get(t);if(!b)try{if(b=(await H.callTarget("CSS.getStyleSheet",{styleSheetId:t}))?.styleSheet,b)e.set(t,b)}catch{}let A=b?.rules??[];for(let a=0;a<A.length;a++)if(cc(A[a]?.style?.range,T))return{styleSheetId:t,ordinal:a};return{styleSheetId:t,ordinal:0}}H.addMessageFilter("tools::CSS.enable",(t)=>{return H.fireResultToTools(t.id,{}),Promise.resolve(null)}),H.addMessageFilter("target::CSS.styleSheetAdded",(t)=>{if(t.params?.header)t.params.header=Rc(t.params.header);return Promise.resolve(t)}),H.addMessageFilter("target::CSS.getInlineStylesForNode",(t)=>{let T=t.result;if(T)t.result={inlineStyle:FH(T.inlineStyle),attributesStyle:FH(T.attributesStyle)};return Promise.resolve(t)}),H.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(t)=>{if(typeof t.params?.nodeId==="number")$.lastNodeId=t.params.nodeId;try{let[T,b]=await Promise.all([H.callTarget("CSS.getInlineStylesForNode",{nodeId:t.params.nodeId}),H.callTarget("CSS.getMatchedStylesForNode",{nodeId:t.params.nodeId,includePseudo:!0,includeInherited:!0})]);H.fireResultToTools(t.id,{inlineStyle:FH(T?.inlineStyle),attributesStyle:FH(T?.attributesStyle),matchedCSSRules:p_(b?.matchedCSSRules),pseudoElements:ic(b?.pseudoElements),inherited:nc(b?.inherited),cssKeyframesRules:[]})}catch(T){H.fireErrorToTools(t.id,{message:T?.message??String(T)})}return null}),H.addMessageFilter("tools::CSS.setStyleTexts",async(t)=>{let T=t.params?.edits??[],b=[];for(let A of T)try{let a=await _(A.styleSheetId,A.range),r=await H.callTarget("CSS.setStyleText",{styleId:a,text:A.text});b.push(FH(r?.style)),e.delete(A.styleSheetId),H.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:A.styleSheetId})}catch{b.push(null)}return H.fireResultToTools(t.id,{styles:b}),null}),H.addMessageFilter("tools::CSS.setRuleSelector",async(t)=>{let{styleSheetId:T,range:b,selector:A}=t.params??{};try{let a=await _(T,b);t.params={ruleId:a,selector:A}}catch(a){return H.fireErrorToTools(t.id,{message:a?.message??String(a)}),null}return t}),H.addMessageFilter("target::CSS.setRuleSelector",(t)=>{if(t.result?.rule)t.result={rule:I_(t.result.rule)};return Promise.resolve(t)}),H.addMessageFilter("tools::CSS.addRule",async(t)=>{let T=t.params??{},b=String(T.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let A=await H.callTarget("CSS.addRule",{contextNodeId:$.lastNodeId,styleSheetId:T.styleSheetId,selector:b});H.fireResultToTools(t.id,{rule:I_(A?.rule)})}catch(A){H.fireErrorToTools(t.id,{message:A?.message??String(A)})}return null})}function fc(H){H.addMessageFilter("tools::Browser.getVersion",($)=>P(H,$,Dc)),H.addMessageFilter("tools::Browser.getWindowForTarget",($)=>P(H,$,{windowId:1,bounds:{}})),H.addMessageFilter("tools::Browser.setWindowBounds",($)=>P(H,$,{}))}function Cc(H){switch(H){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function Nc(H){let $=async(e)=>{let _=e.params??{},t=Cc(_.type);if(!t)return H.fireResultToTools(e.id,{}),null;let T=t==="click"?["mousedown","click","mouseup"]:[t];try{for(let b of T){let A={x:Number(_.x)||0,y:Number(_.y)||0,modifiers:Number(_.modifiers)||0,button:_.button??"none",type:b},a=`(${Ec}, __sd_simulate(${JSON.stringify(A)}))`;await H.callTarget("Runtime.evaluate",{expression:a})}H.fireResultToTools(e.id,{})}catch(b){H.fireErrorToTools(e.id,{message:b?.message??String(b)})}return null};H.addMessageFilter("tools::Input.dispatchMouseEvent",$),H.addMessageFilter("tools::Input.emulateTouchFromMouseEvent",$),H.addMessageFilter("tools::Input.setIgnoreInputEvents",(e)=>{return H.fireResultToTools(e.id,{}),Promise.resolve(null)})}function lc(H){let $=new Map;return H.addMessageFilter("tools::IO.read",(e)=>{let _=String(e.params?.handle??""),t=Number(e.params?.size)||dc,T=Number(e.params?.offset)||0,b=$.get(_);if(b===void 0)return H.fireResultToTools(e.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let A=b.slice(T,T+t),a=T+t>=b.length;return H.fireResultToTools(e.id,{data:A,eof:a,base64Encoded:!1}),Promise.resolve(null)}),H.addMessageFilter("tools::IO.close",(e)=>{return $.delete(String(e.params?.handle??"")),H.fireResultToTools(e.id,{}),Promise.resolve(null)}),$}function pc(H){H.addMessageFilter("tools::Accessibility.enable",($)=>P(H,$,{})),H.addMessageFilter("tools::Accessibility.disable",($)=>P(H,$,{})),H.addMessageFilter("tools::Accessibility.getPartialAXTree",async($)=>{let e=$.params??{},_=e.nodeId??e.backendNodeId;if(typeof _!=="number")return H.fireResultToTools($.id,{nodes:[]}),null;try{let T=(await H.callTarget("DOM.getAccessibilityPropertiesForNode",{nodeId:_}))?.properties??{},b={nodeId:String(_),ignored:Boolean(T.ignored),role:T.role?{type:"role",value:String(T.role)}:void 0,name:T.label?{type:"computedString",value:String(T.label)}:void 0,backendDOMNodeId:_,childIds:[],properties:[]};H.fireResultToTools($.id,{nodes:[b]})}catch(t){H.fireResultToTools($.id,{nodes:[]})}return null})}function Mc(H){for(let[e,_]of Object.entries(Oc))H.addMessageFilter(`tools::${e}`,(t)=>P(H,t,_));for(let e of Bc)for(let _ of["enable","disable"])H.addMessageFilter(`tools::${e}.${_}`,(t)=>P(H,t,{}));let $=[["Autofill.setAddresses",{}],["Storage.getStorageKey",{storageKey:""}],["Storage.trackCacheStorageForOrigin",{}],["Storage.trackIndexedDBForOrigin",{}],["Storage.untrackCacheStorageForOrigin",{}],["Storage.untrackIndexedDBForOrigin",{}],["Storage.getCookies",{cookies:[]}],["ServiceWorker.unregister",{}]];for(let[e,_]of $)H.addMessageFilter(`tools::${e}`,(t)=>P(H,t,_))}function D_(H){let $=Fo();Mc(H);let e=lc(H);Zo(H,$),Uo(H,$),Jo(H,$),Ko(H),vo(H),Vo(H,$),jo(H),Qo(H),rc(H,e),Ac(H),oc(H),Ic(H),fc(H),Nc(H),pc(H)}function nb(H){let $=`${H.reqHost}/devtools/page/${H.id}`;return{description:H.description,devtoolsFrontendUrl:`devtools://devtools/bundled/inspector.html?ws=${$}`,devtoolsFrontendUrlCompat:`devtools://devtools/bundled/inspector.html?ws=${$}`,id:H.id,title:H.title,type:H.type,url:H.url,webSocketDebuggerUrl:`ws://${$}`,faviconUrl:""}}function t$(H){return H.replace(/[&<>"']/g,($)=>Gc[$])}function Ib(H){return ib.createServer(($,e)=>{let _=new URL($.url??"/","http://placeholder"),t=$.headers.host??"";if(_.pathname==="/json/version"){let T=typeof H.version==="function"?H.version(t):H.version;return s_(e,T)}if(_.pathname==="/json"||_.pathname==="/json/list")return s_(e,H.listTargets(t));if(_.pathname==="/json/protocol")return s_(e,{});if(_.pathname==="/")return gc(e,H,t);e.writeHead(404,{"content-type":"text/plain"}),e.end("not found")})}function s_(H,$,e=200){H.writeHead(e,{"content-type":"application/json; charset=utf-8"}),H.end(JSON.stringify($))}function gc(H,$,e){let _=$.listTargets(e),t=_.map((a)=>`<li><strong>${t$(a.title||a.url||a.id)}</strong><br><small>${t$(a.url)}</small><br><small>copy &amp; paste into Chrome's address bar:</small><br><code style="user-select:all">${t$(a.devtoolsFrontendUrl)}</code></li>`).join(""),T=`inspect-webkit${$.brand?` (${$.brand})`:""}`,b=$.indexNote??'<p>Open <code style="display:inline;padding:1px 4px">chrome://inspect</code> → <em>Configure…</em> → add '+`<code style="display:inline;padding:1px 4px">${t$(e)}</code>.</p>`,A=`<!doctype html><meta charset=utf-8><title>${t$(T)}</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>${t$(T)} — ${_.length} target${_.length===1?"":"s"}</h1>`+b+`<ul>${t}</ul>`+'<hr><p>JSON: <a href="/json/list">/json/list</a> · <a href="/json/version">/json/version</a></p>';H.writeHead(200,{"content-type":"text/html; charset=utf-8"}),H.end(A)}function Db(H,$,e){return new Promise((_,t)=>{H.once("error",(b)=>{if(b.port==null)b.port=e;if(b.host==null)b.host=$;t(b)});let T=$==="localhost"||$==="::1"||$==="127.0.0.1"?"::":$;H.listen({port:e,host:T,ipv6Only:!1},()=>{H.off("error",t),_()})})}function fb(H){let $=!process.env.NO_COLOR&&process.stderr.isTTY===!0,e=(a,r)=>$?`\x1B[${a}m${r}\x1B[0m`:r,_=(a)=>e("1",a),t=(a)=>e("2",a),T=(a)=>e("36",a),b=(a)=>e("32",a),A=`http://${H.host}:${H.port}`;console.error(`${b("●")} ${_(`${H.brand} CDP`)} ${T(A)}`),console.error(` ${t("chrome")} chrome://inspect → ${H.host}:${H.port}`),console.error(` ${t("vscode")} "type": "chrome", "port": ${H.port}`)}function Sc(H,$){let e=!!process.env.INSPECT_WEBKIT_DEBUG,_=new Map,t=!1,T=!1,b=!1,A=new Map,a=null;function r(D){if(H.readyState!==1)return;let d=JSON.stringify(D);if(e)console.error(`[browser] tools<< ${d.slice(0,240)}`);H.send(d)}function L(D,d){let E={method:D,params:d};if(a)E.sessionId=a;r(E)}function c(D,d){return{targetId:D.targetId,type:D.type==="page"?"page":D.type||"other",title:D.title||"",url:D.url||"",attached:d,canAccessOpener:!1,browserContextId:"default"}}function u(D){for(let d of _.values())if(d.targetId===D)return!0;return!1}function n(D,d){let E=$.listEntries().find((i)=>i.targetId===D);if(!E)return null;let R=crypto.randomUUID(),o=(i)=>{let p;try{p=JSON.parse(i)}catch{return}p.sessionId=R,r(p)},s=$.createPageSession(D,o);if(!s)return null;return _.set(R,{handle:s,targetId:D}),L("Target.attachedToTarget",{sessionId:R,targetInfo:c(E,!0),waitingForDebugger:d}),{sessionId:R,entry:E}}function h(D){let d=_.get(D);if(!d)return!1;try{d.handle.close()}catch{}return _.delete(D),L("Target.detachedFromTarget",{sessionId:D,targetId:d.targetId}),!0}function I(){let D=$.listEntries(),d=new Set;for(let E of D){d.add(E.targetId);let R=A.get(E.targetId);if(!R){if(A.set(E.targetId,E),t)L("Target.targetCreated",{targetInfo:c(E,u(E.targetId))});if(T&&!u(E.targetId))n(E.targetId,b)}else if(R.title!==E.title||R.url!==E.url){if(A.set(E.targetId,E),t)L("Target.targetInfoChanged",{targetInfo:c(E,u(E.targetId))})}}for(let E of[...A.keys()]){if(d.has(E))continue;A.delete(E);for(let[R,o]of _)if(o.targetId===E)h(R);if(t)L("Target.targetDestroyed",{targetId:E})}}let l=setInterval(I,$.refreshMs??1000);function N(D,d){if(D)d.sessionId=D;r(d)}function C(D,d){let{id:E,method:R}=D,o=D.params??{};switch(R){case"Browser.getVersion":return N(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(!a)a=crypto.randomUUID();return N(d,{id:E,result:{sessionId:a}})}case"Target.setDiscoverTargets":{if(t=!!o.discover,t)for(let s of $.listEntries())A.set(s.targetId,s),L("Target.targetCreated",{targetInfo:c(s,u(s.targetId))});if(typeof E==="number")N(d,{id:E,result:{}});return}case"Target.getTargets":{let s=$.listEntries().map((i)=>c(i,u(i.targetId)));return N(d,{id:E,result:{targetInfos:s}})}case"Target.setAutoAttach":{if(T=!!o.autoAttach,b=!!o.waitForDebuggerOnStart,T){for(let s of $.listEntries())if(!u(s.targetId))n(s.targetId,b)}if(typeof E==="number")N(d,{id:E,result:{}});return}case"Target.attachToTarget":{for(let[i,p]of _)if(p.targetId===o.targetId){if(typeof E==="number")N(d,{id:E,result:{sessionId:i}});return}let s=n(o.targetId,!1);if(!s){if(typeof E==="number")N(d,{id:E,error:{code:-32000,message:"No target with given id found"}});return}if(typeof E==="number")N(d,{id:E,result:{sessionId:s.sessionId}});return}case"Target.detachFromTarget":{if(h(o.sessionId),typeof E==="number")N(d,{id:E,result:{}});return}case"Target.sendMessageToTarget":{let s=_.get(o.sessionId);if(s)s.handle.onMessageFromTools(o.message);if(typeof E==="number")N(d,{id:E,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof E==="number")N(d,{id:E,result:{}});return;case"Target.getBrowserContexts":{if(typeof E==="number")N(d,{id:E,result:{browserContextIds:["default"]}});return}}if(typeof E==="number")N(d,{id:E,error:{code:-32601,message:`Browser-level method '${R??"?"}' not implemented`}})}H.on("message",(D,d)=>{let E=d?new TextDecoder().decode(D):D.toString();if(e)console.error(`[browser] tools>> ${E.slice(0,240)}`);let R;try{R=JSON.parse(E)}catch{return}if(typeof R.sessionId==="string"){if(R.sessionId===a){let i={...R};return delete i.sessionId,C(i,R.sessionId)}let o=_.get(R.sessionId);if(!o){if(typeof R.id==="number")r({id:R.id,sessionId:R.sessionId,error:{code:-32000,message:`Session ${R.sessionId} not found`}});return}let s={...R};delete s.sessionId,o.handle.onMessageFromTools(JSON.stringify(s));return}C(R,void 0)}),H.on("close",()=>{clearInterval(l);for(let[,D]of _)try{D.handle.close()}catch{}_.clear()})}async function mc(H={}){let $=H.port??9222,e=H.host??"localhost",_=await qc();if(_.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 t=new Map,T=new WeakMap,b=new Map;for(let R of _)b.set(R,[]),T.set(R,new Set),R.wi.subscribe((o)=>{let{__selector:s,__argument:i}=o;if(!s||!i)return;if(s==="_rpc_reportConnectedApplicationList:"){let p=i.WIRApplicationDictionaryKey??{},B=Object.entries(p).map(([G,m])=>({appId:G,bundleId:m.WIRApplicationBundleIdentifierKey,name:m.WIRApplicationNameKey??m.WIRApplicationBundleIdentifierKey??G,isProxy:Boolean(m.WIRIsApplicationProxyKey)}));b.set(R,B);let M=T.get(R);for(let G of B){if(G.isProxy||M.has(G.appId))continue;M.add(G.appId),R.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:G.appId})}}else if(s==="_rpc_applicationConnected:"){let p=i,B=b.get(R)??[];if(!B.find((M)=>M.appId===p.WIRApplicationIdentifierKey))B.push({appId:p.WIRApplicationIdentifierKey,bundleId:p.WIRApplicationBundleIdentifierKey,name:p.WIRApplicationNameKey??p.WIRApplicationBundleIdentifierKey,isProxy:Boolean(p.WIRIsApplicationProxyKey)}),b.set(R,B);if(!p.WIRIsApplicationProxyKey){let M=T.get(R);if(!M.has(p.WIRApplicationIdentifierKey))M.add(p.WIRApplicationIdentifierKey),R.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:p.WIRApplicationIdentifierKey})}}else if(s==="_rpc_applicationDisconnected:"){let p=b.get(R)??[];b.set(R,p.filter((B)=>B.appId!==i.WIRApplicationIdentifierKey)),t.delete(`${R.id}:${i.WIRApplicationIdentifierKey}`)}else if(s==="_rpc_applicationSentListing:"){let p=i.WIRApplicationIdentifierKey,B=i.WIRListingKey??{},M=new Map;for(let[G,m]of Object.entries(B))M.set(G,{pageId:Number(m.WIRPageIdentifierKey??0),title:m.WIRTitleKey??"",url:m.WIRURLKey??"",type:m.WIRTypeKey??"",connectionId:typeof m.WIRConnectionIdentifierKey==="string"?m.WIRConnectionIdentifierKey:null});t.set(`${R.id}:${p}`,M)}}),R.wi.send("_rpc_reportIdentifier:",{}),R.wi.send("_rpc_getConnectedApplications:",{});let A=setInterval(()=>{for(let R of _){let o=b.get(R)??[];for(let s of o){if(s.isProxy)continue;R.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:s.appId})}}},kc),a=new Map;function r(){let R=[];for(let o of _){let s=b.get(o)??[];for(let i of s){if(i.isProxy)continue;let p=t.get(`${o.id}:${i.appId}`);if(!p)continue;for(let B of p.values()){let M=!!B.connectionId&&B.connectionId!==o.wi.connection;R.push({targetId:`${o.id}:${i.appId}:${B.pageId}`,source:o,appId:i.appId,appName:i.name,bundleId:i.bundleId,pageId:B.pageId,title:B.title,url:B.url,type:B.type,inUseByOtherInspector:M})}}}return R}let L=crypto.randomUUID(),c=Ib({brand:"",version:(R)=>({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://${R}/devtools/browser/${L}`}),listTargets:(R)=>r().map((o)=>nb({reqHost:R,id:o.targetId,description:`${o.source.label}${o.bundleId?` (${o.bundleId})`:""}`,title:o.title||o.appName,url:/^https?:/i.test(o.url)?o.url:"about:blank",type:eb(o.type)}))}),u=new sb.default({noServer:!0}),n=`/devtools/browser/${L}`;c.on("upgrade",(R,o,s)=>{let i=new URL(R.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${i.pathname}`),i.pathname===n){u.handleUpgrade(R,o,s,(B)=>{Sc(B,{listEntries:()=>r().map((M)=>({targetId:M.targetId,type:eb(M.type),title:M.title||M.appName,url:M.url})),createPageSession:(M,G)=>{let m=r().find((q)=>q.targetId===M);if(!m)return null;return h(m,G)}})});return}if(!i.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${i.pathname}`),o.destroy();return}let p=decodeURIComponent(i.pathname.slice(15));u.handleUpgrade(R,o,s,(B)=>{E(B,p)})});function h(R,o){let s=crypto.randomUUID(),p=new z$({readyState:1,send:(G)=>o(G)},R.source.wi,R.appId,R.pageId,s);D_(p),a.set(s,p);let B=!!process.env.INSPECT_WEBKIT_DEBUG,M=R.source.wi.subscribe((G)=>{if(G.__selector!=="_rpc_applicationSentData:")return;let m=G.__argument;if(!m)return;if(m.WIRDestinationKey&&m.WIRDestinationKey!==s)return;if(m.WIRApplicationIdentifierKey!==R.appId)return;if(m.WIRPageIdentifierKey!==void 0&&Number(m.WIRPageIdentifierKey)!==R.pageId)return;let q=m.WIRMessageDataKey??m.WIRSocketDataKey;if(!q)return;let F=typeof q==="string"?q:new TextDecoder().decode(q);if(B)console.error(`[cdp] target>> ${F.slice(0,240)}`);p.onMessageFromTarget(F)});return R.source.wi.forwardSocketSetup(R.appId,R.pageId,s),console.error(`# devtools attached: ${R.source.label} :: ${R.appName} :: ${R.title||R.url}`),{onMessageFromTools(G){if(B)console.error(`[cdp] tools>> ${G.slice(0,300)}`);p.onMessageFromTools(G)},close(){M();try{p.wi.forwardDidClose(p.appId,p.pageId,p.senderKey)}catch{}a.delete(p.senderKey)}}}let I=new Map,l=8000;function N(R){let o=I.get(R);if(o)return o;let s=r().find((q)=>q.targetId===R);if(!s)return null;let i=crypto.randomUUID(),B=new z$({readyState:1,send:()=>{}},s.source.wi,s.appId,s.pageId,i);D_(B),a.set(i,B);let M=s.source.wi.subscribe((q)=>{if(q.__selector!=="_rpc_applicationSentData:")return;let F=q.__argument;if(!F)return;if(F.WIRDestinationKey&&F.WIRDestinationKey!==i)return;if(F.WIRApplicationIdentifierKey!==s.appId)return;if(F.WIRPageIdentifierKey!==void 0&&Number(F.WIRPageIdentifierKey)!==s.pageId)return;let HH=F.WIRMessageDataKey??F.WIRSocketDataKey;if(!HH)return;let g=typeof HH==="string"?HH:new TextDecoder().decode(HH);B.onMessageFromTarget(g)});s.source.wi.forwardSocketSetup(s.appId,s.pageId,i);let G=Promise.race([B.callTarget("DOM.getDocument",{depth:0}).then((q)=>q?.root?.nodeId),new Promise((q,F)=>setTimeout(()=>F(Error("DOM.getDocument timeout")),5000))]),m={cdp:B,rootNodeIdPromise:G,idleTimer:null,close(){if(m.idleTimer)clearTimeout(m.idleTimer);M();try{B.wi.forwardDidClose(B.appId,B.pageId,B.senderKey)}catch{}a.delete(i),I.delete(R)}};return I.set(R,m),G.catch(()=>m.close()),m}function C(R){if(R.idleTimer)clearTimeout(R.idleTimer);R.idleTimer=setTimeout(()=>R.close(),l)}function D(R){if(R){I.get(R)?.close();return}for(let o of I.values())o.close()}async function d(R,o){let s=N(R);if(!s)return;C(s);try{if(o){let i=await s.rootNodeIdPromise;if(!i)return;await s.cdp.callTarget("DOM.highlightNode",{nodeId:i,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 s.cdp.callTarget("DOM.hideHighlight",{})}catch{s.close()}}function E(R,o){let s=r().find((M)=>M.targetId===o);if(!s){console.error(`# ws closed: unknown target ${o} (known: ${r().map((M)=>M.targetId).join(", ")||"none"})`),R.close(1011,`unknown target ${o}`);return}let i=h(s,(M)=>{if(R.readyState===1)R.send(M)}),p=!0;R.on("pong",()=>{p=!0});let B=setInterval(()=>{if(!p){try{R.terminate()}catch{}return}p=!1;try{R.ping()}catch{}},15000);R.on("message",(M,G)=>{let m=G?new TextDecoder().decode(M):M.toString();i.onMessageFromTools(m)}),R.on("close",()=>{clearInterval(B),i.close()})}return await Db(c,e,$),fb({brand:"safari",host:e,port:$}),{stop(){clearInterval(A);for(let R of I.values())R.close();u.close(),c.close();for(let R of _)try{R.wi.close(),R.lockdown?.close()}catch{}},getTargets(){return r()},highlightTarget(R,o){return d(R,o)},releaseHighlight(R){D(R)}}}async function qc(){let[H,$]=await Promise.all([Pc(),yc()]);return[...H,...$]}async function Pc(){let H=[];try{H=await ab()}catch(e){return console.error(`warn: usbmux: ${e.message}`),[]}return(await Promise.all(H.map(xc))).filter((e)=>e!==null)}async function xc(H){try{let $=await rb(H.Properties.SerialNumber),e=await _e.open(H,$);await e.startSession();let _=await e.startService("com.apple.webinspector"),{socket:t,stream:T}=await e.connectService(_),b=new d$(t,T);return await b.reportIdentifier(),{kind:"device",id:`device:${H.Properties.SerialNumber}`,label:`device:${H.Properties.SerialNumber.slice(0,8)}`,wi:b,lockdown:e}}catch($){return console.error(`warn: device ${H.Properties.SerialNumber}: ${$.message}`),null}}async function yc(){let H=[];try{H=await ob()}catch(e){return console.error(`warn: simulator discovery: ${e.message}`),[]}return(await Promise.all(H.map(Wc))).filter((e)=>e!==null)}async function Wc(H){try{let{socket:$,stream:e}=await cb(H.socketPath),_=new d$($,e);return await _.reportIdentifier(),{kind:"simulator",id:`sim:${H.pid}`,label:`sim:${H.pid}`,wi:_}}catch($){return console.error(`warn: simulator ${H.socketPath}: ${$.message}`),null}}function eb(H){switch(H){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class Eb{url;ws;handlers=new Set;openPromise;constructor(H){this.url=H,this.ws=new $b(H),this.ws.binaryType="nodebuffer",this.openPromise=new Promise(($,e)=>{this.ws.once("open",()=>$()),this.ws.once("error",(_)=>e(_))}),this.ws.on("message",($,e)=>{let _=e?new TextDecoder().decode($):$.toString();for(let t of this.handlers)t(_)})}ready(){return this.openPromise}onFrame(H){return this.handlers.add(H),()=>this.handlers.delete(H)}forwardSocketData(H,$,e,_){if(this.ws.readyState!==$b.OPEN)return;this.ws.send(new TextDecoder().decode(_))}forwardDidClose(H,$,e){}close(){try{this.ws.close()}catch{}}}async function Fc(H){let $=H.port??9223,e=H.host??"localhost",{upstreams:_}=H,t=Ib({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(A)=>_.map((a)=>nb({reqHost:A,id:encodeURIComponent(a.url),description:a.label??"bun",title:a.label??a.url,url:a.url,type:"node"}))}),T=new sb.default({noServer:!0});t.on("upgrade",(A,a,r)=>{let L=new URL(A.url??"/","http://placeholder");if(!L.pathname.startsWith("/devtools/page/")){a.destroy();return}let c=decodeURIComponent(L.pathname.slice(15)),u=_.find((n)=>n.url===c);if(!u){a.destroy();return}T.handleUpgrade(A,a,r,(n)=>{b(n,u).catch((h)=>{console.error(`# bun attach failed: ${h.message}`);try{n.close(1011,h.message)}catch{}})})});async function b(A,a){let r=!!process.env.INSPECT_WEBKIT_DEBUG,L=new Eb(a.url);await L.ready();let c=crypto.randomUUID(),u=new z$(A,L,"bun",0,c);D_(u);let n=L.onFrame((h)=>{if(r)console.error(`[bun] target>> ${h.slice(0,240)}`);u.onMessageFromTarget(h)});A.on("message",(h,I)=>{let l=I?new TextDecoder().decode(h):h.toString();if(r)console.error(`[bun] tools>> ${l.slice(0,300)}`);u.onMessageFromTools(l)}),A.on("close",()=>{n(),L.close()}),console.error(`# devtools attached: ${a.label??a.url}`)}return await Db(t,e,$),fb({brand:"bun",host:e,port:$}),{stop(){T.close(),t.close()},getTargets(){return _.slice()}}}async function Cb(){return ab()}async function Zc(){let[H,$]=await Promise.all([Uc(),Jc()]);return[...H.flat(),...$.flat()]}async function Uc(){let H=await Cb();return Promise.all(H.map(wc))}async function Jc(){let H=await ob();return Promise.all(H.map(Xc))}async function wc(H){let $=null;try{return $=await Kc(H),await Nb($.client,{source:"device",udid:H.Properties.SerialNumber,deviceID:H.DeviceID})}catch(e){return console.error(`warn: ${H.Properties.SerialNumber}: ${e.message}`),[]}finally{$?.client.close(),$?.lockdown.close()}}async function Xc(H){let $=null;try{let{socket:e,stream:_}=await cb(H.socketPath);return $=new d$(e,_),await $.reportIdentifier(),await Nb($,{source:"simulator",udid:`sim:${H.pid}`})}catch(e){return console.error(`warn: simulator (${H.socketPath}): ${e.message}`),[]}finally{$?.close()}}async function Kc(H){let $=await rb(H.Properties.SerialNumber),e=await _e.open(H,$);await e.startSession();let _=await e.startService("com.apple.webinspector"),{socket:t,stream:T}=await e.connectService(_),b=new d$(t,T);return await b.reportIdentifier(),{client:b,lockdown:e}}async function Nb(H,$){let e=(await H.listApplications()).filter((T)=>!T.isProxy),_=await Promise.all(e.map((T)=>H.getListing(T.appId))),t=[];for(let T=0;T<e.length;T++){let b=e[T];for(let A of _[T])t.push({...$,appId:b.appId,appName:b.name??b.bundleId??b.appId,bundleId:b.bundleId,pageId:A.pageId,title:A.title,url:A.url,type:A.type})}return t}var Ro,so,jT,uo,ho,no,Io,MH=(H,$,e)=>{var _=H!=null&&typeof H==="object";if(_){var t=$?no??=new WeakMap:Io??=new WeakMap,T=t.get(H);if(T)return T}e=H!=null?Ro(so(H)):{};let b=$||!H||!H.__esModule?jT(e,"default",{value:H,enumerable:!0}):e;for(let A of uo(H))if(!ho.call(b,A))jT(b,A,{get:io.bind(H,A),enumerable:!0});if(_)t.set(H,b);return b},rH=(H,$)=>()=>($||H(($={exports:{}}).exports,$),$.exports),z,GH,He,Do,C$,N$,_b,tb,fo,f_,E_,Eo,Tb,Co,No=`<?xml version="1.0" encoding="UTF-8"?>
58
58
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
59
59
  <plist version="1.0">
60
- `,No=`
60
+ `,lo=`
61
61
  </plist>
62
- `,Mo=1,Go=8,go="/var/run/usbmuxd",YT=62078,sH=(...H)=>{if(process.env.INSPECT_WEBKIT_DEBUG)console.error("[lockdown]",...H)},B9,O9,M9,G9,g9,S9,yo,Rb,Hb,Qo,Yo,zo,Hc,$c,ec,_c,oc=(H,$)=>!!H&&!!$&&H.startLine===$.startLine&&H.endLine===$.endLine&&H.startColumn===$.startColumn&&H.endColumn===$.endColumn,Rc=(H)=>H&&{name:H.name,value:H.value,text:H.text,implicit:H.implicit,parsedOk:H.parsedOk!==!1,important:!!H.priority,disabled:H.status==="disabled",range:H.range},FH=(H)=>H&&{styleSheetId:H.styleId?.styleSheetId,cssText:H.cssText,range:H.range,shorthandEntries:H.shorthandEntries??[],cssProperties:Array.isArray(H.cssProperties)?H.cssProperties.map(Rc):[]},sc,uc=(H)=>H&&{text:H.text,selectors:Array.isArray(H.selectors)?H.selectors.map(($)=>({text:$.text,range:$.range??H.range})):[]},p_=(H)=>Array.isArray(H)?H.map(($)=>({matchingSelectors:$.matchingSelectors,rule:I_($.rule)})):[],hc=(H)=>Array.isArray(H)?H.map(($)=>({pseudoType:$.pseudoId,matches:p_($.matches)})):[],ic=(H)=>Array.isArray(H)?H.map(($)=>({inlineStyle:FH($.inlineStyle),matchedCSSRules:p_($.matchedCSSRules)})):[],Ic,fc=`
62
+ `,Go=1,go=8,So="/var/run/usbmuxd",zT=62078,sH=(...H)=>{if(process.env.INSPECT_WEBKIT_DEBUG)console.error("[lockdown]",...H)},G9,g9,S9,k9,m9,q9,Wo,sb,$b,Yo,zo,Hc,$c,ec,_c,tc,cc=(H,$)=>!!H&&!!$&&H.startLine===$.startLine&&H.endLine===$.endLine&&H.startColumn===$.startColumn&&H.endColumn===$.endColumn,sc=(H)=>H&&{name:H.name,value:H.value,text:H.text,implicit:H.implicit,parsedOk:H.parsedOk!==!1,important:!!H.priority,disabled:H.status==="disabled",range:H.range},FH=(H)=>H&&{styleSheetId:H.styleId?.styleSheetId,cssText:H.cssText,range:H.range,shorthandEntries:H.shorthandEntries??[],cssProperties:Array.isArray(H.cssProperties)?H.cssProperties.map(sc):[]},uc,hc=(H)=>H&&{text:H.text,selectors:Array.isArray(H.selectors)?H.selectors.map(($)=>({text:$.text,range:$.range??H.range})):[]},p_=(H)=>Array.isArray(H)?H.map(($)=>({matchingSelectors:$.matchingSelectors,rule:I_($.rule)})):[],ic=(H)=>Array.isArray(H)?H.map(($)=>({pseudoType:$.pseudoId,matches:p_($.matches)})):[],nc=(H)=>Array.isArray(H)?H.map(($)=>({inlineStyle:FH($.inlineStyle),matchedCSSRules:p_($.matchedCSSRules)})):[],Dc,Ec=`
63
63
  function __sd_simulate(p){
64
64
  var el = document.elementFromPoint(p.x, p.y);
65
65
  if (!el) return false;
@@ -74,55 +74,55 @@ function __sd_simulate(p){
74
74
  });
75
75
  el.dispatchEvent(ev);
76
76
  return true;
77
- }`,Nc=65536,pc,Bc,Mc,Sc=1500;var db=DH(()=>{co=Object.create,Ro=Object.getPrototypeOf,VT=Object.defineProperty,so=Object.getOwnPropertyNames,uo=Object.prototype.hasOwnProperty;z=oo(import.meta.url),GH=rH((H,$)=>{var e=["nodebuffer","arraybuffer","fragments"],_=typeof Blob<"u";if(_)e.push("blob");$.exports={BINARY_TYPES:e,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:_,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}),He=rH((H,$)=>{var{EMPTY_BUFFER:e}=GH(),_=Buffer[Symbol.species];function t(r,L){if(r.length===0)return e;if(r.length===1)return r[0];let c=Buffer.allocUnsafe(L),u=0;for(let n=0;n<r.length;n++){let h=r[n];c.set(h,u),u+=h.length}if(u<L)return new _(c.buffer,c.byteOffset,u);return c}function T(r,L,c,u,n){for(let h=0;h<n;h++)c[u+h]=r[h]^L[h&3]}function b(r,L){for(let c=0;c<r.length;c++)r[c]^=L[c&3]}function A(r){if(r.length===r.buffer.byteLength)return r.buffer;return r.buffer.slice(r.byteOffset,r.byteOffset+r.length)}function a(r){if(a.readOnly=!0,Buffer.isBuffer(r))return r;let L;if(r instanceof ArrayBuffer)L=new _(r);else if(ArrayBuffer.isView(r))L=new _(r.buffer,r.byteOffset,r.byteLength);else L=Buffer.from(r),a.readOnly=!1;return L}if($.exports={concat:t,mask:T,toArrayBuffer:A,toBuffer:a,unmask:b},!process.env.WS_NO_BUFFER_UTIL)try{let r=(()=>{throw Error("Cannot require module bufferutil")})();$.exports.mask=function(L,c,u,n,h){if(h<48)T(L,c,u,n,h);else r.mask(L,c,u,n,h)},$.exports.unmask=function(L,c){if(L.length<32)b(L,c);else r.unmask(L,c)}}catch(r){}}),Io=rH((H,$)=>{var e=Symbol("kDone"),_=Symbol("kRun");class t{constructor(T){this[e]=()=>{this.pending--,this[_]()},this.concurrency=T||1/0,this.jobs=[],this.pending=0}add(T){this.jobs.push(T),this[_]()}[_](){if(this.pending===this.concurrency)return;if(this.jobs.length){let T=this.jobs.shift();this.pending++,T(this[e])}}}$.exports=t}),C$=rH((H,$)=>{var e=z("zlib"),_=He(),t=Io(),{kStatusCode:T}=GH(),b=Buffer[Symbol.species],A=Buffer.from([0,0,255,255]),a=Symbol("permessage-deflate"),r=Symbol("total-length"),L=Symbol("callback"),c=Symbol("buffers"),u=Symbol("error"),n;class h{constructor(C){if(this._options=C||{},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,!n){let D=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;n=new t(D)}}static get extensionName(){return"permessage-deflate"}offer(){let C={};if(this._options.serverNoContextTakeover)C.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)C.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)C.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)C.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)C.client_max_window_bits=!0;return C}accept(C){return C=this.normalizeParams(C),this.params=this._isServer?this.acceptAsServer(C):this.acceptAsClient(C),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let C=this._deflate[L];if(this._deflate.close(),this._deflate=null,C)C(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(C){let D=this._options,d=C.find((E)=>{if(D.serverNoContextTakeover===!1&&E.server_no_context_takeover||E.server_max_window_bits&&(D.serverMaxWindowBits===!1||typeof D.serverMaxWindowBits==="number"&&D.serverMaxWindowBits>E.server_max_window_bits)||typeof D.clientMaxWindowBits==="number"&&!E.client_max_window_bits)return!1;return!0});if(!d)throw Error("None of the extension offers can be accepted");if(D.serverNoContextTakeover)d.server_no_context_takeover=!0;if(D.clientNoContextTakeover)d.client_no_context_takeover=!0;if(typeof D.serverMaxWindowBits==="number")d.server_max_window_bits=D.serverMaxWindowBits;if(typeof D.clientMaxWindowBits==="number")d.client_max_window_bits=D.clientMaxWindowBits;else if(d.client_max_window_bits===!0||D.clientMaxWindowBits===!1)delete d.client_max_window_bits;return d}acceptAsClient(C){let D=C[0];if(this._options.clientNoContextTakeover===!1&&D.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!D.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")D.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&D.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return D}normalizeParams(C){return C.forEach((D)=>{Object.keys(D).forEach((d)=>{let E=D[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 R=+E;if(!Number.isInteger(R)||R<8||R>15)throw TypeError(`Invalid value for parameter "${d}": ${E}`);E=R}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${d}": ${E}`)}else if(d==="server_max_window_bits"){let R=+E;if(!Number.isInteger(R)||R<8||R>15)throw TypeError(`Invalid value for parameter "${d}": ${E}`);E=R}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[d]=E})}),C}decompress(C,D,d){n.add((E)=>{this._decompress(C,D,(R,o)=>{E(),d(R,o)})})}compress(C,D,d){n.add((E)=>{this._compress(C,D,(R,o)=>{E(),d(R,o)})})}_decompress(C,D,d){let E=this._isServer?"client":"server";if(!this._inflate){let R=`${E}_max_window_bits`,o=typeof this.params[R]!=="number"?e.Z_DEFAULT_WINDOWBITS:this.params[R];this._inflate=e.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[a]=this,this._inflate[r]=0,this._inflate[c]=[],this._inflate.on("error",N),this._inflate.on("data",l)}if(this._inflate[L]=d,this._inflate.write(C),D)this._inflate.write(A);this._inflate.flush(()=>{let R=this._inflate[u];if(R){this._inflate.close(),this._inflate=null,d(R);return}let o=_.concat(this._inflate[c],this._inflate[r]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[r]=0,this._inflate[c]=[],D&&this.params[`${E}_no_context_takeover`])this._inflate.reset();d(null,o)})}_compress(C,D,d){let E=this._isServer?"server":"client";if(!this._deflate){let R=`${E}_max_window_bits`,o=typeof this.params[R]!=="number"?e.Z_DEFAULT_WINDOWBITS:this.params[R];this._deflate=e.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[r]=0,this._deflate[c]=[],this._deflate.on("data",I)}this._deflate[L]=d,this._deflate.write(C),this._deflate.flush(e.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let R=_.concat(this._deflate[c],this._deflate[r]);if(D)R=new b(R.buffer,R.byteOffset,R.length-4);if(this._deflate[L]=null,this._deflate[r]=0,this._deflate[c]=[],D&&this.params[`${E}_no_context_takeover`])this._deflate.reset();d(null,R)})}}$.exports=h;function I(C){this[c].push(C),this[r]+=C.length}function l(C){if(this[r]+=C.length,this[a]._maxPayload<1||this[r]<=this[a]._maxPayload){this[c].push(C);return}this[u]=RangeError("Max payload size exceeded"),this[u].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[u][T]=1009,this.removeListener("data",l),this.reset()}function N(C){if(this[a]._inflate=null,this[u]){this[L](this[u]);return}C[T]=1007,this[L](C)}}),N$=rH((H,$)=>{var{isUtf8:e}=z("buffer"),{hasBlob:_}=GH(),t=[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 T(a){return a>=1000&&a<=1014&&a!==1004&&a!==1005&&a!==1006||a>=3000&&a<=4999}function b(a){let r=a.length,L=0;while(L<r)if((a[L]&128)===0)L++;else if((a[L]&224)===192){if(L+1===r||(a[L+1]&192)!==128||(a[L]&254)===192)return!1;L+=2}else if((a[L]&240)===224){if(L+2>=r||(a[L+1]&192)!==128||(a[L+2]&192)!==128||a[L]===224&&(a[L+1]&224)===128||a[L]===237&&(a[L+1]&224)===160)return!1;L+=3}else if((a[L]&248)===240){if(L+3>=r||(a[L+1]&192)!==128||(a[L+2]&192)!==128||(a[L+3]&192)!==128||a[L]===240&&(a[L+1]&240)===128||a[L]===244&&a[L+1]>143||a[L]>244)return!1;L+=4}else return!1;return!0}function A(a){return _&&typeof a==="object"&&typeof a.arrayBuffer==="function"&&typeof a.type==="string"&&typeof a.stream==="function"&&(a[Symbol.toStringTag]==="Blob"||a[Symbol.toStringTag]==="File")}if($.exports={isBlob:A,isValidStatusCode:T,isValidUTF8:b,tokenChars:t},e)$.exports.isValidUTF8=function(a){return a.length<24?b(a):e(a)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let a=(()=>{throw Error("Cannot require module utf-8-validate")})();$.exports.isValidUTF8=function(r){return r.length<32?b(r):a(r)}}catch(a){}}),eb=rH((H,$)=>{var{Writable:e}=z("stream"),_=C$(),{BINARY_TYPES:t,EMPTY_BUFFER:T,kStatusCode:b,kWebSocket:A}=GH(),{concat:a,toArrayBuffer:r,unmask:L}=He(),{isValidStatusCode:c,isValidUTF8:u}=N$(),n=Buffer[Symbol.species],h=0,I=1,l=2,N=3,C=4,D=5,d=6;class E extends e{constructor(R={}){super();this._allowSynchronousEvents=R.allowSynchronousEvents!==void 0?R.allowSynchronousEvents:!0,this._binaryType=R.binaryType||t[0],this._extensions=R.extensions||{},this._isServer=!!R.isServer,this._maxPayload=R.maxPayload|0,this._skipUTF8Validation=!!R.skipUTF8Validation,this[A]=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=h}_write(R,o,s){if(this._opcode===8&&this._state==h)return s();this._bufferedBytes+=R.length,this._buffers.push(R),this.startLoop(s)}consume(R){if(this._bufferedBytes-=R,R===this._buffers[0].length)return this._buffers.shift();if(R<this._buffers[0].length){let s=this._buffers[0];return this._buffers[0]=new n(s.buffer,s.byteOffset+R,s.length-R),new n(s.buffer,s.byteOffset,R)}let o=Buffer.allocUnsafe(R);do{let s=this._buffers[0],i=o.length-R;if(R>=s.length)o.set(this._buffers.shift(),i);else o.set(new Uint8Array(s.buffer,s.byteOffset,R),i),this._buffers[0]=new n(s.buffer,s.byteOffset+R,s.length-R);R-=s.length}while(R>0);return o}startLoop(R){this._loop=!0;do switch(this._state){case h:this.getInfo(R);break;case I:this.getPayloadLength16(R);break;case l:this.getPayloadLength64(R);break;case N:this.getMask();break;case C:this.getData(R);break;case D:case d:this._loop=!1;return}while(this._loop);if(!this._errored)R()}getInfo(R){if(this._bufferedBytes<2){this._loop=!1;return}let o=this.consume(2);if((o[0]&48)!==0){let i=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");R(i);return}let s=(o[0]&64)===64;if(s&&!this._extensions[_.extensionName]){let i=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");R(i);return}if(this._fin=(o[0]&128)===128,this._opcode=o[0]&15,this._payloadLength=o[1]&127,this._opcode===0){if(s){let i=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");R(i);return}if(!this._fragmented){let i=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");R(i);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let i=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");R(i);return}this._compressed=s}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let i=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");R(i);return}if(s){let i=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");R(i);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let i=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");R(i);return}}else{let i=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");R(i);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(o[1]&128)===128,this._isServer){if(!this._masked){let i=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");R(i);return}}else if(this._masked){let i=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");R(i);return}if(this._payloadLength===126)this._state=I;else if(this._payloadLength===127)this._state=l;else this.haveLength(R)}getPayloadLength16(R){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(R)}getPayloadLength64(R){if(this._bufferedBytes<8){this._loop=!1;return}let o=this.consume(8),s=o.readUInt32BE(0);if(s>Math.pow(2,21)-1){let i=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");R(i);return}this._payloadLength=s*Math.pow(2,32)+o.readUInt32BE(4),this.haveLength(R)}haveLength(R){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");R(o);return}}if(this._masked)this._state=N;else this._state=C}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=C}getData(R){let o=T;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(o=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)L(o,this._mask)}if(this._opcode>7){this.controlMessage(o,R);return}if(this._compressed){this._state=D,this.decompress(o,R);return}if(o.length)this._messageLength=this._totalPayloadLength,this._fragments.push(o);this.dataMessage(R)}decompress(R,o){this._extensions[_.extensionName].decompress(R,this._fin,(i,p)=>{if(i)return o(i);if(p.length){if(this._messageLength+=p.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let B=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");o(B);return}this._fragments.push(p)}if(this.dataMessage(o),this._state===h)this.startLoop(o)})}dataMessage(R){if(!this._fin){this._state=h;return}let o=this._messageLength,s=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let i;if(this._binaryType==="nodebuffer")i=a(s,o);else if(this._binaryType==="arraybuffer")i=r(a(s,o));else if(this._binaryType==="blob")i=new Blob(s);else i=s;if(this._allowSynchronousEvents)this.emit("message",i,!0),this._state=h;else this._state=d,setImmediate(()=>{this.emit("message",i,!0),this._state=h,this.startLoop(R)})}else{let i=a(s,o);if(!this._skipUTF8Validation&&!u(i)){let p=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");R(p);return}if(this._state===D||this._allowSynchronousEvents)this.emit("message",i,!1),this._state=h;else this._state=d,setImmediate(()=>{this.emit("message",i,!1),this._state=h,this.startLoop(R)})}}controlMessage(R,o){if(this._opcode===8){if(R.length===0)this._loop=!1,this.emit("conclude",1005,T),this.end();else{let s=R.readUInt16BE(0);if(!c(s)){let p=this.createError(RangeError,`invalid status code ${s}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");o(p);return}let i=new n(R.buffer,R.byteOffset+2,R.length-2);if(!this._skipUTF8Validation&&!u(i)){let p=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");o(p);return}this._loop=!1,this.emit("conclude",s,i),this.end()}this._state=h;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",R),this._state=h;else this._state=d,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",R),this._state=h,this.startLoop(o)})}createError(R,o,s,i,p){this._loop=!1,this._errored=!0;let B=new R(s?`Invalid WebSocket frame: ${o}`:o);return Error.captureStackTrace(B,this.createError),B.code=p,B[b]=i,B}}$.exports=E}),_b=rH((H,$)=>{var{Duplex:e}=z("stream"),{randomFillSync:_}=z("crypto"),t=C$(),{EMPTY_BUFFER:T,kWebSocket:b,NOOP:A}=GH(),{isBlob:a,isValidStatusCode:r}=N$(),{mask:L,toBuffer:c}=He(),u=Symbol("kByteLength"),n=Buffer.alloc(4),h=8192,I,l=h,N=0,C=1,D=2;class d{constructor(o,s,i){if(this._extensions=s||{},i)this._generateMask=i,this._maskBuffer=Buffer.alloc(4);this._socket=o,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=N,this.onerror=A,this[b]=void 0}static frame(o,s){let i,p=!1,B=2,M=!1;if(s.mask){if(i=s.maskBuffer||n,s.generateMask)s.generateMask(i);else{if(l===h){if(I===void 0)I=Buffer.alloc(h);_(I,0,h),l=0}i[0]=I[l++],i[1]=I[l++],i[2]=I[l++],i[3]=I[l++]}M=(i[0]|i[1]|i[2]|i[3])===0,B=6}let G;if(typeof o==="string")if((!s.mask||M)&&s[u]!==void 0)G=s[u];else o=Buffer.from(o),G=o.length;else G=o.length,p=s.mask&&s.readOnly&&!M;let m=G;if(G>=65536)B+=8,m=127;else if(G>125)B+=2,m=126;let q=Buffer.allocUnsafe(p?G+B:B);if(q[0]=s.fin?s.opcode|128:s.opcode,s.rsv1)q[0]|=64;if(q[1]=m,m===126)q.writeUInt16BE(G,2);else if(m===127)q[2]=q[3]=0,q.writeUIntBE(G,4,6);if(!s.mask)return[q,o];if(q[1]|=128,q[B-4]=i[0],q[B-3]=i[1],q[B-2]=i[2],q[B-1]=i[3],M)return[q,o];if(p)return L(o,i,q,B,G),[q];return L(o,i,o,0,G),[q,o]}close(o,s,i,p){let B;if(o===void 0)B=T;else if(typeof o!=="number"||!r(o))throw TypeError("First argument must be a valid error code number");else if(s===void 0||!s.length)B=Buffer.allocUnsafe(2),B.writeUInt16BE(o,0);else{let G=Buffer.byteLength(s);if(G>123)throw RangeError("The message must not be greater than 123 bytes");if(B=Buffer.allocUnsafe(2+G),B.writeUInt16BE(o,0),typeof s==="string")B.write(s,2);else B.set(s,2)}let M={[u]:B.length,fin:!0,generateMask:this._generateMask,mask:i,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==N)this.enqueue([this.dispatch,B,!1,M,p]);else this.sendFrame(d.frame(B,M),p)}ping(o,s,i){let p,B;if(typeof o==="string")p=Buffer.byteLength(o),B=!1;else if(a(o))p=o.size,B=!1;else o=c(o),p=o.length,B=c.readOnly;if(p>125)throw RangeError("The data size must not be greater than 125 bytes");let M={[u]:p,fin:!0,generateMask:this._generateMask,mask:s,maskBuffer:this._maskBuffer,opcode:9,readOnly:B,rsv1:!1};if(a(o))if(this._state!==N)this.enqueue([this.getBlobData,o,!1,M,i]);else this.getBlobData(o,!1,M,i);else if(this._state!==N)this.enqueue([this.dispatch,o,!1,M,i]);else this.sendFrame(d.frame(o,M),i)}pong(o,s,i){let p,B;if(typeof o==="string")p=Buffer.byteLength(o),B=!1;else if(a(o))p=o.size,B=!1;else o=c(o),p=o.length,B=c.readOnly;if(p>125)throw RangeError("The data size must not be greater than 125 bytes");let M={[u]:p,fin:!0,generateMask:this._generateMask,mask:s,maskBuffer:this._maskBuffer,opcode:10,readOnly:B,rsv1:!1};if(a(o))if(this._state!==N)this.enqueue([this.getBlobData,o,!1,M,i]);else this.getBlobData(o,!1,M,i);else if(this._state!==N)this.enqueue([this.dispatch,o,!1,M,i]);else this.sendFrame(d.frame(o,M),i)}send(o,s,i){let p=this._extensions[t.extensionName],B=s.binary?2:1,M=s.compress,G,m;if(typeof o==="string")G=Buffer.byteLength(o),m=!1;else if(a(o))G=o.size,m=!1;else o=c(o),G=o.length,m=c.readOnly;if(this._firstFragment){if(this._firstFragment=!1,M&&p&&p.params[p._isServer?"server_no_context_takeover":"client_no_context_takeover"])M=G>=p._threshold;this._compress=M}else M=!1,B=0;if(s.fin)this._firstFragment=!0;let q={[u]:G,fin:s.fin,generateMask:this._generateMask,mask:s.mask,maskBuffer:this._maskBuffer,opcode:B,readOnly:m,rsv1:M};if(a(o))if(this._state!==N)this.enqueue([this.getBlobData,o,this._compress,q,i]);else this.getBlobData(o,this._compress,q,i);else if(this._state!==N)this.enqueue([this.dispatch,o,this._compress,q,i]);else this.dispatch(o,this._compress,q,i)}getBlobData(o,s,i,p){this._bufferedBytes+=i[u],this._state=D,o.arrayBuffer().then((B)=>{if(this._socket.destroyed){let G=Error("The socket was closed while the blob was being read");process.nextTick(E,this,G,p);return}this._bufferedBytes-=i[u];let M=c(B);if(!s)this._state=N,this.sendFrame(d.frame(M,i),p),this.dequeue();else this.dispatch(M,s,i,p)}).catch((B)=>{process.nextTick(R,this,B,p)})}dispatch(o,s,i,p){if(!s){this.sendFrame(d.frame(o,i),p);return}let B=this._extensions[t.extensionName];this._bufferedBytes+=i[u],this._state=C,B.compress(o,i.fin,(M,G)=>{if(this._socket.destroyed){let m=Error("The socket was closed while data was being compressed");E(this,m,p);return}this._bufferedBytes-=i[u],this._state=N,i.readOnly=!1,this.sendFrame(d.frame(G,i),p),this.dequeue()})}dequeue(){while(this._state===N&&this._queue.length){let o=this._queue.shift();this._bufferedBytes-=o[3][u],Reflect.apply(o[0],this,o.slice(1))}}enqueue(o){this._bufferedBytes+=o[3][u],this._queue.push(o)}sendFrame(o,s){if(o.length===2)this._socket.cork(),this._socket.write(o[0]),this._socket.write(o[1],s),this._socket.uncork();else this._socket.write(o[0],s)}}$.exports=d;function E(o,s,i){if(typeof i==="function")i(s);for(let p=0;p<o._queue.length;p++){let B=o._queue[p],M=B[B.length-1];if(typeof M==="function")M(s)}}function R(o,s,i){E(o,s,i),o.onerror(s)}}),Do=rH((H,$)=>{var{kForOnEventAttribute:e,kListener:_}=GH(),t=Symbol("kCode"),T=Symbol("kData"),b=Symbol("kError"),A=Symbol("kMessage"),a=Symbol("kReason"),r=Symbol("kTarget"),L=Symbol("kType"),c=Symbol("kWasClean");class u{constructor(C){this[r]=null,this[L]=C}get target(){return this[r]}get type(){return this[L]}}Object.defineProperty(u.prototype,"target",{enumerable:!0}),Object.defineProperty(u.prototype,"type",{enumerable:!0});class n extends u{constructor(C,D={}){super(C);this[t]=D.code===void 0?0:D.code,this[a]=D.reason===void 0?"":D.reason,this[c]=D.wasClean===void 0?!1:D.wasClean}get code(){return this[t]}get reason(){return this[a]}get wasClean(){return this[c]}}Object.defineProperty(n.prototype,"code",{enumerable:!0}),Object.defineProperty(n.prototype,"reason",{enumerable:!0}),Object.defineProperty(n.prototype,"wasClean",{enumerable:!0});class h extends u{constructor(C,D={}){super(C);this[b]=D.error===void 0?null:D.error,this[A]=D.message===void 0?"":D.message}get error(){return this[b]}get message(){return this[A]}}Object.defineProperty(h.prototype,"error",{enumerable:!0}),Object.defineProperty(h.prototype,"message",{enumerable:!0});class I extends u{constructor(C,D={}){super(C);this[T]=D.data===void 0?null:D.data}get data(){return this[T]}}Object.defineProperty(I.prototype,"data",{enumerable:!0});var l={addEventListener(C,D,d={}){for(let R of this.listeners(C))if(!d[e]&&R[_]===D&&!R[e])return;let E;if(C==="message")E=function(o,s){let i=new I("message",{data:s?o:o.toString()});i[r]=this,N(D,this,i)};else if(C==="close")E=function(o,s){let i=new n("close",{code:o,reason:s.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});i[r]=this,N(D,this,i)};else if(C==="error")E=function(o){let s=new h("error",{error:o,message:o.message});s[r]=this,N(D,this,s)};else if(C==="open")E=function(){let o=new u("open");o[r]=this,N(D,this,o)};else return;if(E[e]=!!d[e],E[_]=D,d.once)this.once(C,E);else this.on(C,E)},removeEventListener(C,D){for(let d of this.listeners(C))if(d[_]===D&&!d[e]){this.removeListener(C,d);break}}};$.exports={CloseEvent:n,ErrorEvent:h,Event:u,EventTarget:l,MessageEvent:I};function N(C,D,d){if(typeof C==="object"&&C.handleEvent)C.handleEvent.call(C,d);else C.call(D,d)}}),f_=rH((H,$)=>{var{tokenChars:e}=N$();function _(b,A,a){if(b[A]===void 0)b[A]=[a];else b[A].push(a)}function t(b){let A=Object.create(null),a=Object.create(null),r=!1,L=!1,c=!1,u,n,h=-1,I=-1,l=-1,N=0;for(;N<b.length;N++)if(I=b.charCodeAt(N),u===void 0)if(l===-1&&e[I]===1){if(h===-1)h=N}else if(N!==0&&(I===32||I===9)){if(l===-1&&h!==-1)l=N}else if(I===59||I===44){if(h===-1)throw SyntaxError(`Unexpected character at index ${N}`);if(l===-1)l=N;let D=b.slice(h,l);if(I===44)_(A,D,a),a=Object.create(null);else u=D;h=l=-1}else throw SyntaxError(`Unexpected character at index ${N}`);else if(n===void 0)if(l===-1&&e[I]===1){if(h===-1)h=N}else if(I===32||I===9){if(l===-1&&h!==-1)l=N}else if(I===59||I===44){if(h===-1)throw SyntaxError(`Unexpected character at index ${N}`);if(l===-1)l=N;if(_(a,b.slice(h,l),!0),I===44)_(A,u,a),a=Object.create(null),u=void 0;h=l=-1}else if(I===61&&h!==-1&&l===-1)n=b.slice(h,N),h=l=-1;else throw SyntaxError(`Unexpected character at index ${N}`);else if(L){if(e[I]!==1)throw SyntaxError(`Unexpected character at index ${N}`);if(h===-1)h=N;else if(!r)r=!0;L=!1}else if(c)if(e[I]===1){if(h===-1)h=N}else if(I===34&&h!==-1)c=!1,l=N;else if(I===92)L=!0;else throw SyntaxError(`Unexpected character at index ${N}`);else if(I===34&&b.charCodeAt(N-1)===61)c=!0;else if(l===-1&&e[I]===1){if(h===-1)h=N}else if(h!==-1&&(I===32||I===9)){if(l===-1)l=N}else if(I===59||I===44){if(h===-1)throw SyntaxError(`Unexpected character at index ${N}`);if(l===-1)l=N;let D=b.slice(h,l);if(r)D=D.replace(/\\/g,""),r=!1;if(_(a,n,D),I===44)_(A,u,a),a=Object.create(null),u=void 0;n=void 0,h=l=-1}else throw SyntaxError(`Unexpected character at index ${N}`);if(h===-1||c||I===32||I===9)throw SyntaxError("Unexpected end of input");if(l===-1)l=N;let C=b.slice(h,l);if(u===void 0)_(A,C,a);else{if(n===void 0)_(a,C,!0);else if(r)_(a,n,C.replace(/\\/g,""));else _(a,n,C);_(A,u,a)}return A}function T(b){return Object.keys(b).map((A)=>{let a=b[A];if(!Array.isArray(a))a=[a];return a.map((r)=>{return[A].concat(Object.keys(r).map((L)=>{let c=r[L];if(!Array.isArray(c))c=[c];return c.map((u)=>u===!0?L:`${L}=${u}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}$.exports={format:T,parse:t}}),E_=rH((H,$)=>{var e=z("events"),_=z("https"),t=z("http"),T=z("net"),b=z("tls"),{randomBytes:A,createHash:a}=z("crypto"),{Duplex:r,Readable:L}=z("stream"),{URL:c}=z("url"),u=C$(),n=eb(),h=_b(),{isBlob:I}=N$(),{BINARY_TYPES:l,CLOSE_TIMEOUT:N,EMPTY_BUFFER:C,GUID:D,kForOnEventAttribute:d,kListener:E,kStatusCode:R,kWebSocket:o,NOOP:s}=GH(),{EventTarget:{addEventListener:i,removeEventListener:p}}=Do(),{format:B,parse:M}=f_(),{toBuffer:G}=He(),m=Symbol("kAborted"),q=[8,13],F=["CONNECTING","OPEN","CLOSING","CLOSED"],HH=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class g extends e{constructor(f,O,x){super();if(this._binaryType=l[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=C,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=g.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,f!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,O===void 0)O=[];else if(!Array.isArray(O))if(typeof O==="object"&&O!==null)x=O,O=[];else O=[O];IH(this,f,O,x)}else this._autoPong=x.autoPong,this._closeTimeout=x.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(f){if(!l.includes(f))return;if(this._binaryType=f,this._receiver)this._receiver._binaryType=f}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(f,O,x){let U=new n({allowSynchronousEvents:x.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:x.maxPayload,skipUTF8Validation:x.skipUTF8Validation}),S=new h(f,this._extensions,x.generateMask);if(this._receiver=U,this._sender=S,this._socket=f,U[o]=this,S[o]=this,f[o]=this,U.on("conclude",Vb),U.on("drain",jb),U.on("error",Qb),U.on("message",Yb),U.on("ping",zb),U.on("pong",HL),S.onerror=$L,f.setTimeout)f.setTimeout(0);if(f.setNoDelay)f.setNoDelay();if(O.length>0)f.unshift(O);f.on("close",z_),f.on("data",M$),f.on("end",Ht),f.on("error",$t),this._readyState=g.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=g.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[u.extensionName])this._extensions[u.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=g.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(f,O){if(this.readyState===g.CLOSED)return;if(this.readyState===g.CONNECTING){LH(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===g.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=g.CLOSING,this._sender.close(f,O,!this._isServer,(x)=>{if(x)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),Y_(this)}pause(){if(this.readyState===g.CONNECTING||this.readyState===g.CLOSED)return;this._paused=!0,this._socket.pause()}ping(f,O,x){if(this.readyState===g.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof f==="function")x=f,f=O=void 0;else if(typeof O==="function")x=O,O=void 0;if(typeof f==="number")f=f.toString();if(this.readyState!==g.OPEN){ue(this,f,x);return}if(O===void 0)O=!this._isServer;this._sender.ping(f||C,O,x)}pong(f,O,x){if(this.readyState===g.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof f==="function")x=f,f=O=void 0;else if(typeof O==="function")x=O,O=void 0;if(typeof f==="number")f=f.toString();if(this.readyState!==g.OPEN){ue(this,f,x);return}if(O===void 0)O=!this._isServer;this._sender.pong(f||C,O,x)}resume(){if(this.readyState===g.CONNECTING||this.readyState===g.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(f,O,x){if(this.readyState===g.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof O==="function")x=O,O={};if(typeof f==="number")f=f.toString();if(this.readyState!==g.OPEN){ue(this,f,x);return}let U={binary:typeof f!=="string",mask:!this._isServer,compress:!0,fin:!0,...O};if(!this._extensions[u.extensionName])U.compress=!1;this._sender.send(f||C,U,x)}terminate(){if(this.readyState===g.CLOSED)return;if(this.readyState===g.CONNECTING){LH(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=g.CLOSING,this._socket.destroy()}}Object.defineProperty(g,"CONNECTING",{enumerable:!0,value:F.indexOf("CONNECTING")}),Object.defineProperty(g.prototype,"CONNECTING",{enumerable:!0,value:F.indexOf("CONNECTING")}),Object.defineProperty(g,"OPEN",{enumerable:!0,value:F.indexOf("OPEN")}),Object.defineProperty(g.prototype,"OPEN",{enumerable:!0,value:F.indexOf("OPEN")}),Object.defineProperty(g,"CLOSING",{enumerable:!0,value:F.indexOf("CLOSING")}),Object.defineProperty(g.prototype,"CLOSING",{enumerable:!0,value:F.indexOf("CLOSING")}),Object.defineProperty(g,"CLOSED",{enumerable:!0,value:F.indexOf("CLOSED")}),Object.defineProperty(g.prototype,"CLOSED",{enumerable:!0,value:F.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((f)=>{Object.defineProperty(g.prototype,f,{enumerable:!0})}),["open","error","close","message"].forEach((f)=>{Object.defineProperty(g.prototype,`on${f}`,{enumerable:!0,get(){for(let O of this.listeners(f))if(O[d])return O[E];return null},set(O){for(let x of this.listeners(f))if(x[d]){this.removeListener(f,x);break}if(typeof O!=="function")return;this.addEventListener(f,O,{[d]:!0})}})}),g.prototype.addEventListener=i,g.prototype.removeEventListener=p,$.exports=g;function IH(f,O,x,U){let S={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:N,protocolVersion:q[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...U,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(f._autoPong=S.autoPong,f._closeTimeout=S.closeTimeout,!q.includes(S.protocolVersion))throw RangeError(`Unsupported protocol version: ${S.protocolVersion} (supported versions: ${q.join(", ")})`);let w;if(O instanceof c)w=O;else try{w=new c(O)}catch{throw SyntaxError(`Invalid URL: ${O}`)}if(w.protocol==="http:")w.protocol="ws:";else if(w.protocol==="https:")w.protocol="wss:";f._url=w.href;let KH=w.protocol==="wss:",vH=w.protocol==="ws+unix:",L$;if(w.protocol!=="ws:"&&!KH&&!vH)L$=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(vH&&!w.pathname)L$="The URL's pathname is empty";else if(w.hash)L$="The URL contains a fragment identifier";if(L$){let J=SyntaxError(L$);if(f._redirects===0)throw J;else{kH(f,J);return}}let et=KH?443:80,_t=A(16).toString("base64"),tt=KH?_.request:t.request,a$=new Set,r$;if(S.createConnection=S.createConnection||(KH?se:Re),S.defaultPort=S.defaultPort||et,S.port=w.port||et,S.host=w.hostname.startsWith("[")?w.hostname.slice(1,-1):w.hostname,S.headers={...S.headers,"Sec-WebSocket-Version":S.protocolVersion,"Sec-WebSocket-Key":_t,Connection:"Upgrade",Upgrade:"websocket"},S.path=w.pathname+w.search,S.timeout=S.handshakeTimeout,S.perMessageDeflate)r$=new u({...S.perMessageDeflate,isServer:!1,maxPayload:S.maxPayload}),S.headers["Sec-WebSocket-Extensions"]=B({[u.extensionName]:r$.offer()});if(x.length){for(let J of x){if(typeof J!=="string"||!HH.test(J)||a$.has(J))throw SyntaxError("An invalid or duplicated subprotocol was specified");a$.add(J)}S.headers["Sec-WebSocket-Protocol"]=x.join(",")}if(S.origin)if(S.protocolVersion<13)S.headers["Sec-WebSocket-Origin"]=S.origin;else S.headers.Origin=S.origin;if(w.username||w.password)S.auth=`${w.username}:${w.password}`;if(vH){let J=S.path.split(":");S.socketPath=J[0],S.path=J[1]}let j;if(S.followRedirects){if(f._redirects===0){f._originalIpc=vH,f._originalSecure=KH,f._originalHostOrSocketPath=vH?S.socketPath:w.host;let J=U&&U.headers;if(U={...U,headers:{}},J)for(let[tH,VH]of Object.entries(J))U.headers[tH.toLowerCase()]=VH}else if(f.listenerCount("redirect")===0){let J=vH?f._originalIpc?S.socketPath===f._originalHostOrSocketPath:!1:f._originalIpc?!1:w.host===f._originalHostOrSocketPath;if(!J||f._originalSecure&&!KH){if(delete S.headers.authorization,delete S.headers.cookie,!J)delete S.headers.host;S.auth=void 0}}if(S.auth&&!U.headers.authorization)U.headers.authorization="Basic "+Buffer.from(S.auth).toString("base64");if(j=f._req=tt(S),f._redirects)f.emit("redirect",f.url,j)}else j=f._req=tt(S);if(S.timeout)j.on("timeout",()=>{LH(f,j,"Opening handshake has timed out")});if(j.on("error",(J)=>{if(j===null||j[m])return;j=f._req=null,kH(f,J)}),j.on("response",(J)=>{let tH=J.headers.location,VH=J.statusCode;if(tH&&S.followRedirects&&VH>=300&&VH<400){if(++f._redirects>S.maxRedirects){LH(f,j,"Maximum redirects exceeded");return}j.abort();let A$;try{A$=new c(tH,O)}catch(Tt){let jH=SyntaxError(`Invalid URL: ${tH}`);kH(f,jH);return}IH(f,A$,x,U)}else if(!f.emit("unexpected-response",j,J))LH(f,j,`Unexpected server response: ${J.statusCode}`)}),j.on("upgrade",(J,tH,VH)=>{if(f.emit("upgrade",J),f.readyState!==g.CONNECTING)return;j=f._req=null;let A$=J.headers.upgrade;if(A$===void 0||A$.toLowerCase()!=="websocket"){LH(f,tH,"Invalid Upgrade header");return}let Tt=a("sha1").update(_t+D).digest("base64");if(J.headers["sec-websocket-accept"]!==Tt){LH(f,tH,"Invalid Sec-WebSocket-Accept header");return}let jH=J.headers["sec-websocket-protocol"],o$;if(jH!==void 0){if(!a$.size)o$="Server sent a subprotocol but none was requested";else if(!a$.has(jH))o$="Server sent an invalid subprotocol"}else if(a$.size)o$="Server sent no subprotocol";if(o$){LH(f,tH,o$);return}if(jH)f._protocol=jH;let bt=J.headers["sec-websocket-extensions"];if(bt!==void 0){if(!r$){LH(f,tH,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let he;try{he=M(bt)}catch(ie){LH(f,tH,"Invalid Sec-WebSocket-Extensions header");return}let Lt=Object.keys(he);if(Lt.length!==1||Lt[0]!==u.extensionName){LH(f,tH,"Server indicated an extension that was not requested");return}try{r$.accept(he[u.extensionName])}catch(ie){LH(f,tH,"Invalid Sec-WebSocket-Extensions header");return}f._extensions[u.extensionName]=r$}f.setSocket(tH,VH,{allowSynchronousEvents:S.allowSynchronousEvents,generateMask:S.generateMask,maxPayload:S.maxPayload,skipUTF8Validation:S.skipUTF8Validation})}),S.finishRequest)S.finishRequest(j,f);else j.end()}function kH(f,O){f._readyState=g.CLOSING,f._errorEmitted=!0,f.emit("error",O),f.emitClose()}function Re(f){return f.path=f.socketPath,T.connect(f)}function se(f){if(f.path=void 0,!f.servername&&f.servername!=="")f.servername=T.isIP(f.host)?"":f.host;return b.connect(f)}function LH(f,O,x){f._readyState=g.CLOSING;let U=Error(x);if(Error.captureStackTrace(U,LH),O.setHeader){if(O[m]=!0,O.abort(),O.socket&&!O.socket.destroyed)O.socket.destroy();process.nextTick(kH,f,U)}else O.destroy(U),O.once("error",f.emit.bind(f,"error")),O.once("close",f.emitClose.bind(f))}function ue(f,O,x){if(O){let U=I(O)?O.size:G(O).length;if(f._socket)f._sender._bufferedBytes+=U;else f._bufferedAmount+=U}if(x){let U=Error(`WebSocket is not open: readyState ${f.readyState} (${F[f.readyState]})`);process.nextTick(x,U)}}function Vb(f,O){let x=this[o];if(x._closeFrameReceived=!0,x._closeMessage=O,x._closeCode=f,x._socket[o]===void 0)return;if(x._socket.removeListener("data",M$),process.nextTick(Q_,x._socket),f===1005)x.close();else x.close(f,O)}function jb(){let f=this[o];if(!f.isPaused)f._socket.resume()}function Qb(f){let O=this[o];if(O._socket[o]!==void 0)O._socket.removeListener("data",M$),process.nextTick(Q_,O._socket),O.close(f[R]);if(!O._errorEmitted)O._errorEmitted=!0,O.emit("error",f)}function j_(){this[o].emitClose()}function Yb(f,O){this[o].emit("message",f,O)}function zb(f){let O=this[o];if(O._autoPong)O.pong(f,!this._isServer,s);O.emit("ping",f)}function HL(f){this[o].emit("pong",f)}function Q_(f){f.resume()}function $L(f){let O=this[o];if(O.readyState===g.CLOSED)return;if(O.readyState===g.OPEN)O._readyState=g.CLOSING,Y_(O);if(this._socket.end(),!O._errorEmitted)O._errorEmitted=!0,O.emit("error",f)}function Y_(f){f._closeTimer=setTimeout(f._socket.destroy.bind(f._socket),f._closeTimeout)}function z_(){let f=this[o];if(this.removeListener("close",z_),this.removeListener("data",M$),this.removeListener("end",Ht),f._readyState=g.CLOSING,!this._readableState.endEmitted&&!f._closeFrameReceived&&!f._receiver._writableState.errorEmitted&&this._readableState.length!==0){let O=this.read(this._readableState.length);f._receiver.write(O)}if(f._receiver.end(),this[o]=void 0,clearTimeout(f._closeTimer),f._receiver._writableState.finished||f._receiver._writableState.errorEmitted)f.emitClose();else f._receiver.on("error",j_),f._receiver.on("finish",j_)}function M$(f){if(!this[o]._receiver.write(f))this.pause()}function Ht(){let f=this[o];f._readyState=g.CLOSING,f._receiver.end(),this.end()}function $t(){let f=this[o];if(this.removeListener("error",$t),this.on("error",s),f)f._readyState=g.CLOSING,this.destroy()}}),fo=rH((H,$)=>{var e=E_(),{Duplex:_}=z("stream");function t(a){a.emit("close")}function T(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function b(a){if(this.removeListener("error",b),this.destroy(),this.listenerCount("error")===0)this.emit("error",a)}function A(a,r){let L=!0,c=new _({...r,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return a.on("message",function(n,h){let I=!h&&c._readableState.objectMode?n.toString():n;if(!c.push(I))a.pause()}),a.once("error",function(n){if(c.destroyed)return;L=!1,c.destroy(n)}),a.once("close",function(){if(c.destroyed)return;c.push(null)}),c._destroy=function(u,n){if(a.readyState===a.CLOSED){n(u),process.nextTick(t,c);return}let h=!1;if(a.once("error",function(l){h=!0,n(l)}),a.once("close",function(){if(!h)n(u);process.nextTick(t,c)}),L)a.terminate()},c._final=function(u){if(a.readyState===a.CONNECTING){a.once("open",function(){c._final(u)});return}if(a._socket===null)return;if(a._socket._writableState.finished){if(u(),c._readableState.endEmitted)c.destroy()}else a._socket.once("finish",function(){u()}),a.close()},c._read=function(){if(a.isPaused)a.resume()},c._write=function(u,n,h){if(a.readyState===a.CONNECTING){a.once("open",function(){c._write(u,n,h)});return}a.send(u,h)},c.on("end",T),c.on("error",b),c}$.exports=A}),tb=rH((H,$)=>{var{tokenChars:e}=N$();function _(t){let T=new Set,b=-1,A=-1,a=0;for(a;a<t.length;a++){let L=t.charCodeAt(a);if(A===-1&&e[L]===1){if(b===-1)b=a}else if(a!==0&&(L===32||L===9)){if(A===-1&&b!==-1)A=a}else if(L===44){if(b===-1)throw SyntaxError(`Unexpected character at index ${a}`);if(A===-1)A=a;let c=t.slice(b,A);if(T.has(c))throw SyntaxError(`The "${c}" subprotocol is duplicated`);T.add(c),b=A=-1}else throw SyntaxError(`Unexpected character at index ${a}`)}if(b===-1||A!==-1)throw SyntaxError("Unexpected end of input");let r=t.slice(b,a);if(T.has(r))throw SyntaxError(`The "${r}" subprotocol is duplicated`);return T.add(r),T}$.exports={parse:_}}),Eo=rH((H,$)=>{var e=z("events"),_=z("http"),{Duplex:t}=z("stream"),{createHash:T}=z("crypto"),b=f_(),A=C$(),a=tb(),r=E_(),{CLOSE_TIMEOUT:L,GUID:c,kWebSocket:u}=GH(),n=/^[+/0-9A-Za-z]{22}==$/,h=0,I=1,l=2;class N extends e{constructor(o,s){super();if(o={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:L,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:r,...o},o.port==null&&!o.server&&!o.noServer||o.port!=null&&(o.server||o.noServer)||o.server&&o.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(o.port!=null)this._server=_.createServer((i,p)=>{let B=_.STATUS_CODES[426];p.writeHead(426,{"Content-Length":B.length,"Content-Type":"text/plain"}),p.end(B)}),this._server.listen(o.port,o.host,o.backlog,s);else if(o.server)this._server=o.server;if(this._server){let i=this.emit.bind(this,"connection");this._removeListeners=C(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(p,B,M)=>{this.handleUpgrade(p,B,M,i)}})}if(o.perMessageDeflate===!0)o.perMessageDeflate={};if(o.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=o,this._state=h}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(o){if(this._state===l){if(o)this.once("close",()=>{o(Error("The server is not running"))});process.nextTick(D,this);return}if(o)this.once("close",o);if(this._state===I)return;if(this._state=I,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(D,this);else this._shouldEmitClose=!0;else process.nextTick(D,this)}else{let s=this._server;this._removeListeners(),this._removeListeners=this._server=null,s.close(()=>{D(this)})}}shouldHandle(o){if(this.options.path){let s=o.url.indexOf("?");if((s!==-1?o.url.slice(0,s):o.url)!==this.options.path)return!1}return!0}handleUpgrade(o,s,i,p){s.on("error",d);let B=o.headers["sec-websocket-key"],M=o.headers.upgrade,G=+o.headers["sec-websocket-version"];if(o.method!=="GET"){R(this,o,s,405,"Invalid HTTP method");return}if(M===void 0||M.toLowerCase()!=="websocket"){R(this,o,s,400,"Invalid Upgrade header");return}if(B===void 0||!n.test(B)){R(this,o,s,400,"Missing or invalid Sec-WebSocket-Key header");return}if(G!==13&&G!==8){R(this,o,s,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(o)){E(s,400);return}let m=o.headers["sec-websocket-protocol"],q=new Set;if(m!==void 0)try{q=a.parse(m)}catch(g){R(this,o,s,400,"Invalid Sec-WebSocket-Protocol header");return}let F=o.headers["sec-websocket-extensions"],HH={};if(this.options.perMessageDeflate&&F!==void 0){let g=new A({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let IH=b.parse(F);if(IH[A.extensionName])g.accept(IH[A.extensionName]),HH[A.extensionName]=g}catch(IH){R(this,o,s,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let g={origin:o.headers[`${G===8?"sec-websocket-origin":"origin"}`],secure:!!(o.socket.authorized||o.socket.encrypted),req:o};if(this.options.verifyClient.length===2){this.options.verifyClient(g,(IH,kH,Re,se)=>{if(!IH)return E(s,kH||401,Re,se);this.completeUpgrade(HH,B,q,o,s,i,p)});return}if(!this.options.verifyClient(g))return E(s,401)}this.completeUpgrade(HH,B,q,o,s,i,p)}completeUpgrade(o,s,i,p,B,M,G){if(!B.readable||!B.writable)return B.destroy();if(B[u])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>h)return E(B,503);let q=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${T("sha1").update(s+c).digest("base64")}`],F=new this.options.WebSocket(null,void 0,this.options);if(i.size){let HH=this.options.handleProtocols?this.options.handleProtocols(i,p):i.values().next().value;if(HH)q.push(`Sec-WebSocket-Protocol: ${HH}`),F._protocol=HH}if(o[A.extensionName]){let HH=o[A.extensionName].params,g=b.format({[A.extensionName]:[HH]});q.push(`Sec-WebSocket-Extensions: ${g}`),F._extensions=o}if(this.emit("headers",q,p),B.write(q.concat(`\r
77
+ }`,dc=65536,Bc,Oc,Gc,kc=1500;var lb=DH(()=>{Ro=Object.create,so=Object.getPrototypeOf,jT=Object.defineProperty,uo=Object.getOwnPropertyNames,ho=Object.prototype.hasOwnProperty;z=co(import.meta.url),GH=rH((H,$)=>{var e=["nodebuffer","arraybuffer","fragments"],_=typeof Blob<"u";if(_)e.push("blob");$.exports={BINARY_TYPES:e,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:_,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}),He=rH((H,$)=>{var{EMPTY_BUFFER:e}=GH(),_=Buffer[Symbol.species];function t(r,L){if(r.length===0)return e;if(r.length===1)return r[0];let c=Buffer.allocUnsafe(L),u=0;for(let n=0;n<r.length;n++){let h=r[n];c.set(h,u),u+=h.length}if(u<L)return new _(c.buffer,c.byteOffset,u);return c}function T(r,L,c,u,n){for(let h=0;h<n;h++)c[u+h]=r[h]^L[h&3]}function b(r,L){for(let c=0;c<r.length;c++)r[c]^=L[c&3]}function A(r){if(r.length===r.buffer.byteLength)return r.buffer;return r.buffer.slice(r.byteOffset,r.byteOffset+r.length)}function a(r){if(a.readOnly=!0,Buffer.isBuffer(r))return r;let L;if(r instanceof ArrayBuffer)L=new _(r);else if(ArrayBuffer.isView(r))L=new _(r.buffer,r.byteOffset,r.byteLength);else L=Buffer.from(r),a.readOnly=!1;return L}if($.exports={concat:t,mask:T,toArrayBuffer:A,toBuffer:a,unmask:b},!process.env.WS_NO_BUFFER_UTIL)try{let r=(()=>{throw Error("Cannot require module bufferutil")})();$.exports.mask=function(L,c,u,n,h){if(h<48)T(L,c,u,n,h);else r.mask(L,c,u,n,h)},$.exports.unmask=function(L,c){if(L.length<32)b(L,c);else r.unmask(L,c)}}catch(r){}}),Do=rH((H,$)=>{var e=Symbol("kDone"),_=Symbol("kRun");class t{constructor(T){this[e]=()=>{this.pending--,this[_]()},this.concurrency=T||1/0,this.jobs=[],this.pending=0}add(T){this.jobs.push(T),this[_]()}[_](){if(this.pending===this.concurrency)return;if(this.jobs.length){let T=this.jobs.shift();this.pending++,T(this[e])}}}$.exports=t}),C$=rH((H,$)=>{var e=z("zlib"),_=He(),t=Do(),{kStatusCode:T}=GH(),b=Buffer[Symbol.species],A=Buffer.from([0,0,255,255]),a=Symbol("permessage-deflate"),r=Symbol("total-length"),L=Symbol("callback"),c=Symbol("buffers"),u=Symbol("error"),n;class h{constructor(C){if(this._options=C||{},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,!n){let D=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;n=new t(D)}}static get extensionName(){return"permessage-deflate"}offer(){let C={};if(this._options.serverNoContextTakeover)C.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)C.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)C.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)C.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)C.client_max_window_bits=!0;return C}accept(C){return C=this.normalizeParams(C),this.params=this._isServer?this.acceptAsServer(C):this.acceptAsClient(C),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let C=this._deflate[L];if(this._deflate.close(),this._deflate=null,C)C(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(C){let D=this._options,d=C.find((E)=>{if(D.serverNoContextTakeover===!1&&E.server_no_context_takeover||E.server_max_window_bits&&(D.serverMaxWindowBits===!1||typeof D.serverMaxWindowBits==="number"&&D.serverMaxWindowBits>E.server_max_window_bits)||typeof D.clientMaxWindowBits==="number"&&!E.client_max_window_bits)return!1;return!0});if(!d)throw Error("None of the extension offers can be accepted");if(D.serverNoContextTakeover)d.server_no_context_takeover=!0;if(D.clientNoContextTakeover)d.client_no_context_takeover=!0;if(typeof D.serverMaxWindowBits==="number")d.server_max_window_bits=D.serverMaxWindowBits;if(typeof D.clientMaxWindowBits==="number")d.client_max_window_bits=D.clientMaxWindowBits;else if(d.client_max_window_bits===!0||D.clientMaxWindowBits===!1)delete d.client_max_window_bits;return d}acceptAsClient(C){let D=C[0];if(this._options.clientNoContextTakeover===!1&&D.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!D.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")D.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&D.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return D}normalizeParams(C){return C.forEach((D)=>{Object.keys(D).forEach((d)=>{let E=D[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 R=+E;if(!Number.isInteger(R)||R<8||R>15)throw TypeError(`Invalid value for parameter "${d}": ${E}`);E=R}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${d}": ${E}`)}else if(d==="server_max_window_bits"){let R=+E;if(!Number.isInteger(R)||R<8||R>15)throw TypeError(`Invalid value for parameter "${d}": ${E}`);E=R}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[d]=E})}),C}decompress(C,D,d){n.add((E)=>{this._decompress(C,D,(R,o)=>{E(),d(R,o)})})}compress(C,D,d){n.add((E)=>{this._compress(C,D,(R,o)=>{E(),d(R,o)})})}_decompress(C,D,d){let E=this._isServer?"client":"server";if(!this._inflate){let R=`${E}_max_window_bits`,o=typeof this.params[R]!=="number"?e.Z_DEFAULT_WINDOWBITS:this.params[R];this._inflate=e.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[a]=this,this._inflate[r]=0,this._inflate[c]=[],this._inflate.on("error",N),this._inflate.on("data",l)}if(this._inflate[L]=d,this._inflate.write(C),D)this._inflate.write(A);this._inflate.flush(()=>{let R=this._inflate[u];if(R){this._inflate.close(),this._inflate=null,d(R);return}let o=_.concat(this._inflate[c],this._inflate[r]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[r]=0,this._inflate[c]=[],D&&this.params[`${E}_no_context_takeover`])this._inflate.reset();d(null,o)})}_compress(C,D,d){let E=this._isServer?"server":"client";if(!this._deflate){let R=`${E}_max_window_bits`,o=typeof this.params[R]!=="number"?e.Z_DEFAULT_WINDOWBITS:this.params[R];this._deflate=e.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[r]=0,this._deflate[c]=[],this._deflate.on("data",I)}this._deflate[L]=d,this._deflate.write(C),this._deflate.flush(e.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let R=_.concat(this._deflate[c],this._deflate[r]);if(D)R=new b(R.buffer,R.byteOffset,R.length-4);if(this._deflate[L]=null,this._deflate[r]=0,this._deflate[c]=[],D&&this.params[`${E}_no_context_takeover`])this._deflate.reset();d(null,R)})}}$.exports=h;function I(C){this[c].push(C),this[r]+=C.length}function l(C){if(this[r]+=C.length,this[a]._maxPayload<1||this[r]<=this[a]._maxPayload){this[c].push(C);return}this[u]=RangeError("Max payload size exceeded"),this[u].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[u][T]=1009,this.removeListener("data",l),this.reset()}function N(C){if(this[a]._inflate=null,this[u]){this[L](this[u]);return}C[T]=1007,this[L](C)}}),N$=rH((H,$)=>{var{isUtf8:e}=z("buffer"),{hasBlob:_}=GH(),t=[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 T(a){return a>=1000&&a<=1014&&a!==1004&&a!==1005&&a!==1006||a>=3000&&a<=4999}function b(a){let r=a.length,L=0;while(L<r)if((a[L]&128)===0)L++;else if((a[L]&224)===192){if(L+1===r||(a[L+1]&192)!==128||(a[L]&254)===192)return!1;L+=2}else if((a[L]&240)===224){if(L+2>=r||(a[L+1]&192)!==128||(a[L+2]&192)!==128||a[L]===224&&(a[L+1]&224)===128||a[L]===237&&(a[L+1]&224)===160)return!1;L+=3}else if((a[L]&248)===240){if(L+3>=r||(a[L+1]&192)!==128||(a[L+2]&192)!==128||(a[L+3]&192)!==128||a[L]===240&&(a[L+1]&240)===128||a[L]===244&&a[L+1]>143||a[L]>244)return!1;L+=4}else return!1;return!0}function A(a){return _&&typeof a==="object"&&typeof a.arrayBuffer==="function"&&typeof a.type==="string"&&typeof a.stream==="function"&&(a[Symbol.toStringTag]==="Blob"||a[Symbol.toStringTag]==="File")}if($.exports={isBlob:A,isValidStatusCode:T,isValidUTF8:b,tokenChars:t},e)$.exports.isValidUTF8=function(a){return a.length<24?b(a):e(a)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let a=(()=>{throw Error("Cannot require module utf-8-validate")})();$.exports.isValidUTF8=function(r){return r.length<32?b(r):a(r)}}catch(a){}}),_b=rH((H,$)=>{var{Writable:e}=z("stream"),_=C$(),{BINARY_TYPES:t,EMPTY_BUFFER:T,kStatusCode:b,kWebSocket:A}=GH(),{concat:a,toArrayBuffer:r,unmask:L}=He(),{isValidStatusCode:c,isValidUTF8:u}=N$(),n=Buffer[Symbol.species],h=0,I=1,l=2,N=3,C=4,D=5,d=6;class E extends e{constructor(R={}){super();this._allowSynchronousEvents=R.allowSynchronousEvents!==void 0?R.allowSynchronousEvents:!0,this._binaryType=R.binaryType||t[0],this._extensions=R.extensions||{},this._isServer=!!R.isServer,this._maxPayload=R.maxPayload|0,this._skipUTF8Validation=!!R.skipUTF8Validation,this[A]=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=h}_write(R,o,s){if(this._opcode===8&&this._state==h)return s();this._bufferedBytes+=R.length,this._buffers.push(R),this.startLoop(s)}consume(R){if(this._bufferedBytes-=R,R===this._buffers[0].length)return this._buffers.shift();if(R<this._buffers[0].length){let s=this._buffers[0];return this._buffers[0]=new n(s.buffer,s.byteOffset+R,s.length-R),new n(s.buffer,s.byteOffset,R)}let o=Buffer.allocUnsafe(R);do{let s=this._buffers[0],i=o.length-R;if(R>=s.length)o.set(this._buffers.shift(),i);else o.set(new Uint8Array(s.buffer,s.byteOffset,R),i),this._buffers[0]=new n(s.buffer,s.byteOffset+R,s.length-R);R-=s.length}while(R>0);return o}startLoop(R){this._loop=!0;do switch(this._state){case h:this.getInfo(R);break;case I:this.getPayloadLength16(R);break;case l:this.getPayloadLength64(R);break;case N:this.getMask();break;case C:this.getData(R);break;case D:case d:this._loop=!1;return}while(this._loop);if(!this._errored)R()}getInfo(R){if(this._bufferedBytes<2){this._loop=!1;return}let o=this.consume(2);if((o[0]&48)!==0){let i=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");R(i);return}let s=(o[0]&64)===64;if(s&&!this._extensions[_.extensionName]){let i=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");R(i);return}if(this._fin=(o[0]&128)===128,this._opcode=o[0]&15,this._payloadLength=o[1]&127,this._opcode===0){if(s){let i=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");R(i);return}if(!this._fragmented){let i=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");R(i);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let i=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");R(i);return}this._compressed=s}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let i=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");R(i);return}if(s){let i=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");R(i);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let i=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");R(i);return}}else{let i=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");R(i);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(o[1]&128)===128,this._isServer){if(!this._masked){let i=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");R(i);return}}else if(this._masked){let i=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");R(i);return}if(this._payloadLength===126)this._state=I;else if(this._payloadLength===127)this._state=l;else this.haveLength(R)}getPayloadLength16(R){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(R)}getPayloadLength64(R){if(this._bufferedBytes<8){this._loop=!1;return}let o=this.consume(8),s=o.readUInt32BE(0);if(s>Math.pow(2,21)-1){let i=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");R(i);return}this._payloadLength=s*Math.pow(2,32)+o.readUInt32BE(4),this.haveLength(R)}haveLength(R){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");R(o);return}}if(this._masked)this._state=N;else this._state=C}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=C}getData(R){let o=T;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(o=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)L(o,this._mask)}if(this._opcode>7){this.controlMessage(o,R);return}if(this._compressed){this._state=D,this.decompress(o,R);return}if(o.length)this._messageLength=this._totalPayloadLength,this._fragments.push(o);this.dataMessage(R)}decompress(R,o){this._extensions[_.extensionName].decompress(R,this._fin,(i,p)=>{if(i)return o(i);if(p.length){if(this._messageLength+=p.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let B=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");o(B);return}this._fragments.push(p)}if(this.dataMessage(o),this._state===h)this.startLoop(o)})}dataMessage(R){if(!this._fin){this._state=h;return}let o=this._messageLength,s=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let i;if(this._binaryType==="nodebuffer")i=a(s,o);else if(this._binaryType==="arraybuffer")i=r(a(s,o));else if(this._binaryType==="blob")i=new Blob(s);else i=s;if(this._allowSynchronousEvents)this.emit("message",i,!0),this._state=h;else this._state=d,setImmediate(()=>{this.emit("message",i,!0),this._state=h,this.startLoop(R)})}else{let i=a(s,o);if(!this._skipUTF8Validation&&!u(i)){let p=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");R(p);return}if(this._state===D||this._allowSynchronousEvents)this.emit("message",i,!1),this._state=h;else this._state=d,setImmediate(()=>{this.emit("message",i,!1),this._state=h,this.startLoop(R)})}}controlMessage(R,o){if(this._opcode===8){if(R.length===0)this._loop=!1,this.emit("conclude",1005,T),this.end();else{let s=R.readUInt16BE(0);if(!c(s)){let p=this.createError(RangeError,`invalid status code ${s}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");o(p);return}let i=new n(R.buffer,R.byteOffset+2,R.length-2);if(!this._skipUTF8Validation&&!u(i)){let p=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");o(p);return}this._loop=!1,this.emit("conclude",s,i),this.end()}this._state=h;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",R),this._state=h;else this._state=d,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",R),this._state=h,this.startLoop(o)})}createError(R,o,s,i,p){this._loop=!1,this._errored=!0;let B=new R(s?`Invalid WebSocket frame: ${o}`:o);return Error.captureStackTrace(B,this.createError),B.code=p,B[b]=i,B}}$.exports=E}),tb=rH((H,$)=>{var{Duplex:e}=z("stream"),{randomFillSync:_}=z("crypto"),t=C$(),{EMPTY_BUFFER:T,kWebSocket:b,NOOP:A}=GH(),{isBlob:a,isValidStatusCode:r}=N$(),{mask:L,toBuffer:c}=He(),u=Symbol("kByteLength"),n=Buffer.alloc(4),h=8192,I,l=h,N=0,C=1,D=2;class d{constructor(o,s,i){if(this._extensions=s||{},i)this._generateMask=i,this._maskBuffer=Buffer.alloc(4);this._socket=o,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=N,this.onerror=A,this[b]=void 0}static frame(o,s){let i,p=!1,B=2,M=!1;if(s.mask){if(i=s.maskBuffer||n,s.generateMask)s.generateMask(i);else{if(l===h){if(I===void 0)I=Buffer.alloc(h);_(I,0,h),l=0}i[0]=I[l++],i[1]=I[l++],i[2]=I[l++],i[3]=I[l++]}M=(i[0]|i[1]|i[2]|i[3])===0,B=6}let G;if(typeof o==="string")if((!s.mask||M)&&s[u]!==void 0)G=s[u];else o=Buffer.from(o),G=o.length;else G=o.length,p=s.mask&&s.readOnly&&!M;let m=G;if(G>=65536)B+=8,m=127;else if(G>125)B+=2,m=126;let q=Buffer.allocUnsafe(p?G+B:B);if(q[0]=s.fin?s.opcode|128:s.opcode,s.rsv1)q[0]|=64;if(q[1]=m,m===126)q.writeUInt16BE(G,2);else if(m===127)q[2]=q[3]=0,q.writeUIntBE(G,4,6);if(!s.mask)return[q,o];if(q[1]|=128,q[B-4]=i[0],q[B-3]=i[1],q[B-2]=i[2],q[B-1]=i[3],M)return[q,o];if(p)return L(o,i,q,B,G),[q];return L(o,i,o,0,G),[q,o]}close(o,s,i,p){let B;if(o===void 0)B=T;else if(typeof o!=="number"||!r(o))throw TypeError("First argument must be a valid error code number");else if(s===void 0||!s.length)B=Buffer.allocUnsafe(2),B.writeUInt16BE(o,0);else{let G=Buffer.byteLength(s);if(G>123)throw RangeError("The message must not be greater than 123 bytes");if(B=Buffer.allocUnsafe(2+G),B.writeUInt16BE(o,0),typeof s==="string")B.write(s,2);else B.set(s,2)}let M={[u]:B.length,fin:!0,generateMask:this._generateMask,mask:i,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==N)this.enqueue([this.dispatch,B,!1,M,p]);else this.sendFrame(d.frame(B,M),p)}ping(o,s,i){let p,B;if(typeof o==="string")p=Buffer.byteLength(o),B=!1;else if(a(o))p=o.size,B=!1;else o=c(o),p=o.length,B=c.readOnly;if(p>125)throw RangeError("The data size must not be greater than 125 bytes");let M={[u]:p,fin:!0,generateMask:this._generateMask,mask:s,maskBuffer:this._maskBuffer,opcode:9,readOnly:B,rsv1:!1};if(a(o))if(this._state!==N)this.enqueue([this.getBlobData,o,!1,M,i]);else this.getBlobData(o,!1,M,i);else if(this._state!==N)this.enqueue([this.dispatch,o,!1,M,i]);else this.sendFrame(d.frame(o,M),i)}pong(o,s,i){let p,B;if(typeof o==="string")p=Buffer.byteLength(o),B=!1;else if(a(o))p=o.size,B=!1;else o=c(o),p=o.length,B=c.readOnly;if(p>125)throw RangeError("The data size must not be greater than 125 bytes");let M={[u]:p,fin:!0,generateMask:this._generateMask,mask:s,maskBuffer:this._maskBuffer,opcode:10,readOnly:B,rsv1:!1};if(a(o))if(this._state!==N)this.enqueue([this.getBlobData,o,!1,M,i]);else this.getBlobData(o,!1,M,i);else if(this._state!==N)this.enqueue([this.dispatch,o,!1,M,i]);else this.sendFrame(d.frame(o,M),i)}send(o,s,i){let p=this._extensions[t.extensionName],B=s.binary?2:1,M=s.compress,G,m;if(typeof o==="string")G=Buffer.byteLength(o),m=!1;else if(a(o))G=o.size,m=!1;else o=c(o),G=o.length,m=c.readOnly;if(this._firstFragment){if(this._firstFragment=!1,M&&p&&p.params[p._isServer?"server_no_context_takeover":"client_no_context_takeover"])M=G>=p._threshold;this._compress=M}else M=!1,B=0;if(s.fin)this._firstFragment=!0;let q={[u]:G,fin:s.fin,generateMask:this._generateMask,mask:s.mask,maskBuffer:this._maskBuffer,opcode:B,readOnly:m,rsv1:M};if(a(o))if(this._state!==N)this.enqueue([this.getBlobData,o,this._compress,q,i]);else this.getBlobData(o,this._compress,q,i);else if(this._state!==N)this.enqueue([this.dispatch,o,this._compress,q,i]);else this.dispatch(o,this._compress,q,i)}getBlobData(o,s,i,p){this._bufferedBytes+=i[u],this._state=D,o.arrayBuffer().then((B)=>{if(this._socket.destroyed){let G=Error("The socket was closed while the blob was being read");process.nextTick(E,this,G,p);return}this._bufferedBytes-=i[u];let M=c(B);if(!s)this._state=N,this.sendFrame(d.frame(M,i),p),this.dequeue();else this.dispatch(M,s,i,p)}).catch((B)=>{process.nextTick(R,this,B,p)})}dispatch(o,s,i,p){if(!s){this.sendFrame(d.frame(o,i),p);return}let B=this._extensions[t.extensionName];this._bufferedBytes+=i[u],this._state=C,B.compress(o,i.fin,(M,G)=>{if(this._socket.destroyed){let m=Error("The socket was closed while data was being compressed");E(this,m,p);return}this._bufferedBytes-=i[u],this._state=N,i.readOnly=!1,this.sendFrame(d.frame(G,i),p),this.dequeue()})}dequeue(){while(this._state===N&&this._queue.length){let o=this._queue.shift();this._bufferedBytes-=o[3][u],Reflect.apply(o[0],this,o.slice(1))}}enqueue(o){this._bufferedBytes+=o[3][u],this._queue.push(o)}sendFrame(o,s){if(o.length===2)this._socket.cork(),this._socket.write(o[0]),this._socket.write(o[1],s),this._socket.uncork();else this._socket.write(o[0],s)}}$.exports=d;function E(o,s,i){if(typeof i==="function")i(s);for(let p=0;p<o._queue.length;p++){let B=o._queue[p],M=B[B.length-1];if(typeof M==="function")M(s)}}function R(o,s,i){E(o,s,i),o.onerror(s)}}),fo=rH((H,$)=>{var{kForOnEventAttribute:e,kListener:_}=GH(),t=Symbol("kCode"),T=Symbol("kData"),b=Symbol("kError"),A=Symbol("kMessage"),a=Symbol("kReason"),r=Symbol("kTarget"),L=Symbol("kType"),c=Symbol("kWasClean");class u{constructor(C){this[r]=null,this[L]=C}get target(){return this[r]}get type(){return this[L]}}Object.defineProperty(u.prototype,"target",{enumerable:!0}),Object.defineProperty(u.prototype,"type",{enumerable:!0});class n extends u{constructor(C,D={}){super(C);this[t]=D.code===void 0?0:D.code,this[a]=D.reason===void 0?"":D.reason,this[c]=D.wasClean===void 0?!1:D.wasClean}get code(){return this[t]}get reason(){return this[a]}get wasClean(){return this[c]}}Object.defineProperty(n.prototype,"code",{enumerable:!0}),Object.defineProperty(n.prototype,"reason",{enumerable:!0}),Object.defineProperty(n.prototype,"wasClean",{enumerable:!0});class h extends u{constructor(C,D={}){super(C);this[b]=D.error===void 0?null:D.error,this[A]=D.message===void 0?"":D.message}get error(){return this[b]}get message(){return this[A]}}Object.defineProperty(h.prototype,"error",{enumerable:!0}),Object.defineProperty(h.prototype,"message",{enumerable:!0});class I extends u{constructor(C,D={}){super(C);this[T]=D.data===void 0?null:D.data}get data(){return this[T]}}Object.defineProperty(I.prototype,"data",{enumerable:!0});var l={addEventListener(C,D,d={}){for(let R of this.listeners(C))if(!d[e]&&R[_]===D&&!R[e])return;let E;if(C==="message")E=function(o,s){let i=new I("message",{data:s?o:o.toString()});i[r]=this,N(D,this,i)};else if(C==="close")E=function(o,s){let i=new n("close",{code:o,reason:s.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});i[r]=this,N(D,this,i)};else if(C==="error")E=function(o){let s=new h("error",{error:o,message:o.message});s[r]=this,N(D,this,s)};else if(C==="open")E=function(){let o=new u("open");o[r]=this,N(D,this,o)};else return;if(E[e]=!!d[e],E[_]=D,d.once)this.once(C,E);else this.on(C,E)},removeEventListener(C,D){for(let d of this.listeners(C))if(d[_]===D&&!d[e]){this.removeListener(C,d);break}}};$.exports={CloseEvent:n,ErrorEvent:h,Event:u,EventTarget:l,MessageEvent:I};function N(C,D,d){if(typeof C==="object"&&C.handleEvent)C.handleEvent.call(C,d);else C.call(D,d)}}),f_=rH((H,$)=>{var{tokenChars:e}=N$();function _(b,A,a){if(b[A]===void 0)b[A]=[a];else b[A].push(a)}function t(b){let A=Object.create(null),a=Object.create(null),r=!1,L=!1,c=!1,u,n,h=-1,I=-1,l=-1,N=0;for(;N<b.length;N++)if(I=b.charCodeAt(N),u===void 0)if(l===-1&&e[I]===1){if(h===-1)h=N}else if(N!==0&&(I===32||I===9)){if(l===-1&&h!==-1)l=N}else if(I===59||I===44){if(h===-1)throw SyntaxError(`Unexpected character at index ${N}`);if(l===-1)l=N;let D=b.slice(h,l);if(I===44)_(A,D,a),a=Object.create(null);else u=D;h=l=-1}else throw SyntaxError(`Unexpected character at index ${N}`);else if(n===void 0)if(l===-1&&e[I]===1){if(h===-1)h=N}else if(I===32||I===9){if(l===-1&&h!==-1)l=N}else if(I===59||I===44){if(h===-1)throw SyntaxError(`Unexpected character at index ${N}`);if(l===-1)l=N;if(_(a,b.slice(h,l),!0),I===44)_(A,u,a),a=Object.create(null),u=void 0;h=l=-1}else if(I===61&&h!==-1&&l===-1)n=b.slice(h,N),h=l=-1;else throw SyntaxError(`Unexpected character at index ${N}`);else if(L){if(e[I]!==1)throw SyntaxError(`Unexpected character at index ${N}`);if(h===-1)h=N;else if(!r)r=!0;L=!1}else if(c)if(e[I]===1){if(h===-1)h=N}else if(I===34&&h!==-1)c=!1,l=N;else if(I===92)L=!0;else throw SyntaxError(`Unexpected character at index ${N}`);else if(I===34&&b.charCodeAt(N-1)===61)c=!0;else if(l===-1&&e[I]===1){if(h===-1)h=N}else if(h!==-1&&(I===32||I===9)){if(l===-1)l=N}else if(I===59||I===44){if(h===-1)throw SyntaxError(`Unexpected character at index ${N}`);if(l===-1)l=N;let D=b.slice(h,l);if(r)D=D.replace(/\\/g,""),r=!1;if(_(a,n,D),I===44)_(A,u,a),a=Object.create(null),u=void 0;n=void 0,h=l=-1}else throw SyntaxError(`Unexpected character at index ${N}`);if(h===-1||c||I===32||I===9)throw SyntaxError("Unexpected end of input");if(l===-1)l=N;let C=b.slice(h,l);if(u===void 0)_(A,C,a);else{if(n===void 0)_(a,C,!0);else if(r)_(a,n,C.replace(/\\/g,""));else _(a,n,C);_(A,u,a)}return A}function T(b){return Object.keys(b).map((A)=>{let a=b[A];if(!Array.isArray(a))a=[a];return a.map((r)=>{return[A].concat(Object.keys(r).map((L)=>{let c=r[L];if(!Array.isArray(c))c=[c];return c.map((u)=>u===!0?L:`${L}=${u}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}$.exports={format:T,parse:t}}),E_=rH((H,$)=>{var e=z("events"),_=z("https"),t=z("http"),T=z("net"),b=z("tls"),{randomBytes:A,createHash:a}=z("crypto"),{Duplex:r,Readable:L}=z("stream"),{URL:c}=z("url"),u=C$(),n=_b(),h=tb(),{isBlob:I}=N$(),{BINARY_TYPES:l,CLOSE_TIMEOUT:N,EMPTY_BUFFER:C,GUID:D,kForOnEventAttribute:d,kListener:E,kStatusCode:R,kWebSocket:o,NOOP:s}=GH(),{EventTarget:{addEventListener:i,removeEventListener:p}}=fo(),{format:B,parse:M}=f_(),{toBuffer:G}=He(),m=Symbol("kAborted"),q=[8,13],F=["CONNECTING","OPEN","CLOSING","CLOSED"],HH=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class g extends e{constructor(f,O,x){super();if(this._binaryType=l[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=C,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=g.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,f!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,O===void 0)O=[];else if(!Array.isArray(O))if(typeof O==="object"&&O!==null)x=O,O=[];else O=[O];IH(this,f,O,x)}else this._autoPong=x.autoPong,this._closeTimeout=x.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(f){if(!l.includes(f))return;if(this._binaryType=f,this._receiver)this._receiver._binaryType=f}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(f,O,x){let U=new n({allowSynchronousEvents:x.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:x.maxPayload,skipUTF8Validation:x.skipUTF8Validation}),S=new h(f,this._extensions,x.generateMask);if(this._receiver=U,this._sender=S,this._socket=f,U[o]=this,S[o]=this,f[o]=this,U.on("conclude",jb),U.on("drain",Qb),U.on("error",Yb),U.on("message",zb),U.on("ping",HL),U.on("pong",$L),S.onerror=eL,f.setTimeout)f.setTimeout(0);if(f.setNoDelay)f.setNoDelay();if(O.length>0)f.unshift(O);f.on("close",Ht),f.on("data",M$),f.on("end",$t),f.on("error",et),this._readyState=g.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=g.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[u.extensionName])this._extensions[u.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=g.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(f,O){if(this.readyState===g.CLOSED)return;if(this.readyState===g.CONNECTING){LH(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===g.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=g.CLOSING,this._sender.close(f,O,!this._isServer,(x)=>{if(x)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),z_(this)}pause(){if(this.readyState===g.CONNECTING||this.readyState===g.CLOSED)return;this._paused=!0,this._socket.pause()}ping(f,O,x){if(this.readyState===g.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof f==="function")x=f,f=O=void 0;else if(typeof O==="function")x=O,O=void 0;if(typeof f==="number")f=f.toString();if(this.readyState!==g.OPEN){ue(this,f,x);return}if(O===void 0)O=!this._isServer;this._sender.ping(f||C,O,x)}pong(f,O,x){if(this.readyState===g.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof f==="function")x=f,f=O=void 0;else if(typeof O==="function")x=O,O=void 0;if(typeof f==="number")f=f.toString();if(this.readyState!==g.OPEN){ue(this,f,x);return}if(O===void 0)O=!this._isServer;this._sender.pong(f||C,O,x)}resume(){if(this.readyState===g.CONNECTING||this.readyState===g.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(f,O,x){if(this.readyState===g.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof O==="function")x=O,O={};if(typeof f==="number")f=f.toString();if(this.readyState!==g.OPEN){ue(this,f,x);return}let U={binary:typeof f!=="string",mask:!this._isServer,compress:!0,fin:!0,...O};if(!this._extensions[u.extensionName])U.compress=!1;this._sender.send(f||C,U,x)}terminate(){if(this.readyState===g.CLOSED)return;if(this.readyState===g.CONNECTING){LH(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=g.CLOSING,this._socket.destroy()}}Object.defineProperty(g,"CONNECTING",{enumerable:!0,value:F.indexOf("CONNECTING")}),Object.defineProperty(g.prototype,"CONNECTING",{enumerable:!0,value:F.indexOf("CONNECTING")}),Object.defineProperty(g,"OPEN",{enumerable:!0,value:F.indexOf("OPEN")}),Object.defineProperty(g.prototype,"OPEN",{enumerable:!0,value:F.indexOf("OPEN")}),Object.defineProperty(g,"CLOSING",{enumerable:!0,value:F.indexOf("CLOSING")}),Object.defineProperty(g.prototype,"CLOSING",{enumerable:!0,value:F.indexOf("CLOSING")}),Object.defineProperty(g,"CLOSED",{enumerable:!0,value:F.indexOf("CLOSED")}),Object.defineProperty(g.prototype,"CLOSED",{enumerable:!0,value:F.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((f)=>{Object.defineProperty(g.prototype,f,{enumerable:!0})}),["open","error","close","message"].forEach((f)=>{Object.defineProperty(g.prototype,`on${f}`,{enumerable:!0,get(){for(let O of this.listeners(f))if(O[d])return O[E];return null},set(O){for(let x of this.listeners(f))if(x[d]){this.removeListener(f,x);break}if(typeof O!=="function")return;this.addEventListener(f,O,{[d]:!0})}})}),g.prototype.addEventListener=i,g.prototype.removeEventListener=p,$.exports=g;function IH(f,O,x,U){let S={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:N,protocolVersion:q[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...U,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(f._autoPong=S.autoPong,f._closeTimeout=S.closeTimeout,!q.includes(S.protocolVersion))throw RangeError(`Unsupported protocol version: ${S.protocolVersion} (supported versions: ${q.join(", ")})`);let w;if(O instanceof c)w=O;else try{w=new c(O)}catch{throw SyntaxError(`Invalid URL: ${O}`)}if(w.protocol==="http:")w.protocol="ws:";else if(w.protocol==="https:")w.protocol="wss:";f._url=w.href;let KH=w.protocol==="wss:",vH=w.protocol==="ws+unix:",L$;if(w.protocol!=="ws:"&&!KH&&!vH)L$=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(vH&&!w.pathname)L$="The URL's pathname is empty";else if(w.hash)L$="The URL contains a fragment identifier";if(L$){let J=SyntaxError(L$);if(f._redirects===0)throw J;else{kH(f,J);return}}let _t=KH?443:80,tt=A(16).toString("base64"),Tt=KH?_.request:t.request,a$=new Set,r$;if(S.createConnection=S.createConnection||(KH?se:Re),S.defaultPort=S.defaultPort||_t,S.port=w.port||_t,S.host=w.hostname.startsWith("[")?w.hostname.slice(1,-1):w.hostname,S.headers={...S.headers,"Sec-WebSocket-Version":S.protocolVersion,"Sec-WebSocket-Key":tt,Connection:"Upgrade",Upgrade:"websocket"},S.path=w.pathname+w.search,S.timeout=S.handshakeTimeout,S.perMessageDeflate)r$=new u({...S.perMessageDeflate,isServer:!1,maxPayload:S.maxPayload}),S.headers["Sec-WebSocket-Extensions"]=B({[u.extensionName]:r$.offer()});if(x.length){for(let J of x){if(typeof J!=="string"||!HH.test(J)||a$.has(J))throw SyntaxError("An invalid or duplicated subprotocol was specified");a$.add(J)}S.headers["Sec-WebSocket-Protocol"]=x.join(",")}if(S.origin)if(S.protocolVersion<13)S.headers["Sec-WebSocket-Origin"]=S.origin;else S.headers.Origin=S.origin;if(w.username||w.password)S.auth=`${w.username}:${w.password}`;if(vH){let J=S.path.split(":");S.socketPath=J[0],S.path=J[1]}let j;if(S.followRedirects){if(f._redirects===0){f._originalIpc=vH,f._originalSecure=KH,f._originalHostOrSocketPath=vH?S.socketPath:w.host;let J=U&&U.headers;if(U={...U,headers:{}},J)for(let[tH,VH]of Object.entries(J))U.headers[tH.toLowerCase()]=VH}else if(f.listenerCount("redirect")===0){let J=vH?f._originalIpc?S.socketPath===f._originalHostOrSocketPath:!1:f._originalIpc?!1:w.host===f._originalHostOrSocketPath;if(!J||f._originalSecure&&!KH){if(delete S.headers.authorization,delete S.headers.cookie,!J)delete S.headers.host;S.auth=void 0}}if(S.auth&&!U.headers.authorization)U.headers.authorization="Basic "+Buffer.from(S.auth).toString("base64");if(j=f._req=Tt(S),f._redirects)f.emit("redirect",f.url,j)}else j=f._req=Tt(S);if(S.timeout)j.on("timeout",()=>{LH(f,j,"Opening handshake has timed out")});if(j.on("error",(J)=>{if(j===null||j[m])return;j=f._req=null,kH(f,J)}),j.on("response",(J)=>{let tH=J.headers.location,VH=J.statusCode;if(tH&&S.followRedirects&&VH>=300&&VH<400){if(++f._redirects>S.maxRedirects){LH(f,j,"Maximum redirects exceeded");return}j.abort();let A$;try{A$=new c(tH,O)}catch(bt){let jH=SyntaxError(`Invalid URL: ${tH}`);kH(f,jH);return}IH(f,A$,x,U)}else if(!f.emit("unexpected-response",j,J))LH(f,j,`Unexpected server response: ${J.statusCode}`)}),j.on("upgrade",(J,tH,VH)=>{if(f.emit("upgrade",J),f.readyState!==g.CONNECTING)return;j=f._req=null;let A$=J.headers.upgrade;if(A$===void 0||A$.toLowerCase()!=="websocket"){LH(f,tH,"Invalid Upgrade header");return}let bt=a("sha1").update(tt+D).digest("base64");if(J.headers["sec-websocket-accept"]!==bt){LH(f,tH,"Invalid Sec-WebSocket-Accept header");return}let jH=J.headers["sec-websocket-protocol"],o$;if(jH!==void 0){if(!a$.size)o$="Server sent a subprotocol but none was requested";else if(!a$.has(jH))o$="Server sent an invalid subprotocol"}else if(a$.size)o$="Server sent no subprotocol";if(o$){LH(f,tH,o$);return}if(jH)f._protocol=jH;let Lt=J.headers["sec-websocket-extensions"];if(Lt!==void 0){if(!r$){LH(f,tH,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let he;try{he=M(Lt)}catch(ie){LH(f,tH,"Invalid Sec-WebSocket-Extensions header");return}let at=Object.keys(he);if(at.length!==1||at[0]!==u.extensionName){LH(f,tH,"Server indicated an extension that was not requested");return}try{r$.accept(he[u.extensionName])}catch(ie){LH(f,tH,"Invalid Sec-WebSocket-Extensions header");return}f._extensions[u.extensionName]=r$}f.setSocket(tH,VH,{allowSynchronousEvents:S.allowSynchronousEvents,generateMask:S.generateMask,maxPayload:S.maxPayload,skipUTF8Validation:S.skipUTF8Validation})}),S.finishRequest)S.finishRequest(j,f);else j.end()}function kH(f,O){f._readyState=g.CLOSING,f._errorEmitted=!0,f.emit("error",O),f.emitClose()}function Re(f){return f.path=f.socketPath,T.connect(f)}function se(f){if(f.path=void 0,!f.servername&&f.servername!=="")f.servername=T.isIP(f.host)?"":f.host;return b.connect(f)}function LH(f,O,x){f._readyState=g.CLOSING;let U=Error(x);if(Error.captureStackTrace(U,LH),O.setHeader){if(O[m]=!0,O.abort(),O.socket&&!O.socket.destroyed)O.socket.destroy();process.nextTick(kH,f,U)}else O.destroy(U),O.once("error",f.emit.bind(f,"error")),O.once("close",f.emitClose.bind(f))}function ue(f,O,x){if(O){let U=I(O)?O.size:G(O).length;if(f._socket)f._sender._bufferedBytes+=U;else f._bufferedAmount+=U}if(x){let U=Error(`WebSocket is not open: readyState ${f.readyState} (${F[f.readyState]})`);process.nextTick(x,U)}}function jb(f,O){let x=this[o];if(x._closeFrameReceived=!0,x._closeMessage=O,x._closeCode=f,x._socket[o]===void 0)return;if(x._socket.removeListener("data",M$),process.nextTick(Y_,x._socket),f===1005)x.close();else x.close(f,O)}function Qb(){let f=this[o];if(!f.isPaused)f._socket.resume()}function Yb(f){let O=this[o];if(O._socket[o]!==void 0)O._socket.removeListener("data",M$),process.nextTick(Y_,O._socket),O.close(f[R]);if(!O._errorEmitted)O._errorEmitted=!0,O.emit("error",f)}function Q_(){this[o].emitClose()}function zb(f,O){this[o].emit("message",f,O)}function HL(f){let O=this[o];if(O._autoPong)O.pong(f,!this._isServer,s);O.emit("ping",f)}function $L(f){this[o].emit("pong",f)}function Y_(f){f.resume()}function eL(f){let O=this[o];if(O.readyState===g.CLOSED)return;if(O.readyState===g.OPEN)O._readyState=g.CLOSING,z_(O);if(this._socket.end(),!O._errorEmitted)O._errorEmitted=!0,O.emit("error",f)}function z_(f){f._closeTimer=setTimeout(f._socket.destroy.bind(f._socket),f._closeTimeout)}function Ht(){let f=this[o];if(this.removeListener("close",Ht),this.removeListener("data",M$),this.removeListener("end",$t),f._readyState=g.CLOSING,!this._readableState.endEmitted&&!f._closeFrameReceived&&!f._receiver._writableState.errorEmitted&&this._readableState.length!==0){let O=this.read(this._readableState.length);f._receiver.write(O)}if(f._receiver.end(),this[o]=void 0,clearTimeout(f._closeTimer),f._receiver._writableState.finished||f._receiver._writableState.errorEmitted)f.emitClose();else f._receiver.on("error",Q_),f._receiver.on("finish",Q_)}function M$(f){if(!this[o]._receiver.write(f))this.pause()}function $t(){let f=this[o];f._readyState=g.CLOSING,f._receiver.end(),this.end()}function et(){let f=this[o];if(this.removeListener("error",et),this.on("error",s),f)f._readyState=g.CLOSING,this.destroy()}}),Eo=rH((H,$)=>{var e=E_(),{Duplex:_}=z("stream");function t(a){a.emit("close")}function T(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function b(a){if(this.removeListener("error",b),this.destroy(),this.listenerCount("error")===0)this.emit("error",a)}function A(a,r){let L=!0,c=new _({...r,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return a.on("message",function(n,h){let I=!h&&c._readableState.objectMode?n.toString():n;if(!c.push(I))a.pause()}),a.once("error",function(n){if(c.destroyed)return;L=!1,c.destroy(n)}),a.once("close",function(){if(c.destroyed)return;c.push(null)}),c._destroy=function(u,n){if(a.readyState===a.CLOSED){n(u),process.nextTick(t,c);return}let h=!1;if(a.once("error",function(l){h=!0,n(l)}),a.once("close",function(){if(!h)n(u);process.nextTick(t,c)}),L)a.terminate()},c._final=function(u){if(a.readyState===a.CONNECTING){a.once("open",function(){c._final(u)});return}if(a._socket===null)return;if(a._socket._writableState.finished){if(u(),c._readableState.endEmitted)c.destroy()}else a._socket.once("finish",function(){u()}),a.close()},c._read=function(){if(a.isPaused)a.resume()},c._write=function(u,n,h){if(a.readyState===a.CONNECTING){a.once("open",function(){c._write(u,n,h)});return}a.send(u,h)},c.on("end",T),c.on("error",b),c}$.exports=A}),Tb=rH((H,$)=>{var{tokenChars:e}=N$();function _(t){let T=new Set,b=-1,A=-1,a=0;for(a;a<t.length;a++){let L=t.charCodeAt(a);if(A===-1&&e[L]===1){if(b===-1)b=a}else if(a!==0&&(L===32||L===9)){if(A===-1&&b!==-1)A=a}else if(L===44){if(b===-1)throw SyntaxError(`Unexpected character at index ${a}`);if(A===-1)A=a;let c=t.slice(b,A);if(T.has(c))throw SyntaxError(`The "${c}" subprotocol is duplicated`);T.add(c),b=A=-1}else throw SyntaxError(`Unexpected character at index ${a}`)}if(b===-1||A!==-1)throw SyntaxError("Unexpected end of input");let r=t.slice(b,a);if(T.has(r))throw SyntaxError(`The "${r}" subprotocol is duplicated`);return T.add(r),T}$.exports={parse:_}}),Co=rH((H,$)=>{var e=z("events"),_=z("http"),{Duplex:t}=z("stream"),{createHash:T}=z("crypto"),b=f_(),A=C$(),a=Tb(),r=E_(),{CLOSE_TIMEOUT:L,GUID:c,kWebSocket:u}=GH(),n=/^[+/0-9A-Za-z]{22}==$/,h=0,I=1,l=2;class N extends e{constructor(o,s){super();if(o={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:L,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:r,...o},o.port==null&&!o.server&&!o.noServer||o.port!=null&&(o.server||o.noServer)||o.server&&o.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(o.port!=null)this._server=_.createServer((i,p)=>{let B=_.STATUS_CODES[426];p.writeHead(426,{"Content-Length":B.length,"Content-Type":"text/plain"}),p.end(B)}),this._server.listen(o.port,o.host,o.backlog,s);else if(o.server)this._server=o.server;if(this._server){let i=this.emit.bind(this,"connection");this._removeListeners=C(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(p,B,M)=>{this.handleUpgrade(p,B,M,i)}})}if(o.perMessageDeflate===!0)o.perMessageDeflate={};if(o.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=o,this._state=h}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(o){if(this._state===l){if(o)this.once("close",()=>{o(Error("The server is not running"))});process.nextTick(D,this);return}if(o)this.once("close",o);if(this._state===I)return;if(this._state=I,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(D,this);else this._shouldEmitClose=!0;else process.nextTick(D,this)}else{let s=this._server;this._removeListeners(),this._removeListeners=this._server=null,s.close(()=>{D(this)})}}shouldHandle(o){if(this.options.path){let s=o.url.indexOf("?");if((s!==-1?o.url.slice(0,s):o.url)!==this.options.path)return!1}return!0}handleUpgrade(o,s,i,p){s.on("error",d);let B=o.headers["sec-websocket-key"],M=o.headers.upgrade,G=+o.headers["sec-websocket-version"];if(o.method!=="GET"){R(this,o,s,405,"Invalid HTTP method");return}if(M===void 0||M.toLowerCase()!=="websocket"){R(this,o,s,400,"Invalid Upgrade header");return}if(B===void 0||!n.test(B)){R(this,o,s,400,"Missing or invalid Sec-WebSocket-Key header");return}if(G!==13&&G!==8){R(this,o,s,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(o)){E(s,400);return}let m=o.headers["sec-websocket-protocol"],q=new Set;if(m!==void 0)try{q=a.parse(m)}catch(g){R(this,o,s,400,"Invalid Sec-WebSocket-Protocol header");return}let F=o.headers["sec-websocket-extensions"],HH={};if(this.options.perMessageDeflate&&F!==void 0){let g=new A({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let IH=b.parse(F);if(IH[A.extensionName])g.accept(IH[A.extensionName]),HH[A.extensionName]=g}catch(IH){R(this,o,s,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let g={origin:o.headers[`${G===8?"sec-websocket-origin":"origin"}`],secure:!!(o.socket.authorized||o.socket.encrypted),req:o};if(this.options.verifyClient.length===2){this.options.verifyClient(g,(IH,kH,Re,se)=>{if(!IH)return E(s,kH||401,Re,se);this.completeUpgrade(HH,B,q,o,s,i,p)});return}if(!this.options.verifyClient(g))return E(s,401)}this.completeUpgrade(HH,B,q,o,s,i,p)}completeUpgrade(o,s,i,p,B,M,G){if(!B.readable||!B.writable)return B.destroy();if(B[u])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>h)return E(B,503);let q=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${T("sha1").update(s+c).digest("base64")}`],F=new this.options.WebSocket(null,void 0,this.options);if(i.size){let HH=this.options.handleProtocols?this.options.handleProtocols(i,p):i.values().next().value;if(HH)q.push(`Sec-WebSocket-Protocol: ${HH}`),F._protocol=HH}if(o[A.extensionName]){let HH=o[A.extensionName].params,g=b.format({[A.extensionName]:[HH]});q.push(`Sec-WebSocket-Extensions: ${g}`),F._extensions=o}if(this.emit("headers",q,p),B.write(q.concat(`\r
78
78
  `).join(`\r
79
79
  `)),B.removeListener("error",d),F.setSocket(B,M,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(F),F.on("close",()=>{if(this.clients.delete(F),this._shouldEmitClose&&!this.clients.size)process.nextTick(D,this)});G(F,p)}}$.exports=N;function C(o,s){for(let i of Object.keys(s))o.on(i,s[i]);return function(){for(let p of Object.keys(s))o.removeListener(p,s[p])}}function D(o){o._state=l,o.emit("close")}function d(){this.destroy()}function E(o,s,i,p){i=i||_.STATUS_CODES[s],p={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(i),...p},o.once("finish",o.destroy),o.end(`HTTP/1.1 ${s} ${_.STATUS_CODES[s]}\r
80
80
  `+Object.keys(p).map((B)=>`${B}: ${p[B]}`).join(`\r
81
81
  `)+`\r
82
82
  \r
83
- `+i)}function R(o,s,i,p,B,M){if(o.listenerCount("wsClientError")){let G=Error(B);Error.captureStackTrace(G,R),o.emit("wsClientError",G,i,s)}else E(i,p,B,M)}});B9=MH(fo(),1),O9=MH(f_(),1),M9=MH(C$(),1),G9=MH(eb(),1),g9=MH(_b(),1),S9=MH(tb(),1),yo=MH(E_(),1),Rb=MH(Eo(),1),Hb=yo.default;Qo={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},Yo={"Network.requestWillBeSent":{walltime:"wallTime"}},zo={hasUserGesture:!1,redirectHasExtraInfo:!1},Hc={hasExtraInfo:!1},$c={encodedDataLength:0,shouldReportCorbBlocking:!1},ec={initialPriority:"Medium",referrerPolicy:"origin"},_c={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};sc={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};Ic={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:""};pc=["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"],Bc={"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:[]}};Mc={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}});var Pb={};at(Pb,{simMiddleware:()=>ER,selectServeSimState:()=>UH,rewriteStateForRequestHost:()=>p$,readServeSimStates:()=>gH,previewConfigForState:()=>Te,parseForegroundAppLogMessage:()=>qb,matchInstalledAppByDisplayName:()=>bR});import{readdirSync as Kc,readFileSync as vc,existsSync as kb,unlinkSync as lb,watch as Vc}from"fs";import{execSync as SH,spawn as pb,exec as jc,execFile as mb}from"child_process";import{tmpdir as Qc}from"os";import{join as k_}from"path";import{createServer as Yc}from"net";import{randomBytes as zc,timingSafeEqual as HR}from"crypto";function Mb(H){return!TR.test(H)}function qb(H){let $=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/.exec(H);if(!$)return null;return{bundleId:$[1],pid:parseInt($[2],10)}}function Gb(H,$){if(_R.has($))return Promise.resolve(!0);return new Promise((e)=>{mb("xcrun",["simctl","get_app_container",H,$,"app"],{timeout:2000},(_,t)=>{if(_)return e(!1);let T=t.trim();if(!T)return e(!1);for(let b of tR)if(kb(k_(T,b)))return e(!0);e(!1)})})}function gb(H){return H.trim().replace(/\s+/g," ").toLowerCase()}function bR(H,$){let e=gb($);if(!e)return null;for(let[_,t]of Object.entries(H))if([t.CFBundleDisplayName,t.CFBundleName,t.CFBundleExecutable].filter((b)=>typeof b==="string").some((b)=>gb(b)===e))return t.CFBundleIdentifier||_;return null}function LR(){let H=Date.now();if(l$.booted&&H-l$.at<1500)return l$.booted;try{let $=SH("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),e=JSON.parse($),_=new Set;for(let t of Object.values(e.devices))for(let T of t)if(T.state==="Booted")_.add(T.udid);return l$={at:H,booted:_},_}catch{return null}}function aR(){let H=Date.now();if(H-B_.at<1500)return B_.udid;let $=null;try{$=SH("defaults read com.apple.iphonesimulator CurrentDeviceUDID",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()||null}catch{$=null}return B_={at:H,udid:$},$}function gH(){let H;try{H=Kc(S_).filter((_)=>_.startsWith("server-")&&_.endsWith(".json"))}catch{return[]}let $=LR(),e=[];for(let _ of H){let t=k_(S_,_);try{let T=JSON.parse(vc(t,"utf-8"));try{process.kill(T.pid,0)}catch{w$("helper pid=%d gone, removing %s",T.pid,t);try{lb(t)}catch{}continue}if($&&!$.has(T.device)){w$("recycling stale helper pid=%d (device %s no longer booted)",T.pid,T.device);try{process.kill(T.pid,"SIGTERM")}catch{}try{lb(t)}catch{}continue}e.push(T)}catch{}}return e}function UH(H,$){if($)return H.find((e)=>e.device===$)??null;return H[0]??null}function rR(H){let $=H.indexOf("?");if($===-1)return null;return new URLSearchParams(H.slice($+1)).get("device")}function O_(H,$,e){return`${`${H}${$}`}?device=${encodeURIComponent(e)}`}function p$(H,$){if(!$)return H;let e;try{e=new URL(`http://${$}`).hostname}catch{return H}if(e==="localhost"||e==="127.0.0.1"||e==="[::1]")return H;let _=(t)=>t.replace("127.0.0.1",e);return{...H,url:_(H.url),streamUrl:_(H.streamUrl),wsUrl:_(H.wsUrl)}}function Te(H,$,e,_){let t=($===""?"":$)+"/grid/api";return{...H,basePath:$,appStateEndpoint:O_($,"/appstate",H.device),axEndpoint:O_($,"/ax",H.device),devtoolsEndpoint:O_($,"/devtools",H.device),serveSimBin:e,gridApiEndpoint:t,gridStartEndpoint:t+"/start",gridShutdownEndpoint:t+"/shutdown",gridMemoryEndpoint:t+"/memory",previewEndpoint:$===""?"/":$,execToken:_}}async function AR(H){return new Promise(($)=>{let e=Yc();e.once("error",()=>$(!1)),e.once("listening",()=>e.close(()=>$(!0))),e.listen(H,"127.0.0.1")})}async function Sb(H){let $=`http://127.0.0.1:${H}`;try{let e=await fetch(`${$}/json/version`);if(!e.ok)return null;if((await e.json()).Browser!=="Safari/inspect-webkit")return null;return{port:H,cdpUrl:$,async listTargets(){return(await(await fetch(`${$}/json/list`)).json()).filter((b)=>b.id.startsWith("sim:")).map((b)=>{let a=b.id.split(":")[1],r=b.description?.match(/\(([^)]+)\)/)?.[1];return{id:b.id,title:b.title||b.url||"Untitled",url:/^https?:/i.test(b.url)?b.url:"about:blank",type:b.type||"page",udid:a,bundleId:r}})}}}catch{return null}}async function M_(){if(ZH)try{return await(await ZH).listTargets(),ZH}catch{ZH=null}return ZH=(async()=>{let{startCdpServer:H}=await Promise.resolve().then(() => (db(),Nb));for(let $=te;$<te+50;$++){if(!await AR($)){let e=await Sb($);if(e)return e;continue}try{let e=await H({host:"127.0.0.1",port:$});return{port:$,cdpUrl:`http://127.0.0.1:${$}`,async listTargets(){return e.getTargets().filter((_)=>_.source?.kind==="simulator").map((_)=>{let t=_.url??"";return{id:_.targetId,title:_.title||_.appName||t||"Untitled",url:/^https?:/i.test(t)?t:"about:blank",type:_.type||"page",appName:_.appName,bundleId:_.bundleId,udid:_.source?.id,inUseByOtherInspector:!!_.inUseByOtherInspector}})},highlightTarget:e.highlightTarget?.bind(e),releaseHighlight:e.releaseHighlight?.bind(e)}}catch(e){if(e?.code==="EADDRINUSE"){let _=await Sb($);if(_)return _;continue}throw e}}throw Error(`No available inspect-webkit port found in ${te}-${te+49}`)})().catch((H)=>{throw ZH=null,H}),ZH}function oR(H,$,e){let _=new URL(`${H}/inspector.html`,"http://serve-sim.local");return _.searchParams.set("ws",`${$}/devtools/page/${e}`),`${_.pathname}${_.search}`}function cR(H,$){return`127.0.0.1:${$}`}function g_(){try{let H=process.argv;if(H[1]&&kb(H[1]))return H[1]}catch{}return"serve-sim-sjchmiela"}function RR(){if(!G_)G_=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLWJsYWNrOiMwMDA7LS1jb2xvci13aGl0ZTojZmZmOy0tc3BhY2luZzouMjVyZW07LS1mb250LXdlaWdodC1tZWRpdW06NTAwOy0tZm9udC13ZWlnaHQtc2VtaWJvbGQ6NjAwOy0tdHJhY2tpbmctd2lkZTouMDI1ZW07LS1sZWFkaW5nLXRpZ2h0OjEuMjU7LS1yYWRpdXMteHM6LjEyNXJlbTstLXJhZGl1cy1tZDouMzc1cmVtOy0tcmFkaXVzLWxnOi41cmVtOy0tcmFkaXVzLXhsOi43NXJlbTstLWVhc2Utb3V0OmN1YmljLWJlemllcigwLDAsLjIsMSk7LS1ibHVyLW1kOjEycHg7LS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb246LjE1czstLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7LS1kZWZhdWx0LWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc2Fucyk7LS1kZWZhdWx0LW1vbm8tZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTstLWNvbG9yLXBhbmVsOiMxYzFjMWU7LS1jb2xvci1wYW5lbC1iZzojMTQxNDE2ZWI7LS1jb2xvci1wYW5lbC1vdmVybGF5OiMxNDE0MTZhNjstLWNvbG9yLXBhbmVsLWRlZXA6IzExMTExMzstLWNvbG9yLXBhZ2U6IzBhMGEwYTstLWNvbG9yLWFjY2VudDojYTViNGZjOy0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkOiMzNGQzOTk7LS1jb2xvci1kYW5nZXI6I2Y4NzE3MTstLWNvbG9yLWRhbmdlci1zb2Z0OiNmY2E1YTU7LS1jb2xvci13YXJuaW5nOiNmYmJmMjQ7LS1jb2xvci13YXJuaW5nLXNvZnQ6I2ZjZDM0ZDstLWZvbnQtc3lzdGVtOi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWZ9fUBsYXllciBiYXNleyosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06OmJhY2tkcm9we2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH1odG1sLDpob3N0ey13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlO3RhYi1zaXplOjQ7bGluZS1oZWlnaHQ6MS41O2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtZm9udC1mYW1pbHksdWktc2Fucy1zZXJpZixzeXN0ZW0tdWksc2Fucy1zZXJpZiwiQXBwbGUgQ29sb3IgRW1vamkiLCJTZWdvZSBVSSBFbW9qaSIsIlNlZ29lIFVJIFN5bWJvbCIsIk5vdG8gQ29sb3IgRW1vamkiKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1mb250LWZlYXR1cmUtc2V0dGluZ3Msbm9ybWFsKTtmb250LXZhcmlhdGlvbi1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWhye2NvbG9yOmluaGVyaXQ7Ym9yZGVyLXRvcC13aWR0aDoxcHg7aGVpZ2h0OjB9YWJicjp3aGVyZShbdGl0bGVdKXstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9YXtjb2xvcjppbmhlcml0Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHNhbXAscHJle2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtbW9uby1mb250LWZhbWlseSx1aS1tb25vc3BhY2UsU0ZNb25vLVJlZ3VsYXIsTWVubG8sTW9uYWNvLENvbnNvbGFzLCJMaWJlcmF0aW9uIE1vbm8iLCJDb3VyaWVyIE5ldyIsbW9ub3NwYWNlKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtbW9uby1mb250LXZhcmlhdGlvbi1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtc2l6ZToxZW19c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MH1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfXRhYmxle3RleHQtaW5kZW50OjA7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfTotbW96LWZvY3VzcmluZ3tvdXRsaW5lOmF1dG99cHJvZ3Jlc3N7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1vbCx1bCxtZW51e2xpc3Qtc3R5bGU6bm9uZX1pbWcsc3ZnLHZpZGVvLGNhbnZhcyxhdWRpbyxpZnJhbWUsZW1iZWQsb2JqZWN0e2Rpc3BsYXk6YmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfWltZyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b31idXR0b24saW5wdXQsc2VsZWN0LG9wdGdyb3VwLHRleHRhcmVhe2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LW1vei1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTp3aGVyZShzZWxlY3Q6aXMoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OnBsYWNlaG9sZGVye29wYWNpdHk6MX1Ac3VwcG9ydHMgKCBub3QgKC13ZWJraXQtYXBwZWFyYW5jZTogLWFwcGxlLXBheS1idXR0b24pKSBvciAoY29udGFpbi1pbnRyaW5zaWMtc2l6ZTogMXB4KXs6OnBsYWNlaG9sZGVye2NvbG9yOmN1cnJlbnRDb2xvcn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLGN1cnJlbnRjb2xvciA1MCUsdHJhbnNwYXJlbnQpfX19dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZXt0ZXh0LWFsaWduOmluaGVyaXQ7bWluLWhlaWdodDoxbGh9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7ZGlzcGxheTppbmxpbmUtZmxleH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1maWVsZHMtd3JhcHBlcntwYWRkaW5nOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQteWVhci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1tb250aC1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1kYXktZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbGxpc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1lcmlkaWVtLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye2xpbmUtaGVpZ2h0OjF9Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9YnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufWlucHV0OndoZXJlKFt0eXBlPWJ1dHRvbl0sW3R5cGU9cmVzZXRdLFt0eXBlPXN1Ym1pdF0pe2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257YXBwZWFyYW5jZTpidXR0b259OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVtoaWRkZW5dOndoZXJlKDpub3QoW2hpZGRlbj11bnRpbC1mb3VuZF0pKXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbGF5ZXIgdXRpbGl0aWVzey5cW2NvbnRhaW5lci10eXBlXDppbmxpbmUtc2l6ZVxde2NvbnRhaW5lci10eXBlOmlubGluZS1zaXplfS5wb2ludGVyLWV2ZW50cy1hdXRve3BvaW50ZXItZXZlbnRzOmF1dG99LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0uY29sbGFwc2V7dmlzaWJpbGl0eTpjb2xsYXBzZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LmZpeGVke3Bvc2l0aW9uOmZpeGVkfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uc3RhdGlje3Bvc2l0aW9uOnN0YXRpY30uc3RpY2t5e3Bvc2l0aW9uOnN0aWNreX0uaW5zZXQtMHtpbnNldDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMHt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0udG9wLTFcLzJ7dG9wOjUwJX0udG9wLTJ7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9LnRvcC0ze3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS50b3AtXFsycHhcXXt0b3A6MnB4fS50b3AtXFtjYWxjXCgxMDBcJVwrNHB4XClcXXt0b3A6Y2FsYygxMDAlICsgNHB4KX0udG9wLVxbY2FsY1woMTAwXCVcKzZweFwpXF17dG9wOmNhbGMoMTAwJSArIDZweCl9LnJpZ2h0LTB7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucmlnaHQtMFwuNXtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucmlnaHQtMlwuNXtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnJpZ2h0LTN7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucmlnaHQtNHtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5yaWdodC1cWzlweFxde3JpZ2h0OjlweH0uYm90dG9tLTB7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMCl9LmJvdHRvbS0wXC41e2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uYm90dG9tLTN7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMyl9LmJvdHRvbS00e2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5ib3R0b20tNntib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ubGVmdC0we2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubGVmdC0xXC8ye2xlZnQ6NTAlfS5sZWZ0LTJcLjV7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmxlZnQtM3tsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnotMXt6LWluZGV4OjF9LnotMTB7ei1pbmRleDoxMH0uei0yMHt6LWluZGV4OjIwfS56LTMwe3otaW5kZXg6MzB9LnotMzV7ei1pbmRleDozNX0uei0zNnt6LWluZGV4OjM2fS56LTQwe3otaW5kZXg6NDB9LnotNTB7ei1pbmRleDo1MH0uY29udGFpbmVye3dpZHRoOjEwMCV9QG1lZGlhIChtaW4td2lkdGg6NDByZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQwcmVtfX1AbWVkaWEgKG1pbi13aWR0aDo0OHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NDhyZW19fUBtZWRpYSAobWluLXdpZHRoOjY0cmVtKXsuY29udGFpbmVye21heC13aWR0aDo2NHJlbX19QG1lZGlhIChtaW4td2lkdGg6ODByZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjgwcmVtfX1AbWVkaWEgKG1pbi13aWR0aDo5NnJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6OTZyZW19fS5tLTB7bWFyZ2luOmNhbGModmFyKC0tc3BhY2luZykqMCl9Li1teC0xe21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSotMSl9Lm14LTBcLjV7bWFyZ2luLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uLW15LTJ7bWFyZ2luLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqLTIpfS5teS0xe21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5tdC0ye21hcmdpbi10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ubXQtXFszcHhcXXttYXJnaW4tdG9wOjNweH0ubXItXFszcHhcXXttYXJnaW4tcmlnaHQ6M3B4fS5tbC0wXC41e21hcmdpbi1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5tbC0xe21hcmdpbi1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMSl9LmJveC1ib3JkZXJ7Ym94LXNpemluZzpib3JkZXItYm94fS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5jb250ZW50c3tkaXNwbGF5OmNvbnRlbnRzfS5mbGV4e2Rpc3BsYXk6ZmxleH0uZ3JpZHtkaXNwbGF5OmdyaWR9LmhpZGRlbntkaXNwbGF5Om5vbmV9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS50YWJsZXtkaXNwbGF5OnRhYmxlfS5cW2FzcGVjdC1yYXRpb1w6MTZcLzExXF17YXNwZWN0LXJhdGlvOjE2LzExfS5zaXplLTFcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnNpemUtMlwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0uc2l6ZS0zXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMy41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5zaXplLTR7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0uc2l6ZS01e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LnNpemUtOXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjkpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkpfS5zaXplLVxbMnB4XF17d2lkdGg6MnB4O2hlaWdodDoycHh9LnNpemUtXFsxNHB4XF17d2lkdGg6MTRweDtoZWlnaHQ6MTRweH0uc2l6ZS1cWzE4cHhcXXt3aWR0aDoxOHB4O2hlaWdodDoxOHB4fS5zaXplLVxbMTlweFxde3dpZHRoOjE5cHg7aGVpZ2h0OjE5cHh9LnNpemUtZnVsbHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5oLTJcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0uaC0ze2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5oLTNcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMy41KX0uaC00e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5oLTV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LmgtNVwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1LjUpfS5oLTZ7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNil9LmgtN3toZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0uaC04e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS5oLTEwe2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEwKX0uaC1cWzNweFxde2hlaWdodDozcHh9LmgtXFsxM3B4XF17aGVpZ2h0OjEzcHh9LmgtXFsxNHB4XF17aGVpZ2h0OjE0cHh9LmgtXFsxNnB4XF17aGVpZ2h0OjE2cHh9LmgtXFsxOHB4XF17aGVpZ2h0OjE4cHh9LmgtXFsyMnB4XF17aGVpZ2h0OjIycHh9LmgtXFsyNnB4XF17aGVpZ2h0OjI2cHh9LmgtXFszMHB4XF17aGVpZ2h0OjMwcHh9LmgtZnVsbHtoZWlnaHQ6MTAwJX0uaC1weHtoZWlnaHQ6MXB4fS5oLXNjcmVlbntoZWlnaHQ6MTAwdmh9Lm1heC1oLTkwe21heC1oZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC1oLVxbMjYwcHhcXXttYXgtaGVpZ2h0OjI2MHB4fS5tYXgtaC1cWzMyMHB4XF17bWF4LWhlaWdodDozMjBweH0ubWF4LWgtZnVsbHttYXgtaGVpZ2h0OjEwMCV9Lm1pbi1oLTB7bWluLWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4taC1cWzIycHhcXXttaW4taGVpZ2h0OjIycHh9Lm1pbi1oLVxbMzBweFxde21pbi1oZWlnaHQ6MzBweH0ubWluLWgtXFszNnB4XF17bWluLWhlaWdodDozNnB4fS5taW4taC1cWzQ0cHhcXXttaW4taGVpZ2h0OjQ0cHh9Lm1pbi1oLXB4e21pbi1oZWlnaHQ6MXB4fS53LTF7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0udy0yXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0udy00e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnctNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS53LTZ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0udy03e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNyl9LnctOHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS53LTEwe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTApfS53LTIxe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMjEpfS53LVxbMjJweFxde3dpZHRoOjIycHh9LnctXFszMHB4XF17d2lkdGg6MzBweH0udy1cWzMyXCVcXXt3aWR0aDozMiV9LnctXFszNlwlXF17d2lkdGg6MzYlfS53LVxbNDBcJVxde3dpZHRoOjQwJX0udy1cWzQyXCVcXXt3aWR0aDo0MiV9LnctXFs0NlwlXF17d2lkdGg6NDYlfS53LVxbNDhcJVxde3dpZHRoOjQ4JX0udy1cWzU4XCVcXXt3aWR0aDo1OCV9LnctXFs2MlwlXF17d2lkdGg6NjIlfS53LVxbNjhcJVxde3dpZHRoOjY4JX0udy1cWzcwXCVcXXt3aWR0aDo3MCV9LnctXFs3NFwlXF17d2lkdGg6NzQlfS53LVxbMTIwcHhcXXt3aWR0aDoxMjBweH0udy1cW2NhbGNcKDEwMFwlXCs4cHhcKVxde3dpZHRoOmNhbGMoMTAwJSArIDhweCl9LnctZnVsbHt3aWR0aDoxMDAlfS53LXB4e3dpZHRoOjFweH0ubWF4LXctOTB7bWF4LXdpZHRoOmNhbGModmFyKC0tc3BhY2luZykqOTApfS5tYXgtdy0xMjB7bWF4LXdpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTIwKX0ubWF4LXctXFsxNTBweFxde21heC13aWR0aDoxNTBweH0ubWF4LXctXFszMjBweFxde21heC13aWR0aDozMjBweH0ubWF4LXctXFszNjBweFxde21heC13aWR0aDozNjBweH0ubWF4LXctZnVsbHttYXgtd2lkdGg6MTAwJX0ubWluLXctMHttaW4td2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubWluLXctXFs1NnB4XF17bWluLXdpZHRoOjU2cHh9Lm1pbi13LVxbMjAwcHhcXXttaW4td2lkdGg6MjAwcHh9Lm1pbi13LVxbMjIwcHhcXXttaW4td2lkdGg6MjIwcHh9Lm1pbi13LXB4e21pbi13aWR0aDoxcHh9LmZsZXgtMXtmbGV4OjF9LnNocmlua3tmbGV4LXNocmluazoxfS5zaHJpbmstMHtmbGV4LXNocmluazowfS5ncm93e2ZsZXgtZ3JvdzoxfS4tdHJhbnNsYXRlLXgtMVwvMnstLXR3LXRyYW5zbGF0ZS14OmNhbGMoY2FsYygxLzIqMTAwJSkqLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9LnRyYW5zbGF0ZS14LTF7LS10dy10cmFuc2xhdGUteDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9Li10cmFuc2xhdGUteS0xXC8yey0tdHctdHJhbnNsYXRlLXk6Y2FsYyhjYWxjKDEvMioxMDAlKSotMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0udHJhbnNmb3Jte3RyYW5zZm9ybTp2YXIoLS10dy1yb3RhdGUteCwpdmFyKC0tdHctcm90YXRlLXksKXZhcigtLXR3LXJvdGF0ZS16LCl2YXIoLS10dy1za2V3LXgsKXZhcigtLXR3LXNrZXcteSwpfS5hbmltYXRlLVxbZ3JpZC1zcGluXzBcLjdzX2xpbmVhcl9pbmZpbml0ZVxde2FuaW1hdGlvbjpncmlkLXNwaW4gLjdzIGxpbmVhciBpbmZpbml0ZX0uYW5pbWF0ZS1cW2dyaWQtc3Bpbl8wXC44c19saW5lYXJfaW5maW5pdGVcXXthbmltYXRpb246Z3JpZC1zcGluIC44cyBsaW5lYXIgaW5maW5pdGV9LmFuaW1hdGUtXFtzZXJ2ZS1zaW0tdG9hc3QtcG9wLWluXzBcLjIyc19jdWJpYy1iZXppZXJcKDBcLjJcLDBcLjhcLDBcLjJcLDFcKVxde2FuaW1hdGlvbjpzZXJ2ZS1zaW0tdG9hc3QtcG9wLWluIC4yMnMgY3ViaWMtYmV6aWVyKC4yLC44LC4yLDEpfS5hbmltYXRlLVxbc2VydmUtc2ltLXRvYXN0LXBvcC1vdXRfMFwuMnNfZWFzZS1pbl9mb3J3YXJkc1xde2FuaW1hdGlvbjpzZXJ2ZS1zaW0tdG9hc3QtcG9wLW91dCAuMnMgZWFzZS1pbiBmb3J3YXJkc30uY3Vyc29yLWNvbC1yZXNpemV7Y3Vyc29yOmNvbC1yZXNpemV9LmN1cnNvci1kZWZhdWx0e2N1cnNvcjpkZWZhdWx0fS5jdXJzb3Itbm90LWFsbG93ZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLXByb2dyZXNze2N1cnNvcjpwcm9ncmVzc30uY3Vyc29yLXRleHR7Y3Vyc29yOnRleHR9LnRvdWNoLW5vbmV7dG91Y2gtYWN0aW9uOm5vbmV9LnJlc2l6ZXtyZXNpemU6Ym90aH0ubGlzdC1ub25le2xpc3Qtc3R5bGUtdHlwZTpub25lfS5hcHBlYXJhbmNlLW5vbmV7YXBwZWFyYW5jZTpub25lfS5cW2dyaWQtdGVtcGxhdGUtY29sdW1uc1w6MWZyXzFmcl8xZnJcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmciAxZnJ9LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDphdXRvXzFmcl9hdXRvXF17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG99LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDphdXRvX21pbm1heFwoMFwsMWZyXClfYXV0b1xde2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIG1pbm1heCgwLDFmcilhdXRvfS5mbGV4LWNvbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uZmxleC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcH0ucGxhY2UtaXRlbXMtY2VudGVye3BsYWNlLWl0ZW1zOiBjZW50ZXJ9Lml0ZW1zLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6IGNlbnRlcn0uaXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS5qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZ2FwLTBcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5nYXAtMXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0uZ2FwLTFcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uZ2FwLTJ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMil9LmdhcC0yXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmdhcC0ze2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5nYXAtNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uZ2FwLVxbNXB4XF17Z2FwOjVweH0uZ2FwLXB4e2dhcDoxcHh9Lmp1c3RpZnktc2VsZi1lbmR7anVzdGlmeS1zZWxmOmZsZXgtZW5kfS50cnVuY2F0ZXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lm92ZXJmbG93LWhpZGRlbntvdmVyZmxvdzpoaWRkZW59Lm92ZXJmbG93LXktYXV0b3tvdmVyZmxvdy15OmF1dG99LnJvdW5kZWR7Ym9yZGVyLXJhZGl1czouMjVyZW19LnJvdW5kZWQtXFsycHhcXXtib3JkZXItcmFkaXVzOjJweH0ucm91bmRlZC1cWzNweFxde2JvcmRlci1yYWRpdXM6M3B4fS5yb3VuZGVkLVxbNHB4XF17Ym9yZGVyLXJhZGl1czo0cHh9LnJvdW5kZWQtXFs1cHhcXXtib3JkZXItcmFkaXVzOjVweH0ucm91bmRlZC1cWzdweFxde2JvcmRlci1yYWRpdXM6N3B4fS5yb3VuZGVkLVxbOHB4XF17Ym9yZGVyLXJhZGl1czo4cHh9LnJvdW5kZWQtXFs5cHhcXXtib3JkZXItcmFkaXVzOjlweH0ucm91bmRlZC1cWzEwcHhcXXtib3JkZXItcmFkaXVzOjEwcHh9LnJvdW5kZWQtXFsxNHB4XF17Ym9yZGVyLXJhZGl1czoxNHB4fS5yb3VuZGVkLWZ1bGx7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LnJvdW5kZWQtbGd7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtbGcpfS5yb3VuZGVkLW1ke2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLW1kKX0ucm91bmRlZC1ub25le2JvcmRlci1yYWRpdXM6MH0ucm91bmRlZC14bHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy14bCl9LnJvdW5kZWQteHN7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteHMpfS5yb3VuZGVkLXQtXFsxMHB4XF17Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoxMHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjEwcHh9LmJvcmRlcntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItMHtib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MH0uYm9yZGVyLTJ7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjJweH0uYm9yZGVyLXR7Ym9yZGVyLXRvcC1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci10b3Atd2lkdGg6MXB4fS5ib3JkZXItcntib3JkZXItcmlnaHQtc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItcmlnaHQtd2lkdGg6MXB4fS5ib3JkZXItZGFzaGVkey0tdHctYm9yZGVyLXN0eWxlOmRhc2hlZDtib3JkZXItc3R5bGU6ZGFzaGVkfS5ib3JkZXItbm9uZXstLXR3LWJvcmRlci1zdHlsZTpub25lO2JvcmRlci1zdHlsZTpub25lfS5cIWJvcmRlci1cW3JnYmFcKDEwXCwxMzJcLDI1NVwsMFwuNlwpXF17Ym9yZGVyLWNvbG9yOiMwYTg0ZmY5OSFpbXBvcnRhbnR9LmJvcmRlci1cW1wjM2I1Zjk5XF17Ym9yZGVyLWNvbG9yOiMzYjVmOTl9LmJvcmRlci1cW1wjNWY2MjY4XF17Ym9yZGVyLWNvbG9yOiM1ZjYyNjh9LmJvcmRlci1cW1wjMjIyXF17Ym9yZGVyLWNvbG9yOiMyMjJ9LmJvcmRlci1hY2NlbnR7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWFjY2VudCl9LmJvcmRlci1kYW5nZXJcLzIwe2JvcmRlci1jb2xvcjojZjg3MTcxMzN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMjAlLHRyYW5zcGFyZW50KX19LmJvcmRlci1kYW5nZXJcLzMwe2JvcmRlci1jb2xvcjojZjg3MTcxNGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWRhbmdlclwvMzB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMzAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13YXJuaW5nXC8yNXtib3JkZXItY29sb3I6I2ZiYmYyNDQwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13YXJuaW5nXC8yNXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdhcm5pbmcpMjUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZXtib3JkZXItY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjojZmZmZmZmMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8xMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEwJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8xMntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzIwe2JvcmRlci1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzIwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMjV7Ym9yZGVyLWNvbG9yOiNmZmZmZmY0MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzI1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMzB7Ym9yZGVyLWNvbG9yOiNmZmZmZmY0ZH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzMwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMzAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvXFswXC4wNlxde2JvcmRlci1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItdC1cW1wjZjRmNGY1XF17Ym9yZGVyLXRvcC1jb2xvcjojZjRmNGY1fS5ib3JkZXItdC13aGl0ZXtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uYm9yZGVyLXQtd2hpdGVcLzYwe2JvcmRlci10b3AtY29sb3I6I2ZmZjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXQtd2hpdGVcLzYwe2JvcmRlci10b3AtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYwJSx0cmFuc3BhcmVudCl9fS5cIWJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4wOFwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMTQhaW1wb3J0YW50fS5cIWJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWYhaW1wb3J0YW50fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlwhYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpIWltcG9ydGFudH19LmJnLVxbXCMwYTBhMGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTBhMGN9LmJnLVxbXCMwYTg0ZmZcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmZ9LmJnLVxbXCMxYzFjMWNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxYzFjMWN9LmJnLVxbXCM2ZTZlNzJcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2ZTZlNzJ9LmJnLVxbXCM5YTlhOWVcXXtiYWNrZ3JvdW5kLWNvbG9yOiM5YTlhOWV9LmJnLVxbXCMyMDJiM2FcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMDJiM2F9LmJnLVxbXCMyMjJcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjJ9LmJnLVxbXCMyNjM2NGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyNjM2NGN9LmJnLVxbXCMxMDEwMTBcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxMDEwMTB9LmJnLVxbXCNmODcxNzFcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmODcxNzF9LmJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4yMlwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMzh9LmJnLVxbcmdiYVwoMjBcLDIyXCwyOFwsMFwuNzhcKVxde2JhY2tncm91bmQtY29sb3I6IzE0MTYxY2M3fS5iZy1cW3JnYmFcKDk5XCwxMDJcLDI0MVwsMFwuMThcKVxde2JhY2tncm91bmQtY29sb3I6IzYzNjZmMTJlfS5iZy1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1hY2NlbnQpfS5iZy1ibGFja3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWJsYWNrKX0uYmctZGFuZ2VyLXNvZnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1kYW5nZXItc29mdCl9LmJnLWRhbmdlclwvMTB7YmFja2dyb3VuZC1jb2xvcjojZjg3MTcxMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctZGFuZ2VyXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMTAlLHRyYW5zcGFyZW50KX19LmJnLXBhZ2V7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYWdlKX0uYmctcGFuZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbCl9LmJnLXBhbmVsLWJne2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtYmcpfS5iZy1wYW5lbC1kZWVwe2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtZGVlcCl9LmJnLXBhbmVsLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1vdmVybGF5KX0uYmctc3VjY2Vzcy1lbWVyYWxke2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkKX0uYmctdHJhbnNwYXJlbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwMH0uYmctd2FybmluZ1wvMTB7YmFja2dyb3VuZC1jb2xvcjojZmJiZjI0MWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2FybmluZ1wvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2FybmluZykxMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJnLXdoaXRlXC82e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC82e2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC84e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC84e2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8xMntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMTJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8xNXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYyNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMTV7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTUlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzQwe2JhY2tncm91bmQtY29sb3I6I2ZmZjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzQwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvNTB7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmODB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzUwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wM1xde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjA4fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMyUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDRcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wOFxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjA4XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4xNlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjI5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjE2XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTYlLHRyYW5zcGFyZW50KX19LmJnLVxbbGluZWFyLWdyYWRpZW50XCgxNDVkZWdcLFwjMjUzYTVmXCxcIzE2MjEzMlwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCMyNTNhNWYsIzE2MjEzMil9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b19ib3R0b21cLFwjMWMxYzFlXzBcJVwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMWMxYzFlIDAlLCMxYzFjMWUwMCAxMDAlKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX2JvdHRvbVwscmdiYVwoMjBcLDIwXCwyMlwsMFwuOTZcKV8wXCVcLHJnYmFcKDIwXCwyMFwsMjJcLDBcKV8xMDBcJVwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoIzE0MTQxNmY1IDAlLCMxNDE0MTYwMCAxMDAlKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX3JpZ2h0XCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMFwlXCxcIzFjMWMxZV81NVwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg5MGRlZywjMWMxYzFlMDAgMCUsIzFjMWMxZSA1NSUpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fdG9wXCxcIzFjMWMxZV8wXCVcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8xMDBcJVwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoIzFjMWMxZTAwIDAlLCMxYzFjMWUgMTAwJSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b190b3BcLHJnYmFcKDIwXCwyMFwsMjJcLDBcLjk2XClfMFwlXCxyZ2JhXCgyMFwsMjBcLDIyXCwwXClfMTAwXCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCMxNDE0MTYwMCAwJSwjMTQxNDE2ZjUgMTAwJSl9Lm9iamVjdC1jb250YWlue29iamVjdC1maXQ6Y29udGFpbn0ub2JqZWN0LWNvdmVye29iamVjdC1maXQ6Y292ZXJ9LnAtMHtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMCl9LnAtMFwuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5wLTF7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wLTNcLjV7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnAtNntwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqNil9LnB4LTBcLjV7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB4LTF7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucHgtMVwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnB4LTJ7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHgtMlwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnB4LTN7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucHgtM1wuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnB4LTV7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0ucHgtXFs1XC41cHhcXXtwYWRkaW5nLWlubGluZS1zdGFydDo1LjVweDtwYWRkaW5nLWlubGluZS1lbmQ6NS41cHh9LnB4LVxbN3B4XF17cGFkZGluZy1pbmxpbmUtc3RhcnQ6N3B4O3BhZGRpbmctaW5saW5lLWVuZDo3cHh9LnB5LTBcLjV7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHktMXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnB5LTFcLjV7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnB5LTJ7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5weS0yXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5weS00e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0ucHktNntwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqNil9LnB5LVxbMnB4XF17cGFkZGluZy1ibG9jay1zdGFydDoycHg7cGFkZGluZy1ibG9jay1lbmQ6MnB4fS5weS1cWzNweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6M3B4O3BhZGRpbmctYmxvY2stZW5kOjNweH0ucHktXFs1cHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjVweDtwYWRkaW5nLWJsb2NrLWVuZDo1cHh9LnB5LVxbN3B4XF17cGFkZGluZy1ibG9jay1zdGFydDo3cHg7cGFkZGluZy1ibG9jay1lbmQ6N3B4fS5wdC0wXC41e3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5wdC0xe3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnB0LTJcLjV7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5wci0ye3BhZGRpbmctcmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHItM1wuNXtwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHItXFsyNnB4XF17cGFkZGluZy1yaWdodDoyNnB4fS5wYi0wXC41e3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5wYi0xe3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnBiLTFcLjV7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5wYi0ye3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMil9LnBiLVxbMnB4XF17cGFkZGluZy1ib3R0b206MnB4fS5wbC0ye3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wbC0yXC41e3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnBsLTN7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnBsLTd7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqNyl9LnBsLVxbMjZweFxde3BhZGRpbmctbGVmdDoyNnB4fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0uXFtmb250LWZhbWlseVw6LWFwcGxlLXN5c3RlbVwsc3lzdGVtLXVpXCxzYW5zLXNlcmlmXF17Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxOb3RvIFNhbnMsVWJ1bnR1LENhbnRhcmVsbCxIZWx2ZXRpY2EgTmV1ZSxzYW5zLXNlcmlmfS5mb250LVxbaW5oZXJpdFxde2ZvbnQtZmFtaWx5OmluaGVyaXR9LmZvbnQtbW9ub3tmb250LWZhbWlseTp2YXIoLS1mb250LW1vbm8pfS5mb250LXN5c3RlbXtmb250LWZhbWlseTp2YXIoLS1mb250LXN5c3RlbSl9LnRleHQtXFs5cHhcXXtmb250LXNpemU6OXB4fS50ZXh0LVxbMTBweFxde2ZvbnQtc2l6ZToxMHB4fS50ZXh0LVxbMTFcLjVweFxde2ZvbnQtc2l6ZToxMS41cHh9LnRleHQtXFsxMXB4XF17Zm9udC1zaXplOjExcHh9LnRleHQtXFsxMnB4XF17Zm9udC1zaXplOjEycHh9LnRleHQtXFsxM3B4XF17Zm9udC1zaXplOjEzcHh9LnRleHQtXFsxNHB4XF17Zm9udC1zaXplOjE0cHh9LnRleHQtXFsxN3B4XF17Zm9udC1zaXplOjE3cHh9LnRleHQtXFsxOHB4XF17Zm9udC1zaXplOjE4cHh9LmxlYWRpbmctXFsxXC41XF17LS10dy1sZWFkaW5nOjEuNTtsaW5lLWhlaWdodDoxLjV9LmxlYWRpbmctXFsxXC4zNVxdey0tdHctbGVhZGluZzoxLjM1O2xpbmUtaGVpZ2h0OjEuMzV9LmxlYWRpbmctbm9uZXstLXR3LWxlYWRpbmc6MTtsaW5lLWhlaWdodDoxfS5sZWFkaW5nLXRpZ2h0ey0tdHctbGVhZGluZzp2YXIoLS1sZWFkaW5nLXRpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1sZWFkaW5nLXRpZ2h0KX0uZm9udC1tZWRpdW17LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSl9LmZvbnQtc2VtaWJvbGR7LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpfS50cmFja2luZy1cWzBcLjFlbVxdey0tdHctdHJhY2tpbmc6LjFlbTtsZXR0ZXItc3BhY2luZzouMWVtfS50cmFja2luZy1cWzBcLjAyZW1cXXstLXR3LXRyYWNraW5nOi4wMmVtO2xldHRlci1zcGFjaW5nOi4wMmVtfS50cmFja2luZy1cWzBcLjA0ZW1cXXstLXR3LXRyYWNraW5nOi4wNGVtO2xldHRlci1zcGFjaW5nOi4wNGVtfS50cmFja2luZy1cWzBcLjA2ZW1cXXstLXR3LXRyYWNraW5nOi4wNmVtO2xldHRlci1zcGFjaW5nOi4wNmVtfS50cmFja2luZy1cWzBcLjA4ZW1cXXstLXR3LXRyYWNraW5nOi4wOGVtO2xldHRlci1zcGFjaW5nOi4wOGVtfS50cmFja2luZy13aWRley0tdHctdHJhY2tpbmc6dmFyKC0tdHJhY2tpbmctd2lkZSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tdHJhY2tpbmctd2lkZSl9LmJyZWFrLXdvcmRze292ZXJmbG93LXdyYXA6YnJlYWstd29yZH0udGV4dC1lbGxpcHNpc3t0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS53aGl0ZXNwYWNlLW5vd3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9LlwhdGV4dC13aGl0ZXtjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSkhaW1wb3J0YW50fS50ZXh0LVxbXCMwYTBhMGNcXXtjb2xvcjojMGEwYTBjfS50ZXh0LVxbXCM4ZThlOTNcXXtjb2xvcjojOGU4ZTkzfS50ZXh0LVxbXCMzNGQzOTlcXXtjb2xvcjojMzRkMzk5fS50ZXh0LVxbXCMwNjIwMThcXXtjb2xvcjojMDYyMDE4fS50ZXh0LVxbXCNjOGQ3ZmZcXXtjb2xvcjojYzhkN2ZmfS50ZXh0LVxbXCNkMmU3ZmZcXXtjb2xvcjojZDJlN2ZmfS50ZXh0LWFjY2VudHtjb2xvcjp2YXIoLS1jb2xvci1hY2NlbnQpfS50ZXh0LWRhbmdlcntjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXIpfS50ZXh0LWRhbmdlci1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLWRhbmdlci1zb2Z0KX0udGV4dC13YXJuaW5nLXNvZnR7Y29sb3I6dmFyKC0tY29sb3Itd2FybmluZy1zb2Z0KX0udGV4dC13aGl0ZXtjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LnRleHQtd2hpdGVcLzQwe2NvbG9yOiNmZmY2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzQwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNDV7Y29sb3I6I2ZmZmZmZjczfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzQ1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNTB7Y29sb3I6I2ZmZmZmZjgwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzUwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNTV7Y29sb3I6I2ZmZmZmZjhjfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzU1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNjB7Y29sb3I6I2ZmZjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNjB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC83MHtjb2xvcjojZmZmZmZmYjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNzB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTcwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC83NXtjb2xvcjojZmZmZmZmYmZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNzV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTc1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC84MHtjb2xvcjojZmZmY31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC84MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzg1e2NvbG9yOiNmZmZmZmZkOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC84NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzkwe2NvbG9yOiNmZmZmZmZlNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC85MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOTAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzk1e2NvbG9yOiNmZmZmZmZmMn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC85NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOTUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNDJcXXtjb2xvcjojZmZmZmZmNmJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC40Mlxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MiUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC40OFxde2NvbG9yOiNmZmZmZmY3YX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjQ4XF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQ4JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjU4XF17Y29sb3I6I2ZmZmZmZjk0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNThcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTguMCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC45Mlxde2NvbG9yOiNmZmZmZmZlYn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjkyXF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkyJSx0cmFuc3BhcmVudCl9fS5sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlfS51cHBlcmNhc2V7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5pdGFsaWN7Zm9udC1zdHlsZTppdGFsaWN9LnRhYnVsYXItbnVtc3stLXR3LW51bWVyaWMtc3BhY2luZzp0YWJ1bGFyLW51bXM7Zm9udC12YXJpYW50LW51bWVyaWM6dmFyKC0tdHctb3JkaW5hbCwpdmFyKC0tdHctc2xhc2hlZC16ZXJvLCl2YXIoLS10dy1udW1lcmljLWZpZ3VyZSwpdmFyKC0tdHctbnVtZXJpYy1zcGFjaW5nLCl2YXIoLS10dy1udW1lcmljLWZyYWN0aW9uLCl9LlxbZm9udC12YXJpYW50LW51bWVyaWNcOnRhYnVsYXItbnVtc1xde2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uYW50aWFsaWFzZWR7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9Lm9wYWNpdHktMHtvcGFjaXR5OjB9Lm9wYWNpdHktNDB7b3BhY2l0eTouNH0ub3BhY2l0eS02MHtvcGFjaXR5Oi42fS5vcGFjaXR5LTEwMHtvcGFjaXR5OjF9LnNoYWRvd3stLXR3LXNoYWRvdzowIDFweCAzcHggMCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKSwwIDFweCAycHggLTFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMXB4XzJweF9yZ2JhXCgwXCwwXCwwXCwwXC4xOFwpXCwwXzZweF8xOHB4X3JnYmFcKDBcLDBcLDBcLDBcLjI4XClcLGluc2V0XzBfMF8wXzFweF9yZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4wNlwpXF17LS10dy1zaGFkb3c6MCAxcHggMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMmUpLDAgNnB4IDE4cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA0NyksaW5zZXQgMCAwIDAgMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjZmZmZmZmMGYpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF80cHhfMTJweF9yZ2JhXCgwXCwwXCwwXCwwXC40XClcXXstLXR3LXNoYWRvdzowIDRweCAxMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwNik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzhweF8yNHB4X3JnYmFcKDBcLDBcLDBcLDBcLjRcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDA2KTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNVwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDgwKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNDVcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA3Myk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzEycHhfNDBweF9yZ2JhXCgwXCwwXCwwXCwwXC41NVwpXF17LS10dy1zaGFkb3c6MCAxMnB4IDQwcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA4Yyk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFs4cHhfMF8zMnB4X3JnYmFcKDBcLDBcLDBcLDBcLjM1XClcXXstLXR3LXNoYWRvdzo4cHggMCAzMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNTkpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0ucmluZywucmluZy0xey0tdHctcmluZy1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpMCAwIDAgY2FsYygxcHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpdmFyKC0tdHctcmluZy1jb2xvcixjdXJyZW50Y29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0ucmluZy0yey0tdHctcmluZy1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpMCAwIDAgY2FsYygycHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpdmFyKC0tdHctcmluZy1jb2xvcixjdXJyZW50Y29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uXFtib3gtc2hhZG93XDowXzBfNnB4X3JnYmFcKDc0XCwyMjJcLDEyOFwsMFwuN1wpXF17Ym94LXNoYWRvdzowIDAgNnB4ICM0YWRlODBiM30uXFtib3gtc2hhZG93XDowXzBfNnB4X3JnYmFcKDI0OFwsMTEzXCwxMTNcLDBcLjU1XClcXXtib3gtc2hhZG93OjAgMCA2cHggI2Y4NzE3MThjfS5yaW5nLVxbXCMxYzFjMWVcXXstLXR3LXJpbmctY29sb3I6IzFjMWMxZX0ucmluZy13aGl0ZVwvMTB7LS10dy1yaW5nLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5yaW5nLXdoaXRlXC8xMHstLXR3LXJpbmctY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEwJSx0cmFuc3BhcmVudCl9fS5vdXRsaW5le291dGxpbmUtc3R5bGU6dmFyKC0tdHctb3V0bGluZS1zdHlsZSk7b3V0bGluZS13aWR0aDoxcHh9LmJsdXJ7LS10dy1ibHVyOmJsdXIoOHB4KTtmaWx0ZXI6dmFyKC0tdHctYmx1ciwpdmFyKC0tdHctYnJpZ2h0bmVzcywpdmFyKC0tdHctY29udHJhc3QsKXZhcigtLXR3LWdyYXlzY2FsZSwpdmFyKC0tdHctaHVlLXJvdGF0ZSwpdmFyKC0tdHctaW52ZXJ0LCl2YXIoLS10dy1zYXR1cmF0ZSwpdmFyKC0tdHctc2VwaWEsKXZhcigtLXR3LWRyb3Atc2hhZG93LCl9LmdyYXlzY2FsZXstLXR3LWdyYXlzY2FsZTpncmF5c2NhbGUoMTAwJSk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5maWx0ZXJ7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5iYWNrZHJvcC1ibHVyey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDhweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1cWzEycHhcXXstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cigxMnB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLVxbMThweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDE4cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItbWR7LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIodmFyKC0tYmx1ci1tZCkpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLXNhdHVyYXRlLTE1MHstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOnNhdHVyYXRlKDE1MCUpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWZpbHRlcnstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS50cmFuc2l0aW9ue3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3Isb3V0bGluZS1jb2xvcix0ZXh0LWRlY29yYXRpb24tY29sb3IsZmlsbCxzdHJva2UsLS10dy1ncmFkaWVudC1mcm9tLC0tdHctZ3JhZGllbnQtdmlhLC0tdHctZ3JhZGllbnQtdG8sb3BhY2l0eSxib3gtc2hhZG93LHRyYW5zZm9ybSx0cmFuc2xhdGUsc2NhbGUscm90YXRlLGZpbHRlciwtd2Via2l0LWJhY2tkcm9wLWZpbHRlcixiYWNrZHJvcC1maWx0ZXIsZGlzcGxheSxjb250ZW50LXZpc2liaWxpdHksb3ZlcmxheSxwb2ludGVyLWV2ZW50czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLVxbYm9yZGVyLWNvbG9yXCxiYWNrZ3JvdW5kXF17dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLVxbd2lkdGhcLGJhY2tncm91bmRcXXt0cmFuc2l0aW9uLXByb3BlcnR5OndpZHRoLGJhY2tncm91bmQ7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1jb2xvcnN7dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcixvdXRsaW5lLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSwtLXR3LWdyYWRpZW50LWZyb20sLS10dy1ncmFkaWVudC12aWEsLS10dy1ncmFkaWVudC10bzt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLW9wYWNpdHl7dHJhbnNpdGlvbi1wcm9wZXJ0eTpvcGFjaXR5O3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LmR1cmF0aW9uLTE1MHstLXR3LWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi1kdXJhdGlvbjouMTVzfS5kdXJhdGlvbi0yMDB7LS10dy1kdXJhdGlvbjouMnM7dHJhbnNpdGlvbi1kdXJhdGlvbjouMnN9LmR1cmF0aW9uLTMwMHstLXR3LWR1cmF0aW9uOi4zczt0cmFuc2l0aW9uLWR1cmF0aW9uOi4zc30uZWFzZS1vdXR7LS10dy1lYXNlOnZhcigtLWVhc2Utb3V0KTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS1lYXNlLW91dCl9Lm91dGxpbmUtbm9uZXstLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9LnNlbGVjdC1ub25ley13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5zZWxlY3QtdGV4dHstd2Via2l0LXVzZXItc2VsZWN0OnRleHQ7dXNlci1zZWxlY3Q6dGV4dH0uXFstd2Via2l0LWJhY2tkcm9wLWZpbHRlclw6Ymx1clwoMTJweFwpXF17LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6Ymx1cigxMnB4KX0uXFtlZGdlXDp1OFw/XF17ZWRnZTp1OD99LlxbZWRnZVw6dThcXXtlZGdlOnU4fS5cW3Njcm9sbGJhci13aWR0aFw6dGhpblxde3Njcm9sbGJhci13aWR0aDp0aGlufS5cW3NlcVw6dTE2XF17c2VxOnUxNn0uXFtzdWJ0eXBlXDp1OFxde3N1YnR5cGU6dTh9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4yc1wsYm94LXNoYWRvd18wXC4yc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMnMsYm94LXNoYWRvdyAuMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4zc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuM3N9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xMnNcLGJvcmRlci1jb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjEycyxib3JkZXItY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1wsY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVwsY29sb3JfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cyxjb2xvciAuMTVzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xOHN9LlxbdHJhbnNpdGlvblw6bGVmdF8wXC4xNXNcXXt0cmFuc2l0aW9uOmxlZnQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjEyc1wsYmFja2dyb3VuZF8wXC4xMnNcLGNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246b3BhY2l0eSAuMTJzLGJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTJzXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xNXNfZWFzZVwsYmFja2dyb3VuZF8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLGJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCx0cmFuc2Zvcm1fMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyx0cmFuc2Zvcm0gLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xOHN9LlxbdHJhbnNpdGlvblw6cGFkZGluZ18wXC4yNXNfZWFzZVxde3RyYW5zaXRpb246cGFkZGluZyAuMjVzfS5cW3RyYW5zaXRpb25cOnRyYW5zZm9ybV8wXC4yNXNfZWFzZVwsb3BhY2l0eV8wXC4yc19lYXNlXF17dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjI1cyxvcGFjaXR5IC4yc30uXFt0cmFuc2l0aW9uXDp3aWR0aF8xMjBtc19saW5lYXJcXXt0cmFuc2l0aW9uOndpZHRoIC4xMnMgbGluZWFyfS5cW3hcOmYzMlxde3g6ZjMyfS5cW3lcOmYzMlxde3k6ZjMyfS5ncm91cC1mb2N1cy13aXRoaW5cOm9wYWNpdHktMDppcyg6d2hlcmUoLmdyb3VwKTpmb2N1cy13aXRoaW4gKil7b3BhY2l0eTowfUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6cG9pbnRlci1ldmVudHMtYXV0bzppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtwb2ludGVyLWV2ZW50czphdXRvfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOmhpZGRlbjppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtkaXNwbGF5Om5vbmV9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6dHJhbnNsYXRlLXgtMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXstLXR3LXRyYW5zbGF0ZS14OmNhbGModmFyKC0tc3BhY2luZykqMCk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpvcGFjaXR5LTA6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7b3BhY2l0eTowfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOm9wYWNpdHktMTAwOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope29wYWNpdHk6MX19LnBsYWNlaG9sZGVyXDp0ZXh0LXdoaXRlXC80MDo6cGxhY2Vob2xkZXJ7Y29sb3I6I2ZmZjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsucGxhY2Vob2xkZXJcOnRleHQtd2hpdGVcLzQwOjpwbGFjZWhvbGRlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LmZvY3VzLXdpdGhpblw6Ymctd2hpdGVcLzEwOmZvY3VzLXdpdGhpbntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy13aXRoaW5cOmJnLXdoaXRlXC8xMDpmb2N1cy13aXRoaW57YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4xNlwpXF06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyOX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4xOFwpXF06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyZX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmhvdmVye2JvcmRlci1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC8yMDpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JvcmRlci1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC84OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzEyOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvMTI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzE4OmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjJlfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvMTg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzIwOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8yMDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMjU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmNDB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8yNTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyNSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNVxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBkfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNVxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA3XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA3XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNy4wJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTd9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZmUwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtXFtcIzBhMGEwY1xdOmhvdmVye2NvbG9yOiMwYTBhMGN9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC13aGl0ZTpob3Zlcntjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC13aGl0ZVwvOTA6aG92ZXJ7Y29sb3I6I2ZmZmZmZmU2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDp0ZXh0LXdoaXRlXC85MDpob3Zlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOTAlLHRyYW5zcGFyZW50KX19fS5mb2N1c1w6Ym9yZGVyLVxbcmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMjRcKVxdOmZvY3Vze2JvcmRlci1jb2xvcjojZmZmZmZmM2R9LmZvY3VzXDpiZy13aGl0ZVwvXFswXC4wOFxdOmZvY3Vze2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzXDpiZy13aGl0ZVwvXFswXC4wOFxdOmZvY3Vze2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmZvY3VzXDpvdXRsaW5lLW5vbmU6Zm9jdXN7LS10dy1vdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1zdHlsZTpub25lfS5mb2N1cy12aXNpYmxlXDpiZy13aGl0ZVwvODpmb2N1cy12aXNpYmxle2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXZpc2libGVcOmJnLXdoaXRlXC84OmZvY3VzLXZpc2libGV7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uZm9jdXMtdmlzaWJsZVw6b3BhY2l0eS0xMDA6Zm9jdXMtdmlzaWJsZXtvcGFjaXR5OjF9LmZvY3VzLXZpc2libGVcOlxbb3V0bGluZVw6MVwuNXB4X3NvbGlkX3JnYmFcKDEwXCwxMzJcLDI1NVwsMFwuNTVcKVxdOmZvY3VzLXZpc2libGV7b3V0bGluZToxLjVweCBzb2xpZCAjMGE4NGZmOGN9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtb2Zmc2V0LTQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLW9mZnNldDo0cHh9LmFjdGl2ZVw6c2NhbGUtXFswXC45N1xdOmFjdGl2ZXtzY2FsZTouOTd9QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4xOFwpXF06ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjJlfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLVxbXCMyYTJhMmNcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzJhMmEyY319QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA2XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxN31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTklLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMjJcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjM4fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4yMlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjIlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZmUwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6dGV4dC1cW1wjMGEwYTBjXF06ZW5hYmxlZDpob3Zlcntjb2xvcjojMGEwYTBjfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOnRleHQtd2hpdGU6ZW5hYmxlZDpob3Zlcntjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6YnJpZ2h0bmVzcy1cWzFcLjA4XF06ZW5hYmxlZDpob3ZlcnstLXR3LWJyaWdodG5lc3M6YnJpZ2h0bmVzcygxLjA4KTtmaWx0ZXI6dmFyKC0tdHctYmx1ciwpdmFyKC0tdHctYnJpZ2h0bmVzcywpdmFyKC0tdHctY29udHJhc3QsKXZhcigtLXR3LWdyYXlzY2FsZSwpdmFyKC0tdHctaHVlLXJvdGF0ZSwpdmFyKC0tdHctaW52ZXJ0LCl2YXIoLS10dy1zYXR1cmF0ZSwpdmFyKC0tdHctc2VwaWEsKXZhcigtLXR3LWRyb3Atc2hhZG93LCl9fS5kaXNhYmxlZFw6Y3Vyc29yLWRlZmF1bHQ6ZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9LmRpc2FibGVkXDpjdXJzb3Itbm90LWFsbG93ZWQ6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5kaXNhYmxlZFw6dGV4dC13aGl0ZVwvNDA6ZGlzYWJsZWR7Y29sb3I6I2ZmZjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGlzYWJsZWRcOnRleHQtd2hpdGVcLzQwOmRpc2FibGVke2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0uZGlzYWJsZWRcOm9wYWNpdHktNDA6ZGlzYWJsZWR7b3BhY2l0eTouNH0uZGlzYWJsZWRcOm9wYWNpdHktNTA6ZGlzYWJsZWR7b3BhY2l0eTouNX0uXFtcJlw6XDotbW96LXJhbmdlLXByb2dyZXNzXF1cOmgtXFs0cHhcXTo6LW1vei1yYW5nZS1wcm9ncmVzc3toZWlnaHQ6NHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtcHJvZ3Jlc3NcXVw6cm91bmRlZC1mdWxsOjotbW96LXJhbmdlLXByb2dyZXNze2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtcHJvZ3Jlc3NcXVw6YmctXFt2YXJcKC0tc2xpZGVyLWZpbGwtY29sb3JcKVxdOjotbW96LXJhbmdlLXByb2dyZXNze2JhY2tncm91bmQtY29sb3I6dmFyKC0tc2xpZGVyLWZpbGwtY29sb3IpfS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6c2l6ZS1cWzEzcHhcXTo6LW1vei1yYW5nZS10aHVtYnt3aWR0aDoxM3B4O2hlaWdodDoxM3B4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6cm91bmRlZC1mdWxsOjotbW96LXJhbmdlLXRodW1ie2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ym9yZGVyLW5vbmU6Oi1tb3otcmFuZ2UtdGh1bWJ7LS10dy1ib3JkZXItc3R5bGU6bm9uZTtib3JkZXItc3R5bGU6bm9uZX0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJnLXdoaXRlOjotbW96LXJhbmdlLXRodW1ie2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6aC1cWzRweFxdOjotbW96LXJhbmdlLXRyYWNre2hlaWdodDo0cHh9LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpyb3VuZGVkLWZ1bGw6Oi1tb3otcmFuZ2UtdHJhY2t7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpiZy13aGl0ZVwvMjA6Oi1tb3otcmFuZ2UtdHJhY2t7YmFja2dyb3VuZC1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6Ymctd2hpdGVcLzIwOjotbW96LXJhbmdlLXRyYWNre2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOmgtXFs0cHhcXTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7aGVpZ2h0OjRweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja1xdXDpyb3VuZGVkLWZ1bGw6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOlxbYmFja2dyb3VuZFw6bGluZWFyLWdyYWRpZW50XCh0b19yaWdodFwsdmFyXCgtLXNsaWRlci1maWxsLWNvbG9yXClfdmFyXCgtLXNsaWRlci1maWxsXClcLHJnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjIyXClfdmFyXCgtLXNsaWRlci1maWxsXClcKVxdOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1zbGlkZXItZmlsbC1jb2xvcil2YXIoLS1zbGlkZXItZmlsbCksI2ZmZmZmZjM4IHZhcigtLXNsaWRlci1maWxsKSl9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6LW10LVxbNFwuNXB4XF06Oi13ZWJraXQtc2xpZGVyLXRodW1ie21hcmdpbi10b3A6LTQuNXB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOnNpemUtXFsxM3B4XF06Oi13ZWJraXQtc2xpZGVyLXRodW1ie3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6YXBwZWFyYW5jZS1ub25lOjotd2Via2l0LXNsaWRlci10aHVtYnthcHBlYXJhbmNlOm5vbmV9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6cm91bmRlZC1mdWxsOjotd2Via2l0LXNsaWRlci10aHVtYntib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpiZy13aGl0ZTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6c2hhZG93LVxbMF8xcHhfM3B4X3JnYmFcKDBcLDBcLDBcLDBcLjQ1XClcXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7LS10dy1zaGFkb3c6MCAxcHggM3B4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNzMpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uXFtcJlw6ZGlzYWJsZWRcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi1tb3otcmFuZ2UtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmODB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXFtcJlw6ZGlzYWJsZWRcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi1tb3otcmFuZ2UtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LlxbXCZcOmRpc2FibGVkXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmODB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXFtcJlw6ZGlzYWJsZWRcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1MCUsdHJhbnNwYXJlbnQpfX19OnJvb3R7LS1idW5jc3MtbGlnaHQ6IDstLWJ1bmNzcy1kYXJrOmluaXRpYWw7Y29sb3Itc2NoZW1lOmRhcmt9QHN1cHBvcnRzIChpbnRlcnBvbGF0ZS1zaXplOiBhbGxvdy1rZXl3b3Jkcyl7OnJvb3R7aW50ZXJwb2xhdGUtc2l6ZTphbGxvdy1rZXl3b3Jkc319ZGV0YWlscy5sZW0tc2VjdGlvbjo6ZGV0YWlscy1jb250ZW50e292ZXJmbG93OmNsaXA7dHJhbnNpdGlvbjpoZWlnaHQgLjIycyBlYXNlLGNvbnRlbnQtdmlzaWJpbGl0eSAuMjJzIGFsbG93LWRpc2NyZXRlO2hlaWdodDowfWRldGFpbHMubGVtLXNlY3Rpb25bb3Blbl06OmRldGFpbHMtY29udGVudHtoZWlnaHQ6YXV0b31kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnl7bGlzdC1zdHlsZTpub25lfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5OmhvdmVye2NvbG9yOiNmZmZ9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5OmhvdmVyIC5sZW0tY2hldnJvbntjb2xvcjojZmZmZmZmZDkhaW1wb3J0YW50fS5sZW0tY2hldnJvbnt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTZzLGNvbG9yIC4xMnN9QGNvbnRhaW5lciAod2lkdGg8PTIxMHB4KXtbZGF0YS1sb2NhdGlvbi1zdGF0dXMtdG90YWxde2Rpc3BsYXk6bm9uZX19QGtleWZyYW1lcyBncmlkLXNwaW57dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlezAle3RyYW5zZm9ybTp0cmFuc2xhdGUoLTEwMCUpfXRve3RyYW5zZm9ybTp0cmFuc2xhdGUoMjUwJSl9fUBrZXlmcmFtZXMgc2VydmUtc2ltLXRvYXN0LXBvcC1pbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTJweClzY2FsZSguOTYpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKXNjYWxlKDEpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1wb3Atb3V0ezAle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKXNjYWxlKDEpfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSg4cHgpc2NhbGUoLjk2KX19LnNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRle2FuaW1hdGlvbjpzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlfS5ncmlkLXNodXRkb3duLWJ0bntvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnMsYmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LmdyaWQtdGlsZTpob3ZlciAuZ3JpZC1zaHV0ZG93bi1idG57b3BhY2l0eToxfS5ncmlkLXNodXRkb3duLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKXtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzVhMWQxZDtib3JkZXItY29sb3I6I2EzM30uZ3JpZC10aWxlOmhvdmVye2JvcmRlci1jb2xvcjojNTU1IWltcG9ydGFudH1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1yb3RhdGUteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcm90YXRlLXp7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1za2V3LXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1za2V3LXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1ib3JkZXItc3R5bGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOnNvbGlkfUBwcm9wZXJ0eSAtLXR3LWxlYWRpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1mb250LXdlaWdodHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXRyYWNraW5ne3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctb3JkaW5hbHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNsYXNoZWQtemVyb3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW51bWVyaWMtZmlndXJle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctbnVtZXJpYy1zcGFjaW5ne3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctbnVtZXJpYy1mcmFjdGlvbntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNoYWRvdy1hbHBoYXtzeW50YXg6IjxwZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxMDAlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXNoYWRvdy1hbHBoYXtzeW50YXg6IjxwZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxMDAlfUBwcm9wZXJ0eSAtLXR3LXJpbmctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yaW5nLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXJpbmctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnNldC1yaW5nLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LXJpbmctaW5zZXR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC13aWR0aHtzeW50YXg6IjxsZW5ndGg+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOiNmZmZ9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctb3V0bGluZS1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctYmx1cntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJyaWdodG5lc3N7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1jb250cmFzdHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWdyYXlzY2FsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWh1ZS1yb3RhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnZlcnR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1vcGFjaXR5e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2F0dXJhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zZXBpYXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1hbHBoYXtzeW50YXg6IjxwZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxMDAlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LXNpemV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1ibHVye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzc3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWNvbnRyYXN0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtZ3JheXNjYWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWludmVydHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLW9wYWNpdHl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1zYXR1cmF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLXNlcGlhe3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHVyYXRpb257c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1lYXNle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QGxheWVyIHByb3BlcnRpZXN7QHN1cHBvcnRzICgoLXdlYmtpdC1oeXBoZW5zOiBub25lKSBhbmQgKCBub3QgKG1hcmdpbi10cmltOiBpbmxpbmUpKSkgb3IgKCgtbW96LW9yaWVudDogaW5saW5lKSBhbmQgKCBub3QgKGNvbG9yOnJnYihmcm9tIHJlZCByIGcgYikpKSl7Kiw6YmVmb3JlLDphZnRlciw6OmJhY2tkcm9wey0tdHctdHJhbnNsYXRlLXg6MDstLXR3LXRyYW5zbGF0ZS15OjA7LS10dy10cmFuc2xhdGUtejowOy0tdHctcm90YXRlLXg6aW5pdGlhbDstLXR3LXJvdGF0ZS15OmluaXRpYWw7LS10dy1yb3RhdGUtejppbml0aWFsOy0tdHctc2tldy14OmluaXRpYWw7LS10dy1za2V3LXk6aW5pdGlhbDstLXR3LWJvcmRlci1zdHlsZTpzb2xpZDstLXR3LWxlYWRpbmc6aW5pdGlhbDstLXR3LWZvbnQtd2VpZ2h0OmluaXRpYWw7LS10dy10cmFja2luZzppbml0aWFsOy0tdHctb3JkaW5hbDppbml0aWFsOy0tdHctc2xhc2hlZC16ZXJvOmluaXRpYWw7LS10dy1udW1lcmljLWZpZ3VyZTppbml0aWFsOy0tdHctbnVtZXJpYy1zcGFjaW5nOmluaXRpYWw7LS10dy1udW1lcmljLWZyYWN0aW9uOmluaXRpYWw7LS10dy1zaGFkb3c6MCAwICMwMDAwOy0tdHctc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1zaGFkb3ctYWxwaGE6MTAwJTstLXR3LWluc2V0LXNoYWRvdzowIDAgIzAwMDA7LS10dy1pbnNldC1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LWluc2V0LXNoYWRvdy1hbHBoYToxMDAlOy0tdHctcmluZy1jb2xvcjppbml0aWFsOy0tdHctcmluZy1zaGFkb3c6MCAwICMwMDAwOy0tdHctaW5zZXQtcmluZy1jb2xvcjppbml0aWFsOy0tdHctaW5zZXQtcmluZy1zaGFkb3c6MCAwICMwMDAwOy0tdHctcmluZy1pbnNldDppbml0aWFsOy0tdHctcmluZy1vZmZzZXQtd2lkdGg6MHB4Oy0tdHctcmluZy1vZmZzZXQtY29sb3I6I2ZmZjstLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzowIDAgIzAwMDA7LS10dy1vdXRsaW5lLXN0eWxlOnNvbGlkOy0tdHctYmx1cjppbml0aWFsOy0tdHctYnJpZ2h0bmVzczppbml0aWFsOy0tdHctY29udHJhc3Q6aW5pdGlhbDstLXR3LWdyYXlzY2FsZTppbml0aWFsOy0tdHctaHVlLXJvdGF0ZTppbml0aWFsOy0tdHctaW52ZXJ0OmluaXRpYWw7LS10dy1vcGFjaXR5OmluaXRpYWw7LS10dy1zYXR1cmF0ZTppbml0aWFsOy0tdHctc2VwaWE6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93OmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctZHJvcC1zaGFkb3ctYWxwaGE6MTAwJTstLXR3LWRyb3Atc2hhZG93LXNpemU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWJsdXI6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWJyaWdodG5lc3M6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWNvbnRyYXN0OmluaXRpYWw7LS10dy1iYWNrZHJvcC1ncmF5c2NhbGU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWludmVydDppbml0aWFsOy0tdHctYmFja2Ryb3Atb3BhY2l0eTppbml0aWFsOy0tdHctYmFja2Ryb3Atc2F0dXJhdGU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLXNlcGlhOmluaXRpYWw7LS10dy1kdXJhdGlvbjppbml0aWFsOy0tdHctZWFzZTppbml0aWFsfX19Cjwvc3R5bGU+CjwvaGVhZD48Ym9keT4KPGRpdiBpZD0icm9vdCI+PC9kaXY+CjwhLS1fX1NJTV9QUkVWSUVXX0NPTkZJR19fLS0+CjxzY3JpcHQgdHlwZT0ibW9kdWxlIj52YXIgVzIsbCxMMyxONixOMCxWMyxDMyxVMyxZNSxfMix1MCx6MyxONSxxNSxHNSxGMyxPMj17fSxEMj1bXSxMNj0vYWNpdHxleCg/OnN8Z3xufHB8JCl8cnBofGdyaWR8b3dzfG1uY3xudHd8aW5lW2NoXXx6b298Xm9yZHxpdGVyYS9pLGwwPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gWDAoJCxLKXtmb3IodmFyIFEgaW4gSykkW1FdPUtbUV07cmV0dXJuICR9ZnVuY3Rpb24gTDUoJCl7JCYmJC5wYXJlbnROb2RlJiYkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoJCl9ZnVuY3Rpb24gUjEoJCxLLFEpe3ZhciBYLFosWSxxPXt9O2ZvcihZIGluIEspWT09ImtleSI/WD1LW1ldOlk9PSJyZWYiP1o9S1tZXTpxW1ldPUtbWV07aWYoYXJndW1lbnRzLmxlbmd0aD4yJiYocS5jaGlsZHJlbj1hcmd1bWVudHMubGVuZ3RoPjM/VzIuY2FsbChhcmd1bWVudHMsMik6USksdHlwZW9mICQ9PSJmdW5jdGlvbiImJiQuZGVmYXVsdFByb3BzIT1udWxsKWZvcihZIGluICQuZGVmYXVsdFByb3BzKXFbWV09PT12b2lkIDAmJihxW1ldPSQuZGVmYXVsdFByb3BzW1ldKTtyZXR1cm4gazIoJCxxLFgsWixudWxsKX1mdW5jdGlvbiBrMigkLEssUSxYLFope3ZhciBZPXt0eXBlOiQscHJvcHM6SyxrZXk6USxyZWY6WCxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6Wj09bnVsbD8rK0wzOlosX19pOi0xLF9fdTowfTtyZXR1cm4gWj09bnVsbCYmbC52bm9kZSE9bnVsbCYmbC52bm9kZShZKSxZfWZ1bmN0aW9uIGUoJCl7cmV0dXJuICQuY2hpbGRyZW59ZnVuY3Rpb24gUzEoJCxLKXt0aGlzLnByb3BzPSQsdGhpcy5jb250ZXh0PUt9ZnVuY3Rpb24gVDAoJCxLKXtpZihLPT1udWxsKXJldHVybiAkLl9fP1QwKCQuX18sJC5fX2krMSk6bnVsbDtmb3IodmFyIFE7SzwkLl9fay5sZW5ndGg7SysrKWlmKChRPSQuX19rW0tdKSE9bnVsbCYmUS5fX2UhPW51bGwpcmV0dXJuIFEuX19lO3JldHVybiB0eXBlb2YgJC50eXBlPT0iZnVuY3Rpb24iP1QwKCQpOm51bGx9ZnVuY3Rpb24gQzYoJCl7aWYoJC5fX1AmJiQuX19kKXt2YXIgSz0kLl9fdixRPUsuX19lLFg9W10sWj1bXSxZPVgwKHt9LEspO1kuX192PUsuX192KzEsbC52bm9kZSYmbC52bm9kZShZKSxDNSgkLl9fUCxZLEssJC5fX24sJC5fX1AubmFtZXNwYWNlVVJJLDMyJksuX191P1tRXTpudWxsLFgsUT09bnVsbD9UMChLKTpRLCEhKDMyJksuX191KSxaKSxZLl9fdj1LLl9fdixZLl9fLl9fa1tZLl9faV09WSxrMyhYLFksWiksSy5fX2U9Sy5fXz1udWxsLFkuX19lIT1RJiZIMyhZKX19ZnVuY3Rpb24gSDMoJCl7aWYoKCQ9JC5fXykhPW51bGwmJiQuX19jIT1udWxsKXJldHVybiAkLl9fZT0kLl9fYy5iYXNlPW51bGwsJC5fX2suc29tZShmdW5jdGlvbihLKXtpZihLIT1udWxsJiZLLl9fZSE9bnVsbClyZXR1cm4gJC5fX2U9JC5fX2MuYmFzZT1LLl9fZX0pLEgzKCQpfWZ1bmN0aW9uIFY1KCQpeyghJC5fX2QmJigkLl9fZD0hMCkmJk4wLnB1c2goJCkmJiFNMi5fX3IrK3x8VjMhPWwuZGVib3VuY2VSZW5kZXJpbmcpJiYoKFYzPWwuZGVib3VuY2VSZW5kZXJpbmcpfHxDMykoTTIpfWZ1bmN0aW9uIE0yKCl7dHJ5e2Zvcih2YXIgJCxLPTE7TjAubGVuZ3RoOylOMC5sZW5ndGg+SyYmTjAuc29ydChVMyksJD1OMC5zaGlmdCgpLEs9TjAubGVuZ3RoLEM2KCQpfWZpbmFsbHl7TjAubGVuZ3RoPU0yLl9fcj0wfX1mdW5jdGlvbiBBMygkLEssUSxYLFosWSxxLEcsQixWLEMpe3ZhciBMLEYsTixfLHosVSxBLE09WCYmWC5fX2t8fEQyLEU9Sy5sZW5ndGg7Zm9yKEI9VTYoUSxLLE0sQixFKSxMPTA7TDxFO0wrKykoTj1RLl9fa1tMXSkhPW51bGwmJihGPU4uX19pIT0tMSYmTVtOLl9faV18fE8yLE4uX19pPUwsVT1DNSgkLE4sRixaLFkscSxHLEIsVixDKSxfPU4uX19lLE4ucmVmJiZGLnJlZiE9Ti5yZWYmJihGLnJlZiYmVTUoRi5yZWYsbnVsbCxOKSxDLnB1c2goTi5yZWYsTi5fX2N8fF8sTikpLHo9PW51bGwmJl8hPW51bGwmJih6PV8pLChBPSEhKDQmTi5fX3UpKXx8Ri5fX2s9PT1OLl9faz8oQj1fMyhOLEIsJCxBKSxBJiZGLl9fZSYmKEYuX19lPW51bGwpKTp0eXBlb2YgTi50eXBlPT0iZnVuY3Rpb24iJiZVIT09dm9pZCAwP0I9VTpfJiYoQj1fLm5leHRTaWJsaW5nKSxOLl9fdSY9LTcpO3JldHVybiBRLl9fZT16LEJ9ZnVuY3Rpb24gVTYoJCxLLFEsWCxaKXt2YXIgWSxxLEcsQixWLEM9US5sZW5ndGgsTD1DLEY9MDtmb3IoJC5fX2s9QXJyYXkoWiksWT0wO1k8WjtZKyspKHE9S1tZXSkhPW51bGwmJnR5cGVvZiBxIT0iYm9vbGVhbiImJnR5cGVvZiBxIT0iZnVuY3Rpb24iPyh0eXBlb2YgcT09InN0cmluZyJ8fHR5cGVvZiBxPT0ibnVtYmVyInx8dHlwZW9mIHE9PSJiaWdpbnQifHxxLmNvbnN0cnVjdG9yPT1TdHJpbmc/cT0kLl9fa1tZXT1rMihudWxsLHEsbnVsbCxudWxsLG51bGwpOmwwKHEpP3E9JC5fX2tbWV09azIoZSx7Y2hpbGRyZW46cX0sbnVsbCxudWxsLG51bGwpOnEuY29uc3RydWN0b3I9PT12b2lkIDAmJnEuX19iPjA/cT0kLl9fa1tZXT1rMihxLnR5cGUscS5wcm9wcyxxLmtleSxxLnJlZj9xLnJlZjpudWxsLHEuX192KTokLl9fa1tZXT1xLEI9WStGLHEuX189JCxxLl9fYj0kLl9fYisxLEc9bnVsbCwoVj1xLl9faT16NihxLFEsQixMKSkhPS0xJiYoTC0tLChHPVFbVl0pJiYoRy5fX3V8PTIpKSxHPT1udWxsfHxHLl9fdj09bnVsbD8oVj09LTEmJihaPkM/Ri0tOlo8QyYmRisrKSx0eXBlb2YgcS50eXBlIT0iZnVuY3Rpb24iJiYocS5fX3V8PTQpKTpWIT1CJiYoVj09Qi0xP0YtLTpWPT1CKzE/RisrOihWPkI/Ri0tOkYrKyxxLl9fdXw9NCkpKTokLl9fa1tZXT1udWxsO2lmKEwpZm9yKFk9MDtZPEM7WSsrKShHPVFbWV0pIT1udWxsJiYoMiZHLl9fdSk9PTAmJihHLl9fZT09WCYmKFg9VDAoRykpLEQzKEcsRykpO3JldHVybiBYfWZ1bmN0aW9uIF8zKCQsSyxRLFgpe3ZhciBaLFk7aWYodHlwZW9mICQudHlwZT09ImZ1bmN0aW9uIil7Zm9yKFo9JC5fX2ssWT0wO1omJlk8Wi5sZW5ndGg7WSsrKVpbWV0mJihaW1ldLl9fPSQsSz1fMyhaW1ldLEssUSxYKSk7cmV0dXJuIEt9JC5fX2UhPUsmJihYJiYoSyYmJC50eXBlJiYhSy5wYXJlbnROb2RlJiYoSz1UMCgkKSksUS5pbnNlcnRCZWZvcmUoJC5fX2UsS3x8bnVsbCkpLEs9JC5fX2UpO2RvIEs9SyYmSy5uZXh0U2libGluZzt3aGlsZShLIT1udWxsJiZLLm5vZGVUeXBlPT04KTtyZXR1cm4gS31mdW5jdGlvbiBaMCgkLEspe3JldHVybiBLPUt8fFtdLCQ9PW51bGx8fHR5cGVvZiAkPT0iYm9vbGVhbiJ8fChsMCgkKT8kLnNvbWUoZnVuY3Rpb24oUSl7WjAoUSxLKX0pOksucHVzaCgkKSksS31mdW5jdGlvbiB6NigkLEssUSxYKXt2YXIgWixZLHEsRz0kLmtleSxCPSQudHlwZSxWPUtbUV0sQz1WIT1udWxsJiYoMiZWLl9fdSk9PTA7aWYoVj09PW51bGwmJkc9PW51bGx8fEMmJkc9PVYua2V5JiZCPT1WLnR5cGUpcmV0dXJuIFE7aWYoWD4oQz8xOjApKXtmb3IoWj1RLTEsWT1RKzE7Wj49MHx8WTxLLmxlbmd0aDspaWYoKFY9S1txPVo+PTA/Wi0tOlkrK10pIT1udWxsJiYoMiZWLl9fdSk9PTAmJkc9PVYua2V5JiZCPT1WLnR5cGUpcmV0dXJuIHF9cmV0dXJuLTF9ZnVuY3Rpb24gQjMoJCxLLFEpe0tbMF09PSItIj8kLnNldFByb3BlcnR5KEssUT09bnVsbD8iIjpRKTokW0tdPVE9PW51bGw/IiI6dHlwZW9mIFEhPSJudW1iZXIifHxMNi50ZXN0KEspP1E6USsicHgifWZ1bmN0aW9uIEEyKCQsSyxRLFgsWil7dmFyIFkscTskOmlmKEs9PSJzdHlsZSIpaWYodHlwZW9mIFE9PSJzdHJpbmciKSQuc3R5bGUuY3NzVGV4dD1RO2Vsc2V7aWYodHlwZW9mIFg9PSJzdHJpbmciJiYoJC5zdHlsZS5jc3NUZXh0PVg9IiIpLFgpZm9yKEsgaW4gWClRJiZLIGluIFF8fEIzKCQuc3R5bGUsSywiIik7aWYoUSlmb3IoSyBpbiBRKVgmJlFbS109PVhbS118fEIzKCQuc3R5bGUsSyxRW0tdKX1lbHNlIGlmKEtbMF09PSJvIiYmS1sxXT09Im4iKVk9SyE9KEs9Sy5yZXBsYWNlKHozLCIkMSIpKSxxPUsudG9Mb3dlckNhc2UoKSxLPXEgaW4gJHx8Sz09Im9uRm9jdXNPdXQifHxLPT0ib25Gb2N1c0luIj9xLnNsaWNlKDIpOksuc2xpY2UoMiksJC5sfHwoJC5sPXt9KSwkLmxbSytZXT1RLFE/WD9RW3UwXT1YW3UwXTooUVt1MF09TjUsJC5hZGRFdmVudExpc3RlbmVyKEssWT9HNTpxNSxZKSk6JC5yZW1vdmVFdmVudExpc3RlbmVyKEssWT9HNTpxNSxZKTtlbHNle2lmKFo9PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpSz1LLnJlcGxhY2UoL3hsaW5rKEh8OmgpLywiaCIpLnJlcGxhY2UoL3NOYW1lJC8sInMiKTtlbHNlIGlmKEshPSJ3aWR0aCImJkshPSJoZWlnaHQiJiZLIT0iaHJlZiImJkshPSJsaXN0IiYmSyE9ImZvcm0iJiZLIT0idGFiSW5kZXgiJiZLIT0iZG93bmxvYWQiJiZLIT0icm93U3BhbiImJkshPSJjb2xTcGFuIiYmSyE9InJvbGUiJiZLIT0icG9wb3ZlciImJksgaW4gJCl0cnl7JFtLXT1RPT1udWxsPyIiOlE7YnJlYWsgJH1jYXRjaChHKXt9dHlwZW9mIFE9PSJmdW5jdGlvbiJ8fChRPT1udWxsfHxRPT09ITEmJktbNF0hPSItIj8kLnJlbW92ZUF0dHJpYnV0ZShLKTokLnNldEF0dHJpYnV0ZShLLEs9PSJwb3BvdmVyIiYmUT09MT8iIjpRKSl9fWZ1bmN0aW9uIE4zKCQpe3JldHVybiBmdW5jdGlvbihLKXtpZih0aGlzLmwpe3ZhciBRPXRoaXMubFtLLnR5cGUrJF07aWYoS1tfMl09PW51bGwpS1tfMl09TjUrKztlbHNlIGlmKEtbXzJdPFFbdTBdKXJldHVybjtyZXR1cm4gUShsLmV2ZW50P2wuZXZlbnQoSyk6Syl9fX1mdW5jdGlvbiBDNSgkLEssUSxYLFosWSxxLEcsQixWKXt2YXIgQyxMLEYsTixfLHosVSxBLE0sRSxULGIseCxtLFIsbz1LLnR5cGU7aWYoSy5jb25zdHJ1Y3RvciE9PXZvaWQgMClyZXR1cm4gbnVsbDsxMjgmUS5fX3UmJihCPSEhKDMyJlEuX191KSxZPVtHPUsuX19lPVEuX19lXSksKEM9bC5fX2IpJiZDKEspOyQ6aWYodHlwZW9mIG89PSJmdW5jdGlvbiIpdHJ5e2lmKEE9Sy5wcm9wcyxNPW8ucHJvdG90eXBlJiZvLnByb3RvdHlwZS5yZW5kZXIsRT0oQz1vLmNvbnRleHRUeXBlKSYmWFtDLl9fY10sVD1DP0U/RS5wcm9wcy52YWx1ZTpDLl9fOlgsUS5fX2M/VT0oTD1LLl9fYz1RLl9fYykuX189TC5fX0U6KE0/Sy5fX2M9TD1uZXcgbyhBLFQpOihLLl9fYz1MPW5ldyBTMShBLFQpLEwuY29uc3RydWN0b3I9byxMLnJlbmRlcj1INiksRSYmRS5zdWIoTCksTC5zdGF0ZXx8KEwuc3RhdGU9e30pLEwuX19uPVgsRj1MLl9fZD0hMCxMLl9faD1bXSxMLl9zYj1bXSksTSYmTC5fX3M9PW51bGwmJihMLl9fcz1MLnN0YXRlKSxNJiZvLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyE9bnVsbCYmKEwuX19zPT1MLnN0YXRlJiYoTC5fX3M9WDAoe30sTC5fX3MpKSxYMChMLl9fcyxvLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhBLEwuX19zKSkpLE49TC5wcm9wcyxfPUwuc3RhdGUsTC5fX3Y9SyxGKU0mJm8uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT1udWxsJiZMLmNvbXBvbmVudFdpbGxNb3VudCE9bnVsbCYmTC5jb21wb25lbnRXaWxsTW91bnQoKSxNJiZMLmNvbXBvbmVudERpZE1vdW50IT1udWxsJiZMLl9faC5wdXNoKEwuY29tcG9uZW50RGlkTW91bnQpO2Vsc2V7aWYoTSYmby5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM9PW51bGwmJkEhPT1OJiZMLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMhPW51bGwmJkwuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhBLFQpLEsuX192PT1RLl9fdnx8IUwuX19lJiZMLnNob3VsZENvbXBvbmVudFVwZGF0ZSE9bnVsbCYmTC5zaG91bGRDb21wb25lbnRVcGRhdGUoQSxMLl9fcyxUKT09PSExKXtLLl9fdiE9US5fX3YmJihMLnByb3BzPUEsTC5zdGF0ZT1MLl9fcyxMLl9fZD0hMSksSy5fX2U9US5fX2UsSy5fX2s9US5fX2ssSy5fX2suc29tZShmdW5jdGlvbihpKXtpJiYoaS5fXz1LKX0pLEQyLnB1c2guYXBwbHkoTC5fX2gsTC5fc2IpLEwuX3NiPVtdLEwuX19oLmxlbmd0aCYmcS5wdXNoKEwpO2JyZWFrICR9TC5jb21wb25lbnRXaWxsVXBkYXRlIT1udWxsJiZMLmNvbXBvbmVudFdpbGxVcGRhdGUoQSxMLl9fcyxUKSxNJiZMLmNvbXBvbmVudERpZFVwZGF0ZSE9bnVsbCYmTC5fX2gucHVzaChmdW5jdGlvbigpe0wuY29tcG9uZW50RGlkVXBkYXRlKE4sXyx6KX0pfWlmKEwuY29udGV4dD1ULEwucHJvcHM9QSxMLl9fUD0kLEwuX19lPSExLGI9bC5fX3IseD0wLE0pTC5zdGF0ZT1MLl9fcyxMLl9fZD0hMSxiJiZiKEspLEM9TC5yZW5kZXIoTC5wcm9wcyxMLnN0YXRlLEwuY29udGV4dCksRDIucHVzaC5hcHBseShMLl9faCxMLl9zYiksTC5fc2I9W107ZWxzZSBkbyBMLl9fZD0hMSxiJiZiKEspLEM9TC5yZW5kZXIoTC5wcm9wcyxMLnN0YXRlLEwuY29udGV4dCksTC5zdGF0ZT1MLl9fczt3aGlsZShMLl9fZCYmKyt4PDI1KTtMLnN0YXRlPUwuX19zLEwuZ2V0Q2hpbGRDb250ZXh0IT1udWxsJiYoWD1YMChYMCh7fSxYKSxMLmdldENoaWxkQ29udGV4dCgpKSksTSYmIUYmJkwuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUhPW51bGwmJih6PUwuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoTixfKSksbT1DIT1udWxsJiZDLnR5cGU9PT1lJiZDLmtleT09bnVsbD9PMyhDLnByb3BzLmNoaWxkcmVuKTpDLEc9QTMoJCxsMChtKT9tOlttXSxLLFEsWCxaLFkscSxHLEIsViksTC5iYXNlPUsuX19lLEsuX191Jj0tMTYxLEwuX19oLmxlbmd0aCYmcS5wdXNoKEwpLFUmJihMLl9fRT1MLl9fPW51bGwpfWNhdGNoKGkpe2lmKEsuX192PW51bGwsQnx8WSE9bnVsbClpZihpLnRoZW4pe2ZvcihLLl9fdXw9Qj8xNjA6MTI4O0cmJkcubm9kZVR5cGU9PTgmJkcubmV4dFNpYmxpbmc7KUc9Ry5uZXh0U2libGluZztZW1kuaW5kZXhPZihHKV09bnVsbCxLLl9fZT1HfWVsc2V7Zm9yKFI9WS5sZW5ndGg7Ui0tOylMNShZW1JdKTtCNShLKX1lbHNlIEsuX19lPVEuX19lLEsuX19rPVEuX19rLGkudGhlbnx8QjUoSyk7bC5fX2UoaSxLLFEpfWVsc2UgWT09bnVsbCYmSy5fX3Y9PVEuX192PyhLLl9faz1RLl9fayxLLl9fZT1RLl9fZSk6Rz1LLl9fZT1GNihRLl9fZSxLLFEsWCxaLFkscSxCLFYpO3JldHVybihDPWwuZGlmZmVkKSYmQyhLKSwxMjgmSy5fX3U/dm9pZCAwOkd9ZnVuY3Rpb24gQjUoJCl7JCYmKCQuX19jJiYoJC5fX2MuX19lPSEwKSwkLl9fayYmJC5fX2suc29tZShCNSkpfWZ1bmN0aW9uIGszKCQsSyxRKXtmb3IodmFyIFg9MDtYPFEubGVuZ3RoO1grKylVNShRW1hdLFFbKytYXSxRWysrWF0pO2wuX19jJiZsLl9fYyhLLCQpLCQuc29tZShmdW5jdGlvbihaKXt0cnl7JD1aLl9faCxaLl9faD1bXSwkLnNvbWUoZnVuY3Rpb24oWSl7WS5jYWxsKFopfSl9Y2F0Y2goWSl7bC5fX2UoWSxaLl9fdil9fSl9ZnVuY3Rpb24gTzMoJCl7cmV0dXJuIHR5cGVvZiAkIT0ib2JqZWN0Inx8JD09bnVsbHx8JC5fX2I+MD8kOmwwKCQpPyQubWFwKE8zKTpYMCh7fSwkKX1mdW5jdGlvbiBGNigkLEssUSxYLFosWSxxLEcsQil7dmFyIFYsQyxMLEYsTixfLHosVT1RLnByb3BzfHxPMixBPUsucHJvcHMsTT1LLnR5cGU7aWYoTT09InN2ZyI/Wj0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciOk09PSJtYXRoIj9aPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjpafHwoWj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLFkhPW51bGwpe2ZvcihWPTA7VjxZLmxlbmd0aDtWKyspaWYoKE49WVtWXSkmJiJzZXRBdHRyaWJ1dGUiaW4gTj09ISFNJiYoTT9OLmxvY2FsTmFtZT09TTpOLm5vZGVUeXBlPT0zKSl7JD1OLFlbVl09bnVsbDticmVha319aWYoJD09bnVsbCl7aWYoTT09bnVsbClyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoQSk7JD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoWixNLEEuaXMmJkEpLEcmJihsLl9fbSYmbC5fX20oSyxZKSxHPSExKSxZPW51bGx9aWYoTT09bnVsbClVPT09QXx8RyYmJC5kYXRhPT1BfHwoJC5kYXRhPUEpO2Vsc2V7aWYoWT1ZJiZXMi5jYWxsKCQuY2hpbGROb2RlcyksIUcmJlkhPW51bGwpZm9yKFU9e30sVj0wO1Y8JC5hdHRyaWJ1dGVzLmxlbmd0aDtWKyspVVsoTj0kLmF0dHJpYnV0ZXNbVl0pLm5hbWVdPU4udmFsdWU7Zm9yKFYgaW4gVSlOPVVbVl0sVj09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj9MPU46Vj09ImNoaWxkcmVuInx8KFYgaW4gQSl8fFY9PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIEEpfHxWPT0iY2hlY2tlZCImJigiZGVmYXVsdENoZWNrZWQiaW4gQSl8fEEyKCQsVixudWxsLE4sWik7Zm9yKFYgaW4gQSlOPUFbVl0sVj09ImNoaWxkcmVuIj9GPU46Vj09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj9DPU46Vj09InZhbHVlIj9fPU46Vj09ImNoZWNrZWQiP3o9TjpHJiZ0eXBlb2YgTiE9ImZ1bmN0aW9uInx8VVtWXT09PU58fEEyKCQsVixOLFVbVl0sWik7aWYoQylHfHxMJiYoQy5fX2h0bWw9PUwuX19odG1sfHxDLl9faHRtbD09JC5pbm5lckhUTUwpfHwoJC5pbm5lckhUTUw9Qy5fX2h0bWwpLEsuX19rPVtdO2Vsc2UgaWYoTCYmKCQuaW5uZXJIVE1MPSIiKSxBMyhLLnR5cGU9PSJ0ZW1wbGF0ZSI/JC5jb250ZW50OiQsbDAoRik/RjpbRl0sSyxRLFgsTT09ImZvcmVpZ25PYmplY3QiPyJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjpaLFkscSxZP1lbMF06US5fX2smJlQwKFEsMCksRyxCKSxZIT1udWxsKWZvcihWPVkubGVuZ3RoO1YtLTspTDUoWVtWXSk7R3x8KFY9InZhbHVlIixNPT0icHJvZ3Jlc3MiJiZfPT1udWxsPyQucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpOl8hPW51bGwmJihfIT09JFtWXXx8TT09InByb2dyZXNzIiYmIV98fE09PSJvcHRpb24iJiZfIT1VW1ZdKSYmQTIoJCxWLF8sVVtWXSxaKSxWPSJjaGVja2VkIix6IT1udWxsJiZ6IT0kW1ZdJiZBMigkLFYseixVW1ZdLFopKX1yZXR1cm4gJH1mdW5jdGlvbiBVNSgkLEssUSl7dHJ5e2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iKXt2YXIgWD10eXBlb2YgJC5fX3U9PSJmdW5jdGlvbiI7WCYmJC5fX3UoKSxYJiZLPT1udWxsfHwoJC5fX3U9JChLKSl9ZWxzZSAkLmN1cnJlbnQ9S31jYXRjaChaKXtsLl9fZShaLFEpfX1mdW5jdGlvbiBEMygkLEssUSl7dmFyIFgsWjtpZihsLnVubW91bnQmJmwudW5tb3VudCgkKSwoWD0kLnJlZikmJihYLmN1cnJlbnQmJlguY3VycmVudCE9JC5fX2V8fFU1KFgsbnVsbCxLKSksKFg9JC5fX2MpIT1udWxsKXtpZihYLmNvbXBvbmVudFdpbGxVbm1vdW50KXRyeXtYLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2goWSl7bC5fX2UoWSxLKX1YLmJhc2U9WC5fX1A9bnVsbH1pZihYPSQuX19rKWZvcihaPTA7WjxYLmxlbmd0aDtaKyspWFtaXSYmRDMoWFtaXSxLLFF8fHR5cGVvZiAkLnR5cGUhPSJmdW5jdGlvbiIpO1F8fEw1KCQuX19lKSwkLl9fYz0kLl9fPSQuX19lPXZvaWQgMH1mdW5jdGlvbiBINigkLEssUSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoJCxRKX1mdW5jdGlvbiBQMCgkLEssUSl7dmFyIFgsWixZLHE7Sz09ZG9jdW1lbnQmJihLPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCksbC5fXyYmbC5fXygkLEspLFo9KFg9dHlwZW9mIFE9PSJmdW5jdGlvbiIpP251bGw6USYmUS5fX2t8fEsuX19rLFk9W10scT1bXSxDNShLLCQ9KCFYJiZRfHxLKS5fX2s9UjEoZSxudWxsLFskXSksWnx8TzIsTzIsSy5uYW1lc3BhY2VVUkksIVgmJlE/W1FdOlo/bnVsbDpLLmZpcnN0Q2hpbGQ/VzIuY2FsbChLLmNoaWxkTm9kZXMpOm51bGwsWSwhWCYmUT9ROlo/Wi5fX2U6Sy5maXJzdENoaWxkLFgscSksazMoWSwkLHEpfWZ1bmN0aW9uIGQxKCQpe2Z1bmN0aW9uIEsoUSl7dmFyIFgsWjtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHR8fChYPW5ldyBTZXQsKFo9e30pW0suX19jXT10aGlzLHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIFp9LHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtYPW51bGx9LHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKFkpe3RoaXMucHJvcHMudmFsdWUhPVkudmFsdWUmJlguZm9yRWFjaChmdW5jdGlvbihxKXtxLl9fZT0hMCxWNShxKX0pfSx0aGlzLnN1Yj1mdW5jdGlvbihZKXtYLmFkZChZKTt2YXIgcT1ZLmNvbXBvbmVudFdpbGxVbm1vdW50O1kuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtYJiZYLmRlbGV0ZShZKSxxJiZxLmNhbGwoWSl9fSksUS5jaGlsZHJlbn1yZXR1cm4gSy5fX2M9Il9fY0MiK0YzKyssSy5fXz0kLEsuUHJvdmlkZXI9Sy5fX2w9KEsuQ29uc3VtZXI9ZnVuY3Rpb24oUSxYKXtyZXR1cm4gUS5jaGlsZHJlbihYKX0pLmNvbnRleHRUeXBlPUssS31XMj1EMi5zbGljZSxsPXtfX2U6ZnVuY3Rpb24oJCxLLFEsWCl7Zm9yKHZhciBaLFkscTtLPUsuX187KWlmKChaPUsuX19jKSYmIVouX18pdHJ5e2lmKChZPVouY29uc3RydWN0b3IpJiZZLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciE9bnVsbCYmKFouc2V0U3RhdGUoWS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoJCkpLHE9Wi5fX2QpLFouY29tcG9uZW50RGlkQ2F0Y2ghPW51bGwmJihaLmNvbXBvbmVudERpZENhdGNoKCQsWHx8e30pLHE9Wi5fX2QpLHEpcmV0dXJuIFouX19FPVp9Y2F0Y2goRyl7JD1HfXRocm93ICR9fSxMMz0wLE42PWZ1bmN0aW9uKCQpe3JldHVybiAkIT1udWxsJiYkLmNvbnN0cnVjdG9yPT09dm9pZCAwfSxTMS5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oJCxLKXt2YXIgUTtRPXRoaXMuX19zIT1udWxsJiZ0aGlzLl9fcyE9dGhpcy5zdGF0ZT90aGlzLl9fczp0aGlzLl9fcz1YMCh7fSx0aGlzLnN0YXRlKSx0eXBlb2YgJD09ImZ1bmN0aW9uIiYmKCQ9JChYMCh7fSxRKSx0aGlzLnByb3BzKSksJCYmWDAoUSwkKSwkIT1udWxsJiZ0aGlzLl9fdiYmKEsmJnRoaXMuX3NiLnB1c2goSyksVjUodGhpcykpfSxTMS5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oJCl7dGhpcy5fX3YmJih0aGlzLl9fZT0hMCwkJiZ0aGlzLl9faC5wdXNoKCQpLFY1KHRoaXMpKX0sUzEucHJvdG90eXBlLnJlbmRlcj1lLE4wPVtdLEMzPXR5cGVvZiBQcm9taXNlPT0iZnVuY3Rpb24iP1Byb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSk6c2V0VGltZW91dCxVMz1mdW5jdGlvbigkLEspe3JldHVybiAkLl9fdi5fX2ItSy5fX3YuX19ifSxNMi5fX3I9MCxZNT1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDgpLF8yPSJfX2QiK1k1LHUwPSJfX2EiK1k1LHozPS8oUG9pbnRlckNhcHR1cmUpJHxDYXB0dXJlJC9pLE41PTAscTU9TjMoITEpLEc1PU4zKCEwKSxGMz0wO3ZhciBMMCxIMSx6NSxNMyxkMD0wLGIzPVtdLFcxPWwsVzM9VzEuX19iLFQzPVcxLl9fcixQMz1XMS5kaWZmZWQsdzM9VzEuX19jLEUzPVcxLnVubW91bnQsSTM9VzEuX187ZnVuY3Rpb24gdzAoJCxLKXtXMS5fX2gmJlcxLl9faChIMSwkLGQwfHxLKSxkMD0wO3ZhciBRPUgxLl9fSHx8KEgxLl9fSD17X186W10sX19oOltdfSk7cmV0dXJuICQ+PVEuX18ubGVuZ3RoJiZRLl9fLnB1c2goe30pLFEuX19bJF19ZnVuY3Rpb24gRCgkKXtyZXR1cm4gZDA9MSxjMChTMywkKX1mdW5jdGlvbiBjMCgkLEssUSl7dmFyIFg9dzAoTDArKywyKTtpZihYLnQ9JCwhWC5fX2MmJihYLl9fPVtRP1EoSyk6UzModm9pZCAwLEspLGZ1bmN0aW9uKEcpe3ZhciBCPVguX19OP1guX19OWzBdOlguX19bMF0sVj1YLnQoQixHKTtCIT09ViYmKFguX19OPVtWLFguX19bMV1dLFguX19jLnNldFN0YXRlKHt9KSl9XSxYLl9fYz1IMSwhSDEuX19mKSl7dmFyIFo9ZnVuY3Rpb24oRyxCLFYpe2lmKCFYLl9fYy5fX0gpcmV0dXJuITA7dmFyIEM9WC5fX2MuX19ILl9fLmZpbHRlcihmdW5jdGlvbihGKXtyZXR1cm4gRi5fX2N9KTtpZihDLmV2ZXJ5KGZ1bmN0aW9uKEYpe3JldHVybiFGLl9fTn0pKXJldHVybiFZfHxZLmNhbGwodGhpcyxHLEIsVik7dmFyIEw9WC5fX2MucHJvcHMhPT1HO3JldHVybiBDLnNvbWUoZnVuY3Rpb24oRil7aWYoRi5fX04pe3ZhciBOPUYuX19bMF07Ri5fXz1GLl9fTixGLl9fTj12b2lkIDAsTiE9PUYuX19bMF0mJihMPSEwKX19KSxZJiZZLmNhbGwodGhpcyxHLEIsVil8fEx9O0gxLl9fZj0hMDt2YXJ7c2hvdWxkQ29tcG9uZW50VXBkYXRlOlksY29tcG9uZW50V2lsbFVwZGF0ZTpxfT1IMTtIMS5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKEcsQixWKXtpZih0aGlzLl9fZSl7dmFyIEM9WTtZPXZvaWQgMCxaKEcsQixWKSxZPUN9cSYmcS5jYWxsKHRoaXMsRyxCLFYpfSxIMS5zaG91bGRDb21wb25lbnRVcGRhdGU9Wn1yZXR1cm4gWC5fX058fFguX199ZnVuY3Rpb24gSSgkLEspe3ZhciBRPXcwKEwwKyssMyk7IVcxLl9fcyYmSDUoUS5fX0gsSykmJihRLl9fPSQsUS51PUssSDEuX19ILl9faC5wdXNoKFEpKX1mdW5jdGlvbiBvMCgkLEspe3ZhciBRPXcwKEwwKyssNCk7IVcxLl9fcyYmSDUoUS5fX0gsSykmJihRLl9fPSQsUS51PUssSDEuX19oLnB1c2goUSkpfWZ1bmN0aW9uIFMoJCl7cmV0dXJuIGQwPTUsTzEoZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDokfX0sW10pfWZ1bmN0aW9uIE8xKCQsSyl7dmFyIFE9dzAoTDArKyw3KTtyZXR1cm4gSDUoUS5fX0gsSykmJihRLl9fPSQoKSxRLl9fSD1LLFEuX19oPSQpLFEuX199ZnVuY3Rpb24gUCgkLEspe3JldHVybiBkMD04LE8xKGZ1bmN0aW9uKCl7cmV0dXJuICR9LEspfWZ1bmN0aW9uIHIxKCQpe3ZhciBLPUgxLmNvbnRleHRbJC5fX2NdLFE9dzAoTDArKyw5KTtyZXR1cm4gUS5jPSQsSz8oUS5fXz09bnVsbCYmKFEuX189ITAsSy5zdWIoSDEpKSxLLnByb3BzLnZhbHVlKTokLl9ffWZ1bmN0aW9uIFAyKCl7dmFyICQ9dzAoTDArKywxMSk7aWYoISQuX18pe2Zvcih2YXIgSz1IMS5fX3Y7SyE9PW51bGwmJiFLLl9fbSYmSy5fXyE9PW51bGw7KUs9Sy5fXzt2YXIgUT1LLl9fbXx8KEsuX19tPVswLDBdKTskLl9fPSJQIitRWzBdKyItIitRWzFdKyt9cmV0dXJuICQuX199ZnVuY3Rpb24gQTYoKXtmb3IodmFyICQ7JD1iMy5zaGlmdCgpOyl7dmFyIEs9JC5fX0g7aWYoJC5fX1AmJkspdHJ5e0suX19oLnNvbWUoVDIpLEsuX19oLnNvbWUoRjUpLEsuX19oPVtdfWNhdGNoKFEpe0suX19oPVtdLFcxLl9fZShRLCQuX192KX19fVcxLl9fYj1mdW5jdGlvbigkKXtIMT1udWxsLFczJiZXMygkKX0sVzEuX189ZnVuY3Rpb24oJCxLKXskJiZLLl9fayYmSy5fX2suX19tJiYoJC5fX209Sy5fX2suX19tKSxJMyYmSTMoJCxLKX0sVzEuX19yPWZ1bmN0aW9uKCQpe1QzJiZUMygkKSxMMD0wO3ZhciBLPShIMT0kLl9fYykuX19IO0smJih6NT09PUgxPyhLLl9faD1bXSxIMS5fX2g9W10sSy5fXy5zb21lKGZ1bmN0aW9uKFEpe1EuX19OJiYoUS5fXz1RLl9fTiksUS51PVEuX19OPXZvaWQgMH0pKTooSy5fX2guc29tZShUMiksSy5fX2guc29tZShGNSksSy5fX2g9W10sTDA9MCkpLHo1PUgxfSxXMS5kaWZmZWQ9ZnVuY3Rpb24oJCl7UDMmJlAzKCQpO3ZhciBLPSQuX19jO0smJksuX19IJiYoSy5fX0guX19oLmxlbmd0aCYmKGIzLnB1c2goSykhPT0xJiZNMz09PVcxLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChNMz1XMS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpfHxfNikoQTYpKSxLLl9fSC5fXy5zb21lKGZ1bmN0aW9uKFEpe1EudSYmKFEuX19IPVEudSksUS51PXZvaWQgMH0pKSx6NT1IMT1udWxsfSxXMS5fX2M9ZnVuY3Rpb24oJCxLKXtLLnNvbWUoZnVuY3Rpb24oUSl7dHJ5e1EuX19oLnNvbWUoVDIpLFEuX19oPVEuX19oLmZpbHRlcihmdW5jdGlvbihYKXtyZXR1cm4hWC5fX3x8RjUoWCl9KX1jYXRjaChYKXtLLnNvbWUoZnVuY3Rpb24oWil7Wi5fX2gmJihaLl9faD1bXSl9KSxLPVtdLFcxLl9fZShYLFEuX192KX19KSx3MyYmdzMoJCxLKX0sVzEudW5tb3VudD1mdW5jdGlvbigkKXtFMyYmRTMoJCk7dmFyIEssUT0kLl9fYztRJiZRLl9fSCYmKFEuX19ILl9fLnNvbWUoZnVuY3Rpb24oWCl7dHJ5e1QyKFgpfWNhdGNoKFope0s9Wn19KSxRLl9fSD12b2lkIDAsSyYmVzEuX19lKEssUS5fX3YpKX07dmFyIHkzPXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU9PSJmdW5jdGlvbiI7ZnVuY3Rpb24gXzYoJCl7dmFyIEssUT1mdW5jdGlvbigpe2NsZWFyVGltZW91dChYKSx5MyYmY2FuY2VsQW5pbWF0aW9uRnJhbWUoSyksc2V0VGltZW91dCgkKX0sWD1zZXRUaW1lb3V0KFEsMzUpO3kzJiYoSz1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUSkpfWZ1bmN0aW9uIFQyKCQpe3ZhciBLPUgxLFE9JC5fX2M7dHlwZW9mIFE9PSJmdW5jdGlvbiImJigkLl9fYz12b2lkIDAsUSgpKSxIMT1LfWZ1bmN0aW9uIEY1KCQpe3ZhciBLPUgxOyQuX19jPSQuX18oKSxIMT1LfWZ1bmN0aW9uIEg1KCQsSyl7cmV0dXJuISR8fCQubGVuZ3RoIT09Sy5sZW5ndGh8fEsuc29tZShmdW5jdGlvbihRLFgpe3JldHVybiBRIT09JFtYXX0pfWZ1bmN0aW9uIFMzKCQsSyl7cmV0dXJuIHR5cGVvZiBLPT0iZnVuY3Rpb24iP0soJCk6S31mdW5jdGlvbiBXNigkLEspe2Zvcih2YXIgUSBpbiBLKSRbUV09S1tRXTtyZXR1cm4gJH1mdW5jdGlvbiBSMygkLEspe2Zvcih2YXIgUSBpbiAkKWlmKFEhPT0iX19zb3VyY2UiJiYhKFEgaW4gSykpcmV0dXJuITA7Zm9yKHZhciBYIGluIEspaWYoWCE9PSJfX3NvdXJjZSImJiRbWF0hPT1LW1hdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHgzKCQsSyl7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1LfSh4My5wcm90b3R5cGU9bmV3IFMxKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCx4My5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKCQsSyl7cmV0dXJuIFIzKHRoaXMucHJvcHMsJCl8fFIzKHRoaXMuc3RhdGUsSyl9O3ZhciB2Mz1sLl9fYjtsLl9fYj1mdW5jdGlvbigkKXskLnR5cGUmJiQudHlwZS5fX2YmJiQucmVmJiYoJC5wcm9wcy5yZWY9JC5yZWYsJC5yZWY9bnVsbCksdjMmJnYzKCQpfTt2YXIgVDY9bC5fX2U7bC5fX2U9ZnVuY3Rpb24oJCxLLFEsWCl7aWYoJC50aGVuKXtmb3IodmFyIFosWT1LO1k9WS5fXzspaWYoKFo9WS5fX2MpJiZaLl9fYylyZXR1cm4gSy5fX2U9PW51bGwmJihLLl9fZT1RLl9fZSxLLl9faz1RLl9fayksWi5fX2MoJCxLKX1UNigkLEssUSxYKX07dmFyIGczPWwudW5tb3VudDtmdW5jdGlvbiB1MygkLEssUSl7cmV0dXJuICQmJigkLl9fYyYmJC5fX2MuX19IJiYoJC5fX2MuX19ILl9fLmZvckVhY2goZnVuY3Rpb24oWCl7dHlwZW9mIFguX19jPT0iZnVuY3Rpb24iJiZYLl9fYygpfSksJC5fX2MuX19IPW51bGwpLCgkPVc2KHt9LCQpKS5fX2MhPW51bGwmJigkLl9fYy5fX1A9PT1RJiYoJC5fX2MuX19QPUspLCQuX19jLl9fZT0hMCwkLl9fYz1udWxsKSwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKFgpe3JldHVybiB1MyhYLEssUSl9KSksJH1mdW5jdGlvbiBsMygkLEssUSl7cmV0dXJuICQmJlEmJigkLl9fdj1udWxsLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWCl7cmV0dXJuIGwzKFgsSyxRKX0pLCQuX19jJiYkLl9fYy5fX1A9PT1LJiYoJC5fX2UmJlEuYXBwZW5kQ2hpbGQoJC5fX2UpLCQuX19jLl9fZT0hMCwkLl9fYy5fX1A9USkpLCR9ZnVuY3Rpb24gQTUoKXt0aGlzLl9fdT0wLHRoaXMubz1udWxsLHRoaXMuX19iPW51bGx9ZnVuY3Rpb24gZDMoJCl7dmFyIEs9JC5fXyYmJC5fXy5fX2M7cmV0dXJuIEsmJksuX19hJiZLLl9fYSgkKX1mdW5jdGlvbiB3Migpe3RoaXMuaT1udWxsLHRoaXMubD1udWxsfWwudW5tb3VudD1mdW5jdGlvbigkKXt2YXIgSz0kLl9fYztLJiYoSy5fX3o9ITApLEsmJksuX19SJiZLLl9fUigpLEsmJjMyJiQuX191JiYoJC50eXBlPW51bGwpLGczJiZnMygkKX0sKEE1LnByb3RvdHlwZT1uZXcgUzEpLl9fYz1mdW5jdGlvbigkLEspe3ZhciBRPUsuX19jLFg9dGhpcztYLm89PW51bGwmJihYLm89W10pLFguby5wdXNoKFEpO3ZhciBaPWQzKFguX192KSxZPSExLHE9ZnVuY3Rpb24oKXtZfHxYLl9fenx8KFk9ITAsUS5fX1I9bnVsbCxaP1ooQik6QigpKX07US5fX1I9cTt2YXIgRz1RLl9fUDtRLl9fUD1udWxsO3ZhciBCPWZ1bmN0aW9uKCl7aWYoIS0tWC5fX3Upe2lmKFguc3RhdGUuX19hKXt2YXIgVj1YLnN0YXRlLl9fYTtYLl9fdi5fX2tbMF09bDMoVixWLl9fYy5fX1AsVi5fX2MuX19PKX12YXIgQztmb3IoWC5zZXRTdGF0ZSh7X19hOlguX19iPW51bGx9KTtDPVguby5wb3AoKTspQy5fX1A9RyxDLmZvcmNlVXBkYXRlKCl9fTtYLl9fdSsrfHwzMiZLLl9fdXx8WC5zZXRTdGF0ZSh7X19hOlguX19iPVguX192Ll9fa1swXX0pLCQudGhlbihxLHEpfSxBNS5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LEE1LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCxLKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgUT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxYPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPXUzKHRoaXMuX19iLFEsWC5fX089WC5fX1ApfXRoaXMuX19iPW51bGx9dmFyIFo9Sy5fX2EmJlIxKGUsbnVsbCwkLmZhbGxiYWNrKTtyZXR1cm4gWiYmKFouX191Jj0tMzMpLFtSMShlLG51bGwsSy5fX2E/bnVsbDokLmNoaWxkcmVuKSxaXX07dmFyIGgzPWZ1bmN0aW9uKCQsSyxRKXtpZigrK1FbMV09PT1RWzBdJiYkLmwuZGVsZXRlKEspLCQucHJvcHMucmV2ZWFsT3JkZXImJigkLnByb3BzLnJldmVhbE9yZGVyWzBdIT09InQifHwhJC5sLnNpemUpKWZvcihRPSQuaTtROyl7Zm9yKDtRLmxlbmd0aD4zOylRLnBvcCgpKCk7aWYoUVsxXTxRWzBdKWJyZWFrOyQuaT1RPVFbMl19fTsodzIucHJvdG90eXBlPW5ldyBTMSkuX19hPWZ1bmN0aW9uKCQpe3ZhciBLPXRoaXMsUT1kMyhLLl9fdiksWD1LLmwuZ2V0KCQpO3JldHVybiBYWzBdKyssZnVuY3Rpb24oWil7dmFyIFk9ZnVuY3Rpb24oKXtLLnByb3BzLnJldmVhbE9yZGVyPyhYLnB1c2goWiksaDMoSywkLFgpKTpaKCl9O1E/UShZKTpZKCl9fSx3Mi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciBLPVowKCQuY2hpbGRyZW4pOyQucmV2ZWFsT3JkZXImJiQucmV2ZWFsT3JkZXJbMF09PT0iYiImJksucmV2ZXJzZSgpO2Zvcih2YXIgUT1LLmxlbmd0aDtRLS07KXRoaXMubC5zZXQoS1tRXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gJC5jaGlsZHJlbn0sdzIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT13Mi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgJD10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKEssUSl7aDMoJCxRLEspfSl9O3ZhciBQNj10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyx3Nj0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sRTY9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyxJNj0vW0EtWjAtOV0vZyx5Nj10eXBlb2YgZG9jdW1lbnQ8InUiLGI2PWZ1bmN0aW9uKCQpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdCgkKX07ZnVuY3Rpb24gYzMoJCxLLFEpe3JldHVybiBLLl9faz09bnVsbCYmKEsudGV4dENvbnRlbnQ9IiIpLFAwKCQsSyksdHlwZW9mIFE9PSJmdW5jdGlvbiImJlEoKSwkPyQuX19jOm51bGx9UzEucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oJCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMxLnByb3RvdHlwZSwkLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbIlVOU0FGRV8iKyRdfSxzZXQ6ZnVuY3Rpb24oSyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsJCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkt9KX19KX0pO3ZhciBqMz1sLmV2ZW50O2wuZXZlbnQ9ZnVuY3Rpb24oJCl7cmV0dXJuIGozJiYoJD1qMygkKSksJC5wZXJzaXN0PWZ1bmN0aW9uKCl7fSwkLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSwkLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LCQubmF0aXZlRXZlbnQ9JH07dmFyIG8zLFM2PXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxtMz1sLnZub2RlO2wudm5vZGU9ZnVuY3Rpb24oJCl7dHlwZW9mICQudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKEspe3Zhcntwcm9wczpRLHR5cGU6WH09SyxaPXt9LFk9WC5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgcSBpbiBRKXt2YXIgRz1RW3FdO2lmKCEocT09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIFEpJiZHPT1udWxsfHx5NiYmcT09PSJjaGlsZHJlbiImJlg9PT0ibm9zY3JpcHQifHxxPT09ImNsYXNzInx8cT09PSJjbGFzc05hbWUiKSl7dmFyIEI9cS50b0xvd2VyQ2FzZSgpO3E9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluIFEmJlEudmFsdWU9PW51bGw/cT0idmFsdWUiOnE9PT0iZG93bmxvYWQiJiZHPT09ITA/Rz0iIjpCPT09InRyYW5zbGF0ZSImJkc9PT0ibm8iP0c9ITE6QlswXT09PSJvIiYmQlsxXT09PSJuIj9CPT09Im9uZG91YmxlY2xpY2siP3E9Im9uZGJsY2xpY2siOkIhPT0ib25jaGFuZ2UifHxYIT09ImlucHV0IiYmWCE9PSJ0ZXh0YXJlYSJ8fGI2KFEudHlwZSk/Qj09PSJvbmZvY3VzIj9xPSJvbmZvY3VzaW4iOkI9PT0ib25ibHVyIj9xPSJvbmZvY3Vzb3V0IjpFNi50ZXN0KHEpJiYocT1CKTpCPXE9Im9uaW5wdXQiOlkmJnc2LnRlc3QocSk/cT1xLnJlcGxhY2UoSTYsIi0kJiIpLnRvTG93ZXJDYXNlKCk6Rz09PW51bGwmJihHPXZvaWQgMCksQj09PSJvbmlucHV0IiYmWltxPUJdJiYocT0ib25pbnB1dENhcHR1cmUiKSxaW3FdPUd9fVg9PSJzZWxlY3QiJiYoWi5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShaLnZhbHVlKSYmKFoudmFsdWU9WjAoUS5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihWKXtWLnByb3BzLnNlbGVjdGVkPVoudmFsdWUuaW5kZXhPZihWLnByb3BzLnZhbHVlKSE9LTF9KSksWi5kZWZhdWx0VmFsdWUhPW51bGwmJihaLnZhbHVlPVowKFEuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oVil7Vi5wcm9wcy5zZWxlY3RlZD1aLm11bHRpcGxlP1ouZGVmYXVsdFZhbHVlLmluZGV4T2YoVi5wcm9wcy52YWx1ZSkhPS0xOlouZGVmYXVsdFZhbHVlPT1WLnByb3BzLnZhbHVlfSkpKSxRLmNsYXNzJiYhUS5jbGFzc05hbWU/KFouY2xhc3M9US5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkoWiwiY2xhc3NOYW1lIixTNikpOlEuY2xhc3NOYW1lJiYoWi5jbGFzcz1aLmNsYXNzTmFtZT1RLmNsYXNzTmFtZSksSy5wcm9wcz1afSgkKSwkLiQkdHlwZW9mPVA2LG0zJiZtMygkKX07dmFyIGYzPWwuX19yO2wuX19yPWZ1bmN0aW9uKCQpe2YzJiZmMygkKSxvMz0kLl9fY307dmFyIHAzPWwuZGlmZmVkO2wuZGlmZmVkPWZ1bmN0aW9uKCQpe3AzJiZwMygkKTt2YXJ7cHJvcHM6SyxfX2U6UX09JDtRIT1udWxsJiYkLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gSyYmSy52YWx1ZSE9PVEudmFsdWUmJihRLnZhbHVlPUsudmFsdWU9PW51bGw/IiI6Sy52YWx1ZSksbzM9bnVsbH07ZnVuY3Rpb24gYTMoJCl7cmV0dXJuISEkLl9fayYmKFAwKG51bGwsJCksITApfWZ1bmN0aW9uIHIzKCQpe3JldHVybntyZW5kZXI6ZnVuY3Rpb24oSyl7YzMoSywkKX0sdW5tb3VudDpmdW5jdGlvbigpe2EzKCQpfX19ZnVuY3Rpb24gSjgoJCxLKXtmb3IodmFyIFEgaW4gSykkW1FdPUtbUV07cmV0dXJuICR9ZnVuY3Rpb24gTzUoJCxLKXtmb3IodmFyIFEgaW4gJClpZihRIT09Il9fc291cmNlIiYmIShRIGluIEspKXJldHVybiEwO2Zvcih2YXIgWCBpbiBLKWlmKFghPT0iX19zb3VyY2UiJiYkW1hdIT09S1tYXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBpMygkLEspe3RoaXMucHJvcHM9JCx0aGlzLmNvbnRleHQ9S31mdW5jdGlvbiBFMCgkLEspe2Z1bmN0aW9uIFEoWil7dmFyIFk9dGhpcy5wcm9wcy5yZWY7cmV0dXJuIFkhPVoucmVmJiZZJiYodHlwZW9mIFk9PSJmdW5jdGlvbiI/WShudWxsKTpZLmN1cnJlbnQ9bnVsbCksSz8hSyh0aGlzLnByb3BzLFopfHxZIT1aLnJlZjpPNSh0aGlzLnByb3BzLFopfWZ1bmN0aW9uIFgoWil7cmV0dXJuIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPVEsUjEoJCxaKX1yZXR1cm4gWC5kaXNwbGF5TmFtZT0iTWVtbygiKygkLmRpc3BsYXlOYW1lfHwkLm5hbWUpKyIpIixYLl9fZj1YLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFgudHlwZT0kLFh9KGkzLnByb3RvdHlwZT1uZXcgUzEpLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLGkzLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oJCxLKXtyZXR1cm4gTzUodGhpcy5wcm9wcywkKXx8TzUodGhpcy5zdGF0ZSxLKX07dmFyIG4zPWwuX19iO2wuX19iPWZ1bmN0aW9uKCQpeyQudHlwZSYmJC50eXBlLl9fZiYmJC5yZWYmJigkLnByb3BzLnJlZj0kLnJlZiwkLnJlZj1udWxsKSxuMyYmbjMoJCl9O3ZhciBSNj10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKXx8MzkxMTtmdW5jdGlvbiBpMSgkKXtmdW5jdGlvbiBLKFEpe3ZhciBYPUo4KHt9LFEpO3JldHVybiBkZWxldGUgWC5yZWYsJChYLFEucmVmfHxudWxsKX1yZXR1cm4gSy4kJHR5cGVvZj1SNixLLnJlbmRlcj0kLEsucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9Sy5fX2Y9ITAsSy5kaXNwbGF5TmFtZT0iRm9yd2FyZFJlZigiKygkLmRpc3BsYXlOYW1lfHwkLm5hbWUpKyIpIixLfXZhciB4Nj1sLl9fZTtsLl9fZT1mdW5jdGlvbigkLEssUSxYKXtpZigkLnRoZW4pe2Zvcih2YXIgWixZPUs7WT1ZLl9fOylpZigoWj1ZLl9fYykmJlouX19jKXJldHVybiBLLl9fZT09bnVsbCYmKEsuX19lPVEuX19lLEsuX19rPVEuX19rKSxaLl9fYygkLEspfXg2KCQsSyxRLFgpfTt2YXIgczM9bC51bm1vdW50O2Z1bmN0aW9uIFg4KCQsSyxRKXtyZXR1cm4gJCYmKCQuX19jJiYkLl9fYy5fX0gmJigkLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihYKXt0eXBlb2YgWC5fX2M9PSJmdW5jdGlvbiImJlguX19jKCl9KSwkLl9fYy5fX0g9bnVsbCksKCQ9Sjgoe30sJCkpLl9fYyE9bnVsbCYmKCQuX19jLl9fUD09PVEmJigkLl9fYy5fX1A9SyksJC5fX2MuX19lPSEwLCQuX19jPW51bGwpLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWCl7cmV0dXJuIFg4KFgsSyxRKX0pKSwkfWZ1bmN0aW9uIFo4KCQsSyxRKXtyZXR1cm4gJCYmUSYmKCQuX192PW51bGwsJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihYKXtyZXR1cm4gWjgoWCxLLFEpfSksJC5fX2MmJiQuX19jLl9fUD09PUsmJigkLl9fZSYmUS5hcHBlbmRDaGlsZCgkLl9fZSksJC5fX2MuX19lPSEwLCQuX19jLl9fUD1RKSksJH1mdW5jdGlvbiBrNSgpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBZOCgkKXt2YXIgSz0kLl9fJiYkLl9fLl9fYztyZXR1cm4gSyYmSy5fX2EmJksuX19hKCQpfWZ1bmN0aW9uIEUyKCl7dGhpcy5pPW51bGwsdGhpcy5sPW51bGx9bC51bm1vdW50PWZ1bmN0aW9uKCQpe3ZhciBLPSQuX19jO0smJihLLl9fej0hMCksSyYmSy5fX1ImJksuX19SKCksSyYmMzImJC5fX3UmJigkLnR5cGU9bnVsbCksczMmJnMzKCQpfSwoazUucHJvdG90eXBlPW5ldyBTMSkuX19jPWZ1bmN0aW9uKCQsSyl7dmFyIFE9Sy5fX2MsWD10aGlzO1gubz09bnVsbCYmKFgubz1bXSksWC5vLnB1c2goUSk7dmFyIFo9WTgoWC5fX3YpLFk9ITEscT1mdW5jdGlvbigpe1l8fFguX196fHwoWT0hMCxRLl9fUj1udWxsLFo/WihCKTpCKCkpfTtRLl9fUj1xO3ZhciBHPVEuX19QO1EuX19QPW51bGw7dmFyIEI9ZnVuY3Rpb24oKXtpZighLS1YLl9fdSl7aWYoWC5zdGF0ZS5fX2Epe3ZhciBWPVguc3RhdGUuX19hO1guX192Ll9fa1swXT1aOChWLFYuX19jLl9fUCxWLl9fYy5fX08pfXZhciBDO2ZvcihYLnNldFN0YXRlKHtfX2E6WC5fX2I9bnVsbH0pO0M9WC5vLnBvcCgpOylDLl9fUD1HLEMuZm9yY2VVcGRhdGUoKX19O1guX191Kyt8fDMyJksuX191fHxYLnNldFN0YXRlKHtfX2E6WC5fX2I9WC5fX3YuX19rWzBdfSksJC50aGVuKHEscSl9LGs1LnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMubz1bXX0sazUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkLEspe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciBRPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFg9dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09WDgodGhpcy5fX2IsUSxYLl9fTz1YLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgWj1LLl9fYSYmUjEoZSxudWxsLCQuZmFsbGJhY2spO3JldHVybiBaJiYoWi5fX3UmPS0zMyksW1IxKGUsbnVsbCxLLl9fYT9udWxsOiQuY2hpbGRyZW4pLFpdfTt2YXIgdDM9ZnVuY3Rpb24oJCxLLFEpe2lmKCsrUVsxXT09PVFbMF0mJiQubC5kZWxldGUoSyksJC5wcm9wcy5yZXZlYWxPcmRlciYmKCQucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCEkLmwuc2l6ZSkpZm9yKFE9JC5pO1E7KXtmb3IoO1EubGVuZ3RoPjM7KVEucG9wKCkoKTtpZihRWzFdPFFbMF0pYnJlYWs7JC5pPVE9UVsyXX19O2Z1bmN0aW9uIHY2KCQpe3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiAkLmNvbnRleHR9LCQuY2hpbGRyZW59ZnVuY3Rpb24gZzYoJCl7dmFyIEs9dGhpcyxRPSQuaDtpZihLLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7UDAobnVsbCxLLnYpLEsudj1udWxsLEsuaD1udWxsfSxLLmgmJksuaCE9PVEmJksuY29tcG9uZW50V2lsbFVubW91bnQoKSwhSy52KXtmb3IodmFyIFg9Sy5fX3Y7WCE9PW51bGwmJiFYLl9fbSYmWC5fXyE9PW51bGw7KVg9WC5fXztLLmg9USxLLnY9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpRLGNoaWxkTm9kZXM6W10sX19rOntfX206WC5fX219LGNvbnRhaW5zOmZ1bmN0aW9uKCl7cmV0dXJuITB9LG5hbWVzcGFjZVVSSTpRLm5hbWVzcGFjZVVSSSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oWixZKXt0aGlzLmNoaWxkTm9kZXMucHVzaChaKSxLLmguaW5zZXJ0QmVmb3JlKFosWSl9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKFope3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoWik+Pj4xLDEpLEsuaC5yZW1vdmVDaGlsZChaKX19fVAwKFIxKHY2LHtjb250ZXh0OksuY29udGV4dH0sJC5fX3YpLEsudil9ZnVuY3Rpb24gcTgoJCxLKXt2YXIgUT1SMShnNix7X192OiQsaDpLfSk7cmV0dXJuIFEuY29udGFpbmVySW5mbz1LLFF9KEUyLnByb3RvdHlwZT1uZXcgUzEpLl9fYT1mdW5jdGlvbigkKXt2YXIgSz10aGlzLFE9WTgoSy5fX3YpLFg9Sy5sLmdldCgkKTtyZXR1cm4gWFswXSsrLGZ1bmN0aW9uKFope3ZhciBZPWZ1bmN0aW9uKCl7Sy5wcm9wcy5yZXZlYWxPcmRlcj8oWC5wdXNoKFopLHQzKEssJCxYKSk6WigpfTtRP1EoWSk6WSgpfX0sRTIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgSz1aMCgkLmNoaWxkcmVuKTskLnJldmVhbE9yZGVyJiYkLnJldmVhbE9yZGVyWzBdPT09ImIiJiZLLnJldmVyc2UoKTtmb3IodmFyIFE9Sy5sZW5ndGg7US0tOyl0aGlzLmwuc2V0KEtbUV0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuICQuY2hpbGRyZW59LEUyLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9RTIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyICQ9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbihLLFEpe3QzKCQsUSxLKX0pfTt2YXIgaDY9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsajY9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLG02PS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sZjY9L1tBLVowLTldL2cscDY9dHlwZW9mIGRvY3VtZW50PCJ1Iix1Nj1mdW5jdGlvbigkKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoJCl9O1MxLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFsiY29tcG9uZW50V2lsbE1vdW50IiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsImNvbXBvbmVudFdpbGxVcGRhdGUiXS5mb3JFYWNoKGZ1bmN0aW9uKCQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShTMS5wcm90b3R5cGUsJCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzWyJVTlNBRkVfIiskXX0sc2V0OmZ1bmN0aW9uKEspe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpLfSl9fSl9KTt2YXIgZTM9bC5ldmVudDtsLmV2ZW50PWZ1bmN0aW9uKCQpe3JldHVybiBlMyYmKCQ9ZTMoJCkpLCQucGVyc2lzdD1mdW5jdGlvbigpe30sJC5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX0sJC5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfSwkLm5hdGl2ZUV2ZW50PSR9O3ZhciBHOCxsNj17Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0sJDg9bC52bm9kZTtsLnZub2RlPWZ1bmN0aW9uKCQpe3R5cGVvZiAkLnR5cGU9PSJzdHJpbmciJiZmdW5jdGlvbihLKXt2YXJ7cHJvcHM6USx0eXBlOlh9PUssWj17fSxZPVguaW5kZXhPZigiLSIpPT0tMTtmb3IodmFyIHEgaW4gUSl7dmFyIEc9UVtxXTtpZighKHE9PT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBRKSYmRz09bnVsbHx8cDYmJnE9PT0iY2hpbGRyZW4iJiZYPT09Im5vc2NyaXB0Inx8cT09PSJjbGFzcyJ8fHE9PT0iY2xhc3NOYW1lIikpe3ZhciBCPXEudG9Mb3dlckNhc2UoKTtxPT09ImRlZmF1bHRWYWx1ZSImJiJ2YWx1ZSJpbiBRJiZRLnZhbHVlPT1udWxsP3E9InZhbHVlIjpxPT09ImRvd25sb2FkIiYmRz09PSEwP0c9IiI6Qj09PSJ0cmFuc2xhdGUiJiZHPT09Im5vIj9HPSExOkJbMF09PT0ibyImJkJbMV09PT0ibiI/Qj09PSJvbmRvdWJsZWNsaWNrIj9xPSJvbmRibGNsaWNrIjpCIT09Im9uY2hhbmdlInx8WCE9PSJpbnB1dCImJlghPT0idGV4dGFyZWEifHx1NihRLnR5cGUpP0I9PT0ib25mb2N1cyI/cT0ib25mb2N1c2luIjpCPT09Im9uYmx1ciI/cT0ib25mb2N1c291dCI6bTYudGVzdChxKSYmKHE9Qik6Qj1xPSJvbmlucHV0IjpZJiZqNi50ZXN0KHEpP3E9cS5yZXBsYWNlKGY2LCItJCYiKS50b0xvd2VyQ2FzZSgpOkc9PT1udWxsJiYoRz12b2lkIDApLEI9PT0ib25pbnB1dCImJlpbcT1CXSYmKHE9Im9uaW5wdXRDYXB0dXJlIiksWltxXT1HfX1YPT0ic2VsZWN0IiYmKFoubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkoWi52YWx1ZSkmJihaLnZhbHVlPVowKFEuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oVil7Vi5wcm9wcy5zZWxlY3RlZD1aLnZhbHVlLmluZGV4T2YoVi5wcm9wcy52YWx1ZSkhPS0xfSkpLFouZGVmYXVsdFZhbHVlIT1udWxsJiYoWi52YWx1ZT1aMChRLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKFYpe1YucHJvcHMuc2VsZWN0ZWQ9Wi5tdWx0aXBsZT9aLmRlZmF1bHRWYWx1ZS5pbmRleE9mKFYucHJvcHMudmFsdWUpIT0tMTpaLmRlZmF1bHRWYWx1ZT09Vi5wcm9wcy52YWx1ZX0pKSksUS5jbGFzcyYmIVEuY2xhc3NOYW1lPyhaLmNsYXNzPVEuY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KFosImNsYXNzTmFtZSIsbDYpKTpRLmNsYXNzTmFtZSYmKFouY2xhc3M9Wi5jbGFzc05hbWU9US5jbGFzc05hbWUpLEsucHJvcHM9Wn0oJCksJC4kJHR5cGVvZj1oNiwkOCYmJDgoJCl9O3ZhciBLOD1sLl9fcjtsLl9fcj1mdW5jdGlvbigkKXtLOCYmSzgoJCksRzg9JC5fX2N9O3ZhciBROD1sLmRpZmZlZDtsLmRpZmZlZD1mdW5jdGlvbigkKXtROCYmUTgoJCk7dmFye3Byb3BzOkssX19lOlF9PSQ7USE9bnVsbCYmJC50eXBlPT09InRleHRhcmVhIiYmInZhbHVlImluIEsmJksudmFsdWUhPT1RLnZhbHVlJiYoUS52YWx1ZT1LLnZhbHVlPT1udWxsPyIiOksudmFsdWUpLEc4PW51bGx9O3ZhciBJMD0zO2Z1bmN0aW9uIEQ1KCQpe3JldHVybiAkPj0wLjkzPzM6dm9pZCAwfWZ1bmN0aW9uIE01KCQpe3JldHVybiAkPT09ImxhbmRzY2FwZV9sZWZ0Inx8JD09PSJsYW5kc2NhcGVfcmlnaHQifWZ1bmN0aW9uIHkwKCQpe3JldHVybiEhJCYmKE01KCQub3JpZW50YXRpb24pfHwkLndpZHRoPiQuaGVpZ2h0KX1mdW5jdGlvbiBiMCgkKXtpZighJHx8JC53aWR0aDw9MHx8JC5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0IEs9TTUoJC5vcmllbnRhdGlvbil8fCQud2lkdGg+JC5oZWlnaHQsUT1LP01hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpOk1hdGgubWluKCQud2lkdGgsJC5oZWlnaHQpLFg9Sz9NYXRoLm1pbigkLndpZHRoLCQuaGVpZ2h0KTpNYXRoLm1heCgkLndpZHRoLCQuaGVpZ2h0KTtpZihRPT09JC53aWR0aCYmWD09PSQuaGVpZ2h0KXJldHVybiAkO3JldHVybnsuLi4kLHdpZHRoOlEsaGVpZ2h0Olh9fWZ1bmN0aW9uIGEwKCQpe2xldCBLPWIwKCQpLFE9VjgoJD8ub3JpZW50YXRpb24pLFg9TWF0aC5hYnMoUSk9PT05MCxaPSEhJCYmJC53aWR0aD4kLmhlaWdodCxZPVE9PT0xODB8fFgmJiFaO3JldHVybntkaXNwbGF5Q29uZmlnOksscm90YXRpb25EZWdyZWVzOlk/UTowLG5lZWRzQ3NzUm90YXRpb246WSxpbnB1dE9yaWVudGF0aW9uOlk/JD8ub3JpZW50YXRpb246dm9pZCAwfX1mdW5jdGlvbiBWOCgkKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJuIDkwO2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm4tOTA7Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJuIDE4MDtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiByMCgkLEssUSl7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybnt4OlEseToxLUt9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57eDoxLVEseTpLfTtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm57eDoxLUsseToxLVF9O2RlZmF1bHQ6cmV0dXJue3g6Syx5OlF9fX1mdW5jdGlvbiBXNSgkLEspe3N3aXRjaCgkKXtjYXNlImxhbmRzY2FwZV9sZWZ0Ijpzd2l0Y2goSyl7Y2FzZSAxOnJldHVybiAzO2Nhc2UgNDpyZXR1cm4gMjtjYXNlIDI6cmV0dXJuIDE7Y2FzZSAzOnJldHVybiA0O2RlZmF1bHQ6cmV0dXJuIEt9Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnN3aXRjaChLKXtjYXNlIDE6cmV0dXJuIDI7Y2FzZSA0OnJldHVybiAzO2Nhc2UgMjpyZXR1cm4gNDtjYXNlIDM6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gS31jYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpzd2l0Y2goSyl7Y2FzZSAxOnJldHVybiA0O2Nhc2UgNDpyZXR1cm4gMTtjYXNlIDI6cmV0dXJuIDM7Y2FzZSAzOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIEt9ZGVmYXVsdDpyZXR1cm4gS319ZnVuY3Rpb24gQjgoJCxLLFEpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCkpcmV0dXJuIG51bGw7bGV0IFg9TnVtYmVyLmlzRmluaXRlKFEpJiZRPjA/UToxLFo9Sz09PTE/JCoxNjpLPT09Mj8kKlg6JCxZPU1hdGgubWF4KC0yMDAsTWF0aC5taW4oMjAwLFopKTtyZXR1cm4gTWF0aC5hYnMoWSk8MC4wMT9udWxsOll9dmFyIGQ2PXtbMV06ImRlc2NyaXB0aW9uIixbMl06ImtleWZyYW1lIixbM106ImRlbHRhIixbNF06InNlZWQifTtjbGFzcyBJMntidWZmZXI9bmV3IFVpbnQ4QXJyYXkoMCk7cHVzaCgkKXtpZigkLmxlbmd0aD4wKXtsZXQgWD1uZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlci5sZW5ndGgrJC5sZW5ndGgpO1guc2V0KHRoaXMuYnVmZmVyKSxYLnNldCgkLHRoaXMuYnVmZmVyLmxlbmd0aCksdGhpcy5idWZmZXI9WH1sZXQgSz1bXSxRPTA7d2hpbGUodGhpcy5idWZmZXIubGVuZ3RoLVE+PTQpe2xldCBaPW5ldyBEYXRhVmlldyh0aGlzLmJ1ZmZlci5idWZmZXIsdGhpcy5idWZmZXIuYnl0ZU9mZnNldCtRLDQpLmdldFVpbnQzMigwLCExKTtpZih0aGlzLmJ1ZmZlci5sZW5ndGgtUS00PFopYnJlYWs7aWYoWjwxKXtRKz00O2NvbnRpbnVlfWxldCBZPXRoaXMuYnVmZmVyW1ErNF0scT10aGlzLmJ1ZmZlci5zbGljZShRKzUsUSs0K1opLEc9ZDZbWV07aWYoRylLLnB1c2goe3R5cGU6RyxwYXlsb2FkOnF9KTtRKz00K1p9cmV0dXJuIHRoaXMuYnVmZmVyPVE9PT0wP3RoaXMuYnVmZmVyOnRoaXMuYnVmZmVyLnNsaWNlKFEpLEt9cmVzZXQoKXt0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgwKX19ZnVuY3Rpb24gVDUoJCl7aWYoJC5sZW5ndGg8NClyZXR1cm4iYXZjMS40MkUwMUUiO2xldCBLPShRKT0+US50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpO3JldHVybiJhdmMxLiIrSygkWzFdKStLKCRbMl0pK0soJFszXSl9ZnVuY3Rpb24gSDAoKXtyZXR1cm4gdHlwZW9mIGdsb2JhbFRoaXM8InUiJiZ0eXBlb2YgZ2xvYmFsVGhpcy5WaWRlb0RlY29kZXI8InUifXZhciBjNj0xMDAwLG82PTE2NjY3O2Z1bmN0aW9uIFA1KHt1cmw6JCxlbmFibGVkOkssY2FudmFzUmVmOlEsb25GaXJzdEZyYW1lOlgsb25GcmFtZTpaLG9uRXJyb3I6WX0pe2xldCBxPVMoe29uRmlyc3RGcmFtZTpYLG9uRnJhbWU6WixvbkVycm9yOll9KTtxLmN1cnJlbnQ9e29uRmlyc3RGcmFtZTpYLG9uRnJhbWU6WixvbkVycm9yOll9LEkoKCk9PntpZighS3x8ISR8fCFIMCgpKXJldHVybjtsZXQgRz1uZXcgQWJvcnRDb250cm9sbGVyLEI9bmV3IEkyLFY9ITEsQz0hMSxMPTAsRj1udWxsLE49bnVsbCxfPSgpPT4hViYmIUcuc2lnbmFsLmFib3J0ZWQsej0obSxSLG8pPT57aWYoIV8oKSlyZXR1cm47bGV0IGk9US5jdXJyZW50O2lmKCFpKXJldHVybjtpZihpLndpZHRoIT09Unx8aS5oZWlnaHQhPT1vKWkud2lkdGg9UixpLmhlaWdodD1vO2xldCBYMT1pLmdldENvbnRleHQoIjJkIik7aWYoIVgxKXJldHVybjtpZihYMS5kcmF3SW1hZ2UobSwwLDAsUixvKSxxLmN1cnJlbnQub25GcmFtZT8uKCksIUMpQz0hMCxxLmN1cnJlbnQub25GaXJzdEZyYW1lPy4oKX0sVT0oKT0+bmV3IFZpZGVvRGVjb2Rlcih7b3V0cHV0OihtKT0+e3RyeXtpZihfKCkpeihtLG0uZGlzcGxheVdpZHRoLG0uZGlzcGxheUhlaWdodCl9ZmluYWxseXttLmNsb3NlKCl9fSxlcnJvcjoobSk9PnEuY3VycmVudC5vbkVycm9yPy4oYGRlY29kZXI6ICR7bS5tZXNzYWdlfWApfSksQT1hc3luYyhtKT0+e2xldCBSPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKG5ldyBCbG9iKFttXSx7dHlwZToiaW1hZ2UvanBlZyJ9KSk7dHJ5e2lmKF8oKSl6KFIsUi53aWR0aCxSLmhlaWdodCl9ZmluYWxseXtSLmNsb3NlKCl9fSxNPShtKT0+e2lmKCFOfHxOLnN0YXRlPT09ImNsb3NlZCIpTj1VKCk7dHJ5e04uY29uZmlndXJlKHtjb2RlYzpUNShtKSxkZXNjcmlwdGlvbjptLG9wdGltaXplRm9yOiJsYXRlbmN5IixoYXJkd2FyZUFjY2VsZXJhdGlvbjoicHJlZmVyLWhhcmR3YXJlIn0pfWNhdGNoKFIpe3EuY3VycmVudC5vbkVycm9yPy4oYGNvbmZpZzogJHtSLm1lc3NhZ2V9YCl9fSxFPShtLFIpPT57aWYoTj8uc3RhdGUhPT0iY29uZmlndXJlZCIpcmV0dXJuO3RyeXtOLmRlY29kZShuZXcgRW5jb2RlZFZpZGVvQ2h1bmsoe3R5cGU6bT09PSJrZXlmcmFtZSI/ImtleSI6ImRlbHRhIix0aW1lc3RhbXA6TCxkYXRhOlJ9KSksTCs9bzZ9Y2F0Y2h7fX0sVD0obSxSKT0+e3N3aXRjaChtKXtjYXNlInNlZWQiOkEoUikuY2F0Y2goKCk9Pnt9KTtyZXR1cm47Y2FzZSJkZXNjcmlwdGlvbiI6TShSKTtyZXR1cm47Y2FzZSJrZXlmcmFtZSI6Y2FzZSJkZWx0YSI6RShtLFIpO3JldHVybn19LGI9KCk9PntpZighXygpfHxGKXJldHVybjtGPXNldFRpbWVvdXQoKCk9PntGPW51bGwseCgpfSxjNil9LHg9YXN5bmMoKT0+e0IucmVzZXQoKTt0cnl7bGV0IFI9KGF3YWl0IGZldGNoKGAkeyR9L3N0cmVhbS5hdmNjYCx7c2lnbmFsOkcuc2lnbmFsfSkpLmJvZHk/LmdldFJlYWRlcigpO2lmKCFSKXJldHVybjtmb3IoOzspe2xldHtkb25lOm8sdmFsdWU6aX09YXdhaXQgUi5yZWFkKCk7aWYobylicmVhaztpZighaSljb250aW51ZTtmb3IobGV0IFgxIG9mIEIucHVzaChpKSlUKFgxLnR5cGUsWDEucGF5bG9hZCl9fWNhdGNoe31maW5hbGx5e2lmKF8oKSliKCl9fTtyZXR1cm4geCgpLCgpPT57aWYoVj0hMCxGKWNsZWFyVGltZW91dChGKTtpZihHLmFib3J0KCksQi5yZXNldCgpLE4mJk4uc3RhdGUhPT0iY2xvc2VkIil0cnl7Ti5jbG9zZSgpfWNhdGNoe31OPW51bGx9fSxbJCxLLFFdKX12YXIgYTY9MDtmdW5jdGlvbiBKKCQsSyxRLFgsWixZKXtLfHwoSz17fSk7dmFyIHEsRyxCPUs7aWYoInJlZiJpbiBCKWZvcihHIGluIEI9e30sSylHPT0icmVmIj9xPUtbR106QltHXT1LW0ddO3ZhciBWPXt0eXBlOiQscHJvcHM6QixrZXk6USxyZWY6cSxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS1hNixfX2k6LTEsX191OjAsX19zb3VyY2U6WixfX3NlbGY6WX07aWYodHlwZW9mICQ9PSJmdW5jdGlvbiImJihxPSQuZGVmYXVsdFByb3BzKSlmb3IoRyBpbiBxKUJbR109PT12b2lkIDAmJihCW0ddPXFbR10pO3JldHVybiBsLnZub2RlJiZsLnZub2RlKFYpLFZ9dmFyIE44PWB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPSc5JyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpJyBzdHJva2U9J3JnYmEoMCwwLDAsMC41NSknIHN0cm9rZS13aWR0aD0nMS4yNScgZmlsdGVyPSdkcm9wLXNoYWRvdygwIDFweCAycHggcmdiYSgwLDAsMCwwLjQ1KSknLyUzRSUzQy9zdmclM0UiKSAxMiAxMiwgcG9pbnRlcmAscjY9MS4wMDQsaTY9MyxuNj00LHM2PTUsdDY9MTA7ZnVuY3Rpb24geTIoe3VybDokLHdzVXJsOkssc3R5bGU6USxpbWFnZVN0eWxlOlgsY2xhc3NOYW1lOlosb25Ib21lUHJlc3M6WSxvblN0cmVhbVRvdWNoOnEsb25TdHJlYW1NdWx0aVRvdWNoOkcsb25TdHJlYW1CdXR0b246QixvblN0cmVhbURpZ2l0YWxDcm93bjpWLGVuYWJsZURpZ2l0YWxDcm93bjpDLHN1YnNjcmliZUZyYW1lOkwsc3RyZWFtRnJhbWU6RixzdHJlYW1Db25maWc6TixvblNjcmVlbkNvbmZpZ0NoYW5nZTpfLGhpZGVDb250cm9sczp6LG9uU3RyZWFtaW5nQ2hhbmdlOlUsY29ubmVjdGlvblF1YWxpdHk6QSxjb2RlYzpNPSJhdmNjIn0pe2xldCBFPSEhcSxUPU09PT0iYXZjYyImJkgwKCksYj1TKG51bGwpLHg9UyhudWxsKSxtPVMobnVsbCksUj1TKG51bGwpLG89UyhudWxsKSxpPVMobnVsbCksW1gxLCQxXT1EKCExKSxbcyxMMV09RChudWxsKSxbZCxhXT1EKG51bGwpLEsxPVMobnVsbCksWTE9UyhfKTtZMS5jdXJyZW50PV87bGV0IFYxPVMobnVsbCksW2MsUTFdPUQobnVsbCk7SSgoKT0+e2xldCBXPVYxLmN1cnJlbnQ7aWYoIVd8fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCBPPW5ldyBSZXNpemVPYnNlcnZlcigoeSk9PntsZXQgZj15WzBdPy5jb250ZW50UmVjdDtpZihmKVExKHt3aWR0aDpmLndpZHRoLGhlaWdodDpmLmhlaWdodH0pfSk7cmV0dXJuIE8ub2JzZXJ2ZShXKSwoKT0+Ty5kaXNjb25uZWN0KCl9LFtdKTtsZXRbVTEsdV09RCgwKSxqPVMoMCksW2ssdl09RCghMSkscD1TKG51bGwpO0koKCk9PntpZihBPT09InBvb3IiKXtpZih2KCEwKSxwLmN1cnJlbnQpY2xlYXJUaW1lb3V0KHAuY3VycmVudCk7cC5jdXJyZW50PXNldFRpbWVvdXQoKCk9Pnt2KCExKSxwLmN1cnJlbnQ9bnVsbH0sMzAwMCl9ZWxzZSBpZih2KCExKSxwLmN1cnJlbnQpY2xlYXJUaW1lb3V0KHAuY3VycmVudCkscC5jdXJyZW50PW51bGw7cmV0dXJuKCk9PntpZihwLmN1cnJlbnQpY2xlYXJUaW1lb3V0KHAuY3VycmVudCl9fSxbQV0pO2xldCBxMT1gJHskfS9zdHJlYW0ubWpwZWdgO0koKCk9PntLMS5jdXJyZW50PW51bGwsYShudWxsKX0sWyRdKTtsZXQgTjE9UCgoVyk9PntpZighV3x8Vy53aWR0aDw9MHx8Vy5oZWlnaHQ8PTApcmV0dXJuO2xldCBPPUsxLmN1cnJlbnQseT1XLm9yaWVudGF0aW9uPT09dm9pZCAwJiZPPy5vcmllbnRhdGlvbj97Li4uVyxvcmllbnRhdGlvbjpPLm9yaWVudGF0aW9ufTpXO2lmKE8mJk8ud2lkdGg9PT15LndpZHRoJiZPLmhlaWdodD09PXkuaGVpZ2h0JiZPLm9yaWVudGF0aW9uPT09eS5vcmllbnRhdGlvbilyZXR1cm47SzEuY3VycmVudD15LGEoeSksWTEuY3VycmVudD8uKHkpfSxbXSksXzE9UyhVKTtfMS5jdXJyZW50PVUsSSgoKT0+e18xLmN1cnJlbnQ/LihYMSl9LFtYMV0pLEkoKCk9PntpZihFJiZOKU4xKE4pfSxbRSxOLE4xXSk7bGV0IHgxPVMoITEpO3gxLmN1cnJlbnQ9WDE7bGV0IFQxPVMobnVsbCksaDE9UyhudWxsKTtJKCgpPT57aWYoIUV8fCFMfHxUKXJldHVybjtsZXQgTz1zZXRUaW1lb3V0KCgpPT57aWYoIXgxLmN1cnJlbnQpTDEoIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKSx5PXJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiByKCl7bGV0IHQ9VDEuY3VycmVudDtpZih0KXtUMS5jdXJyZW50PW51bGw7bGV0IHoxPW0uY3VycmVudDtpZih6MSl7aWYoaDEuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKGgxLmN1cnJlbnQpO2gxLmN1cnJlbnQ9dCx6MS5zcmM9dCxqLmN1cnJlbnQrK31lbHNlIFVSTC5yZXZva2VPYmplY3RVUkwodCl9eT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocil9KSxmPUwoKHIpPT57aWYoWTAuY3VycmVudD1EYXRlLm5vdygpLFQxLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChUMS5jdXJyZW50KTtpZihUMS5jdXJyZW50PXIsIXgxLmN1cnJlbnQpY2xlYXJUaW1lb3V0KE8pLCQxKCEwKSxMMShudWxsKX0pO3JldHVybigpPT57aWYoY2xlYXJUaW1lb3V0KE8pLGNhbmNlbEFuaW1hdGlvbkZyYW1lKHkpLGY/LigpLFQxLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChUMS5jdXJyZW50KSxUMS5jdXJyZW50PW51bGw7aWYoaDEuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKGgxLmN1cnJlbnQpLGgxLmN1cnJlbnQ9bnVsbH19LFtFLEwsVF0pO2xldCB2MT1QKCgpPT57WTAuY3VycmVudD1EYXRlLm5vdygpLCQxKCEwKSxMMShudWxsKX0sW10pLGMxPVAoKCk9PntpZihqLmN1cnJlbnQrKyxZMC5jdXJyZW50PURhdGUubm93KCksIXgxLmN1cnJlbnQpJDEoITApLEwxKG51bGwpfSxbXSk7UDUoe3VybDokLGVuYWJsZWQ6VCxjYW52YXNSZWY6eCxvbkZpcnN0RnJhbWU6djEsb25GcmFtZTpjMSxvbkVycm9yOkwxfSk7bGV0IEkxPVAoKFcpPT57bGV0IE89YTAoSzEuY3VycmVudCkuaW5wdXRPcmllbnRhdGlvbix5PXIwKE8sVy54LFcueSksZj1XLmVkZ2U9PT12b2lkIDA/dm9pZCAwOlc1KE8sVy5lZGdlKSxyPWY9PT12b2lkIDA/e3R5cGU6Vy50eXBlLC4uLnl9Ont0eXBlOlcudHlwZSwuLi55LGVkZ2U6Zn07aWYoRSl7cT8uKHIpO3JldHVybn1sZXQgdD1pLmN1cnJlbnQ7aWYoIXR8fHQucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgejE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHIpKSxEMT1uZXcgVWludDhBcnJheSgxK3oxLmxlbmd0aCk7RDFbMF09aTYsRDEuc2V0KHoxLDEpLHQuc2VuZChEMSl9LFtFLHFdKSxvMT1QKChXKT0+e2lmKEUpe0I/LihXKTtyZXR1cm59bGV0IE89aS5jdXJyZW50O2lmKCFPfHxPLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IHk9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHtidXR0b246V30pKSxmPW5ldyBVaW50OEFycmF5KDEreS5sZW5ndGgpO2ZbMF09bjYsZi5zZXQoeSwxKSxPLnNlbmQoZil9LFtFLEJdKSxhMT1QKChXKT0+e2lmKCFOdW1iZXIuaXNGaW5pdGUoVyl8fFc9PT0wKXJldHVybjtpZihFKXtWPy4oVyk7cmV0dXJufWxldCBPPWkuY3VycmVudDtpZighT3x8Ty5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCB5PW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh7ZGVsdGE6V30pKSxmPW5ldyBVaW50OEFycmF5KDEreS5sZW5ndGgpO2ZbMF09dDYsZi5zZXQoeSwxKSxPLnNlbmQoZil9LFtFLFZdKSx5MT1QKChXKT0+e2xldCBPPWEwKEsxLmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24seT1yMChPLFcueDEsVy55MSksZj1yMChPLFcueDIsVy55Mikscj17dHlwZTpXLnR5cGUseDE6eS54LHkxOnkueSx4MjpmLngseTI6Zi55fTtpZihFKXtHPy4ocik7cmV0dXJufWxldCB0PWkuY3VycmVudDtpZighdHx8dC5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCB6MT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkocikpLEQxPW5ldyBVaW50OEFycmF5KDErejEubGVuZ3RoKTtEMVswXT1zNixEMS5zZXQoejEsMSksdC5zZW5kKEQxKX0sW0UsR10pO0koKCk9PntpZihFKXJldHVybjtsZXQgVz1LPz8kLnJlcGxhY2UoL15odHRwLywid3MiKSsiL3dzIixPPW5ldyBXZWJTb2NrZXQoVyk7Ty5iaW5hcnlUeXBlPSJhcnJheWJ1ZmZlciIsaS5jdXJyZW50PU8sTy5vbm1lc3NhZ2U9KHoxKT0+e2lmKCEoejEuZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm47bGV0IEQxPW5ldyBVaW50OEFycmF5KHoxLmRhdGEpO2lmKEQxLmxlbmd0aDwxfHxEMVswXSE9PTEzMClyZXR1cm47dHJ5e04xKEpTT04ucGFyc2UobmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKEQxLnN1YmFycmF5KDEpKSkpfWNhdGNoe319LE8ub25vcGVuPSgpPT57aWYoIVQpJDEoITApO0wxKG51bGwpfSxPLm9uY2xvc2U9KCk9PnskMSghMSl9LE8ub25lcnJvcj0oKT0+e0wxKCJXZWJTb2NrZXQgY29ubmVjdGlvbiBmYWlsZWQiKSwkMSghMSl9O2xldCB5PW5ldyBBYm9ydENvbnRyb2xsZXIsZj1zZXRJbnRlcnZhbCgoKT0+e3Uoai5jdXJyZW50KSxqLmN1cnJlbnQ9MH0sMTAwMCkscj0hMSx0PVQ/bnVsbDpzZXRUaW1lb3V0KCgpPT57aWYoIXIpTDEoIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKTtpZighVCkoYXN5bmMoKT0+e3RyeXtsZXQgRDE9KGF3YWl0IGZldGNoKHExLHtzaWduYWw6eS5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIUQxKXJldHVybjtsZXQgQjA9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCItLWZyYW1lIik7d2hpbGUoITApe2xldHtkb25lOkI2LHZhbHVlOlg1fT1hd2FpdCBEMS5yZWFkKCk7aWYoQjYpYnJlYWs7aWYoWDUpZm9yKGxldCBaNT0wO1o1PD1YNS5sZW5ndGgtQjAubGVuZ3RoO1o1Kyspe2xldCBHMz0hMDtmb3IobGV0IEgyPTA7SDI8QjAubGVuZ3RoO0gyKyspaWYoWDVbWjUrSDJdIT09QjBbSDJdKXtHMz0hMTticmVha31pZihHMyl7aWYoai5jdXJyZW50KyssIXIpe2lmKHI9ITAsdCljbGVhclRpbWVvdXQodCl9fX19fWNhdGNoe319KSgpO3JldHVybigpPT57aWYoeS5hYm9ydCgpLGNsZWFySW50ZXJ2YWwoZiksdCljbGVhclRpbWVvdXQodCk7Ty5jbG9zZSgpLGkuY3VycmVudD1udWxsfX0sWyQscTEsRSxOMSxLLFRdKTtsZXQgWTA9UygwKTtJKCgpPT57aWYoIUUpcmV0dXJuO2xldCBXPTIwMDAsTz0oKT0+e2xldCByPVkwLmN1cnJlbnQ7aWYoIXJ8fCF4MS5jdXJyZW50KXJldHVybjtpZihEYXRlLm5vdygpLXI+VykkMSghMSl9LHk9c2V0SW50ZXJ2YWwoKCk9Pnt1KGouY3VycmVudCksai5jdXJyZW50PTAsTygpfSwxMDAwKSxmPSgpPT57aWYoIWRvY3VtZW50LmhpZGRlbilPKCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixmKSwoKT0+e2NsZWFySW50ZXJ2YWwoeSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsZil9fSxbRV0pO2xldCBlMT1QKCgpPT57aWYoVClyZXR1cm4geC5jdXJyZW50O3JldHVybiBFP20uY3VycmVudDpiLmN1cnJlbnR9LFtFLFRdKSxqMT1QKCgpPT57cmV0dXJuIFIuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/P2UxKCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9udWxsfSxbZTFdKSwkMD1QKChXLE8pPT57bGV0IHk9ajEoKTtpZigheSlyZXR1cm47bGV0IGY9KE8uY2xpZW50WC15LmxlZnQpL3kud2lkdGgscj0oTy5jbGllbnRZLXkudG9wKS95LmhlaWdodDtJMSh7dHlwZTpXLHg6Zix5OnJ9KX0sW2oxLEkxXSksSzA9UCgoVyxPKT0+e2xldCBmPWoxKCk/LmhlaWdodHx8MSxyPUI4KFcsTyxmKTtpZihyPT09bnVsbClyZXR1cm4hMTtyZXR1cm4gYTEociksITB9LFtqMSxhMV0pO0koKCk9PntpZighQylyZXR1cm47bGV0IFc9by5jdXJyZW50O2lmKCFXKXJldHVybjtsZXQgTz0oeSk9PntpZighSzAoeS5kZWx0YVkseS5kZWx0YU1vZGUpKXJldHVybjt5LnByZXZlbnREZWZhdWx0KCkseS5zdG9wUHJvcGFnYXRpb24oKX07cmV0dXJuIFcuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLE8se3Bhc3NpdmU6ITF9KSwoKT0+Vy5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsTyl9LFtDLEswXSk7bGV0IE0xPVMoITEpLGIxPVMoITEpLHEwPVMoITEpLFUwPVMoe2R4OjAsZHk6MH0pLHUxPVMoITEpLFtHMCx6MF09RCghMSksVjA9Uyh7eDowLjUseTowLjV9KSxbUDEsazFdPUQobnVsbCk7SSgoKT0+e2xldCBXPSh5KT0+e2lmKHkua2V5PT09IkFsdCIpejAoITApfSxPPSh5KT0+e2lmKHkua2V5PT09IkFsdCIpe2lmKHowKCExKSwhYjEuY3VycmVudClrMShudWxsKX19O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsVyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixPKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixXKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLE8pfX0sW10pLEkoKCk9PntpZihHMCYmIWIxLmN1cnJlbnQpe2xldCBXPVYwLmN1cnJlbnQ7azEoe3gxOlcueCx5MTpXLnkseDI6MS1XLngseTI6MS1XLnl9KX1lbHNlIGlmKCFHMCYmIWIxLmN1cnJlbnQpazEobnVsbCl9LFtHMF0pO2xldCBRMD1TKG51bGwpLEYxPVMoITEpLGwxPVMoMCksbTE9UCgoVyxPKT0+e0YxLmN1cnJlbnQ9ITA7bGV0IHk9UTAuY3VycmVudDtpZih5KWNhbmNlbEFuaW1hdGlvbkZyYW1lKGwxLmN1cnJlbnQpLGwxLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57eS5zdHlsZS5sZWZ0PWAke1cqMTAwfSVgLHkuc3R5bGUudG9wPWAke08qMTAwfSVgLHkuc3R5bGUuZGlzcGxheT0iYmxvY2sifSl9LFtdKSxNMD1QKChXLE8pPT57aWYoIUYxLmN1cnJlbnQpcmV0dXJuO2xldCB5PVEwLmN1cnJlbnQ7aWYoeSljYW5jZWxBbmltYXRpb25GcmFtZShsMS5jdXJyZW50KSxsMS5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3kuc3R5bGUubGVmdD1gJHtXKjEwMH0lYCx5LnN0eWxlLnRvcD1gJHtPKjEwMH0lYH0pfSxbXSksZjE9UCgoKT0+e0YxLmN1cnJlbnQ9ITE7bGV0IFc9UTAuY3VycmVudDtpZihXKWNhbmNlbEFuaW1hdGlvbkZyYW1lKGwxLmN1cnJlbnQpLFcuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LFtdKSxGMD1TKDApLEowPVMobnVsbCksVzA9UCgoKT0+e2xldCBXPURhdGUubm93KCksTz1XLUYwLmN1cnJlbnQ7aWYoRjAuY3VycmVudD1XLE88MzAwKXtpZihKMC5jdXJyZW50KWNsZWFyVGltZW91dChKMC5jdXJyZW50KSxKMC5jdXJyZW50PW51bGw7aWYoWSlZKCk7ZWxzZSBvMSgiYXBwX3N3aXRjaGVyIil9ZWxzZSBKMC5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntpZihZKVkoKTtlbHNlIG8xKCJob21lIik7SjAuY3VycmVudD1udWxsfSwzMDApfSxbbzEsWV0pLHc9YTAoZCksSD13LmRpc3BsYXlDb25maWcsZz0oKCk9PntpZighSHx8IWMpcmV0dXJuIG51bGw7aWYoYy53aWR0aD09PTB8fGMuaGVpZ2h0PT09MClyZXR1cm4gbnVsbDtsZXQgVz1NYXRoLm1pbihjLndpZHRoL0gud2lkdGgsYy5oZWlnaHQvSC5oZWlnaHQpO3JldHVybnt3aWR0aDpILndpZHRoKlcsaGVpZ2h0OkguaGVpZ2h0Kld9fSkoKSxoPXcucm90YXRpb25EZWdyZWVzLG49dy5uZWVkc0Nzc1JvdGF0aW9uJiZNYXRoLmFicyhoKT09PTkwLEoxPVgsQjE9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiI1MCUiLGxlZnQ6IjUwJSIsd2lkdGg6biYmZz9gJHtnLmhlaWdodH1weGA6IjEwMCUiLGhlaWdodDpuJiZnP2Ake2cud2lkdGh9cHhgOiIxMDAlIix0cmFuc2Zvcm06YHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSR7aD09PTA/IiI6YCByb3RhdGUoJHtofWRlZylgfWAsdHJhbnNmb3JtT3JpZ2luOiJjZW50ZXIgY2VudGVyIixjdXJzb3I6TjgsZGlzcGxheToiYmxvY2siLHVzZXJTZWxlY3Q6Im5vbmUiLFdlYmtpdFVzZXJTZWxlY3Q6Im5vbmUiLHRvdWNoQWN0aW9uOiJub25lIiwuLi5YLC4uLmg9PT0wP3t9Ontib3JkZXJSYWRpdXM6MCxjb3JuZXJTaGFwZTp2b2lkIDB9fSx3MT17Li4uQjEsdHJhbnNmb3JtOmAke0IxLnRyYW5zZm9ybT8/IiJ9IHNjYWxlKCR7cjZ9KWB9O3JldHVybiBKKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixmbGV4OjEsLi4uej97fTp7Ym9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LG92ZXJmbG93OiJoaWRkZW4iLG1pbldpZHRoOjAsbWluSGVpZ2h0OjAsLi4uUX0sY2xhc3NOYW1lOlosY2hpbGRyZW46W0ooImRpdiIse3JlZjpWMSxzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIixmbGV4OjEsbWluSGVpZ2h0OjAsbWluV2lkdGg6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIifSxjaGlsZHJlbjpKKCJkaXYiLHtyZWY6UixzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIix3aWR0aDpnP2Ake2cud2lkdGh9cHhgOiIxMDAlIixoZWlnaHQ6Zz9gJHtnLmhlaWdodH1weGA6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLGJvcmRlclJhZGl1czpKMT8uYm9yZGVyUmFkaXVzLGNvcm5lclNoYXBlOkoxPy5jb3JuZXJTaGFwZX0sY2hpbGRyZW46W1Q/SigiY2FudmFzIix7cmVmOngsc3R5bGU6dzF9KTpKKCJpbWciLHtyZWY6YixzcmM6RT92b2lkIDA6cTEsZHJhZ2dhYmxlOiExLG9uTG9hZDooVyk9PntsZXQgTz1XLmN1cnJlbnRUYXJnZXQ7aWYoTy5uYXR1cmFsV2lkdGg+MCYmTy5uYXR1cmFsSGVpZ2h0PjApTjEoe3dpZHRoOk8ubmF0dXJhbFdpZHRoLGhlaWdodDpPLm5hdHVyYWxIZWlnaHR9KX0sc3R5bGU6RT97ZGlzcGxheToibm9uZSJ9OkIxfSksRSYmIVQmJkooImltZyIse3JlZjptLGRyYWdnYWJsZTohMSxvbkxvYWQ6KFcpPT57bGV0IE89Vy5jdXJyZW50VGFyZ2V0O2lmKE8ubmF0dXJhbFdpZHRoPjAmJk8ubmF0dXJhbEhlaWdodD4wKU4xKHt3aWR0aDpPLm5hdHVyYWxXaWR0aCxoZWlnaHQ6Ty5uYXR1cmFsSGVpZ2h0fSl9LHN0eWxlOkIxfSksSigiZGl2Iix7cmVmOm8sc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxjdXJzb3I6TjgsdG91Y2hBY3Rpb246Im5vbmUifSxvbk1vdXNlRG93bjooVyk9PntXLnByZXZlbnREZWZhdWx0KCk7bGV0IE89ajEoKTtpZighTylyZXR1cm47bGV0IHk9KFcuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsZj0oVy5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtpZihXLmFsdEtleSl7YjEuY3VycmVudD0hMCxxMC5jdXJyZW50PVcuc2hpZnRLZXk7bGV0IHQ9e3gxOnkseTE6Zix4MjoxLXkseTI6MS1mfTtVMC5jdXJyZW50PXtkeDoxLXkteSxkeToxLWYtZn0sazEodCkseTEoe3R5cGU6ImJlZ2luIiwuLi50fSk7cmV0dXJufW0xKHksZik7bGV0IHI9RDUoZik7aWYociE9PXZvaWQgMClNMS5jdXJyZW50PSEwLEkxKHt0eXBlOiJiZWdpbiIseDp5LHk6ZixlZGdlOnJ9KTtlbHNlIE0xLmN1cnJlbnQ9ITEsJDAoImJlZ2luIixXKX0sb25Nb3VzZU1vdmU6KFcpPT57bGV0IE89ajEoKTtpZighTylyZXR1cm47bGV0IHk9KFcuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsZj0oVy5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtpZihWMC5jdXJyZW50PXt4OnkseTpmfSxXLmJ1dHRvbnM9PT0wKXtpZihXLmFsdEtleSlrMSh7eDE6eSx5MTpmLHgyOjEteSx5MjoxLWZ9KTtyZXR1cm59aWYoYjEuY3VycmVudCl7bGV0IHI7aWYocTAuY3VycmVudCl7bGV0IHQ9VTAuY3VycmVudDtyPXt4MTp5LHkxOmYseDI6eSt0LmR4LHkyOmYrdC5keX19ZWxzZSByPXt4MTp5LHkxOmYseDI6MS15LHkyOjEtZn07azEocikseTEoe3R5cGU6Im1vdmUiLC4uLnJ9KTtyZXR1cm59aWYoTTAoeSxmKSxNMS5jdXJyZW50KUkxKHt0eXBlOiJtb3ZlIix4OnkseTpmLGVkZ2U6STB9KTtlbHNlICQwKCJtb3ZlIixXKX0sb25Nb3VzZVVwOihXKT0+e2lmKGIxLmN1cnJlbnQpe2xldCBPPWoxKCk7aWYoTyl7bGV0IHk9KFcuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsZj0oVy5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtpZihxMC5jdXJyZW50KXtsZXQgcj1VMC5jdXJyZW50O3kxKHt0eXBlOiJlbmQiLHgxOnkseTE6Zix4Mjp5K3IuZHgseTI6ZityLmR5fSl9ZWxzZSB5MSh7dHlwZToiZW5kIix4MTp5LHkxOmYseDI6MS15LHkyOjEtZn0pfWlmKGIxLmN1cnJlbnQ9ITEsIVcuYWx0S2V5KWsxKG51bGwpO3JldHVybn1pZihmMSgpLE0xLmN1cnJlbnQpe2xldCBPPWoxKCk7aWYoTyl7bGV0IHk9KFcuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsZj0oVy5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtJMSh7dHlwZToiZW5kIix4OnkseTpmLGVkZ2U6STB9KX1NMS5jdXJyZW50PSExO3JldHVybn0kMCgiZW5kIixXKX0sb25Nb3VzZUxlYXZlOihXKT0+e2lmKGIxLmN1cnJlbnQpe2lmKFAxKXkxKHt0eXBlOiJlbmQiLC4uLlAxfSk7YjEuY3VycmVudD0hMSxrMShudWxsKTtyZXR1cm59aWYoZjEoKSxNMS5jdXJyZW50KXtsZXQgTz1qMSgpO2lmKE8pe2xldCB5PShXLmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLGY9KFcuY2xpZW50WS1PLnRvcCkvTy5oZWlnaHQ7STEoe3R5cGU6ImVuZCIseDp5LHk6ZixlZGdlOkkwfSl9TTEuY3VycmVudD0hMTtyZXR1cm59aWYoVy5idXR0b25zPjApJDAoImVuZCIsVyk7azEobnVsbCl9LG9uVG91Y2hTdGFydDooVyk9PntXLnByZXZlbnREZWZhdWx0KCk7bGV0IE89ajEoKTtpZighTylyZXR1cm47aWYoVy50b3VjaGVzLmxlbmd0aD49Mil7ZjEoKTtsZXQgejE9Vy50b3VjaGVzWzBdLEQxPVcudG91Y2hlc1sxXSxCMD17eDE6KHoxLmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLHkxOih6MS5jbGllbnRZLU8udG9wKS9PLmhlaWdodCx4MjooRDEuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgseTI6KEQxLmNsaWVudFktTy50b3ApL08uaGVpZ2h0fTtpZighdTEuY3VycmVudCYmIU0xLmN1cnJlbnQpSTEoe3R5cGU6ImVuZCIseDpCMC54MSx5OkIwLnkxfSk7dTEuY3VycmVudD0hMCxiMS5jdXJyZW50PSEwLE0xLmN1cnJlbnQ9ITEsazEoQjApLHkxKHt0eXBlOiJiZWdpbiIsLi4uQjB9KTtyZXR1cm59bGV0IHk9Vy50b3VjaGVzWzBdO2lmKCF5KXJldHVybjtsZXQgZj0oeS5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCxyPSh5LmNsaWVudFktTy50b3ApL08uaGVpZ2h0O20xKGYscik7bGV0IHQ9RDUocik7aWYodCE9PXZvaWQgMClNMS5jdXJyZW50PSEwLEkxKHt0eXBlOiJiZWdpbiIseDpmLHk6cixlZGdlOnR9KTtlbHNlIE0xLmN1cnJlbnQ9ITEsSTEoe3R5cGU6ImJlZ2luIix4OmYseTpyfSl9LG9uVG91Y2hNb3ZlOihXKT0+e1cucHJldmVudERlZmF1bHQoKTtsZXQgTz1qMSgpO2lmKCFPKXJldHVybjtpZih1MS5jdXJyZW50JiZXLnRvdWNoZXMubGVuZ3RoPj0yKXtsZXQgdD1XLnRvdWNoZXNbMF0sejE9Vy50b3VjaGVzWzFdLEQxPXt4MToodC5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCx5MToodC5jbGllbnRZLU8udG9wKS9PLmhlaWdodCx4MjooejEuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgseTI6KHoxLmNsaWVudFktTy50b3ApL08uaGVpZ2h0fTtrMShEMSkseTEoe3R5cGU6Im1vdmUiLC4uLkQxfSk7cmV0dXJufWxldCB5PVcudG91Y2hlc1swXTtpZigheSlyZXR1cm47bGV0IGY9KHkuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgscj0oeS5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtpZihNMChmLHIpLE0xLmN1cnJlbnQpSTEoe3R5cGU6Im1vdmUiLHg6Zix5OnIsZWRnZTpJMH0pO2Vsc2UgSTEoe3R5cGU6Im1vdmUiLHg6Zix5OnJ9KX0sb25Ub3VjaEVuZDooVyk9PntXLnByZXZlbnREZWZhdWx0KCk7bGV0IE89ajEoKTtpZighTylyZXR1cm47aWYodTEuY3VycmVudCl7aWYoVy50b3VjaGVzLmxlbmd0aDwyKXtsZXQgdD1XLmNoYW5nZWRUb3VjaGVzWzBdLHoxPVAxO2lmKHQmJnoxKXkxKHt0eXBlOiJlbmQiLHgxOih0LmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLHkxOih0LmNsaWVudFktTy50b3ApL08uaGVpZ2h0LHgyOnoxLngyLHkyOnoxLnkyfSk7ZWxzZSBpZih6MSl5MSh7dHlwZToiZW5kIiwuLi56MX0pO3UxLmN1cnJlbnQ9ITEsYjEuY3VycmVudD0hMSxrMShudWxsKX1yZXR1cm59bGV0IHk9Vy5jaGFuZ2VkVG91Y2hlc1swXTtpZigheSlyZXR1cm47bGV0IGY9KHkuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgscj0oeS5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtpZihmMSgpLE0xLmN1cnJlbnQpSTEoe3R5cGU6ImVuZCIseDpmLHk6cixlZGdlOkkwfSksTTEuY3VycmVudD0hMTtlbHNlIEkxKHt0eXBlOiJlbmQiLHg6Zix5OnJ9KX19KSxKKCJkaXYiLHtyZWY6UTAsImRhdGEtdGVzdGlkIjoidG91Y2gtaW5kaWNhdG9yIixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJub25lIix3aWR0aDoyNCxoZWlnaHQ6MjQsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoNTksMTMwLDI0NiwwLjUpIixib3hTaGFkb3c6IjAgMCA4cHggcmdiYSg1OSwxMzAsMjQ2LDAuMykiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19KSxQMSYmSihlLHtjaGlsZHJlbjpbSigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZmluZ2VyLWRvdCIsc3R5bGU6VTgoUDEueDEsUDEueTEpfSksSigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZmluZ2VyLWRvdCIsc3R5bGU6VTgoUDEueDIsUDEueTIpfSldfSksIVgxJiYhcyYmSigiZGl2Iix7c3R5bGU6ey4uLkw4LC4uLlh8fHt9fSxjaGlsZHJlbjpKKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjODg4Iixmb250U2l6ZToxNH0sY2hpbGRyZW46IkNvbm5lY3RpbmcuLi4ifSl9KSxzJiZKKCJkaXYiLHtzdHlsZTpMOCxjaGlsZHJlbjpKKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjZjQ0Iixmb250U2l6ZToxNCxwYWRkaW5nOjIwLHRleHRBbGlnbjoiY2VudGVyIn0sY2hpbGRyZW46c30pfSksayYmSigiZGl2Iix7c3R5bGU6ZTYsY2hpbGRyZW46Sigic3BhbiIse3N0eWxlOntjb2xvcjoiI2ZiYmYyNCIsZm9udFNpemU6MTMsZm9udEZhbWlseToibW9ub3NwYWNlIn0sY2hpbGRyZW46IlNsb3cgY29ubmVjdGlvbiJ9KX0pXX0pfSksIXomJkooImRpdiIse3N0eWxlOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixwYWRkaW5nOiI0cHggOHB4Iixib3JkZXJUb3A6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIn0sY2hpbGRyZW46W0ooImJ1dHRvbiIse29uQ2xpY2s6VzAsc3R5bGU6e2JhY2tncm91bmQ6Im5vbmUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSIsY29sb3I6IiNhYWEiLGZvbnRTaXplOjExLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIscGFkZGluZzoiMnB4IDEwcHgiLGN1cnNvcjoicG9pbnRlciIsYm9yZGVyUmFkaXVzOjR9LGNoaWxkcmVuOiJIb21lIn0pLEooInNwYW4iLHtzdHlsZTp7Y29sb3I6VTE+MD8iIzRmNCI6IiM4ODgiLGZvbnRTaXplOjEyLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6Nn0sY2hpbGRyZW46W0EmJkooInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJxdWFsaXR5LWRvdCIsc3R5bGU6e3dpZHRoOjgsaGVpZ2h0OjgsYm9yZGVyUmFkaXVzOiI1MCUiLGRpc3BsYXk6ImlubGluZS1ibG9jayIsYmFja2dyb3VuZDpBPT09Imdvb2QiPyIjNGFkZTgwIjpBPT09ImRlZ3JhZGVkIj8iI2ZhY2MxNSI6IiNlZjQ0NDQifX0pLFUxLCIgZnBzIl19KV19KV19KX12YXIgZTY9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjgsbGVmdDoiNTAlIix0cmFuc2Zvcm06InRyYW5zbGF0ZVgoLTUwJSkiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC43KSIsYm9yZGVyUmFkaXVzOjYscGFkZGluZzoiNHB4IDEycHgiLHBvaW50ZXJFdmVudHM6Im5vbmUifSxMOD17cG9zaXRpb246ImFic29sdXRlIixpbnNldDowLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsYmFja2dyb3VuZDoicmdiYSgwLDAsMCwwLjgpIn0sQzg9MjA7ZnVuY3Rpb24gVTgoJCxLKXtyZXR1cm57cG9zaXRpb246ImFic29sdXRlIixsZWZ0OmAkeyQqMTAwfSVgLHRvcDpgJHtLKjEwMH0lYCx3aWR0aDpDOCxoZWlnaHQ6QzgsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoMjU1LDI1NSwyNTUsMC40NSkiLGJvcmRlcjoiMS4yNXB4IHNvbGlkIHJnYmEoMCwwLDAsMC41NSkiLGJveFNoYWRvdzoiMCAxcHggM3B4IHJnYmEoMCwwLDAsMC40NSkiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19ZnVuY3Rpb24gbjEoJCl7aWYoISQpcmV0dXJuImlwaG9uZSI7bGV0IEs9JC50b0xvd2VyQ2FzZSgpO2lmKEsuaW5jbHVkZXMoImlwYWQiKSlyZXR1cm4iaXBhZCI7aWYoSy5pbmNsdWRlcygid2F0Y2giKSlyZXR1cm4id2F0Y2giO2lmKEsuaW5jbHVkZXMoInZpc2lvbiIpKXJldHVybiJ2aXNpb24iO3JldHVybiJpcGhvbmUifXZhciBBMT17aXBob25lOnt3aWR0aDo0MjcsaGVpZ2h0Ojg4MSxiZXplbFg6MTgsYmV6ZWxZOjE4LGlubmVyUmFkaXVzOjU1fSxpcGFkOnt3aWR0aDo0MzAsaGVpZ2h0OjYwNSxiZXplbFg6MTYsYmV6ZWxZOjE2LGlubmVyUmFkaXVzOjEyfSx3YXRjaDp7d2lkdGg6Mjc0LGhlaWdodDozMjIsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czo3OX0sdmlzaW9uOnt3aWR0aDo2NDAsaGVpZ2h0OjQwMCxiZXplbFg6MTIsYmV6ZWxZOjEyLGlubmVyUmFkaXVzOjMyfX0sZSQ9QTEuaXBob25lLndpZHRoLCRLPUExLmlwaG9uZS5oZWlnaHQsS0s9QTEuaXBob25lLmJlemVsWCxRSz1BMS5pcGhvbmUuYmV6ZWxZLEpLPUExLmlwaG9uZS5pbm5lclJhZGl1cyx6OD17ImlQaG9uZSAxNyBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNyBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE3Ijp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSBBaXIiOnt3aWR0aDoxMjYwLGhlaWdodDoyNzM2fSwiaVBob25lIDE2IFBybyBNYXgiOnt3aWR0aDoxMzIwLGhlaWdodDoyODY4fSwiaVBob25lIDE2IFBybyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgMTYgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTYiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBob25lIDE2ZSI6e3dpZHRoOjExNzAsaGVpZ2h0OjI1MzJ9LCJpUGhvbmUgMTUgUHJvIE1heCI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUgUHJvIjp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNSBQbHVzIjp7d2lkdGg6MTI5MCxoZWlnaHQ6Mjc5Nn0sImlQaG9uZSAxNSI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGFkIFBybyAxMy1pbmNoIChNNSkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTUpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgUHJvIDEzLWluY2ggKE00KSI6e3dpZHRoOjIwNjQsaGVpZ2h0OjI3NTJ9LCJpUGFkIFBybyAxMS1pbmNoIChNNCkiOnt3aWR0aDoxNjY4LGhlaWdodDoyNDIwfSwiaVBhZCBBaXIgMTMtaW5jaCAoTTMpIjp7d2lkdGg6MjA0OCxoZWlnaHQ6MjczMn0sImlQYWQgQWlyIDExLWluY2ggKE0zKSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIChBMTYpIjp7d2lkdGg6MTY0MCxoZWlnaHQ6MjM2MH0sImlQYWQgbWluaSAoQTE3IFBybykiOnt3aWR0aDoxNDg4LGhlaWdodDoyMjY2fSwiQXBwbGUgV2F0Y2ggVWx0cmEgMyAoNDltbSkiOnt3aWR0aDo0MjIsaGVpZ2h0OjUxNH0sIkFwcGxlIFdhdGNoIFVsdHJhIDIgKDQ5bW0pIjp7d2lkdGg6NDEwLGhlaWdodDo1MDJ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTEgKDQ2bW0pIjp7d2lkdGg6NDE2LGhlaWdodDo0OTZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTEgKDQybW0pIjp7d2lkdGg6Mzc0LGhlaWdodDo0NDZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTAgKDQ2bW0pIjp7d2lkdGg6NDE2LGhlaWdodDo0OTZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTAgKDQybW0pIjp7d2lkdGg6Mzc0LGhlaWdodDo0NDZ9LCJBcHBsZSBXYXRjaCBTRSAzICg0NG1tKSI6e3dpZHRoOjM2OCxoZWlnaHQ6NDQ4fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDBtbSkiOnt3aWR0aDozMjQsaGVpZ2h0OjM5NH0sIkFwcGxlIFdhdGNoIFNFICg0NG1tKSI6e3dpZHRoOjM2OCxoZWlnaHQ6NDQ4fSwiQXBwbGUgV2F0Y2ggU0UgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBWaXNpb24gUHJvIjp7d2lkdGg6MTkyMCxoZWlnaHQ6MTA4MH19O2Z1bmN0aW9uIGIyKCQsSyl7bGV0IFE9JCYmJC53aWR0aD4wJiYkLmhlaWdodD4wPyQ6SyxYPWIwKFEpO2lmKFgpcmV0dXJuYCR7WC53aWR0aH0gLyAke1guaGVpZ2h0fWA7cmV0dXJuYCR7QTEuaXBob25lLndpZHRoLTIqQTEuaXBob25lLmJlemVsWH0gLyAke0ExLmlwaG9uZS5oZWlnaHQtMipBMS5pcGhvbmUuYmV6ZWxZfWB9ZnVuY3Rpb24gUzAoJD0iaXBob25lIixLKXtsZXQgUT1LP3o4W0tdOm51bGw7aWYoUSlyZXR1cm4gUTtsZXQgWD1BMVskXTtyZXR1cm57d2lkdGg6WC53aWR0aC0yKlguYmV6ZWxYLGhlaWdodDpYLmhlaWdodC0yKlguYmV6ZWxZfX1mdW5jdGlvbiBSMCgkPSJpcGhvbmUiLEspe2lmKHkwKEspKXN3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiA3MjA7Y2FzZSJ2aXNpb24iOnJldHVybiA1ODA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtkZWZhdWx0OnJldHVybiA2MjB9c3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIDQwMDtjYXNlIndhdGNoIjpyZXR1cm4gMjAwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2RlZmF1bHQ6cmV0dXJuIDMyMH19ZnVuY3Rpb24gUzIoJD0iaXBob25lIixLKXtsZXQgUT1BMVskXSxYPVEud2lkdGgtMipRLmJlemVsWCxaPVEuaGVpZ2h0LTIqUS5iZXplbFk7aWYoWDxaJiZ5MChLKSlyZXR1cm5gJHtRLmlubmVyUmFkaXVzL1oqMTAwfSUgLyAke1EuaW5uZXJSYWRpdXMvWCoxMDB9JWA7cmV0dXJuYCR7US5pbm5lclJhZGl1cy9YKjEwMH0lIC8gJHtRLmlubmVyUmFkaXVzL1oqMTAwfSVgfWZ1bmN0aW9uIEY4KCQpe2xldCBLPUExWyQudHlwZV0sUT1LLndpZHRoLTIqSy5iZXplbFgsWD1LLmhlaWdodC0yKksuYmV6ZWxZLFosWTtpZihRPFgmJnkwKCQuY29uZmlnPz9udWxsKSlaPUsuaW5uZXJSYWRpdXMvWCxZPUsuaW5uZXJSYWRpdXMvUTtlbHNlIFo9Sy5pbm5lclJhZGl1cy9RLFk9Sy5pbm5lclJhZGl1cy9YO2xldCBxPVoqJC5jb250YWluZXJXaWR0aCxHPVkqJC5jb250YWluZXJIZWlnaHQsQj1NYXRoLnNxcnQoTWF0aC5tYXgocSpHLDApKTtyZXR1cm57cng6cSxyeTpHLHJHZW9tOkJ9fXZhciBLND0xMyxRND02MjtmdW5jdGlvbiB3NSgkKXtsZXR7Y29udGFpbmVyV2lkdGg6Syxjb250YWluZXJIZWlnaHQ6UX09JCxYPShVKT0+VS50b0ZpeGVkKDMpLFo9KFUsQSk9PntsZXQgTT1BLEU9QSxUPVE0LzIqKE1hdGguUEkvMTgwKSxiPTIyNSpNYXRoLlBJLzE4MCx4PWIrVCxtPWItVCxSPU0rVSpNYXRoLmNvcyh4KSxvPUUrVSpNYXRoLnNpbih4KSxpPU0rVSpNYXRoLmNvcyhtKSxYMT1FK1UqTWF0aC5zaW4obSksJDE9YE0gJHtYKFIpfSAke1gobyl9IEEgJHtYKFUpfSAke1goVSl9IDAgMCAxICR7WChpKX0gJHtYKFgxKX1gLHM9YE0gJHtYKGkpfSAke1goWDEpfSBBICR7WChVKX0gJHtYKFUpfSAwIDAgMCAke1goUil9ICR7WChvKX1gO3JldHVybntkOiQxLGRGaWxsOnN9fTtpZighKEs+MCl8fCEoUT4wKSl7bGV0IFU9SzQsQT1NYXRoLmNlaWwoVSsxNCkse2Q6TSxkRmlsbDpFfT1aKFUsQSk7cmV0dXJue2Q6TSxkRmlsbDpFLHZpZXdCb3hTaXplOkF9fWxldHtyR2VvbTpZfT1GOCgkKSxxPU1hdGgubWF4KDIuMixNYXRoLm1pbig1LjIsMC4wMTEqTWF0aC5taW4oSyxRKSkpLEc9WSowLjM0K3EsQj1NYXRoLm1pbihLLFEpLFY9TWF0aC5taW4oMjIsTWF0aC5tYXgoMTIsQiowLjA1MikpO0c9TWF0aC5taW4oMjQsTWF0aC5tYXgoMTIsRyxWKSk7bGV0IE49TWF0aC5tYXgoMjYsTWF0aC5jZWlsKEcrMTMpKSx7ZDpfLGRGaWxsOnp9PVooRyxOKTtyZXR1cm57ZDpfLGRGaWxsOnosdmlld0JveFNpemU6Tn19ZnVuY3Rpb24gUjIoe3R5cGU6JD0iaXBob25lIixzdHJlYW1pbmc6Sz0hMX0pe3N3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiBKKFg0LHtzdHJlYW1pbmc6S30pO2Nhc2Uid2F0Y2giOnJldHVybiBKKFo0LHtzdHJlYW1pbmc6S30pO2Nhc2UidmlzaW9uIjpyZXR1cm4gSihZNCx7c3RyZWFtaW5nOkt9KTtkZWZhdWx0OnJldHVybiBKKEo0LHtzdHJlYW1pbmc6S30pfX1mdW5jdGlvbiBKNCh7c3RyZWFtaW5nOiQ9ITF9KXtyZXR1cm4gSigic3ZnIix7dmlld0JveDoiMCAwIDQyNyA4ODEiLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbSigiZGVmcyIse2NoaWxkcmVuOltKKCJmaWx0ZXIiLHtpZDoiY2hyb21lLWZpbHRlcjAiLHg6Ii0wLjE2Njk5MiIseToiMC4xNjY1MDQiLHdpZHRoOiI0MjciLGhlaWdodDoiODgwLjY2NyIsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSigiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSigiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEooImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiZWZmZWN0MV9mb3JlZ3JvdW5kQmx1ciJ9KV19KSxKKCJmaWx0ZXIiLHtpZDoiY2hyb21lLWZpbHRlcjEiLHg6IjYuMzMyMzYiLHk6IjYuMzMzODIiLHdpZHRoOiI0MTQiLGhlaWdodDoiODY4IixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltKKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxKKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksSigiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuMzMzMzMzIixyZXN1bHQ6ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXIifSldfSldfSksSigicmVjdCIse3g6IjMuODMyNjgiLHk6IjMuODMzNjYiLHdpZHRoOiI0MTkiLGhlaWdodDoiODczIixyeDoiNjYuMTY2NyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiNC4zMzMzMyJ9KSxKKCJyZWN0Iix7eDoiMC44MzMzMzMiLHk6IjAuODMzMzMzIix3aWR0aDoiNDI1IixoZWlnaHQ6Ijg3OSIscng6IjY5LjE2NjciLHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2NjcifSksSigiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI2Nocm9tZS1maWx0ZXIwKSIsY2hpbGRyZW46SigicmVjdCIse3g6IjEuNjY2MDIiLHk6IjIiLHdpZHRoOiI0MjMuMzMzIixoZWlnaHQ6Ijg3NyIscng6IjY4LjY2NjciLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2NjcifSl9KSxKKCJnIix7b3BhY2l0eToiMC44IixmaWx0ZXI6InVybCgjY2hyb21lLWZpbHRlcjEpIixjaGlsZHJlbjpKKCJyZWN0Iix7eDoiNy4zMzI2OCIseToiNy4zMzM2NiIsd2lkdGg6IjQxMiIsaGVpZ2h0OiI4NjYiLHJ4OiI2Mi42NjY3IixzdHJva2U6IiM2NDY0NjQiLHN0cm9rZVdpZHRoOiIwLjY2NjY2NyJ9KX0pLEooInJlY3QiLHt4OiIxNTEuNjY2Iix5OiIzMS42NjciLHdpZHRoOiIxMjMuMzMzIixoZWlnaHQ6IjM2IixyeDoiMTgiLGZpbGw6ImJsYWNrIixzdHlsZTp7b3BhY2l0eTokPzA6MSx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSldfSl9ZnVuY3Rpb24gWDQoe3N0cmVhbWluZzokPSExfSl7bGV0IEs9QTEuaXBhZC53aWR0aCxRPUExLmlwYWQuaGVpZ2h0LFg9MzAsWj0yNjtyZXR1cm4gSigic3ZnIix7dmlld0JveDpgMCAwICR7S30gJHtRfWAsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltKKCJkZWZzIix7Y2hpbGRyZW46W0ooImZpbHRlciIse2lkOiJpcGFkLWdsb3cwIix4OiIwIix5OiIwIix3aWR0aDpLLGhlaWdodDpRLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0ooImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLEooImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxKKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImJsdXIifSldfSksSigiZmlsdGVyIix7aWQ6ImlwYWQtZ2xvdzEiLHg6IjUiLHk6IjUiLHdpZHRoOkstMTAsaGVpZ2h0OlEtMTAsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSigiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSigiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEooImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjMzMzMzMyIscmVzdWx0OiJibHVyIn0pXX0pXX0pLEooInJlY3QiLHt4OiIzLjUiLHk6IjMuNSIsd2lkdGg6Sy03LGhlaWdodDpRLTcscng6MjYsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiNCJ9KSxKKCJyZWN0Iix7eDoiMC44MzMiLHk6IjAuODMzIix3aWR0aDpLLTEuNjY2LGhlaWdodDpRLTEuNjY2LHJ4OjMwLHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pLEooImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCNpcGFkLWdsb3cwKSIsY2hpbGRyZW46SigicmVjdCIse3g6IjEuNSIseToiMS41Iix3aWR0aDpLLTMsaGVpZ2h0OlEtMyxyeDoyOSxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KX0pLEooImciLHtvcGFjaXR5OiIwLjgiLGZpbHRlcjoidXJsKCNpcGFkLWdsb3cxKSIsY2hpbGRyZW46SigicmVjdCIse3g6IjYiLHk6IjYiLHdpZHRoOkstMTIsaGVpZ2h0OlEtMTIscng6MjQsc3Ryb2tlOiIjNjQ2NDY0IixzdHJva2VXaWR0aDoiMC42NjYifSl9KSxKKCJjaXJjbGUiLHtjeDpLLzIsY3k6QTEuaXBhZC5iZXplbFkvMisxLHI6IjMiLGZpbGw6IiMxYTFhMWEiLHN0eWxlOntvcGFjaXR5OiQ/MDowLjgsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pLEooInJlY3QiLHt4OihLLTEyMCkvMix5OlEtQTEuaXBhZC5iZXplbFkvMi0yLjUsd2lkdGg6IjEyMCIsaGVpZ2h0OiI1IixyeDoiMi41IixmaWxsOiJ3aGl0ZSIsc3R5bGU6e29wYWNpdHk6JD8wOjAuMzUsbWl4QmxlbmRNb2RlOiJkaWZmZXJlbmNlIix0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSldfSl9ZnVuY3Rpb24gWjQoe3N0cmVhbWluZzokPSExfSl7bGV0IEs9QTEud2F0Y2gud2lkdGgsUT1BMS53YXRjaC5oZWlnaHQsWD04OCxaPTgyLFk9OCxxPTM2LEc9US8yLTE4LTE2LEI9MjIsVj1RLzItMTErMTY7cmV0dXJuIEooInN2ZyIse3ZpZXdCb3g6YDAgMCAke0t9ICR7UX1gLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixvdmVyZmxvdzoidmlzaWJsZSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W0ooImRlZnMiLHtjaGlsZHJlbjpKKCJmaWx0ZXIiLHtpZDoid2F0Y2gtZ2xvdzAiLHg6IjAiLHk6IjAiLHdpZHRoOksrMTIsaGVpZ2h0OlEsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSigiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSigiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEooImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiYmx1ciJ9KV19KX0pLEooInJlY3QiLHt4OkstMix5Okcsd2lkdGg6OCxoZWlnaHQ6MzYscng6IjMiLGZpbGw6IiMyYTJhMmMiLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEifSksSigicmVjdCIse3g6Sy0xLHk6Vix3aWR0aDo2LGhlaWdodDoyMixyeDoiMi41IixmaWxsOiIjMmEyYTJjIixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIwLjgifSksSigicmVjdCIse3g6IjMuNSIseToiMy41Iix3aWR0aDpLLTcsaGVpZ2h0OlEtNyxyeDo4MixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIzLjUifSksSigicmVjdCIse3g6IjAuODMzIix5OiIwLjgzMyIsd2lkdGg6Sy0xLjY2NixoZWlnaHQ6US0xLjY2NixyeDo4OCxzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KSxKKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjd2F0Y2gtZ2xvdzApIixjaGlsZHJlbjpKKCJyZWN0Iix7eDoiMS41Iix5OiIxLjUiLHdpZHRoOkstMyxoZWlnaHQ6US0zLHJ4Ojg3LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pfSldfSl9ZnVuY3Rpb24gWTQoe3N0cmVhbWluZzokPSExfSl7bGV0IEs9QTEudmlzaW9uLndpZHRoLFE9QTEudmlzaW9uLmhlaWdodCxYPTQwLFo9MzQ7cmV0dXJuIEooInN2ZyIse3ZpZXdCb3g6YDAgMCAke0t9ICR7UX1gLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbSigiZGVmcyIse2NoaWxkcmVuOltKKCJmaWx0ZXIiLHtpZDoidmlzaW9uLWdsb3cwIix4OiIwIix5OiIwIix3aWR0aDpLLGhlaWdodDpRLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0ooImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLEooImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxKKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImJsdXIifSldfSksSigiZmlsdGVyIix7aWQ6InZpc2lvbi1nbG93MSIseDoiNSIseToiNSIsd2lkdGg6Sy0xMCxoZWlnaHQ6US0xMCxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltKKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxKKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksSigiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuMzMzIixyZXN1bHQ6ImJsdXIifSldfSksSigibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLWdsYXNzIix4MToiMCIseTE6IjAiLHgyOiIwIix5MjoiMSIsY2hpbGRyZW46W0ooInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiM1NTU1NTgiLHN0b3BPcGFjaXR5OiIwLjMifSksSigic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjM2EzYTNkIixzdG9wT3BhY2l0eToiMC4xIn0pXX0pXX0pLEooInJlY3QiLHt4OiIwIix5OiIwIix3aWR0aDpLLGhlaWdodDpRLHJ4OjQwLGZpbGw6InVybCgjdmlzaW9uLWdsYXNzKSJ9KSxKKCJyZWN0Iix7eDoiMy41Iix5OiIzLjUiLHdpZHRoOkstNyxoZWlnaHQ6US03LHJ4OjM0LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjMifSksSigicmVjdCIse3g6IjAuODMzIix5OiIwLjgzMyIsd2lkdGg6Sy0xLjY2NixoZWlnaHQ6US0xLjY2NixyeDo0MCxzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KSxKKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjdmlzaW9uLWdsb3cwKSIsY2hpbGRyZW46SigicmVjdCIse3g6IjEuNSIseToiMS41Iix3aWR0aDpLLTMsaGVpZ2h0OlEtMyxyeDozOSxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KX0pLEooImciLHtvcGFjaXR5OiIwLjgiLGZpbHRlcjoidXJsKCN2aXNpb24tZ2xvdzEpIixjaGlsZHJlbjpKKCJyZWN0Iix7eDoiNiIseToiNiIsd2lkdGg6Sy0xMixoZWlnaHQ6US0xMixyeDozMixzdHJva2U6IiM2NDY0NjQiLHN0cm9rZVdpZHRoOiIwLjY2NiJ9KX0pLEooImVsbGlwc2UiLHtjeDpLLzIsY3k6US8yLHJ4OksvMi0zMCxyeTpRLzItMjQsc3Ryb2tlOiIjNGE0YTRkIixzdHJva2VXaWR0aDoiMC41IixvcGFjaXR5OiIwLjMiLHN0eWxlOntvcGFjaXR5OiQ/MDowLjMsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pXX0pfXZhciBFNT1kMShudWxsKTtmdW5jdGlvbiB4MigkKXtsZXQgSz1yMShFNSk7aWYoIUspdGhyb3cgRXJyb3IoYDxTaW11bGF0b3JUb29sYmFyLiR7JH0+IG11c3QgYmUgcmVuZGVyZWQgaW5zaWRlIDxTaW11bGF0b3JUb29sYmFyPmApO3JldHVybiBLfXZhciBHND17ZGlzcGxheToiZmxleCIsZmxleFdyYXA6IndyYXAiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLGdhcDoiNHB4IDEycHgiLHBhZGRpbmc6IjhweCAxMnB4Iixib3JkZXJSYWRpdXM6MjQsYmFja2dyb3VuZDoiIzFjMWMxZSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpIixib3hTaGFkb3c6IjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMikiLG1pbldpZHRoOjI0MCx3aWR0aDoiMTAwJSJ9O2Z1bmN0aW9uIFY0KHtleGVjOiQsb25Sb3RhdGU6SyxvcmllbnRhdGlvbjpRLGRldmljZVVkaWQ6WCxkZXZpY2VOYW1lOlosZGV2aWNlUnVudGltZTpZLHN0cmVhbWluZzpxPSExLGRpc2FibGVkOkc9ITEsY2hpbGRyZW46QixzdHlsZTpWLC4uLkN9KXtsZXQgTD1uMShaKSxOPXtleGVjOiQsb25Sb3RhdGU6SyxvcmllbnRhdGlvbjpRLGRldmljZVVkaWQ6WCxkZXZpY2VOYW1lOlosZGV2aWNlUnVudGltZTpZLGRldmljZVR5cGU6TCxzdHJlYW1pbmc6cSxkaXNhYmxlZDpHfHwhWHx8IXF9O3JldHVybiBKKEU1LlByb3ZpZGVyLHt2YWx1ZTpOLGNoaWxkcmVuOkooImRpdiIseyJkYXRhLXNpbXVsYXRvci10b29sYmFyIjohMCxzdHlsZTp7Li4uRzQsLi4uVn0sLi4uQyxjaGlsZHJlbjpCfSl9KX12YXIgQjQ9e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsYWxpZ25JdGVtczoiZmxleC1zdGFydCIsdGV4dEFsaWduOiJsZWZ0IixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixjb2xvcjoiI2ZmZiIscGFkZGluZzoiMnB4IDRweCIsbWFyZ2luOiItMnB4IC00cHgiLGJvcmRlclJhZGl1czo2LGN1cnNvcjoicG9pbnRlciIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsbGluZUhlaWdodDoxLjIsZm9udEZhbWlseToiaW5oZXJpdCJ9LE40PWkxKGZ1bmN0aW9uKHtuYW1lOkssc3VidGl0bGU6USxoaWRlQ2hldnJvbjpYLGhpZGVTdWJ0aXRsZTpaLHN0eWxlOlksb25Nb3VzZUVudGVyOnEsb25Nb3VzZUxlYXZlOkcsLi4uQn0sVil7bGV0IEM9eDIoIlRpdGxlIiksW0wsRl09RCghMSksTj1LPz9DLmRldmljZU5hbWU/PyJObyBzaW11bGF0b3IiLF89UT8/KEMuZGV2aWNlUnVudGltZT9DLmRldmljZVJ1bnRpbWUucmVwbGFjZSgvXC4vLCIgIik6IuKAlCIpO3JldHVybiBKKCJidXR0b24iLHtyZWY6Vix0eXBlOiJidXR0b24iLCJkYXRhLXNpbXVsYXRvci10b29sYmFyLXRpdGxlIjohMCxvbk1vdXNlRW50ZXI6KHopPT57RighMCkscT8uKHopfSxvbk1vdXNlTGVhdmU6KHopPT57RighMSksRz8uKHopfSxzdHlsZTp7Li4uQjQsYmFja2dyb3VuZDpMPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiOiJ0cmFuc3BhcmVudCIsLi4uWX0sLi4uQixjaGlsZHJlbjpbSigic3BhbiIse3N0eWxlOntkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmb250U2l6ZToxMixmb250V2VpZ2h0OjYwMCxjb2xvcjoiI2ZmZiIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOltOLCFYJiZKKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLHN0eWxlOntjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIixmbGV4U2hyaW5rOjB9LGNoaWxkcmVuOkooInBvbHlsaW5lIix7cG9pbnRzOiI2IDkgMTIgMTUgMTggOSJ9KX0pXX0pLCFaJiZKKCJzcGFuIix7c3R5bGU6e2ZvbnRTaXplOjEwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNSkiLG1heFdpZHRoOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpffSldfSl9KSxMND17ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmbGV4U2hyaW5rOjB9O2Z1bmN0aW9uIEM0KHtzdHlsZTokLC4uLkt9KXtyZXR1cm4gSigiZGl2Iix7c3R5bGU6ey4uLkw0LC4uLiR9LC4uLkt9KX12YXIgVTQ9e2JhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLHBhZGRpbmc6Nixib3JkZXJSYWRpdXM6MTIsY3Vyc29yOiJwb2ludGVyIixkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjgpIix0cmFuc2l0aW9uOiJiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzLCBjb2xvciAwLjE1cyIscG9zaXRpb246InJlbGF0aXZlIixvdmVyZmxvdzoidmlzaWJsZSJ9LHYyPWkxKGZ1bmN0aW9uKHtmb3JjZURpc2FibGVkOkssdG9vbHRpcDpRLHN0eWxlOlgsZGlzYWJsZWQ6Wix0aXRsZTpZLG9uTW91c2VFbnRlcjpxLG9uTW91c2VMZWF2ZTpHLG9uRm9jdXM6QixvbkJsdXI6VixjaGlsZHJlbjpDLCJhcmlhLWxhYmVsIjpMLC4uLkZ9LE4pe2xldCBfPXIxKEU1KSx6PVp8fEt8fF8/LmRpc2FibGVkLFtVLEFdPUQoITEpLFtNLEVdPUQoITEpLFQ9UDIoKSxiPVE/P1k/Pyh0eXBlb2YgTD09PSJzdHJpbmciP0w6bnVsbCkseD0hIWImJiF6JiYoVXx8TSk7cmV0dXJuIEooImJ1dHRvbiIse3JlZjpOLHR5cGU6ImJ1dHRvbiIsZGlzYWJsZWQ6eiwiYXJpYS1sYWJlbCI6TCwiYXJpYS1kZXNjcmliZWRieSI6Yj9UOnZvaWQgMCxvbk1vdXNlRW50ZXI6KG0pPT57QSghMCkscT8uKG0pfSxvbk1vdXNlTGVhdmU6KG0pPT57QSghMSksRz8uKG0pfSxvbkZvY3VzOihtKT0+e0UoITApLEI/LihtKX0sb25CbHVyOihtKT0+e0UoITEpLFY/LihtKX0sc3R5bGU6ey4uLlU0LGNvbG9yOno/InJnYmEoMjU1LDI1NSwyNTUsMC4yNSkiOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOCkiLGJhY2tncm91bmQ6VSYmIXo/InJnYmEoMjU1LDI1NSwyNTUsMC4xKSI6InRyYW5zcGFyZW50IixjdXJzb3I6ej8ibm90LWFsbG93ZWQiOiJwb2ludGVyIiwuLi5YfSwuLi5GLGNoaWxkcmVuOltDLGImJkooInNwYW4iLHtpZDpULHJvbGU6InRvb2x0aXAiLCJhcmlhLWhpZGRlbiI6IXgsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiNTAlIixib3R0b206ImNhbGMoMTAwJSArIDhweCkiLHRyYW5zZm9ybTpgdHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKCR7eD8wOjJ9cHgpYCxvcGFjaXR5Ong/MTowLHBvaW50ZXJFdmVudHM6Im5vbmUiLHdoaXRlU3BhY2U6Im5vd3JhcCIscGFkZGluZzoiNHB4IDdweCIsYm9yZGVyUmFkaXVzOjYsYmFja2dyb3VuZDoicmdiYSgzMCwzMCwzMiwwLjk2KSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC45MikiLGZvbnRTaXplOjExLGZvbnRXZWlnaHQ6NTAwLGxpbmVIZWlnaHQ6MSxib3hTaGFkb3c6IjAgNHB4IDE0cHggcmdiYSgwLDAsMCwwLjMyKSIsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjEycyBlYXNlLCB0cmFuc2Zvcm0gMC4xMnMgZWFzZSIsekluZGV4OjEwMH0sY2hpbGRyZW46Yn0pXX0pfSk7ZnVuY3Rpb24gejQoKXtyZXR1cm5bJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBzZXQgZnJvbnRtb3N0IHRvIHRydWUnLCd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gcGVyZm9ybSBhY3Rpb24gIkFYUmFpc2UiIG9mIChmaXJzdCB3aW5kb3cgd2hvc2UgbmFtZSBjb250YWlucyAid2F0Y2hPUyIpJywndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIGNsaWNrIG1lbnUgaXRlbSAiSG9tZSIgb2YgbWVudSAiRGV2aWNlIiBvZiBtZW51IGJhciBpdGVtICJEZXZpY2UiIG9mIG1lbnUgYmFyIDEnXS5tYXAoKEspPT5gLWUgJyR7S30nYCkucmVkdWNlKChLLFEpPT5gJHtLfSAke1F9YCwib3Nhc2NyaXB0Iil9dmFyIEY0PXtwb3J0cmFpdDoibGFuZHNjYXBlX2xlZnQiLGxhbmRzY2FwZV9sZWZ0OiJwb3J0cmFpdF91cHNpZGVfZG93biIscG9ydHJhaXRfdXBzaWRlX2Rvd246ImxhbmRzY2FwZV9yaWdodCIsbGFuZHNjYXBlX3JpZ2h0OiJwb3J0cmFpdCJ9LEg0PUooInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOkooInBhdGgiLHtkOiJNMyAxMC41IDEyIDNsOSA3LjVWMjBhMSAxIDAgMCAxLTEgMWgtNXYtN2gtNnY3SDRhMSAxIDAgMCAxLTEtMXoifSl9KSxBND1KKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCA0NCA0NCIsZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpKKCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGNsaXBSdWxlOiJldmVub2RkIixmaWxsOiJjdXJyZW50Q29sb3IiLGQ6Ik00My42ODc1IDEyLjQ2ODhWOC4yNzM0NEM0My42ODc1IDUuNzI2NTYgNDIuOTUzMSAzLjcxMDk0IDQxLjQ4NDQgMi4yMjY1NkM0MC4wMTU2IDAuNzQyMTg4IDM4IDAgMzUuNDM3NSAwSDMxLjE0ODRDMzAuNjAxNiAwIDMwLjEzMjggMC4xOTUzMTIgMjkuNzQyMiAwLjU4NTkzOEMyOS4zNTE2IDAuOTc2NTYyIDI5LjE1NjIgMS40NDUzMSAyOS4xNTYyIDEuOTkyMTlDMjkuMTU2MiAyLjUyMzQ0IDI5LjM1MTYgMi45ODQzOCAyOS43NDIyIDMuMzc1QzMwLjEzMjggMy43NjU2MiAzMC42MDE2IDMuOTYwOTQgMzEuMTQ4NCAzLjk2MDk0SDM1LjQzNzVDMzYuNzgxMiAzLjk2MDk0IDM3LjgzNTkgNC4zNDM3NSAzOC42MDE2IDUuMTA5MzhDMzkuMzUxNiA1Ljg3NSAzOS43MjY2IDYuOTI5NjkgMzkuNzI2NiA4LjI3MzQ0VjEyLjQ2ODhDMzkuNzI2NiAxMyAzOS45MjE5IDEzLjQ2MDkgNDAuMzEyNSAxMy44NTE2QzQwLjcwMzEgMTQuMjQyMiA0MS4xNzE5IDE0LjQzNzUgNDEuNzE4OCAxNC40Mzc1QzQyLjI1IDE0LjQzNzUgNDIuNzEwOSAxNC4yNDIyIDQzLjEwMTYgMTMuODUxNkM0My40OTIyIDEzLjQ2MDkgNDMuNjg3NSAxMyA0My42ODc1IDEyLjQ2ODhaTTAgMTIuNDY4OEMwIDEzIDAuMTk1MzEyIDEzLjQ2MDkgMC41ODU5MzggMTMuODUxNkMwLjk3NjU2MiAxNC4yNDIyIDEuNDM3NSAxNC40Mzc1IDEuOTY4NzUgMTQuNDM3NUMyLjUgMTQuNDM3NSAyLjk2MDk0IDE0LjI0MjIgMy4zNTE1NiAxMy44NTE2QzMuNzQyMTkgMTMuNDYwOSAzLjkzNzUgMTMgMy45Mzc1IDEyLjQ2ODhWOC4yNzM0NEMzLjkzNzUgNi45Mjk2OSA0LjMyMDMxIDUuODc1IDUuMDg1OTQgNS4xMDkzOEM1LjgzNTk0IDQuMzQzNzUgNi44OTA2MiAzLjk2MDk0IDguMjUgMy45NjA5NEgxMi41MzkxQzEzLjA4NTkgMy45NjA5NCAxMy41NTQ3IDMuNzY1NjIgMTMuOTQ1MyAzLjM3NUMxNC4zMjAzIDIuOTg0MzggMTQuNTA3OCAyLjUyMzQ0IDE0LjUwNzggMS45OTIxOUMxNC41MDc4IDEuNDQ1MzEgMTQuMzIwMyAwLjk3NjU2MiAxMy45NDUzIDAuNTg1OTM4QzEzLjU1NDcgMC4xOTUzMTIgMTMuMDg1OSAwIDEyLjUzOTEgMEg4LjI1QzUuNjg3NSAwIDMuNjcxODggMC43NDIxODggMi4yMDMxMiAyLjIyNjU2QzAuNzM0Mzc1IDMuNzEwOTQgMCA1LjcyNjU2IDAgOC4yNzM0NFYxMi40Njg4Wk00My42ODc1IDMxLjI0MjJDNDMuNjg3NSAzMC43MTA5IDQzLjQ5MjIgMzAuMjUgNDMuMTAxNiAyOS44NTk0QzQyLjcxMDkgMjkuNDY4OCA0Mi4yNSAyOS4yNzM0IDQxLjcxODggMjkuMjczNEM0MS4xNzE5IDI5LjI3MzQgNDAuNzAzMSAyOS40Njg4IDQwLjMxMjUgMjkuODU5NEMzOS45MjE5IDMwLjI1IDM5LjcyNjYgMzAuNzEwOSAzOS43MjY2IDMxLjI0MjJWMzUuNDM3NUMzOS43MjY2IDM2Ljc4MTIgMzkuMzUxNiAzNy44MzU5IDM4LjYwMTYgMzguNjAxNkMzNy44MzU5IDM5LjM2NzIgMzYuNzgxMiAzOS43NSAzNS40Mzc1IDM5Ljc1SDMxLjE0ODRDMzAuNjAxNiAzOS43NSAzMC4xMzI4IDM5Ljk0NTMgMjkuNzQyMiA0MC4zMzU5QzI5LjM1MTYgNDAuNzI2NiAyOS4xNTYyIDQxLjE4NzUgMjkuMTU2MiA0MS43MTg4QzI5LjE1NjIgNDIuMjY1NiAyOS4zNTE2IDQyLjcyNjYgMjkuNzQyMiA0My4xMDE2QzMwLjEzMjggNDMuNDkyMiAzMC42MDE2IDQzLjY4NzUgMzEuMTQ4NCA0My42ODc1SDM1LjQzNzVDMzggNDMuNjg3NSA0MC4wMTU2IDQyLjk0NTMgNDEuNDg0NCA0MS40NjA5QzQyLjk1MzEgMzkuOTkyMiA0My42ODc1IDM3Ljk4NDQgNDMuNjg3NSAzNS40Mzc1VjMxLjI0MjJaTTAgMzEuMjQyMlYzNS40Mzc1QzAgMzcuOTg0NCAwLjczNDM3NSAzOS45OTIyIDIuMjAzMTIgNDEuNDYwOUMzLjY3MTg4IDQyLjk0NTMgNS42ODc1IDQzLjY4NzUgOC4yNSA0My42ODc1SDEyLjUzOTFDMTMuMDg1OSA0My42ODc1IDEzLjU1NDcgNDMuNDkyMiAxMy45NDUzIDQzLjEwMTZDMTQuMzIwMyA0Mi43MjY2IDE0LjUwNzggNDIuMjY1NiAxNC41MDc4IDQxLjcxODhDMTQuNTA3OCA0MS4xODc1IDE0LjMyMDMgNDAuNzI2NiAxMy45NDUzIDQwLjMzNTlDMTMuNTU0NyAzOS45NDUzIDEzLjA4NTkgMzkuNzUgMTIuNTM5MSAzOS43NUg4LjI1QzYuODkwNjIgMzkuNzUgNS44MzU5NCAzOS4zNjcyIDUuMDg1OTQgMzguNjAxNkM0LjMyMDMxIDM3LjgzNTkgMy45Mzc1IDM2Ljc4MTIgMy45Mzc1IDM1LjQzNzVWMzEuMjQyMkMzLjkzNzUgMzAuNzEwOSAzLjc0MjE5IDMwLjI1IDMuMzUxNTYgMjkuODU5NEMyLjk2MDk0IDI5LjQ2ODggMi41IDI5LjI3MzQgMS45Njg3NSAyOS4yNzM0QzEuNDM3NSAyOS4yNzM0IDAuOTc2NTYyIDI5LjQ2ODggMC41ODU5MzggMjkuODU5NEMwLjE5NTMxMiAzMC4yNSAwIDMwLjcxMDkgMCAzMS4yNDIyWk0zMS41OTM4IDMxLjgwNDdDMzIuNzgxMiAzMS44MDQ3IDMzLjY3MTkgMzEuNTE1NiAzNC4yNjU2IDMwLjkzNzVDMzQuODU5NCAzMC4zNDM4IDM1LjE1NjIgMjkuNDY4OCAzNS4xNTYyIDI4LjMxMjVWMTYuNzEwOUMzNS4xNTYyIDE1LjUzOTEgMzQuODU5NCAxNC42NjQxIDM0LjI2NTYgMTQuMDg1OUMzMy42NzE5IDEzLjQ5MjIgMzIuNzgxMiAxMy4xOTUzIDMxLjU5MzggMTMuMTk1M0gyOC44OTg0QzI4LjQ2MDkgMTMuMTk1MyAyOC4xNDg0IDEzLjE0MDYgMjcuOTYwOSAxMy4wMzEyQzI3Ljc1NzggMTIuOTIxOSAyNy41MjM0IDEyLjcyNjYgMjcuMjU3OCAxMi40NDUzTDI2LjM2NzIgMTEuNTA3OEMyNi4wODU5IDExLjE5NTMgMjUuNzgxMiAxMC45Njg4IDI1LjQ1MzEgMTAuODI4MUMyNS4xMDk0IDEwLjY3MTkgMjQuNjU2MiAxMC41OTM4IDI0LjA5MzggMTAuNTkzOEgxOS42MTcyQzE5LjA1NDcgMTAuNTkzOCAxOC42MDk0IDEwLjY3MTkgMTguMjgxMiAxMC44MjgxQzE3LjkzNzUgMTAuOTY4OCAxNy42MjUgMTEuMTk1MyAxNy4zNDM4IDExLjUwNzhMMTYuNDc2NiAxMi40NDUzQzE2LjIxMDkgMTIuNzQyMiAxNS45NzY2IDEyLjk0NTMgMTUuNzczNCAxMy4wNTQ3QzE1LjU1NDcgMTMuMTQ4NCAxNS4yMzQ0IDEzLjE5NTMgMTQuODEyNSAxMy4xOTUzSDEyLjA0NjlDMTAuODkwNiAxMy4xOTUzIDEwLjAxNTYgMTMuNDkyMiA5LjQyMTg4IDE0LjA4NTlDOC44MTI1IDE0LjY2NDEgOC41MDc4MSAxNS41MzkxIDguNTA3ODEgMTYuNzEwOVYyOC4zMTI1QzguNTA3ODEgMjkuNDY4OCA4LjgxMjUgMzAuMzQzOCA5LjQyMTg4IDMwLjkzNzVDMTAuMDE1NiAzMS41MTU2IDEwLjg5MDYgMzEuODA0NyAxMi4wNDY5IDMxLjgwNDdIMzEuNTkzOFpNMjEuNzk2OSAyOC45NDUzQzIwLjU5MzggMjguOTQ1MyAxOS41IDI4LjY2NDEgMTguNTE1NiAyOC4xMDE2QzE3LjUxNTYgMjcuNTIzNCAxNi43MjY2IDI2Ljc0MjIgMTYuMTQ4NCAyNS43NTc4QzE1LjU1NDcgMjQuNzU3OCAxNS4yNTc4IDIzLjYzMjggMTUuMjU3OCAyMi4zODI4QzE1LjI1NzggMjEuMTc5NyAxNS41NTQ3IDIwLjA4NTkgMTYuMTQ4NCAxOS4xMDE2QzE2LjcyNjYgMTguMTAxNiAxNy41MTU2IDE3LjMxMjUgMTguNTE1NiAxNi43MzQ0QzE5LjUgMTYuMTQwNiAyMC41OTM4IDE1Ljg0MzggMjEuNzk2OSAxNS44NDM4QzIzLjAxNTYgMTUuODQzOCAyNC4xMjUgMTYuMTQwNiAyNS4xMjUgMTYuNzM0NEMyNi4xMDk0IDE3LjMxMjUgMjYuODk4NCAxOC4xMDE2IDI3LjQ5MjIgMTkuMTAxNkMyOC4wNzAzIDIwLjA4NTkgMjguMzU5NCAyMS4xNzk3IDI4LjM1OTQgMjIuMzgyOEMyOC4zNTk0IDIzLjYxNzIgMjguMDcwMyAyNC43MjY2IDI3LjQ5MjIgMjUuNzEwOUMyNi44OTg0IDI2LjY5NTMgMjYuMTA5NCAyNy40ODQ0IDI1LjEyNSAyOC4wNzgxQzI0LjEyNSAyOC42NTYyIDIzLjAxNTYgMjguOTQ1MyAyMS43OTY5IDI4Ljk0NTNaTTIxLjgyMDMgMjYuOTA2MkMyMi42NDg0IDI2LjkwNjIgMjMuNDA2MiAyNi43MTA5IDI0LjA5MzggMjYuMzIwM0MyNC43ODEyIDI1LjkxNDEgMjUuMzI4MSAyNS4zNjcyIDI1LjczNDQgMjQuNjc5N0MyNi4xMjUgMjMuOTkyMiAyNi4zMjAzIDIzLjIyNjYgMjYuMzIwMyAyMi4zODI4QzI2LjMyMDMgMjEuNTcwMyAyNi4xMjUgMjAuODIwMyAyNS43MzQ0IDIwLjEzMjhDMjUuMzI4MSAxOS40NDUzIDI0Ljc4MTIgMTguOTA2MiAyNC4wOTM4IDE4LjUxNTZDMjMuNDA2MiAxOC4xMDk0IDIyLjY0ODQgMTcuOTA2MiAyMS44MjAzIDE3LjkwNjJDMjAuOTkyMiAxNy45MDYyIDIwLjI0MjIgMTguMTA5NCAxOS41NzAzIDE4LjUxNTZDMTguODgyOCAxOC45MDYyIDE4LjMzNTkgMTkuNDQ1MyAxNy45Mjk3IDIwLjEzMjhDMTcuNTIzNCAyMC44MjAzIDE3LjMyMDMgMjEuNTcwMyAxNy4zMjAzIDIyLjM4MjhDMTcuMzIwMyAyMy4yMjY2IDE3LjUyMzQgMjMuOTkyMiAxNy45Mjk3IDI0LjY3OTdDMTguMzM1OSAyNS4zNjcyIDE4Ljg4MjggMjUuOTE0MSAxOS41NzAzIDI2LjMyMDNDMjAuMjQyMiAyNi43MTA5IDIwLjk5MjIgMjYuOTA2MiAyMS44MjAzIDI2LjkwNjJaTTEyLjYzMjggMTguOTg0NEMxMi4yMTA5IDE4Ljk4NDQgMTEuODU5NCAxOC44MzU5IDExLjU3ODEgMTguNTM5MUMxMS4yODEyIDE4LjI0MjIgMTEuMTMyOCAxNy44OTA2IDExLjEzMjggMTcuNDg0NEMxMS4xMzI4IDE3LjA2MjUgMTEuMjgxMiAxNi43MTA5IDExLjU3ODEgMTYuNDI5N0MxMS44NTk0IDE2LjEzMjggMTIuMjEwOSAxNS45ODQ0IDEyLjYzMjggMTUuOTg0NEMxMy4wMzkxIDE1Ljk4NDQgMTMuMzkwNiAxNi4xMzI4IDEzLjY4NzUgMTYuNDI5N0MxMy45ODQ0IDE2LjcxMDkgMTQuMTMyOCAxNy4wNjI1IDE0LjEzMjggMTcuNDg0NEMxNC4xMzI4IDE3Ljg5MDYgMTMuOTg0NCAxOC4yNDIyIDEzLjY4NzUgMTguNTM5MUMxMy4zOTA2IDE4LjgzNTkgMTMuMDM5MSAxOC45ODQ0IDEyLjYzMjggMTguOTg0NFoifSl9KSxfND1KKCJzdmciLHt3aWR0aDoiMjEiLGhlaWdodDoiMjEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltKKCJwYXRoIix7ZDoiTTEyIDVINmEyIDIgMCAwIDAtMiAydjMifSksSigicGF0aCIse2Q6Im05IDggMy0zLTMtMyJ9KSxKKCJwYXRoIix7ZDoiTTQgMTR2NGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC0yIn0pXX0pLGs0PWkxKGZ1bmN0aW9uKHtvbkNsaWNrOkssLi4uUX0sWCl7bGV0IFo9eDIoIkhvbWVCdXR0b24iKTtyZXR1cm4gSih2Mix7cmVmOlgsImFyaWEtbGFiZWwiOiJIb21lIixvbkNsaWNrOihZKT0+e2lmKEs/LihZKSxZLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKFouZGV2aWNlVHlwZT09PSJ3YXRjaCIpWi5leGVjKHo0KCkpO2Vsc2UgWi5leGVjKCJzZXJ2ZS1zaW0gYnV0dG9uIGhvbWUiKX0sLi4uUSxjaGlsZHJlbjpINH0pfSksTzQ9aTEoZnVuY3Rpb24oe29uQ2xpY2s6SywuLi5RfSxYKXtsZXQgWj14MigiU2NyZWVuc2hvdEJ1dHRvbiIpO3JldHVybiBKKHYyLHtyZWY6WCwiYXJpYS1sYWJlbCI6IlNjcmVlbnNob3QiLG9uQ2xpY2s6KFkpPT57aWYoSz8uKFkpLFkuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoWi5kZXZpY2VVZGlkKVouZXhlYyhgeGNydW4gc2ltY3RsIGlvICR7Wi5kZXZpY2VVZGlkfSBzY3JlZW5zaG90IH4vRGVza3RvcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC0kKGRhdGUgKyVzKS5wbmdgKX0sLi4uUSxjaGlsZHJlbjpBNH0pfSksRDQ9aTEoZnVuY3Rpb24oe29uQ2xpY2s6Syxmb3JjZURpc2FibGVkOlEsLi4uWH0sWil7bGV0IFk9eDIoIlJvdGF0ZUJ1dHRvbiIpLHE9WS5kZXZpY2VUeXBlPT09IndhdGNoInx8WS5kZXZpY2VUeXBlPT09InZpc2lvbiIsW0csQl09RCgicG9ydHJhaXQiKTtyZXR1cm4gSSgoKT0+e0IoWS5vcmllbnRhdGlvbj8/InBvcnRyYWl0Iil9LFtZLmRldmljZVVkaWQsWS5vcmllbnRhdGlvbl0pLEoodjIse3JlZjpaLCJhcmlhLWxhYmVsIjoiUm90YXRlIGRldmljZSIsZm9yY2VEaXNhYmxlZDpRfHxxLG9uQ2xpY2s6KFYpPT57aWYoSz8uKFYpLFYuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoIVkuZGV2aWNlVWRpZHx8cSlyZXR1cm47bGV0IEM9RjRbWS5vcmllbnRhdGlvbj8/R107aWYoQihDKSxZLm9uUm90YXRlKVkub25Sb3RhdGUoQyk7ZWxzZSBZLmV4ZWMoYHNlcnZlLXNpbSByb3RhdGUgJHtDfSAtZCAke1kuZGV2aWNlVWRpZH1gKX0sLi4uWCxjaGlsZHJlbjpfNH0pfSksRTE9VjQ7RTEuVGl0bGU9TjQ7RTEuQWN0aW9ucz1DNDtFMS5CdXR0b249djI7RTEuSG9tZUJ1dHRvbj1rNDtFMS5TY3JlZW5zaG90QnV0dG9uPU80O0UxLlJvdGF0ZUJ1dHRvbj1ENDt2YXIgZzI9KC4uLiQpPT4kLmZpbHRlcigoSyxRLFgpPT57cmV0dXJuIEJvb2xlYW4oSykmJksudHJpbSgpIT09IiImJlguaW5kZXhPZihLKT09PVF9KS5qb2luKCIgIikudHJpbSgpO3ZhciBIOD0oJCk9PiQucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpO3ZhciBBOD0oJCk9PiQucmVwbGFjZSgvXihbQS1aXSl8W1xzLV9dKyhcdykvZywoSyxRLFgpPT5YP1gudG9VcHBlckNhc2UoKTpRLnRvTG93ZXJDYXNlKCkpO3ZhciBJNT0oJCk9PntsZXQgSz1BOCgkKTtyZXR1cm4gSy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStLLnNsaWNlKDEpfTt2YXIgaDI9e3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6MjQsaGVpZ2h0OjI0LHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOjIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9O3ZhciBfOD0oJCk9Pntmb3IobGV0IEsgaW4gJClpZihLLnN0YXJ0c1dpdGgoImFyaWEtIil8fEs9PT0icm9sZSJ8fEs9PT0idGl0bGUiKXJldHVybiEwO3JldHVybiExfTt2YXIgTTQ9ZDEoe30pO3ZhciBrOD0oKT0+cjEoTTQpO3ZhciBPOD1pMSgoe2NvbG9yOiQsc2l6ZTpLLHN0cm9rZVdpZHRoOlEsYWJzb2x1dGVTdHJva2VXaWR0aDpYLGNsYXNzTmFtZTpaPSIiLGNoaWxkcmVuOlksaWNvbk5vZGU6cSwuLi5HfSxCKT0+e2xldHtzaXplOlY9MjQsc3Ryb2tlV2lkdGg6Qz0yLGFic29sdXRlU3Ryb2tlV2lkdGg6TD0hMSxjb2xvcjpGPSJjdXJyZW50Q29sb3IiLGNsYXNzTmFtZTpOPSIifT1rOCgpPz97fSxfPVg/P0w/TnVtYmVyKFE/P0MpKjI0L051bWJlcihLPz9WKTpRPz9DO3JldHVybiBSMSgic3ZnIix7cmVmOkIsLi4uaDIsd2lkdGg6Sz8/Vj8/aDIud2lkdGgsaGVpZ2h0Oks/P1Y/P2gyLmhlaWdodCxzdHJva2U6JD8/RixzdHJva2VXaWR0aDpfLGNsYXNzTmFtZTpnMigibHVjaWRlIixOLFopLC4uLiFZJiYhXzgoRykmJnsiYXJpYS1oaWRkZW4iOiJ0cnVlIn0sLi4uR30sWy4uLnEubWFwKChbeixVXSk9PlIxKHosVSkpLC4uLkFycmF5LmlzQXJyYXkoWSk/WTpbWV1dKX0pO3ZhciBHMT0oJCxLKT0+e2xldCBRPWkxKCh7Y2xhc3NOYW1lOlgsLi4uWn0sWSk9PlIxKE84LHtyZWY6WSxpY29uTm9kZTpLLGNsYXNzTmFtZTpnMihgbHVjaWRlLSR7SDgoSTUoJCkpfWAsYGx1Y2lkZS0keyR9YCxYKSwuLi5afSkpO3JldHVybiBRLmRpc3BsYXlOYW1lPUk1KCQpLFF9O3ZhciBXND1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiIsa2V5OiJhZml0djcifV0sWyJwYXRoIix7ZDoiTTkgM3YxOCIsa2V5OiJmaDNocWEifV1dLHMxPUcxKCJwYW5lbC1sZWZ0IixXNCk7dmFyIFQ0PVtbInBhdGgiLHtkOiJNMTIuMDM0IDEyLjY4MWEuNDk4LjQ5OCAwIDAgMSAuNjQ3LS42NDdsOSAzLjVhLjUuNSAwIDAgMS0uMDMzLjk0M2wtMy40NDQgMS4wNjhhMSAxIDAgMCAwLS42Ni42NmwtMS4wNjcgMy40NDNhLjUuNSAwIDAgMS0uOTQzLjAzM3oiLGtleToieHduemlwIn1dLFsicGF0aCIse2Q6Ik0yMSAxMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNiIsa2V5OiIxNHJzdnEifV1dLEMwPUcxKCJzcXVhcmUtbW91c2UtcG9pbnRlciIsVDQpO3ZhciBQND1bWyJyZWN0Iix7eDoiMiIseToiNCIsd2lkdGg6IjIwIixoZWlnaHQ6IjE2IixyeDoiMiIsa2V5OiJpenhsYW8ifV0sWyJwYXRoIix7ZDoiTTEwIDR2NCIsa2V5OiJwcDh1ODAifV0sWyJwYXRoIix7ZDoiTTIgOGgyMCIsa2V5OiJkMTFjczcifV0sWyJwYXRoIix7ZDoiTTYgNHY0IixrZXk6IjFzdnRqdyJ9XV0saTA9RzEoImFwcC13aW5kb3ciLFA0KTt2YXIgdzQ9W1sicGF0aCIse2Q6Ik03IDdoMTB2MTAiLGtleToiMXRpdm45In1dLFsicGF0aCIse2Q6Ik03IDE3IDE3IDciLGtleToiMXZraXphIn1dXSxuMD1HMSgiYXJyb3ctdXAtcmlnaHQiLHc0KTt2YXIgRTQ9W1sicGF0aCIse2Q6Ik0yMCA2IDkgMTdsLTUtNSIsa2V5OiIxZ21mMmMifV1dLHMwPUcxKCJjaGVjayIsRTQpO3ZhciBJND1bWyJwYXRoIix7ZDoibTYgOSA2IDYgNi02IixrZXk6InFydW5zbCJ9XV0sdDA9RzEoImNoZXZyb24tZG93biIsSTQpO3ZhciB5ND1bWyJwYXRoIix7ZDoibTkgMTggNi02LTYtNiIsa2V5OiJtdGhod3EifV1dLGUwPUcxKCJjaGV2cm9uLXJpZ2h0Iix5NCk7dmFyIGI0PVtbInBhdGgiLHtkOiJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiIsa2V5OiJiMTloNXEifV0sWyJwYXRoIix7ZDoiTTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDIgMTh6IixrZXk6Img3aDVnZSJ9XV0sJDI9RzEoImZhc3QtZm9yd2FyZCIsYjQpO3ZhciBTND1bWyJwYXRoIix7ZDoibTMgNyA1IDUtNSA1VjciLGtleToiY291aGk3In1dLFsicGF0aCIse2Q6Im0yMSA3LTUgNSA1IDVWNyIsa2V5OiI2b3VpYTcifV0sWyJwYXRoIix7ZDoiTTEyIDIwdjIiLGtleToiMWxoMWtnIn1dLFsicGF0aCIse2Q6Ik0xMiAxNHYyIixrZXk6IjhqY3h1ZCJ9XSxbInBhdGgiLHtkOiJNMTIgOHYyIixrZXk6IjF3b3FpdiJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIixrZXk6InR1czAzbSJ9XV0sSzI9RzEoImZsaXAtaG9yaXpvbnRhbC0yIixTNCk7dmFyIFI0PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCIsa2V5OiIxbWdsYXkifV0sWyJwYXRoIix7ZDoiTTEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDAtMjAiLGtleToiMTNvMXpsIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDIwIixrZXk6IjlpNHB1NCJ9XV0sUTI9RzEoImdsb2JlIixSNCk7dmFyIHg0PVtbInBhdGgiLHtkOiJtMjIgMTEtMS4yOTYtMS4yOTZhMi40IDIuNCAwIDAgMC0zLjQwOCAwTDExIDE2IixrZXk6IjlrenkzNSJ9XSxbInBhdGgiLHtkOiJNNCA4YTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxMGEyIDIgMCAwIDAgMi0yIixrZXk6IjF0MGYwdCJ9XSxbImNpcmNsZSIse2N4OiIxMyIsY3k6IjciLHI6IjEiLGZpbGw6ImN1cnJlbnRDb2xvciIsa2V5OiIxb2J1czYifV0sWyJyZWN0Iix7eDoiOCIseToiMiIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMiIsa2V5OiIxZ3ZoYnkifV1dLEoyPUcxKCJpbWFnZXMiLHg0KTt2YXIgdjQ9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLGtleToiYWZpdHY3In1dLFsicGF0aCIse2Q6Ik0xNSAzdjE4IixrZXk6IjE0bnZwMCJ9XV0sWDI9RzEoInBhbmVsLXJpZ2h0Iix2NCk7dmFyIGc0PVtbInBhdGgiLHtkOiJNMyAxMmE5IDkgMCAxIDAgOS05IDkuNzUgOS43NSAwIDAgMC02Ljc0IDIuNzRMMyA4IixrZXk6IjEzNTdlMyJ9XSxbInBhdGgiLHtkOiJNMyAzdjVoNSIsa2V5OiIxeGhxOGEifV1dLFoyPUcxKCJyb3RhdGUtY2N3IixnNCk7dmFyIGg0PVtbInBhdGgiLHtkOiJtMjEgMjEtNC4zNC00LjM0IixrZXk6IjE0ajdyaiJ9XSxbImNpcmNsZSIse2N4OiIxMSIsY3k6IjExIixyOiI4IixrZXk6IjRlajk3dSJ9XV0sWTI9RzEoInNlYXJjaCIsaDQpO3ZhciBqND1bWyJwYXRoIix7ZDoiTTEyIDN2MTIiLGtleToiMXgwajVzIn1dLFsicGF0aCIse2Q6Im0xNyA4LTUtNS01IDUiLGtleToiN3E5N3I4In1dLFsicGF0aCIse2Q6Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00IixrZXk6ImloN24zaCJ9XV0scTI9RzEoInVwbG9hZCIsajQpO3ZhciBtND1bWyJwYXRoIix7ZDoiTTE4IDYgNiAxOCIsa2V5OiIxYmw1ZjgifV0sWyJwYXRoIix7ZDoibTYgNiAxMiAxMiIsa2V5OiJkOGJrNnYifV1dLHAxPUcxKCJ4IixtNCk7ZnVuY3Rpb24gRzIoe29wZW46JH0pe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNsYXNzTmFtZToibGVtLWNoZXZyb24gdGV4dC13aGl0ZS81MCIsc3R5bGU6e3RyYW5zZm9ybTokPyJyb3RhdGUoMTgwZGVnKSI6InJvdGF0ZSgwZGVnKSJ9LGNoaWxkcmVuOkooInBvbHlsaW5lIix7cG9pbnRzOiI2IDkgMTIgMTUgMTggOSJ9KX0pfWZ1bmN0aW9uIGoyKHtkaXI6JH0pe3JldHVybiBKKCJzdmciLHt3aWR0aDoiOSIsaGVpZ2h0OiI5Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2xhc3NOYW1lOiJtci1bM3B4XSIsY2hpbGRyZW46JD09PSJ1cCI/SigicG9seWdvbiIse3BvaW50czoiMTIsNCAyMCwxOCA0LDE4In0pOkooInBvbHlnb24iLHtwb2ludHM6IjQsNiAyMCw2IDEyLDIwIn0pfSl9ZnVuY3Rpb24gVjIoKXtyZXR1cm4gSigic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46SigicG9seWdvbiIse3BvaW50czoiNiw0IDIwLDEyIDYsMjAifSl9KX1mdW5jdGlvbiB5NSgpe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpbSigicmVjdCIse3g6IjYiLHk6IjQiLHdpZHRoOiI0IixoZWlnaHQ6IjE2In0pLEooInJlY3QiLHt4OiIxNCIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiMTYifSldfSl9ZnVuY3Rpb24gQjIoKXtyZXR1cm4gSigic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46SigicmVjdCIse3g6IjUiLHk6IjUiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxNCIscng6IjEuNSJ9KX0pfWZ1bmN0aW9uIGI1KCl7cmV0dXJuIEooJDIse3NpemU6MTIsc3Ryb2tlV2lkdGg6MiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pfWZ1bmN0aW9uIFM1KCl7cmV0dXJuIEooInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI0IDIgOSAxMyIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOkooInBhdGgiLHtkOiJNNi4wMDg1MiAxNC44MDU0QzUuODkxODEgMTQuOTM1IDUuNzU4MTUgMTQuOTk5OCA1LjYwNzU2IDE0Ljk5OThDNS40NTY5NiAxNS4wMDMzIDUuMzIzMyAxNC45NjEzIDUuMjA2NTkgMTQuODczN0M1LjA5MzY0IDE0Ljc4NjEgNS4wMjU4NyAxNC42NzIzIDUuMDAzMjggMTQuNTMyMkM0Ljk4NDQ2IDE0LjM5MjEgNS4wNDY1OCAxNC4yNDUgNS4xODk2NSAxNC4wOTA5TDYuOTQ1OTkgMTIuMTUyMkw3LjI0NTMgMTAuODc1NUw4LjE5OTcxIDExLjk4OTNMOC4wNTg1MyAxMi4zOTM5QzguMDIwODggMTIuNDk1NSA3Ljk4Njk5IDEyLjU3MDggNy45NTY4NyAxMi42MTk4QzcuOTMwNTIgMTIuNjY4OCA3Ljg3NDA0IDEyLjc0MDYgNy43ODc0NSAxMi44MzUyTDYuMDA4NTIgMTQuODA1NFpNMTAuMzQ1NyAxNC42NDI1TDkuMTAzMjkgMTIuMzA0NkM5LjA3Njk0IDEyLjI2MjUgOS4wNTQzNSAxMi4yMjIzIDkuMDM1NTMgMTIuMTgzN0M5LjAxNjcgMTIuMTQ1MiA4Ljk3NzE3IDEyLjA5MDkgOC45MTY5MyAxMi4wMjA5TDcuNzE5NjggMTAuNjE4MUM3LjQ5Mzc5IDEwLjM1NTQgNy4zMzc1NCAxMC4xMjk1IDcuMjUwOTUgOS45NDAzNEM3LjE2NDM1IDkuNzQ3NyA3LjEzNDI0IDkuNDk5MDEgNy4xNjA1OSA5LjE5NDI5TDcuMjYyMjQgNy45ODA2NUM3LjI2OTc3IDcuOTA3MSA3LjIzMjEyIDcuODU0NTYgNy4xNDkyOSA3LjgyMzA0QzcuMDY2NDcgNy43OTE1MSA2Ljk4NTUyIDcuODA5MDMgNi45MDY0NiA3Ljg3NTU3TDYuNDcxNjEgOC4yNDMzNEw2LjM0MTcyIDkuNjcyMzlDNi4zMjI4OSA5Ljg0NzUyIDYuMjY0NTQgOS45Nzg4NyA2LjE2NjY1IDEwLjA2NjRDNi4wNjg3NiAxMC4xNTQgNS45Mzg4NyAxMC4xOTI1IDUuNzc2OTggMTAuMTgyQzUuNjExMzIgMTAuMTc1IDUuNDgzMzEgMTAuMTE5IDUuMzkyOTUgMTAuMDEzOUM1LjMwNjM2IDkuOTA4ODIgNS4yNjg3MSA5Ljc3Mzk3IDUuMjgwMDEgOS42MDkzNUw1LjM4NzMxIDguMzA2MzlDNS40MDIzNyA4LjEyNzc2IDUuNDM4MTMgNy45NzU0IDUuNDk0NjEgNy44NDkzMUM1LjU1NDg1IDcuNzIzMjEgNS42NjAyNiA3LjU5MTg3IDUuODEwODYgNy40NTUyN0w2LjcxNDQ1IDYuNjI1MTZDNy4wMDQzNSA2LjM2MjQ3IDcuMjY5NzcgNi4xNjEwNyA3LjUxMDczIDYuMDIwOTZDNy43NTE2OCA1Ljg3NzM2IDguMDI4NDEgNS44MDU1NiA4LjM0MDkgNS44MDU1NkM4Ljc1ODggNS44MDU1NiA5LjA3ODgyIDUuOTMzNCA5LjMwMDk1IDYuMTg5MDlDOS41MjY4NSA2LjQ0NDc4IDkuNjI0NzQgNi43NjE3NiA5LjU5NDYyIDcuMTQwMDRMOS40NzYwMiA4LjczMTk1QzkuNDUzNDMgOS4wMTU2NiA5LjQxOTU1IDkuMjYyNTkgOS4zNzQzNyA5LjQ3Mjc1QzkuMzI5MTkgOS42ODI5IDkuMjUzODkgOS45Mjk4MyA5LjE0ODQ3IDEwLjIxMzVMOS4wOTIgMTAuMzYwNkw5Ljg2NTY5IDExLjM3OTlDOS45MjIxNyAxMS40NTM0IDkuOTgwNTIgMTEuNTM0IDEwLjA0MDggMTEuNjIxNkMxMC4xMDEgMTEuNzA5MSAxMC4xNTM3IDExLjc5NjcgMTAuMTk4OSAxMS44ODQzTDExLjQwNzQgMTQuMTY0NEMxMS41MDUzIDE0LjM1MDEgMTEuNTI0MSAxNC41MTEyIDExLjQ2MzkgMTQuNjQ3OEMxMS40MDM3IDE0Ljc4NDQgMTEuMzAyIDE0Ljg4MjUgMTEuMTU4OSAxNC45NDJDMTEuMDE5NiAxNS4wMDE1IDEwLjg3MDkgMTUuMDEwMyAxMC43MTI4IDE0Ljk2ODNDMTAuNTU4NCAxNC45MjYyIDEwLjQzNjEgMTQuODE3NyAxMC4zNDU3IDE0LjY0MjVaTTEyLjQwNyA3Ljk2NDg5QzEyLjU4NCA3Ljk2NDg5IDEyLjcyNyA4LjAxMDQyIDEyLjgzNjIgOC4xMDE0OUMxMi45NDU0IDguMTg5MDUgMTMgOC4zMDYzOSAxMyA4LjQ1MzVDMTMgOC42MTExMSAxMi45NDU0IDguNzMzNyAxMi44MzYyIDguODIxMjdDMTIuNzMwOCA4LjkwODgzIDEyLjU4NzcgOC45NTI2MSAxMi40MDcgOC45NTI2MUgxMS4xMzA3QzEwLjk1MzggOC45NTI2MSAxMC44MTQ1IDguOTM2ODUgMTAuNzEyOCA4LjkwNTMzQzEwLjYxMTIgOC44NzAzIDEwLjUxMzMgOC44MDcyNiAxMC40MTkxIDguNzE2MTlMMTAuMDUyMSA4LjM3OTk0TDEwLjE0MjQgNy4wNDAyMUwxMS4wMzQ3IDcuOTY0ODlIMTIuNDA3Wk05LjAwMTY0IDUuMzExNjlDOC43NzE5OCA1LjMxMTY5IDguNTYzMDMgNS4yNjA5MSA4LjM3NDc4IDUuMTU5MzNDOC4xODY1MyA1LjA1NDI2IDguMDM1OTQgNC45MTQxNSA3LjkyMjk5IDQuNzM5MDNDNy44MTM4MSA0LjU2MzkgNy43NTkyMSA0LjM2OTUgNy43NTkyMSA0LjE1NTg1QzcuNzU5MjEgMy45NDIxOSA3LjgxMzgxIDMuNzQ3OCA3LjkyMjk5IDMuNTcyNjdDOC4wMzU5NCAzLjM5NzU0IDguMTg2NTMgMy4yNTkxOSA4LjM3NDc4IDMuMTU3NjJDOC41NjMwMyAzLjA1MjU0IDguNzcxOTggMyA5LjAwMTY0IDNDOS4yMzEzIDMgOS40NDAyNiAzLjA1MjU0IDkuNjI4NSAzLjE1NzYyQzkuODE2NzUgMy4yNTkxOSA5Ljk2NTQ2IDMuMzk3NTQgMTAuMDc0NiAzLjU3MjY3QzEwLjE4NzYgMy43NDc4IDEwLjI0NDEgMy45NDIxOSAxMC4yNDQxIDQuMTU1ODVDMTAuMjQ0MSA0LjM2OTUgMTAuMTg3NiA0LjU2MzkgMTAuMDc0NiA0LjczOTAzQzkuOTY1NDYgNC45MTQxNSA5LjgxNjc1IDUuMDU0MjYgOS42Mjg1IDUuMTU5MzNDOS40NDAyNiA1LjI2MDkxIDkuMjMxMyA1LjMxMTY5IDkuMDAxNjQgNS4zMTE2OVoifSl9KX1mdW5jdGlvbiBSNSgpe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjI2IDEgMTIgMTQiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpKKCJwYXRoIix7ZDoiTTMzLjI0MzcgNC41ODQ1OUMzMy4wMDA4IDQuNTg0NTkgMzIuNzgxNyA0LjUyNzI4IDMyLjU4NjYgNC40MTI2OEMzMi4zOTE1IDQuMjk0MTIgMzIuMjM0MiA0LjEzODAxIDMyLjExNDcgMy45NDQzN0MzMS45OTkyIDMuNzQ2NzcgMzEuOTQxNCAzLjUyOTQxIDMxLjk0MTQgMy4yOTIyOUMzMS45NDE0IDMuMDUxMjIgMzEuOTk5MiAyLjgzMzg3IDMyLjExNDcgMi42NDAyMkMzMi4yMzQyIDIuNDQ2NTcgMzIuMzkxNSAyLjI5MjQ1IDMyLjU4NjYgMi4xNzc4NEMzMi43ODE3IDIuMDU5MjggMzMuMDAwOCAyIDMzLjI0MzcgMkMzMy40ODI2IDIgMzMuNjk5NyAyLjA1OTI4IDMzLjg5NDggMi4xNzc4NEMzNC4wOTM5IDIuMjkyNDUgMzQuMjUxMiAyLjQ0NjU3IDM0LjM2NjcgMi42NDAyMkMzNC40ODYyIDIuODMzODcgMzQuNTQ1OSAzLjA1MTIyIDM0LjU0NTkgMy4yOTIyOUMzNC41NDU5IDMuNTI5NDEgMzQuNDg2MiAzLjc0Njc3IDM0LjM2NjcgMy45NDQzN0MzNC4yNTEyIDQuMTM4MDEgMzQuMDkzOSA0LjI5NDEyIDMzLjg5NDggNC40MTI2OEMzMy42OTk3IDQuNTI3MjggMzMuNDgyNiA0LjU4NDU5IDMzLjI0MzcgNC41ODQ1OVpNMzEuMjAwNyA5Ljc0MTkxQzMxLjA3MzMgOS42NzA3NyAzMC45NDE5IDkuNTk1NjggMzAuODA2NSA5LjUxNjY0QzMwLjY3NSA5LjQzNzYgMzAuNTU5NiA5LjM0Mjc2IDMwLjQ2IDkuMjMyMUMzMC4zNjA0IDkuMTE3NDkgMzAuMjkyNyA4Ljk3NzIgMzAuMjU2OSA4LjgxMTIyQzMwLjIyNSA4LjY0MTI4IDMwLjI0NDkgOC40Mjk4NSAzMC4zMTY2IDguMTc2OTNMMzAuODA2NSA2LjQ4MTUzQzMwLjgzODMgNi4zNjY5MiAzMC44MTg0IDYuMjc5OTggMzAuNzQ2NyA2LjIyMDdDMzAuNjc5IDYuMTU3NDcgMzAuNTk3NCA2LjEyOTgxIDMwLjUwMTggNi4xMzc3MUwyOS42NTk1IDYuMTk2OTlMMjkuNDAyNyA3LjkyMjAyQzI5LjM3ODggOC4xMDc3NyAyOS4zMTUxIDguMjQ2MDkgMjkuMjExNSA4LjMzNjk4QzI5LjEwOCA4LjQyNzg4IDI4Ljk3MjYgOC40NjU0MiAyOC44MDUzIDguNDQ5NjFDMjguNjQyIDguNDMzOCAyOC41MTg2IDguMzY2NjIgMjguNDM0OSA4LjI0ODA2QzI4LjM1MTMgOC4xMjk1IDI4LjMyMTQgNy45NzczNSAyOC4zNDUzIDcuNzkxNjFMMjguNjI2MSA1LjY4MTI2QzI4LjY1IDUuNTExMzIgMjguNzE1NyA1LjM3NDk4IDI4LjgyMzIgNS4yNzIyM0MyOC45MzA4IDUuMTY5NDggMjkuMDY4MSA1LjExMjE3IDI5LjIzNTQgNS4xMDAzMkwzMS4zMzIxIDQuOTUyMTJDMzEuODgxNyA0LjkxMjYgMzIuMzM1NyA0Ljk2OTkgMzIuNjk0MSA1LjEyNDAzQzMzLjA1MjUgNS4yNzgxNiAzMy4zNjcxIDUuNTM4OTkgMzMuNjM3OSA1LjkwNjUyTDM0LjY3MTQgNy4zMjMzTDM2LjE3MDggNi42NjUzQzM2LjMzOCA2LjU5MDIxIDM2LjQ4OTMgNi41NzQ0IDM2LjYyNDggNi42MTc4N0MzNi43NjAyIDYuNjU3MzkgMzYuODY1NyA2Ljc1MjI0IDM2Ljk0MTQgNi45MDI0MkMzNy4wMTMgNy4wNTI1OSAzNy4wMTkgNy4xOTQ4NiAzNi45NTkzIDcuMzI5MjNDMzYuOTAzNSA3LjQ2MzYgMzYuNzkyIDcuNTY4MzIgMzYuNjI0OCA3LjY0MzQxTDM0LjczMTEgOC40NzkyNUMzNC42MDM3IDguNTM4NTMgMzQuNDc0MyA4LjU1MDM5IDM0LjM0MjggOC41MTQ4MkMzNC4yMTU0IDguNDc1MyAzNC4xMTM4IDguNDAwMjEgMzQuMDM4MiA4LjI4OTU2TDMzLjM4MTEgNy4zMzUxNkMzMy4zMTM0IDcuMjQwMzEgMzMuMjI5OCA3LjE5ODgxIDMzLjEzMDIgNy4yMTA2N0MzMy4wMzA2IDcuMjIyNTMgMzIuOTY0OSA3LjI4Mzc4IDMyLjkzMzEgNy4zOTQ0NEwzMi40OTEgOC45Mjk3OEwzNC43MzExIDEwLjM4ODFDMzQuODQyNiAxMC40NTkyIDM0LjkyMjMgMTAuNTU2IDM0Ljk3MDEgMTAuNjc4NUMzNS4wMTc5IDEwLjgwMSAzNS4wMjk4IDEwLjkyNTUgMzUuMDA1OSAxMS4wNTJDMzQuOTg2IDExLjE3NDUgMzQuOTI4MiAxMS4yNzUzIDM0LjgzMjcgMTEuMzU0M0wzMi43NzE4IDEzLjA5NzFDMzIuNjA4NSAxMy4yMzU0IDMyLjQ0NTIgMTMuMjk4NyAzMi4yODE5IDEzLjI4NjhDMzIuMTIyNiAxMy4yNzUgMzEuOTkzMiAxMy4yMTM3IDMxLjg5MzcgMTMuMTAzMUMzMS43OTgxIDEyLjk5NjQgMzEuNzU0MyAxMi44NjU5IDMxLjc2MjIgMTIuNzExOEMzMS43NzAyIDEyLjU1MzcgMzEuODUzOCAxMi40MDc1IDMyLjAxMzEgMTIuMjczMUwzMy40ODg2IDExLjAxNjRMMzEuMjAwNyA5Ljc0MTkxWk0yNy4yMDQ0IDE0Ljg2MzdDMjcuMDg0OSAxNC43NTcgMjcuMDE3MiAxNC42MTg2IDI3LjAwMTMgMTQuNDQ4N0MyNi45ODkzIDE0LjI3ODggMjcuMDYxIDE0LjExNjcgMjcuMjE2MyAxMy45NjI2TDI5LjIyMzUgMTEuOTc2N0wyOS45MzQzIDkuNDgxMDhDMzAuMDQxOCA5LjYxNTQ0IDMwLjE3NTMgOS43NDU4NiAzMC4zMzQ1IDkuODcyMzJDMzAuNDk3OCA5Ljk5NDgzIDMwLjY5MyAxMC4xMTczIDMwLjkyIDEwLjIzOTlMMzEuMTE3MSAxMC4zNDY2TDMwLjMwNDcgMTIuNDMzMkMzMC4yNTI5IDEyLjU1NTcgMzAuMjA5MSAxMi42NDA3IDMwLjE3MzMgMTIuNjg4MUMzMC4xNDE0IDEyLjczNTUgMzAuMDg1NiAxMi43OTg4IDMwLjAwNiAxMi44Nzc4TDI4LjA3MDYgMTQuNzgwN0MyNy45MTkyIDE0LjkyNjkgMjcuNzYzOSAxNSAyNy42MDQ2IDE1QzI3LjQ0OTMgMTUgMjcuMzE1OSAxNC45NTQ2IDI3LjIwNDQgMTQuODYzN1oifSl9KX1mdW5jdGlvbiB4NSgpe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjQ5IDMgMTYgMTIiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpKKCJwYXRoIix7ZDoiTTU3LjAwMjggMTEuOTQ5QzU2Ljg0OCAxMS45NDkgNTYuNzE3MiAxMS44OTg3IDU2LjYxMDMgMTEuNzk4QzU2LjUwMzUgMTEuNjkzOSA1Ni40NTAxIDExLjU3MDcgNTYuNDUwMSAxMS40Mjg0VjkuMDI4NjNMNTQuNDIxNiA3LjEwNzc2QzU0LjIyMjcgNi45MjAzNSA1NC4wOTU1IDYuNjk4MjUgNTQuMDQwMyA2LjQ0MTQ0QzUzLjk4NSA2LjE4MTE2IDU0LjAxMDggNS45Mjc4MiA1NC4xMTc2IDUuNjgxNDJDNTQuMjI4MiA1LjQzODQ5IDU0LjM5NzcgNS4yNDQxNCA1NC42MjYxIDUuMDk4MzlDNTQuODU4MyA0Ljk0OTE2IDU1LjExNjIgNC44NzQ1NCA1NS4zOTk5IDQuODc0NTRINTguMTEzN0M1OC40MjMyIDQuODc0NTQgNTguNjg0OCA0Ljk3NjkyIDU4Ljg5ODUgNS4xODE2OEM1OS4xMTU5IDUuMzgyOTYgNTkuMjI0NiA1LjYyOTM2IDU5LjIyNDYgNS45MjA4N1Y3Ljc2MzY2SDYwLjg5OTNDNjEuMDUwNCA3Ljc2MzY2IDYxLjE3OTQgNy44MTM5OSA2MS4yODYyIDcuOTE0NjNDNjEuMzkzMSA4LjAxNTI3IDYxLjQ0NjUgOC4xMzg0NyA2MS40NDY1IDguMjg0MjNDNjEuNDQ2NSA4LjQyNjUxIDYxLjM5MzEgOC41NDc5OCA2MS4yODYyIDguNjQ4NjJDNjEuMTc5NCA4Ljc0OTI2IDYxLjA1MDQgOC43OTk1OCA2MC44OTkzIDguNzk5NThINTguNjcxOUM1OC41MjA5IDguNzk5NTggNTguMzkwMSA4Ljc0OTI2IDU4LjI3OTUgOC42NDg2MkM1OC4xNzI3IDguNTQ3OTggNTguMTE5MiA4LjQyNjUxIDU4LjExOTIgOC4yODQyM1Y2Ljk4ODAzQzU4LjExOTIgNi45MTg2MiA1OC4wOTkgNi44NTQ0MiA1OC4wNTg0IDYuNzk1NDJDNTguMDE3OSA2LjczMjk1IDU3Ljk0NDIgNi43MDE3MiA1Ny44MzczIDYuNzAxNzJINTYuMDYzMkM1NS45OTMyIDYuNzAxNzIgNTUuOTQ1MyA2LjcyOTQ4IDU1LjkxOTUgNi43ODUwMUM1NS44OTc0IDYuODM3MDYgNTUuOTA4NCA2Ljg4NzM5IDU1Ljk1MjYgNi45MzU5N0w1Ny40MDA3IDguNDU2MDFDNTcuNTAzOSA4LjU2MzYgNTcuNTU1NSA4LjY4MTU5IDU3LjU1NTUgOC44MDk5OVYxMS40Mjg0QzU3LjU1NTUgMTEuNTcwNyA1Ny41MDAyIDExLjY5MzkgNTcuMzg5NyAxMS43OThDNTcuMjgyOCAxMS44OTg3IDU3LjE1MzggMTEuOTQ5IDU3LjAwMjggMTEuOTQ5Wk01My4wMDEyIDE0QzUyLjU4NDggMTQgNTIuMTk0MiAxMy45MjcxIDUxLjgyOTUgMTMuNzgxNEM1MS40Njg0IDEzLjYzNTYgNTEuMTQ5NiAxMy40MzI2IDUwLjg3MzMgMTMuMTcyM0M1MC42MDA2IDEyLjkxMiA1MC4zODY5IDEyLjYxMTggNTAuMjMyMSAxMi4yNzE3QzUwLjA3NzQgMTEuOTI4MiA1MCAxMS41NjAzIDUwIDExLjE2ODFDNTAgMTAuNzc2IDUwLjA3NzQgMTAuNDA5OSA1MC4yMzIxIDEwLjA2OThDNTAuMzg2OSA5LjcyNjE4IDUwLjYwMDYgOS40MjQyNiA1MC44NzMzIDkuMTYzOThDNTEuMTQ5NiA4LjkwMzcgNTEuNDY4NCA4LjcwMDY4IDUxLjgyOTUgOC41NTQ5MkM1Mi4xOTQyIDguNDA5MTYgNTIuNTg0OCA4LjMzNjI4IDUzLjAwMTIgOC4zMzYyOEM1My40MjEyIDguMzM2MjggNTMuODExOCA4LjQwOTE2IDU0LjE3MjkgOC41NTQ5MkM1NC41Mzc3IDguNzAwNjggNTQuODU2NCA4LjkwMzcgNTUuMTI5MSA5LjE2Mzk4QzU1LjQwNTQgOS40MjQyNiA1NS42MjEgOS43MjYxOCA1NS43NzU4IDEwLjA2OThDNTUuOTMwNSAxMC40MDk5IDU2LjAwNzkgMTAuNzc2IDU2LjAwNzkgMTEuMTY4MUM1Ni4wMDc5IDExLjU2MDMgNTUuOTMwNSAxMS45MjgyIDU1Ljc3NTggMTIuMjcxN0M1NS42MjEgMTIuNjExOCA1NS40MDU0IDEyLjkxMiA1NS4xMjkxIDEzLjE3MjNDNTQuODU2NCAxMy40MzI2IDU0LjUzNzcgMTMuNjM1NiA1NC4xNzI5IDEzLjc4MTRDNTMuODExOCAxMy45MjcxIDUzLjQyMTIgMTQgNTMuMDAxMiAxNFpNNTMuMDAxMiAxMy4yNjZDNTMuNDEwMiAxMy4yNjYgNTMuNzgyMyAxMy4xNzA2IDU0LjExNzYgMTIuOTc5N0M1NC40NTY2IDEyLjc5MjMgNTQuNzI1NiAxMi41NDA3IDU0LjkyNDYgMTIuMjI0OUM1NS4xMjczIDExLjkwNTYgNTUuMjI4NiAxMS41NTM0IDU1LjIyODYgMTEuMTY4MUM1NS4yMjg2IDEwLjc4MjkgNTUuMTI3MyAxMC40MzI0IDU0LjkyNDYgMTAuMTE2NkM1NC43MjU2IDkuNzk3MzMgNTQuNDU2NiA5LjU0Mzk5IDU0LjExNzYgOS4zNTY1OUM1My43ODIzIDkuMTY1NzEgNTMuNDEwMiA5LjA3MDI4IDUzLjAwMTIgOS4wNzAyOEM1Mi41OTU5IDkuMDcwMjggNTIuMjIzNyA5LjE2NTcxIDUxLjg4NDcgOS4zNTY1OUM1MS41NDk0IDkuNTQzOTkgNTEuMjgwNCA5Ljc5NzMzIDUxLjA3NzggMTAuMTE2NkM1MC44Nzg4IDEwLjQzMjQgNTAuNzc5MyAxMC43ODI5IDUwLjc3OTMgMTEuMTY4MUM1MC43NzkzIDExLjU1MzQgNTAuODc4OCAxMS45MDU2IDUxLjA3NzggMTIuMjI0OUM1MS4yODA0IDEyLjU0MDcgNTEuNTQ5NCAxMi43OTIzIDUxLjg4NDcgMTIuOTc5N0M1Mi4yMjM3IDEzLjE3MDYgNTIuNTk1OSAxMy4yNjYgNTMuMDAxMiAxMy4yNjZaTTYyLjQ4MDEgOS42MTE2NkM2Mi4zNjIyIDkuNTE0NDkgNjIuMzAxNCA5LjQxNTU4IDYyLjI5NzcgOS4zMTQ5NEM2Mi4yOTc3IDkuMjEwODMgNjIuMzMwOCA5LjEyNDA3IDYyLjM5NzIgOS4wNTQ2NkM2Mi40NjcyIDguOTg1MjUgNjIuNTUzOCA4Ljk0NTM0IDYyLjY1NjkgOC45MzQ5M0M2Mi43NjM4IDguOTIxMDUgNjIuODY4OCA4Ljk1NTc1IDYyLjk3MiA5LjAzOTA0QzYzLjI4ODkgOS4zMDI3OSA2My41Mzk0IDkuNjE2ODcgNjMuNzIzNiA5Ljk4MTI2QzYzLjkwNzkgMTAuMzQ1NyA2NCAxMC43NDEzIDY0IDExLjE2ODFDNjQgMTEuNTYwMyA2My45MjI2IDExLjkyODIgNjMuNzY3OSAxMi4yNzE3QzYzLjYxMzEgMTIuNjExOCA2My4zOTc2IDEyLjkxMiA2My4xMjEyIDEzLjE3MjNDNjIuODQ4NSAxMy40MzI2IDYyLjUyOTggMTMuNjM1NiA2Mi4xNjUgMTMuNzgxNEM2MS44MDM5IDEzLjkyNzEgNjEuNDE1MiAxNCA2MC45OTg4IDE0QzYwLjU4MjQgMTQgNjAuMTkxOSAxMy45MjcxIDU5LjgyNzEgMTMuNzgxNEM1OS40NjIzIDEzLjYzNTYgNTkuMTQxNyAxMy40MzI2IDU4Ljg2NTQgMTMuMTcyM0M1OC41OTI3IDEyLjkxMiA1OC4zNzkgMTIuNjExOCA1OC4yMjQyIDEyLjI3MTdDNTguMDY5NSAxMS45MjgyIDU3Ljk5MjEgMTEuNTYwMyA1Ny45OTIxIDExLjE2ODFDNTcuOTkyMSAxMC45NjM0IDU4LjAxNDIgMTAuNzY1NiA1OC4wNTg0IDEwLjU3NDdDNTguMTA2MyAxMC4zODA0IDU4LjE3MjcgMTAuMTkzIDU4LjI1NzQgMTAuMDEyNUM1OC4zMDkgOS45MDE0NCA1OC4zODA4IDkuODMwMyA1OC40NzMgOS43OTkwNkM1OC41Njg4IDkuNzY0MzYgNTguNjYyNyA5Ljc2NDM2IDU4Ljc1NDggOS43OTkwNkM1OC44NTA2IDkuODMwMyA1OC45MjI1IDkuODkyNzYgNTguOTcwNCA5Ljk4NjQ3QzU5LjAxODMgMTAuMDgwMiA1OS4wMTA5IDEwLjE5ODIgNTguOTQ4MyAxMC4zNDA0QzU4LjgzMDQgMTAuNjAwNyA1OC43NzE0IDEwLjg3NjYgNTguNzcxNCAxMS4xNjgxQzU4Ljc3MTQgMTEuNTUzNCA1OC44NzA5IDExLjkwNTYgNTkuMDY5OSAxMi4yMjQ5QzU5LjI3MjUgMTIuNTQwNyA1OS41NDE1IDEyLjc5MjMgNTkuODc2OCAxMi45Nzk3QzYwLjIxNTggMTMuMTcwNiA2MC41ODk4IDEzLjI2NiA2MC45OTg4IDEzLjI2NkM2MS40MDc4IDEzLjI2NiA2MS43OCAxMy4xNzA2IDYyLjExNTMgMTIuOTc5N0M2Mi40NTA2IDEyLjc5MjMgNjIuNzE3NyAxMi41NDA3IDYyLjkxNjcgMTIuMjI0OUM2My4xMTk0IDExLjkwNTYgNjMuMjIwNyAxMS41NTM0IDYzLjIyMDcgMTEuMTY4MUM2My4yMjA3IDEwLjg1OTMgNjMuMTUyNSAxMC41NzEyIDYzLjAxNjIgMTAuMzA0QzYyLjg4MzUgMTAuMDMzMyA2Mi43MDQ4IDkuODAyNTMgNjIuNDgwMSA5LjYxMTY2Wk02MC45OTg4IDYuMjc0ODZDNjAuNzc0IDYuMjc0ODYgNjAuNTY5NSA2LjIyNDU0IDYwLjM4NTMgNi4xMjM4OUM2MC4yMDExIDYuMDE5NzggNjAuMDUzNyA1Ljg4MjcgNTkuOTQzMiA1LjcxMjY1QzU5LjgzNjMgNS41MzkxMyA1OS43ODI5IDUuMzQ2NTIgNTkuNzgyOSA1LjEzNDgzQzU5Ljc4MjkgNC45MjY2IDU5LjgzNjMgNC43Mzc0NiA1OS45NDMyIDQuNTY3NDFDNjAuMDUzNyA0LjM5Mzg5IDYwLjIwMTEgNC4yNTY4MSA2MC4zODUzIDQuMTU2MTdDNjAuNTY5NSA0LjA1MjA2IDYwLjc3NCA0IDYwLjk5ODggNEM2MS4yMTk5IDQgNjEuNDIwNyA0LjA1MjA2IDYxLjYwMTMgNC4xNTYxN0M2MS43ODE4IDQuMjU2ODEgNjEuOTI1NSA0LjM5Mzg5IDYyLjAzMjQgNC41Njc0MUM2Mi4xNDI5IDQuNzM3NDYgNjIuMTk4MiA0LjkyNjYgNjIuMTk4MiA1LjEzNDgzQzYyLjE5ODIgNS4zNDY1MiA2Mi4xNDI5IDUuNTM5MTMgNjIuMDMyNCA1LjcxMjY1QzYxLjkyNTUgNS44ODI3IDYxLjc4MTggNi4wMTk3OCA2MS42MDEzIDYuMTIzODlDNjEuNDIwNyA2LjIyNDU0IDYxLjIxOTkgNi4yNzQ4NiA2MC45OTg4IDYuMjc0ODZaIn0pfSl9ZnVuY3Rpb24gdjUoKXtyZXR1cm4gSigic3ZnIix7d2lkdGg6IjE2IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI3MCA1IDE4IDkiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpKKCJwYXRoIix7ZDoiTTg1LjU3MiAxMi4xMDM4Qzg2LjA2IDEyLjEwMzggODYuNDIwNyAxMS45ODkyIDg2LjY1NDIgMTEuNzYwMUM4Ni44ODQ3IDExLjUyODEgODcgMTEuMTY0MSA4NyAxMC42NjgxVjEwLjExMTJDODcgOS43NjkwMSA4Ni45MjA3IDkuNDYzMDIgODYuNzYyIDkuMTkzMjlDODYuNjAzMyA4LjkyMDY1IDg2LjM3NTggOC42OTczMyA4Ni4wNzk0IDguNTIzMzFDODUuNzgwMSA4LjM0OTI5IDg1LjQyMjMgOC4yMzc2MiA4NS4wMDYyIDguMTg4MzJMODMuMDE2OCA3Ljk1MzM5TDgxLjE5ODEgNi44NDgzNUM4MC45MjI3IDYuNjgwMTMgODAuNjYwOCA2LjU0MjM3IDgwLjQxMjMgNi40MzUwNUM4MC4xNjA4IDYuMzI0ODQgNzkuODk3NCA2LjIzNzgzIDc5LjYyMTkgNi4xNzQwMkM3OS4zNDY1IDYuMTEwMjEgNzkuMDM4MiA2LjA2NTI2IDc4LjY5NjkgNi4wMzkxNUM3OC4zNTI2IDYuMDEzMDUgNzcuOTUxNCA2IDc3LjQ5MzQgNkg3Ni44MTA4Qzc2LjM4ODcgNiA3NS45OTUgNi4wNDkzMSA3NS42Mjk4IDYuMTQ3OTJDNzUuMjYxNiA2LjI0MzYzIDc0LjkxODggNi4zNzEyNSA3NC42MDE1IDYuNTMwNzZDNzQuMjgxMSA2LjY5MDI4IDczLjk4NjIgNi44NjU3NiA3My43MTY4IDcuMDU3MThDNzMuNDQ0NCA3LjI0ODYgNzMuMTk1OSA3LjQzNzEyIDcyLjk3MTQgNy42MjI3NUw3Mi4yNTc0IDcuODUzMzNDNzEuODMyMyA3Ljk4Njc0IDcxLjUxNjQgOC4xODM5NyA3MS4zMDk5IDguNDQ1QzcxLjEwMzMgOC43MDMxMyA3MSA5LjAzMzc3IDcxIDkuNDM2OTJWMTAuNjQyQzcxIDExLjE0NjcgNzEuMTE1MyAxMS41MTY1IDcxLjM0NTggMTEuNzUxNEM3MS41NzYzIDExLjk4NjMgNzEuOTM3IDEyLjEwMzggNzIuNDI4IDEyLjEwMzhINzIuNzE1NEM3Mi43MDA0IDEyLjAzNzEgNzIuNjg4NSAxMS45NzA0IDcyLjY3OTUgMTEuOTAzN0M3Mi42NzA1IDExLjgzNDEgNzIuNjY2IDExLjc2NDUgNzIuNjY2IDExLjY5NDhDNzIuNjY2IDExLjM1NTUgNzIuNzQ5OCAxMS4wNDk1IDcyLjkxNzUgMTAuNzc2OUM3My4wODUxIDEwLjUwNDIgNzMuMzExMiAxMC4yODgyIDczLjU5NTYgMTAuMTI4N0M3My44NzcgOS45NjYyMyA3NC4xOTI4IDkuODg1MDIgNzQuNTQzMSA5Ljg4NTAyQzc0Ljg5MDQgOS44ODUwMiA3NS4yMDYyIDkuOTY2MjMgNzUuNDkwNiAxMC4xMjg3Qzc1Ljc3MiAxMC4yODgyIDc1Ljk5NjUgMTAuNTA0MiA3Ni4xNjQyIDEwLjc3NjlDNzYuMzMxOCAxMS4wNDk1IDc2LjQxNTcgMTEuMzU1NSA3Ni40MTU3IDExLjY5NDhDNzYuNDE1NyAxMS43NjQ1IDc2LjQxMTIgMTEuODM0MSA3Ni40MDIyIDExLjkwMzdDNzYuMzkzMiAxMS45NzA0IDc2LjM4MjcgMTIuMDM3MSA3Ni4zNzA4IDEyLjEwMzhIODEuNjM4MkM4MS42MjAzIDEyLjAzNzEgODEuNjA4MyAxMS45NzA0IDgxLjYwMjMgMTEuOTAzN0M4MS41OTMzIDExLjgzNDEgODEuNTg4OCAxMS43NjQ1IDgxLjU4ODggMTEuNjk0OEM4MS41ODg4IDExLjM1NTUgODEuNjcyNyAxMS4wNDk1IDgxLjg0MDMgMTAuNzc2OUM4Mi4wMDUgMTAuNTA0MiA4Mi4yMjk1IDEwLjI4ODIgODIuNTEzOSAxMC4xMjg3QzgyLjc5NTMgOS45NjYyMyA4My4xMTExIDkuODg1MDIgODMuNDYxNCA5Ljg4NTAyQzgzLjgxMTcgOS44ODUwMiA4NC4xMjkgOS45NjYyMyA4NC40MTM0IDEwLjEyODdDODQuNjk0OCAxMC4yODgyIDg0LjkxOTQgMTAuNTA0MiA4NS4wODcgMTAuNzc2OUM4NS4yNTE3IDExLjA0OTUgODUuMzM0IDExLjM1NTUgODUuMzM0IDExLjY5NDhDODUuMzM0IDExLjc2NDUgODUuMzMxIDExLjgzNDEgODUuMzI1IDExLjkwMzdDODUuMzE2IDExLjk3MDQgODUuMzA0MSAxMi4wMzcxIDg1LjI4OTEgMTIuMTAzOEg4NS41NzJaTTgzLjQ2MTQgMTNDODMuNzEyOSAxMyA4My45NDA0IDEyLjk0MiA4NC4xNDQgMTIuODI2Qzg0LjM0NzYgMTIuNzEgODQuNTA5MiAxMi41NTMzIDg0LjYyOSAxMi4zNTYxQzg0Ljc0ODcgMTIuMTU4OSA4NC44MDg2IDExLjkzODUgODQuODA4NiAxMS42OTQ4Qzg0LjgwODYgMTEuNDUxMiA4NC43NDg3IDExLjIzMDggODQuNjI5IDExLjAzMzZDODQuNTA5MiAxMC44MzYzIDg0LjM0NzYgMTAuNjc5NyA4NC4xNDQgMTAuNTYzN0M4My45NDA0IDEwLjQ0NzcgODMuNzEyOSAxMC4zODk3IDgzLjQ2MTQgMTAuMzg5N0M4My4yMDY5IDEwLjM4OTcgODIuOTc3OSAxMC40NDc3IDgyLjc3NDMgMTAuNTYzN0M4Mi41NzA4IDEwLjY3OTcgODIuNDA5MSAxMC44MzYzIDgyLjI4OTQgMTEuMDMzNkM4Mi4xNjk2IDExLjIzMDggODIuMTA5NyAxMS40NTEyIDgyLjEwOTcgMTEuNjk0OEM4Mi4xMDk3IDExLjkzODUgODIuMTY5NiAxMi4xNTg5IDgyLjI4OTQgMTIuMzU2MUM4Mi40MDkxIDEyLjU1MzMgODIuNTcwOCAxMi43MSA4Mi43NzQzIDEyLjgyNkM4Mi45Nzc5IDEyLjk0MiA4My4yMDY5IDEzIDgzLjQ2MTQgMTNaTTc0LjU0MzEgMTNDNzQuNzk0NiAxMyA3NS4wMjIxIDEyLjk0MiA3NS4yMjU3IDEyLjgyNkM3NS40MjkyIDEyLjcxIDc1LjU5MDkgMTIuNTUzMyA3NS43MTA2IDEyLjM1NjFDNzUuODMwNCAxMi4xNTg5IDc1Ljg5MDMgMTEuOTM4NSA3NS44OTAzIDExLjY5NDhDNzUuODkwMyAxMS40NTEyIDc1LjgzMDQgMTEuMjMwOCA3NS43MTA2IDExLjAzMzZDNzUuNTkwOSAxMC44MzYzIDc1LjQyOTIgMTAuNjc5NyA3NS4yMjU3IDEwLjU2MzdDNzUuMDIyMSAxMC40NDc3IDc0Ljc5NDYgMTAuMzg5NyA3NC41NDMxIDEwLjM4OTdDNzQuMjg4NiAxMC4zODk3IDc0LjA1OTYgMTAuNDQ3NyA3My44NTYgMTAuNTYzN0M3My42NTI0IDEwLjY3OTcgNzMuNDkwOCAxMC44MzYzIDczLjM3MSAxMS4wMzM2QzczLjI1MTMgMTEuMjMwOCA3My4xOTE0IDExLjQ1MTIgNzMuMTkxNCAxMS42OTQ4QzczLjE5MTQgMTEuOTM4NSA3My4yNTEzIDEyLjE1ODkgNzMuMzcxIDEyLjM1NjFDNzMuNDkwOCAxMi41NTMzIDczLjY1MjQgMTIuNzEgNzMuODU2IDEyLjgyNkM3NC4wNTk2IDEyLjk0MiA3NC4yODg2IDEzIDc0LjU0MzEgMTNaIn0pfSl9ZnVuY3Rpb24gQTAoe3NpemU6JD0xOCxzdHJva2VXaWR0aDpLPTJ9KXtyZXR1cm4gSihaMix7c2l6ZTokLHN0cm9rZVdpZHRoOkt9KX12YXIgRDg9IkFjY2Vzc2liaWxpdHkgdW5hdmFpbGFibGUgb24gdGhpcyBzaW11bGF0b3IuIjtmdW5jdGlvbiBtMigkKXtyZXR1cm4gJD8uZXJyb3JzPy5pbmNsdWRlcyhEOCk/PyExfWZ1bmN0aW9uIGYyKCQsSyl7aWYoJD09PUspcmV0dXJuITA7aWYoJC5pZCE9PUsuaWR8fCQucGF0aCE9PUsucGF0aHx8JC5sYWJlbCE9PUsubGFiZWx8fCQudmFsdWUhPT1LLnZhbHVlfHwkLnJvbGUhPT1LLnJvbGV8fCQudHlwZSE9PUsudHlwZXx8JC5lbmFibGVkIT09Sy5lbmFibGVkKXJldHVybiExO2xldCBRPSQuZnJhbWUsWD1LLmZyYW1lO3JldHVybiBRPT09WHx8US54PT09WC54JiZRLnk9PT1YLnkmJlEud2lkdGg9PT1YLndpZHRoJiZRLmhlaWdodD09PVguaGVpZ2h0fWZ1bmN0aW9uIHAyKCQsSyl7bGV0IFE9JC5sYWJlbHx8JC5yb2xlfHxgZWxlbWVudCAke0srMX1gLFg9JC5yb2xlfHwkLnR5cGU7cmV0dXJue2lkOiQuaWQscGF0aDokLnBhdGgsbGFiZWw6USx2YWx1ZTokLnZhbHVlLHJvbGU6WCx0eXBlOiQudHlwZSxlbmFibGVkOiQuZW5hYmxlZCxmcmFtZTokLmZyYW1lfX1mdW5jdGlvbiBNOCgkLEspe2xldCBRPU1hdGgubWF4KDAsJC54KSxYPU1hdGgubWF4KDAsJC55KSxaPU1hdGgubWluKEsud2lkdGgsJC54KyQud2lkdGgpLFk9TWF0aC5taW4oSy5oZWlnaHQsJC55KyQuaGVpZ2h0KSxxPU1hdGgubWF4KDAsWi1RKSxHPU1hdGgubWF4KDAsWS1YKTtyZXR1cm4gcT4wJiZHPjA/e3g6USx5Olgsd2lkdGg6cSxoZWlnaHQ6R306bnVsbH1mdW5jdGlvbiBfMCgkKXtyZXR1cm4gJC5pZH1mdW5jdGlvbiBnNSgkKXtyZXR1cm5gJHskLnh9LCR7JC55fSAkeyQud2lkdGh9eCR7JC5oZWlnaHR9YH1mdW5jdGlvbiBXOCgkKXtyZXR1cm5bYEFYIGxhYmVsOiAkeyQubGFiZWx8fCJVbmxhYmVsZWQifWAsJC5yb2xlP2Byb2xlOiAkeyQucm9sZX1gOiIiLCQudHlwZT9gdHlwZTogJHskLnR5cGV9YDoiIiwkLnZhbHVlP2B2YWx1ZTogJHskLnZhbHVlfWA6IiIsJC5pZD9gaWQ6ICR7JC5pZH1gOiIiLGBwYXRoOiAkeyQucGF0aH1gLGBmcmFtZTogJHtnNSgkLmZyYW1lKX1gXS5maWx0ZXIoQm9vbGVhbikuam9pbigiOyAiKX1mdW5jdGlvbiB1MigkKXtyZXR1cm4gJCYmdHlwZW9mICQuZGV2aWNlPT09InN0cmluZyImJnR5cGVvZiAkLnVybD09PSJzdHJpbmciPyQ6bnVsbH1mdW5jdGlvbiBnMSgkKXtsZXQgUT13aW5kb3cuX19TSU1fUFJFVklFV19fPy5iYXNlUGF0aD8/KHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cLyskLywiIil8fCIvIik7cmV0dXJuIFE9PT0iLyI/YC8keyR9YDpgJHtRfS8keyR9YH12YXIgZjQ9NTAwMCxwND0yMDAwLE4yPW51bGwsaDU9bnVsbCx1ND0xLGw0PTEsdjA9bmV3IE1hcCx4MD1uZXcgTWFwO2Z1bmN0aW9uIGQ0KCl7bGV0ICQ9bmV3IFVSTChnMSgiZXhlYy13cyIpLHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtyZXR1cm4gJC5wcm90b2NvbD0kLnByb3RvY29sPT09Imh0dHBzOiI/IndzczoiOiJ3czoiLCQudG9TdHJpbmcoKX1mdW5jdGlvbiBjNCgkKXtmb3IobGV0IEsgb2YgdjAudmFsdWVzKCkpSy5yZWplY3QoJCk7djAuY2xlYXIoKX1mdW5jdGlvbiBUOCgpe3JldHVybiBOMj8/PW5ldyBQcm9taXNlKCgkLEspPT57bGV0IFE9ITEsWDt0cnl7WD1uZXcgV2ViU29ja2V0KGQ0KCkpfWNhdGNoKHEpe04yPW51bGwsSyhxKTtyZXR1cm59bGV0IFo9c2V0VGltZW91dCgoKT0+e2lmKCFRKVE9ITAsTjI9bnVsbCxLKEVycm9yKCJjb250cm9sIHNvY2tldCBjb25uZWN0IHRpbWVvdXQiKSksWC5jbG9zZSgpfSxmNCk7WC5vbm9wZW49KCk9PntYLnNlbmQoSlNPTi5zdHJpbmdpZnkoe3Rva2VuOndpbmRvdy5fX1NJTV9QUkVWSUVXX18/LmV4ZWNUb2tlbj8/IiJ9KSl9LFgub25tZXNzYWdlPShxKT0+e2xldCBHO3RyeXtHPUpTT04ucGFyc2UoU3RyaW5nKHEuZGF0YSkpfWNhdGNoe3JldHVybn1pZihHLnJlYWR5KXtpZighUSlRPSEwLGNsZWFyVGltZW91dChaKSxoNT1YLCQoWCk7cmV0dXJufWlmKHR5cGVvZiBHLnN1Yj09PSJudW1iZXIiKXtsZXQgVj14MC5nZXQoRy5zdWIpO2lmKCFWKXJldHVybjtpZihHLmVuZCl4MC5kZWxldGUoRy5zdWIpLFYub25FbmQoKTtlbHNlIGlmKHR5cGVvZiBHLmRhdGE9PT0ic3RyaW5nIilWLm9uRGF0YShHLmRhdGEpO3JldHVybn1pZih0eXBlb2YgRy5pZCE9PSJudW1iZXIiKXJldHVybjtsZXQgQj12MC5nZXQoRy5pZCk7aWYoIUIpcmV0dXJuO3YwLmRlbGV0ZShHLmlkKSxCLnJlc29sdmUoRyl9O2xldCBZPSgpPT57TjI9bnVsbCxoNT1udWxsO2xldCBxPUVycm9yKCJjb250cm9sIHNvY2tldCBjbG9zZWQg4oCUIHJlbG9hZCB0aGUgcGFnZSBpZiB0aGlzIHBlcnNpc3RzIik7YzQocSk7bGV0IEc9Wy4uLngwLnZhbHVlcygpXTt4MC5jbGVhcigpO2ZvcihsZXQgQiBvZiBHKUIub25FbmQoKTtpZighUSlRPSEwLGNsZWFyVGltZW91dChaKSxLKHEpfTtYLm9uZXJyb3I9WSxYLm9uY2xvc2U9WX0pLE4yfWFzeW5jIGZ1bmN0aW9uIFA4KCQsSyl7bGV0IFE9YXdhaXQgVDgoKTtpZihRLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTil0aHJvdyBFcnJvcigiY29udHJvbCBzb2NrZXQgbm90IG9wZW4iKTtyZXR1cm4gbmV3IFByb21pc2UoKFgsWik9PntsZXQgWT11NCsrLHE9KCk9Pnt2MC5kZWxldGUoWSksWihLPy5yZWFzb24/P25ldyBET01FeGNlcHRpb24oIkFib3J0ZWQiLCJBYm9ydEVycm9yIikpfTtpZihLKXtpZihLLmFib3J0ZWQpe3EoKTtyZXR1cm59Sy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIscSx7b25jZTohMH0pfXYwLnNldChZLHtyZXNvbHZlOihHKT0+e0s/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixxKSxYKEcpfSxyZWplY3Q6KEcpPT57Sz8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEpLFooRyl9fSksUS5zZW5kKEpTT04uc3RyaW5naWZ5KHtpZDpZLC4uLiR9KSl9KX1hc3luYyBmdW5jdGlvbiBDMSgkLEspe2xldCBRPWF3YWl0IFA4KHtjb21tYW5kOiR9LEs/LnNpZ25hbCk7cmV0dXJue3N0ZG91dDpRLnN0ZG91dD8/IiIsc3RkZXJyOlEuc3RkZXJyPz8iIixleGl0Q29kZTpRLmV4aXRDb2RlPz8xfX1hc3luYyBmdW5jdGlvbiBqNSgkLEspe2xldCBRPWF3YWl0IFA4KHt1aTokfSxLPy5zaWduYWwpO2lmKFEuZXJyb3IpdGhyb3cgRXJyb3IoUS5lcnJvcik7cmV0dXJuIFEuc3RhdHVzPz9udWxsfWZ1bmN0aW9uIEwyKCQpe2xldCBLPXtvbm1lc3NhZ2U6bnVsbCxvbmVycm9yOm51bGwsY2xvc2U6KCk9Pnt9fSxRPSExLFg9bnVsbCxaPW51bGwsWT0iIixxPShWKT0+e1krPVYucmVwbGFjZSgvXHJcbi9nLGAKYCk7bGV0IEM7d2hpbGUoKEM9WS5pbmRleE9mKGAKCmApKSE9PS0xKXtsZXQgTD1ZLnNsaWNlKDAsQyk7WT1ZLnNsaWNlKEMrMik7bGV0IEY9TC5zcGxpdChgCmApLmZpbHRlcigoTik9Pk4uc3RhcnRzV2l0aCgiZGF0YToiKSkubWFwKChOKT0+Ti5zbGljZSg1KS5yZXBsYWNlKC9eIC8sIiIpKS5qb2luKGAKYCk7aWYoRilLLm9ubWVzc2FnZT8uKHtkYXRhOkZ9KX19LEc9KCk9PntpZihRfHxaKXJldHVybjtLLm9uZXJyb3I/LigpLFo9c2V0VGltZW91dCgoKT0+e1o9bnVsbCxCKCl9LHA0KX0sQj1hc3luYygpPT57aWYoUSlyZXR1cm47dHJ5e2xldCBWPWF3YWl0IFQ4KCk7aWYoUSlyZXR1cm47WT0iIixYPWw0KysseDAuc2V0KFgse29uRGF0YTpxLG9uRW5kOkd9KSxWLnNlbmQoSlNPTi5zdHJpbmdpZnkoe3N1YjpYLHBhdGg6JH0pKX1jYXRjaHtHKCl9fTtyZXR1cm4gQigpLEsuY2xvc2U9KCk9PntpZihRPSEwLFopY2xlYXJUaW1lb3V0KFopO2lmKFghPT1udWxsKXt4MC5kZWxldGUoWCk7dHJ5e2g1Py5zZW5kKEpTT04uc3RyaW5naWZ5KHt1bnN1YjpYfSkpfWNhdGNoe31YPW51bGx9fSxLfWZ1bmN0aW9uIFoxKCQpe3JldHVybmAnJHskLnJlcGxhY2UoLycvZywiJ1xcJyciKX0nYH1mdW5jdGlvbiB3OCgkKXtsZXRbSyxRXT1EKG51bGwpLFtYLFpdPUQoIkFYIG9mZiIpO3JldHVybiBJKCgpPT57aWYoISQpe1EobnVsbCksWigiQVggb2ZmIik7cmV0dXJufVEobnVsbCksWigiQVggd2FpdGluZyIpO2xldCBZPUwyKCQpO3JldHVybiBZLm9ubWVzc2FnZT0ocSk9Pnt0cnl7bGV0IEc9SlNPTi5wYXJzZShxLmRhdGEpO1EoRyksWihtMihHKT8iQVggdW5hdmFpbGFibGUiOmAke0cuZWxlbWVudHMubGVuZ3RofSBBWCBlbGVtZW50c2ApfWNhdGNoe1ooIkFYIHBhcnNlIGVycm9yIil9fSxZLm9uZXJyb3I9KCk9PntaKCJBWCByZWNvbm5lY3RpbmciKX0sKCk9PlkuY2xvc2UoKX0sWyRdKSx7c25hcHNob3Q6SyxzdGF0dXM6WH19dmFyIG01PWQxKHtzbmFwc2hvdDpudWxsLHN0YXR1czoiQVggb2ZmIn0pLGY1PWQxKG51bGwpO2Z1bmN0aW9uIGcwKCl7cmV0dXJuIHIxKG01KX1mdW5jdGlvbiBsMigpe2xldCAkPXIxKGY1KTtpZighJCl0aHJvdyBFcnJvcigiQVggc2VsZWN0aW9uIGNvbnRleHQgaXMgdW5hdmFpbGFibGUiKTtyZXR1cm4gJH12YXIgRTg9RTAoZnVuY3Rpb24oe2VsZW1lbnQ6SyxpbmRleDpRLHNjcmVlbjpYLGhpZ2hsaWdodGVkOlosc2VsZWN0ZWQ6WSxvbkhpZ2hsaWdodDpxLG9uU2VsZWN0Okd9KXtsZXQgQj1fMChLKSxWPXAyKEssUSksQz1NOChLLmZyYW1lLFgpO2lmKCFDKXJldHVybiBudWxsO2xldCBMPVc4KFYpO3JldHVybiBKKCJidXR0b24iLHt0eXBlOiJidXR0b24iLCJkYXRhLWF4LWtleSI6QiwiZGF0YS1heC1pZCI6Vi5pZCwiZGF0YS1heC1wYXRoIjpWLnBhdGgsImRhdGEtYXgtbGFiZWwiOlYubGFiZWwsImRhdGEtYXgtdmFsdWUiOlYudmFsdWUsImRhdGEtYXgtcm9sZSI6Vi5yb2xlLCJkYXRhLWF4LXR5cGUiOlYudHlwZSwiZGF0YS1heC1lbmFibGVkIjpTdHJpbmcoVi5lbmFibGVkKSwiZGF0YS1heC1mcmFtZSI6ZzUoVi5mcmFtZSksImRhdGEtYXgtc2VsZWN0ZWQiOlN0cmluZyhZKSwiYXJpYS1sYWJlbCI6Sy5sYWJlbHx8TCx0aXRsZTpMLG9uQ2xpY2s6KCk9PkcoQiksb25Nb3VzZUVudGVyOigpPT5xKEIpLG9uTW91c2VMZWF2ZTooKT0+cShudWxsKSxjbGFzc05hbWU6ImFic29sdXRlIGJveC1ib3JkZXIgbWluLXctcHggbWluLWgtcHggcC0wIHJvdW5kZWQtWzNweF0gYm9yZGVyIGN1cnNvci1wb2ludGVyIHBvaW50ZXItZXZlbnRzLWF1dG8iLHN0eWxlOntsZWZ0OmAke0MueC9YLndpZHRoKjEwMH0lYCx0b3A6YCR7Qy55L1guaGVpZ2h0KjEwMH0lYCx3aWR0aDpgJHtDLndpZHRoL1gud2lkdGgqMTAwfSVgLGhlaWdodDpgJHtDLmhlaWdodC9YLmhlaWdodCoxMDB9JWAsYm9yZGVyQ29sb3I6WT8iIzYwYTVmYSI6Wj8iI2ZiYmYyNCI6IiMzNGQzOTkiLGJhY2tncm91bmQ6WT8icmdiYSg5NiwxNjUsMjUwLDAuMjQpIjpaPyJyZ2JhKDI0NSwxNTgsMTEsMC4yOCkiOiJyZ2JhKDE2LDE4NSwxMjksMC4xMikifX0pfSwoJCxLKT0+JC5pbmRleD09PUsuaW5kZXgmJiQuaGlnaGxpZ2h0ZWQ9PT1LLmhpZ2hsaWdodGVkJiYkLnNlbGVjdGVkPT09Sy5zZWxlY3RlZCYmJC5vbkhpZ2hsaWdodD09PUsub25IaWdobGlnaHQmJiQub25TZWxlY3Q9PT1LLm9uU2VsZWN0JiYkLnNjcmVlbi53aWR0aD09PUsuc2NyZWVuLndpZHRoJiYkLnNjcmVlbi5oZWlnaHQ9PT1LLnNjcmVlbi5oZWlnaHQmJmYyKCQuZWxlbWVudCxLLmVsZW1lbnQpKTtmdW5jdGlvbiBJOCgpe2xldHtzbmFwc2hvdDokfT1nMCgpLHtoaWdobGlnaHRlZEtleTpLLHNlbGVjdGVkS2V5OlEsc2V0SGlnaGxpZ2h0ZWRLZXk6WCxzZXRTZWxlY3RlZEtleTpafT1sMigpO2lmKCEkPy5zY3JlZW4ud2lkdGh8fCEkPy5zY3JlZW4uaGVpZ2h0KXJldHVybiBudWxsO3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgei0xMCBvdmVyZmxvdy1oaWRkZW4gcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46JC5lbGVtZW50cy5tYXAoKFkscSk9PntsZXQgRz1fMChZKTtyZXR1cm4gSihFOCx7ZWxlbWVudDpZLGluZGV4OnEsc2NyZWVuOiQuc2NyZWVuLGhpZ2hsaWdodGVkOkc9PT1LLHNlbGVjdGVkOkc9PT1RLG9uSGlnaGxpZ2h0Olgsb25TZWxlY3Q6Wn0sRyl9KX0pfWZ1bmN0aW9uIHk4KHtlbmRwb2ludDokLGNoaWxkcmVuOkt9KXtsZXR7c25hcHNob3Q6USxzdGF0dXM6WH09dzgoJCksW1osWV09RChudWxsKSxbcSxHXT1EKG51bGwpO0koKCk9PntpZighJClZKG51bGwpLEcobnVsbCl9LFskXSk7bGV0IEI9TzEoKCk9Pih7c25hcHNob3Q6USxzdGF0dXM6WH0pLFtRLFhdKSxWPU8xKCgpPT4oe2hpZ2hsaWdodGVkS2V5Olosc2VsZWN0ZWRLZXk6cSxzZXRIaWdobGlnaHRlZEtleTpZLHNldFNlbGVjdGVkS2V5Okd9KSxbWixxXSk7cmV0dXJuIEoobTUse3ZhbHVlOkIsY2hpbGRyZW46SihmNSx7dmFsdWU6VixjaGlsZHJlbjpLfSl9KX1mdW5jdGlvbiBiOCh7b3ZlcmxheUVuYWJsZWQ6JCxzdHJlYW1pbmc6SyxvblRvZ2dsZU92ZXJsYXk6UX0pe2xldHtzdGF0dXM6WH09ZzAoKSxbWixZXT1EKCExKSxxPSQmJks7cmV0dXJuIEooRTEuQnV0dG9uLHsiYXJpYS1sYWJlbCI6JD8iSGlkZSBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiOiJTaG93IGFjY2Vzc2liaWxpdHkgb3ZlcmxheSIsImFyaWEtcHJlc3NlZCI6JCx0aXRsZTpYLG9uQ2xpY2s6USxvbk1vdXNlRW50ZXI6KCk9PlkoITApLG9uTW91c2VMZWF2ZTooKT0+WSghMSksc3R5bGU6cT97YmFja2dyb3VuZDpaPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIjoicmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC45NSkifTp2b2lkIDAsY2hpbGRyZW46SihDMCx7c2l6ZToxOSxzdHJva2VXaWR0aDoyfSl9KX1mdW5jdGlvbiBTOCgkKXtpZighTnVtYmVyLmlzRmluaXRlKCQpfHwkPD0wKXJldHVybiIwIEIiO2xldCBLPSQvMTA3Mzc0MTgyNDtpZihLPj0xKXJldHVybmAke0sudG9GaXhlZChLPj0xMD8wOjEpfSBHQmA7cmV0dXJuYCR7KCQvMTA0ODU3NikudG9GaXhlZCgwKX0gTUJgfWZ1bmN0aW9uIGQyKCQpe2xldCBLPSQubWF0Y2goL14oW2EtekEtWl0rKS0oLispJC8pO2lmKCFLKXJldHVybntvczokLHZlcnNpb246IiJ9O3JldHVybntvczpLWzFdLHZlcnNpb246S1syXS5yZXBsYWNlKC8tL2csIi4iKX19ZnVuY3Rpb24gUjgoJCl7cmV0dXJuIGQyKCQpLnZlcnNpb258fCR9ZnVuY3Rpb24gYzIoJCl7bGV0e29zOkssdmVyc2lvbjpRfT1kMigkKTtyZXR1cm4gUT9gJHtLfSAke1F9YDpLfWZ1bmN0aW9uIHg4KHtuYW1lOiQscnVudGltZTpLLGNocm9tZTpRLHBsYWNlaG9sZGVyQXNzZXQ6WCxidXN5OlosYnVzeUxhYmVsOlk9IlN0YXJ0aW5n4oCmIixlcnJvcjpxLG9uU3RhcnQ6R30pe2xldCBCPW4xKCQpLFY9QTFbQl0sQz1YPz9udWxsLEw9Qz9udWxsOlE/P251bGwsRj1MP3t3aWR0aDpMLnNjcmVlbi53aWR0aCxoZWlnaHQ6TC5zY3JlZW4uaGVpZ2h0fTpTMChCLCQpLE49UjAoQixGKSxfPUM/bzQoQixDLm5hbWUpOkw/TipMLmZyYW1lLndpZHRoL0wuc2NyZWVuLndpZHRoOk4qVi53aWR0aC8oVi53aWR0aC0yKlYuYmV6ZWxYKSx6PUM/e3dpZHRoOkMud2lkdGgsaGVpZ2h0OkMuaGVpZ2h0fTpMP3t3aWR0aDpMLmZyYW1lLndpZHRoLGhlaWdodDpMLmZyYW1lLmhlaWdodH06e3dpZHRoOlYud2lkdGgsaGVpZ2h0OlYuaGVpZ2h0fSxVPWAke3oud2lkdGh9IC8gJHt6LmhlaWdodH1gLEE9KHoud2lkdGgvei5oZWlnaHQqYTQoQikpLnRvRml4ZWQoMiksTT1CPT09InZpc2lvbiI/SihuNCx7fSk6SihyNCx7dHlwZTpCfSk7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTUgbWluLXctMCB3LWZ1bGwiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHctZnVsbCIsc3R5bGU6e3dpZHRoOmBtaW4oMTAwJSwgJHtffXB4LCAke0F9ZHZoKWAsbWF4V2lkdGg6Xyxhc3BlY3RSYXRpbzpVfSxjaGlsZHJlbjpDP0ooaTQse25hbWU6Qy5uYW1lLGZhbGxiYWNrOk19KTpMP0ooczQse2Nocm9tZTpMfSk6TX0pLEooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzE3cHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS85MCIsY2hpbGRyZW46JH0pLEooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46W2MyKEspLCIgU2ltdWxhdG9yIl19KV19KSxxJiZKKCJkaXYiLHtjbGFzc05hbWU6InRleHQtZGFuZ2VyIHRleHQtWzEycHhdIGZvbnQtbW9ubyBtYXgtdy05MCB0ZXh0LWNlbnRlciIsY2hpbGRyZW46cX0pLEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpHLGRpc2FibGVkOlosY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC01IHB5LTIgcm91bmRlZC1mdWxsIHRleHQtWzE0cHhdIGZvbnQtbWVkaXVtIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNdICR7Wj8iYmctd2hpdGUvOCB0ZXh0LXdoaXRlLzU1IGN1cnNvci1kZWZhdWx0IjoiYmctd2hpdGUvMTIgdGV4dC13aGl0ZS85MCBob3ZlcjpiZy13aGl0ZS8xOCBjdXJzb3ItcG9pbnRlciJ9YCxjaGlsZHJlbjpbWiYmSigic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJzaXplLTMuNSByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXdoaXRlLzI1IGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjhzX2xpbmVhcl9pbmZpbml0ZV0iLHN0eWxlOntib3JkZXJUb3BDb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjkpIn19KSxaP1k6IlN0YXJ0Il19KV19KX1mdW5jdGlvbiBvNCgkLEspe2lmKCQ9PT0id2F0Y2giKXtpZihLLmluY2x1ZGVzKCJ1bHRyYSIpKXJldHVybiAyNTU7aWYoSy5pbmNsdWRlcygid2F0Y2gtc2UtIil8fEsuaW5jbHVkZXMoImFwcGxlLXdhdGNoLXNlLSIpKXJldHVybiAyMzg7cmV0dXJuIDI1MH1pZigkPT09InZpc2lvbiIpcmV0dXJuIDM5MDtpZigkPT09ImlwYWQiKXJldHVybiAzNDA7cmV0dXJuIDI4MH1mdW5jdGlvbiBhNCgkKXtpZigkPT09InZpc2lvbiIpcmV0dXJuIDM0O2lmKCQ9PT0iaXBhZCIpcmV0dXJuIDUwO2lmKCQ9PT0id2F0Y2giKXJldHVybiA1NjtyZXR1cm4gNTJ9ZnVuY3Rpb24gcjQoe3R5cGU6JH0pe2xldCBLPUExWyRdO3JldHVybiBKKGUse2NoaWxkcmVuOltKKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtLLndpZHRofSAke0suaGVpZ2h0fWAsY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCIscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pZFlNaWQgbWVldCIsY2hpbGRyZW46W0ooImRlZnMiLHtjaGlsZHJlbjpKKCJsaW5lYXJHcmFkaWVudCIse2lkOiJwbGFjZWhvbGRlci1zY3JlZW4iLHgxOiIwIix5MToiMCIseDI6IjEiLHkyOiIxIixjaGlsZHJlbjpbSigic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzZmYThlNiJ9KSxKKCJzdG9wIix7b2Zmc2V0OiI1NSUiLHN0b3BDb2xvcjoiIzViOTNkNiJ9KSxKKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiM1MTg4Y2YifSldfSl9KSxKKCJyZWN0Iix7eDpLLmJlemVsWCx5OksuYmV6ZWxZLHdpZHRoOksud2lkdGgtMipLLmJlemVsWCxoZWlnaHQ6Sy5oZWlnaHQtMipLLmJlemVsWSxyeDpLLmlubmVyUmFkaXVzLGZpbGw6InVybCgjcGxhY2Vob2xkZXItc2NyZWVuKSJ9KV19KSxKKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46SihSMix7dHlwZTokfSl9KV19KX1mdW5jdGlvbiBpNCh7bmFtZTokLGZhbGxiYWNrOkt9KXtsZXRbUSxYXT1EKCJsb2FkaW5nIik7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46W1EhPT0ibG9hZGVkIiYmSyxRIT09ImVycm9yIiYmSigiaW1nIix7YWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHNyYzokNygkKSxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIHNlbGVjdC1ub25lIG9iamVjdC1jb250YWluIixzdHlsZTp7V2Via2l0VXNlckRyYWc6Im5vbmUifSxvbkxvYWQ6KCk9PlgoImxvYWRlZCIpLG9uRXJyb3I6KCk9PlgoImVycm9yIil9KV19KX1mdW5jdGlvbiBuNCgpe2xldHt3aWR0aDokLGhlaWdodDpLfT1BMS52aXNpb247cmV0dXJuIEooInN2ZyIse3ZpZXdCb3g6YDAgMCAkeyR9ICR7S31gLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwiLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaWRZTWlkIG1lZXQiLGZpbGw6Im5vbmUiLCJhcmlhLWhpZGRlbiI6ITAsY2hpbGRyZW46W0ooImRlZnMiLHtjaGlsZHJlbjpbSigibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLXBsYWNlaG9sZGVyLXNoZWxsIix4MToiMCIseTE6IjAiLHgyOiIwIix5MjoiMSIsY2hpbGRyZW46W0ooInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiMyODI4MmIifSksSigic3RvcCIse29mZnNldDoiNTQlIixzdG9wQ29sb3I6IiMxMjEyMTQifSksSigic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjMDcwNzA4In0pXX0pLEooImxpbmVhckdyYWRpZW50Iix7aWQ6InZpc2lvbi1wbGFjZWhvbGRlci1nbGFzcyIseDE6IjAiLHkxOiIwIix4MjoiMSIseTI6IjEiLGNoaWxkcmVuOltKKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjMzEzNTNhIn0pLEooInN0b3AiLHtvZmZzZXQ6IjQ4JSIsc3RvcENvbG9yOiIjMGEwYjBkIn0pLEooInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzAxMDEwMiJ9KV19KSxKKCJyYWRpYWxHcmFkaWVudCIse2lkOiJ2aXNpb24tcGxhY2Vob2xkZXItbGVucyIsY3g6IjUwJSIsY3k6IjQ2JSIscjoiNjAlIixjaGlsZHJlbjpbSigic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzIwMjgzMiJ9KSxKKCJzdG9wIix7b2Zmc2V0OiI3MiUiLHN0b3BDb2xvcjoiIzA5MGEwZCJ9KSxKKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMwMTAxMDIifSldfSldfSksSigicGF0aCIse2Q6Ik05NSAxNzdDOTUgMTE5IDE0NyA4NiAyMTggOTFDMjU3IDk0IDI4NiAxMTEgMzIwIDExMUMzNTQgMTExIDM4MyA5NCA0MjIgOTFDNDkzIDg2IDU0NSAxMTkgNTQ1IDE3N1YyMjJDNTQ1IDI3OCA1MDEgMzExIDQ0MyAzMTBDMzk4IDMwOSAzNzEgMjg2IDM0NSAyNjhDMzI5IDI1NyAzMTEgMjU3IDI5NSAyNjhDMjY5IDI4NiAyNDIgMzA5IDE5NyAzMTBDMTM5IDMxMSA5NSAyNzggOTUgMjIyVjE3N1oiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLXNoZWxsKSIsc3Ryb2tlOiIjM2QzZDQyIixzdHJva2VXaWR0aDoiNyJ9KSxKKCJwYXRoIix7ZDoiTTExNyAxODFDMTE3IDEzNCAxNTcgMTEyIDIyMCAxMTZDMjYwIDExOSAyODcgMTM2IDMyMCAxMzZDMzUzIDEzNiAzODAgMTE5IDQyMCAxMTZDNDgzIDExMiA1MjMgMTM0IDUyMyAxODFWMjE3QzUyMyAyNjMgNDg4IDI4NyA0MzkgMjg3QzM5OSAyODcgMzY5IDI2NCAzNDUgMjUwQzMyOSAyNDAgMzExIDI0MCAyOTUgMjUwQzI3MSAyNjQgMjQxIDI4NyAyMDEgMjg3QzE1MiAyODcgMTE3IDI2MyAxMTcgMjE3VjE4MVoiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLWdsYXNzKSIsc3Ryb2tlOiIjMTcxODFiIixzdHJva2VXaWR0aDoiNSJ9KSxKKCJwYXRoIix7ZDoiTTE0MyAxODZDMTQ1IDE0OCAxNzYgMTM1IDIyNiAxMzhDMjY0IDE0MSAyODkgMTU2IDMyMCAxNTZDMzUxIDE1NiAzNzYgMTQxIDQxNCAxMzhDNDY0IDEzNSA0OTUgMTQ4IDQ5NyAxODZWMjEzQzQ5NyAyNTAgNDY5IDI2NiA0MzIgMjY2QzM5NCAyNjYgMzY5IDI0NiAzNDMgMjM1QzMyOCAyMjkgMzEyIDIyOSAyOTcgMjM1QzI3MSAyNDYgMjQ2IDI2NiAyMDggMjY2QzE3MSAyNjYgMTQzIDI1MCAxNDMgMjEzVjE4NloiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLWxlbnMpIixzdHJva2U6IiMyNjJhMmYiLHN0cm9rZVdpZHRoOiIyIn0pLEooInBhdGgiLHtkOiJNMTUxIDE3MUMxNzkgMTUwIDIxNyAxNDcgMjUxIDE1NE0zODkgMTU0QzQyMyAxNDcgNDYxIDE1MCA0ODkgMTcxIixzdHJva2U6IiM0ZTUzNWEiLHN0cm9rZVdpZHRoOiIzIixzdHJva2VMaW5lY2FwOiJyb3VuZCJ9KSxKKCJwYXRoIix7ZDoiTTI3NyAyMzNDMjg5IDIyNCAzMDQgMjE5IDMyMCAyMTlDMzM2IDIxOSAzNTEgMjI0IDM2MyAyMzMiLHN0cm9rZToiIzNiNDA0NiIsc3Ryb2tlV2lkdGg6IjQiLHN0cm9rZUxpbmVjYXA6InJvdW5kIn0pXX0pfWZ1bmN0aW9uIHM0KHtjaHJvbWU6JH0pe2xldCBLPWAkeyQuaW5uZXJDb3JuZXJSYWRpdXMvJC5zY3JlZW4ud2lkdGgqMTAwfSUgLyAkeyQuaW5uZXJDb3JuZXJSYWRpdXMvJC5zY3JlZW4uaGVpZ2h0KjEwMH0lYCxRPSQuY29tcG9zaXRlSW1hZ2U/JC5idXR0b25zLmZpbHRlcigoWCk9Plgub25Ub3ApOiQuYnV0dG9ucztyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOltRLm1hcCgoWCk9PkoocDUse2Nocm9tZTokLGltYWdlOlguaW1hZ2UscmVjdDpYLmZyYW1lLHpJbmRleDpYLm9uVG9wPzQ6MH0sYGJ1dHRvbi0ke1gubmFtZX1gKSksSigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBiZy1ibGFjayIsc3R5bGU6ey4uLnY4KCQsJC5zY3JlZW4sMSksYm9yZGVyUmFkaXVzOkt9fSksJC5jb21wb3NpdGVJbWFnZT9KKHA1LHtjaHJvbWU6JCxpbWFnZTokLmNvbXBvc2l0ZUltYWdlLHJlY3Q6JC5ib2R5LHpJbmRleDoyfSk6JC5zbGljZSYmJC5jb3JuZXI/Sih0NCx7Y2hyb21lOiR9KTpudWxsXX0pfWZ1bmN0aW9uIHQ0KHtjaHJvbWU6JH0pe2lmKCEkLnNsaWNlfHwhJC5jb3JuZXIpcmV0dXJuIG51bGw7bGV0e2JvZHk6Syxjb3JuZXI6USxzbGljZTpYfT0kLFo9TWF0aC5tYXgoSy53aWR0aC1RLndpZHRoKjIsMCksWT1NYXRoLm1heChLLmhlaWdodC1RLmhlaWdodCoyLDApLHE9W3trZXk6InRvcC1sZWZ0IixpbWFnZTpYLnRvcExlZnQscmVjdDp7eDpLLngseTpLLnksd2lkdGg6US53aWR0aCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJ0b3AtcmlnaHQiLGltYWdlOlgudG9wUmlnaHQscmVjdDp7eDpLLngrSy53aWR0aC1RLndpZHRoLHk6Sy55LHdpZHRoOlEud2lkdGgsaGVpZ2h0OlEuaGVpZ2h0fX0se2tleToiYm90dG9tLWxlZnQiLGltYWdlOlguYm90dG9tTGVmdCxyZWN0Ont4OksueCx5OksueStLLmhlaWdodC1RLmhlaWdodCx3aWR0aDpRLndpZHRoLGhlaWdodDpRLmhlaWdodH19LHtrZXk6ImJvdHRvbS1yaWdodCIsaW1hZ2U6WC5ib3R0b21SaWdodCxyZWN0Ont4OksueCtLLndpZHRoLVEud2lkdGgseTpLLnkrSy5oZWlnaHQtUS5oZWlnaHQsd2lkdGg6US53aWR0aCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJ0b3AiLGltYWdlOlgudG9wLHJlY3Q6e3g6Sy54K1Eud2lkdGgseTpLLnksd2lkdGg6WixoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJib3R0b20iLGltYWdlOlguYm90dG9tLHJlY3Q6e3g6Sy54K1Eud2lkdGgseTpLLnkrSy5oZWlnaHQtUS5oZWlnaHQsd2lkdGg6WixoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJsZWZ0IixpbWFnZTpYLmxlZnQscmVjdDp7eDpLLngseTpLLnkrUS5oZWlnaHQsd2lkdGg6US53aWR0aCxoZWlnaHQ6WX19LHtrZXk6InJpZ2h0IixpbWFnZTpYLnJpZ2h0LHJlY3Q6e3g6Sy54K0sud2lkdGgtUS53aWR0aCx5OksueStRLmhlaWdodCx3aWR0aDpRLndpZHRoLGhlaWdodDpZfX1dO3JldHVybiBKKGUse2NoaWxkcmVuOnEuZmlsdGVyKChHKT0+Ry5yZWN0LndpZHRoPjAmJkcucmVjdC5oZWlnaHQ+MCkubWFwKChHKT0+SihwNSx7Y2hyb21lOiQsaW1hZ2U6Ry5pbWFnZSxyZWN0OkcucmVjdCx6SW5kZXg6Mn0sRy5rZXkpKX0pfWZ1bmN0aW9uIHA1KHtjaHJvbWU6JCxpbWFnZTpLLHJlY3Q6USx6SW5kZXg6WH0pe3JldHVybiBKKCJpbWciLHthbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3JjOmU0KCQuaWRlbnRpZmllcixLKSxjbGFzc05hbWU6ImFic29sdXRlIHNlbGVjdC1ub25lIixzdHlsZTp7Li4udjgoJCxRLFgpLG9iamVjdEZpdDoiZmlsbCIsV2Via2l0VXNlckRyYWc6Im5vbmUifX0pfWZ1bmN0aW9uIGU0KCQsSyl7bGV0IFE9YGdyaWQvYXBpL2RldmljZWtpdC1jaHJvbWU/Y2hyb21lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfSZpbWFnZT0ke2VuY29kZVVSSUNvbXBvbmVudChLKX1gO3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9gLyR7UX1gOmcxKFEpfWZ1bmN0aW9uICQ3KCQpe2xldCBLPWBncmlkL2FwaS9kZXZpY2UtcGxhY2Vob2xkZXItYXNzZXQ/bmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX1gO3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9gLyR7S31gOmcxKEspfWZ1bmN0aW9uIHY4KCQsSyxRKXtyZXR1cm57bGVmdDpvMihLLngsJC5mcmFtZS53aWR0aCksdG9wOm8yKEsueSwkLmZyYW1lLmhlaWdodCksd2lkdGg6bzIoSy53aWR0aCwkLmZyYW1lLndpZHRoKSxoZWlnaHQ6bzIoSy5oZWlnaHQsJC5mcmFtZS5oZWlnaHQpLHpJbmRleDpRfX1mdW5jdGlvbiBvMigkLEspe3JldHVybmAkeyQvSyoxMDB9JWB9ZnVuY3Rpb24gaDAoe29wZW46JCx3aWR0aDpLLGNoaWxkcmVuOlEsc3R5bGU6WCxzaWRlOlo9InJpZ2h0In0pe3JldHVybiBKKCJhc2lkZSIse2NsYXNzTmFtZTpgZml4ZWQgei0zNSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiBiZy1wYW5lbC1iZyB0ZXh0LXdoaXRlLzkwIGJhY2tkcm9wLWJsdXItWzE4cHhdIFtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmXSBbdHJhbnNpdGlvbjp0cmFuc2Zvcm1fMC4yNXNfZWFzZSxvcGFjaXR5XzAuMnNfZWFzZV0gZmxleCBmbGV4LWNvbCAke1o9PT0ibGVmdCI/InRvcC0wIGJvdHRvbS0wIGxlZnQtMCByb3VuZGVkLW5vbmUgYm9yZGVyLTAgYm9yZGVyLXIgYm9yZGVyLXdoaXRlLzEwIHNoYWRvdy1bOHB4XzBfMzJweF9yZ2JhKDAsMCwwLDAuMzUpXSI6InRvcC0zIGJvdHRvbS0zIHJpZ2h0LTMgcm91bmRlZC1bMTRweF0gYm9yZGVyIGJvcmRlci13aGl0ZS8xMCBzaGFkb3ctWzBfMTJweF80MHB4X3JnYmEoMCwwLDAsMC41NSldIn1gLHN0eWxlOnt3aWR0aDpLLHRyYW5zZm9ybTokPyJ0cmFuc2xhdGVYKDApIjpaPT09ImxlZnQiPyJ0cmFuc2xhdGVYKC0xMDAlKSI6InRyYW5zbGF0ZVgoY2FsYygxMDAlICsgMjRweCkpIixvcGFjaXR5OiQ/MTowLHBvaW50ZXJFdmVudHM6JD8iYXV0byI6Im5vbmUiLC4uLlh9LCJhcmlhLWhpZGRlbiI6ISQsY2hpbGRyZW46UX0pfWZ1bmN0aW9uIGowKHtjaGlsZHJlbjokLHN0eWxlOkt9KXtyZXR1cm4gSigiaGVhZGVyIix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIuNSBweC0yLjUgcHktMS41IHBsLTMiLHN0eWxlOkssY2hpbGRyZW46JH0pfWZ1bmN0aW9uIGEyKHtjaGlsZHJlbjokfSl7cmV0dXJuIEooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUvNTUiLGNoaWxkcmVuOiR9KX1mdW5jdGlvbiByMih7b25DbGljazokLGFyaWFMYWJlbDpLPSJDbG9zZSBwYW5lbCIsdGl0bGU6USxpY29uU2l6ZTpYPTE2fSl7cmV0dXJuIEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazokLGNsYXNzTmFtZToiZmxleCBoLVszMHB4XSB3LVszMHB4XSBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXItbm9uZSBiZy10cmFuc3BhcmVudCBwLTAgdGV4dC1bIzhlOGU5M10gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOkssdGl0bGU6USxjaGlsZHJlbjpKKHAxLHtzaXplOlgsc3Ryb2tlV2lkdGg6Mn0pfSl9ZnVuY3Rpb24gZzgoJCxLKXtsZXRbUSxYXT1EKG51bGwpO3JldHVybiBJKCgpPT57aWYoIUt8fCEkKXJldHVybjtsZXQgWj0hMSxZPWFzeW5jKCk9Pnt0cnl7bGV0IEI9YXdhaXQoYXdhaXQgZmV0Y2goJCx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCk7aWYoIVopWChCKX1jYXRjaHt9fTtZKCk7bGV0IHE9c2V0SW50ZXJ2YWwoWSw1MDAwKTtyZXR1cm4oKT0+e1o9ITAsY2xlYXJJbnRlcnZhbChxKX19LFskLEtdKSxRfWZ1bmN0aW9uIGg4KHtyZXBvcnQ6JH0pe2lmKCEkfHwkLnRvdGFsQnl0ZXM9PT0wKXJldHVybiBudWxsO2xldHtlc3RpbWF0ZWRBZGRpdGlvbmFsOkssYXZhaWxhYmxlQnl0ZXM6USx0b3RhbEJ5dGVzOlgscnVubmluZ1NpbXVsYXRvcnM6Wn09JCxZPU1hdGgubWF4KDAsTWF0aC5taW4oMSwxLVEvWCkpLHE9WitLLEc9Sz09PTA/IiNlNjYiOks8PTE/IiNlOWExM2IiOiIjM2IzIixCPVk+MC45PyIjZTY2IjpZPjAuNzU/IiNlOWExM2IiOiIjM2IzIjtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBtYXgtdy1mdWxsIG1pbi13LTAgZmxleC1ub3dyYXAgaXRlbXMtY2VudGVyIGdhcC0xLjUgb3ZlcmZsb3ctaGlkZGVuIHdoaXRlc3BhY2Utbm93cmFwIHB4LTIgcHktWzNweF0gcm91bmRlZC1mdWxsIGJnLVsjMTAxMDEwXSBib3JkZXIgYm9yZGVyLVsjMjIyXSBmb250LW1vbm8gdGV4dC1bMTFweF0gdGV4dC13aGl0ZS83MCBsZWFkaW5nLW5vbmUiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLVszcHhdIHNocmluay0wIixzdHlsZTp7YmFja2dyb3VuZDpHfX0pLEooInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgdHJ1bmNhdGUiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2hpbGRyZW46W1osIi8iLHEsIiBzaW1zIl19KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjoiIMK3ICJ9KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjpbUzgoUSksIiBmcmVlIl19KV19KSxKKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6Im1sLTAuNSB3LTcgaC1bM3B4XSBzaHJpbmstMCBiZy1bIzFjMWMxY10gcm91bmRlZC1bMnB4XSBvdmVyZmxvdy1oaWRkZW4gaW5saW5lLWJsb2NrIixjaGlsZHJlbjpKKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBoLWZ1bGwgdHJhbnNpdGlvbi1bd2lkdGgsYmFja2dyb3VuZF0gZHVyYXRpb24tMzAwIGVhc2Utb3V0IixzdHlsZTp7d2lkdGg6YCR7KFkqMTAwKS50b0ZpeGVkKDEpfSVgLGJhY2tncm91bmQ6Qn19KX0pXX0pfWZ1bmN0aW9uIGo4KHt0eXBlOiQsc2l6ZTpLPTIwLHNjcmVlbk9uOlE9ITF9KXtsZXQgWD17d2lkdGg6SyxoZWlnaHQ6Syx2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoxLjYsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9O3N3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiBKKCJzdmciLHsuLi5YLGNoaWxkcmVuOltRJiZKKCJyZWN0Iix7eDoiNS4wNSIseToiMy41NSIsd2lkdGg6IjEzLjkiLGhlaWdodDoiMTYuNDUiLHJ4OiIxLjY1IixmaWxsOiIjNDdiN2ZmIixzdHJva2U6Im5vbmUiLCJkYXRhLXRlc3RpZCI6ImRldmljZS1nbHlwaC1zY3JlZW4tb24ifSksSigicmVjdCIse3g6IjQiLHk6IjIuNSIsd2lkdGg6IjE2IixoZWlnaHQ6IjE5IixyeDoiMi41In0pLEooImxpbmUiLHt4MToiMTIiLHkxOiIxOC41Iix4MjoiMTIiLHkyOiIxOC41In0pXX0pO2Nhc2Uid2F0Y2giOnJldHVybiBKKCJzdmciLHsuLi5YLGNoaWxkcmVuOltKKCJyZWN0Iix7eDoiNi41Iix5OiI3Iix3aWR0aDoiMTEiLGhlaWdodDoiMTAiLHJ4OiIzIn0pLEooInBhdGgiLHtkOiJNOC41IDdsLjYtMy4yQTEuNSAxLjUgMCAwIDEgMTAuNiAyLjVoMi44YTEuNSAxLjUgMCAwIDEgMS41IDEuM0wxNS41IDcifSksSigicGF0aCIse2Q6Ik04LjUgMTdsLjYgMy4yYTEuNSAxLjUgMCAwIDAgMS41IDEuM2gyLjhhMS41IDEuNSAwIDAgMCAxLjUtMS4zbC42LTMuMiJ9KV19KTtjYXNlInZpc2lvbiI6cmV0dXJuIEooInN2ZyIsey4uLlgsY2hpbGRyZW46SigicGF0aCIse2Q6Ik0zIDExYTQgNCAwIDAgMSA0LTRoMTBhNCA0IDAgMCAxIDQgNHYyLjVhMi41IDIuNSAwIDAgMS0yLjUgMi41Yy0xLjggMC0yLjUtMS4yLTMuNS0xLjgtLjktLjUtMS42LS43LTIuNS0uN3MtMS42LjItMi41LjdjLTEgLjYtMS43IDEuOC0zLjUgMS44QTIuNSAyLjUgMCAwIDEgMyAxMy41eiJ9KX0pO2RlZmF1bHQ6cmV0dXJuIEooInN2ZyIsey4uLlgsY2hpbGRyZW46W1EmJkooInJlY3QiLHt4OiI3LjQ1Iix5OiIzLjY1Iix3aWR0aDoiOS4xIixoZWlnaHQ6IjE2LjM1IixyeDoiMiIsZmlsbDoiIzQ3YjdmZiIsc3Ryb2tlOiJub25lIiwiZGF0YS10ZXN0aWQiOiJkZXZpY2UtZ2x5cGgtc2NyZWVuLW9uIn0pLEooInJlY3QiLHt4OiI2LjUiLHk6IjIuNSIsd2lkdGg6IjExIixoZWlnaHQ6IjE5IixyeDoiMi44In0pLEooImxpbmUiLHt4MToiMTAuNSIseTE6IjUiLHgyOiIxMy41Iix5MjoiNSJ9KV19KX19ZnVuY3Rpb24gbTgoe2RldmljZTokLGFjdGl2ZTpLLHN0YXJ0aW5nOlEsc2h1dHRpbmdEb3duOlgsb25TZWxlY3Q6WixvblNodXRkb3duOll9KXtsZXQgcT0kLmhlbHBlcixHPSQuc3RhdGU9PT0iQm9vdGVkIixCPW4xKCQubmFtZSksVj1SOCgkLnJ1bnRpbWUpLEM9cT8iU3RyZWFtaW5nIjpRP0c/IlN0YXJ0aW5n4oCmIjoiQm9vdGluZ+KApiI6WD8iU2h1dHRpbmcgZG93buKApiI6Rz8iQm9vdGVkIjpudWxsLEw9cT8iIzM0ZDM5OSI6Rz8iI2U5YTEzYiI6bnVsbCxGPXF8fEcsTj1xP0s/ImJnLVsjMjYzNjRjXSI6ImJnLVsjMjAyYjNhXSI6Sz8iYmctd2hpdGUvMTUiOiJiZy13aGl0ZS82IixfPXE/InRleHQtWyNkMmU3ZmZdIjpLPyJ0ZXh0LXdoaXRlLzkwIjoidGV4dC13aGl0ZS81NSI7cmV0dXJuIEooImRpdiIse3JvbGU6ImJ1dHRvbiIsdGFiSW5kZXg6MCwiYXJpYS1wcmVzc2VkIjpLLG9uQ2xpY2s6WixvbktleURvd246KHopPT57aWYoei5rZXk9PT0iRW50ZXIifHx6LmtleT09PSIgIil6LnByZXZlbnREZWZhdWx0KCksWigpfSxjbGFzc05hbWU6YGdyb3VwIHJlbGF0aXZlIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yLjUgcHgtMiBweS0xLjUgcm91bmRlZC1sZyBjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzXSAke0s/ImJnLXdoaXRlLzEwIHRleHQtd2hpdGUiOiJ0ZXh0LXdoaXRlLzkwIGhvdmVyOmJnLXdoaXRlLzgifWAsY2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZTpgcmVsYXRpdmUgc2hyaW5rLTAgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS05IHJvdW5kZWQtWzlweF0gb3ZlcmZsb3ctaGlkZGVuICR7Tn1gLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOl8sY2hpbGRyZW46SihqOCx7dHlwZTpCLHNjcmVlbk9uOkJvb2xlYW4ocSl9KX0pLEwmJiFxJiZKKCJzcGFuIix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBib3R0b20tMC41IHJpZ2h0LTAuNSBzaXplLTEuNSByb3VuZGVkLWZ1bGwgcmluZy0yIHJpbmctWyMxYzFjMWVdIixzdHlsZTp7YmFja2dyb3VuZDpMfX0pXX0pLEooImRpdiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InRydW5jYXRlIHRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgbGVhZGluZy10aWdodCIsY2hpbGRyZW46JC5uYW1lfSksQyYmSigiZGl2Iix7Y2xhc3NOYW1lOmB0cnVuY2F0ZSB0ZXh0LVsxMXB4XSBsZWFkaW5nLXRpZ2h0ICR7cT8idGV4dC1bIzM0ZDM5OV0iOks/InRleHQtd2hpdGUvNzUiOiJ0ZXh0LXdoaXRlLzQ1In1gLGNoaWxkcmVuOkN9KV19KSxKKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2Utcm93LXRyYWlsaW5nLXNsb3QiLGNsYXNzTmFtZToicmVsYXRpdmUgc2hyaW5rLTAgdy04IGgtNiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6YGFic29sdXRlIHJpZ2h0LTAgdGV4dC1bMTFweF0gZm9udC1tb25vIHRhYnVsYXItbnVtcyBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTJzXSAke0s/InRleHQtd2hpdGUvODUiOiJ0ZXh0LXdoaXRlLzQwIn0gJHtGPyJncm91cC1ob3ZlcjpvcGFjaXR5LTAgZ3JvdXAtZm9jdXMtd2l0aGluOm9wYWNpdHktMCI6IiJ9YCxjaGlsZHJlbjpWfSksRiYmSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIix0aXRsZTpYPyJTaHV0dGluZyBkb3du4oCmIjoiU2h1dCBkb3duIHNpbXVsYXRvciIsImFyaWEtbGFiZWwiOiJTaHV0IGRvd24gc2ltdWxhdG9yIixvbkNsaWNrOih6KT0+e3oucHJldmVudERlZmF1bHQoKSx6LnN0b3BQcm9wYWdhdGlvbigpLFkoKX0sZGlzYWJsZWQ6WCxjbGFzc05hbWU6YGFic29sdXRlIHJpZ2h0LTAgdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtNSByb3VuZGVkLW1kIG9wYWNpdHktMCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCBmb2N1cy12aXNpYmxlOm9wYWNpdHktMTAwIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xMnMsYmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10gJHtLPyJ0ZXh0LXdoaXRlLzgwIGhvdmVyOmJnLXdoaXRlLzIwIjoidGV4dC13aGl0ZS83MCBob3ZlcjpiZy13aGl0ZS8xMiBob3Zlcjp0ZXh0LXdoaXRlIn1gLGNoaWxkcmVuOkoocDEse3NpemU6MTMsc3Ryb2tlV2lkdGg6Mi4yfSl9KV19KV19KX12YXIgSzc9MTI7ZnVuY3Rpb24gZjgoe29wZW46JCxvbkNsb3NlOkssd2lkdGg6USxzaWRlOlg9InJpZ2h0IixkZXZpY2VzOlosc2VsZWN0ZWRVZGlkOlksb25TZWxlY3Q6cSxzdGFydGluZzpHLHNodXR0aW5nRG93bjpCLG9uU2h1dGRvd246Vn0pe2xldCBMPSh0eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6d2luZG93Ll9fU0lNX1BSRVZJRVdfXyk/LmdyaWRNZW1vcnlFbmRwb2ludD8/KHR5cGVvZiB3aW5kb3c+InUiP3ZvaWQgMDpnMSgiZ3JpZC9hcGkvbWVtb3J5IikpLEY9ZzgoTCwkKSxbTixfXT1EKCIiKSx6PU8xKCgpPT57bGV0IFU9Ti50cmltKCkudG9Mb3dlckNhc2UoKTtpZighVXx8IVopcmV0dXJuIFo7cmV0dXJuIFouZmlsdGVyKChBKT0+QS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoVSl8fGMyKEEucnVudGltZSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhVKSl9LFtaLE5dKTtyZXR1cm4gSihoMCx7b3BlbjokLHdpZHRoOlEsc2lkZTpYLGNoaWxkcmVuOltKKGowLHtzdHlsZTp7anVzdGlmeUNvbnRlbnQ6ImZsZXgtc3RhcnQiLHBhZGRpbmdMZWZ0OjE2LHBhZGRpbmdUb3A6MTYsZ2FwOjR9LGNoaWxkcmVuOltKKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6SyxjbGFzc05hbWU6ImZsZXggaC1bMzBweF0gdy1bMzBweF0gc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyLW5vbmUgYmctdHJhbnNwYXJlbnQgdGV4dC1bIzhlOGU5M10gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJDbG9zZSBkZXZpY2VzIHNpZGViYXIiLCJhcmlhLXByZXNzZWQiOiEwLHRpdGxlOiJEZXZpY2VzIixjaGlsZHJlbjpKKHMxLHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pLEooYTIse2NoaWxkcmVuOiJEZXZpY2VzIn0pXX0pLEooImRpdiIse2NsYXNzTmFtZToicHgtMyBwYi0yIHB0LTAuNSBzaHJpbmstMCIsY2hpbGRyZW46SigibGFiZWwiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTIuNSBoLTggcm91bmRlZC1sZyBiZy13aGl0ZS82IGZvY3VzLXdpdGhpbjpiZy13aGl0ZS8xMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzXSIsY2hpbGRyZW46W0ooWTIse3NpemU6MTQsc3Ryb2tlV2lkdGg6MixjbGFzc05hbWU6InRleHQtd2hpdGUvNDAgc2hyaW5rLTAifSksSigiaW5wdXQiLHt2YWx1ZTpOLG9uQ2hhbmdlOihVKT0+XyhVLnRhcmdldC52YWx1ZSkscGxhY2Vob2xkZXI6IlNlYXJjaCIsY2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSBvdXRsaW5lLW5vbmUgdGV4dC1bMTNweF0gdGV4dC13aGl0ZS85MCBwbGFjZWhvbGRlcjp0ZXh0LXdoaXRlLzQwIn0pLE4mJkooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsImFyaWEtbGFiZWwiOiJDbGVhciBzZWFyY2giLG9uQ2xpY2s6KCk9Pl8oIiIpLGNsYXNzTmFtZToic2hyaW5rLTAgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS00IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS8xNSB0ZXh0LXdoaXRlLzcwIGhvdmVyOmJnLXdoaXRlLzI1IixjaGlsZHJlbjpKKHAxLHtzaXplOjksc3Ryb2tlV2lkdGg6M30pfSldfSl9KSxKKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGZsZXgtMSBtaW4taC0wIixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgbWluLWgtMCBvdmVyZmxvdy15LWF1dG8gcHgtMiBweS0yIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLGNoaWxkcmVuOno9PT1udWxsP0ooUTcse30pOnoubGVuZ3RoPT09MD9KKCJkaXYiLHtjbGFzc05hbWU6InB4LTIgcHktNiB0ZXh0LXdoaXRlLzQwIHRleHQtWzEycHhdIHRleHQtY2VudGVyIixjaGlsZHJlbjpOPyJObyBtYXRjaGluZyBzaW11bGF0b3JzLiI6Ik5vIGlPUyBzaW11bGF0b3JzIGF2YWlsYWJsZS4ifSk6SihlLHtjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB0LTEgcGItMSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUiLGNoaWxkcmVuOiJBdmFpbGFibGUifSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgcGItMSIsY2hpbGRyZW46ei5tYXAoKFUpPT5KKG04LHtkZXZpY2U6VSxhY3RpdmU6VS5kZXZpY2U9PT1ZLHN0YXJ0aW5nOiEhR1tVLmRldmljZV0sc2h1dHRpbmdEb3duOiEhQltVLmRldmljZV0sb25TZWxlY3Q6KCk9PnEoVS5kZXZpY2UpLG9uU2h1dGRvd246KCk9PlYoVS5kZXZpY2UpfSxVLmRldmljZSkpfSldfSl9KSxKKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2UtbGlzdC10b3AtZmFkZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNnB4XSBwb2ludGVyLWV2ZW50cy1ub25lIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fYm90dG9tLHJnYmEoMjAsMjAsMjIsMC45NilfMCUscmdiYSgyMCwyMCwyMiwwKV8xMDAlKV0ifSksSigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3QtYm90dG9tLWZhZGUiLGNsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTZweF0gcG9pbnRlci1ldmVudHMtbm9uZSBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3RvcCxyZ2JhKDIwLDIwLDIyLDAuOTYpXzAlLHJnYmEoMjAsMjAsMjIsMClfMTAwJSldIn0pXX0pLEooWDcse3JlcG9ydDpGfSldfSl9ZnVuY3Rpb24gUTcoKXtyZXR1cm4gSihlLHtjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB0LTEgcGItMSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUiLGNoaWxkcmVuOiJBdmFpbGFibGUifSksSigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3Qtc2tlbGV0b24iLGNsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IHBiLTEiLCJhcmlhLWxhYmVsIjoiTG9hZGluZyBzaW11bGF0b3JzIiwiYXJpYS1idXN5IjoidHJ1ZSIsY2hpbGRyZW46QXJyYXkuZnJvbSh7bGVuZ3RoOks3fSwoJCxLKT0+SihKNyx7aW5kZXg6S30sSykpfSldfSl9ZnVuY3Rpb24gSjcoe2luZGV4OiR9KXtsZXQgSz1bInctWzYyJV0iLCJ3LVs3NCVdIiwidy1bNTglXSIsInctWzcwJV0iXVskJTRdLFE9WyJ3LVs0MiVdIiwidy1bMzYlXSIsInctWzQ4JV0iLCJ3LVszMiVdIl1bJCU0XSxYPVsidy03Iiwidy02Iiwidy04Il1bJCUzXTtyZXR1cm4gSigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLXJvdy1za2VsZXRvbiIsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHB4LTIgcHktMS41IHJvdW5kZWQtbGcgc2VsZWN0LW5vbmUiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtOSByb3VuZGVkLVs5cHhdIG92ZXJmbG93LWhpZGRlbiBiZy13aGl0ZS82IixjaGlsZHJlbjpKKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTQgcm91bmRlZC1bNHB4XSBiZy13aGl0ZS9bMC4xMl0ifSl9KSxKKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTEuNSIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6YGgtMyByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMTJdICR7S31gfSksSigic3BhbiIse2NsYXNzTmFtZTpgaC0yLjUgcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjA4XSAke1F9YH0pXX0pLEooInNwYW4iLHtjbGFzc05hbWU6YHNocmluay0wIGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0gJHtYfWB9KV19KX1mdW5jdGlvbiBYNyh7cmVwb3J0OiR9KXtpZighJHx8JC50b3RhbEJ5dGVzPD0wKXJldHVybiBudWxsO3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHB4LTMgcHktMiBmbGV4IGp1c3RpZnktY2VudGVyIixjaGlsZHJlbjpKKGg4LHtyZXBvcnQ6JH0pfSl9ZnVuY3Rpb24gaTIoe3BhbmVsV2lkdGg6JCx2aXNpYmxlOkssb25Qb2ludGVyRG93bjpRLGFyaWFMYWJlbDpYLHNpZGU6Wj0icmlnaHQifSl7bGV0W1kscV09RCghMSksW0csQl09RCghMSksVj1ZfHxHLEM9KFo9PT0ibGVmdCI/MDoxMikrJC05O3JldHVybiBKKCJkaXYiLHtyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLWxhYmVsIjpYLCJhcmlhLWhpZGRlbiI6IUssb25Qb2ludGVyRG93bjooRik9PntCKCEwKSxRKEYpfSxvblBvaW50ZXJVcDooKT0+QighMSksb25Qb2ludGVyQ2FuY2VsOigpPT5CKCExKSxvblBvaW50ZXJFbnRlcjooKT0+cSghMCksb25Qb2ludGVyTGVhdmU6KCk9PnEoITEpLGNsYXNzTmFtZTpgZml4ZWQgJHtaPT09ImxlZnQiPyJ0b3AtMCBib3R0b20tMCI6InRvcC0zIGJvdHRvbS0zIn0gdy00IHotMzYgY3Vyc29yLWNvbC1yZXNpemUgdG91Y2gtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMjAwICR7Sz8ib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byI6Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIn1gLHN0eWxlOlo9PT0ibGVmdCI/e2xlZnQ6Q306e3JpZ2h0OkN9LGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC0wIGJvdHRvbS0wIGxlZnQtMS8yIHctcHggcG9pbnRlci1ldmVudHMtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMTUwICR7Vj8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifWAsc3R5bGU6e3RyYW5zZm9ybToidHJhbnNsYXRlWCgtMC41cHgpIixiYWNrZ3JvdW5kOiJsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwyNTUsMjU1LDApIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjgpIDMwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSA3MCUsIHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSkifX0pLEooImRpdiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLTEvMiBsZWZ0LTEvMiB3LTEgaC03IHJvdW5kZWQteHMgLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHotMSBwb2ludGVyLWV2ZW50cy1ub25lIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSxiYWNrZ3JvdW5kXzAuMTVzX2Vhc2VdICR7Vj8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifSAke0c/ImJnLVsjOWE5YTllXSI6ImJnLVsjNmU2ZTcyXSJ9YH0pXX0pfWZ1bmN0aW9uIHA4KCl7bGV0WyQsS109RCgoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSIpLm1hdGNoZXM9PT0hMCk7cmV0dXJuIEkoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8IXdpbmRvdy5tYXRjaE1lZGlhKXJldHVybjtsZXQgUT13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIiksWD0oKT0+SyhRLm1hdGNoZXMpO3JldHVybiBYKCksUS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFgpLCgpPT5RLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWCl9LFtdKSwkfWZ1bmN0aW9uIG4yKCl7bGV0WyQsS109RCgoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcz09PSEwKTtyZXR1cm4gSSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwhd2luZG93Lm1hdGNoTWVkaWEpcmV0dXJuO2xldCBRPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLFg9KCk9PksoUS5tYXRjaGVzKTtyZXR1cm4gWCgpLFEuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixYKSwoKT0+US5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFgpfSxbXSksJH12YXIgdTg9MjgwO3ZhciB1NT0id2lkdGggNzBtcyBsaW5lYXIiLGw1PSJ3aWR0aCAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSkiLGw4PSJwYWRkaW5nLXJpZ2h0IDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSIsZDg9ImN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIix0Mj0iY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSIsYzg9ImxpbmVhcigwLCAwLjMyIDklLCAwLjYyIDE4JSwgMC44NSAyNyUsIDEuMDEgMzYlLCAxLjA3IDQ1JSwgMS4wNSA1NiUsIDEuMDIgNzAlLCAxKSIsbzg9IjAuMTZzIixhOD0iMC4ycyIscjg9NSxpOD17aWRsZToxLGhvdmVyOjEuMDksZHJhZzoxLjEyfSxuOD17aWRsZToiIzY4NmU3OCIsaG92ZXI6IiNiN2JiYzIiLGRyYWc6IiNmNGY2ZmEifSxzOD17aWRsZToyLjY1LGhvdmVyOjQuMTUsZHJhZzo0LjY1fSx0OD17aWRsZTowLjM4LGhvdmVyOjAuODYsZHJhZzoxfSxzMj1udWxsO2Z1bmN0aW9uIGU4KCl7aWYoczIhPW51bGwpcmV0dXJuIHMyO2lmKHR5cGVvZiBDU1M+InUifHx0eXBlb2YgQ1NTLnN1cHBvcnRzIT09ImZ1bmN0aW9uIilyZXR1cm4hMTtyZXR1cm4gczI9Q1NTLnN1cHBvcnRzKCJhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uIiwibGluZWFyKDAsIDEpIiksczJ9dmFyIFo3PTQwLCQ5PTE0LEs5PTI0MCxROT0zMCxKOT0wLjE1LFk3PTgwLFg5PTE1MCxaOT0yNTAsZDU9InNlcnZlLXNpbTpzaW11bGF0b3ItZnJhbWUtc2NhbGUiO2Z1bmN0aW9uIGM1KCQsSyxRLFgpe2xldCBaPSQqMyxZPUs+MD9NYXRoLm1heCgxODAsSy00OCk6WixxPVE+MCYmTnVtYmVyLmlzRmluaXRlKFgpJiZYPjA/TWF0aC5tYXgoMTgwLChRLTEzNikqWCk6WjtyZXR1cm4gTWF0aC5tYXgoMTgwLE1hdGgubWluKFosWSxxKSl9ZnVuY3Rpb24gazAoJCxLLFEsWCxaKXtsZXQgWT1jNShLLFEsWCxaKSxxPU1hdGgubWluKDI4MCxZKTtyZXR1cm4gTWF0aC5taW4oWSxNYXRoLm1heChxLCQpKX1mdW5jdGlvbiBZOSgkLEssUSxYLFope2xldCBZPU51bWJlci5pc0Zpbml0ZShaKT8kKlo6JDtyZXR1cm4gazAoWSwkLEssUSxYKX1mdW5jdGlvbiBlMigkKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiAkO2xldCBLPXR5cGVvZiB3aW5kb3c8InUiP01hdGgubWF4KDEsd2luZG93LmRldmljZVBpeGVsUmF0aW98fDEpOjE7cmV0dXJuIE1hdGgucm91bmQoJCpLKS9LfWZ1bmN0aW9uIG81KCQsSyl7aWYoJDw9MHx8Szw9MClyZXR1cm4gMDtsZXQgUT0wLjU1LFg9JCpLKlEvKEsrUSokKTtyZXR1cm4gTWF0aC5taW4oWjcsWCl9ZnVuY3Rpb24gcTkoJCxLLFEpe2xldCBYPSQsWj1RO2ZvcihsZXQgWSBvZiBLKXtsZXQgcT1NYXRoLmFicygkLVkpO2lmKHE8WilYPVksWj1xfXJldHVybiBYfWZ1bmN0aW9uIEc5KCQpe2xldHtmcm9tOkssdG86USx2ZWxvY2l0eTpYLHN0aWZmbmVzczpaLGRhbXBpbmc6WSxvblVwZGF0ZTpxLG9uQ29tcGxldGU6R309JCxCPTAuNCxWPTAuMDMzMzMzMzMzMzMzMzMzMzMsQz1LLEw9WCxGPXBlcmZvcm1hbmNlLm5vdygpLE49MCxfPSExLHo9KFUpPT57aWYoXylyZXR1cm47bGV0IEE9TWF0aC5taW4oKFUtRikvMTAwMCwwLjAzMzMzMzMzMzMzMzMzMzMzKTtGPVU7bGV0IE09LVoqKEMtUSktWSpMO2lmKEwrPU0qQSxDKz1MKkEsTWF0aC5hYnMoTCk8MC40JiZNYXRoLmFicyhDLVEpPDAuNCl7cShRKSxHPy4oKTtyZXR1cm59cShDKSxOPXJlcXVlc3RBbmltYXRpb25GcmFtZSh6KX07cmV0dXJuIE49cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHopLCgpPT57aWYoXz0hMCxOKWNhbmNlbEFuaW1hdGlvbkZyYW1lKE4pfX1mdW5jdGlvbiBWOSgkKXtpZigkLmxlbmd0aDwyKXJldHVybiAwO2xldCBLPSRbJC5sZW5ndGgtMV0sUT0kWzBdO2ZvcihsZXQgWj0kLmxlbmd0aC0xO1o+PTA7Wi0tKWlmKEsudC0kW1pdLnQ+PVk3KXtRPSRbWl07YnJlYWt9bGV0IFg9KEsudC1RLnQpLzEwMDA7cmV0dXJuIFg+MD8oSy54LVEueCkvWDowfXZhciBCOT0iZHJvcC1zaGFkb3coMCAwLjVweCAxcHggcmdiYSgwLDAsMCwwLjEpKSBkcm9wLXNoYWRvdygwIDJweCA1cHggcmdiYSgwLDAsMCwwLjEzKSkiO2Z1bmN0aW9uIHE3KHthcmM6JCxwaGFzZTpLLHJlZHVjZWRNb3Rpb246USxoaWdoQ29udHJhc3Q6WCxmb2N1c1Zpc2libGU6Wn0pe2xldCBZPUshPT0iaWRsZSIscT1YPzEuMTI6MSxHPVE/MTppOFtLXSxCPXM4W0tdKnEsVj1YPzE6dDhbS10sQz1ZP284OmE4LEw9WT9kODp0MixGPVkmJmU4KCk/Yzg6TCxOPVE/Im5vbmUiOmB0cmFuc2Zvcm0gJHtDfSAke0Z9YCxfPVE/Im5vbmUiOmBzdHJva2UgJHtDfSAke0x9LCBzdHJva2Utd2lkdGggJHtDfSAke0x9YCx6PSQudmlld0JveFNpemUsVT0kLmQsQT17dHJhbnNmb3JtOmB0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoJHtHfSlgLHRyYW5zZm9ybU9yaWdpbjoiMTAwJSAxMDAlIix0cmFuc2l0aW9uOk4sd2lsbENoYW5nZTpRP3ZvaWQgMDoidHJhbnNmb3JtIixiYWNrZmFjZVZpc2liaWxpdHk6ImhpZGRlbiIsV2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5OiJoaWRkZW4ifTtyZXR1cm4gSigic3ZnIix7d2lkdGg6eixoZWlnaHQ6eix2aWV3Qm94OmAwIDAgJHt6fSAke3p9YCxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLHNoYXBlUmVuZGVyaW5nOiJnZW9tZXRyaWNQcmVjaXNpb24iLHN0eWxlOntkaXNwbGF5OiJibG9jayIsb3ZlcmZsb3c6InZpc2libGUiLGN1cnNvcjoiaW5oZXJpdCIsdG91Y2hBY3Rpb246Im5vbmUiLHBvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbSigiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0ooInBhdGgiLHtkOlUsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDEwLCAxMzIsIDI1NSwgMC45NSkiLHN0cm9rZVdpZHRoOihyOCoyKzYpKnEsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpaPzAuOTU6MCx0cmFuc2l0aW9uOlE/Im9wYWNpdHkgODBtcyBsaW5lYXIiOmBvcGFjaXR5IDIwMG1zICR7dDJ9YCxmaWx0ZXI6ImRyb3Atc2hhZG93KDAgMCAycHggcmdiYSgxMCwxMzIsMjU1LDAuNTUpKSBkcm9wLXNoYWRvdygwIDAgNHB4IHJnYmEoMTAsMTMyLDI1NSwwLjMyKSkifX0pLEooInBhdGgiLHtkOlUsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIixzdHJva2VXaWR0aDoxLjUqcSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Olo/MC43OjAsdHJhbnNpdGlvbjpRPyJvcGFjaXR5IDgwbXMgbGluZWFyIjpgb3BhY2l0eSAyMDBtcyAke3QyfWB9fSldfSksSigiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOkEsY2hpbGRyZW46SigiZyIse3N0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0ooInBhdGgiLHtkOlUsc3Ryb2tlOiIjMzQzNjNiIixzdHJva2VXaWR0aDpCKzIuMipxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6TWF0aC5taW4oMSxWKzAuMDgpLHRyYW5zaXRpb246YCR7X30sIG9wYWNpdHkgJHtDfSAke0x9YCxmaWx0ZXI6Qjl9fSksSigicGF0aCIse2Q6VSxzdHJva2U6bjhbS10sc3Ryb2tlV2lkdGg6QixzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5OlYsdHJhbnNpdGlvbjpgJHtffSwgb3BhY2l0eSAke0N9ICR7TH1gLGZpbHRlcjpCOX19KV19KX0pXX0pfWZ1bmN0aW9uIE45KHtzaW11bGF0b3JSZXNpemU6JCxkZXZpY2VUeXBlOkssc3RyZWFtQ29uZmlnOlEsY29udGFpbmVyV2lkdGg6WCxjb250YWluZXJIZWlnaHQ6Wn0pe2xldCBZPW4yKCkscT1wOCgpLFtHLEJdPUQoITEpLFY9TzEoKCk9Pnc1KHt0eXBlOkssY29uZmlnOlE/P251bGwsY29udGFpbmVyV2lkdGg6WCxjb250YWluZXJIZWlnaHQ6Wn0pLFtLLFEsWCxaXSksQz0kLmlzUmVzaXppbmd8fCQuaXNJbmVydGlhPyJkcmFnIjokLmhhbmRsZUhvdmVyZWQ/ImhvdmVyIjoiaWRsZSI7cmV0dXJuIEooImRpdiIse3JvbGU6InNlcGFyYXRvciIsImFyaWEtbGFiZWwiOiJSZXNpemUgc2ltdWxhdG9yIHdpZHRoLiBEcmFnIHRoZSBjb3JuZXIgb3IgdXNlIExlZnQgYW5kIFJpZ2h0IEFycm93IGtleXM7IGhvbGQgU2hpZnQgZm9yIGxhcmdlciBzdGVwcy4iLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLXZhbHVlbWluIjpNYXRoLnJvdW5kKCQubWluV2lkdGgpLCJhcmlhLXZhbHVlbWF4IjpNYXRoLnJvdW5kKCQubWF4V2lkdGgpLCJhcmlhLXZhbHVlbm93IjpNYXRoLnJvdW5kKCQuY29tbWl0dGVkV2lkdGgpLHRhYkluZGV4OjAscmVmOiQuaGFuZGxlUmVmLG9uS2V5RG93bjokLm9uS2V5RG93bixvblBvaW50ZXJEb3duOiQub25Qb2ludGVyRG93bixvblBvaW50ZXJNb3ZlOiQub25Qb2ludGVyTW92ZSxvblBvaW50ZXJVcDokLm9uUG9pbnRlckVuZCxvblBvaW50ZXJDYW5jZWw6JC5vblBvaW50ZXJFbmQsb25Mb3N0UG9pbnRlckNhcHR1cmU6JC5vblBvaW50ZXJFbmQsb25Qb2ludGVyRW50ZXI6KCk9PiQuc2V0SGFuZGxlSG92ZXJlZCghMCksb25Qb2ludGVyTGVhdmU6KCk9PiQuc2V0SGFuZGxlSG92ZXJlZCghMSksb25Gb2N1czooTCk9PntCKEwuY3VycmVudFRhcmdldC5tYXRjaGVzPy4oIjpmb2N1cy12aXNpYmxlIik/PyExKX0sb25CbHVyOigpPT5CKCExKSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixyaWdodDotMTQsYm90dG9tOi0xNCx3aWR0aDo2MCxoZWlnaHQ6NjAsYm9yZGVyOiJub25lIixwYWRkaW5nOjAsbWFyZ2luOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiZmxleC1lbmQiLGp1c3RpZnlDb250ZW50OiJmbGV4LWVuZCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGN1cnNvcjoibndzZS1yZXNpemUiLHRvdWNoQWN0aW9uOiJub25lIixwb2ludGVyRXZlbnRzOiJhdXRvIixvdXRsaW5lOiJub25lIix6SW5kZXg6MjUsV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6InRyYW5zcGFyZW50In0sY2hpbGRyZW46SihxNyx7YXJjOlYscGhhc2U6QyxyZWR1Y2VkTW90aW9uOlksaGlnaENvbnRyYXN0OnEsZm9jdXNWaXNpYmxlOkd9KX0pfXZhciBHNz1uZXcgU2V0KFsiaW1hZ2UvanBlZyIsImltYWdlL3BuZyIsImltYWdlL2dpZiIsImltYWdlL2hlaWMiLCJpbWFnZS9oZWlmIiwiaW1hZ2Uvd2VicCIsInZpZGVvL21wNCIsInZpZGVvL3F1aWNrdGltZSJdKSxhNT0xOTY2MDgsTDk9NTI0Mjg4MDAwLCQ1PSJhcHBsaWNhdGlvbi94LXNlcnZlLXNpbS1ob3N0LXBhdGgiO2FzeW5jIGZ1bmN0aW9uIEM5KCQsSyxRKXtsZXQgWD1hd2FpdCBLKGB4Y3J1biBzaW1jdGwgYWRkbWVkaWEgJHtRfSAke1oxKCQpfWApO2lmKFguZXhpdENvZGUhPT0wKXRocm93IEVycm9yKFguc3RkZXJyfHxgYWRkbWVkaWEgZmFpbGVkIChleGl0ICR7WC5leGl0Q29kZX0pYCl9ZnVuY3Rpb24gbTAoJCl7bGV0IEs9JC5uYW1lLFE9Sy5sYXN0SW5kZXhPZigiLiIpO2lmKFE+PTApcmV0dXJuIEsuc2xpY2UoUSsxKS50b0xvd2VyQ2FzZSgpO2lmKCQudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSlyZXR1cm4ibXA0IjtyZXR1cm4ianBnIn1mdW5jdGlvbiBVOSgkKXtpZihtMCgkKT09PSJpcGEiKXJldHVybiJpcGEiO2lmKEc3LmhhcygkLnR5cGUpKXJldHVybiJtZWRpYSI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gVjcoJCl7bGV0IEs9bmV3IFVpbnQ4QXJyYXkoJCksUT0iIjtmb3IobGV0IFg9MDtYPEsubGVuZ3RoO1grPTMyNzY4KVErPVN0cmluZy5mcm9tQ2hhckNvZGUoLi4uSy5zdWJhcnJheShYLFgrMzI3NjgpKTtyZXR1cm4gYnRvYShRKX1hc3luYyBmdW5jdGlvbiB6OSgkLEssUSxYKXtsZXQgWj0wO2ZvcihsZXQgWT0wO1k8JC5zaXplO1krPWE1KXtsZXQgcT1hd2FpdCAkLnNsaWNlKFksWSthNSkuYXJyYXlCdWZmZXIoKSxHPVY3KHEpLFY9YXdhaXQgUShgYmFzaCAtYyAnZWNobyAke0d9IHwgYmFzZTY0IC1kICR7WT09PTA/Ij4iOiI+PiJ9ICR7S30nYCk7aWYoVi5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3IoVi5zdGRlcnJ8fGBXcml0ZSBmYWlsZWQgKGV4aXQgJHtWLmV4aXRDb2RlfSlgKTtpZighWCljb250aW51ZTtsZXQgQz1NYXRoLm1pbihZK2E1LCQuc2l6ZSksTD1NYXRoLmZsb29yKEMvJC5zaXplKjEwMCk7aWYoTCE9PVopWj1MLFgoQy8kLnNpemUpfX1hc3luYyBmdW5jdGlvbiBGOSgkLEssUSxYKXtpZigkLnNpemU+TDkpdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7bGV0IFo9YC90bXAvJHtLfS0ke2NyeXB0by5yYW5kb21VVUlEKCl9LiR7UX1gO3JldHVybiBhd2FpdCB6OSgkLFosWCksWn1hc3luYyBmdW5jdGlvbiBIOSgkLEssUSxYLFope2lmKCQuc2l6ZT5MOSl0aHJvdyBFcnJvcigiRmlsZSB0b28gbGFyZ2UgKG1heCA1MDBNQikiKTtsZXQgWT1LPT09ImlwYSI/ImlwYSI6bTAoJCksRz1gL3RtcC8ke0s9PT0iaXBhIj8ic2VydmUtc2ltLWluc3RhbGwiOiJzZXJ2ZS1zaW0tdXBsb2FkIn0tJHtjcnlwdG8ucmFuZG9tVVVJRCgpfS4ke1l9YDt0cnl7WigwKSxhd2FpdCB6OSgkLEcsUSxaKSxaKG51bGwpO2xldCBCPUs9PT0iaXBhIj9geGNydW4gc2ltY3RsIGluc3RhbGwgJHtYfSAke0d9YDpgeGNydW4gc2ltY3RsIGFkZG1lZGlhICR7WH0gJHtHfWAsVj1hd2FpdCBRKEIpO2lmKFYuZXhpdENvZGUhPT0wKXtsZXQgQz1LPT09ImlwYSI/Imluc3RhbGwiOiJhZGRtZWRpYSI7dGhyb3cgRXJyb3IoVi5zdGRlcnJ8fGAke0N9IGZhaWxlZCAoZXhpdCAke1YuZXhpdENvZGV9KWApfX1maW5hbGx5e1EoYGJhc2ggLWMgJ3JtIC1mICR7R30nYCkuY2F0Y2goKCk9Pnt9KX19ZnVuY3Rpb24gQjcoJCl7cmV0dXJuImZpbGU6Ly8iKyQuc3BsaXQoIi8iKS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKCIvIil9ZnVuY3Rpb24gQTkoe3RvYXN0OiQsb25SZXZlYWw6SyxvbkRpc21pc3M6USxvblBhdXNlOlgsb25SZXN1bWU6Wn0pe2xldFtZLHFdPUQoITEpLEc9UyhudWxsKSxCPSQucGhhc2U9PT0ib3V0IixWPUI/ImFuaW1hdGUtW3NlcnZlLXNpbS10b2FzdC1wb3Atb3V0XzAuMnNfZWFzZS1pbl9mb3J3YXJkc10iOiJhbmltYXRlLVtzZXJ2ZS1zaW0tdG9hc3QtcG9wLWluXzAuMjJzX2N1YmljLWJlemllcigwLjIsMC44LDAuMiwxKV0iLEM9KCk9PntpZihCKVEoKX0sTD0oTik9PntpZighJC5wYXRoKXtOLnByZXZlbnREZWZhdWx0KCk7cmV0dXJufVgoKSxOLmRhdGFUcmFuc2Zlci5zZXREYXRhKCJ0ZXh0L3BsYWluIixCNygkLnBhdGgpKSxOLmRhdGFUcmFuc2Zlci5zZXREYXRhKCQ1LCQucGF0aCksTi5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZD0iY29weSI7bGV0IF89Ry5jdXJyZW50O2lmKF8pTi5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKF8sXy5vZmZzZXRXaWR0aC8yLF8ub2Zmc2V0SGVpZ2h0LzIpO3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+cSghMCkpfSxGPSgpPT57cSghMSksWigpfTtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiJmaXhlZCBib3R0b20tNiBsZWZ0LTEvMiAtdHJhbnNsYXRlLXgtMS8yIHotNDAiLG9uTW91c2VFbnRlcjpYLG9uTW91c2VMZWF2ZTpaLGNoaWxkcmVuOlskLnRodW1iJiZKKCJpbWciLHtyZWY6RywiZGF0YS10ZXN0aWQiOiJkcmFnLWltYWdlIixzcmM6JC50aHVtYixhbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOi05OTk5LGxlZnQ6MCx3aWR0aDo4MCxoZWlnaHQ6ODAsYm9yZGVyUmFkaXVzOjEyLG9iamVjdEZpdDoiY292ZXIiLHBvaW50ZXJFdmVudHM6Im5vbmUifX0pLEooImRpdiIse2NsYXNzTmFtZTpWLG9uQW5pbWF0aW9uRW5kOkMsY2hpbGRyZW46JC5zdGF0dXM9PT0iZXJyb3IiP0ooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMy41IHB5LTIuNSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQteGwgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0iLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgYmctWyNmODcxNzFdIn0pLEooInNwYW4iLHtjbGFzc05hbWU6InNlbGVjdC10ZXh0IixjaGlsZHJlbjokLm1lc3NhZ2U/PyJTY3JlZW5zaG90IGZhaWxlZCJ9KV19KTpKKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6SyxkaXNhYmxlZDokLnN0YXR1cyE9PSJzYXZlZCIsZHJhZ2dhYmxlOiQuc3RhdHVzPT09InNhdmVkIixvbkRyYWdTdGFydDpMLG9uRHJhZ0VuZDpGLCJhcmlhLWxhYmVsIjoiT3BlbiBzY3JlZW5zaG90IGluIEZpbmRlciIsdGl0bGU6IkNsaWNrIHRvIHJldmVhbCBpbiBGaW5kZXIgwrcgZHJhZyB0byBjb3B5IHRoZSBmaWxlIixjbGFzc05hbWU6YGdyb3VwIGZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHBsLTIgcHItMy41IHB5LTIgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLXhsIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNDUpXSB0ZXh0LWxlZnQgY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy1bIzJhMmEyY10gZGlzYWJsZWQ6Y3Vyc29yLWRlZmF1bHQgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlXSAke1k/ImludmlzaWJsZSI6IiJ9YCxjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJzaXplLTkgcm91bmRlZC1tZCBvdmVyZmxvdy1oaWRkZW4gYmctd2hpdGUvMTAgc2hyaW5rLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcmluZy0xIHJpbmctd2hpdGUvMTAgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46JC50aHVtYj9KKCJpbWciLHtzcmM6JC50aHVtYixhbHQ6IiIsY2xhc3NOYW1lOiJzaXplLWZ1bGwgb2JqZWN0LWNvdmVyIixkcmFnZ2FibGU6ITF9KTpKKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBzaXplLTQgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci13aGl0ZS8zMCBib3JkZXItdC13aGl0ZSBhbmltYXRlLVtncmlkLXNwaW5fMC44c19saW5lYXJfaW5maW5pdGVdIn0pfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGxlYWRpbmctdGlnaHQgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZSIsY2hpbGRyZW46JC5zdGF0dXM9PT0ic2F2aW5nIj8iU2F2aW5nIFNjcmVlbnNob3TigKYiOiJTY3JlZW5zaG90IFNhdmVkIn0pLCQuc3RhdHVzPT09InNhdmVkIiYmSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS82MCIsY2hpbGRyZW46Ik9wZW4gaW4gRmluZGVyIn0pXX0pLCQuc3RhdHVzPT09InNhdmVkIiYmSihlMCx7Y2xhc3NOYW1lOiJtbC0xIHRleHQtd2hpdGUvODAgcG9pbnRlci1ldmVudHMtbm9uZSIsc2l6ZToxNixzdHJva2VXaWR0aDoyLjI1fSldfSl9KV19KX1mdW5jdGlvbiBfOSh7d2lkdGg6JCxoZWlnaHQ6Syx2aXNpYmxlOlF9KXtyZXR1cm4gSigiZGl2Iix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC0zIGJvdHRvbS0zIHotMjAgcG9pbnRlci1ldmVudHMtbm9uZSBzZWxlY3Qtbm9uZSByb3VuZGVkLWxnIHB4LTIuNSBweS0xIHRleHQtWzExLjVweF0gZm9udC1tb25vIGxlYWRpbmctbm9uZSB0cmFja2luZy13aWRlIHRleHQtd2hpdGUvOTUgYmctW3JnYmEoMjAsMjIsMjgsMC43OCldIHNoYWRvdy1bMF8xcHhfMnB4X3JnYmEoMCwwLDAsMC4xOCksMF82cHhfMThweF9yZ2JhKDAsMCwwLDAuMjgpLGluc2V0XzBfMF8wXzFweF9yZ2JhKDI1NSwyNTUsMjU1LDAuMDYpXSBiYWNrZHJvcC1ibHVyLW1kIGJhY2tkcm9wLXNhdHVyYXRlLTE1MCB3aGl0ZXNwYWNlLW5vd3JhcCIsc3R5bGU6e29wYWNpdHk6UT8xOjAsdHJhbnNmb3JtOmB0cmFuc2xhdGVZKCR7UT8wOjR9cHgpIHNjYWxlKCR7UT8xOjAuOTZ9KWAsdHJhbnNmb3JtT3JpZ2luOiIxMDAlIDEwMCUiLHRyYW5zaXRpb246Im9wYWNpdHkgMTgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSwgdHJhbnNmb3JtIDIyMG1zIGN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIn0sY2hpbGRyZW46W01hdGgucm91bmQoJCksIiAiLEooInNwYW4iLHtjbGFzc05hbWU6Im9wYWNpdHktNjAgbXgtMC41IixjaGlsZHJlbjoiw5cifSksIiAiLE1hdGgucm91bmQoSyldfSl9ZnVuY3Rpb24gazkoe3N0cmVhbWluZzokfSl7bGV0IEs9JD8iIzRhZGU4MCI6IiM4ZThlOTMiO3JldHVybiBKKCJzcGFuIix7ImRhdGEtdGVzdGlkIjoic3RyZWFtLXN0YXR1cy1waWxsIixjbGFzc05hbWU6ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtWzVweF0gdGV4dC1bMTJweF0gZm9udC1tb25vIGZvbnQtbWVkaXVtIGxlYWRpbmctbm9uZSB3aGl0ZXNwYWNlLW5vd3JhcCIsc3R5bGU6e2NvbG9yOkt9LCJhcmlhLWxpdmUiOiJwb2xpdGUiLGNoaWxkcmVuOltKKCJzcGFuIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE4c19lYXNlXSIsc3R5bGU6e2JhY2tncm91bmQ6S319KSwkPyJsaXZlIjoiY29ubmVjdGluZyJdfSl9ZnVuY3Rpb24gTjcoJCxLLFEpe2xldCBYPVEubGF0Kk1hdGguUEkvMTgwLFo9KCQtUS5sYXQpKk1hdGguUEkvMTgwO3JldHVybnt4OihLLVEubG5nKSpNYXRoLlBJLzE4MCpNYXRoLmNvcyhYKSo2MzcxMDAwLHo6LVoqNjM3MTAwMH19ZnVuY3Rpb24gTDcoJCxLLFEpe2xldCBYPVEubGF0Kk1hdGguUEkvMTgwLFo9LUsvNjM3MTAwMCooMTgwL01hdGguUEkpLFk9JC8oNjM3MTAwMCpNYXRoLmNvcyhYKSkqKDE4MC9NYXRoLlBJKTtyZXR1cm57bGF0OlEubGF0K1osbG5nOlEubG5nK1l9fWZ1bmN0aW9uIEM3KCQsSyxRLFgsWil7bGV0IFk9WipaLHE9WSpaLEc9KEIsVixDLEwpPT4wLjUqKDIqVisoLUIrQykqWisoMipCLTUqVis0KkMtTCkqWSsoLUIrMypWLTMqQytMKSpxKTtyZXR1cm57eDpHKCQueCxLLngsUS54LFgueCksejpHKCQueixLLnosUS56LFgueikseTpHKCQueSxLLnksUS55LFgueSkscmF3QWx0OkcoJC5yYXdBbHQsSy5yYXdBbHQsUS5yYXdBbHQsWC5yYXdBbHQpfX1mdW5jdGlvbiBVNygkLEssUSl7aWYoJC5sZW5ndGg8MilyZXR1cm4gJC5zbGljZSgpO2xldCBYPVtdLFo9JC5sZW5ndGgsWT1RP1o6Wi0xO2ZvcihsZXQgcT0wO3E8WTtxKyspe2xldCBHPSRbUT8ocS0xK1opJVo6TWF0aC5tYXgoMCxxLTEpXSxCPSRbcSVaXSxWPSRbKHErMSklWl0sQz0kW1E/KHErMiklWjpNYXRoLm1pbihaLTEscSsyKV0sTD1WLngtQi54LEY9Vi56LUIueixOPU1hdGguaHlwb3QoTCxGKSxfPU1hdGgubWF4KDIsTWF0aC5jZWlsKE4vSykpO2ZvcihsZXQgej0wO3o8Xzt6Kyspe2xldCBVPXovXztYLnB1c2goQzcoRyxCLFYsQyxVKSl9fWlmKCFRKVgucHVzaCgkW1otMV0pO3JldHVybiBYfWZ1bmN0aW9uIE85KCQpe2lmKCQud2F5cG9pbnRzLmxlbmd0aDwyKXRocm93IEVycm9yKGBUcmFpbCAkeyQuaWR9IG5lZWRzIGF0IGxlYXN0IDIgd2F5cG9pbnRzYCk7bGV0IEs9e2xhdDokLndheXBvaW50cy5yZWR1Y2UoKHosVSk9PnorVS5sYXQsMCkvJC53YXlwb2ludHMubGVuZ3RoLGxuZzokLndheXBvaW50cy5yZWR1Y2UoKHosVSk9PnorVS5sbmcsMCkvJC53YXlwb2ludHMubGVuZ3RofSxRPSQud2F5cG9pbnRzLm1hcCgoeik9PnouYWx0Pz8wKSxYPU1hdGgubWluKC4uLlEpLFo9TWF0aC5tYXgoLi4uUSksWT0kLndheXBvaW50cy5tYXAoKHopPT57bGV0e3g6VSx6OkF9PU43KHoubGF0LHoubG5nLEspLE09ei5hbHQ/PzA7cmV0dXJue3g6VSx6OkEseTpNLVgscmF3QWx0Ok19fSkscT1VNyhZLDgsISEkLmxvb3ApLEc9W10sQj0wO2ZvcihsZXQgej0wO3o8cS5sZW5ndGg7eisrKXtsZXQgVT1xW3pdO2lmKHo+MCl7bGV0IFQ9cVt6LTFdO0IrPU1hdGguaHlwb3QoVS54LVQueCxVLnotVC56LFUueS1ULnkpfWxldHtsYXQ6QSxsbmc6TX09TDcoVS54LFUueixLKSxFPU1hdGgubWF4KDAsVS55KTtHLnB1c2goe3g6VS54LHo6VS56LHk6RSxhcmM6QixsYXQ6QSxsbmc6TX0pfWxldCBWPTEvMCxDPS0xLzAsTD0xLzAsRj0tMS8wLE49MS8wLF89LTEvMDtmb3IobGV0IHogb2YgRyl7aWYoei54PFYpVj16Lng7aWYoei54PkMpQz16Lng7aWYoei56PEwpTD16Lno7aWYoei56PkYpRj16Lno7aWYoei55PE4pTj16Lnk7aWYoei55Pl8pXz16Lnl9cmV0dXJue3RyYWlsOiQsb3JpZ2luOksscG9pbnRzOkcsdG90YWxEaXN0YW5jZTpHW0cubGVuZ3RoLTFdLmFyYyxib3VuZHM6e3g6W1YsQ10seTpbTixfXSx6OltMLEZdfSxyYXdNaW5BbHQ6WCxyYXdNYXhBbHQ6Wn19ZnVuY3Rpb24gTzAoJCxLKXtsZXQgUT0kLnRvdGFsRGlzdGFuY2U7aWYoUT09PTApcmV0dXJuICQucG9pbnRzWzBdO2xldCBYPUs7aWYoJC50cmFpbC5sb29wKVg9KFglUStRKSVRO2Vsc2V7aWYoWDw9MClyZXR1cm4gJC5wb2ludHNbMF07aWYoWD49USlyZXR1cm4gJC5wb2ludHNbJC5wb2ludHMubGVuZ3RoLTFdfWxldCBaPTAsWT0kLnBvaW50cy5sZW5ndGgtMTt3aGlsZShaKzE8WSl7bGV0IEM9WitZPj4+MTtpZigkLnBvaW50c1tDXS5hcmM8PVgpWj1DO2Vsc2UgWT1DfWxldCBxPSQucG9pbnRzW1pdLEc9JC5wb2ludHNbWV0sQj1HLmFyYy1xLmFyYyxWPUI9PT0wPzA6KFgtcS5hcmMpL0I7cmV0dXJue3g6cS54KyhHLngtcS54KSpWLHo6cS56KyhHLnotcS56KSpWLHk6cS55KyhHLnktcS55KSpWLGFyYzpYLGxhdDpxLmxhdCsoRy5sYXQtcS5sYXQpKlYsbG5nOnEubG5nKyhHLmxuZy1xLmxuZykqVn19ZnVuY3Rpb24gcjUoJCl7c3dpdGNoKCQpe2Nhc2Uid2FsayI6cmV0dXJuIDEuNDtjYXNlInJ1biI6cmV0dXJuIDM7Y2FzZSJjeWNsZSI6cmV0dXJuIDUuNTtjYXNlImRyaXZlIjpyZXR1cm4gMTMuNH19dmFyIHo3PVt7bGF0OjM3LjMzMjcyLGxuZzotMTIyLjAwODMzLGFsdDo0OX0se2xhdDozNy4zMzMwOSxsbmc6LTEyMi4wMDczNSxhbHQ6NDh9LHtsYXQ6MzcuMzMzNzMsbG5nOi0xMjIuMDA2NjMsYWx0OjQ5fSx7bGF0OjM3LjMzNDU0LGxuZzotMTIyLjAwNjI3LGFsdDo0OX0se2xhdDozNy4zMzU0LGxuZzotMTIyLjAwNjMzLGFsdDo0OX0se2xhdDozNy4zMzYxOCxsbmc6LTEyMi4wMDY3OSxhbHQ6NDV9LHtsYXQ6MzcuMzM2NzUsbG5nOi0xMjIuMDA3NTksYWx0OjQ1fSx7bGF0OjM3LjMzNzA0LGxuZzotMTIyLjAwODYxLGFsdDo0Nn0se2xhdDozNy4zMzY5OCxsbmc6LTEyMi4wMDk2OSxhbHQ6NDh9LHtsYXQ6MzcuMzM2NjIsbG5nOi0xMjIuMDEwNjYsYWx0OjQ4fSx7bGF0OjM3LjMzNTk4LGxuZzotMTIyLjAxMTM4LGFsdDo0OX0se2xhdDozNy4zMzUxNyxsbmc6LTEyMi4wMTE3NCxhbHQ6NTB9LHtsYXQ6MzcuMzM0MzEsbG5nOi0xMjIuMDExNjksYWx0OjUwfSx7bGF0OjM3LjMzMzU0LGxuZzotMTIyLjAxMTIyLGFsdDo1MH0se2xhdDozNy4zMzI5Nixsbmc6LTEyMi4wMTA0MixhbHQ6NTF9LHtsYXQ6MzcuMzMyNjgsbG5nOi0xMjIuMDA5NCxhbHQ6NTB9XSxGNz1be2xhdDozNy44MzIxMixsbmc6LTEyMi40ODA2NSxhbHQ6MzB9LHtsYXQ6MzcuODI5MzcsbG5nOi0xMjIuNDc5NzQsYWx0OjMwfSx7bGF0OjM3LjgyNjQ5LGxuZzotMTIyLjQ3OTQsYWx0OjMwfSx7bGF0OjM3LjgyMzYyLGxuZzotMTIyLjQ3OTA3LGFsdDo0NX0se2xhdDozNy44MjA3NCxsbmc6LTEyMi40Nzg3MyxhbHQ6NTl9LHtsYXQ6MzcuODE3ODYsbG5nOi0xMjIuNDc4MzksYWx0OjY2fSx7bGF0OjM3LjgxNDk4LGxuZzotMTIyLjQ3ODA2LGFsdDo2Nn0se2xhdDozNy44MTIxMSxsbmc6LTEyMi40Nzc3MixhbHQ6NTh9LHtsYXQ6MzcuODA5MjMsbG5nOi0xMjIuNDc3MzQsYWx0OjQ0fSx7bGF0OjM3LjgwOTQ5LGxuZzotMTIyLjQ3NzMsYWx0OjQ1fSx7bGF0OjM3LjgxMjM2LGxuZzotMTIyLjQ3NzY1LGFsdDo1OX0se2xhdDozNy44MTUyNCxsbmc6LTEyMi40Nzc5OCxhbHQ6NjZ9LHtsYXQ6MzcuODE4MTIsbG5nOi0xMjIuNDc4MzIsYWx0OjY2fSx7bGF0OjM3LjgyMSxsbmc6LTEyMi40Nzg2NixhbHQ6NTh9LHtsYXQ6MzcuODIzODcsbG5nOi0xMjIuNDc5LGFsdDo0NH0se2xhdDozNy44MjY3NSxsbmc6LTEyMi40NzkzMyxhbHQ6MzB9LHtsYXQ6MzcuODI5NjMsbG5nOi0xMjIuNDc5NjcsYWx0OjMwfSx7bGF0OjM3LjgzMjMzLGxuZzotMTIyLjQ4MDcyLGFsdDozMH1dLEg3PVt7bGF0OjM3Ljg4NjY0LGxuZzotMTIyLjYyNTk5LGFsdDoxMjF9LHtsYXQ6MzcuODg4ODcsbG5nOi0xMjIuNjIzMzIsYWx0OjEzNX0se2xhdDozNy44OTExNSxsbmc6LTEyMi42MjE2LGFsdDoxNjR9LHtsYXQ6MzcuODkzNTMsbG5nOi0xMjIuNjE5MjEsYWx0OjE4MH0se2xhdDozNy44OTQ2Nixsbmc6LTEyMi42MTU3NyxhbHQ6MjIwfSx7bGF0OjM3Ljg5NjMxLGxuZzotMTIyLjYxMjY4LGFsdDoyNzN9LHtsYXQ6MzcuODk5MTcsbG5nOi0xMjIuNjEwOTgsYWx0OjMxM30se2xhdDozNy45MDE2Nixsbmc6LTEyMi42MDg1NSxhbHQ6MzQyfSx7bGF0OjM3LjkwMTk5LGxuZzotMTIyLjYwNjAxLGFsdDo0MDh9LHtsYXQ6MzcuOTAzMzksbG5nOi0xMjIuNjA0MDEsYWx0OjQ1MH0se2xhdDozNy45MDY2Mixsbmc6LTEyMi42MDI5MSxhbHQ6NDQwfSx7bGF0OjM3LjkwOTcxLGxuZzotMTIyLjYwMTczLGFsdDo0MzJ9LHtsYXQ6MzcuOTEyMTMsbG5nOi0xMjIuNjAwMDcsYWx0OjQzNn0se2xhdDozNy45MTQzOSxsbmc6LTEyMi41OTc4LGFsdDo0MTB9LHtsYXQ6MzcuOTEyODUsbG5nOi0xMjIuNTk1MDQsYWx0OjQyMn0se2xhdDozNy45MTI3NCxsbmc6LTEyMi41OTIwMixhbHQ6NDI1fSx7bGF0OjM3LjkxNSxsbmc6LTEyMi41OTAzMixhbHQ6NDEyfSx7bGF0OjM3LjkxNjM3LGxuZzotMTIyLjU4OTAzLGFsdDo0MDZ9LHtsYXQ6MzcuOTE0ODEsbG5nOi0xMjIuNTg1OTUsYWx0OjM4Mn0se2xhdDozNy45MTc0LGxuZzotMTIyLjU4Mzk4LGFsdDozNzJ9LHtsYXQ6MzcuOTE2NDIsbG5nOi0xMjIuNTgyMzYsYWx0OjM1Mn0se2xhdDozNy45MTQ4MSxsbmc6LTEyMi41ODAxMSxhbHQ6MzQyfV0sQTc9W3tsYXQ6NDAuNzgyMTYsbG5nOi03My45NjI1NCxhbHQ6Mzd9LHtsYXQ6NDAuNzgyMjEsbG5nOi03My45NjA5OCxhbHQ6MzZ9LHtsYXQ6NDAuNzgzMjgsbG5nOi03My45NjAxLGFsdDozNn0se2xhdDo0MC43ODQ0LGxuZzotNzMuOTU5MyxhbHQ6MzZ9LHtsYXQ6NDAuNzg1NSxsbmc6LTczLjk1ODQ4LGFsdDozNn0se2xhdDo0MC43ODY2NCxsbmc6LTczLjk1Nzc0LGFsdDozNn0se2xhdDo0MC43ODc5LGxuZzotNzMuOTU3NjQsYWx0OjM2fSx7bGF0OjQwLjc4ODk4LGxuZzotNzMuOTU3OTIsYWx0OjM2fSx7bGF0OjQwLjc4ODY4LGxuZzotNzMuOTU5NTEsYWx0OjM3fSx7bGF0OjQwLjc4ODk3LGxuZzotNzMuOTYxMTIsYWx0OjM2fSx7bGF0OjQwLjc4ODMzLGxuZzotNzMuOTYyNSxhbHQ6Mzd9LHtsYXQ6NDAuNzg4MjgsbG5nOi03My45NjQxNixhbHQ6Mzd9LHtsYXQ6NDAuNzg4MDUsbG5nOi03My45NjU3MyxhbHQ6MzZ9LHtsYXQ6NDAuNzg2OTEsbG5nOi03My45NjYzNixhbHQ6MzZ9LHtsYXQ6NDAuNzg1NjYsbG5nOi03My45NjY2NSxhbHQ6MzZ9LHtsYXQ6NDAuNzg0NTgsbG5nOi03My45NjYwOCxhbHQ6MzZ9LHtsYXQ6NDAuNzg0MDIsbG5nOi03My45NjQ1OSxhbHQ6MzZ9LHtsYXQ6NDAuNzgzMjIsbG5nOi03My45NjMzNCxhbHQ6Mzd9XSxfNz1be2xhdDozNy41OTY1OSxsbmc6LTEyMi41MDMxNixhbHQ6NH0se2xhdDozNy41OTU1NSxsbmc6LTEyMi41MDQyNCxhbHQ6NH0se2xhdDozNy41OTQ1Mixsbmc6LTEyMi41MDUzNCxhbHQ6NX0se2xhdDozNy41OTMyOSxsbmc6LTEyMi41MDU4OCxhbHQ6OX0se2xhdDozNy41OTIxMixsbmc6LTEyMi41MDUwOCxhbHQ6MjB9LHtsYXQ6MzcuNTkxLGxuZzotMTIyLjUwNDEzLGFsdDoyOX0se2xhdDozNy41ODk3NCxsbmc6LTEyMi41MDQxNixhbHQ6NDB9LHtsYXQ6MzcuNTg4Nyxsbmc6LTEyMi41MDUyNCxhbHQ6NTF9LHtsYXQ6MzcuNTg3NDUsbG5nOi0xMjIuNTA0OTYsYWx0OjYwfSx7bGF0OjM3LjU4NjI3LGxuZzotMTIyLjUwNDIyLGFsdDo3MX0se2xhdDozNy41ODUzOSxsbmc6LTEyMi41MDUzNCxhbHQ6ODJ9LHtsYXQ6MzcuNTg1MDUsbG5nOi0xMjIuNTA2OTgsYWx0OjkzfSx7bGF0OjM3LjU4NTM5LGxuZzotMTIyLjUwNTM0LGFsdDo4Mn0se2xhdDozNy41ODYyNyxsbmc6LTEyMi41MDQyMixhbHQ6NzF9LHtsYXQ6MzcuNTg3NDUsbG5nOi0xMjIuNTA0OTYsYWx0OjYwfSx7bGF0OjM3LjU4ODcsbG5nOi0xMjIuNTA1MjQsYWx0OjUxfSx7bGF0OjM3LjU4OTc0LGxuZzotMTIyLjUwNDE2LGFsdDo0MH0se2xhdDozNy41OTEsbG5nOi0xMjIuNTA0MTMsYWx0OjI5fSx7bGF0OjM3LjU5MjEyLGxuZzotMTIyLjUwNTA4LGFsdDoyMH0se2xhdDozNy41OTMyOSxsbmc6LTEyMi41MDU4OCxhbHQ6OX0se2xhdDozNy41OTQ1Mixsbmc6LTEyMi41MDUzNCxhbHQ6NX0se2xhdDozNy41OTU1NSxsbmc6LTEyMi41MDQyNCxhbHQ6NH1dLEQwPVt7aWQ6ImFwcGxlLXBhcmstbG9vcCIsbmFtZToiQXBwbGUgUGFyayBMb29wIixkZXNjcmlwdGlvbjoiQ3VwZXJ0aW5vIOKAoiBmbGF0IHJpbmcgcm9hZCIsbW9kZToid2FsayIsd2F5cG9pbnRzOno3LGxvb3A6ITB9LHtpZDoiZ29sZGVuLWdhdGUiLG5hbWU6IkdvbGRlbiBHYXRlIENyb3NzaW5nIixkZXNjcmlwdGlvbjoiU2FuIEZyYW5jaXNjbyDigKIgYnJpZGdlIHJvdW5kLXRyaXAiLG1vZGU6InJ1biIsd2F5cG9pbnRzOkY3LGxvb3A6ITB9LHtpZDoidGFtLXJpZGdlIixuYW1lOiJNdC4gVGFtIFJpZGdlIixkZXNjcmlwdGlvbjoiU3RpbnNvbiBCZWFjaCDigKIgU3RlZXAgUmF2aW5lICsgTWF0dCBEYXZpcyBsb29wIixtb2RlOiJ3YWxrIix3YXlwb2ludHM6SDcsbG9vcDohMH0se2lkOiJjZW50cmFsLXBhcmsiLG5hbWU6IlJlc2Vydm9pciBMb29wIixkZXNjcmlwdGlvbjoiQ2VudHJhbCBQYXJrIOKAoiAyLjUga20iLG1vZGU6InJ1biIsd2F5cG9pbnRzOkE3LGxvb3A6ITB9LHtpZDoicGNoLXBhY2lmaWNhIixuYW1lOiJQYWNpZmljIENvYXN0IEh3eSIsZGVzY3JpcHRpb246IlBhY2lmaWNhIOKAoiBEZXZpbCdzIFNsaWRlIHJvdW5kLXRyaXAiLG1vZGU6ImRyaXZlIix3YXlwb2ludHM6XzcsbG9vcDohMH1dO2Z1bmN0aW9uIHQxKHtvcGVuOiQsb25PcGVuQ2hhbmdlOkssc3VtbWFyeTpRLGNoaWxkcmVuOlgsc3VtbWFyeUNsYXNzTmFtZTpaPSIiLGJvZHlDbGFzc05hbWU6WT0iZmxleCBmbGV4LWNvbCBnYXAtMi41IHB0LTIuNSIsY2xhc3NOYW1lOnE9IiIsLi4uR30pe3JldHVybiBKKCJkZXRhaWxzIix7b3BlbjokLG9uVG9nZ2xlOihCKT0+SyhCLmN1cnJlbnRUYXJnZXQub3BlbiksY2xhc3NOYW1lOmBsZW0tc2VjdGlvbiBiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIgJHtxfWAsLi4uRyxjaGlsZHJlbjpbSigic3VtbWFyeSIse2NsYXNzTmFtZTpgbGVtLXRvZ2dsZSBjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSB0ZXh0LXdoaXRlLzkwIG1pbi1oLVszNnB4XSBsZWFkaW5nLW5vbmUgcHktMi41IHB4LTEgLW15LTIgLW14LTEgdy1bY2FsYygxMDAlKzhweCldICR7Wn1gLGNoaWxkcmVuOltRLEooRzIse29wZW46JH0pXX0pLEooImRpdiIse2NsYXNzTmFtZTpZLGNoaWxkcmVuOlh9KV19KX1mdW5jdGlvbiBLNSh7bGFiZWw6JCx2YWx1ZTpLLG9wdGlvbnM6USxkaXNhYmxlZDpYLG9uQ2hhbmdlOlosY2xhc3NOYW1lOll9KXtsZXRbcSxHXT1EKCExKSxCPVMobnVsbCksVj1TKG51bGwpLFtDLExdPUQobnVsbCksRj0oKT0+e2xldCBVPUIuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoIVUpcmV0dXJuO0woe3RvcDpVLmJvdHRvbSs0LGxlZnQ6VS5sZWZ0LG1pbldpZHRoOlUud2lkdGh9KX07bzAoKCk9PntpZihxKUYoKX0sW3FdKSxvMCgoKT0+e2lmKCFxfHwhQylyZXR1cm47bGV0IFU9Vi5jdXJyZW50O2lmKCFVKXJldHVybjtsZXQgQT04LE09d2luZG93LmlubmVyV2lkdGgtVS5vZmZzZXRXaWR0aC1BO2lmKEMubGVmdD5NKUwoey4uLkMsbGVmdDpNYXRoLm1heChBLE0pfSl9LFtxLENdKSxJKCgpPT57aWYoIXEpcmV0dXJuO2xldCBVPSgpPT5HKCExKSxBPShFKT0+e2xldCBUPUUudGFyZ2V0O2lmKCFWLmN1cnJlbnQ/LmNvbnRhaW5zKFQpJiYhQi5jdXJyZW50Py5jb250YWlucyhUKSlVKCl9LE09KEUpPT57aWYoIVYuY3VycmVudD8uY29udGFpbnMoRS50YXJnZXQpKUYoKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLE0sITApLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLFUpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsQSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsTSwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsVSl9fSxbcV0pO2xldCBOPVMoITEpO0koKCk9PntpZighcSl7Ti5jdXJyZW50PSExO3JldHVybn1pZighQ3x8Ti5jdXJyZW50KXJldHVybjtsZXQgVT1WLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3JBbGwoIltyb2xlPW9wdGlvbl0iKTtpZighVT8ubGVuZ3RoKXJldHVybjtOLmN1cnJlbnQ9ITA7bGV0IEE9US5maW5kSW5kZXgoKE0pPT5NLnZhbHVlPT09Syk7VVtNYXRoLm1heChBLDApXT8uZm9jdXMoKX0sW3EsQyxRLEtdKTtsZXQgXz0oVSk9PntsZXQgQT1bLi4uVi5jdXJyZW50Py5xdWVyeVNlbGVjdG9yQWxsKCJbcm9sZT1vcHRpb25dIik/P1tdXSxNPUEuaW5kZXhPZihkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtpZihVLmtleT09PSJBcnJvd0Rvd24ifHxVLmtleT09PSJBcnJvd1VwIil7VS5wcmV2ZW50RGVmYXVsdCgpO2xldCBFPVUua2V5PT09IkFycm93RG93biI/TWF0aC5taW4oTSsxLEEubGVuZ3RoLTEpOk1hdGgubWF4KE0tMSwwKTtBW0VdPy5mb2N1cygpfWVsc2UgaWYoVS5rZXk9PT0iRXNjYXBlIilVLnByZXZlbnREZWZhdWx0KCksRyghMSksQi5jdXJyZW50Py5mb2N1cygpfSx6PVEuZmluZCgoVSk9PlUudmFsdWU9PT1LKTtyZXR1cm4gSihlLHtjaGlsZHJlbjpbSigiYnV0dG9uIix7cmVmOkIsdHlwZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6JCwiYXJpYS1oYXNwb3B1cCI6Imxpc3Rib3giLCJhcmlhLWV4cGFuZGVkIjpxLGRpc2FibGVkOlgsb25DbGljazooKT0+RygoVSk9PiFVKSxjbGFzc05hbWU6YHRleHQtbGVmdCBmb250LVtpbmhlcml0XSBjdXJzb3ItcG9pbnRlciBkaXNhYmxlZDpjdXJzb3ItZGVmYXVsdCAke1k/PyIifWAsY2hpbGRyZW46Sigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgdHJ1bmNhdGUiLGNoaWxkcmVuOno/LmxhYmVsPz9LfSl9KSxxJiZDJiZxOChKKCJkaXYiLHtyZWY6Vixyb2xlOiJsaXN0Ym94IiwiYXJpYS1sYWJlbCI6JCxvbktleURvd246XyxzdHlsZTp7dG9wOkMudG9wLGxlZnQ6Qy5sZWZ0LG1pbldpZHRoOkMubWluV2lkdGh9LGNsYXNzTmFtZToiZml4ZWQgbWF4LWgtOTAgb3ZlcmZsb3cteS1hdXRvIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1bMTBweF0gcC0xIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNSldIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgei01MCIsY2hpbGRyZW46US5tYXAoKFUpPT5KKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHJvbGU6Im9wdGlvbiIsImFyaWEtc2VsZWN0ZWQiOlUudmFsdWU9PT1LLG9uQ2xpY2s6KCk9PntaKFUudmFsdWUpLEcoITEpLEIuY3VycmVudD8uZm9jdXMoKX0sY2xhc3NOYW1lOmBibG9jayB3LWZ1bGwgdGV4dC1sZWZ0IGZvbnQtW2luaGVyaXRdIHB4LTIuNSBweS0xIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgd2hpdGVzcGFjZS1ub3dyYXAgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6Ymctd2hpdGUvOCBmb2N1cy12aXNpYmxlOmJnLXdoaXRlLzggb3V0bGluZS1ub25lICR7VS52YWx1ZT09PUs/InRleHQtYWNjZW50IjoiIn1gLGNoaWxkcmVuOlUubGFiZWx9LFUudmFsdWUpKX0pLGRvY3VtZW50LmJvZHkpXX0pfXZhciBrNz02NTAsaTU9WzEsMiw1LDIwXSxEOT0xMDAwLG41PXtzdGF0dXM6ImlkbGUiLGFyYzowLGVsYXBzZWRNczowfTtmdW5jdGlvbiBFOSh7dWRpZDokLGV4ZWM6S30pe2xldFtRLFhdPUQoITEpLFtaLFldPUQoRDBbMF0uaWQpLFtxLEddPUQoRDBbMF0ubW9kZSksW0IsVl09RCgxKSxbQyxMXT1EKG41KSxbRixOXT1EKG51bGwpLF89TzEoKCk9PkQwLmZpbmQoKGQpPT5kLmlkPT09Wik/P0QwWzBdLFtaXSksej1PMSgoKT0+TzkoXyksW19dKSxVPVMoMCksQT1TKCJpZGxlIiksTT1TKHI1KHEpKkIpLEU9UygwKSxUPVMoeiksYj1TKG51bGwpO0koKCk9PntNLmN1cnJlbnQ9cjUocSkqQn0sW3EsQl0pO2xldCB4PVMobnVsbCk7SSgoKT0+e2xldCBkPVQuY3VycmVudCxhPVUuY3VycmVudDtpZihULmN1cnJlbnQ9eixkJiZkIT09eil4LmN1cnJlbnQ9TTcoZCxhLHoscGVyZm9ybWFuY2Uubm93KCkpO1UuY3VycmVudD0wLEUuY3VycmVudD0wLEEuY3VycmVudD0iaWRsZSIsYi5jdXJyZW50PW51bGwsTChuNSl9LFt6XSk7bGV0IG09UygwKSxSPVMobnVsbCksbz1TKG51bGwpO0koKCk9PntsZXQgZD0wLGE9KEsxKT0+e2xldCBZMT1SLmN1cnJlbnQsVjE9WTE9PW51bGw/MTY6TWF0aC5taW4oNjQsSzEtWTEpO2lmKFIuY3VycmVudD1LMSxtLmN1cnJlbnQ9KG0uY3VycmVudCtWMSowLjAwMDEyKSUoTWF0aC5QSSoyKSxBLmN1cnJlbnQ9PT0icGxheWluZyIpe2xldCBRMT1NLmN1cnJlbnQqVjEvMTAwMDtVLmN1cnJlbnQrPVExLEUuY3VycmVudCs9VjE7bGV0IFUxPVQuY3VycmVudC50b3RhbERpc3RhbmNlO2lmKCFULmN1cnJlbnQudHJhaWwubG9vcCYmVS5jdXJyZW50Pj1VMSlVLmN1cnJlbnQ9VTEsQS5jdXJyZW50PSJwYXVzZWQiLEwoe3N0YXR1czoicGF1c2VkIixhcmM6VTEsZWxhcHNlZE1zOkUuY3VycmVudH0pfWxldCBjPW8uY3VycmVudDtpZihjKXtsZXQgUTE9VC5jdXJyZW50LFUxPW51bGwsdT14LmN1cnJlbnQ7aWYodSl7bGV0IGo9KEsxLXUuc3RhcnRNcykvazc7aWYoaj49MSl4LmN1cnJlbnQ9bnVsbDtlbHNle2xldCBrPVA3KGopO1ExPVQ3KHUsayksVTE9e3g6dS5wcmV2TWFya2VyLngrKHUubmV4dE1hcmtlci54LXUucHJldk1hcmtlci54KSprLHk6dS5wcmV2TWFya2VyLnkrKHUubmV4dE1hcmtlci55LXUucHJldk1hcmtlci55KSprLHo6dS5wcmV2TWFya2VyLnorKHUubmV4dE1hcmtlci56LXUucHJldk1hcmtlci56KSprfX19dzcoYyxRMSxVLmN1cnJlbnQsbS5jdXJyZW50LEsxLEEuY3VycmVudD09PSJwbGF5aW5nIixVMSl9ZD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYSl9O3JldHVybiBkPXJlcXVlc3RBbmltYXRpb25GcmFtZShhKSwoKT0+Y2FuY2VsQW5pbWF0aW9uRnJhbWUoZCl9LFtdKSxJKCgpPT57bGV0IGQ9c2V0SW50ZXJ2YWwoKCk9PntpZihBLmN1cnJlbnQ9PT0icGxheWluZyIpTCh7c3RhdHVzOiJwbGF5aW5nIixhcmM6VS5jdXJyZW50LGVsYXBzZWRNczpFLmN1cnJlbnR9KX0sMjUwKTtyZXR1cm4oKT0+Y2xlYXJJbnRlcnZhbChkKX0sW10pLEkoKCk9PntpZihDLnN0YXR1cyE9PSJwbGF5aW5nIilyZXR1cm47bGV0IGQ9ITEsYT0wLEsxPW51bGwsWTE9YXN5bmMoKT0+e2lmKGR8fEsxKXJldHVybjtsZXQgYz1EYXRlLm5vdygpO2lmKGMtYTxEOSlyZXR1cm47YT1jO2xldCBRMT1PMChULmN1cnJlbnQsVS5jdXJyZW50KSxVMT1geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gc2V0ICR7UTEubGF0LnRvRml4ZWQoNyl9LCR7UTEubG5nLnRvRml4ZWQoNyl9YDtLMT1LKFUxKS50aGVuKCh1KT0+e2lmKGQpcmV0dXJuO2lmKHUuZXhpdENvZGUhPT0wKU4odzkodS5zdGRlcnIpfHwic2ltY3RsIGxvY2F0aW9uIHNldCBmYWlsZWQiKTtlbHNlIE4obnVsbCl9KS5jYXRjaCgodSk9PntpZighZClOKHUgaW5zdGFuY2VvZiBFcnJvcj91Lm1lc3NhZ2U6U3RyaW5nKHUpKX0pLmZpbmFsbHkoKCk9PntLMT1udWxsfSl9O1kxKCk7bGV0IFYxPXNldEludGVydmFsKFkxLEQ5KTtyZXR1cm4oKT0+e2Q9ITAsY2xlYXJJbnRlcnZhbChWMSl9fSxbQy5zdGF0dXMsJCxLXSk7bGV0IGk9UCgoKT0+e2lmKEEuY3VycmVudD09PSJwbGF5aW5nIil7QS5jdXJyZW50PSJwYXVzZWQiLEwoKGQpPT4oey4uLmQsc3RhdHVzOiJwYXVzZWQifSkpO3JldHVybn1pZihVLmN1cnJlbnQ+PVQuY3VycmVudC50b3RhbERpc3RhbmNlJiYhVC5jdXJyZW50LnRyYWlsLmxvb3ApVS5jdXJyZW50PTAsRS5jdXJyZW50PTA7aWYoYi5jdXJyZW50PT1udWxsKXtsZXQgZD1PMChULmN1cnJlbnQsVS5jdXJyZW50KTtiLmN1cnJlbnQ9e2xhdDpkLmxhdCxsbmc6ZC5sbmd9fUEuY3VycmVudD0icGxheWluZyIsTCgoZCk9Pih7Li4uZCxzdGF0dXM6InBsYXlpbmciLGFyYzpVLmN1cnJlbnQsZWxhcHNlZE1zOkUuY3VycmVudH0pKX0sW10pLFgxPVAoKCk9PntBLmN1cnJlbnQ9ImlkbGUiLFUuY3VycmVudD0wLEUuY3VycmVudD0wLEwobjUpO2xldCBkPWIuY3VycmVudDtiLmN1cnJlbnQ9bnVsbDtsZXQgYT1kP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBzZXQgJHtkLmxhdC50b0ZpeGVkKDcpfSwke2QubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gY2xlYXJgO0soYSkudGhlbigoSzEpPT57aWYoSzEuZXhpdENvZGUhPT0wKU4odzkoSzEuc3RkZXJyKXx8bnVsbCk7ZWxzZSBOKG51bGwpfSl9LFtLLCRdKSwkMT1QKChkKT0+e1koZCk7bGV0IGE9RDAuZmluZCgoSzEpPT5LMS5pZD09PWQpO2lmKGEpRyhhLm1vZGUpfSxbXSk7SSgoKT0+KCk9PntpZihBLmN1cnJlbnQ9PT0iaWRsZSIpcmV0dXJuO2xldCBkPWIuY3VycmVudCxhPWQ/YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IHNldCAke2QubGF0LnRvRml4ZWQoNyl9LCR7ZC5sbmcudG9GaXhlZCg3KX1gOmB4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBjbGVhcmA7SyhhKS5jYXRjaCgoKT0+e30pfSxbSywkXSk7bGV0IHM9Qy5zdGF0dXM9PT0icGxheWluZyIsTDE9cz9gJHt0NShDLmFyYyl9IMK3ICR7VDkoQy5lbGFwc2VkTXMpfWA6dDUoei50b3RhbERpc3RhbmNlKTtyZXR1cm4gSih0MSx7b3BlbjpRLG9uT3BlbkNoYW5nZTpYLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvX21pbm1heCgwLDFmcilfYXV0b10gW2NvbnRhaW5lci10eXBlOmlubGluZS1zaXplXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OkooZSx7Y2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkxvY2F0aW9uIn0pLFE/Sigic3BhbiIseyJkYXRhLWxvY2F0aW9uLXN0YXR1cyI6ITAsY2xhc3NOYW1lOiJtaW4tdy0wIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IGp1c3RpZnktc2VsZi1lbmQgbGVhZGluZy1ub25lIHdoaXRlc3BhY2Utbm93cmFwIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIG1heC13LWZ1bGwiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjJzLGJveC1zaGFkb3dfMC4yc10iLHN0eWxlOntiYWNrZ3JvdW5kOnM/IiM0YWRlODAiOnoudG90YWxEaXN0YW5jZT4wPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMykiOiJ0cmFuc3BhcmVudCIsYm94U2hhZG93OnM/IjAgMCA2cHggcmdiYSg3NCwyMjIsMTI4LDAuNykiOiJub25lIn19KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIixjaGlsZHJlbjpMMX0pLCFzJiZKKCJzcGFuIix7ImRhdGEtbG9jYXRpb24tc3RhdHVzLXRvdGFsIjohMCxjbGFzc05hbWU6InNocmluay0wIixjaGlsZHJlbjoidG90YWwifSldfSk6Sigic3BhbiIse30pXX0pLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGJsb2NrIixjaGlsZHJlbjpbSihLNSx7bGFiZWw6IlRyYWlsIix2YWx1ZTpaLG9uQ2hhbmdlOiQxLG9wdGlvbnM6RDAubWFwKChkKT0+KHt2YWx1ZTpkLmlkLGxhYmVsOmQubmFtZX0pKSxjbGFzc05hbWU6ImJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIHB5LTEuNSBwci1bMjZweF0gcGwtMiB3LWZ1bGwgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxib3JkZXItY29sb3JfMC4xMnNdIGhvdmVyOmJnLXdoaXRlL1swLjA3XSBob3Zlcjpib3JkZXItW3JnYmEoMjU1LDI1NSwyNTUsMC4xNildIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpiZy13aGl0ZS9bMC4wOF0gZm9jdXM6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMjQpXSJ9KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC1bOXB4XSB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgcG9pbnRlci1ldmVudHMtbm9uZSBmbGV4IGl0ZW1zLWNlbnRlciIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46SihHMix7b3BlbjohMX0pfSldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpfLmRlc2NyaXB0aW9ufSldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwgcm91bmRlZC1bMTBweF0gb3ZlcmZsb3ctaGlkZGVuIGJnLVsjMGEwYTBjXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSBbYXNwZWN0LXJhdGlvOjE2LzExXSIsY2hpbGRyZW46W0ooImNhbnZhcyIse3JlZjpvLGNsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBibG9jayJ9KSxKKEQ3LHtwcmVwYXJlZDp6fSldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyXzFmcl8xZnJdIGdhcC0xLjUiLGNoaWxkcmVuOltKKHM1LHtsYWJlbDoiRGlzdGFuY2UiLHZhbHVlOnQ1KEMuYXJjKX0pLEooczUse2xhYmVsOiJQYWNlIix2YWx1ZTpJNyhNLmN1cnJlbnQpfSksSihzNSx7bGFiZWw6IkVsYXBzZWQiLHZhbHVlOlQ5KEMuZWxhcHNlZE1zKX0pXX0pLEooImRpdiIse2NsYXNzTmFtZToiZmxleCBnYXAtMS41IixjaGlsZHJlbjpbSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOmksY2xhc3NOYW1lOmBmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTIuNSBib3JkZXItbm9uZSByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gJHtzPyJiZy13aGl0ZS9bMC4xNl0gdGV4dC13aGl0ZSBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjIyXSI6ImJnLXN1Y2Nlc3MtZW1lcmFsZCB0ZXh0LVsjMDYyMDE4XSBlbmFibGVkOmhvdmVyOmJyaWdodG5lc3MtWzEuMDhdIn1gLCJhcmlhLXByZXNzZWQiOnMsdGl0bGU6cz8iUGF1c2UiOiJQbGF5IixjaGlsZHJlbjpbcz9KKHk1LHt9KTpKKFYyLHt9KSxKKCJzcGFuIix7Y2hpbGRyZW46cz8iUGF1c2UiOiJQbGF5In0pXX0pLEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpYMSxjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0zIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LW1lZGl1bSBiZy10cmFuc3BhcmVudCB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMDZdIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLXdoaXRlLzIwIGVuYWJsZWQ6aG92ZXI6dGV4dC13aGl0ZSBkaXNhYmxlZDpvcGFjaXR5LTQwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCIsZGlzYWJsZWQ6Qy5zdGF0dXM9PT0iaWRsZSImJkMuYXJjPT09MCx0aXRsZToiU3RvcCBhbmQgY2xlYXIgc2ltdWxhdGVkIGxvY2F0aW9uIixjaGlsZHJlbjpbSihCMix7fSksSigic3BhbiIse2NoaWxkcmVuOiJTdG9wIn0pXX0pXX0pLEooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LXJvdyBpdGVtcy1zdHJldGNoIGdhcC0xLjUiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4tdy0wIixjaGlsZHJlbjpKKE83LHthcmlhTGFiZWw6IlRyYW5zcG9ydCBtb2RlIix2YWx1ZTpxLG9uQ2hhbmdlOihkKT0+RyhkKSxvcHRpb25zOlt7dmFsdWU6IndhbGsiLGxhYmVsOiJXYWxrIixpY29uOkooUzUse30pfSx7dmFsdWU6InJ1biIsbGFiZWw6IlJ1biIsaWNvbjpKKFI1LHt9KX0se3ZhbHVlOiJjeWNsZSIsbGFiZWw6IkN5Y2xlIixpY29uOkooeDUse30pfSx7dmFsdWU6ImRyaXZlIixsYWJlbDoiRHJpdmUiLGljb246Sih2NSx7fSl9XX0pfSksSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT57bGV0IGQ9aTUuaW5kZXhPZihCKSxhPWk1WyhkKzEpJWk1Lmxlbmd0aF07VihhKX0sY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMSBweC0yLjUgYm9yZGVyIHJvdW5kZWQtWzdweF0gY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCBtaW4tdy1bNTZweF0gYWN0aXZlOnNjYWxlLVswLjk3XSAke0I+MT8iYmctd2hpdGUgYm9yZGVyLXdoaXRlIHRleHQtWyMwYTBhMGNdIGhvdmVyOmJnLXdoaXRlL1swLjg4XSBob3Zlcjpib3JkZXItd2hpdGUvWzAuODhdIGhvdmVyOnRleHQtWyMwYTBhMGNdIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlci13aGl0ZS84IHRleHQtd2hpdGUvODUgaG92ZXI6Ymctd2hpdGUvWzAuMDldIGhvdmVyOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjE4KV0gaG92ZXI6dGV4dC13aGl0ZSJ9YCwiYXJpYS1sYWJlbCI6YFNwZWVkICR7Qn3DlyDigJQgdGFwIHRvIGN5Y2xlYCx0aXRsZTpgU3BlZWQgJHtCfcOXIOKAlCB0YXAgdG8gY3ljbGVgLGNoaWxkcmVuOltKKGI1LHt9KSxCPjEmJkooInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtbW9ubyBbZm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zXSIsY2hpbGRyZW46W0IsIsOXIl19KV19KV19KSxGJiZKKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOkZ9KV19KX12YXIgczU9RTAoZnVuY3Rpb24oe2xhYmVsOkssdmFsdWU6UX0pe3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBiZy13aGl0ZS9bMC4wM10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gcm91bmRlZC1tZCBweS1bNXB4XSBweC1bN3B4XSBtaW4tdy0wIixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVs5cHhdIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNmVtXSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpLfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSBmb250LW1vbm8gdGV4dC13aGl0ZSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46UX0pXX0pfSk7ZnVuY3Rpb24gTzcoe3ZhbHVlOiQsb25DaGFuZ2U6SyxvcHRpb25zOlEsYXJpYUxhYmVsOlh9KXtyZXR1cm4gSigiZGl2Iix7cm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpYLGNsYXNzTmFtZToiZmxleCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gcC0wLjUgZ2FwLTAuNSIsY2hpbGRyZW46US5tYXAoKFopPT57bGV0IFk9Wi52YWx1ZT09PSQ7cmV0dXJuIEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+SyhaLnZhbHVlKSxjbGFzc05hbWU6YGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbm9uZSByb3VuZGVkLVs1cHhdIHB5LVs1cHhdIHB4LTIgdGV4dC1bMTFweF0gZm9udC1tZWRpdW0gY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10gbWluLWgtWzIycHhdICR7WT8iYmctd2hpdGUvWzAuMTJdIHRleHQtd2hpdGUiOiJiZy10cmFuc3BhcmVudCB0ZXh0LXdoaXRlLzYwIGhvdmVyOmJnLXdoaXRlL1swLjA1XSBob3Zlcjp0ZXh0LXdoaXRlLzkwIn1gLCJhcmlhLXByZXNzZWQiOlksImFyaWEtbGFiZWwiOlouaWNvbj9aLmxhYmVsOnZvaWQgMCx0aXRsZTpaLmljb24/Wi5sYWJlbDp2b2lkIDAsY2hpbGRyZW46Wi5pY29uPz9aLmxhYmVsfSxaLnZhbHVlKX0pfSl9ZnVuY3Rpb24gRDcoe3ByZXBhcmVkOiR9KXtpZigkLnJhd01heEFsdC0kLnJhd01pbkFsdDw1KXJldHVybiBudWxsO3JldHVybiBKKGUse2NoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0yIGxlZnQtMi41IGJnLXBhbmVsLW92ZXJsYXkgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gcHgtMS41IHB5LTAuNSByb3VuZGVkLVs1cHhdIGZsZXggaXRlbXMtY2VudGVyIHRyYWNraW5nLVswLjAyZW1dIGJvcmRlciBib3JkZXItd2hpdGUvWzAuMDZdIixjaGlsZHJlbjpbSihqMix7ZGlyOiJ1cCJ9KSwiICIsUDkoJC5yYXdNYXhBbHQpXX0pLEooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTIgcmlnaHQtMi41IGJnLXBhbmVsLW92ZXJsYXkgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gcHgtMS41IHB5LTAuNSByb3VuZGVkLVs1cHhdIGZsZXggaXRlbXMtY2VudGVyIHRyYWNraW5nLVswLjAyZW1dIGJvcmRlciBib3JkZXItd2hpdGUvWzAuMDZdIixjaGlsZHJlbjpbSihqMix7ZGlyOiJkb3duIn0pLCIgIixQOSgkLnJhd01pbkFsdCldfSldfSl9dmFyIE05PTE0MDtmdW5jdGlvbiBXOSgkLEspe2xldCBRPUFycmF5KEspO2ZvcihsZXQgWD0wO1g8SztYKyspe2xldCBaPUs9PT0xPzA6WC8oSy0xKSxZPU8wKCQsWiokLnRvdGFsRGlzdGFuY2UpO1FbWF09e3g6WS54LHk6WS55LHo6WS56fX1yZXR1cm4gUX1mdW5jdGlvbiBNNygkLEssUSxYKXtsZXQgWj0oJC5ib3VuZHMueFswXSskLmJvdW5kcy54WzFdKS8yLFk9KCQuYm91bmRzLnpbMF0rJC5ib3VuZHMuelsxXSkvMixxPSQuYm91bmRzLnlbMF0sRz1NYXRoLm1heCgxLCQuYm91bmRzLnhbMV0tJC5ib3VuZHMueFswXSwkLmJvdW5kcy56WzFdLSQuYm91bmRzLnpbMF0pLEI9KFEuYm91bmRzLnhbMF0rUS5ib3VuZHMueFsxXSkvMixWPShRLmJvdW5kcy56WzBdK1EuYm91bmRzLnpbMV0pLzIsQz1RLmJvdW5kcy55WzBdLEY9TWF0aC5tYXgoMSxRLmJvdW5kcy54WzFdLVEuYm91bmRzLnhbMF0sUS5ib3VuZHMuelsxXS1RLmJvdW5kcy56WzBdKS9HLF89VzkoJCxNOSkubWFwKCh4KT0+KHt4Oih4LngtWikqRitCLHk6KHgueS1xKSpGK0MsejooeC56LVkpKkYrVn0pKSx6PVc5KFEsTTkpLFU9KCQudHJhaWwubG9vcHx8US50cmFpbC5sb29wKT8/ITEsQT1XNyhfLHosVSksTT1PMCgkLEspLEU9e3g6KE0ueC1aKSpGK0IseTooTS55LXEpKkYrQyx6OihNLnotWSkqRitWfSxUPU8wKFEsMCksYj17eDpULngseTpULnksejpULnp9O3JldHVybntmcm9tOiQsdG86USxmcm9tUHRzOl8sdG9QdHM6QSxwcmV2TWFya2VyOkUsbmV4dE1hcmtlcjpiLHN0YXJ0TXM6WH19ZnVuY3Rpb24gVzcoJCxLLFEpe2xldCBYPSQubGVuZ3RoLFo9MS8wLFk9MCxxPSExLEc9W0ssWy4uLktdLnJldmVyc2UoKV07Zm9yKGxldCBDPTA7QzxHLmxlbmd0aDtDKyspe2xldCBMPUdbQ10sRj1RP1g6MTtmb3IobGV0IE49MDtOPEY7TisrKXtsZXQgXz0wO2ZvcihsZXQgej0wO3o8WDt6Kyspe2xldCBVPSRbel0sQT1MWyh6K04pJVhdLE09VS54LUEueCxFPVUueS1BLnksVD1VLnotQS56O2lmKF8rPU0qTStFKkUrVCpULF8+PVopYnJlYWt9aWYoXzxaKVo9XyxZPU4scT1DPT09MX19bGV0IEI9cT9bLi4uS10ucmV2ZXJzZSgpOkssVj1BcnJheShYKTtmb3IobGV0IEM9MDtDPFg7QysrKVZbQ109QlsoQytZKSVYXTtyZXR1cm4gVn1mdW5jdGlvbiBUNygkLEspe2xldCBRPSQuZnJvbVB0cy5sZW5ndGgsWD1BcnJheShRKSxaPTAsWT1udWxsLHE9MS8wLEc9LTEvMCxCPTEvMCxWPS0xLzAsQz0xLzAsTD0tMS8wO2ZvcihsZXQgRj0wO0Y8UTtGKyspe2xldCBOPSQuZnJvbVB0c1tGXSxfPSQudG9QdHNbRl0sej1OLngrKF8ueC1OLngpKkssVT1OLnkrKF8ueS1OLnkpKkssQT1OLnorKF8uei1OLnopKks7aWYoWSl7bGV0IEU9ei1ZLngsVD1VLVkueSxiPUEtWS56O1orPU1hdGguc3FydChFKkUrVCpUK2IqYil9bGV0IE09e3g6eix5OlUsejpBLGFyYzpaLGxhdDowLGxuZzowfTtpZihYW0ZdPU0sWT1NLHo8cSlxPXo7aWYoej5HKUc9ejtpZihVPEIpQj1VO2lmKFU+VilWPVU7aWYoQTxDKUM9QTtpZihBPkwpTD1BfXJldHVybnt0cmFpbDokLnRvLnRyYWlsLG9yaWdpbjokLnRvLm9yaWdpbixwb2ludHM6WCx0b3RhbERpc3RhbmNlOlosYm91bmRzOnt4OltxLEddLHk6W0IsVl0sejpbQyxMXX0scmF3TWluQWx0OiQudG8ucmF3TWluQWx0KygkLmZyb20ucmF3TWluQWx0LSQudG8ucmF3TWluQWx0KSooMS1LKSxyYXdNYXhBbHQ6JC50by5yYXdNYXhBbHQrKCQuZnJvbS5yYXdNYXhBbHQtJC50by5yYXdNYXhBbHQpKigxLUspfX1mdW5jdGlvbiBQNygkKXtyZXR1cm4gJDwwLjU/MiokKiQ6MS1NYXRoLnBvdygtMiokKzIsMikvMn1mdW5jdGlvbiB3NygkLEssUSxYLFosWSxxKXtsZXQgRz0kLmdldENvbnRleHQoIjJkIik7aWYoIUcpcmV0dXJuO2xldHtjbGllbnRXaWR0aDpCLGNsaWVudEhlaWdodDpWfT0kO2lmKEI9PT0wfHxWPT09MClyZXR1cm47bGV0IEM9dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE6MSxMPU1hdGgucm91bmQoQipDKSxGPU1hdGgucm91bmQoVipDKTtpZigkLndpZHRoIT09THx8JC5oZWlnaHQhPT1GKSQud2lkdGg9TCwkLmhlaWdodD1GO0cuc2V0VHJhbnNmb3JtKEMsMCwwLEMsMCwwKSxHLmNsZWFyUmVjdCgwLDAsQixWKTtsZXQgTj1HLmNyZWF0ZVJhZGlhbEdyYWRpZW50KEIqMC41LFYqMC41NSxNYXRoLm1pbihCLFYpKjAuMixCKjAuNSxWKjAuNTUsTWF0aC5tYXgoQixWKSowLjg1KTtOLmFkZENvbG9yU3RvcCgwLCIjMWExYTFkIiksTi5hZGRDb2xvclN0b3AoMSwiIzBhMGEwYyIpLEcuZmlsbFN0eWxlPU4sRy5maWxsUmVjdCgwLDAsQixWKSxFNyhHLEIsVik7bGV0e3BvaW50czpfLGJvdW5kczp6fT1LO2lmKF8ubGVuZ3RoPDIpcmV0dXJuO2xldCBVPTI4Kk1hdGguUEkvMTgwLEE9TWF0aC5zaW4oVSksTT1NYXRoLmNvcyhVKSxFPU1hdGguc2luKFgpLFQ9TWF0aC5jb3MoWCksYj0oei54WzBdK3oueFsxXSkvMix4PSh6LnpbMF0rei56WzFdKS8yLG09ei54WzFdLXoueFswXSxSPXouelsxXS16LnpbMF0sbz16LnlbMV0tei55WzBdLGk9TWF0aC5tYXgobSxSKSoxLjA1LFgxPU1hdGgubWF4KFIqTStvKkEsbSowLjQpKjEuMTUsJDE9QiowLjA4LHM9ViowLjE4LEwxPU1hdGgubWluKChCLSQxKjIpL2ksKFYtcyoyKS9YMSkqMS40NSxkPW88MT8xOk1hdGgubWluKDI0LDE0MC9NYXRoLm1heCgyMCxvKSksYT0odSxqLGspPT57bGV0IHY9dS1iLHA9ay14LHExPXYqVCtwKkUsTjE9LXYqRStwKlQsXzE9aipkLHgxPV8xKk0tTjEqQSxUMT1fMSpBK04xKk07cmV0dXJue3N4OkIvMitxMSpMMSxzeTpWKjAuNTUteDEqTDEsZGVwdGg6VDF9fSxLMT0zOCxZMT1fLm1hcCgodSk9PntsZXQgaj1hKHUueCx1LnksdS56KSxrPWEodS54LDAsdS56KSx2PXtzeDpqLnN4LHN5Ok1hdGgubWF4KGsuc3ksai5zeStLMSksZGVwdGg6ay5kZXB0aH07cmV0dXJue3A6dSx0b3A6aixib3Q6dn19KTtmb3IobGV0IHU9MTt1PFkxLmxlbmd0aDt1Kyspe2xldCBqPVkxW3UtMV0saz1ZMVt1XSx2PUcuY3JlYXRlTGluZWFyR3JhZGllbnQoKGoudG9wLnN4K2sudG9wLnN4KS8yLChqLnRvcC5zeStrLnRvcC5zeSkvMiwoai5ib3Quc3gray5ib3Quc3gpLzIsKGouYm90LnN5K2suYm90LnN5KS8yKTt2LmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIiksdi5hZGRDb2xvclN0b3AoMC40NSwicmdiYSgxODAsMTgwLDE4NSwwLjI4KSIpLHYuYWRkQ29sb3JTdG9wKDAuODUsInJnYmEoNDAsNDAsNDUsMC4xOCkiKSx2LmFkZENvbG9yU3RvcCgxLCJyZ2JhKDAsMCwwLDApIiksRy5maWxsU3R5bGU9dixHLmJlZ2luUGF0aCgpLEcubW92ZVRvKGoudG9wLnN4LGoudG9wLnN5KSxHLmxpbmVUbyhrLnRvcC5zeCxrLnRvcC5zeSksRy5saW5lVG8oay5ib3Quc3gsay5ib3Quc3kpLEcubGluZVRvKGouYm90LnN4LGouYm90LnN5KSxHLmNsb3NlUGF0aCgpLEcuZmlsbCgpfUcuc3Ryb2tlU3R5bGU9IiNmZmZmZmYiLEcubGluZVdpZHRoPTEuNixHLmxpbmVDYXA9InJvdW5kIixHLmxpbmVKb2luPSJyb3VuZCIsRy5iZWdpblBhdGgoKTtmb3IobGV0IHU9MDt1PFkxLmxlbmd0aDt1Kyspe2xldHt0b3A6an09WTFbdV07aWYodT09PTApRy5tb3ZlVG8oai5zeCxqLnN5KTtlbHNlIEcubGluZVRvKGouc3gsai5zeSl9Ry5zdHJva2UoKTtsZXQgVjE9UTtHLnN0cm9rZVN0eWxlPSIjZjlkMmE0IixHLmxpbmVXaWR0aD0yLjIsRy5iZWdpblBhdGgoKTtsZXQgYz0hMTtmb3IobGV0IHU9MDt1PFkxLmxlbmd0aDt1Kyspe2xldHtwOmosdG9wOmt9PVkxW3VdO2lmKGouYXJjPlYxKWJyZWFrO2lmKCFjKUcubW92ZVRvKGsuc3gsay5zeSksYz0hMDtlbHNlIEcubGluZVRvKGsuc3gsay5zeSl9aWYoYylHLnN0cm9rZSgpO2xldCBRMT1xPz9PMChLLFEpLFUxPWEoUTEueCxRMS55LFExLnopO2lmKFkpe2xldCBrPVolMjYwMC8yNjAwLHY9NCsyMiprLHA9MC4yMiooMS1rKSxxMT1HLmNyZWF0ZVJhZGlhbEdyYWRpZW50KFUxLnN4LFUxLnN5LHYqMC41LFUxLnN4LFUxLnN5LHYpO3ExLmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDApIikscTEuYWRkQ29sb3JTdG9wKDAuNyxgcmdiYSgyNTUsMjU1LDI1NSwke3AudG9GaXhlZCgzKX0pYCkscTEuYWRkQ29sb3JTdG9wKDEsInJnYmEoMjU1LDI1NSwyNTUsMCkiKSxHLmZpbGxTdHlsZT1xMSxHLmJlZ2luUGF0aCgpLEcuYXJjKFUxLnN4LFUxLnN5LHYsMCxNYXRoLlBJKjIpLEcuZmlsbCgpfUcuZmlsbFN0eWxlPSIjZmZmIixHLmJlZ2luUGF0aCgpLEcuYXJjKFUxLnN4LFUxLnN5LDMuOCwwLE1hdGguUEkqMiksRy5maWxsKCl9ZnVuY3Rpb24gRTcoJCxLLFEpeyQuZmlsbFN0eWxlPSJyZ2JhKDI1NSwyNTUsMjU1LDAuMDYpIjtmb3IobGV0IFk9NztZPFE7WSs9MTQpZm9yKGxldCBxPTc7cTxLO3ErPTE0KSQuYmVnaW5QYXRoKCksJC5hcmMocSxZLDAuNywwLE1hdGguUEkqMiksJC5maWxsKCl9ZnVuY3Rpb24gdDUoJCl7aWYoJDwxMDAwKXJldHVybmAkeyQudG9GaXhlZCgwKX0gbWA7cmV0dXJuYCR7KCQvMTAwMCkudG9GaXhlZCgyKX0ga21gfWZ1bmN0aW9uIFQ5KCQpe2xldCBLPU1hdGguZmxvb3IoJC8xMDAwKSxRPU1hdGguZmxvb3IoSy8zNjAwKSxYPU1hdGguZmxvb3IoSyUzNjAwLzYwKSxaPUslNjA7aWYoUT4wKXJldHVybmAke1F9OiR7WC50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHtaLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWA7cmV0dXJuYCR7WH06JHtaLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWB9ZnVuY3Rpb24gSTcoJCl7aWYoJDw9MClyZXR1cm4i4oCUIjtpZigkPjcpcmV0dXJuYCR7KCQqMy42KS50b0ZpeGVkKDApfSBrbS9oYDtsZXQgSz0xMDAwLyQsUT1NYXRoLmZsb29yKEsvNjApLFg9TWF0aC5yb3VuZChLJTYwKTtyZXR1cm5gJHtRfToke1gudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9L2ttYH1mdW5jdGlvbiBQOSgkKXtyZXR1cm5gJHskLnRvRml4ZWQoMCl9IG1gfWZ1bmN0aW9uIHc5KCQpe2xldCBLPSQudHJpbSgpO2lmKCFLKXJldHVybiIiO2xldCBRPUsubWF0Y2goL1JlYXNvbjpccyooLispJC9tKTtpZihRKXJldHVybiBRWzFdO3JldHVybiBLLnNwbGl0KGAKYCkuc2xpY2UoLTEpWzBdPz9LfWFzeW5jIGZ1bmN0aW9uIGU1KCQsSyxRKXtsZXQgWD1hd2FpdCAkKGB4Y3J1biBzaW1jdGwgZ2V0X2FwcF9jb250YWluZXIgJHtLfSAke1oxKFEpfSBhcHBgKTtpZihYLmV4aXRDb2RlIT09MClyZXR1cm57ZXJyb3I6WC5zdGRlcnIudHJpbSgpfHwiQXBwIG5vdCBmb3VuZCBvbiBzaW11bGF0b3IifTtsZXQgWj1YLnN0ZG91dC50cmltKCk7aWYoIVopcmV0dXJue2Vycm9yOiJFbXB0eSBhcHAgcGF0aCJ9O2xldCBZPWF3YWl0ICQoYHBsdXRpbCAtY29udmVydCBqc29uIC1vIC0gJHtaMShaKyIvSW5mby5wbGlzdCIpfWApLHE9e307aWYoWS5leGl0Q29kZT09PTApdHJ5e3E9SlNPTi5wYXJzZShZLnN0ZG91dCl9Y2F0Y2h7fWxldCBHLFY9KHE/LkNGQnVuZGxlSWNvbnM/LkNGQnVuZGxlUHJpbWFyeUljb24/P3E/LlsiQ0ZCdW5kbGVJY29uc35pcGFkIl0/LkNGQnVuZGxlUHJpbWFyeUljb24pPy5DRkJ1bmRsZUljb25GaWxlcz8/cT8uQ0ZCdW5kbGVJY29uRmlsZXM7aWYoViYmVi5sZW5ndGg+MClHPVZbVi5sZW5ndGgtMV07ZWxzZSBpZih0eXBlb2YgcT8uQ0ZCdW5kbGVJY29uRmlsZT09PSJzdHJpbmciKUc9cS5DRkJ1bmRsZUljb25GaWxlO2xldCBDPW51bGw7aWYoRyl7bGV0IEw9W2Ake0d9QDN4LnBuZ2AsYCR7R31AMngucG5nYCxgJHtHfS5wbmdgLGAke0d9NjB4NjBAM3gucG5nYCxgJHtHfTYweDYwQDJ4LnBuZ2BdLE49KGF3YWl0ICQoYGJhc2ggLWMgJHtaMShMLm1hcCgoXyk9PmBbIC1mICR7WjEoWisiLyIrXyl9IF0gJiYgZWNobyAke1oxKForIi8iK18pfSAmJiBleGl0IDBgKS5qb2luKCI7ICIpKyI7IGV4aXQgMSIpfWApKS5zdGRvdXQudHJpbSgpO2lmKE4pe2xldCBfPWF3YWl0ICQoYGJhc2U2NCAtaSAke1oxKE4pfWApO2lmKF8uZXhpdENvZGU9PT0wKUM9YGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke18uc3Rkb3V0LnJlcGxhY2UoL1xzKy9nLCIiKX1gfX1yZXR1cm57YXBwUGF0aDpaLGRpc3BsYXlOYW1lOnEuQ0ZCdW5kbGVEaXNwbGF5TmFtZT8/cS5DRkJ1bmRsZU5hbWUsc2hvcnRWZXJzaW9uOnEuQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmcsYnVuZGxlVmVyc2lvbjpxLkNGQnVuZGxlVmVyc2lvbixtaW5PUzpxLk1pbmltdW1PU1ZlcnNpb24sZXhlY3V0YWJsZTpxLkNGQnVuZGxlRXhlY3V0YWJsZSxpY29uRGF0YVVybDpDfX12YXIgZjA9bmV3IE1hcDtmdW5jdGlvbiBJOSgkLEssUSl7bGV0IFg9YCR7S306JHtRfWAsWj1mMC5nZXQoWCk7aWYoWiE9PXZvaWQgMClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFopO2xldCBZPWU1KCQsSyxRKS50aGVuKChxKT0+e2xldCBHPXEuaWNvbkRhdGFVcmw/P251bGw7cmV0dXJuIGYwLnNldChYLEcpLEd9KS5jYXRjaCgoKT0+e3JldHVybiBmMC5zZXQoWCxudWxsKSxudWxsfSk7cmV0dXJuIGYwLnNldChYLFkpLFl9ZnVuY3Rpb24geTcoJCl7cmV0dXJuICQuc3RhcnRzV2l0aCgiY29tLmFwcGxlLiIpfWZ1bmN0aW9uIGI3KCQpe2lmKCQ9PT0iY29tLmFwcGxlLnNwcmluZ2JvYXJkIilyZXR1cm4iU3ByaW5nQm9hcmQiO3JldHVybiAkfWZ1bmN0aW9uIFM3KHtidW5kbGVJZDokfSl7bGV0IEs9eTcoJCk7cmV0dXJuIEooImRpdiIseyJkYXRhLXRlc3RpZCI6Sz8ic3lzdGVtLWFwcC1pY29uIjoiYXBwLWljb24tZmFsbGJhY2siLGNsYXNzTmFtZTpgdy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgYm9yZGVyIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyICR7Sz8iYm9yZGVyLVsjM2I1Zjk5XSBiZy1bbGluZWFyLWdyYWRpZW50KDE0NWRlZywjMjUzYTVmLCMxNjIxMzIpXSB0ZXh0LVsjYzhkN2ZmXSI6ImJvcmRlci13aGl0ZS8xMCBiZy13aGl0ZS9bMC4wNl0gdGV4dC13aGl0ZS84MCJ9YCwiYXJpYS1sYWJlbCI6Sz8iU3lzdGVtIGFwcCI6IkFwcCBpY29uIHVuYXZhaWxhYmxlIix0aXRsZTpLPyJTeXN0ZW0gYXBwIjoiQXBwIGljb24gdW5hdmFpbGFibGUiLGNoaWxkcmVuOks/Sigic3ZnIix7cm9sZToiaW1nIix2aWV3Qm94OiIwIDAgMjQgMjQiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2xhc3NOYW1lOiJzaXplLVsxOXB4XSIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpbSigidGl0bGUiLHtjaGlsZHJlbjoiQXBwbGUifSksSigicGF0aCIse2Q6Ik0xMi4xNTIgNi44OTZjLS45NDggMC0yLjQxNS0xLjA3OC0zLjk2LTEuMDQtMi4wNC4wMjctMy45MSAxLjE4My00Ljk2MSAzLjAxNC0yLjExNyAzLjY3NS0uNTQ2IDkuMTAzIDEuNTE5IDEyLjA5IDEuMDEzIDEuNDU0IDIuMjA4IDMuMDkgMy43OTIgMy4wMzkgMS41Mi0uMDY1IDIuMDktLjk4NyAzLjkzNS0uOTg3IDEuODMxIDAgMi4zNS45ODcgMy45Ni45NDggMS42MzctLjAyNiAyLjY3Ni0xLjQ4IDMuNjc2LTIuOTQ4IDEuMTU2LTEuNjg4IDEuNjM2LTMuMzI1IDEuNjYyLTMuNDE1LS4wMzktLjAxMy0zLjE4Mi0xLjIyMS0zLjIyLTQuODU3LS4wMjYtMy4wNCAyLjQ4LTQuNDk0IDIuNTk3LTQuNTU5LTEuNDI5LTIuMDktMy42MjMtMi4zMjQtNC4zOS0yLjM3Ni0yLS4xNTYtMy42NzUgMS4wOS00LjYxIDEuMDl6TTE1LjUzIDMuODNjLjg0My0xLjAxMiAxLjQtMi40MjcgMS4yNDUtMy44My0xLjIwNy4wNTItMi42NjIuODA1LTMuNTMyIDEuODE4LS43OC44OTYtMS40NTQgMi4zMzgtMS4yNzMgMy43MTQgMS4zMzguMTA0IDIuNzE1LS42ODggMy41NTktMS43MDEifSldfSk6SihpMCx7c2l6ZToxOSxzdHJva2VXaWR0aDoxLjl9KX0pfWZ1bmN0aW9uIFI3KHtidW5kbGVJZDokLGljb25EYXRhVXJsOkt9KXtpZihLKXJldHVybiBKKCJpbWciLHtzcmM6SyxjbGFzc05hbWU6InctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIG9iamVjdC1jb3ZlciBib3JkZXIgYm9yZGVyLXdoaXRlLzgiLGFsdDoiIn0pO3JldHVybiBKKFM3LHtidW5kbGVJZDokfSl9ZnVuY3Rpb24geTkoe3VkaWQ6JCxjdXJyZW50QXBwOkt9KXtsZXRbUSxYXT1EKG51bGwpLFtaLFldPUQoITEpO2lmKEkoKCk9PntpZighSyl7WChudWxsKTtyZXR1cm59bGV0IHE9ITE7cmV0dXJuIFgoe2J1bmRsZUlkOksuYnVuZGxlSWQsaXNSZWFjdE5hdGl2ZTpLLmlzUmVhY3ROYXRpdmUscGlkOksucGlkLGxvYWRpbmc6ITB9KSxlNShDMSwkLEsuYnVuZGxlSWQpLnRoZW4oKEcpPT57aWYocSlyZXR1cm47WCh7YnVuZGxlSWQ6Sy5idW5kbGVJZCxpc1JlYWN0TmF0aXZlOksuaXNSZWFjdE5hdGl2ZSxwaWQ6Sy5waWQsbG9hZGluZzohMSwuLi5HfSl9KSwoKT0+e3E9ITB9fSxbJCxLLEs/LmJ1bmRsZUlkLEs/LnBpZCxLPy5pc1JlYWN0TmF0aXZlXSksIVEpcmV0dXJuIEooeDcse30pO3JldHVybiBKKHQxLHtvcGVuOlosb25PcGVuQ2hhbmdlOlksc3VtbWFyeUNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1sZWZ0IixzdW1tYXJ5OkooZSx7Y2hpbGRyZW46W0ooUjcse2J1bmRsZUlkOlEuYnVuZGxlSWQsaWNvbkRhdGFVcmw6US5pY29uRGF0YVVybH0pLEoodjcse2J1bmRsZUlkOlEuYnVuZGxlSWQsZGlzcGxheU5hbWU6US5kaXNwbGF5TmFtZX0pXX0pLGNoaWxkcmVuOltRLmVycm9yJiZKKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOlEuZXJyb3J9KSxKKCJkbCIse2NsYXNzTmFtZToibS0wIGZsZXggZmxleC1jb2wgZ2FwLTEuNSIsY2hpbGRyZW46W0oocDAse2xhYmVsOiJWZXJzaW9uIix2YWx1ZTpRLnNob3J0VmVyc2lvbj9gJHtRLnNob3J0VmVyc2lvbn0gKCR7US5idW5kbGVWZXJzaW9uPz8i4oCUIn0pYDpRLmxvYWRpbmc/IuKApiI6IuKAlCJ9KSxKKHAwLHtsYWJlbDoiTWluIGlPUyIsdmFsdWU6US5taW5PUz8/KFEubG9hZGluZz8i4oCmIjoi4oCUIil9KSxKKHAwLHtsYWJlbDoiRXhlY3V0YWJsZSIsdmFsdWU6US5leGVjdXRhYmxlPz8oUS5sb2FkaW5nPyLigKYiOiLigJQiKX0pLEoocDAse2xhYmVsOiJQSUQiLHZhbHVlOlEucGlkIT1udWxsP1N0cmluZyhRLnBpZCk6IuKAlCJ9KSxRLmlzUmVhY3ROYXRpdmUmJkoocDAse2xhYmVsOiJSZWFjdCBOYXRpdmUiLHZhbHVlOiJZZXMifSksSihwMCx7bGFiZWw6IkFwcCBwYXRoIix2YWx1ZTpRLmFwcFBhdGg/PyhRLmxvYWRpbmc/IuKApiI6IuKAlCIpLG1vbm86ITAsYWN0aW9uOlEuYXBwUGF0aD97dGl0bGU6IlJldmVhbCBpbiBGaW5kZXIiLG9uQ2xpY2s6KCk9PntDMShgb3BlbiAtUiAke1oxKFEuYXBwUGF0aCl9YCl9LGljb246SihuMCx7c2l6ZToxMSxzdHJva2VXaWR0aDoyLjJ9KX06dm9pZCAwfSldfSldfSl9ZnVuY3Rpb24geDcoKXtyZXR1cm4gSigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiYXBwLWRldGVjdGlvbi1za2VsZXRvbiIsY2xhc3NOYW1lOiJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIiLCJhcmlhLWxhYmVsIjoiV2FpdGluZyBmb3IgZm9yZWdyb3VuZCBhcHAiLGNoaWxkcmVuOkooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1sZWZ0IG1pbi1oLVszNnB4XSBsZWFkaW5nLW5vbmUgcHktMi41IHB4LTEgLW15LTIgLW14LTEgdy1bY2FsYygxMDAlKzhweCldIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToidy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgYmctd2hpdGUvWzAuMDhdIn0pLEooInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTIiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJoLTMuNSB3LVs0NiVdIHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4xMl0ifSksSigic3BhbiIse2NsYXNzTmFtZToiaC0yLjUgdy1bNjglXSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMDhdIn0pXX0pLEooInNwYW4iLHtjbGFzc05hbWU6InctMi41IGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0ifSldfSl9KX1mdW5jdGlvbiB2Nyh7YnVuZGxlSWQ6JCxkaXNwbGF5TmFtZTpLfSl7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEgbGVhZGluZy10aWdodCB0ZXh0LWxlZnQiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS85MCB0cnVuY2F0ZSIsY2hpbGRyZW46Sz8/YjcoJCl9KSxKKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIHRydW5jYXRlIix0aXRsZTokLGNoaWxkcmVuOiR9KV19KX1mdW5jdGlvbiBwMCh7bGFiZWw6JCx2YWx1ZTpLLG1vbm86USxhY3Rpb246WH0pe3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6Imdyb3VwIGZsZXggaXRlbXMtYmFzZWxpbmUgZ2FwLTIgbWluLXctMCIsY2hpbGRyZW46W0ooImR0Iix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81MCB3LTIxIHNocmluay0wIixjaGlsZHJlbjokfSksSigiZGQiLHtjbGFzc05hbWU6YG0tMCB0ZXh0LXdoaXRlLzkwIGZsZXgtMSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHJlbGF0aXZlICR7UT8iZm9udC1tb25vIHRleHQtWzExcHhdIjoidGV4dC1bMTJweF0ifWAsdGl0bGU6SyxjaGlsZHJlbjpbSyxYJiZKKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIHJpZ2h0LTAgYm90dG9tLTAgcGwtNyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3JpZ2h0LHJnYmEoMjgsMjgsMzAsMClfMCUsIzFjMWMxZV81NSUpXSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTVzX2Vhc2UsdHJhbnNmb3JtXzAuMTVzX2Vhc2VdIG9wYWNpdHktMCB0cmFuc2xhdGUteC0xIHBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZ3JvdXAtaG92ZXI6dHJhbnNsYXRlLXgtMCBncm91cC1ob3Zlcjpwb2ludGVyLWV2ZW50cy1hdXRvIixjaGlsZHJlbjpKKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6WC5vbkNsaWNrLHRpdGxlOlgudGl0bGUsImFyaWEtbGFiZWwiOlgudGl0bGUsY2xhc3NOYW1lOiJ3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQgdGV4dC13aGl0ZSBjdXJzb3ItcG9pbnRlciBwLTAiLGNoaWxkcmVuOlguaWNvbn0pfSldfSldfSl9dmFyIGI5PVt7a2V5OiJjYW1lcmEiLGxhYmVsOiJDYW1lcmEifSx7a2V5OiJtaWNyb3Bob25lIixsYWJlbDoiTWljcm9waG9uZSJ9LHtrZXk6InBob3RvcyIsbGFiZWw6IlBob3RvcyJ9LHtrZXk6InBob3Rvcy1hZGQiLGxhYmVsOiJBZGQgdG8gUGhvdG9zIn0se2tleToiY29udGFjdHMiLGxhYmVsOiJDb250YWN0cyJ9LHtrZXk6ImNhbGVuZGFyIixsYWJlbDoiQ2FsZW5kYXIifSx7a2V5OiJyZW1pbmRlcnMiLGxhYmVsOiJSZW1pbmRlcnMifSx7a2V5OiJsb2NhdGlvbiIsbGFiZWw6IkxvY2F0aW9uIn0se2tleToibG9jYXRpb24tYWx3YXlzIixsYWJlbDoiTG9jYXRpb24gKEFsd2F5cykifSx7a2V5OiJub3RpZmljYXRpb25zIixsYWJlbDoiTm90aWZpY2F0aW9ucyJ9LHtrZXk6Im1vdGlvbiIsbGFiZWw6Ik1vdGlvbiJ9LHtrZXk6Im1lZGlhLWxpYnJhcnkiLGxhYmVsOiJNZWRpYSBMaWJyYXJ5In0se2tleToic2lyaSIsbGFiZWw6IlNpcmkifV07ZnVuY3Rpb24gUzkoe3VkaWQ6JCxidW5kbGVJZDpLfSl7bGV0W1EsWF09RCh7fSksW1osWV09RChudWxsKSxbcSxHXT1EKG51bGwpLFtCLFZdPUQoITEpLEM9TzEoKCk9PntsZXQgTj10eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uc2VydmVTaW1CaW47aWYoIU4pcmV0dXJuInNlcnZlLXNpbS1zamNobWllbGEiO2lmKC9cLnRzJC8udGVzdChOKSlyZXR1cm5gYnVuICR7WjEoTil9YDtpZigvXC5qcyQvLnRlc3QoTikpcmV0dXJuYG5vZGUgJHtaMShOKX1gO3JldHVybiBaMShOKX0sW10pO0koKCk9PntYKHt9KSxHKG51bGwpfSxbS10pO2xldCBMPVAoYXN5bmMoTixfKT0+e2lmKCFLKXJldHVybjtsZXQgej1gJHtOfToke199YDtZKHopLEcobnVsbCk7dHJ5e2xldCBVPWF3YWl0IEMxKGAke0N9IHBlcm1pc3Npb25zICR7X30gJHtOfSAke1oxKEspfSAtZCAke1oxKCQpfWApO2lmKFUuZXhpdENvZGUhPT0wKXtHKFUuc3RkZXJyLnRyaW0oKXx8YHNlcnZlLXNpbS1zamNobWllbGEgcGVybWlzc2lvbnMgZmFpbGVkIChleGl0ICR7VS5leGl0Q29kZX0pYCk7cmV0dXJufVgoKEEpPT4oey4uLkEsW05dOl89PT0icmVzZXQiP3ZvaWQgMDpffSkpfWZpbmFsbHl7WShudWxsKX19LFtDLCQsS10pLEY9UChhc3luYygpPT57aWYoIUspcmV0dXJuO1koIl9fYWxsX18iKSxHKG51bGwpO3RyeXtsZXQgTj1hd2FpdCBDMShgJHtDfSBwZXJtaXNzaW9ucyByZXNldCBhbGwgJHtaMShLKX0gLWQgJHtaMSgkKX1gKTtpZihOLmV4aXRDb2RlIT09MCl7RyhOLnN0ZGVyci50cmltKCl8fGBzZXJ2ZS1zaW0tc2pjaG1pZWxhIHBlcm1pc3Npb25zIGZhaWxlZCAoZXhpdCAke04uZXhpdENvZGV9KWApO3JldHVybn1YKHt9KX1maW5hbGx5e1kobnVsbCl9fSxbQywkLEtdKTtpZighSylyZXR1cm4gSihnNyx7fSk7cmV0dXJuIEoodDEse29wZW46Qixvbk9wZW5DaGFuZ2U6VixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpKKGUse2NoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJQZXJtaXNzaW9ucyJ9KSxKKCJzcGFuIix7fSldfSksY2hpbGRyZW46W3EmJkooImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCIsY2hpbGRyZW46cX0pLEooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6Im1heC1oLVsyNjBweF0gb3ZlcmZsb3cteS1hdXRvIGZsZXggZmxleC1jb2wgZ2FwLTEgcHktMiBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixjaGlsZHJlbjpiOS5tYXAoKHtrZXk6TixsYWJlbDpffSk9PntsZXQgej1RW05dO3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBweC0wLjUgcHktMSIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgZmxleC0xIG1pbi13LTAiLGNoaWxkcmVuOl99KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTAuNSBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtbWQgcC0wLjUiLHJvbGU6Imdyb3VwIiwiYXJpYS1sYWJlbCI6XyxjaGlsZHJlbjpbSigkMyx7YWN0aXZlOno9PT0iZ3JhbnQiLHBlbmRpbmc6Wj09PWAke059OmdyYW50YCxvbkNsaWNrOigpPT5MKE4sImdyYW50IiksdmFyaWFudDoiZ3JhbnQiLHRpdGxlOiJBbGxvdyIsY2hpbGRyZW46SihzMCx7c2l6ZToxMSxzdHJva2VXaWR0aDozfSl9KSxKKCQzLHthY3RpdmU6ej09PSJyZXZva2UiLHBlbmRpbmc6Wj09PWAke059OnJldm9rZWAsb25DbGljazooKT0+TChOLCJyZXZva2UiKSx2YXJpYW50OiJyZXZva2UiLHRpdGxlOiJEZW55IixjaGlsZHJlbjpKKHAxLHtzaXplOjExLHN0cm9rZVdpZHRoOjN9KX0pLEooJDMse2FjdGl2ZTohMSxwZW5kaW5nOlo9PT1gJHtOfTpyZXNldGAsb25DbGljazooKT0+TChOLCJyZXNldCIpLHZhcmlhbnQ6InJlc2V0Iix0aXRsZToiUmVzZXQiLGNoaWxkcmVuOkooQTAse3NpemU6MTEsc3Ryb2tlV2lkdGg6Mi40fSl9KV19KV19LE4pfSl9KSxKKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIGxlZnQtMCByaWdodC0wIGgtWzE0cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUgcm91bmRlZC10LVsxMHB4XSBiZy1bbGluZWFyLWdyYWRpZW50KHRvX2JvdHRvbSwjMWMxYzFlXzAlLHJnYmEoMjgsMjgsMzAsMClfMTAwJSldIn0pLEooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTRweF0gcG9pbnRlci1ldmVudHMtbm9uZSBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3RvcCwjMWMxYzFlXzAlLHJnYmEoMjgsMjgsMzAsMClfMTAwJSldIn0pXX0pLEooImRpdiIse2NsYXNzTmFtZToiZmxleCBqdXN0aWZ5LWVuZCIsY2hpbGRyZW46SigiYnV0dG9uIix7b25DbGljazpGLGRpc2FibGVkOlo9PT0iX19hbGxfXyIsY2xhc3NOYW1lOiJiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHRleHQtd2hpdGUvNzAgdGV4dC1bMTBweF0gcHgtMiBweS1bM3B4XSByb3VuZGVkLVs1cHhdIGN1cnNvci1wb2ludGVyIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNGVtXSIsdGl0bGU6InNlcnZlLXNpbS1zamNobWllbGEgcGVybWlzc2lvbnMgcmVzZXQgYWxsIixjaGlsZHJlbjpaPT09Il9fYWxsX18iPyLigKYiOiJSZXNldCBhbGwifSl9KV19KX1mdW5jdGlvbiBnNygpe3JldHVybiBKKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJhcHAtcGVybWlzc2lvbnMtbG9hZGluZyIsY2xhc3NOYW1lOiJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIiLCJhcmlhLWRpc2FibGVkIjoidHJ1ZSIsImFyaWEtYnVzeSI6InRydWUiLGNoaWxkcmVuOkooImRpdiIse2NsYXNzTmFtZToic2VsZWN0LW5vbmUgdGV4dC13aGl0ZS81NSBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSBncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCBjdXJzb3ItZGVmYXVsdCIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJQZXJtaXNzaW9ucyJ9KSxKKCJzcGFuIix7fSksSigic3BhbiIseyJkYXRhLXRlc3RpZCI6InBlcm1pc3Npb25zLWxvYWRpbmctaW5kaWNhdG9yIixyb2xlOiJzdGF0dXMiLCJhcmlhLWxhYmVsIjoiTG9hZGluZyBwZXJtaXNzaW9ucyIsY2xhc3NOYW1lOiJzaXplLTIuNSByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1bIzVmNjI2OF0gYm9yZGVyLXQtWyNmNGY0ZjVdIGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjdzX2xpbmVhcl9pbmZpbml0ZV0ifSldfSl9KX1mdW5jdGlvbiAkMyh7YWN0aXZlOiQscGVuZGluZzpLLG9uQ2xpY2s6USx2YXJpYW50OlgsdGl0bGU6WixjaGlsZHJlbjpZfSl7bGV0IHE9WD09PSJncmFudCI/IiM0YWRlODAiOlg9PT0icmV2b2tlIj8iI2Y4NzE3MSI6IiNhNWI0ZmMiO3JldHVybiBKKCJidXR0b24iLHtvbkNsaWNrOlEsZGlzYWJsZWQ6Syx0aXRsZTpaLCJhcmlhLWxhYmVsIjpaLGNsYXNzTmFtZToidy02IGgtNS41IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1ub25lIHJvdW5kZWQgcC0wIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsY29sb3JfMC4xMnNdIixzdHlsZTp7YmFja2dyb3VuZDokP2Ake3F9MjJgOiJ0cmFuc3BhcmVudCIsY29sb3I6JD9xOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIixvcGFjaXR5Oks/MC41OjF9LGNoaWxkcmVuOll9KX1mdW5jdGlvbiBRNSh7bGFiZWw6JCxjaGVja2VkOkssZGlzYWJsZWQ6UT0hMSxvbkNoYW5nZTpYfSl7cmV0dXJuIEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIscm9sZToic3dpdGNoIiwiYXJpYS1jaGVja2VkIjpLLCJhcmlhLWxhYmVsIjokLGRpc2FibGVkOlEsb25DbGljazooKT0+WCghSyksY2xhc3NOYW1lOmByZWxhdGl2ZSBoLVsxOHB4XSB3LTggc2hyaW5rLTAgcm91bmRlZC1mdWxsIGJvcmRlci1ub25lIHAtMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzXSAke1E/ImN1cnNvci1kZWZhdWx0IGJnLXdoaXRlLzIwIjpLPyJjdXJzb3ItcG9pbnRlciBiZy1bIzBhODRmZl0iOiJjdXJzb3ItcG9pbnRlciBiZy13aGl0ZS8yMCJ9YCxjaGlsZHJlbjpKKCJzcGFuIix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSB0b3AtWzJweF0gc2l6ZS1bMTRweF0gcm91bmRlZC1mdWxsIFt0cmFuc2l0aW9uOmxlZnRfMC4xNXNdICR7UT8iYmctd2hpdGUvNTAiOiJiZy13aGl0ZSJ9YCxzdHlsZTp7bGVmdDpLPzE2OjJ9fSl9KX12YXIgaDc9ImJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIixqNz0idGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBtLTAiO2Z1bmN0aW9uIHg5KHtvdmVybGF5RW5hYmxlZDokLG9uVG9nZ2xlT3ZlcmxheTpLfSl7bGV0e3NuYXBzaG90OlF9PWcwKCkse2hpZ2hsaWdodGVkS2V5Olgsc2V0SGlnaGxpZ2h0ZWRLZXk6Wn09bDIoKSxZPVE/LmVsZW1lbnRzPz9bXSxxPW0yKFEpLEc9UT8uZXJyb3JzPy5bMF0/P251bGw7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZTpgJHtoN30gcHgtMyBweS0yYCxjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOmo3LGNoaWxkcmVuOiJBWCBUcmVlIn0pLEooUTUse2xhYmVsOiJFbmFibGUgb3ZlcmxheSIsY2hlY2tlZDokLG9uQ2hhbmdlOkt9KV19KSwhJD9udWxsOnE/SihSOSx7Y2hpbGRyZW46IkFYIHVuYXZhaWxhYmxlIG9uIHRoaXMgc2ltdWxhdG9yLiJ9KTpZLmxlbmd0aD09PTA/SihSOSx7c3Bpbm5lcjohRyxjaGlsZHJlbjpHPz8iV2FpdGluZyBmb3IgYWNjZXNzaWJpbGl0eSBkYXRh4oCmIn0pOkooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSBtdC0yIHB5LTIgbWF4LWgtWzI2MHB4XSBvdmVyZmxvdy15LWF1dG8gW3Njcm9sbGJhci13aWR0aDp0aGluXSIscm9sZToibGlzdCIsY2hpbGRyZW46WS5tYXAoKEIsVik9PntsZXQgQz1fMChCKTtyZXR1cm4gSihtNyx7ZWxlbWVudDpCLGluZGV4OlYsYWN0aXZlOkM9PT1YLG9uSGlnaGxpZ2h0Olp9LEMpfSl9KV19KX1mdW5jdGlvbiBSOSh7Y2hpbGRyZW46JCxzcGlubmVyOks9ITF9KXtyZXR1cm4gSigiZGl2Iix7cm9sZToic3RhdHVzIiwiYXJpYS1saXZlIjoicG9saXRlIixjbGFzc05hbWU6Im10LTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcHktNCB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpbSz9KKCJzcGFuIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJzaXplLTMuNSBzaHJpbmstMCByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXdoaXRlLzIwIGJvcmRlci10LXdoaXRlLzYwIGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjhzX2xpbmVhcl9pbmZpbml0ZV0ifSk6bnVsbCxKKCJzcGFuIix7Y2hpbGRyZW46JH0pXX0pfXZhciBtNz1FMChmdW5jdGlvbih7ZWxlbWVudDpLLGluZGV4OlEsYWN0aXZlOlgsb25IaWdobGlnaHQ6Wn0pe2xldCBZPV8wKEspLHE9cDIoSyxRKSxHPWAke01hdGgucm91bmQoSy5mcmFtZS53aWR0aCl9eCR7TWF0aC5yb3VuZChLLmZyYW1lLmhlaWdodCl9YCxCPVtxLmxhYmVsLHEucm9sZXx8cS50eXBlfHwiZWxlbWVudCIsR10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm4gSigiZGl2Iix7cm9sZToibGlzdGl0ZW0iLHRhYkluZGV4OjAsImRhdGEtYXgta2V5IjpZLHRpdGxlOkIsb25Nb3VzZUVudGVyOigpPT5aKFkpLG9uTW91c2VMZWF2ZTooKT0+WihudWxsKSxvbkZvY3VzOigpPT5aKFkpLG9uQmx1cjooKT0+WihudWxsKSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiByb3VuZGVkLW1kIHB5LTEgcHgtMC41IG1pbi13LTAgJHtYPyJiZy13aGl0ZS9bMC4wNl0iOiIifWAsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gZm9udC1tZWRpdW0iLGNoaWxkcmVuOksubGFiZWx8fEsucm9sZXx8IlVubGFiZWxlZCJ9KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzQ1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSIsY2hpbGRyZW46Sy5yb2xlfHxLLnR5cGV8fCJlbGVtZW50In0pXX0pLEooImNvZGUiLHtjbGFzc05hbWU6InNocmluay0wIGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSBweC0xLjUgcHktWzNweF0iLGNoaWxkcmVuOkd9KV19KX0sKCQsSyk9PiQuaW5kZXg9PT1LLmluZGV4JiYkLmFjdGl2ZT09PUsuYWN0aXZlJiYkLm9uSGlnaGxpZ2h0PT09Sy5vbkhpZ2hsaWdodCYmZjIoJC5lbGVtZW50LEsuZWxlbWVudCkpO3ZhciBmNz0zMDAwLHA3PTIwOTcxNTIwMCx1Nz0iTGFyZ2UgdmlkZW8gKD4yMDAgTUIpIOKAlCBtYXkgc3R1dHRlciBvbiBzaGFyZWQgbWVtb3J5IixnOT0iSEVJQyBkZWNvZGUgZmFpbGVkIOKAlCBleHBvcnQgYXMgSlBFRyBvciBQTkcgYW5kIHJldHJ5IjtmdW5jdGlvbiBsNygkLEspe2lmKEspcmV0dXJuImFjdGl2ZSI7aWYoJD09PSJhY3RpdmUiKXJldHVybiJkaXNjb25uZWN0ZWQiO2lmKCQ9PT0iZGlzY29ubmVjdGVkIilyZXR1cm4icmVhZHkiO3JldHVybiAkfWZ1bmN0aW9uIGQ3KCQpe2lmKCEkLmluamVjdGVkKXJldHVybiJwbGF5IjtpZigkLnNvdXJjZT09PSJwbGFjZWhvbGRlciIpcmV0dXJuInBsYXkiO2lmKCQuYnVuZGxlSWQmJiEkLmZvcmVncm91bmRJc0luamVjdGVkKXJldHVybiJhdHRhY2giO3JldHVybiJzdG9wIn1mdW5jdGlvbiBjNygkKXtyZXR1cm4gJC5zcGxpdChgCmApLm1hcCgoSyk9PksudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikuZmxhdE1hcCgoSyk9PntsZXQgUT1LLmluZGV4T2YoIlx0Iik7aWYoUTw9MClyZXR1cm5bXTtsZXQgWD1LLnNsaWNlKDAsUSkudHJpbSgpLFo9Sy5zbGljZShRKzEpLnRyaW0oKTtpZighWHx8IVopcmV0dXJuW107cmV0dXJuW3tpZDpYLG5hbWU6Wn1dfSl9dmFyIG83PW5ldyBTZXQoWyJtcDQiLCJtNHYiLCJtb3YiLCJxdCIsImF2aSIsIm1rdiIsIndlYm0iLCJtcGciLCJtcGVnIiwiM2dwIiwiM2cyIiwidHMiLCJ3bXYiXSk7ZnVuY3Rpb24gaDkoJCl7aWYoJC50eXBlJiYkLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpcmV0dXJuITA7bGV0IEs9KCQubmFtZT8/IiIpLnRvTG93ZXJDYXNlKCksUT1LLmxhc3RJbmRleE9mKCIuIik7aWYoUTwwKXJldHVybiExO3JldHVybiBvNy5oYXMoSy5zbGljZShRKzEpKX1mdW5jdGlvbiBhNygkKXtyZXR1cm4gaDkoJCkmJiQuc2l6ZT5wN31mdW5jdGlvbiByNygkKXtsZXQgSz0oJC50eXBlPz8iIikudG9Mb3dlckNhc2UoKTtpZihLPT09ImltYWdlL2hlaWMifHxLPT09ImltYWdlL2hlaWYiKXJldHVybiEwO2xldCBRPSgkLm5hbWU/PyIiKS50b0xvd2VyQ2FzZSgpO3JldHVybiBRLmVuZHNXaXRoKCIuaGVpYyIpfHxRLmVuZHNXaXRoKCIuaGVpZiIpfWZ1bmN0aW9uIGk3KHtyYXdNZXNzYWdlOiQsbGFzdEZpbGVJc0hlaWM6Syxzb3VyY2U6UX0pe2lmKEsmJihRPT09ImltYWdlInx8UT09PSJ2aWRlbyIpKXJldHVybiBnOTtyZXR1cm4gJH1mdW5jdGlvbiBuNyh7c3RhdGU6JH0pe2xldCBLPSQ9PT0iYWN0aXZlIj8iQWN0aXZlIjokPT09ImRpc2Nvbm5lY3RlZCI/IkRpc2Nvbm5lY3RlZCI6IlJlYWR5IixRPSQ9PT0iYWN0aXZlIj8ic2l6ZS0xLjUgcm91bmRlZC1mdWxsIGJnLXN1Y2Nlc3MtZW1lcmFsZCBbYm94LXNoYWRvdzowXzBfNnB4X3JnYmEoNzQsMjIyLDEyOCwwLjcpXSI6JD09PSJkaXNjb25uZWN0ZWQiPyJzaXplLTEuNSByb3VuZGVkLWZ1bGwgYmctZGFuZ2VyLXNvZnQgW2JveC1zaGFkb3c6MF8wXzZweF9yZ2JhKDI0OCwxMTMsMTEzLDAuNTUpXSI6bnVsbDtyZXR1cm4gSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUiLCJkYXRhLWNhbWVyYS1waWxsLXN0YXRlIjokLGNoaWxkcmVuOltRJiZKKCJzcGFuIix7Y2xhc3NOYW1lOlF9KSxLXX0pfWZ1bmN0aW9uIHM3KCl7cmV0dXJuIEooInAiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LWNlbnRlciB0ZXh0LVsxMHB4XSBsZWFkaW5nLVsxLjVdIHRleHQtd2hpdGUvNDUiLCJkYXRhLWNhbWVyYS10ZXN0LXBhdHRlcm4taGludCI6ITAsY2hpbGRyZW46IlRlc3QtcGF0dGVybiBmZWVkIn0pfWZ1bmN0aW9uIHQ3KHttb2RlOiQsZmlsZU5hbWU6Syx3ZWJjYW1OYW1lOlEsc291cmNlS2luZDpYfSl7aWYoJD09PSJ1cGxvYWRpbmciKXJldHVybiBKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjoiVXBsb2FkaW5n4oCmIn0pO2lmKCQ9PT0iZmlsZSIpcmV0dXJuIEooZSx7Y2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToic2hyaW5rLTAgdGV4dC1bOXB4XSB0cmFja2luZy1bMC4xZW1dIHVwcGVyY2FzZSB0ZXh0LXdoaXRlLzU1IGJnLXdoaXRlL1swLjA2XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcHgtWzdweF0gcHktWzJweF0gcm91bmRlZC1mdWxsIixjaGlsZHJlbjpYPT09InZpZGVvIj8iVmlkZW8iOiJJbWFnZSJ9KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCB0cnVuY2F0ZSB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIGZvbnQtbW9ubyIsY2hpbGRyZW46Sz8/IiJ9KV19KTtpZigkPT09IndlYmNhbSIpcmV0dXJuIEooZSx7Y2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToic2hyaW5rLTAgdGV4dC1bOXB4XSB0cmFja2luZy1bMC4xZW1dIHVwcGVyY2FzZSB0ZXh0LXdoaXRlLzU1IGJnLXdoaXRlL1swLjA2XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcHgtWzdweF0gcHktWzJweF0gcm91bmRlZC1mdWxsIixjaGlsZHJlbjoiV2ViY2FtIn0pLEooInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4tdy0wIHRydW5jYXRlIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgZm9udC1tb25vIixjaGlsZHJlbjpRPz8iIn0pXX0pO3JldHVybiBKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzg1IGZvbnQtbWVkaXVtIixjaGlsZHJlbjoiU2VsZWN0IG9yIGRyb3AgbWVkaWEifSl9ZnVuY3Rpb24gdjkoe2tpbmQ6JCxtZXNzYWdlOkt9KXtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiQ9PT0id2FybmluZyI/ImJnLXdhcm5pbmcvMTAgYm9yZGVyIGJvcmRlci13YXJuaW5nLzI1IHRleHQtd2FybmluZy1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgYnJlYWstd29yZHMiOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIGJyZWFrLXdvcmRzIiwiZGF0YS1jYW1lcmEtYmFubmVyLWtpbmQiOiQscm9sZTokPT09ImVycm9yIj8iYWxlcnQiOiJzdGF0dXMiLGNoaWxkcmVuOkt9KX1mdW5jdGlvbiBqOSh7dWRpZDokLGJ1bmRsZUlkOkt9KXtsZXRbUSxYXT1EKCExKSxbWixZXT1EKCJwbGFjZWhvbGRlciIpLFtxLEddPUQoIiIpLFtCLFZdPUQobnVsbCksW0MsTF09RCghMSksRj1TKDApLFtOLF9dPUQoITEpLFt6LFVdPUQoITEpLEE9UyhudWxsKSxbTSxFXT1EKFtdKSxbVCxiXT1EKCExKSxbeCxtXT1EKCIiKSxbUixvXT1EKCJvZmYiKSxbaSxYMV09RChudWxsKSxbJDEsc109RChudWxsKSxMMT1pIT09bnVsbHx8JDEhPT1udWxsLFtkLGFdPUQobnVsbCksW0sxLFkxXT1EKG51bGwpLFssVjFdPUQobnVsbCksW2MsUTFdPUQoITEpLFtVMSx1XT1EKCJyZWFkeSIpLFtqLGtdPUQoKCk9Pm5ldyBTZXQpLFt2LHBdPUQobnVsbCksW3ExLE4xXT1EKG51bGwpLF8xPVMoITEpLHgxPVMoITEpLFQxPVMoIm9mZiIpLGgxPVMoITEpLHYxPU8xKCgpPT57bGV0IEg9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uc2VydmVTaW1CaW47aWYoIUgpcmV0dXJuInNlcnZlLXNpbS1zamNobWllbGEiO2lmKC9cLnRzJC8udGVzdChIKSlyZXR1cm5gYnVuICR7WjEoSCl9YDtpZigvXC5qcyQvLnRlc3QoSCkpcmV0dXJuYG5vZGUgJHtaMShIKX1gO3JldHVybiBaMShIKX0sW10pLGMxPVAoYXN5bmMoKT0+e2xldCBIPWF3YWl0IEMxKGAke3YxfSBjYW1lcmEgc3RhdHVzIC1kICR7JH1gKTtpZihILmV4aXRDb2RlIT09MClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIEpTT04ucGFyc2UoSC5zdGRvdXQudHJpbSgpKX1jYXRjaHtyZXR1cm4gbnVsbH19LFt2MSwkXSksSTE9Uyhhc3luYygpPT57fSksbzE9UyhLKTtJKCgpPT57bzEuY3VycmVudD1LfSxbS10pLEkoKCk9PntsZXQgSD0hMTtyZXR1cm4oYXN5bmMoKT0+e2xldCBnPWF3YWl0IGMxKCk7aWYoSHx8IWd8fCFnLmFsaXZlKXJldHVybjt4MS5jdXJyZW50PSEwO2xldCBoPWcuc291cmNlO2lmKGg9PT0icGxhY2Vob2xkZXIifHxoPT09IndlYmNhbSJ8fGg9PT0iaW1hZ2UifHxoPT09InZpZGVvIilZKGgpO2lmKChoPT09ImltYWdlInx8aD09PSJ2aWRlbyIpJiZnLmFyZylHKGcuYXJnKSxWKGcuYXJnLnNwbGl0KCIvIikucG9wKCk/P251bGwpO2lmKGg9PT0id2ViY2FtIiYmZy5hcmcpbShnLmFyZyksSTEuY3VycmVudCgpO2xldCBuPWcubWlycm9yPT09Im9uIj8ib24iOiJvZmYiO28obiksVDEuY3VycmVudD1uLHAoZy5oZWxwZXJQaWQ/P251bGwpLFExKCEwKTtsZXQgSjE9QXJyYXkuaXNBcnJheShnLmJ1bmRsZUlkcyk/Zy5idW5kbGVJZHM6W107aWYoSjEubGVuZ3RoPjApayhuZXcgU2V0KEoxKSk7bGV0IEIxPW8xLmN1cnJlbnQsdzE9aCYmaCE9PSJwbGFjZWhvbGRlciI7dShCMSYmSjEuaW5jbHVkZXMoQjEpJiZ3MT8iYWN0aXZlIjoicmVhZHkiKSxWMShgUmVhdHRhY2hlZCDihpIgJHtoPz8icnVubmluZyBoZWxwZXIifSR7Zy5hcmc/YCAoJHtnLmFyZ30pYDoiIn1gKX0pKCksKCk9PntIPSEwfX0sWyQsYzFdKSxJKCgpPT57bGV0IEg9ITEsZz0hMSxoPW51bGwsbj1hc3luYygpPT57aWYoSHx8ZylyZXR1cm47aWYodHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpcmV0dXJuO2c9ITA7dHJ5e2xldCBCMT1hd2FpdCBjMSgpO2lmKEgpcmV0dXJuO2xldCB3MT0hIUIxPy5hbGl2ZSxXPUFycmF5LmlzQXJyYXkoQjE/LmJ1bmRsZUlkcyk/QjEuYnVuZGxlSWRzOm51bGwsTz0hIUsmJihXP1cuaW5jbHVkZXMoSyk6ai5oYXMoSykpLHk9QjE/LnNvdXJjZT8/bnVsbCxyPWMmJncxJiZPJiYhISh5JiZ5IT09InBsYWNlaG9sZGVyIikmJih2PT1udWxsfHxCMT8uaGVscGVyUGlkPT09dik7aWYodSgodCk9Pmw3KHQscikpLCF3MSlRMSgodCk9PntpZighdClyZXR1cm4gdDtyZXR1cm4gayhuZXcgU2V0KSxwKG51bGwpLFQxLmN1cnJlbnQ9Im9mZiIsITF9KTtlbHNlIGlmKGMmJnYhPW51bGwmJkIxPy5oZWxwZXJQaWQhPT12KVExKCExKSxrKG5ldyBTZXQpLHAobnVsbCksVDEuY3VycmVudD0ib2ZmIjtlbHNlIGlmKHcxJiZBcnJheS5pc0FycmF5KEIxPy5idW5kbGVJZHMpKXtsZXQgdD1CMS5idW5kbGVJZHM7aygoejEpPT57aWYoejEuc2l6ZT09PXQubGVuZ3RoJiZ0LmV2ZXJ5KChEMSk9PnoxLmhhcyhEMSkpKXJldHVybiB6MTtyZXR1cm4gbmV3IFNldCh0KX0pfX1maW5hbGx5e2c9ITF9fTtoPXNldEludGVydmFsKCgpPT57bigpfSxmNyk7bGV0IEoxPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09InZpc2libGUiKW4oKX07aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixKMSk7cmV0dXJuKCk9PntpZihIPSEwLGgpY2xlYXJJbnRlcnZhbChoKTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEoxKX19LFtjMSxjLHYsSyxqXSk7bGV0IGExPVAoYXN5bmMoKT0+e2IoITApLGEobnVsbCk7dHJ5e2xldCBIPWF3YWl0IEMxKGAke3YxfSBjYW1lcmEgLS1saXN0LXdlYmNhbXNgKTtpZihILmV4aXRDb2RlIT09MCl7YShILnN0ZGVyci50cmltKCl8fGAtLWxpc3Qtd2ViY2FtcyBmYWlsZWQgKCR7SC5leGl0Q29kZX0pYCk7cmV0dXJufWxldCBnPWM3KEguc3Rkb3V0KTtpZihFKGcpLGcubGVuZ3RoPjAmJiF4KW0oZ1swXS5pZCl9ZmluYWxseXtiKCExKX19LFt4LHYxXSk7SSgoKT0+e0kxLmN1cnJlbnQ9YTF9LFthMV0pLEkoKCk9PntpZih6JiZNLmxlbmd0aD09PTAmJiFUKWExKCl9LFt6LE0ubGVuZ3RoLFQsYTFdKTtsZXQgeTE9UCgoSCk9PnthKGk3KHtyYXdNZXNzYWdlOkgsbGFzdEZpbGVJc0hlaWM6XzEuY3VycmVudCxzb3VyY2U6Wn0pKX0sW1pdKSxZMD1QKGFzeW5jKEgsZyxoKT0+e2xldCBuPUg9PT0iaW1hZ2UifHxIPT09InZpZGVvIixKMT1bImNhbWVyYSIsInN3aXRjaCIsbj8iZmlsZSI6SF07aWYoSD09PSJ3ZWJjYW0iJiZnKUoxLnB1c2goWjEoZykpO2lmKG4pe2lmKCFoLnRyaW0oKSlyZXR1cm4gYSgiRHJvcCBhIGZpbGUgaW50byB0aGUgcGFuZWwgb3IgcGljayBhbm90aGVyIHNvdXJjZS4iKSwhMTtKMS5wdXNoKFoxKGgudHJpbSgpKSl9SjEucHVzaCgiLWQiLCQsIi0tcXVpZXQiKTtsZXQgQjE9YXdhaXQgQzEoYCR7djF9ICR7SjEuam9pbigiICIpfWApO2lmKEIxLmV4aXRDb2RlIT09MClyZXR1cm4geTEoQjEuc3RkZXJyLnRyaW0oKXx8QjEuc3Rkb3V0LnRyaW0oKXx8YHN3aXRjaCBmYWlsZWQgKCR7QjEuZXhpdENvZGV9KWApLCExO18xLmN1cnJlbnQ9ITE7dHJ5e2xldCB3MT1KU09OLnBhcnNlKEIxLnN0ZG91dC50cmltKCkpO1YxKGBTd2l0Y2hlZCDihpIgJHt3MS5zb3VyY2U/P0h9JHt3MS5hcmc/YCAoJHt3MS5hcmd9KWA6IiJ9YCl9Y2F0Y2h7VjEoYFN3aXRjaGVkIOKGkiAke0h9YCl9cmV0dXJuITB9LFskLHYxLHkxXSksZTE9UChhc3luYygpPT57aWYoIUspcmV0dXJuO1gxKCJpbmplY3QiKSxhKG51bGwpLFYxKG51bGwpO3RyeXtsZXQgSD1bImNhbWVyYSIsWjEoSyksIi1kIiwkLCItLXF1aWV0Il07aWYoWj09PSJpbWFnZSJ8fFo9PT0idmlkZW8iKXtpZighcS50cmltKCkpe2EoIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIik7cmV0dXJufUgucHVzaCgiLS1maWxlIixaMShxLnRyaW0oKSkpfWVsc2UgaWYoWj09PSJ3ZWJjYW0iKWlmKHgpSC5wdXNoKCItLXdlYmNhbSIsWjEoeCkpO2Vsc2UgSC5wdXNoKCItLXdlYmNhbSIpO0gucHVzaCgiLS1taXJyb3IiLFIpO2xldCBnPWF3YWl0IEMxKGAke3YxfSAke0guam9pbigiICIpfWApO2lmKGcuZXhpdENvZGUhPT0wKXt5MShnLnN0ZGVyci50cmltKCl8fGcuc3Rkb3V0LnRyaW0oKXx8YGluamVjdCBmYWlsZWQgKCR7Zy5leGl0Q29kZX0pYCk7cmV0dXJufV8xLmN1cnJlbnQ9ITE7bGV0IGg9bnVsbDt0cnl7bGV0IG49SlNPTi5wYXJzZShnLnN0ZG91dC50cmltKCkpO2g9bi5oZWxwZXJQaWQ/P251bGw7bGV0IEoxPW4uaGVscGVyUmVsYXVuY2hlZD09PSExPyJBdHRhY2hlZCI6IkluamVjdGVkIixCMT1uLnBpZD9gIHBpZCAke24ucGlkfWA6IiIsdzE9bi5oZWxwZXJQaWQ/YCwgaGVscGVyIHBpZCAke24uaGVscGVyUGlkfWA6IiI7VjEoYCR7SjF9ICR7bi5zb3VyY2U/P1p9IGludG8gJHtLfSR7QjF9JHt3MX1gKX1jYXRjaHtWMShnLnN0ZG91dC50cmltKCl8fCJJbmplY3RlZC4iKX1RMSghMCksdShaPT09InBsYWNlaG9sZGVyIj8icmVhZHkiOiJhY3RpdmUiKSxwKGgpLGsoKG4pPT5uLmhhcyhLKT9uOm5ldyBTZXQobikuYWRkKEspKSxUMS5jdXJyZW50PVJ9ZmluYWxseXtYMShudWxsKX19LFtLLCQsWixxLHgsUix2MSx5MV0pLGoxPWM/YCR7Wn06OiR7Wj09PSJ3ZWJjYW0iP3g6IiJ9Ojoke1o9PT0iaW1hZ2UifHxaPT09InZpZGVvIj9xOiIifWA6bnVsbCwkMD0hIUsmJmouaGFzKEspLEswPSQwJiZaIT09InBsYWNlaG9sZGVyIjtJKCgpPT57aWYoIUswKXtoMS5jdXJyZW50PSExO3JldHVybn1pZihoMS5jdXJyZW50KXJldHVybjtoMS5jdXJyZW50PSEwLFgoITApfSxbSzBdKSxJKCgpPT57aWYoIXExKXJldHVybjtpZighS3x8TDF8fE4pcmV0dXJuO2lmKFohPT0id2ViY2FtInx8eCE9PXExKXJldHVybjtpZihOMShudWxsKSxjKXJldHVybjtlMSgpfSxbcTEsSyxMMSxOLFoseCxjLGUxXSksSSgoKT0+e2lmKCFjKXJldHVybjtpZigoWj09PSJpbWFnZSJ8fFo9PT0idmlkZW8iKSYmIXEudHJpbSgpKXJldHVybjtpZihaPT09IndlYmNhbSImJiF4KXJldHVybjtpZih4MS5jdXJyZW50KXt4MS5jdXJyZW50PSExO3JldHVybn1sZXQgSD0hMTtyZXR1cm4oYXN5bmMoKT0+e3MoInN3aXRjaCIpLGEobnVsbCk7dHJ5e2lmKEgpcmV0dXJuO2F3YWl0IFkwKFoseCxxKX1maW5hbGx5e2lmKCFIKXMobnVsbCl9fSkoKSwoKT0+e0g9ITB9fSxbajFdKSxJKCgpPT57aWYoIWMpcmV0dXJuO2lmKFQxLmN1cnJlbnQ9PT1SKXJldHVybjtsZXQgSD1SLGc9ITE7cmV0dXJuKGFzeW5jKCk9PntzKCJtaXJyb3IiKSxhKG51bGwpO3RyeXtsZXQgaD1hd2FpdCBDMShgJHt2MX0gY2FtZXJhIG1pcnJvciAke0h9IC1kICR7JH0gLS1xdWlldGApO2lmKGcpcmV0dXJuO2lmKGguZXhpdENvZGUhPT0wKXthKGguc3RkZXJyLnRyaW0oKXx8aC5zdGRvdXQudHJpbSgpfHxgbWlycm9yIGZhaWxlZCAoJHtoLmV4aXRDb2RlfSlgKTtyZXR1cm59VDEuY3VycmVudD1ILFYxKGBNaXJyb3Ig4oaSICR7SH1gKX1maW5hbGx5e2lmKCFnKXMobnVsbCl9fSkoKSwoKT0+e2c9ITB9fSxbUixjXSk7bGV0IE0xPVAoYXN5bmMoKT0+e1gxKCJzdG9wIiksYShudWxsKTt0cnl7bGV0IEg9YXdhaXQgQzEoYCR7djF9IGNhbWVyYSAtLXN0b3Atd2ViY2FtIC1kICR7JH1gKTtpZihILmV4aXRDb2RlIT09MCl7YShILnN0ZGVyci50cmltKCl8fGBzdG9wLXdlYmNhbSBmYWlsZWQgKCR7SC5leGl0Q29kZX0pYCk7cmV0dXJufVYxKCJDYW1lcmEgaGVscGVyIHN0b3BwZWQuIiksUTEoITEpLHUoInJlYWR5IiksayhuZXcgU2V0KSxUMS5jdXJyZW50PSJvZmYifWZpbmFsbHl7WDEobnVsbCl9fSxbJCx2MV0pLGIxPVAoYXN5bmMoSCk9PntsZXQgZz1yNyh7dHlwZTpILnR5cGUsbmFtZTpILm5hbWV9KSxoPUgudHlwZS5zdGFydHNXaXRoKCJpbWFnZS8iKXx8ZyxuPUgudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKXx8aDkoe3R5cGU6SC50eXBlLG5hbWU6SC5uYW1lfSk7aWYoIWgmJiFuKXtfMS5jdXJyZW50PSExLGEoYFVuc3VwcG9ydGVkIGZpbGUgdHlwZTogJHtILnR5cGV8fEgubmFtZX1gKTtyZXR1cm59aWYoXyghMCksYShudWxsKSxZMShudWxsKSxhNyh7dHlwZTpILnR5cGUsbmFtZTpILm5hbWUsc2l6ZTpILnNpemV9KSlZMSh1Nyk7XzEuY3VycmVudD1nO3RyeXtsZXQgSjE9bTAoSCksQjE9YXdhaXQgRjkoSCwic2VydmUtc2ltLWNhbXNyYyIsSjEsQzEpO1YoSC5uYW1lKSxZKG4/InZpZGVvIjoiaW1hZ2UiKSxHKEIxKSxWMShgTG9hZGVkICR7SC5uYW1lfWApfWNhdGNoKEoxKXtpZihfMS5jdXJyZW50KWEoZzkpO2Vsc2UgYShKMT8ubWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQiKX1maW5hbGx5e18oITEpfX0sW10pLHEwPVAoYXN5bmMoSCk9PntILnByZXZlbnREZWZhdWx0KCksSC5zdG9wUHJvcGFnYXRpb24oKSxGLmN1cnJlbnQ9MCxMKCExKTtsZXQgZz1ILmRhdGFUcmFuc2Zlcj8uZmlsZXM/LlswXTtpZihnKWF3YWl0IGIxKGcpfSxbYjFdKSxVMD1QKCgpPT57WSgicGxhY2Vob2xkZXIiKSxHKCIiKSxWKG51bGwpLGEobnVsbCksWTEobnVsbCksXzEuY3VycmVudD0hMX0sW10pLHUxPVAoKCk9PntBLmN1cnJlbnQ/LmNsaWNrKCl9LFtdKSxHMD1QKGFzeW5jKEgpPT57bGV0IGc9SC50YXJnZXQsaD1nLmZpbGVzPy5bMF07aWYoZy52YWx1ZT0iIixoKWF3YWl0IGIxKGgpfSxbYjFdKTtJKCgpPT57aWYoIXopcmV0dXJuO2xldCBIPShnKT0+e2xldCBoPWcudGFyZ2V0O2lmKGggaW5zdGFuY2VvZiBFbGVtZW50JiZoLmNsb3Nlc3QoIltkYXRhLWNhbWVyYS1zb3VyY2UtbWVudV0iKSlyZXR1cm47VSghMSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixIKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsSCl9LFt6XSk7bGV0IHowPVAoKEgpPT57aWYobShILmlkKSxZKCJ3ZWJjYW0iKSxWKG51bGwpLGEobnVsbCksXzEuY3VycmVudD0hMSxVKCExKSxLKU4xKEguaWQpfSxbS10pLFYwPVAoKCk9PntvKChIKT0+SD09PSJvbiI/Im9mZiI6Im9uIil9LFtdKSxQMT0hY3x8Wj09PSJwbGFjZWhvbGRlciIsazE9UCgoSCk9PntpZihILnByZXZlbnREZWZhdWx0KCksRi5jdXJyZW50KyssRi5jdXJyZW50PT09MSlMKCEwKX0sW10pLFEwPVAoKEgpPT57aWYoSC5wcmV2ZW50RGVmYXVsdCgpLEguZGF0YVRyYW5zZmVyKUguZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbXSksRjE9UCgoSCk9PntpZihILnByZXZlbnREZWZhdWx0KCksRi5jdXJyZW50LS0sRi5jdXJyZW50PD0wKUYuY3VycmVudD0wLEwoITEpfSxbXSksbDE9ZDcoe2J1bmRsZUlkOkssaW5qZWN0ZWQ6Yyxzb3VyY2U6Wixmb3JlZ3JvdW5kSXNJbmplY3RlZDokMH0pLG0xPWwxPT09InN0b3AiP3tsYWJlbDppPT09InN0b3AiPyJTdG9wcGluZ+KApiI6IlN0b3AiLG9uQ2xpY2s6TTEsa2luZDoic3RvcCJ9OmwxPT09ImF0dGFjaCI/e2xhYmVsOmk9PT0iaW5qZWN0Ij8iSW5qZWN0aW5n4oCmIjpgSW5qZWN0ICR7S31gLG9uQ2xpY2s6ZTEsa2luZDoiYXR0YWNoIn06e2xhYmVsOmk9PT0iaW5qZWN0Ij8iU3RhcnRpbmfigKYiOiJQbGF5IixvbkNsaWNrOmUxLGtpbmQ6InBsYXkifSxNMD1sMT09PSJzdG9wIj9OfHxpIT09bnVsbDohS3x8Tnx8aSE9PW51bGwsZjE9Wj09PSJwbGFjZWhvbGRlciIsRjA9Wj09PSJ3ZWJjYW0iLEowPShaPT09ImltYWdlInx8Wj09PSJ2aWRlbyIpJiYhIUIsVzA9RjA/TS5maW5kKChIKT0+SC5pZD09PXgpPy5uYW1lPz94Pz8iV2ViY2FtIjpudWxsLHc9Tj8idXBsb2FkaW5nIjpKMD8iZmlsZSI6RjA/IndlYmNhbSI6InBsYWNlaG9sZGVyIjtyZXR1cm4gSih0MSx7b3BlbjpRLG9uT3BlbkNoYW5nZTpYLGJvZHlDbGFzc05hbWU6InB0LTIuNSIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6SihlLHtjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiQ2FtZXJhIn0pLEoobjcse3N0YXRlOlUxfSldfSksY2hpbGRyZW46SigiZGl2Iix7b25EcmFnRW50ZXI6azEsb25EcmFnT3ZlcjpRMCxvbkRyYWdMZWF2ZTpGMSxvbkRyb3A6cTAsY2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0yLjUiLGNoaWxkcmVuOltKKCJwIix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1bMTBweF0gbGVhZGluZy1bMS41XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjoiUmVwbGFjZXMgdGhlIHNpbXVsYXRvcidzIGNhbWVyYSBmZWVkIGJ5IGluamVjdGluZyBhIGR5bGliIGF0IGFwcCBsYXVuY2ggYW5kIHN0cmVhbWluZyBmcmFtZXMgaW50byBzaGFyZWQgbWVtb3J5LiBQaWNrIG1lZGlhIG9yIGEgd2ViY2FtLCB0aGVuIFBsYXkgdG8gaW5qZWN0IGludG8gdGhlIGZvcmVncm91bmQgYXBwLiJ9KSxKKCJpbnB1dCIse3JlZjpBLHR5cGU6ImZpbGUiLGFjY2VwdDoiaW1hZ2UvKix2aWRlby8qIixjbGFzc05hbWU6ImhpZGRlbiIsb25DaGFuZ2U6RzB9KSxKKCJkaXYiLHtvbkNsaWNrOihIKT0+e2lmKCFmMSlyZXR1cm47aWYoSC50YXJnZXQuY2xvc2VzdCgiW2RhdGEtY2xlYXItbWVkaWFdIikpcmV0dXJuO3UxKCl9LHRpdGxlOmYxPyJObyBzb3VyY2Ugc2VsZWN0ZWQg4oCUIFBsYXkgdXNlcyBhIHRlc3QtcGF0dGVybiBmZWVkLiBDbGljayB0byBwaWNrIGFuIGltYWdlL3ZpZGVvLCBvciBkcm9wIG9uZSBoZXJlLiI6RjA/YFNvdXJjZTogJHtXMH1gOmBTb3VyY2U6ICR7Qj8/Wn1gLGNsYXNzTmFtZTpbInJlbGF0aXZlIG1pbi1oLVs0NHB4XSBmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMi41IHB4LTMuNSBweS0yLjUgcm91bmRlZC1bN3B4XSB0ZXh0LWNlbnRlciB0cmFuc2l0aW9uLVtib3JkZXItY29sb3IsYmFja2dyb3VuZF0gZHVyYXRpb24tMTUwIixmMT8iYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItZGFzaGVkIGJvcmRlci13aGl0ZS8xMiI6ImJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzgiLEM/IiFiZy1bcmdiYSgxMCwxMzIsMjU1LDAuMDgpXSAhYm9yZGVyLVtyZ2JhKDEwLDEzMiwyNTUsMC42KV0iOiIiLE4/ImN1cnNvci1wcm9ncmVzcyI6ZjE/ImN1cnNvci1wb2ludGVyIjoiY3Vyc29yLWRlZmF1bHQiXS5qb2luKCIgIiksY2hpbGRyZW46W0oodDcse21vZGU6dyxmaWxlTmFtZTpCLHdlYmNhbU5hbWU6VzAsc291cmNlS2luZDpafSksIWYxJiYhTiYmSigiYnV0dG9uIix7ImRhdGEtY2xlYXItbWVkaWEiOiEwLG9uQ2xpY2s6KEgpPT57SC5zdG9wUHJvcGFnYXRpb24oKSxVMCgpfSxjbGFzc05hbWU6InNocmluay0wIHctNSBoLTUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC13aGl0ZS81NSBob3Zlcjp0ZXh0LXdoaXRlLzkwIGN1cnNvci1wb2ludGVyIHAtMCIsImFyaWEtbGFiZWwiOiJDbGVhciBzb3VyY2UiLHRpdGxlOiJDbGVhciDihpIgcGxhY2Vob2xkZXIiLGNoaWxkcmVuOkoocDEse3NpemU6MTQsc3Ryb2tlV2lkdGg6Mn0pfSldfSksZjEmJiFOJiZKKHM3LHt9KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtc3RyZXRjaCBnYXAtMS41IixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSIsImRhdGEtY2FtZXJhLXNvdXJjZS1tZW51IjohMCxjaGlsZHJlbjpbSigiYnV0dG9uIix7b25DbGljazooKT0+VSgoSCk9PiFIKSxjbGFzc05hbWU6ImgtZnVsbCBtaW4taC1bMzZweF0gdy0xMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHRleHQtd2hpdGUvODUgcm91bmRlZC1bN3B4XSBjdXJzb3ItcG9pbnRlciBwLTAgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIGhvdmVyOmJvcmRlci13aGl0ZS8yMCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1oYXNwb3B1cCI6Im1lbnUiLCJhcmlhLWV4cGFuZGVkIjp6LHRpdGxlOlo9PT0id2ViY2FtIj9gU291cmNlOiB3ZWJjYW0ke3g/YCAoJHtNLmZpbmQoKEgpPT5ILmlkPT09eCk/Lm5hbWU/P3h9KWA6IiJ9IOKAlCBjbGljayB0byBjaGFuZ2VgOmBTb3VyY2U6ICR7Wn0g4oCUIGNsaWNrIHRvIHBpY2sgbWVkaWEgb3Igd2ViY2FtYCwiYXJpYS1sYWJlbCI6IkNob29zZSBjYW1lcmEgc291cmNlIixjaGlsZHJlbjpKKEoyLHtzaXplOjIwLHN0cm9rZVdpZHRoOjJ9KX0pLHomJkooImRpdiIse3JvbGU6Im1lbnUiLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNnB4KV0gbGVmdC0wIHotMTAgbWluLXctWzIwMHB4XSBmbGV4IGZsZXgtY29sIGdhcC1weCBwLTEgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC40KV0iLGNoaWxkcmVuOltKKCJidXR0b24iLHtyb2xlOiJtZW51aXRlbSIsY2xhc3NOYW1lOiJ0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMnB4XSBweC0yLjUgcHktWzdweF0gcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy13aGl0ZS9bMC4wNl0iLG9uQ2xpY2s6KCk9PntVKCExKSx1MSgpfSx0aXRsZToiUGljayBhbiBpbWFnZSBvciB2aWRlbyBmcm9tIGRpc2siLGNoaWxkcmVuOiJCcm93c2UgbWVkaWHigKYifSksSigiZGl2Iix7Y2xhc3NOYW1lOiJoLXB4IGJnLXdoaXRlLzggbXktMSJ9KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBwbC0yLjUgcHItMiBwdC0xIHBiLVsycHhdIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0iLGNoaWxkcmVuOlQ/IkNhbWVyYXMgKGxvYWRpbmfigKYpIjpNLmxlbmd0aD09PTA/Ik5vIGNhbWVyYXMiOiJDYW1lcmFzIn0pLEooImJ1dHRvbiIse29uQ2xpY2s6KEgpPT57SC5zdG9wUHJvcGFnYXRpb24oKSxhMSgpfSxkaXNhYmxlZDpULGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy1bMjJweF0gaC1bMjJweF0gYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1bNXB4XSB0ZXh0LXdoaXRlLzU1IGhvdmVyOnRleHQtd2hpdGUvOTAgY3Vyc29yLXBvaW50ZXIgcC0wIGRpc2FibGVkOm9wYWNpdHktNTAiLCJhcmlhLWxhYmVsIjoiUmVmcmVzaCBjYW1lcmFzIix0aXRsZToiUmVmcmVzaCBjYW1lcmFzIixjaGlsZHJlbjpKKEEwLHtzaXplOjEzLHN0cm9rZVdpZHRoOjJ9KX0pXX0pLE0ubWFwKChIKT0+e2xldCBnPVo9PT0id2ViY2FtIiYmeD09PUguaWQ7cmV0dXJuIEooImJ1dHRvbiIse3JvbGU6Im1lbnVpdGVtIixjbGFzc05hbWU6WyJ0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC1bMTJweF0gcHgtMi41IHB5LVs3cHhdIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIixnPyIhYmctd2hpdGUvWzAuMTJdICF0ZXh0LXdoaXRlIjoidGV4dC13aGl0ZS84NSJdLmpvaW4oIiAiKSxvbkNsaWNrOigpPT56MChIKSx0aXRsZTpILm5hbWUsY2hpbGRyZW46SC5uYW1lfSxILmlkKX0pXX0pXX0pLEooImJ1dHRvbiIse29uQ2xpY2s6bTEub25DbGljayxkaXNhYmxlZDpNMCxjbGFzc05hbWU6WyJmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTIuNSBib3JkZXItbm9uZSByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgY3Vyc29yLXBvaW50ZXIgZGlzYWJsZWQ6b3BhY2l0eS01MCBtaW4taC1bMzZweF0iLG0xLmtpbmQ9PT0ic3RvcCI/ImJnLXdoaXRlL1swLjE2XSB0ZXh0LXdoaXRlIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMjJdIjoiYmctc3VjY2Vzcy1lbWVyYWxkIHRleHQtWyMwNjIwMThdIGVuYWJsZWQ6aG92ZXI6YnJpZ2h0bmVzcy1bMS4wOF0iXS5qb2luKCIgIiksdGl0bGU6bTEua2luZD09PSJzdG9wIj8iU3RvcCB0aGUgY2FtZXJhIGhlbHBlciBhbmQgdGVybWluYXRlIGluamVjdGVkIGFwcHMiOm0xLmtpbmQ9PT0iYXR0YWNoIj9gSW5qZWN0ICR7S30gc28gaXQgam9pbnMgdGhlIGNhbWVyYSBmZWVkYDohSz8iQnJpbmcgYW4gYXBwIHRvIHRoZSBmb3JlZ3JvdW5kIGZpcnN0IjoiU3RhcnQ6IGluamVjdCB0aGUgZHlsaWIgYW5kIGxhdW5jaCB0aGUgZm9yZWdyb3VuZCBhcHAgd2l0aCB0aGUgY2hvc2VuIHNvdXJjZSIsImFyaWEtcHJlc3NlZCI6bTEua2luZD09PSJzdG9wIiwiYXJpYS1sYWJlbCI6bTEua2luZD09PSJzdG9wIj8iU3RvcCI6IlBsYXkiLGNoaWxkcmVuOlttMS5raW5kPT09InN0b3AiP0ooQjIse30pOkooVjIse30pLEooInNwYW4iLHtjaGlsZHJlbjptMS5raW5kPT09InN0b3AiPyJTdG9wIjptMS5raW5kPT09ImF0dGFjaCI/IkluamVjdCI6IlBsYXkifSldfSksSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOlYwLGRpc2FibGVkOlAxLGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy0xMCBtaW4taC1bMzZweF0gYm9yZGVyIHJvdW5kZWQtWzdweF0gZm9udC1baW5oZXJpdF0gZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgYWN0aXZlOnNjYWxlLVswLjk3XSAke1I9PT0ib24iPyJiZy13aGl0ZSBib3JkZXItd2hpdGUgdGV4dC1bIzBhMGEwY10gY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC44OF0gZW5hYmxlZDpob3Zlcjpib3JkZXItd2hpdGUvWzAuODhdIGVuYWJsZWQ6aG92ZXI6dGV4dC1bIzBhMGEwY10iOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjA5XSBlbmFibGVkOmhvdmVyOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjE4KV0gZW5hYmxlZDpob3Zlcjp0ZXh0LXdoaXRlIn1gLCJhcmlhLWxhYmVsIjpgTWlycm9yOiAke1J9IOKAlCB0YXAgdG8gdG9nZ2xlYCx0aXRsZTpQMT8iTWlycm9yIHRvZ2dsZSBhdmFpbGFibGUgb25jZSBhIHNvdXJjZSBpcyBzdHJlYW1pbmciOmBNaXJyb3I6ICR7Un0g4oCUIGNsaWNrIHRvIHRvZ2dsZWAsImFyaWEtcHJlc3NlZCI6Uj09PSJvbiIsY2hpbGRyZW46SihLMix7c2l6ZToyMCxzdHJva2VXaWR0aDoyLGZpbGw6Uj09PSJvbiI/ImN1cnJlbnRDb2xvciI6Im5vbmUifSl9KV19KSxLMSYmSih2OSx7a2luZDoid2FybmluZyIsbWVzc2FnZTpLMX0pLGQmJkoodjkse2tpbmQ6ImVycm9yIixtZXNzYWdlOmR9KV19KX0pfXZhciB6Mj1bImV4dHJhLXNtYWxsIiwic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsImV4dHJhLWxhcmdlIiwiZXh0cmEtZXh0cmEtbGFyZ2UiLCJleHRyYS1leHRyYS1leHRyYS1sYXJnZSJdLGU3PTI1MCwkJD17YXBwZWFyYW5jZToibGlnaHQiLCJsaXF1aWQtZ2xhc3MiOiJjbGVhciIsImNvbG9yLWZpbHRlciI6Im5vbmUiLCJ0ZXh0LXNpemUiOiJsYXJnZSIsInJlZHVjZS1tb3Rpb24iOiJvZmYiLCJpbmNyZWFzZS1jb250cmFzdCI6Im9mZiIsInNob3ctYm9yZGVycyI6Im9mZiIsInJlZHVjZS10cmFuc3BhcmVuY3kiOiJvZmYiLHZvaWNlb3Zlcjoib2ZmIn0sSzM9e2FwcGVhcmFuY2U6W3t2YWx1ZToibGlnaHQiLGxhYmVsOiJMaWdodCJ9LHt2YWx1ZToiZGFyayIsbGFiZWw6IkRhcmsifV0sImxpcXVpZC1nbGFzcyI6W3t2YWx1ZToiY2xlYXIiLGxhYmVsOiJDbGVhciJ9LHt2YWx1ZToidGludGVkIixsYWJlbDoiVGludGVkIn1dLCJjb2xvci1maWx0ZXIiOlt7dmFsdWU6Im5vbmUiLGxhYmVsOiJOb25lIn0se3ZhbHVlOiJyZWQtZ3JlZW4iLGxhYmVsOiJSZWQvR3JlZW4gKFByb3Rhbm9waWEpIn0se3ZhbHVlOiJncmVlbi1yZWQiLGxhYmVsOiJHcmVlbi9SZWQgKERldXRlcmFub3BpYSkifSx7dmFsdWU6ImJsdWUteWVsbG93IixsYWJlbDoiQmx1ZS9ZZWxsb3cgKFRyaXRhbm9waWEpIn0se3ZhbHVlOiJncmF5c2NhbGUiLGxhYmVsOiJHcmF5c2NhbGUifV19LEskPVt7a2V5OiJyZWR1Y2UtbW90aW9uIixsYWJlbDoiUmVkdWNlIE1vdGlvbiJ9LHtrZXk6ImluY3JlYXNlLWNvbnRyYXN0IixsYWJlbDoiSW5jcmVhc2UgQ29udHJhc3QifSx7a2V5OiJzaG93LWJvcmRlcnMiLGxhYmVsOiJTaG93IEJvcmRlcnMifSx7a2V5OiJyZWR1Y2UtdHJhbnNwYXJlbmN5IixsYWJlbDoiUmVkdWNlIFRyYW5zcGFyZW5jeSJ9LHtrZXk6InZvaWNlb3ZlciIsbGFiZWw6IlZvaWNlT3ZlciJ9XTtmdW5jdGlvbiBDMih7aWNvbjokLGxhYmVsOkssY2hpbGRyZW46UX0pe3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBtaW4taC1bMzBweF0iLCJkYXRhLXNldHRpbmctcm93IjpLLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToiZmxleCBzaXplLVsxOHB4XSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSIsY2hpbGRyZW46JH0pLEtdfSksSigic3BhbiIse2NsYXNzTmFtZToiZmxleCBtaW4tdy0wIGp1c3RpZnktZW5kIixjaGlsZHJlbjpRfSldfSl9ZnVuY3Rpb24gUSQoe3ZhbHVlOiQsZGlzYWJsZWQ6SyxvbkNoYW5nZTpRfSl7bGV0W1gsWl09RChudWxsKSxZPVMobnVsbCkscT1TKG51bGwpLEc9UCgoVSk9PntpZihxLmN1cnJlbnQ9PT1VKXJldHVybjtxLmN1cnJlbnQ9VSxRKFUpfSxbUV0pLEI9UCgoVSk9PntpZihaKFUpLFkuY3VycmVudCljbGVhclRpbWVvdXQoWS5jdXJyZW50KTtZLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+RyhVKSxlNyl9LFtHXSksVj1QKCgpPT57aWYoWS5jdXJyZW50KWNsZWFyVGltZW91dChZLmN1cnJlbnQpLFkuY3VycmVudD1udWxsO1ooKFUpPT57aWYoVSE9PW51bGwpRyhVKTtyZXR1cm4gbnVsbH0pLHEuY3VycmVudD1udWxsfSxbR10pLEM9ejIubGVuZ3RoLTEsTD1YPz8kLEY9YCR7TC9DKjEwMH0lYDtyZXR1cm4gSigic3BhbiIse2NsYXNzTmFtZToiZmxleCB3LVsxMjBweF0gbWluLXctMCBmbGV4LWNvbCIsY2hpbGRyZW46W0ooImlucHV0Iix7dHlwZToicmFuZ2UiLCJhcmlhLWxhYmVsIjoiVGV4dCBTaXplIixtaW46MCxtYXg6QyxzdGVwOjEsdmFsdWU6TCxkaXNhYmxlZDpLLG9uQ2hhbmdlOihVKT0+QihOdW1iZXIoVS50YXJnZXQudmFsdWUpKSxvblBvaW50ZXJVcDpWLG9uS2V5VXA6VixvbkJsdXI6VixzdHlsZTp7Ii0tc2xpZGVyLWZpbGwiOkYsIi0tc2xpZGVyLWZpbGwtY29sb3IiOks/InJnYmEoMjU1LDI1NSwyNTUsMC4zKSI6IiMwYTg0ZmYifSxjbGFzc05hbWU6YGgtWzEzcHhdIHctZnVsbCBhcHBlYXJhbmNlLW5vbmUgcm91bmRlZC1mdWxsIGJnLXRyYW5zcGFyZW50IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOltvdXRsaW5lOjEuNXB4X3NvbGlkX3JnYmEoMTAsMTMyLDI1NSwwLjU1KV0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC00ICR7Sz8iY3Vyc29yLWRlZmF1bHQiOiJjdXJzb3ItcG9pbnRlciJ9ICR7IlsmOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja106aC1bNHB4XSBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOltiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0b19yaWdodCx2YXIoLS1zbGlkZXItZmlsbC1jb2xvcilfdmFyKC0tc2xpZGVyLWZpbGwpLHJnYmEoMjU1LDI1NSwyNTUsMC4yMilfdmFyKC0tc2xpZGVyLWZpbGwpKV0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOmgtWzRweF0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS10cmFja106Ymctd2hpdGUvMjAgWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOmgtWzRweF0gWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS1wcm9ncmVzc106YmctW3ZhcigtLXNsaWRlci1maWxsLWNvbG9yKV0ifSAkeyJbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOmFwcGVhcmFuY2Utbm9uZSBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06cm91bmRlZC1mdWxsIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06Ymctd2hpdGUgWyY6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpiZy13aGl0ZS81MCBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNoYWRvdy1bMF8xcHhfM3B4X3JnYmEoMCwwLDAsMC40NSldIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06LW10LVs0LjVweF0gWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotbW96LXJhbmdlLXRodW1iXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOmJvcmRlci1ub25lIFsmOjotbW96LXJhbmdlLXRodW1iXTpiZy13aGl0ZSBbJjpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYl06Ymctd2hpdGUvNTAifWB9KSxKKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6InBvaW50ZXItZXZlbnRzLW5vbmUgbXQtWzNweF0gZmxleCBqdXN0aWZ5LWJldHdlZW4gcHgtWzUuNXB4XSIsY2hpbGRyZW46ejIubWFwKChVKT0+Sigic3BhbiIse2NsYXNzTmFtZToic2l6ZS1bMnB4XSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvNDAifSxVKSl9KV19KX1mdW5jdGlvbiBRMyh7bGFiZWw6JCx2YWx1ZTpLLG9wdGlvbnM6USxkaXNhYmxlZDpYLG9uQ2hhbmdlOlp9KXtyZXR1cm4gSihLNSx7bGFiZWw6JCx2YWx1ZTpLLG9wdGlvbnM6USxkaXNhYmxlZDpYLG9uQ2hhbmdlOlosY2xhc3NOYW1lOiJiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS8xMCByb3VuZGVkLW1kIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gcHktMC41IHB4LTIgbWluLXctMCBtYXgtdy1bMTUwcHhdIGRpc2FibGVkOnRleHQtd2hpdGUvNDAifSl9dmFyIFUyPXthcHBlYXJhbmNlOkooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltKKCJwYXRoIix7ZDoiTTEyIDJ2MiJ9KSxKKCJwYXRoIix7ZDoiTTE0LjgzNyAxNi4zODVhNiA2IDAgMSAxLTcuMjIzLTcuMjIyYy42MjQtLjE0Ny45Ny42Ni43MTUgMS4yNDhhNCA0IDAgMCAwIDUuMjYgNS4yNTljLjU4OS0uMjU1IDEuMzk2LjA5IDEuMjQ4LjcxNSJ9KSxKKCJwYXRoIix7ZDoiTTE2IDEyYTQgNCAwIDAgMC00LTQifSksSigicGF0aCIse2Q6Im0xOSA1LTEuMjU2IDEuMjU2In0pLEooInBhdGgiLHtkOiJNMjAgMTJoMiJ9KV19KSxnbGFzczpKKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyMjAgMjIwIixmaWxsOiJjdXJyZW50Q29sb3IiLHN0cm9rZToibm9uZSIsY2hpbGRyZW46W0ooInBhdGgiLHtkOiJNMTUyIDE4M1YxOTVIMTAwVjE4M0gxNTJaTTE5NiAxMzlWMTI2QzE5NiAxMDEuNjk5IDE3Ni4zMDEgODIgMTUyIDgySDEwMEM3NS42OTk1IDgyIDU2IDEwMS42OTkgNTYgMTI2VjEzOUM1NiAxNjMuMzAxIDc1LjY5OTUgMTgzIDEwMCAxODNWMTk1TDk5LjI3NjQgMTk0Ljk5NUM2OC45MjI4IDE5NC42MTEgNDQuMzg5MyAxNzAuMDc3IDQ0LjAwNDkgMTM5LjcyNEw0NCAxMzlWMTI2QzQ0IDk1LjA3MjEgNjkuMDcyMSA3MCAxMDAgNzBIMTUyQzE4Mi45MjggNzAgMjA4IDk1LjA3MjEgMjA4IDEyNlYxMzlMMjA3Ljk5NSAxMzkuNzI0QzIwNy42MTEgMTcwLjA3NyAxODMuMDc3IDE5NC42MTEgMTUyLjcyNCAxOTQuOTk1TDE1MiAxOTVWMTgzQzE3Ni4zMDEgMTgzIDE5NiAxNjMuMzAxIDE5NiAxMzlaIn0pLEooInBhdGgiLHtkOiJNMTM2IDI1QzE0Ny4wNDYgMjUgMTU2IDMzLjk1NDMgMTU2IDQ1VjcwSDE0M1Y0NUMxNDMgNDEuMTM0IDEzOS44NjYgMzggMTM2IDM4SDQxQzM3LjEzNCAzOCAzNCA0MS4xMzQgMzQgNDVWMTQwQzM0IDE0My44NjYgMzcuMTM0IDE0NyA0MSAxNDdINDQuODYwNEM0NS42NDg3IDE1MS41MzYgNDYuOTYzNCAxNTUuODkxIDQ4Ljc0MDIgMTYwSDQxTDQwLjQ4MzQgMTU5Ljk5M0MyOS44NDgxIDE1OS43MjQgMjEuMjc2NSAxNTEuMTUyIDIxLjAwNjggMTQwLjUxN0wyMSAxNDBWNDVDMjEgMzMuOTU0MyAyOS45NTQzIDI1IDQxIDI1SDEzNloifSksSigicGF0aCIse2Q6Ik0xNTYuMTk5IDE0MEMxNTYuMTk5IDE1MC44NzMgMTQ3LjUyMyAxNTkuNzE5IDEzNi43MTYgMTU5Ljk5M0wxMzYuMTk5IDE2MEg4MC45MTdDNzcuOTQ2MSAxNjAgNzYuMTYzOSAxNjMuMyA3Ny43OTMgMTY1Ljc4NEM3OS4yNDUxIDE2Ny45OTkgNzYuMTY0NyAxNzAuMzUzIDc0LjQwOTQgMTY4LjM3TDczLjYwNTkgMTY3LjQ2MkM2OS4zNDk3IDE2Mi42NTQgNjcgMTU2LjQ1NSA2NyAxNTAuMDM0QzY3IDE0OC4zNTggNjguMzU4MyAxNDcgNzAuMDMzOSAxNDdIMTM2LjE5OUMxNDAuMDY1IDE0NyAxNDMuMTk5IDE0My44NjYgMTQzLjE5OSAxNDBWOTYuOTk1NUMxNDMuMTk5IDkzLjk4MjIgMTQxLjM1NCA5MS4yNzYzIDEzOC41NDkgOTAuMTc2MUMxMzcuMzg5IDg5LjcyMTUgMTM3LjcxNSA4OCAxMzguOTYgODhMMTQzLjE5OSA4OEMxNTAuMzc5IDg4IDE1Ni4xOTkgOTMuODIwMyAxNTYuMTk5IDEwMVYxNDBaIn0pXX0pLGZpbHRlcjpKKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSigicGF0aCIse2Q6Ik0xMSAxN2E0IDQgMCAwIDEtOCAwVjVhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJaIn0pLEooInBhdGgiLHtkOiJNMTYuNyAxM0gxOWEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMkg3In0pLEooInBhdGgiLHtkOiJNIDcgMTdoLjAxIn0pLEooInBhdGgiLHtkOiJtMTEgOCAyLjMtMi4zYTIuNCAyLjQgMCAwIDEgMy40MDQuMDA0TDE4LjYgNy42YTIuNCAyLjQgMCAwIDEgLjAyNiAzLjQzNEw5LjkgMTkuOCJ9KV19KSx0ZXh0U2l6ZTpKKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCA1MiAzNCIsZmlsbDoiY3VycmVudENvbG9yIixzdHJva2U6Im5vbmUiLGNoaWxkcmVuOkooInBhdGgiLHtkOiJNMzkuNzI2NiAzMy4wMjM0QzM4LjE0ODQgMzMuMDIzNCAzNi43NSAzMi43MjY2IDM1LjUzMTIgMzIuMTMyOEMzNC4zMTI1IDMxLjUzOTEgMzMuMzU5NCAzMC43MTA5IDMyLjY3MTkgMjkuNjQ4NEMzMiAyOC41NzAzIDMxLjY2NDEgMjcuMzEyNSAzMS42NjQxIDI1Ljg3NUMzMS42NjQxIDIzLjc4MTIgMzIuNDI5NyAyMi4xMDk0IDMzLjk2MDkgMjAuODU5NEMzNS41MDc4IDE5LjYwOTQgMzcuNzEwOSAxOC45MDYyIDQwLjU3MDMgMTguNzVMNDcuNjAxNiAxOC4zNTE2VjE2LjVDNDcuNjAxNiAxNS4wMTU2IDQ3LjEzMjggMTMuODM1OSA0Ni4xOTUzIDEyLjk2MDlDNDUuMjU3OCAxMi4wODU5IDQzLjk1MzEgMTEuNjQ4NCA0Mi4yODEyIDExLjY0ODRDNDAuOTA2MiAxMS42NDg0IDM5Ljc1IDExLjk0NTMgMzguODEyNSAxMi41MzkxQzM3Ljg3NSAxMy4xMzI4IDM3LjA5MzggMTQuMDQ2OSAzNi40Njg4IDE1LjI4MTJDMzYuMjY1NiAxNS42MDk0IDM2LjAxNTYgMTUuODUxNiAzNS43MTg4IDE2LjAwNzhDMzUuNDIxOSAxNi4xNjQxIDM1LjA3ODEgMTYuMjQyMiAzNC42ODc1IDE2LjI0MjJDMzQuMTU2MiAxNi4yNDIyIDMzLjcxMDkgMTYuMDc4MSAzMy4zNTE2IDE1Ljc1QzMzLjAwNzggMTUuNDIxOSAzMi44MzU5IDE0Ljk5MjIgMzIuODM1OSAxNC40NjA5QzMyLjgzNTkgMTQuMjI2NiAzMi44NjcyIDEzLjk3NjYgMzIuOTI5NyAxMy43MTA5QzMzLjAwNzggMTMuNDQ1MyAzMy4xMDk0IDEzLjE3OTcgMzMuMjM0NCAxMi45MTQxQzMzLjg3NSAxMS40NjA5IDM1LjAxNTYgMTAuMzA0NyAzNi42NTYyIDkuNDQ1MzFDMzguMzEyNSA4LjU4NTk0IDQwLjIyNjYgOC4xNTYyNSA0Mi4zOTg0IDguMTU2MjVDNDQuMzIwMyA4LjE1NjI1IDQ1Ljk4NDQgOC40OTIxOSA0Ny4zOTA2IDkuMTY0MDZDNDguODEyNSA5LjgyMDMxIDQ5Ljg5ODQgMTAuNzUgNTAuNjQ4NCAxMS45NTMxQzUxLjQxNDEgMTMuMTU2MiA1MS43OTY5IDE0LjU3MDMgNTEuNzk2OSAxNi4xOTUzVjMwLjkxNDFDNTEuNzk2OSAzMS41ODU5IDUxLjYwOTQgMzIuMTA5NCA1MS4yMzQ0IDMyLjQ4NDRDNTAuODU5NCAzMi44NTk0IDUwLjM2NzIgMzMuMDQ2OSA0OS43NTc4IDMzLjA0NjlDNDkuMTY0MSAzMy4wNDY5IDQ4LjY3OTcgMzIuODY3MiA0OC4zMDQ3IDMyLjUwNzhDNDcuOTI5NyAzMi4xNDg0IDQ3LjczNDQgMzEuNjY0MSA0Ny43MTg4IDMxLjA1NDdWMjguMzU5NEg0Ny42NzE5QzQ2Ljk4NDQgMjkuNzgxMiA0NS45MDYyIDMwLjkxNDEgNDQuNDM3NSAzMS43NTc4QzQyLjk4NDQgMzIuNjAxNiA0MS40MTQxIDMzLjAyMzQgMzkuNzI2NiAzMy4wMjM0Wk00MC44MDQ3IDI5LjY3MTlDNDIuMDcwMyAyOS42NzE5IDQzLjIxMDkgMjkuNDA2MiA0NC4yMjY2IDI4Ljg3NUM0NS4yNTc4IDI4LjM0MzggNDYuMDc4MSAyNy42MTcyIDQ2LjY4NzUgMjYuNjk1M0M0Ny4yOTY5IDI1Ljc3MzQgNDcuNjAxNiAyNC43NSA0Ny42MDE2IDIzLjYyNVYyMS4zMjgxTDQxLjEzMjggMjEuNzVDMzkuNDQ1MyAyMS44NTk0IDM4LjE2NDEgMjIuMjczNCAzNy4yODkxIDIyLjk5MjJDMzYuNDE0MSAyMy42OTUzIDM1Ljk3NjYgMjQuNjA5NCAzNS45NzY2IDI1LjczNDRDMzUuOTc2NiAyNi45MjE5IDM2LjQyMTkgMjcuODc1IDM3LjMxMjUgMjguNTkzOEMzOC4yMDMxIDI5LjMxMjUgMzkuMzY3MiAyOS42NzE5IDQwLjgwNDcgMjkuNjcxOVpNMi4xNzk2OSAzMy4wMjM0QzEuNTA3ODEgMzMuMDIzNCAwLjk3NjU2MiAzMi44MzU5IDAuNTg1OTM4IDMyLjQ2MDlDMC4xOTUzMTIgMzIuMDg1OSAwIDMxLjU3ODEgMCAzMC45Mzc1QzAgMzAuNTMxMiAwLjA4NTkzNzUgMzAuMDcwMyAwLjI1NzgxMiAyOS41NTQ3TDEwLjQwNjIgMi40MTQwNkMxMC45ODQ0IDAuODA0Njg4IDEyLjEwMTYgMCAxMy43NTc4IDBDMTQuNjE3MiAwIDE1LjMyODEgMC4yMDMxMjUgMTUuODkwNiAwLjYwOTM3NUMxNi40NTMxIDEuMDE1NjIgMTYuODc1IDEuNjI1IDE3LjE1NjIgMi40Mzc1TDI3LjI1NzggMjkuNDg0NEMyNy40NDUzIDMwIDI3LjUzOTEgMzAuNDY4OCAyNy41MzkxIDMwLjg5MDZDMjcuNTM5MSAzMS41NDY5IDI3LjMzNTkgMzIuMDcwMyAyNi45Mjk3IDMyLjQ2MDlDMjYuNTIzNCAzMi44MzU5IDI1Ljk3NjYgMzMuMDIzNCAyNS4yODkxIDMzLjAyMzRDMjQuNjMyOCAzMy4wMjM0IDI0LjEwOTQgMzIuODc1IDIzLjcxODggMzIuNTc4MUMyMy4zNDM4IDMyLjI4MTIgMjMuMDM5MSAzMS43ODkxIDIyLjgwNDcgMzEuMTAxNkwxMy44MjgxIDUuMzQzNzVIMTMuNjY0MUw0LjY2NDA2IDMxLjEwMTZDNC40Mjk2OSAzMS43ODkxIDQuMTI1IDMyLjI4MTIgMy43NSAzMi41NzgxQzMuMzc1IDMyLjg3NSAyLjg1MTU2IDMzLjAyMzQgMi4xNzk2OSAzMy4wMjM0Wk02LjY3OTY5IDIzLjc0MjJDNi4xNDg0NCAyMy43NDIyIDUuNzAzMTIgMjMuNTYyNSA1LjM0Mzc1IDIzLjIwMzFDNC45ODQzOCAyMi44NDM4IDQuODA0NjkgMjIuMzk4NCA0LjgwNDY5IDIxLjg2NzJDNC44MDQ2OSAyMS4zNTE2IDQuOTg0MzggMjAuOTE0MSA1LjM0Mzc1IDIwLjU1NDdDNS43MDMxMiAyMC4xOTUzIDYuMTQ4NDQgMjAuMDE1NiA2LjY3OTY5IDIwLjAxNTZIMjAuODU5NEMyMS4zNzUgMjAuMDE1NiAyMS44MTI1IDIwLjE5NTMgMjIuMTcxOSAyMC41NTQ3QzIyLjUzMTIgMjAuOTE0MSAyMi43MTA5IDIxLjM1MTYgMjIuNzEwOSAyMS44NjcyQzIyLjcxMDkgMjIuMzk4NCAyMi41MzEyIDIyLjg0MzggMjIuMTcxOSAyMy4yMDMxQzIxLjgxMjUgMjMuNTYyNSAyMS4zNzUgMjMuNzQyMiAyMC44NTk0IDIzLjc0MjJINi42Nzk2OVoifSl9KSxtb3Rpb246Sigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLGNoaWxkcmVuOltKKCJjaXJjbGUiLHtjeDoiMTQiLGN5OiIxMiIscjoiNiJ9KSxKKCJwYXRoIix7ZDoiTTMgOGg0TTIgMTJoNE0zIDE2aDQifSldfSksY29udHJhc3Q6Sigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9KSxKKCJwYXRoIix7ZDoiTTEyIDE4YTYgNiAwIDAgMCAwLTEydjEyeiJ9KV19KSxib3JkZXJzOkooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltKKCJwYXRoIix7ZDoiTTUgMjFhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyIn0pLEooInBhdGgiLHtkOiJNOSAyMWgxIn0pLEooInBhdGgiLHtkOiJNMTQgMjFoMSJ9KV19KSx0cmFuc3BhcmVuY3k6Sigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgNjMgNDYiLGZpbGw6ImN1cnJlbnRDb2xvciIsc3Ryb2tlOiJub25lIixjaGlsZHJlbjpKKCJwYXRoIix7ZDoiTTIyLjczNDQgNC4xNzE4OEMyMi4xODc1IDQuMTcxODggMjEuNzE4OCAzLjk3NjU2IDIxLjMyODEgMy41ODU5NEMyMC45Mzc1IDMuMTk1MzEgMjAuNzQyMiAyLjcxODc1IDIwLjc0MjIgMi4xNTYyNUMyMC43NDIyIDEuNjA5MzggMjAuOTM3NSAxLjE0MDYyIDIxLjMyODEgMC43NUMyMS43MTg4IDAuMzU5Mzc1IDIyLjE4NzUgMC4xNjQwNjIgMjIuNzM0NCAwLjE2NDA2MkMyMy4yODEyIDAuMTY0MDYyIDIzLjc1IDAuMzU5Mzc1IDI0LjE0MDYgMC43NUMyNC41MzEyIDEuMTQwNjIgMjQuNzI2NiAxLjYwOTM4IDI0LjcyNjYgMi4xNTYyNUMyNC43MjY2IDIuNzE4NzUgMjQuNTMxMiAzLjE5NTMxIDI0LjE0MDYgMy41ODU5NEMyMy43NSAzLjk3NjU2IDIzLjI4MTIgNC4xNzE4OCAyMi43MzQ0IDQuMTcxODhaTTI5LjEwOTQgNS4yMDMxMkMyOC41NDY5IDUuMjAzMTIgMjguMDcwMyA1LjAwNzgxIDI3LjY3OTcgNC42MTcxOUMyNy4yODkxIDQuMjI2NTYgMjcuMDkzOCAzLjc1NzgxIDI3LjA5MzggMy4yMTA5NEMyNy4wOTM4IDIuNjY0MDYgMjcuMjg5MSAyLjE5NTMxIDI3LjY3OTcgMS44MDQ2OUMyOC4wNzAzIDEuMzk4NDQgMjguNTQ2OSAxLjE5NTMxIDI5LjEwOTQgMS4xOTUzMUMyOS42NTYyIDEuMTk1MzEgMzAuMTI1IDEuMzk4NDQgMzAuNTE1NiAxLjgwNDY5QzMwLjkwNjIgMi4xOTUzMSAzMS4xMDE2IDIuNjY0MDYgMzEuMTAxNiAzLjIxMDk0QzMxLjEwMTYgMy43NTc4MSAzMC45MDYyIDQuMjI2NTYgMzAuNTE1NiA0LjYxNzE5QzMwLjEyNSA1LjAwNzgxIDI5LjY1NjIgNS4yMDMxMiAyOS4xMDk0IDUuMjAzMTJaTTM0Ljg3NSA4LjEzMjgxQzM0LjMyODEgOC4xMzI4MSAzMy44NTE2IDcuOTM3NSAzMy40NDUzIDcuNTQ2ODhDMzMuMDU0NyA3LjE0MDYyIDMyLjg1OTQgNi42NzE4OCAzMi44NTk0IDYuMTQwNjJDMzIuODU5NCA1LjU3ODEyIDMzLjA1NDcgNS4xMDE1NiAzMy40NDUzIDQuNzEwOTRDMzMuODUxNiA0LjMyMDMxIDM0LjMyODEgNC4xMjUgMzQuODc1IDQuMTI1QzM1LjQyMTkgNC4xMjUgMzUuODkwNiA0LjMyMDMxIDM2LjI4MTIgNC43MTA5NEMzNi42ODc1IDUuMTAxNTYgMzYuODkwNiA1LjU3ODEyIDM2Ljg5MDYgNi4xNDA2MkMzNi44OTA2IDYuNjcxODggMzYuNjg3NSA3LjE0MDYyIDM2LjI4MTIgNy41NDY4OEMzNS44OTA2IDcuOTM3NSAzNS40MjE5IDguMTMyODEgMzQuODc1IDguMTMyODFaTTM5LjQ0NTMgMTIuNjc5N0MzOC44OTg0IDEyLjY3OTcgMzguNDIxOSAxMi40ODQ0IDM4LjAxNTYgMTIuMDkzOEMzNy42MjUgMTEuNzAzMSAzNy40Mjk3IDExLjIzNDQgMzcuNDI5NyAxMC42ODc1QzM3LjQyOTcgMTAuMTU2MiAzNy42MjUgOS42OTUzMSAzOC4wMTU2IDkuMzA0NjlDMzguNDIxOSA4Ljg5ODQ0IDM4Ljg5ODQgOC42OTUzMSAzOS40NDUzIDguNjk1MzFDMzkuOTkyMiA4LjY5NTMxIDQwLjQ2MDkgOC44OTg0NCA0MC44NTE2IDkuMzA0NjlDNDEuMjQyMiA5LjY5NTMxIDQxLjQzNzUgMTAuMTU2MiA0MS40Mzc1IDEwLjY4NzVDNDEuNDM3NSAxMS4yMzQ0IDQxLjI0MjIgMTEuNzAzMSA0MC44NTE2IDEyLjA5MzhDNDAuNDYwOSAxMi40ODQ0IDM5Ljk5MjIgMTIuNjc5NyAzOS40NDUzIDEyLjY3OTdaTTQyLjM3NSAxOC4zOTg0QzQxLjgxMjUgMTguMzk4NCA0MS4zMjgxIDE4LjIwMzEgNDAuOTIxOSAxNy44MTI1QzQwLjUzMTIgMTcuNDIxOSA0MC4zMzU5IDE2Ljk1MzEgNDAuMzM1OSAxNi40MDYyQzQwLjMzNTkgMTUuODQzOCA0MC41MzEyIDE1LjM2NzIgNDAuOTIxOSAxNC45NzY2QzQxLjMyODEgMTQuNTg1OSA0MS44MTI1IDE0LjM5MDYgNDIuMzc1IDE0LjM5MDZDNDIuOTA2MiAxNC4zOTA2IDQzLjM2NzIgMTQuNTg1OSA0My43NTc4IDE0Ljk3NjZDNDQuMTY0MSAxNS4zNjcyIDQ0LjM2NzIgMTUuODQzOCA0NC4zNjcyIDE2LjQwNjJDNDQuMzY3MiAxNi45NTMxIDQ0LjE2NDEgMTcuNDIxOSA0My43NTc4IDE3LjgxMjVDNDMuMzY3MiAxOC4yMDMxIDQyLjkwNjIgMTguMzk4NCA0Mi4zNzUgMTguMzk4NFpNNDMuNDUzMSAyNC43OTY5QzQyLjkwNjIgMjQuNzk2OSA0Mi40Mzc1IDI0LjYwMTYgNDIuMDQ2OSAyNC4yMTA5QzQxLjY1NjIgMjMuODIwMyA0MS40NjA5IDIzLjM0MzggNDEuNDYwOSAyMi43ODEyQzQxLjQ2MDkgMjIuMjM0NCA0MS42NTYyIDIxLjc2NTYgNDIuMDQ2OSAyMS4zNzVDNDIuNDM3NSAyMC45ODQ0IDQyLjkwNjIgMjAuNzg5MSA0My40NTMxIDIwLjc4OTFDNDQgMjAuNzg5MSA0NC40Njg4IDIwLjk4NDQgNDQuODU5NCAyMS4zNzVDNDUuMjY1NiAyMS43NjU2IDQ1LjQ2ODggMjIuMjM0NCA0NS40Njg4IDIyLjc4MTJDNDUuNDY4OCAyMy4zNDM4IDQ1LjI2NTYgMjMuODIwMyA0NC44NTk0IDI0LjIxMDlDNDQuNDY4OCAyNC42MDE2IDQ0IDI0Ljc5NjkgNDMuNDUzMSAyNC43OTY5Wk00Mi4zNzUgMzEuMTcxOUM0MS44MTI1IDMxLjE3MTkgNDEuMzI4MSAzMC45NzY2IDQwLjkyMTkgMzAuNTg1OUM0MC41MzEyIDMwLjE5NTMgNDAuMzM1OSAyOS43MjY2IDQwLjMzNTkgMjkuMTc5N0M0MC4zMzU5IDI4LjYxNzIgNDAuNTMxMiAyOC4xNDA2IDQwLjkyMTkgMjcuNzVDNDEuMzI4MSAyNy4zNTk0IDQxLjgxMjUgMjcuMTY0MSA0Mi4zNzUgMjcuMTY0MUM0Mi45MDYyIDI3LjE2NDEgNDMuMzY3MiAyNy4zNTk0IDQzLjc1NzggMjcuNzVDNDQuMTY0MSAyOC4xNDA2IDQ0LjM2NzIgMjguNjE3MiA0NC4zNjcyIDI5LjE3OTdDNDQuMzY3MiAyOS43MjY2IDQ0LjE2NDEgMzAuMTk1MyA0My43NTc4IDMwLjU4NTlDNDMuMzY3MiAzMC45NzY2IDQyLjkwNjIgMzEuMTcxOSA0Mi4zNzUgMzEuMTcxOVpNMzkuNDQ1MyAzNi44OTA2QzM4Ljg5ODQgMzYuODkwNiAzOC40MjE5IDM2LjY5NTMgMzguMDE1NiAzNi4zMDQ3QzM3LjYyNSAzNS44OTg0IDM3LjQyOTcgMzUuNDIxOSAzNy40Mjk3IDM0Ljg3NUMzNy40Mjk3IDM0LjMyODEgMzcuNjI1IDMzLjg1OTQgMzguMDE1NiAzMy40Njg4QzM4LjQyMTkgMzMuMDYyNSAzOC44OTg0IDMyLjg1OTQgMzkuNDQ1MyAzMi44NTk0QzM5Ljk5MjIgMzIuODU5NCA0MC40NjA5IDMzLjA2MjUgNDAuODUxNiAzMy40Njg4QzQxLjI0MjIgMzMuODU5NCA0MS40Mzc1IDM0LjMyODEgNDEuNDM3NSAzNC44NzVDNDEuNDM3NSAzNS40MjE5IDQxLjI0MjIgMzUuODk4NCA0MC44NTE2IDM2LjMwNDdDNDAuNDYwOSAzNi42OTUzIDM5Ljk5MjIgMzYuODkwNiAzOS40NDUzIDM2Ljg5MDZaTTM0Ljg3NSA0MS40Mzc1QzM0LjMyODEgNDEuNDM3NSAzMy44NTE2IDQxLjI0MjIgMzMuNDQ1MyA0MC44NTE2QzMzLjA1NDcgNDAuNDYwOSAzMi44NTk0IDM5Ljk5MjIgMzIuODU5NCAzOS40NDUzQzMyLjg1OTQgMzguODk4NCAzMy4wNTQ3IDM4LjQyOTcgMzMuNDQ1MyAzOC4wMzkxQzMzLjg1MTYgMzcuNjMyOCAzNC4zMjgxIDM3LjQyOTcgMzQuODc1IDM3LjQyOTdDMzUuNDIxOSAzNy40Mjk3IDM1Ljg5MDYgMzcuNjMyOCAzNi4yODEyIDM4LjAzOTFDMzYuNjg3NSAzOC40Mjk3IDM2Ljg5MDYgMzguODk4NCAzNi44OTA2IDM5LjQ0NTNDMzYuODkwNiAzOS45OTIyIDM2LjY4NzUgNDAuNDYwOSAzNi4yODEyIDQwLjg1MTZDMzUuODkwNiA0MS4yNDIyIDM1LjQyMTkgNDEuNDM3NSAzNC44NzUgNDEuNDM3NVpNMjkuMTA5NCA0NC4zNjcyQzI4LjU0NjkgNDQuMzY3MiAyOC4wNzAzIDQ0LjE2NDEgMjcuNjc5NyA0My43NTc4QzI3LjI4OTEgNDMuMzY3MiAyNy4wOTM4IDQyLjg5ODQgMjcuMDkzOCA0Mi4zNTE2QzI3LjA5MzggNDEuODA0NyAyNy4yODkxIDQxLjMzNTkgMjcuNjc5NyA0MC45NDUzQzI4LjA3MDMgNDAuNTU0NyAyOC41NDY5IDQwLjM1OTQgMjkuMTA5NCA0MC4zNTk0QzI5LjY1NjIgNDAuMzU5NCAzMC4xMjUgNDAuNTU0NyAzMC41MTU2IDQwLjk0NTNDMzAuOTA2MiA0MS4zMzU5IDMxLjEwMTYgNDEuODA0NyAzMS4xMDE2IDQyLjM1MTZDMzEuMTAxNiA0Mi44OTg0IDMwLjkwNjIgNDMuMzY3MiAzMC41MTU2IDQzLjc1NzhDMzAuMTI1IDQ0LjE2NDEgMjkuNjU2MiA0NC4zNjcyIDI5LjEwOTQgNDQuMzY3MlpNMjIuNzM0NCA0NS4zOTg0QzIyLjE4NzUgNDUuMzk4NCAyMS43MTg4IDQ1LjIwMzEgMjEuMzI4MSA0NC44MTI1QzIwLjkzNzUgNDQuNDIxOSAyMC43NDIyIDQzLjk1MzEgMjAuNzQyMiA0My40MDYyQzIwLjc0MjIgNDIuODQzOCAyMC45Mzc1IDQyLjM2NzIgMjEuMzI4MSA0MS45NzY2QzIxLjcxODggNDEuNTg1OSAyMi4xODc1IDQxLjM5MDYgMjIuNzM0NCA0MS4zOTA2QzIzLjI4MTIgNDEuMzkwNiAyMy43NSA0MS41ODU5IDI0LjE0MDYgNDEuOTc2NkMyNC41MzEyIDQyLjM2NzIgMjQuNzI2NiA0Mi44NDM4IDI0LjcyNjYgNDMuNDA2MkMyNC43MjY2IDQzLjk1MzEgMjQuNTMxMiA0NC40MjE5IDI0LjE0MDYgNDQuODEyNUMyMy43NSA0NS4yMDMxIDIzLjI4MTIgNDUuMzk4NCAyMi43MzQ0IDQ1LjM5ODRaTTE2LjM1OTQgNDQuMzY3MkMxNS44MTI1IDQ0LjM2NzIgMTUuMzQzOCA0NC4xNjQxIDE0Ljk1MzEgNDMuNzU3OEMxNC41NjI1IDQzLjM2NzIgMTQuMzY3MiA0Mi44OTg0IDE0LjM2NzIgNDIuMzUxNkMxNC4zNjcyIDQxLjgwNDcgMTQuNTYyNSA0MS4zMzU5IDE0Ljk1MzEgNDAuOTQ1M0MxNS4zNDM4IDQwLjU1NDcgMTUuODEyNSA0MC4zNTk0IDE2LjM1OTQgNDAuMzU5NEMxNi45MjE5IDQwLjM1OTQgMTcuMzk4NCA0MC41NTQ3IDE3Ljc4OTEgNDAuOTQ1M0MxOC4xNzk3IDQxLjMzNTkgMTguMzc1IDQxLjgwNDcgMTguMzc1IDQyLjM1MTZDMTguMzc1IDQyLjg5ODQgMTguMTc5NyA0My4zNjcyIDE3Ljc4OTEgNDMuNzU3OEMxNy4zOTg0IDQ0LjE2NDEgMTYuOTIxOSA0NC4zNjcyIDE2LjM1OTQgNDQuMzY3MlpNMTAuNTcwMyA0MS40Mzc1QzEwLjAzOTEgNDEuNDM3NSA5LjU3MDMxIDQxLjI0MjIgOS4xNjQwNiA0MC44NTE2QzguNzczNDQgNDAuNDYwOSA4LjU3ODEyIDM5Ljk5MjIgOC41NzgxMiAzOS40NDUzQzguNTc4MTIgMzguODk4NCA4Ljc3MzQ0IDM4LjQyOTcgOS4xNjQwNiAzOC4wMzkxQzkuNTcwMzEgMzcuNjMyOCAxMC4wMzkxIDM3LjQyOTcgMTAuNTcwMyAzNy40Mjk3QzExLjEzMjggMzcuNDI5NyAxMS42MDk0IDM3LjYzMjggMTIgMzguMDM5MUMxMi4zOTA2IDM4LjQyOTcgMTIuNTg1OSAzOC44OTg0IDEyLjU4NTkgMzkuNDQ1M0MxMi41ODU5IDM5Ljk5MjIgMTIuMzkwNiA0MC40NjA5IDEyIDQwLjg1MTZDMTEuNjA5NCA0MS4yNDIyIDExLjEzMjggNDEuNDM3NSAxMC41NzAzIDQxLjQzNzVaTTYuMDIzNDQgMzYuODkwNkM1LjQ3NjU2IDM2Ljg5MDYgNSAzNi42OTUzIDQuNTkzNzUgMzYuMzA0N0M0LjIwMzEyIDM1Ljg5ODQgNC4wMDc4MSAzNS40MjE5IDQuMDA3ODEgMzQuODc1QzQuMDA3ODEgMzQuMzI4MSA0LjIwMzEyIDMzLjg1OTQgNC41OTM3NSAzMy40Njg4QzUgMzMuMDYyNSA1LjQ3NjU2IDMyLjg1OTQgNi4wMjM0NCAzMi44NTk0QzYuNTcwMzEgMzIuODU5NCA3LjAzOTA2IDMzLjA2MjUgNy40Mjk2OSAzMy40Njg4QzcuODIwMzEgMzMuODU5NCA4LjAxNTYyIDM0LjMyODEgOC4wMTU2MiAzNC44NzVDOC4wMTU2MiAzNS40MjE5IDcuODIwMzEgMzUuODk4NCA3LjQyOTY5IDM2LjMwNDdDNy4wMzkwNiAzNi42OTUzIDYuNTcwMzEgMzYuODkwNiA2LjAyMzQ0IDM2Ljg5MDZaTTMuMDkzNzUgMzEuMTcxOUMyLjU2MjUgMzEuMTcxOSAyLjA5Mzc1IDMwLjk3NjYgMS42ODc1IDMwLjU4NTlDMS4yOTY4OCAzMC4xOTUzIDEuMTAxNTYgMjkuNzI2NiAxLjEwMTU2IDI5LjE3OTdDMS4xMDE1NiAyOC42MTcyIDEuMjk2ODggMjguMTQwNiAxLjY4NzUgMjcuNzVDMi4wOTM3NSAyNy4zNTk0IDIuNTYyNSAyNy4xNjQxIDMuMDkzNzUgMjcuMTY0MUMzLjY1NjI1IDI3LjE2NDEgNC4xMzI4MSAyNy4zNTk0IDQuNTIzNDQgMjcuNzVDNC45MTQwNiAyOC4xNDA2IDUuMTA5MzggMjguNjE3MiA1LjEwOTM4IDI5LjE3OTdDNS4xMDkzOCAyOS43MjY2IDQuOTE0MDYgMzAuMTk1MyA0LjUyMzQ0IDMwLjU4NTlDNC4xMzI4MSAzMC45NzY2IDMuNjU2MjUgMzEuMTcxOSAzLjA5Mzc1IDMxLjE3MTlaTTIuMDE1NjIgMjQuNzk2OUMxLjQ1MzEyIDI0Ljc5NjkgMC45NzY1NjIgMjQuNjAxNiAwLjU4NTkzOCAyNC4yMTA5QzAuMTk1MzEyIDIzLjgyMDMgMCAyMy4zNDM4IDAgMjIuNzgxMkMwIDIyLjIzNDQgMC4xOTUzMTIgMjEuNzY1NiAwLjU4NTkzOCAyMS4zNzVDMC45NzY1NjIgMjAuOTg0NCAxLjQ1MzEyIDIwLjc4OTEgMi4wMTU2MiAyMC43ODkxQzIuNTYyNSAyMC43ODkxIDMuMDMxMjUgMjAuOTg0NCAzLjQyMTg4IDIxLjM3NUMzLjgxMjUgMjEuNzY1NiA0LjAwNzgxIDIyLjIzNDQgNC4wMDc4MSAyMi43ODEyQzQuMDA3ODEgMjMuMzQzOCAzLjgxMjUgMjMuODIwMyAzLjQyMTg4IDI0LjIxMDlDMy4wMzEyNSAyNC42MDE2IDIuNTYyNSAyNC43OTY5IDIuMDE1NjIgMjQuNzk2OVpNMy4wOTM3NSAxOC4zOTg0QzIuNTYyNSAxOC4zOTg0IDIuMDkzNzUgMTguMjAzMSAxLjY4NzUgMTcuODEyNUMxLjI5Njg4IDE3LjQyMTkgMS4xMDE1NiAxNi45NTMxIDEuMTAxNTYgMTYuNDA2MkMxLjEwMTU2IDE1Ljg0MzggMS4yOTY4OCAxNS4zNjcyIDEuNjg3NSAxNC45NzY2QzIuMDkzNzUgMTQuNTg1OSAyLjU2MjUgMTQuMzkwNiAzLjA5Mzc1IDE0LjM5MDZDMy42NTYyNSAxNC4zOTA2IDQuMTMyODEgMTQuNTg1OSA0LjUyMzQ0IDE0Ljk3NjZDNC45MTQwNiAxNS4zNjcyIDUuMTA5MzggMTUuODQzOCA1LjEwOTM4IDE2LjQwNjJDNS4xMDkzOCAxNi45NTMxIDQuOTE0MDYgMTcuNDIxOSA0LjUyMzQ0IDE3LjgxMjVDNC4xMzI4MSAxOC4yMDMxIDMuNjU2MjUgMTguMzk4NCAzLjA5Mzc1IDE4LjM5ODRaTTYuMDIzNDQgMTIuNjc5N0M1LjQ3NjU2IDEyLjY3OTcgNSAxMi40ODQ0IDQuNTkzNzUgMTIuMDkzOEM0LjIwMzEyIDExLjcwMzEgNC4wMDc4MSAxMS4yMzQ0IDQuMDA3ODEgMTAuNjg3NUM0LjAwNzgxIDEwLjE1NjIgNC4yMDMxMiA5LjY5NTMxIDQuNTkzNzUgOS4zMDQ2OUM1IDguODk4NDQgNS40NzY1NiA4LjY5NTMxIDYuMDIzNDQgOC42OTUzMUM2LjU3MDMxIDguNjk1MzEgNy4wMzkwNiA4Ljg5ODQ0IDcuNDI5NjkgOS4zMDQ2OUM3LjgyMDMxIDkuNjk1MzEgOC4wMTU2MiAxMC4xNTYyIDguMDE1NjIgMTAuNjg3NUM4LjAxNTYyIDExLjIzNDQgNy44MjAzMSAxMS43MDMxIDcuNDI5NjkgMTIuMDkzOEM3LjAzOTA2IDEyLjQ4NDQgNi41NzAzMSAxMi42Nzk3IDYuMDIzNDQgMTIuNjc5N1pNMTAuNTcwMyA4LjEzMjgxQzEwLjAzOTEgOC4xMzI4MSA5LjU3MDMxIDcuOTM3NSA5LjE2NDA2IDcuNTQ2ODhDOC43NzM0NCA3LjE0MDYyIDguNTc4MTIgNi42NzE4OCA4LjU3ODEyIDYuMTQwNjJDOC41NzgxMiA1LjU3ODEyIDguNzczNDQgNS4xMDE1NiA5LjE2NDA2IDQuNzEwOTRDOS41NzAzMSA0LjMyMDMxIDEwLjAzOTEgNC4xMjUgMTAuNTcwMyA0LjEyNUMxMS4xMzI4IDQuMTI1IDExLjYwOTQgNC4zMjAzMSAxMiA0LjcxMDk0QzEyLjM5MDYgNS4xMDE1NiAxMi41ODU5IDUuNTc4MTIgMTIuNTg1OSA2LjE0MDYyQzEyLjU4NTkgNi42NzE4OCAxMi4zOTA2IDcuMTQwNjIgMTIgNy41NDY4OEMxMS42MDk0IDcuOTM3NSAxMS4xMzI4IDguMTMyODEgMTAuNTcwMyA4LjEzMjgxWk0xNi4zNTk0IDUuMjAzMTJDMTUuODEyNSA1LjIwMzEyIDE1LjM0MzggNS4wMDc4MSAxNC45NTMxIDQuNjE3MTlDMTQuNTYyNSA0LjIyNjU2IDE0LjM2NzIgMy43NTc4MSAxNC4zNjcyIDMuMjEwOTRDMTQuMzY3MiAyLjY2NDA2IDE0LjU2MjUgMi4xOTUzMSAxNC45NTMxIDEuODA0NjlDMTUuMzQzOCAxLjM5ODQ0IDE1LjgxMjUgMS4xOTUzMSAxNi4zNTk0IDEuMTk1MzFDMTYuOTIxOSAxLjE5NTMxIDE3LjM5ODQgMS4zOTg0NCAxNy43ODkxIDEuODA0NjlDMTguMTc5NyAyLjE5NTMxIDE4LjM3NSAyLjY2NDA2IDE4LjM3NSAzLjIxMDk0QzE4LjM3NSAzLjc1NzgxIDE4LjE3OTcgNC4yMjY1NiAxNy43ODkxIDQuNjE3MTlDMTcuMzk4NCA1LjAwNzgxIDE2LjkyMTkgNS4yMDMxMiAxNi4zNTk0IDUuMjAzMTJaTTQwLjEwMTYgNDUuNTYyNUMzNi45NDUzIDQ1LjU2MjUgMzMuOTkyMiA0NC45Njg4IDMxLjI0MjIgNDMuNzgxMkMyOC41MDc4IDQyLjYwOTQgMjYuMDkzOCA0MC45NzY2IDI0IDM4Ljg4MjhDMjEuOTA2MiAzNi43ODkxIDIwLjI2NTYgMzQuMzY3MiAxOS4wNzgxIDMxLjYxNzJDMTcuOTA2MiAyOC44NjcyIDE3LjMyMDMgMjUuOTIxOSAxNy4zMjAzIDIyLjc4MTJDMTcuMzIwMyAxOS42NDA2IDE3LjkwNjIgMTYuNjk1MyAxOS4wNzgxIDEzLjk0NTNDMjAuMjY1NiAxMS4xNzk3IDIxLjkwNjIgOC43NTc4MSAyNCA2LjY3OTY5QzI2LjA5MzggNC41ODU5NCAyOC41MDc4IDIuOTUzMTIgMzEuMjQyMiAxLjc4MTI1QzMzLjk5MjIgMC41OTM3NSAzNi45NDUzIDAgNDAuMTAxNiAwQzQzLjI0MjIgMCA0Ni4xODc1IDAuNTkzNzUgNDguOTM3NSAxLjc4MTI1QzUxLjY4NzUgMi45NTMxMiA1NC4xMDE2IDQuNTg1OTQgNTYuMTc5NyA2LjY3OTY5QzU4LjI3MzQgOC43NTc4MSA1OS45MDYyIDExLjE3OTcgNjEuMDc4MSAxMy45NDUzQzYyLjI2NTYgMTYuNjk1MyA2Mi44NTk0IDE5LjY0MDYgNjIuODU5NCAyMi43ODEyQzYyLjg1OTQgMjUuOTIxOSA2Mi4yNjU2IDI4Ljg2NzIgNjEuMDc4MSAzMS42MTcyQzU5LjkwNjIgMzQuMzY3MiA1OC4yNzM0IDM2Ljc4OTEgNTYuMTc5NyAzOC44ODI4QzU0LjEwMTYgNDAuOTc2NiA1MS42ODc1IDQyLjYwOTQgNDguOTM3NSA0My43ODEyQzQ2LjE4NzUgNDQuOTY4OCA0My4yNDIyIDQ1LjU2MjUgNDAuMTAxNiA0NS41NjI1Wk00MC4xMDE2IDQxLjM5MDZDNDIuNjY0MSA0MS4zOTA2IDQ1LjA3MDMgNDAuOTA2MiA0Ny4zMjAzIDM5LjkzNzVDNDkuNTcwMyAzOC45Njg4IDUxLjU0NjkgMzcuNjMyOCA1My4yNSAzNS45Mjk3QzU0Ljk2ODggMzQuMjI2NiA1Ni4zMDQ3IDMyLjI1NzggNTcuMjU3OCAzMC4wMjM0QzU4LjIxMDkgMjcuNzczNCA1OC42ODc1IDI1LjM1OTQgNTguNjg3NSAyMi43ODEyQzU4LjY4NzUgMjAuMjAzMSA1OC4yMTA5IDE3Ljc5NjkgNTcuMjU3OCAxNS41NjI1QzU2LjMwNDcgMTMuMzEyNSA1NC45Njg4IDExLjMzNTkgNTMuMjUgOS42MzI4MUM1MS41NDY5IDcuOTI5NjkgNDkuNTcwMyA2LjU5Mzc1IDQ3LjMyMDMgNS42MjVDNDUuMDcwMyA0LjY1NjI1IDQyLjY2NDEgNC4xNzE4OCA0MC4xMDE2IDQuMTcxODhDMzcuNTIzNCA0LjE3MTg4IDM1LjEwOTQgNC42NTYyNSAzMi44NTk0IDUuNjI1QzMwLjYyNSA2LjU5Mzc1IDI4LjY0ODQgNy45Mjk2OSAyNi45Mjk3IDkuNjMyODFDMjUuMjI2NiAxMS4zMzU5IDIzLjg5MDYgMTMuMzEyNSAyMi45MjE5IDE1LjU2MjVDMjEuOTY4OCAxNy43OTY5IDIxLjQ5MjIgMjAuMjAzMSAyMS40OTIyIDIyLjc4MTJDMjEuNDkyMiAyNS4zNTk0IDIxLjk2ODggMjcuNzczNCAyMi45MjE5IDMwLjAyMzRDMjMuODkwNiAzMi4yNTc4IDI1LjIyNjYgMzQuMjI2NiAyNi45Mjk3IDM1LjkyOTdDMjguNjQ4NCAzNy42MzI4IDMwLjYyNSAzOC45Njg4IDMyLjg1OTQgMzkuOTM3NUMzNS4xMDk0IDQwLjkwNjIgMzcuNTIzNCA0MS4zOTA2IDQwLjEwMTYgNDEuMzkwNloifSl9KSx2b2ljZW92ZXI6Sigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooInBhdGgiLHtkOiJtMTEgNy42MDEtNS45OTQgOC4xOWExIDEgMCAwIDAgLjEgMS4yOThsLjgxNy44MThhMSAxIDAgMCAwIDEuMzE0LjA4N0wxNS4wOSAxMiJ9KSxKKCJwYXRoIix7ZDoiTTE2LjUgMjEuMTc0QzE1LjUgMjAuNSAxNC4zNzIgMjAgMTMgMjBjLTIuMDU4IDAtMy45MjggMi4zNTYtNiAyLTIuMDcyLS4zNTYtMi43NzUtMy4zNjktMS41LTQuNSJ9KSxKKCJjaXJjbGUiLHtjeDoiMTYiLGN5OiI3IixyOiI1In0pXX0pfTtmdW5jdGlvbiBKJCgkKXtpZighJClyZXR1cm4hMDtyZXR1cm4gZDIoJCkub3MudG9Mb3dlckNhc2UoKT09PSJpb3MifWZ1bmN0aW9uIG05KHt1ZGlkOiQscnVudGltZTpLfSl7bGV0W1EsWF09RCghMCksW1osWV09RChudWxsKSxbcSxHXT1EKG51bGwpLFtCLFZdPUQobnVsbCksQz1KJChLKSxMPVAoYXN5bmMoKT0+e1YobnVsbCk7dHJ5e2xldCBUPWF3YWl0IGo1KHtkZXZpY2U6JH0se3NpZ25hbDpBYm9ydFNpZ25hbC50aW1lb3V0KDE1MDAwKX0pO2lmKFQpWShUKTtlbHNlIFYoIlVuZXhwZWN0ZWQgc2ltdWxhdG9yLXNldHRpbmdzIHJlcGx5Iil9Y2F0Y2goVCl7VihUIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uJiZULm5hbWU9PT0iVGltZW91dEVycm9yIj8iVGltZWQgb3V0IHJlYWRpbmcgc2ltdWxhdG9yIHNldHRpbmdzIjpUIGluc3RhbmNlb2YgRXJyb3ImJlQubWVzc2FnZSE9PSJGYWlsZWQgdG8gZmV0Y2giP1QubWVzc2FnZToiQ291bGQgbm90IHJlYWNoIHRoZSBwcmV2aWV3IHNlcnZlciDigJQgcmVsb2FkIHRoZSBwYWdlIGlmIHRoaXMgcGVyc2lzdHMiKX19LFskXSk7SSgoKT0+e2lmKFkobnVsbCksIUMpcmV0dXJuO0woKX0sW0wsQ10pO2xldCBGPVAoYXN5bmMoVCxiKT0+e0coVCksVihudWxsKSxZKCh4KT0+eD97Li4ueCxbVF06Yn06eCk7dHJ5e2F3YWl0IGo1KHtkZXZpY2U6JCxvcHRpb246VCx2YWx1ZTpifSx7c2lnbmFsOkFib3J0U2lnbmFsLnRpbWVvdXQoMTUwMDApfSl9Y2F0Y2goeCl7Vih4IGluc3RhbmNlb2YgRXJyb3I/eC5tZXNzYWdlOmBGYWlsZWQgdG8gc2V0ICR7VH1gKSxMKCl9ZmluYWxseXtHKG51bGwpfX0sWyQsTF0pLE49Uyh7cnVubmluZzohMSxuZXh0Om51bGx9KSxfPVMoRik7Xy5jdXJyZW50PUY7bGV0IHo9UCgoVCk9PntsZXQgYj1OLmN1cnJlbnQ7aWYoYi5uZXh0PVQsYi5ydW5uaW5nKXJldHVybjtiLnJ1bm5pbmc9ITAsKGFzeW5jKCk9Pnt3aGlsZShiLm5leHQhPT1udWxsKXtsZXQgeD1iLm5leHQ7Yi5uZXh0PW51bGwsYXdhaXQgXy5jdXJyZW50KCJ0ZXh0LXNpemUiLHoyW3hdKX1iLnJ1bm5pbmc9ITF9KSgpfSxbXSksVT1aIT09bnVsbCxBPVo/PyQkLE09ejIuaW5kZXhPZihBWyJ0ZXh0LXNpemUiXSksRT1NPj0wP006QVsidGV4dC1zaXplIl0/LnN0YXJ0c1dpdGgoImFjY2Vzc2liaWxpdHkiKT96Mi5sZW5ndGgtMTozO3JldHVybiBKKHQxLHtvcGVuOlEsb25PcGVuQ2hhbmdlOlgsImRhdGEtc2ltdWxhdG9yLXNldHRpbmdzIjoiIixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpKKGUse2NoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJTaW11bGF0b3IifSksSigic3BhbiIse30pXX0pLGNoaWxkcmVuOiFDP0ooImRpdiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS80NSB0ZXh0LVsxMXB4XSBweC0wLjUgcHktMSIsY2hpbGRyZW46IlNpbXVsYXRvciBzZXR0aW5ncyBhcmUgYXZhaWxhYmxlIG9uIGlPUyBzaW11bGF0b3JzIG9ubHkuIn0pOkooZSx7Y2hpbGRyZW46W0ImJkooImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIixjaGlsZHJlbjpCfSksSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT52b2lkIEwoKSxjbGFzc05hbWU6InNocmluay0wIGN1cnNvci1wb2ludGVyIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1kYW5nZXIvMzAgYmctdHJhbnNwYXJlbnQgcHgtMS41IHB5LTAuNSB0ZXh0LVsxMXB4XSB0ZXh0LWRhbmdlci1zb2Z0IixjaGlsZHJlbjoiUmV0cnkifSldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xLjUgcGItMS41IixjaGlsZHJlbjpbSihDMix7aWNvbjpVMi5hcHBlYXJhbmNlLGxhYmVsOiJBcHBlYXJhbmNlIixjaGlsZHJlbjpKKFEzLHtsYWJlbDoiQXBwZWFyYW5jZSIsdmFsdWU6QS5hcHBlYXJhbmNlPz8ibGlnaHQiLG9wdGlvbnM6SzMuYXBwZWFyYW5jZSxkaXNhYmxlZDohVXx8cT09PSJhcHBlYXJhbmNlIixvbkNoYW5nZTooVCk9PkYoImFwcGVhcmFuY2UiLFQpfSl9KSxKKEMyLHtpY29uOlUyLmdsYXNzLGxhYmVsOiJMaXF1aWQgR2xhc3MiLGNoaWxkcmVuOkooUTMse2xhYmVsOiJMaXF1aWQgR2xhc3MiLHZhbHVlOkFbImxpcXVpZC1nbGFzcyJdPz8iY2xlYXIiLG9wdGlvbnM6SzNbImxpcXVpZC1nbGFzcyJdLGRpc2FibGVkOiFVfHxxPT09ImxpcXVpZC1nbGFzcyIsb25DaGFuZ2U6KFQpPT5GKCJsaXF1aWQtZ2xhc3MiLFQpfSl9KSxKKEMyLHtpY29uOlUyLmZpbHRlcixsYWJlbDoiQ29sb3IgRmlsdGVyIixjaGlsZHJlbjpKKFEzLHtsYWJlbDoiQ29sb3IgRmlsdGVyIix2YWx1ZTpBWyJjb2xvci1maWx0ZXIiXT8/Im5vbmUiLG9wdGlvbnM6SzNbImNvbG9yLWZpbHRlciJdLGRpc2FibGVkOiFVfHxxPT09ImNvbG9yLWZpbHRlciIsb25DaGFuZ2U6KFQpPT5GKCJjb2xvci1maWx0ZXIiLFQpfSl9KSxKKEMyLHtpY29uOlUyLnRleHRTaXplLGxhYmVsOiJUZXh0IFNpemUiLGNoaWxkcmVuOkooUSQse3ZhbHVlOkUsZGlzYWJsZWQ6IVUsb25DaGFuZ2U6en0pfSksSyQubWFwKCh7a2V5OlQsbGFiZWw6Yn0pPT5KKEMyLHtpY29uOlUyW1Q9PT0icmVkdWNlLW1vdGlvbiI/Im1vdGlvbiI6VD09PSJpbmNyZWFzZS1jb250cmFzdCI/ImNvbnRyYXN0IjpUPT09InNob3ctYm9yZGVycyI/ImJvcmRlcnMiOlQ9PT0icmVkdWNlLXRyYW5zcGFyZW5jeSI/InRyYW5zcGFyZW5jeSI6InZvaWNlb3ZlciJdLGxhYmVsOmIsY2hpbGRyZW46SihRNSx7bGFiZWw6YixjaGVja2VkOkFbVF09PT0ib24iLGRpc2FibGVkOiFVfHxxPT09VCxvbkNoYW5nZTooeCk9PkYoVCx4PyJvbiI6Im9mZiIpfSl9LFQpKV19KV19KX0pfWZ1bmN0aW9uIGY5KHtvcGVuOiQsb25DbG9zZTpLLHVkaWQ6USxkZXZpY2VSdW50aW1lOlgsY3VycmVudEFwcDpaLGF4T3ZlcmxheUVuYWJsZWQ6WSxvblRvZ2dsZUF4T3ZlcmxheTpxLHdpZHRoOkd9KXtyZXR1cm4gSihoMCx7b3BlbjokLHdpZHRoOkcsY2hpbGRyZW46W0ooajAse2NoaWxkcmVuOltKKGEyLHtjaGlsZHJlbjoiVG9vbHMifSksSihyMix7b25DbGljazpLfSldfSksJCYmSigiZGl2Iix7Y2xhc3NOYW1lOiJwLTMuNSBvdmVyZmxvdy15LWF1dG8gZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTMiLGNoaWxkcmVuOltKKHk5LHt1ZGlkOlEsY3VycmVudEFwcDpafSksSihtOSx7dWRpZDpRLHJ1bnRpbWU6WH0pLEooeDkse292ZXJsYXlFbmFibGVkOlksb25Ub2dnbGVPdmVybGF5OnF9KSxKKGo5LHt1ZGlkOlEsYnVuZGxlSWQ6Wj8uYnVuZGxlSWQ/P251bGx9KSxKKEU5LHt1ZGlkOlEsZXhlYzpDMX0pLEooUzkse3VkaWQ6USxidW5kbGVJZDpaPy5idW5kbGVJZD8/bnVsbH0pXX0pXX0pfWZ1bmN0aW9uIEYyKCQsSyl7ZmV0Y2goZzEoImRldnRvb2xzL2hpZ2hsaWdodCIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dGFyZ2V0SWQ6JCxvbjpLfSksa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiBKMygpe2xldCAkPWcxKCJkZXZ0b29scy9yZWxlYXNlIik7dHJ5e2lmKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3Iuc2VuZEJlYWNvbil7bGV0IEs9bmV3IEJsb2IoWyJ7fSJdLHt0eXBlOiJhcHBsaWNhdGlvbi9qc29uIn0pO2lmKG5hdmlnYXRvci5zZW5kQmVhY29uKCQsSykpcmV0dXJufX1jYXRjaHt9ZmV0Y2goJCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6Int9IixrZWVwYWxpdmU6ITB9KS5jYXRjaCgoKT0+e30pfWZ1bmN0aW9uIHA5KCQpe2xldCBLPSQuY29udGVudERvY3VtZW50O2lmKCFLKXJldHVybjtsZXQgUT0oKT0+e2xldCBZPVtLXTt3aGlsZShZLmxlbmd0aCl7bGV0IHE9WS5wb3AoKSxHPXEucXVlcnlTZWxlY3RvckFsbCgiW2FyaWEtbGFiZWxdLFt0aXRsZV0iKTtmb3IobGV0IEIgb2YgRyl7bGV0IFY9Qi5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8Qi50aXRsZXx8IiI7aWYoL150b2dnbGUgc2NyZWVuY2FzdCQvaS50ZXN0KFYpKXJldHVybiBCfWZvcihsZXQgQiBvZiBxLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKSlpZihCLnNoYWRvd1Jvb3QpWS5wdXNoKEIuc2hhZG93Um9vdCl9cmV0dXJuIG51bGx9LFg9MCxaPSgpPT57WCsrO2xldCBZPVEoKTtpZihZJiZZLmdldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIikhPT0iZmFsc2UiKXtZLmNsaWNrKCk7cmV0dXJufWlmKFg8MjApc2V0VGltZW91dChaLDEwMCl9O1ooKX1mdW5jdGlvbiB1OSgkKXtsZXQgSz1bXSxRPW5ldyBNYXA7Zm9yKGxldCBYIG9mICQpe2xldCBaPVguYXBwTmFtZXx8WC5idW5kbGVJZHx8IlVua25vd24iLFk9WC5idW5kbGVJZHx8WixxPVEuZ2V0KFkpO2lmKCFxKXE9e2tleTpZLGFwcE5hbWU6WixidW5kbGVJZDpYLmJ1bmRsZUlkLHRhcmdldHM6W119LFEuc2V0KFkscSksSy5wdXNoKFkpO3EudGFyZ2V0cy5wdXNoKFgpfXJldHVybiBLLm1hcCgoWCk9PlEuZ2V0KFgpKX1mdW5jdGlvbiBsOSgkLEspe2xldFtRLFhdPUQoe30pLFo9TzEoKCk9Pksuc2xpY2UoKS5zb3J0KCkuam9pbigifCIpLFtLXSk7cmV0dXJuIEkoKCk9PntpZighJClyZXR1cm47bGV0IFk9ITE7Zm9yKGxldCBxIG9mIEspe2lmKCFxKWNvbnRpbnVlO2xldCBHPWAkeyR9OiR7cX1gLEI9ZjAuZ2V0KEcpO2lmKHR5cGVvZiBCPT09InN0cmluZyJ8fEI9PT1udWxsKXtYKChWKT0+VltxXT09PUI/Vjp7Li4uVixbcV06Qn0pO2NvbnRpbnVlfUk5KEMxLCQscSkudGhlbigoVik9PntpZihZKXJldHVybjtYKChDKT0+KHsuLi5DLFtxXTpWfSkpfSl9cmV0dXJuKCk9PntZPSEwfX0sWyQsWl0pLFF9ZnVuY3Rpb24gZDkoe3VkaWQ6JCx0YXJnZXRzOkssc2VsZWN0ZWQ6USxvblNlbGVjdFRhcmdldDpYLG9uUmVmcmVzaDpafSl7bGV0IFk9dTkoSykscT1ZLm1hcCgoeik9PnouYnVuZGxlSWQpLmZpbHRlcigoeik9PiEheiksRz1sOSgkLHEpLFtCLFZdPUQoITEpLFtDLExdPUQobnVsbCksRj1TKG51bGwpLE49UyhudWxsKTtJKCgpPT57aWYoIUIpcmV0dXJuO2xldCB6PShVKT0+e2lmKCFOLmN1cnJlbnQpcmV0dXJuO2lmKCFOLmN1cnJlbnQuY29udGFpbnMoVS50YXJnZXQpKVYoITEpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix6KSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix6KX0sW0JdKSxJKCgpPT57aWYoQilyZXR1cm47aWYoRi5jdXJyZW50KUYyKEYuY3VycmVudCwhMSksRi5jdXJyZW50PW51bGw7SjMoKX0sW0JdKSxJKCgpPT57bGV0IHo9KCk9PkozKCk7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIseiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIseiksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLHopLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLHopfX0sW10pO2xldCBfPVE/KFEudGl0bGV8fFEudXJsfHxRLmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApOiJTZWxlY3QgdGFyZ2V0IjtyZXR1cm4gSigiZGl2Iix7cmVmOk4sY2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwgbWluLXctMCIsY2hpbGRyZW46W0ooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+e1YoKHopPT57aWYoIXopWigpO3JldHVybiF6fSl9LGNsYXNzTmFtZToidy1mdWxsIG1pbi13LTAgaC1bMjZweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIGJnLXBhbmVsIHRleHQtd2hpdGUvOTAgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLW1kIHRleHQtWzEycHhdIHB4LTIgY3Vyc29yLXBvaW50ZXIgdGV4dC1sZWZ0IiwiYXJpYS1oYXNwb3B1cCI6Imxpc3Rib3giLCJhcmlhLWV4cGFuZGVkIjpCLCJhcmlhLWxhYmVsIjoiV2ViS2l0IHRhcmdldCIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIG1pbi13LTAiLGNoaWxkcmVuOl99KSxKKHQwLHtzaXplOjEyLHN0cm9rZVdpZHRoOjJ9KV19KSxCJiZKKCJ1bCIse3JvbGU6Imxpc3Rib3giLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNHB4KV0gbGVmdC0wIG0tMCBwLTEgbGlzdC1ub25lIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1sZyBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjUpXSBtaW4tdy1bMjIwcHhdIG1heC13LVszNjBweF0gbWF4LWgtWzMyMHB4XSBvdmVyZmxvdy15LWF1dG8gei01MCIsY2hpbGRyZW46WS5tYXAoKHopPT57bGV0IFU9ei5idW5kbGVJZD9HW3ouYnVuZGxlSWRdOm51bGw7cmV0dXJuIEooImxpIix7Y2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCIsY2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMS41IHB0LTEgcGItMC41IHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS9bMC45Ml0iLGNoaWxkcmVuOltVP0ooImltZyIse3NyYzpVLGFsdDoiIixjbGFzc05hbWU6InctNCBoLTQgcm91bmRlZC1bM3B4XSBzaHJpbmstMCBvYmplY3QtY292ZXIifSk6Sigic3BhbiIse2NsYXNzTmFtZToidy00IGgtNCByb3VuZGVkLVszcHhdIHNocmluay0wIG9iamVjdC1jb3ZlciIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46ei5hcHBOYW1lfSldfSksSigidWwiLHtyb2xlOiJncm91cCIsY2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCBwbC1bMjZweF0iLGNoaWxkcmVuOnoudGFyZ2V0cy5tYXAoKEEpPT57bGV0IE09UT8uaWQ9PT1BLmlkLEU9ISFBLmluVXNlQnlPdGhlckluc3BlY3RvciYmIU0sVD0oQS50aXRsZXx8QS51cmx8fEEuYXBwTmFtZXx8IlVudGl0bGVkIikuc2xpY2UoMCw5MCksYj1DPT09QS5pZCYmIUUseD0iZmxleCBmbGV4LWNvbCBweC0yIHB5LVszcHhdIHJvdW5kZWQgdGV4dC1bMTJweF0gbGVhZGluZy1bMS4zNV0iO3JldHVybiBKKCJsaSIse3JvbGU6Im9wdGlvbiIsImFyaWEtc2VsZWN0ZWQiOk0sImFyaWEtZGlzYWJsZWQiOkUsdGFiSW5kZXg6RT8tMTowLHRpdGxlOkU/IkFscmVhZHkgYmVpbmcgaW5zcGVjdGVkIGJ5IGFub3RoZXIgZGVidWdnZXIiOnZvaWQgMCxvbk1vdXNlRW50ZXI6KCk9PntpZihFKXJldHVybjtpZihGLmN1cnJlbnQmJkYuY3VycmVudCE9PUEuaWQpRjIoRi5jdXJyZW50LCExKTtGLmN1cnJlbnQ9QS5pZCxMKEEuaWQpLEYyKEEuaWQsITApfSxvbk1vdXNlTGVhdmU6KCk9PntpZihGLmN1cnJlbnQ9PT1BLmlkKUYyKEEuaWQsITEpLEYuY3VycmVudD1udWxsO0woKFIpPT5SPT09QS5pZD9udWxsOlIpfSxvbkNsaWNrOigpPT57aWYoRSlyZXR1cm47WChBLmlkKSxWKCExKX0sY2xhc3NOYW1lOmBmbGV4IGZsZXgtY29sIHB4LTIgcHktWzNweF0gcm91bmRlZCB0ZXh0LVsxMnB4XSBsZWFkaW5nLVsxLjM1XSAke0U/Im9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkIGl0YWxpYyB0ZXh0LXdoaXRlLzg1IjpiPyJiZy1bcmdiYSgxMCwxMzIsMjU1LDAuMjIpXSB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIjpNPyJiZy13aGl0ZS9bMC4wNl0gdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciI6InRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIifWAsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpUfSksQS51cmwmJkEudXJsIT09ImFib3V0OmJsYW5rIiYmSigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgZm9udC1tb25vIHRleHQtWzEwcHhdIHRleHQtd2hpdGUvWzAuNDJdIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpBLnVybH0pXX0sQS5pZCl9KX0pXX0sei5rZXkpfSl9KV19KX1mdW5jdGlvbiBjOSh7b3BlbjokLG9uQ2xvc2U6Syx1ZGlkOlEsdGFyZ2V0czpYLHNlbGVjdGVkVGFyZ2V0SWQ6WixvblNlbGVjdFRhcmdldDpZLGxvYWRpbmc6cSxlcnJvcjpHLG9uUmVmcmVzaDpCLHdpZHRoOlZ9KXtsZXQgQz1aP1guZmluZCgoTCk9PkwuaWQ9PT1aKT8/bnVsbDpudWxsO3JldHVybiBKKGgwLHtvcGVuOiQsd2lkdGg6VixjaGlsZHJlbjpbSihqMCx7Y2hpbGRyZW46W1gubGVuZ3RoPjA/SihkOSx7dWRpZDpRLHRhcmdldHM6WCxzZWxlY3RlZDpDLG9uU2VsZWN0VGFyZ2V0Olksb25SZWZyZXNoOkJ9KTpKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlL1swLjQ4XSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46cT8iTG9va2luZyBmb3IgU2FmYXJpIGFuZCBpbnNwZWN0YWJsZSB3ZWJ2aWV3cy4uLiI6Ik5vIGluc3BlY3RhYmxlIFNhZmFyaSBvciBXS1dlYlZpZXcgdGFyZ2V0cyJ9KSxKKHIyLHtvbkNsaWNrOkssYXJpYUxhYmVsOiJDbG9zZSBXZWJLaXQgRGV2VG9vbHMiLHRpdGxlOiJDbG9zZSIsaWNvblNpemU6MTV9KV19KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4taC0wIGJnLXdoaXRlIHJlbGF0aXZlIixjaGlsZHJlbjpHP0ooImRpdiIse2NsYXNzTmFtZToiaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNiBiZy1wYW5lbC1kZWVwIHRleHQtd2hpdGUvWzAuNThdIHRleHQtY2VudGVyIHRleHQtWzEzcHhdIixjaGlsZHJlbjpHfSk6QyYmJD9KKCJpZnJhbWUiLHtzcmM6Qy5kZXZ0b29sc0Zyb250ZW5kVXJsLHRpdGxlOmBXZWJLaXQgRGV2VG9vbHMgLSAke0MudGl0bGV8fEMudXJsfHxDLmlkfWAsY2xhc3NOYW1lOiJ3LWZ1bGwgaC1mdWxsIGJvcmRlci1ub25lIGJsb2NrIGJnLXdoaXRlIixvbkxvYWQ6KEwpPT5wOShMLmN1cnJlbnRUYXJnZXQpfSxDLmlkKTpKKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctcGFuZWwtZGVlcCB0ZXh0LXdoaXRlL1swLjU4XSB0ZXh0LWNlbnRlciB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46Qz8iRGV2VG9vbHMgcGF1c2VkIOKAlCBvcGVuIHRoZSBwYW5lbCB0byByZWF0dGFjaC4iOiJPcGVuIFNhZmFyaSBvciBhbiBpbnNwZWN0YWJsZSBXS1dlYlZpZXcgaW4gdGhlIHNpbXVsYXRvci4ifSl9KV19KX1mdW5jdGlvbiBYJCh7aG9zdFBhdGg6JCxleGVjOkssdWRpZDpRLG9uVXBsb2FkU3RhcnQ6WCxvblVwbG9hZFByb2dyZXNzOlosb25VcGxvYWRFbmQ6WSxvbkhvc3RQYXRoRHJvcDpxfSl7cT8uKCQpO2xldCBHPSQuc3BsaXQoIi8iKS5wb3AoKT8/ImltYWdlIixCPVgoRywibWVkaWEiKTtyZXR1cm4gWihCLG51bGwpLEM5KCQsSyxRKS50aGVuKCgpPT5ZKEIsITApKS5jYXRjaCgoVik9PlkoQiwhMSxWIGluc3RhbmNlb2YgRXJyb3I/Vi5tZXNzYWdlOiJBZGQgZmFpbGVkIikpfWZ1bmN0aW9uIG85KHtleGVjOiQsdWRpZDpLLGVuYWJsZWQ6USxvblVwbG9hZFN0YXJ0Olgsb25VcGxvYWRQcm9ncmVzczpaLG9uVXBsb2FkRW5kOlksb25VbnN1cHBvcnRlZDpxLG9uSG9zdFBhdGhEcm9wOkd9KXtsZXRbQixWXT1EKCExKSxDPVMoMCksTD1QKGFzeW5jKHopPT57aWYoei5wcmV2ZW50RGVmYXVsdCgpLHouc3RvcFByb3BhZ2F0aW9uKCksQy5jdXJyZW50PTAsVighMSksIVF8fCFLKXJldHVybjtsZXQgVT16LmRhdGFUcmFuc2Zlci5nZXREYXRhKCQ1KTtpZihVKXtYJCh7aG9zdFBhdGg6VSxleGVjOiQsdWRpZDpLLG9uVXBsb2FkU3RhcnQ6WCxvblVwbG9hZFByb2dyZXNzOlosb25VcGxvYWRFbmQ6WSxvbkhvc3RQYXRoRHJvcDpHfSk7cmV0dXJufWxldCBBPUFycmF5LmZyb20oei5kYXRhVHJhbnNmZXIuZmlsZXMpO2lmKEEubGVuZ3RoPT09MClyZXR1cm47Zm9yKGxldCBNIG9mIEEpe2xldCBFPVU5KE0pO2lmKCFFKXtxKE0pO2NvbnRpbnVlfWxldCBUPVgoTS5uYW1lLEUpO0g5KE0sRSwkLEssKGIpPT5aKFQsYikpLnRoZW4oKCk9PlkoVCwhMCkpLmNhdGNoKChiKT0+WShULCExLGIgaW5zdGFuY2VvZiBFcnJvcj9iLm1lc3NhZ2U6IlVwbG9hZCBmYWlsZWQiKSl9fSxbUSxLLCQsWCxaLFkscSxHXSksRj1QKCh6KT0+e2lmKHoucHJldmVudERlZmF1bHQoKSxRKXouZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbUV0pLE49UCgoeik9PntpZih6LnByZXZlbnREZWZhdWx0KCksIVEpcmV0dXJuO2lmKEMuY3VycmVudCsrLEMuY3VycmVudD09PTEpVighMCl9LFtRXSksXz1QKCh6KT0+e2lmKHoucHJldmVudERlZmF1bHQoKSxDLmN1cnJlbnQtLSxDLmN1cnJlbnQ8PTApQy5jdXJyZW50PTAsVighMSl9LFtdKTtyZXR1cm57aXNEcmFnT3ZlcjpCLGRyb3Bab25lUHJvcHM6e29uRHJhZ092ZXI6RixvbkRyYWdFbnRlcjpOLG9uRHJhZ0xlYXZlOl8sb25Ecm9wOkx9fX1mdW5jdGlvbiBhOSgkKXtsZXQgSz1TKG5ldyBTZXQpLFE9UCgoWCk9PntyZXR1cm4gSy5jdXJyZW50LmFkZChYKSwoKT0+e0suY3VycmVudC5kZWxldGUoWCl9fSxbXSk7cmV0dXJuIEkoKCk9PntpZighJClyZXR1cm47bGV0IFg9bmV3IEFib3J0Q29udHJvbGxlcixaPSExLFk9bnVsbCxxPW5ldyBVUkwoJCk7cS5zZWFyY2hQYXJhbXMuc2V0KCJyYXciLCIxIik7bGV0IEc9cS50b1N0cmluZygpLEI9KCk9PntpZihafHxYLnNpZ25hbC5hYm9ydGVkfHxZKXJldHVybjtZPXNldFRpbWVvdXQoKCk9PntZPW51bGwsQygpfSwxMDAwKX0sVj0oTCk9PntpZihLLmN1cnJlbnQuc2l6ZT09PTApcmV0dXJuO2xldCBGPVVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW0xdLHt0eXBlOiJpbWFnZS9qcGVnIn0pKTtmb3IobGV0IE4gb2YgSy5jdXJyZW50KU4oRil9LEM9YXN5bmMoKT0+e3RyeXtsZXQgRj0oYXdhaXQgZmV0Y2goRyx7c2lnbmFsOlguc2lnbmFsfSkpLmJvZHk/LmdldFJlYWRlcigpO2lmKCFGKXtCKCk7cmV0dXJufWxldCBOPW5ldyBVaW50OEFycmF5KDApLF89MCx6PTEwMjQsVT0oYix4KT0+e2xldCBtPU1hdGgubWluKGIubGVuZ3RoLTQseCt6KTtmb3IobGV0IFI9eDtSPD1tO1IrKylpZihiW1JdPT09MTMmJmJbUisxXT09PTEwJiZiW1IrMl09PT0xMyYmYltSKzNdPT09MTApcmV0dXJuIFI7cmV0dXJuLTF9LEE9bmV3IFRleHREZWNvZGVyKCJsYXRpbjEiKSxNPShiLHgsbSk9PntsZXQgUj1BLmRlY29kZShiLnN1YmFycmF5KHgsbSkpLG89L2NvbnRlbnQtbGVuZ3RoOlxzKihcZCspL2kuZXhlYyhSKTtyZXR1cm4gbz9OdW1iZXIob1sxXSk6bnVsbH0sRT0oYix4KT0+e2xldCBtPS0xO2ZvcihsZXQgUj14O1I8Yi5sZW5ndGgtMTtSKyspaWYoYltSXT09PTI1NSYmYltSKzFdPT09MjE2KXttPVI7YnJlYWt9aWYobT09PS0xKXJldHVybiBudWxsO2ZvcihsZXQgUj1tKzI7UjxiLmxlbmd0aC0xO1IrKylpZihiW1JdPT09MjU1JiZiW1IrMV09PT0yMTcpcmV0dXJue3M6bSxlOlIrMn07cmV0dXJuIG51bGx9LFQ9KCk9Pnt3aGlsZShfPE4ubGVuZ3RoKXtsZXQgYj1VKE4sXyk7aWYoYj49MCl7bGV0IG09TShOLF8sYik7aWYobSE9bnVsbCYmbT4wKXtsZXQgUj1iKzQsbz1SK207aWYoTi5sZW5ndGg8bylicmVhaztWKE4uc3ViYXJyYXkoUixvKSksXz1vO2NvbnRpbnVlfX1lbHNlIGlmKE4ubGVuZ3RoLV88PXopYnJlYWs7bGV0IHg9RShOLF8pO2lmKCF4KWJyZWFrO1YoTi5zdWJhcnJheSh4LnMseC5lKSksXz14LmV9aWYoXz4wKU49XzxOLmxlbmd0aD9OLnNsaWNlKF8pOm5ldyBVaW50OEFycmF5KDApLF89MH07d2hpbGUoITApe2xldHtkb25lOmIsdmFsdWU6eH09YXdhaXQgRi5yZWFkKCk7aWYoYilicmVhaztpZih4JiZ4Lmxlbmd0aCl7bGV0IG09bmV3IFVpbnQ4QXJyYXkoTi5sZW5ndGgreC5sZW5ndGgpO20uc2V0KE4pLG0uc2V0KHgsTi5sZW5ndGgpLE49bSxUKCl9fX1jYXRjaHt9ZmluYWxseXtCKCl9fTtyZXR1cm4gQygpLCgpPT57aWYoWj0hMCxZKWNsZWFyVGltZW91dChZKTtYLmFib3J0KCl9fSxbJF0pLHtzdWJzY3JpYmVGcmFtZTpRLGZyYW1lOm51bGx9fWZ1bmN0aW9uIHI5KCl7bGV0WyRdPUQoSDApO3JldHVybntzdXBwb3J0ZWQ6JH19ZnVuY3Rpb24gSjUoJCxLLFEsWCxaPSJsZWZ0Iil7bGV0IFk9UCgoRixOKT0+Wj09PSJsZWZ0Ij9GLU46Ti1GLFtaXSkscT1QKChGKT0+TWF0aC5tYXgoUSxNYXRoLm1pbihYLEYpKSxbUSxYXSksW0csQl09RCgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiBLO2xldCBGPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgkKSxOPUYhPW51bGw/TnVtYmVyKEYpOk5hTjtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKE4pP3EoTik6S30pLFY9dHlwZW9mIHdpbmRvdzwidSI/TWF0aC5taW4oWCx3aW5kb3cuaW5uZXJXaWR0aC0zMik6WCxDPU1hdGgubWF4KFEsTWF0aC5taW4oVixHKSksTD1QKChGKT0+e0YucHJldmVudERlZmF1bHQoKTtsZXQgTj1GLmNsaWVudFgsXz1DLHo9Ri5jdXJyZW50VGFyZ2V0O3ouc2V0UG9pbnRlckNhcHR1cmUoRi5wb2ludGVySWQpO2xldCBVPShNKT0+e2xldCBFPXEoXytZKE4sTS5jbGllbnRYKSk7QihFKX0sQT0oTSk9Pnt6LnJlbGVhc2VQb2ludGVyQ2FwdHVyZShNLnBvaW50ZXJJZCksei5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsVSksei5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLEEpLHoucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsQSk7dHJ5e3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgkLFN0cmluZyhxKF8rWShOLE0uY2xpZW50WCkpKSl9Y2F0Y2h7fX07ei5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsVSksei5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLEEpLHouYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsQSl9LFtxLFksQywkXSk7cmV0dXJue3dpZHRoOkMsb25Qb2ludGVyRG93bjpMfX12YXIgaTk9MzUwMCxuOT00MDAwO2Z1bmN0aW9uIFokKCl7cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9bOi5dL2csIi0iKS5zbGljZSgwLDIzKX1mdW5jdGlvbiBzOSgkKXtsZXRbSyxRXT1EKG51bGwpLFg9UyhudWxsKSxaPVMoaTkpLFk9UyhudWxsKTtJKCgpPT57WS5jdXJyZW50PUt9LFtLXSk7bGV0IHE9KCk9PntpZihYLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFguY3VycmVudCk7WC5jdXJyZW50PW51bGx9LEc9UCgoTixfKT0+e3EoKSxaLmN1cnJlbnQ9XyxYLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e1EoKHopPT56Py5pZD09PU4/ey4uLnoscGhhc2U6Im91dCJ9OnopfSxfKX0sW10pLEI9UCgoKT0+e3EoKSxZLmN1cnJlbnQ9bnVsbCxRKG51bGwpfSxbXSksVj1QKCgpPT57cSgpfSxbXSksQz1QKCgpPT57bGV0IE49WS5jdXJyZW50O2lmKE4mJk4ucGhhc2U9PT0iaW4iJiZOLnN0YXR1cyE9PSJzYXZpbmciKUcoTi5pZCxaLmN1cnJlbnQpfSxbR10pLEw9UCgoKT0+e2xldCBOPVkuY3VycmVudDtpZihOPy5wYXRoKUMxKGBvcGVuIC1SICR7WjEoTi5wYXRoKX1gKX0sW10pLEY9UChhc3luYygpPT57aWYoISQpcmV0dXJuO3EoKTtsZXQgTj1jcnlwdG8ucmFuZG9tVVVJRCgpO1Eoe2lkOk4sc3RhdHVzOiJzYXZpbmciLHBoYXNlOiJpbiJ9KTtsZXQgej1gRj0iJHtgJEhPTUUvRGVza3RvcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC0ke1okKCl9LnBuZ2B9IjsgeGNydW4gc2ltY3RsIGlvICR7WjEoJCl9IHNjcmVlbnNob3QgIiRGIiAmJiBwcmludGYgJyVzJyAiJEYiYCxVO3RyeXtsZXQgTT1hd2FpdCBDMSh6KTtpZihVPU0uc3Rkb3V0LnRyaW0oKSxNLmV4aXRDb2RlIT09MHx8IVUpe1Eoe2lkOk4sc3RhdHVzOiJlcnJvciIscGhhc2U6ImluIixtZXNzYWdlOk0uc3RkZXJyLnRyaW0oKXx8IlNjcmVlbnNob3QgZmFpbGVkIn0pLEcoTixuOSk7cmV0dXJufX1jYXRjaChNKXtRKHtpZDpOLHN0YXR1czoiZXJyb3IiLHBoYXNlOiJpbiIsbWVzc2FnZTpNIGluc3RhbmNlb2YgRXJyb3I/TS5tZXNzYWdlOiJTY3JlZW5zaG90IGZhaWxlZCJ9KSxHKE4sbjkpO3JldHVybn1RKHtpZDpOLHN0YXR1czoic2F2ZWQiLHBoYXNlOiJpbiIscGF0aDpVfSksRyhOLGk5KTtsZXQgQT1gL3RtcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC10aHVtYi0ke059LnBuZ2A7dHJ5e2xldCBFPShhd2FpdCBDMShgc2lwcyAtWiAzMjAgJHtaMShVKX0gLS1vdXQgJHtaMShBKX0gPi9kZXYvbnVsbCAyPiYxICYmIGJhc2U2NCAtaSAke1oxKEEpfTsgcm0gLWYgJHtaMShBKX1gKSkuc3Rkb3V0LnJlcGxhY2UoL1xzKy9nLCIiKTtpZihFKVEoKFQpPT5UPy5pZD09PU4/ey4uLlQsdGh1bWI6YGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke0V9YH06VCl9Y2F0Y2h7fX0sWyQsR10pO3JldHVybnt0b2FzdDpLLGNhcHR1cmU6RixyZXZlYWw6TCxkaXNtaXNzOkIscGF1c2U6VixyZXN1bWU6Q319ZnVuY3Rpb24gZTkoe2RlZmF1bHRXaWR0aDokLHZpZXdwb3J0V2lkdGg6Syx2aWV3cG9ydEhlaWdodDpRLGFzcGVjdFJhdGlvOlgsb25TdGFydDpafSl7bGV0IFk9bjIoKSxbcSxHXT1EKCExKSxbQixWXT1EKCExKSxbQyxMXT1EKCExKSxGPVMobnVsbCksTj1TKFtdKSxfPVMobnVsbCksej1TKG51bGwpLFU9UyhudWxsKSxBPVMobnVsbCksTT1QKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuICQ7bGV0IGs9TmFOO3RyeXtsZXQgdj13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oZDUpO2s9diE9bnVsbD9OdW1iZXIodik6TmFOfWNhdGNoe31yZXR1cm4gWTkoJCxLLFEsWCxrKX0sW1gsJCxRLEtdKSxFPU8xKCgpPT5NKCksW01dKSxbVCxiXT1EKEUpLHg9UyhFKSxtPVMoJCksUj1jNSgkLEssUSxYKSxvPU1hdGgubWluKHU4LFIpLGk9VD8/JCxYMT1rMChpLCQsSyxRLFgpLCQxPVAoKGspPT57bGV0IHY9ZTIoayk7eC5jdXJyZW50PXYsYih2KX0sW10pLHM9UCgoayk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8JDw9MClyZXR1cm47bGV0IHY9azAoaywkLEssUSxYKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGQ1LFN0cmluZyh2LyQpKX1jYXRjaHt9fSxbWCwkLFEsS10pLEwxPVAoKGspPT57aWYoVS5jdXJyZW50IT1udWxsKWNsZWFyVGltZW91dChVLmN1cnJlbnQpO1UuY3VycmVudD1zZXRUaW1lb3V0KCgpPT57VS5jdXJyZW50PW51bGwscyhrKX0sWjkpfSxbc10pO0koKCk9PntpZihxfHxCKXJldHVybjtsZXQgaz14LmN1cnJlbnQ7aWYoaz09bnVsbClyZXR1cm47bGV0IHY9azAoaywkLEssUSxYKTtpZih2IT09aykkMSh2KX0sW1gsJCxCLHEsUSxLLCQxXSksSSgoKT0+e2lmKG0uY3VycmVudD09PSQpcmV0dXJuO20uY3VycmVudD0kLCQxKE0oKSl9LFskLE0sJDFdKSxJKCgpPT57aWYoIXEmJiFCKXJldHVybjtsZXQgaz1kb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcix2PWRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCxwPWRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdDtyZXR1cm4gZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I9Im53c2UtcmVzaXplIixkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q9Im5vbmUiLGRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD0ibm9uZSIsKCk9Pntkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj1rLGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdD12LGRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD1wfX0sW3EsQl0pLEkoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm47bGV0IGs9KCk9PntsZXQgcD14LmN1cnJlbnQ7aWYocD09bnVsbClyZXR1cm47aWYoVS5jdXJyZW50IT1udWxsKWNsZWFyVGltZW91dChVLmN1cnJlbnQpLFUuY3VycmVudD1udWxsO3MocCl9LHY9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIilrKCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLGspLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHYpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixrKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix2KX19LFtzXSk7bGV0IGQ9UCgoayk9PntpZihrPlIpcmV0dXJuIFIrbzUoay1SLFIpO2lmKGs8bylyZXR1cm4gby1vNShvLWssUik7cmV0dXJuIGt9LFtSLG9dKSxhPVAoKCk9PntpZih6LmN1cnJlbnQpei5jdXJyZW50KCksei5jdXJyZW50PW51bGw7VighMSl9LFtdKSxLMT1QKChrKT0+e2xldCB2PXBlcmZvcm1hbmNlLm5vdygpLHA9Ti5jdXJyZW50O3AucHVzaCh7dDp2LHg6a30pO3doaWxlKHAubGVuZ3RoPjEmJnYtcFswXS50Plg5KXAuc2hpZnQoKX0sW10pLFkxPVAoKGspPT57bGV0IHY9ZChrKTtpZihfLmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoXy5jdXJyZW50KTtfLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57Xy5jdXJyZW50PW51bGwsJDEodiksSzEodil9KX0sW2QsSzEsJDFdKSxWMT1QKChrLHYscCk9PnthKCk7bGV0IHExPXguY3VycmVudD8/JDtGLmN1cnJlbnQ9e3BvaW50ZXJJZDprLHN0YXJ0WDp2LHN0YXJ0WTpwLHN0YXJ0V2lkdGg6cTF9LE4uY3VycmVudD1be3Q6cGVyZm9ybWFuY2Uubm93KCkseDpxMX1dLFooKSxHKCEwKX0sW2EsJCxaXSksYz1QKCgpPT57bGV0IGs9Ri5jdXJyZW50O2lmKEYuY3VycmVudD1udWxsLF8uY3VycmVudCE9bnVsbCljYW5jZWxBbmltYXRpb25GcmFtZShfLmN1cnJlbnQpLF8uY3VycmVudD1udWxsO2lmKGsmJmsucG9pbnRlcklkPj0wKXtsZXQgeDE9QS5jdXJyZW50O2lmKHgxPy5oYXNQb2ludGVyQ2FwdHVyZShrLnBvaW50ZXJJZCkpeDEucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGsucG9pbnRlcklkKX1HKCExKTtsZXQgdj14LmN1cnJlbnQ/PyQscD1WOShOLmN1cnJlbnQpO04uY3VycmVudD1bXTtsZXQgcTE9azAoditwKko5LCQsSyxRLFgpLE4xPWUyKHE5KHExLFskXSwkOSkpLF8xPU1hdGguYWJzKHYtTjEpPDAuNSYmTWF0aC5hYnMocCk8ODtpZihZfHxfMSl7JDEoTjEpLEwxKE4xKTtyZXR1cm59VighMCksei5jdXJyZW50PUc5KHtmcm9tOnYsdG86TjEsdmVsb2NpdHk6cCxzdGlmZm5lc3M6SzksZGFtcGluZzpROSxvblVwZGF0ZTokMSxvbkNvbXBsZXRlOigpPT57ei5jdXJyZW50PW51bGwsVighMSksTDEoTjEpfX0pfSxbWCwkLFksTDEsUSxLLCQxXSk7SSgoKT0+e3JldHVybigpPT57aWYoYSgpLF8uY3VycmVudCE9bnVsbCljYW5jZWxBbmltYXRpb25GcmFtZShfLmN1cnJlbnQpO2lmKFUuY3VycmVudCE9bnVsbCl7aWYoY2xlYXJUaW1lb3V0KFUuY3VycmVudCkseC5jdXJyZW50IT1udWxsKXMoeC5jdXJyZW50KX19fSxbYSxzXSksSSgoKT0+e2lmKCFxKXJldHVybjtsZXQgaz0oKT0+YygpLHY9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIiljKCl9LHA9KHExKT0+e2xldCBOMT1GLmN1cnJlbnQ7aWYoIU4xfHxOMS5wb2ludGVySWQhPT1xMS5wb2ludGVySWQpcmV0dXJuO3ExLnByZXZlbnREZWZhdWx0KCksWTEodDkoTjEscTEuY2xpZW50WCxxMS5jbGllbnRZLFgpKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIixrKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHAse2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLGssITApLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixrLCEwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix2KSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixrKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHAsITApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLGssITApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixrLCEwKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix2KX19LFtYLGMscSxZMV0pO2xldCBRMT1QKChrKT0+e2xldCB2PUYuY3VycmVudDtpZighdnx8di5wb2ludGVySWQhPT1rLnBvaW50ZXJJZClyZXR1cm47ay5wcmV2ZW50RGVmYXVsdCgpLGsuc3RvcFByb3BhZ2F0aW9uKCksYygpfSxbY10pLFUxPVAoKGspPT57aWYoay5idXR0b24hPT0wKXJldHVybjtrLnByZXZlbnREZWZhdWx0KCksay5zdG9wUHJvcGFnYXRpb24oKSxrLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoay5wb2ludGVySWQpLFYxKGsucG9pbnRlcklkLGsuY2xpZW50WCxrLmNsaWVudFkpfSxbVjFdKSx1PVAoKGspPT57bGV0IHY9Ri5jdXJyZW50O2lmKCF2fHx2LnBvaW50ZXJJZCE9PWsucG9pbnRlcklkKXJldHVybjtrLnByZXZlbnREZWZhdWx0KCksWTEodDkodixrLmNsaWVudFgsay5jbGllbnRZLFgpKX0sW1gsWTFdKSxqPVAoKGspPT57bGV0IHY9ay5rZXk9PT0iQXJyb3dSaWdodCJ8fGsua2V5PT09IkFycm93RG93biI/MTprLmtleT09PSJBcnJvd0xlZnQifHxrLmtleT09PSJBcnJvd1VwIj8tMTowO2lmKHY9PT0wKXJldHVybjtrLnByZXZlbnREZWZhdWx0KCksYSgpO2xldCBwPWsuc2hpZnRLZXk/ODA6MjQscTE9ZTIoazAoWDErdipwLCQsSyxRLFgpKTskMShxMSksTDEocTEpfSxbWCxhLFgxLCQsTDEsUSxLLCQxXSk7cmV0dXJue2hhbmRsZVJlZjpBLHdpZHRoOmksY29tbWl0dGVkV2lkdGg6WDEsbWluV2lkdGg6byxtYXhXaWR0aDpSLGlzUmVzaXppbmc6cSxpc0luZXJ0aWE6QixoYW5kbGVIb3ZlcmVkOkMsaGFuZGxlQWN0aXZlOkN8fHF8fEIsc2V0SGFuZGxlSG92ZXJlZDpMLG9uUG9pbnRlckRvd246VTEsb25Qb2ludGVyTW92ZTp1LG9uUG9pbnRlckVuZDpRMSxvbktleURvd246an19ZnVuY3Rpb24gdDkoJCxLLFEsWCl7bGV0IFo9Sy0kLnN0YXJ0WCxZPShRLSQuc3RhcnRZKSpYO3JldHVybiAkLnN0YXJ0V2lkdGgrKE1hdGguYWJzKFopPj1NYXRoLmFicyhZKT9aOlkpfWZ1bmN0aW9uICQ2KCl7bGV0WyQsS109RChbXSksUT1QKChZLHEpPT57bGV0IEc9Y3J5cHRvLnJhbmRvbVVVSUQoKTtyZXR1cm4gSygoQik9PlsuLi5CLHtpZDpHLG5hbWU6WSxraW5kOnEsc3RhdHVzOiJ1cGxvYWRpbmciLHByb2dyZXNzOjB9XSksR30sW10pLFg9UCgoWSxxKT0+e2lmKEsoKEcpPT5HLm1hcCgoQik9PkIuaWQ9PT1ZP3suLi5CLC4uLnF9OkIpKSxxLnN0YXR1cz09PSJzdWNjZXNzInx8cS5zdGF0dXM9PT0iZXJyb3IiKXNldFRpbWVvdXQoKCk9PntLKChHKT0+Ry5maWx0ZXIoKEIpPT5CLmlkIT09WSkpfSwzMDAwKX0sW10pLFo9UCgoWSxxKT0+e0soKEcpPT5HLm1hcCgoQik9PkIuaWQ9PT1ZP3suLi5CLHByb2dyZXNzOnF9OkIpKX0sW10pO3JldHVybnt0b2FzdHM6JCxhZGQ6USx1cGRhdGU6WCxzZXRQcm9ncmVzczpafX1mdW5jdGlvbiBLNigkLEspe2xldFtRLFhdPUQoW10pLFtaLFldPUQobnVsbCksW3EsR109RCghMSksQj1QKGFzeW5jKCk9PntpZighJClyZXR1cm47RyghMCksWShudWxsKTt0cnl7bGV0IFY9YXdhaXQgZmV0Y2goJCx7Y2FjaGU6Im5vLXN0b3JlIn0pLEM9YXdhaXQgVi5qc29uKCk7aWYoIVYub2t8fEMuZXJyb3IpdGhyb3cgRXJyb3IoQy5lcnJvcnx8IkZhaWxlZCB0byBsaXN0IFdlYktpdCB0YXJnZXRzIik7WChDLnRhcmdldHM/P1tdKX1jYXRjaChWKXtZKFYgaW5zdGFuY2VvZiBFcnJvcj9WLm1lc3NhZ2U6IkZhaWxlZCB0byBzdGFydCBXZWJLaXQgRGV2VG9vbHMiKX1maW5hbGx5e0coITEpfX0sWyRdKTtyZXR1cm4gSSgoKT0+e2lmKCFLKXJldHVybjtCKCk7bGV0IFY9c2V0SW50ZXJ2YWwoKCk9PnZvaWQgQigpLDI1MDApO3JldHVybigpPT5jbGVhckludGVydmFsKFYpfSxbSyxCXSkse3RhcmdldHM6USxlcnJvcjpaLGxvYWRpbmc6cSxyZWZyZXNoOkJ9fWZ1bmN0aW9uIFE2KCQsSyxRKXtsZXRbWCxaXT1EKG51bGwpLFtZLHFdPUQoMCk7SSgoKT0+e2lmKCFLfHwhJClyZXR1cm47bGV0IEI9ITEsVj1hc3luYygpPT57dHJ5e2xldCBGPWF3YWl0KGF3YWl0IGZldGNoKCQse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpO2lmKCFCKVooRi5kZXZpY2VzPz9bXSl9Y2F0Y2h7aWYoIUIpWihbXSl9fTtWKCk7bGV0IEM9c2V0SW50ZXJ2YWwoVixRPzc1MDozMDAwKTtyZXR1cm4oKT0+e0I9ITAsY2xlYXJJbnRlcnZhbChDKX19LFskLEssWSxRXSk7bGV0IEc9UCgoKT0+cSgoQik9PkIrMSksW10pO3JldHVybntkZXZpY2VzOlgscmVmcmVzaDpHfX12YXIgWDM9e3N0cmVhbWVkOiExLGZlbGxCYWNrOiExfTtmdW5jdGlvbiBKNigkLEspe3N3aXRjaChLKXtjYXNlImZyYW1lIjpyZXR1cm4gJC5zdHJlYW1lZD8kOnsuLi4kLHN0cmVhbWVkOiEwfTtjYXNlInRpbWVvdXQiOnJldHVybiAkLnN0cmVhbWVkfHwkLmZlbGxCYWNrPyQ6ey4uLiQsZmVsbEJhY2s6ITB9O2Nhc2UicmVzZXQiOnJldHVybiBYM319dmFyIFg2PTQwMDA7dmFyIFkkPXtLZXlBOjQsS2V5Qjo1LEtleUM6NixLZXlEOjcsS2V5RTo4LEtleUY6OSxLZXlHOjEwLEtleUg6MTEsS2V5SToxMixLZXlKOjEzLEtleUs6MTQsS2V5TDoxNSxLZXlNOjE2LEtleU46MTcsS2V5TzoxOCxLZXlQOjE5LEtleVE6MjAsS2V5UjoyMSxLZXlTOjIyLEtleVQ6MjMsS2V5VToyNCxLZXlWOjI1LEtleVc6MjYsS2V5WDoyNyxLZXlZOjI4LEtleVo6MjksRGlnaXQxOjMwLERpZ2l0MjozMSxEaWdpdDM6MzIsRGlnaXQ0OjMzLERpZ2l0NTozNCxEaWdpdDY6MzUsRGlnaXQ3OjM2LERpZ2l0ODozNyxEaWdpdDk6MzgsRGlnaXQwOjM5LEVudGVyOjQwLEVzY2FwZTo0MSxCYWNrc3BhY2U6NDIsVGFiOjQzLFNwYWNlOjQ0LE1pbnVzOjQ1LEVxdWFsOjQ2LEJyYWNrZXRMZWZ0OjQ3LEJyYWNrZXRSaWdodDo0OCxCYWNrc2xhc2g6NDksU2VtaWNvbG9uOjUxLFF1b3RlOjUyLEJhY2txdW90ZTo1MyxDb21tYTo1NCxQZXJpb2Q6NTUsU2xhc2g6NTYsQ2Fwc0xvY2s6NTcsRjE6NTgsRjI6NTksRjM6NjAsRjQ6NjEsRjU6NjIsRjY6NjMsRjc6NjQsRjg6NjUsRjk6NjYsRjEwOjY3LEYxMTo2OCxGMTI6NjksUHJpbnRTY3JlZW46NzAsU2Nyb2xsTG9jazo3MSxQYXVzZTo3MixJbnNlcnQ6NzMsSG9tZTo3NCxQYWdlVXA6NzUsRGVsZXRlOjc2LEVuZDo3NyxQYWdlRG93bjo3OCxBcnJvd1JpZ2h0Ojc5LEFycm93TGVmdDo4MCxBcnJvd0Rvd246ODEsQXJyb3dVcDo4MixOdW1Mb2NrOjgzLE51bXBhZERpdmlkZTo4NCxOdW1wYWRNdWx0aXBseTo4NSxOdW1wYWRTdWJ0cmFjdDo4NixOdW1wYWRBZGQ6ODcsTnVtcGFkRW50ZXI6ODgsTnVtcGFkMTo4OSxOdW1wYWQyOjkwLE51bXBhZDM6OTEsTnVtcGFkNDo5MixOdW1wYWQ1OjkzLE51bXBhZDY6OTQsTnVtcGFkNzo5NSxOdW1wYWQ4Ojk2LE51bXBhZDk6OTcsTnVtcGFkMDo5OCxOdW1wYWREZWNpbWFsOjk5LENvbnRyb2xMZWZ0OjIyNCxTaGlmdExlZnQ6MjI1LEFsdExlZnQ6MjI2LE1ldGFMZWZ0OjIyNyxDb250cm9sUmlnaHQ6MjI4LFNoaWZ0UmlnaHQ6MjI5LEFsdFJpZ2h0OjIzMCxNZXRhUmlnaHQ6MjMxfTtmdW5jdGlvbiBaNigkKXtyZXR1cm4gWSRbJF0/P251bGx9dmFyIFozPTMyMCxZNj03NjAsWTM9MzAwO2Z1bmN0aW9uIHE2KCQsSyl7bGV0IFE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KEspKSxYPW5ldyBVaW50OEFycmF5KDErUS5sZW5ndGgpO3JldHVybiBYWzBdPSQsWC5zZXQoUSwxKSxYfWZ1bmN0aW9uIHEkKCQsSyxRPTMyKXtsZXQgWD1bLi4uJCxLXTtyZXR1cm4gWC5sZW5ndGg+UT9YLnNsaWNlKFgubGVuZ3RoLVEpOlh9ZnVuY3Rpb24gcTMoJCxLLFE9RGF0ZS5ub3coKSxYPTE1MDApe2xldCBaPUsuZmlsdGVyKChZKT0+US1ZLmNyZWF0ZWRBdDw9WCk7aWYoISR8fCQucmVhZHlTdGF0ZSE9PTEpcmV0dXJuIFo7Zm9yKGxldCBZIG9mIFopJC5zZW5kKHE2KFkudGFnLFkucGF5bG9hZCkuYnVmZmVyKTtyZXR1cm5bXX1mdW5jdGlvbiBHNigkLEssUSxYLFo9RGF0ZS5ub3coKSl7bGV0IFk9cTMoJCxLLFopO2lmKCQ/LnJlYWR5U3RhdGU9PT0xKXJldHVybiAkLnNlbmQocTYoUSxYKS5idWZmZXIpLFk7cmV0dXJuIHEkKFkse3RhZzpRLHBheWxvYWQ6WCxjcmVhdGVkQXQ6Wn0pfXZhciBHJD17cG9ydHJhaXQ6ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXQifSxWJD17cG9ydHJhaXQ6ImxhbmRzY2FwZV9yaWdodCIsbGFuZHNjYXBlX3JpZ2h0OiJwb3J0cmFpdF91cHNpZGVfZG93biIscG9ydHJhaXRfdXBzaWRlX2Rvd246ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXQifTtmdW5jdGlvbiBWNigkKXtyZXR1cm4gJD9gJHskLmRldmljZX06JHskLnBpZH06JHskLnN0cmVhbVVybH06JHskLndzVXJsfWA6IiJ9ZnVuY3Rpb24gQiQoe29wZW46JCxvbkNsaWNrOkt9KXtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOmBmaXhlZCB0b3AtMyBsZWZ0LTMgZmxleCBmbGV4LWNvbCBnYXAtMSBwLTEgW3RyYW5zaXRpb246b3BhY2l0eV8wLjE4c19lYXNlXSB6LTQwICR7JD8ib3BhY2l0eS0wIHBvaW50ZXItZXZlbnRzLW5vbmUiOiJvcGFjaXR5LTEwMCBwb2ludGVyLWV2ZW50cy1hdXRvIn1gLGNoaWxkcmVuOkooImJ1dHRvbiIse29uQ2xpY2s6SyxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIGRldmljZXMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6JCx0aXRsZToiRGV2aWNlcyIsY2hpbGRyZW46SihzMSx7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KX0pfWZ1bmN0aW9uIE4kKCl7bGV0WyQsS109RCgoKT0+dTIod2luZG93Ll9fU0lNX1BSRVZJRVdfXykpLFtRLFhdPUQoITEpLFtaLFldPUQoKCk9PntsZXQgaj11Mih3aW5kb3cuX19TSU1fUFJFVklFV19fKTtpZihqKXJldHVybiBqLmRldmljZTtyZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoImRldmljZSIpfSksW3EsR109RCghMSksW0IsVl09RCghMSksW0MsTF09RCgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aD49WTMrNTIwfSkse3dpZHRoOkYsb25Qb2ludGVyRG93bjpOfT1KNSgic2VydmUtc2ltOmRldmljZS1zaWRlYmFyLXdpZHRoIixZMywyNDAsNjQwLCJyaWdodCIpLFtfLHpdPUQobnVsbCksVT13aW5kb3cuX19TSU1fUFJFVklFV19fLEE9VT8uZ3JpZEFwaUVuZHBvaW50Pz9nMSgiZ3JpZC9hcGkiKSxNPVU/LmdyaWRTdGFydEVuZHBvaW50Pz9nMSgiZ3JpZC9hcGkvc3RhcnQiKSxFPVU/LmdyaWRTaHV0ZG93bkVuZHBvaW50Pz9nMSgiZ3JpZC9hcGkvc2h1dGRvd24iKSxbVCxiXT1EKHt9KSxbeCxtXT1EKHt9KSxbUixvXT1EKHt9KSxbaSxYMV09RCgoKT0+bmV3IFNldCksJDE9T2JqZWN0LnZhbHVlcyhUKS5zb21lKEJvb2xlYW4pfHxPYmplY3QudmFsdWVzKHgpLnNvbWUoQm9vbGVhbikse2RldmljZXM6cyxyZWZyZXNoOkwxfT1RNihBLCEwLCQxKSxkPSEhKFomJnM/LmZpbmQoKGopPT5qLmRldmljZT09PVopPy5oZWxwZXIpLGE9UCgoaik9PntZKGopO3RyeXtsZXQgaz1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtrLnNlYXJjaFBhcmFtcy5zZXQoImRldmljZSIsaiksd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIiIsay50b1N0cmluZygpKX1jYXRjaHt9fSxbXSksSzE9UChhc3luYyhqLGs9MjAwMDApPT57bGV0IHY9RGF0ZS5ub3coKStrO3doaWxlKERhdGUubm93KCk8dil7dHJ5e2lmKCgoYXdhaXQoYXdhaXQgZmV0Y2goQSx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCkpLmRldmljZXM/P1tdKS5zb21lKChOMSk9Pk4xLmRldmljZT09PWomJk4xLmhlbHBlcikpcmV0dXJuITB9Y2F0Y2h7fWF3YWl0IG5ldyBQcm9taXNlKChwKT0+c2V0VGltZW91dChwLDQwMCkpfXJldHVybiExfSxbQV0pLFkxPVAoYXN5bmMoaik9PntiKChrKT0+KHsuLi5rLFtqXTohMH0pKSxvKChrKT0+KHsuLi5rLFtqXTpudWxsfSkpO3RyeXtsZXQgaz1hd2FpdCBmZXRjaChNLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpqfSl9KSx2PWF3YWl0IGsuanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZighay5va3x8IXYub2spe28oKHApPT4oey4uLnAsW2pdOnYuZXJyb3I/P2BIVFRQICR7ay5zdGF0dXN9YH0pKTtyZXR1cm59WDEoKHApPT5wLmhhcyhqKT9wOm5ldyBTZXQocCkuYWRkKGopKSxhd2FpdCBLMShqKX1jYXRjaChrKXtvKCh2KT0+KHsuLi52LFtqXTprPy5tZXNzYWdlPz8iUmVxdWVzdCBmYWlsZWQifSkpfWZpbmFsbHl7Yigoayk9Pih7Li4uayxbal06ITF9KSksTDEoKX19LFtNLEsxLEwxXSksVjE9UChhc3luYyhqKT0+e20oKGspPT4oey4uLmssW2pdOiEwfSkpLG8oKGspPT4oey4uLmssW2pdOm51bGx9KSk7dHJ5e2xldCBrPWF3YWl0IGZldGNoKEUse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHt1ZGlkOmp9KX0pLHY9YXdhaXQgay5qc29uKCkuY2F0Y2goKCk9Pih7fSkpO2lmKCFrLm9rfHwhdi5vaylvKChwKT0+KHsuLi5wLFtqXTp2LmVycm9yPz9gSFRUUCAke2suc3RhdHVzfWB9KSl9Y2F0Y2goayl7bygodik9Pih7Li4udixbal06az8ubWVzc2FnZT8/IlJlcXVlc3QgZmFpbGVkIn0pKX1maW5hbGx5e20oKGspPT4oey4uLmssW2pdOiExfSkpLEwxKCl9fSxbRSxMMV0pO0koKCk9PntpZihaKXJldHVybjtpZigkPy5kZXZpY2Upe1koJC5kZXZpY2UpO3JldHVybn1pZighc3x8cy5sZW5ndGg9PT0wKXJldHVybjtsZXQgaj1zLmZpbmQoKGspPT5rLmhlbHBlcik/P3MuZmluZCgoayk9Pmsuc3RhdGU9PT0iQm9vdGVkIik/P3NbMF07aWYoailZKGouZGV2aWNlKX0sW1osJD8uZGV2aWNlLHNdKSxJKCgpPT57bGV0IGo9YCR7ZzEoImFwaS9ldmVudHMiKX0ke1o/YD9kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoWil9YDoiIn1gLGs9KHApPT57SygocTEpPT57aWYoVjYocTEpPT09VjYocCkpcmV0dXJuIHExO2lmKHApd2luZG93Ll9fU0lNX1BSRVZJRVdfXz1wO2Vsc2UgaWYod2luZG93Ll9fU0lNX1BSRVZJRVdfXyl7bGV0e2Jhc2VQYXRoOk4xLGV4ZWNUb2tlbjpfMX09d2luZG93Ll9fU0lNX1BSRVZJRVdfXzt3aW5kb3cuX19TSU1fUFJFVklFV19fPXtiYXNlUGF0aDpOMSxleGVjVG9rZW46XzF9fXJldHVybiBwfSl9LHY9TDIoaik7cmV0dXJuIHYub25tZXNzYWdlPShwKT0+e3RyeXtrKHUyKEpTT04ucGFyc2UocC5kYXRhKSkpfWNhdGNoe319LCgpPT52LmNsb3NlKCl9LFtaLGRdKTtsZXQgYz1aPz8kPy5kZXZpY2U/P251bGwsUTE9cz8uZmluZCgoaik9PmouZGV2aWNlPT09Yyk/P251bGwsVTE9ISEkJiYkLmRldmljZT09PWMsdTtpZihVMSYmJCl1PUooTCQse2NvbmZpZzokLGRldmljZU5hbWU6UTE/Lm5hbWU/P251bGwsZGV2aWNlUnVudGltZTpRMT8ucnVudGltZT8/bnVsbCxwcmVmZXJNanBlZzppLmhhcygkLmRldmljZSksYXhPdmVybGF5RW5hYmxlZDpxLHNldEF4T3ZlcmxheUVuYWJsZWQ6RyxkZXZ0b29sc09wZW46QixzZXREZXZ0b29sc09wZW46VixncmlkT3BlbjpDLHNldEdyaWRPcGVuOkwsZ3JpZFBhbmVsV2lkdGg6RixzZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6XyxzZXRTZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6eixzdHJlYW1pbmc6USxzZXRTdHJlYW1pbmc6WH0pO2Vsc2V7bGV0IGo9Qz9GKzM2OjI0O3U9SigiZGl2Iix7Y2xhc3NOYW1lOiJoLXNjcmVlbiBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMyBiZy1wYWdlIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIgW3RyYW5zaXRpb246cGFkZGluZ18wLjI1c19lYXNlXSIsc3R5bGU6e3BhZGRpbmdMZWZ0OmoscGFkZGluZ1JpZ2h0OjI0fSxjaGlsZHJlbjpRMT9KKHg4LHtuYW1lOlExLm5hbWUscnVudGltZTpRMS5ydW50aW1lLGNocm9tZTpRMS5jaHJvbWU/P251bGwscGxhY2Vob2xkZXJBc3NldDpRMS5wbGFjZWhvbGRlckFzc2V0Pz9udWxsLGJ1c3k6ISFRMS5oZWxwZXJ8fCEhVFtRMS5kZXZpY2VdLGJ1c3lMYWJlbDpRMS5oZWxwZXI/IkNvbm5lY3RpbmfigKYiOiJTdGFydGluZ+KApiIsZXJyb3I6UltRMS5kZXZpY2VdPz9udWxsLG9uU3RhcnQ6KCk9PlkxKFExLmRldmljZSl9KTpKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtY2VudGVyIixjaGlsZHJlbjpbSigiaDEiLHtjbGFzc05hbWU6InRleHQtWzE4cHhdIG0tMCB0ZXh0LXdoaXRlLzkwIixjaGlsZHJlbjoiTm8gc2ltdWxhdG9ycyBhdmFpbGFibGUifSksSigicCIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81NSB0ZXh0LVsxNHB4XSBtYXgtdy0xMjAiLGNoaWxkcmVuOlsiQ3JlYXRlIGEgc2ltdWxhdG9yIGluIFhjb2RlLCBvciBzdGFydCBvbmUgd2l0aCIsIiAiLEooImNvZGUiLHtjbGFzc05hbWU6ImJnLVsjMjIyXSBweC0xLjUgcHktMC41IHJvdW5kZWQgdGV4dC1bMTNweF0iLGNoaWxkcmVuOiJidW54IHNlcnZlLXNpbS1zamNobWllbGEgLS1kZXRhY2gifSksIi4iXX0pXX0pfSl9cmV0dXJuIEooZSx7Y2hpbGRyZW46W3UsSihmOCx7b3BlbjpDLG9uQ2xvc2U6KCk9PkwoITEpLHdpZHRoOkYsc2lkZToibGVmdCIsZGV2aWNlczpzLHNlbGVjdGVkVWRpZDpjLG9uU2VsZWN0OmEsc3RhcnRpbmc6VCxzaHV0dGluZ0Rvd246eCxvblNodXRkb3duOlYxfSksSihpMix7cGFuZWxXaWR0aDpGLHZpc2libGU6QyxvblBvaW50ZXJEb3duOk4sYXJpYUxhYmVsOiJSZXNpemUgc2ltdWxhdG9ycyBzaWRlYmFyIixzaWRlOiJsZWZ0In0pLEooQiQse29wZW46QyxvbkNsaWNrOigpPT5MKCEwKX0pXX0pfWZ1bmN0aW9uIEwkKHtjb25maWc6JCxkZXZpY2VOYW1lOkssZGV2aWNlUnVudGltZTpRLHByZWZlck1qcGVnOlgsYXhPdmVybGF5RW5hYmxlZDpaLHNldEF4T3ZlcmxheUVuYWJsZWQ6WSxkZXZ0b29sc09wZW46cSxzZXREZXZ0b29sc09wZW46RyxncmlkT3BlbjpCLHNldEdyaWRPcGVuOlYsZ3JpZFBhbmVsV2lkdGg6QyxzZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6TCxzZXRTZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6RixzdHJlYW1pbmc6TixzZXRTdHJlYW1pbmc6X30pe0koKCk9Pntkb2N1bWVudC50aXRsZT1LP2BTaW11bGF0b3IgLSAke0t9YDoiU2ltdWxhdG9yIFByZXZpZXcifSxbS10pO2xldCB6PW4xKEspLFU9SzYoJC5kZXZ0b29sc0VuZHBvaW50Pz9nMSgiZGV2dG9vbHMiKSxxKTtJKCgpPT57aWYoIXEpcmV0dXJuO2lmKEwmJlUudGFyZ2V0cy5zb21lKCh3KT0+dy5pZD09PUwpKXJldHVybjtGKFUudGFyZ2V0cy5sZW5ndGg9PT0xP1UudGFyZ2V0c1swXS5pZDpudWxsKX0sW3EsVS50YXJnZXRzLEwsRl0pLEkoKCk9PntGKG51bGwpfSxbJC5kZXZpY2UsRl0pO2xldCBBPXI5KCksW00sRV09YzAoSjYsWDMpLFtUXT1EKCgpPT5uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgiY29kZWMiKT09PSJtanBlZyIpLGI9QS5zdXBwb3J0ZWQmJiFNLmZlbGxCYWNrJiYhWCYmIVQseD1hOShiP251bGw6JC5zdHJlYW1VcmwpO0koKCk9PntfKCExKSxFKCJyZXNldCIpfSxbJC5zdHJlYW1VcmwsX10pLEkoKCk9PntpZihiJiZOKUUoImZyYW1lIil9LFtiLE5dKSxJKCgpPT57aWYoIWIpcmV0dXJuO2xldCB3PXNldFRpbWVvdXQoKCk9PkUoInRpbWVvdXQiKSxYNik7cmV0dXJuKCk9PmNsZWFyVGltZW91dCh3KX0sW2IsJC5zdHJlYW1VcmxdKTtsZXRbbSxSXT1EKG51bGwpLFtvLGldPUQobnVsbCksWDE9bywkMT1tPz9YMT8/UzAoeixLKSxzPVMyKHosJDEpLEwxPVIwKHosJDEpLGQ9YjIoJDEpLGE9YjAoJDEpLEsxPWE/YS53aWR0aC9hLmhlaWdodDoxLFkxPVMobnVsbCksVjE9UyhbXSk7SSgoKT0+e2xldCB3PSExLEg9bnVsbCxnPW51bGw7VjEuY3VycmVudD1bXTtsZXQgaD0oKT0+e2lmKHd8fEgpcmV0dXJuO0g9c2V0VGltZW91dCgoKT0+e0g9bnVsbCxuKCl9LDEwMDApfSxuPSgpPT57bGV0IEoxPW5ldyBXZWJTb2NrZXQoJC53c1VybCk7SjEuYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLGc9SjEsWTEuY3VycmVudD1KMSxKMS5vbm9wZW49KCk9PntWMS5jdXJyZW50PXEzKEoxLFYxLmN1cnJlbnQpfSxKMS5vbm1lc3NhZ2U9KEIxKT0+e2lmKCEoQjEuZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm47bGV0IHcxPW5ldyBVaW50OEFycmF5KEIxLmRhdGEpO2lmKHcxLmxlbmd0aDwxfHx3MVswXSE9PTEzMClyZXR1cm47dHJ5e2xldCBXPUpTT04ucGFyc2UobmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKHcxLnN1YmFycmF5KDEpKSk7aWYoVy53aWR0aDw9MHx8Vy5oZWlnaHQ8PTApcmV0dXJuO2koKE8pPT5PJiZPLndpZHRoPT09Vy53aWR0aCYmTy5oZWlnaHQ9PT1XLmhlaWdodCYmTy5vcmllbnRhdGlvbj09PVcub3JpZW50YXRpb24/TzpXKX1jYXRjaHt9fSxKMS5vbmNsb3NlPSgpPT57aWYoWTEuY3VycmVudD09PUoxKVkxLmN1cnJlbnQ9bnVsbDtoKCl9LEoxLm9uZXJyb3I9KCk9PntKMS5jbG9zZSgpfX07cmV0dXJuIG4oKSwoKT0+e2lmKHc9ITAsSCljbGVhclRpbWVvdXQoSCk7aWYoWTEuY3VycmVudD09PWcpWTEuY3VycmVudD1udWxsO2c/LmNsb3NlKCl9fSxbJC53c1VybF0pO2xldCBjPVAoKHcsSCk9PntWMS5jdXJyZW50PUc2KFkxLmN1cnJlbnQsVjEuY3VycmVudCx3LEgpfSxbXSksUTE9UCgodyk9PmMoMyx3KSxbY10pLFUxPVAoKHcpPT5jKDUsdyksW2NdKSx1PVAoKHcpPT5jKDQse2J1dHRvbjp3fSksW2NdKSxqPVAoKHcpPT5jKDEwLHtkZWx0YTp3fSksW2NdKSxrPVAoKHcpPT57UigoSCk9PkgmJkgud2lkdGg9PT13LndpZHRoJiZILmhlaWdodD09PXcuaGVpZ2h0JiZILm9yaWVudGF0aW9uPT09dy5vcmllbnRhdGlvbj9IOncpfSxbXSksdj1QKCh3KT0+e2MoNyx7b3JpZW50YXRpb246d30pfSxbY10pLHA9JDEub3JpZW50YXRpb24/PyJwb3J0cmFpdCIscTE9eiE9PSJ3YXRjaCImJnohPT0idmlzaW9uIixOMT1QKCh3KT0+e2lmKCFxMSlyZXR1cm47bGV0IEg9KHc9PT0ibGVmdCI/RyQ6ViQpW3BdO3YoSCl9LFtxMSxwLHZdKTtJKCgpPT57UihudWxsKSxpKG51bGwpfSxbJC5zdHJlYW1VcmxdKSxJKCgpPT57bGV0IHc9WDE7aWYoIXcpcmV0dXJuO1IoKEgpPT5IJiZILndpZHRoPT09dy53aWR0aCYmSC5oZWlnaHQ9PT13LmhlaWdodCYmSC5vcmllbnRhdGlvbj09PXcub3JpZW50YXRpb24/SDpudWxsKX0sW1gxLFgxPy53aWR0aCxYMT8uaGVpZ2h0LFgxPy5vcmllbnRhdGlvbl0pO2xldCBfMT1QKCh3LEgpPT57Yyg2LHt0eXBlOncsdXNhZ2U6SH0pfSxbY10pLFt4MSxUMV09RChudWxsKSxbaDEsdjFdPUQoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4hMTtsZXQgdz1OdW1iZXIod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJzZXJ2ZS1zaW06dG9vbHMtcGFuZWwtd2lkdGgiKSksSD1OdW1iZXIuaXNGaW5pdGUodykmJnc+MD93OlozO3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aD49SCs0ODB9KSx7d2lkdGg6YzEsb25Qb2ludGVyRG93bjpJMX09SjUoInNlcnZlLXNpbTp0b29scy1wYW5lbC13aWR0aCIsWjMsMjQwLDcyMCkse3dpZHRoOm8xLG9uUG9pbnRlckRvd246YTF9PUo1KCJzZXJ2ZS1zaW06ZGV2dG9vbHMtcGFuZWwtd2lkdGgiLFk2LDQyMCwxNDAwKSxbeTEsWTBdPUQoKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lcldpZHRoOjApLFtlMSxqMV09RCgoKT0+dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmlubmVySGVpZ2h0OjApO0koKCk9PntsZXQgdz0oKT0+e1kwKHdpbmRvdy5pbm5lcldpZHRoKSxqMSh3aW5kb3cuaW5uZXJIZWlnaHQpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdyksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHcpfSxbXSksSSgoKT0+e2xldCB3PUwyKCQuYXBwU3RhdGVFbmRwb2ludD8/ZzEoImFwcHN0YXRlIikpLEg9bnVsbDtyZXR1cm4gdy5vbm1lc3NhZ2U9KGcpPT57dHJ5e2xldCBoPUpTT04ucGFyc2UoZy5kYXRhKTtpZihIKWNsZWFyVGltZW91dChIKTtsZXQgbj1oPy5pc1JlYWN0TmF0aXZlPzA6NjAwO0g9c2V0VGltZW91dCgoKT0+VDEoaCksbil9Y2F0Y2h7fX0sKCk9PntpZihIKWNsZWFyVGltZW91dChIKTt3LmNsb3NlKCl9fSxbJC5hcHBTdGF0ZUVuZHBvaW50XSk7bGV0ICQwPVAoYXN5bmMoKT0+e18xKCJkb3duIiwyMjcpLGF3YWl0IG5ldyBQcm9taXNlKChnKT0+c2V0VGltZW91dChnLDMwKSksXzEoImRvd24iLDIxKSxhd2FpdCBuZXcgUHJvbWlzZSgoZyk9PnNldFRpbWVvdXQoZywzMCkpLF8xKCJ1cCIsMjEpLGF3YWl0IG5ldyBQcm9taXNlKChnKT0+c2V0VGltZW91dChnLDMwKSksXzEoInVwIiwyMjcpfSxbXzFdKSxLMD1TKG51bGwpLFtNMSxiMV09RCgwKSxbcTAsVTBdPUQoMCk7SSgoKT0+e2xldCB3PUswLmN1cnJlbnQ7aWYoIXd8fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCBIPW5ldyBSZXNpemVPYnNlcnZlcigoZyk9PntsZXQgaD1nWzBdPy5jb250ZW50UmVjdDtiMShoPy53aWR0aD8/MCksVTAoaD8uaGVpZ2h0Pz8wKX0pO3JldHVybiBILm9ic2VydmUodyksKCk9PkguZGlzY29ubmVjdCgpfSxbXSk7bGV0W3UxLEcwXT1EKCEwKSx6MD1TKCEwKTt6MC5jdXJyZW50PXUxO2xldCBWMD1TKG5ldyBTZXQpO0koKCk9PntsZXQgdz0oSCk9PntsZXQgZz0hIUswLmN1cnJlbnQ/LmNvbnRhaW5zKEgudGFyZ2V0KTtHMChnKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIix3LCEwKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHcsITApfSxbXSksSSgoKT0+e2lmKHUxKXJldHVybjtsZXQgdz1WMC5jdXJyZW50O2lmKHcuc2l6ZT09PTApcmV0dXJuO2ZvcihsZXQgSCBvZiB3KWMoNix7dHlwZToidXAiLHVzYWdlOkh9KTt3LmNsZWFyKCl9LFt1MSxjXSksSSgoKT0+e2xldCB3PShoLG4pPT57aWYoIXowLmN1cnJlbnQpcmV0dXJuO2lmKGguY29kZT09PSJLZXlIIiYmaC5tZXRhS2V5JiZoLnNoaWZ0S2V5KXtpZihoLnByZXZlbnREZWZhdWx0KCksbj09PSJkb3duIiYmIWgucmVwZWF0KWMoNCx7YnV0dG9uOiJob21lIn0pO3JldHVybn1pZigoaC5jb2RlPT09IkFycm93TGVmdCJ8fGguY29kZT09PSJBcnJvd1JpZ2h0IikmJmgubWV0YUtleSYmIWguc2hpZnRLZXkmJiFoLmFsdEtleSYmIWguY3RybEtleSl7aWYoaC5wcmV2ZW50RGVmYXVsdCgpLG49PT0iZG93biImJiFoLnJlcGVhdClOMShoLmNvZGU9PT0iQXJyb3dMZWZ0Ij8ibGVmdCI6InJpZ2h0Iik7cmV0dXJufWlmKGguY29kZT09PSJLZXlBIiYmaC5tZXRhS2V5JiZoLnNoaWZ0S2V5KXtpZihoLnByZXZlbnREZWZhdWx0KCksbj09PSJkb3duIiYmIWgucmVwZWF0KUMxKGB4Y3J1biBzaW1jdGwgdWkgJHskLmRldmljZX0gYXBwZWFyYW5jZWApLnRoZW4oKEIxKT0+e2xldCB3MT1CMS5zdGRvdXQudHJpbSgpPT09ImRhcmsiPyJsaWdodCI6ImRhcmsiO3JldHVybiBDMShgeGNydW4gc2ltY3RsIHVpICR7JC5kZXZpY2V9IGFwcGVhcmFuY2UgJHt3MX1gKX0pLmNhdGNoKCgpPT57fSk7cmV0dXJufWxldCBKMT1aNihoLmNvZGUpO2lmKEoxPT1udWxsKXJldHVybjtpZihoLnByZXZlbnREZWZhdWx0KCksbj09PSJkb3duIilWMC5jdXJyZW50LmFkZChKMSk7ZWxzZSBWMC5jdXJyZW50LmRlbGV0ZShKMSk7Yyg2LHt0eXBlOm4sdXNhZ2U6SjF9KX0sSD0oaCk9PncoaCwiZG93biIpLGc9KGgpPT53KGgsInVwIik7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixIKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLGcpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLEgpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsZyl9fSxbYywkLmRldmljZSxOMV0pO2xldCBQMT0kNigpLGsxPXM5KCQuZGV2aWNlKSxRMD1vOSh7ZXhlYzpDMSx1ZGlkOiQuZGV2aWNlLGVuYWJsZWQ6TixvblVwbG9hZFN0YXJ0OlAxLmFkZCxvblVwbG9hZFByb2dyZXNzOlAxLnNldFByb2dyZXNzLG9uVXBsb2FkRW5kOih3LEgsZyk9PlAxLnVwZGF0ZSh3LHtzdGF0dXM6SD8ic3VjY2VzcyI6ImVycm9yIixtZXNzYWdlOmd9KSxvblVuc3VwcG9ydGVkOih3KT0+e2xldCBIPVAxLmFkZCh3Lm5hbWUsIm1lZGlhIik7UDEudXBkYXRlKEgse3N0YXR1czoiZXJyb3IiLG1lc3NhZ2U6YFVuc3VwcG9ydGVkOiAke3cudHlwZXx8bTAodyl9YH0pfSxvbkhvc3RQYXRoRHJvcDprMS5kaXNtaXNzfSksRjE9ZTkoe2RlZmF1bHRXaWR0aDpMMSx2aWV3cG9ydFdpZHRoOnkxLHZpZXdwb3J0SGVpZ2h0OmUxLGFzcGVjdFJhdGlvOksxLG9uU3RhcnQ6KCk9PkcwKCExKX0pLGwxPTEyLG0xPTI0LE0wPU0xPjA/TWF0aC5taW4oTTEsRjEud2lkdGgpOkYxLndpZHRoLGYxPSh3KT0+e2lmKHc8PTApcmV0dXJuIDA7bGV0IEg9eTEtbDEtdyxoPXkxLzIrTTAvMi0oSC1tMSk7aWYoaDw9MClyZXR1cm4gMDtsZXQgbj0yKmg7cmV0dXJuIG48PXcrbTE/bjowfSxKMD1mMShxP28xOmgxP2MxOjApLFcwPWYxKEI/QzowKTtyZXR1cm4gSih5OCx7ZW5kcG9pbnQ6Wj8kPy5heEVuZHBvaW50OnZvaWQgMCxjaGlsZHJlbjpKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtc2NyZWVuIGJnLXBhZ2UgcHktNiBnYXAtMyBmb250LXN5c3RlbSBib3gtYm9yZGVyIixzdHlsZTp7cGFkZGluZ0xlZnQ6MjQrVzAscGFkZGluZ1JpZ2h0OjI0K0owLHRyYW5zaXRpb246RjEuaXNSZXNpemluZ3x8RjEuaXNJbmVydGlhPyJub25lIjpsOH0sY2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgbWluLXctMCIsc3R5bGU6e3dpZHRoOkYxLndpZHRoLHRyYW5zaXRpb246RjEuaXNSZXNpemluZ3x8RjEuaXNJbmVydGlhP3U1Omw1fSxjaGlsZHJlbjpbSihFMSx7ZXhlYzpDMSxvblJvdGF0ZTp2LG9yaWVudGF0aW9uOiQxLm9yaWVudGF0aW9uPz9udWxsLGRldmljZVVkaWQ6JC5kZXZpY2UsZGV2aWNlTmFtZTpLLGRldmljZVJ1bnRpbWU6USxzdHJlYW1pbmc6TiwiYXJpYS1sYWJlbCI6IlNpbXVsYXRvciBzdGF0dXMiLHN0eWxlOnthbGlnblNlbGY6ImNlbnRlciIsd2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGZsZXhXcmFwOiJub3dyYXAiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGdhcDoxMCxwYWRkaW5nOiI2cHggMTBweCIsYm9yZGVyUmFkaXVzOjE4fSxjaGlsZHJlbjpbSihFMS5UaXRsZSx7b25DbGljazooKT0+Vigodyk9PiF3KSwiYXJpYS1sYWJlbCI6IlRvZ2dsZSBzaW11bGF0b3JzIHNpZGViYXIiLCJhcmlhLXByZXNzZWQiOkIsdGl0bGU6IlNpbXVsYXRvcnMiLGhpZGVTdWJ0aXRsZTohMCxoaWRlQ2hldnJvbjohMCxzdHlsZTp7bWF4V2lkdGg6Im1pbigyMzBweCwgY2FsYygxMDB2dyAtIDE3MHB4KSkifX0pLEooazkse3N0cmVhbWluZzpOfSldfSksSigiZGl2Iix7cmVmOkswLGNsYXNzTmFtZToicmVsYXRpdmUgbWF4LWgtZnVsbCIsc3R5bGU6e3dpZHRoOkYxLndpZHRoLGFzcGVjdFJhdGlvOmQsdHJhbnNpdGlvbjpGMS5pc1Jlc2l6aW5nfHxGMS5pc0luZXJ0aWE/dTU6bDUsd2lsbENoYW5nZTpGMS5pc1Jlc2l6aW5nfHxGMS5pc0luZXJ0aWE/IndpZHRoIjp2b2lkIDB9LC4uLlEwLmRyb3Bab25lUHJvcHMsY2hpbGRyZW46W0ooeTIse3VybDokLnVybCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsYm9yZGVyOiJub25lIixwb2ludGVyRXZlbnRzOkYxLmlzUmVzaXppbmd8fEYxLmlzSW5lcnRpYT8ibm9uZSI6dm9pZCAwfSxpbWFnZVN0eWxlOntib3JkZXJSYWRpdXM6cyxjb3JuZXJTaGFwZToic3VwZXJlbGxpcHNlKDEuMykiLGJveFNoYWRvdzoiaW5zZXQgMCAwIDAgMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSJ9LGhpZGVDb250cm9sczohMCxvblN0cmVhbWluZ0NoYW5nZTpfLG9uU3RyZWFtVG91Y2g6UTEsb25TdHJlYW1NdWx0aVRvdWNoOlUxLG9uU3RyZWFtQnV0dG9uOnUsb25TdHJlYW1EaWdpdGFsQ3Jvd246aixjb2RlYzpiPyJhdmNjIjoibWpwZWciLHN1YnNjcmliZUZyYW1lOmI/dm9pZCAwOnguc3Vic2NyaWJlRnJhbWUsc3RyZWFtRnJhbWU6Yj92b2lkIDA6eC5mcmFtZSxzdHJlYW1Db25maWc6JDEsZW5hYmxlRGlnaXRhbENyb3duOno9PT0id2F0Y2giLG9uU2NyZWVuQ29uZmlnQ2hhbmdlOmt9KSxaJiZKKEk4LHt9KSxRMC5pc0RyYWdPdmVyJiZKKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgYm9yZGVyLTIgYm9yZGVyLWRhc2hlZCBib3JkZXItYWNjZW50IGJnLVtyZ2JhKDk5LDEwMiwyNDEsMC4xOCldIHRleHQtYWNjZW50IHBvaW50ZXItZXZlbnRzLW5vbmUgei0yMCIsc3R5bGU6e2JvcmRlclJhZGl1czpzfSxjaGlsZHJlbjpbSihxMix7c2l6ZTozMixzdHJva2VXaWR0aDoxLjV9KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LW1lZGl1bSIsY2hpbGRyZW46IkRyb3AgbWVkaWEgb3IgLmlwYSJ9KV19KSxKKE45LHtzaW11bGF0b3JSZXNpemU6RjEsZGV2aWNlVHlwZTp6LHN0cmVhbUNvbmZpZzokMSxjb250YWluZXJXaWR0aDpNMXx8RjEud2lkdGgsY29udGFpbmVySGVpZ2h0OnEwfHwoSzE+MD9GMS53aWR0aC9LMTowKX0pLEooXzkse3dpZHRoOk0xfHxGMS53aWR0aCxoZWlnaHQ6cTB8fChLMT4wP0YxLndpZHRoL0sxOjApLHZpc2libGU6RjEuaXNSZXNpemluZ3x8RjEuaXNJbmVydGlhfSldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgbWF4LXctZnVsbCIsY2hpbGRyZW46W0ooRTEse2V4ZWM6QzEsb25Sb3RhdGU6dixvcmllbnRhdGlvbjokMS5vcmllbnRhdGlvbj8/bnVsbCxkZXZpY2VVZGlkOiQuZGV2aWNlLGRldmljZU5hbWU6SyxkZXZpY2VSdW50aW1lOlEsc3RyZWFtaW5nOk4sImFyaWEtbGFiZWwiOiJTaW11bGF0b3IgYWN0aW9ucyIsc3R5bGU6e2FsaWduU2VsZjoiY2VudGVyIix3aWR0aDoiYXV0byIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIscGFkZGluZzoiNnB4IDhweCIsYm9yZGVyUmFkaXVzOjE4fSxjaGlsZHJlbjpKKEUxLkFjdGlvbnMse2NoaWxkcmVuOlt4MT8uaXNSZWFjdE5hdGl2ZSYmSihFMS5CdXR0b24seyJhcmlhLWxhYmVsIjoiUmVsb2FkIFJlYWN0IE5hdGl2ZSBidW5kbGUiLHRpdGxlOiJSZWxvYWQgKENtZCtSKSIsb25DbGljazooKT0+dm9pZCAkMCgpLGNoaWxkcmVuOkooQTAse30pfSksSihFMS5Ib21lQnV0dG9uLHtvbkNsaWNrOih3KT0+e3cucHJldmVudERlZmF1bHQoKSx1KCJob21lIil9fSksSihFMS5TY3JlZW5zaG90QnV0dG9uLHt0aXRsZToiU2NyZWVuc2hvdCIsb25DbGljazoodyk9Pnt3LnByZXZlbnREZWZhdWx0KCksazEuY2FwdHVyZSgpfX0pLEooRTEuUm90YXRlQnV0dG9uLHt0aXRsZToiUm90YXRlIGRldmljZSJ9KV19KX0pLEooRTEse2V4ZWM6QzEsb25Sb3RhdGU6dixvcmllbnRhdGlvbjokMS5vcmllbnRhdGlvbj8/bnVsbCxkZXZpY2VVZGlkOiQuZGV2aWNlLGRldmljZU5hbWU6SyxkZXZpY2VSdW50aW1lOlEsc3RyZWFtaW5nOk4sImFyaWEtbGFiZWwiOiJBY2Nlc3NpYmlsaXR5IG92ZXJsYXkiLHN0eWxlOnt3aWR0aDoiYXV0byIsbWluV2lkdGg6MCxqdXN0aWZ5Q29udGVudDoiY2VudGVyIixwYWRkaW5nOjYsYm9yZGVyUmFkaXVzOjIyfSxjaGlsZHJlbjpKKGI4LHtvdmVybGF5RW5hYmxlZDpaLHN0cmVhbWluZzpOLG9uVG9nZ2xlT3ZlcmxheTooKT0+WSgodyk9PiF3KX0pfSldfSldfSksUDEudG9hc3RzLmxlbmd0aD4wJiZKKCJkaXYiLHtjbGFzc05hbWU6ImZpeGVkIGJvdHRvbS00IHJpZ2h0LTQgZmxleCBmbGV4LWNvbCBnYXAtMS41IG1heC13LVszMjBweF0gei0zMCIsY2hpbGRyZW46UDEudG9hc3RzLm1hcCgodyk9PntsZXQgSD13LnN0YXR1cz09PSJlcnJvciIsZz13LnN0YXR1cz09PSJ1cGxvYWRpbmciLGg9ZyYmdy5wcm9ncmVzcyE9PW51bGwsbj13LnByb2dyZXNzIT1udWxsP01hdGgucm91bmQody5wcm9ncmVzcyoxMDApOjA7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZTpgZmxleCBmbGV4LWNvbCBnYXAtMS41IHB4LTMgcHktMiBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbGcgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBmb250LW1vbm8gc2hhZG93LVswXzRweF8xMnB4X3JnYmEoMCwwLDAsMC40KV0gJHtIPyJzZWxlY3QtdGV4dCBjdXJzb3ItdGV4dCI6InNlbGVjdC1ub25lIGN1cnNvci1kZWZhdWx0In1gLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIHNocmluay0wIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4zc10iLHN0eWxlOntiYWNrZ3JvdW5kOmc/IiNhNWI0ZmMiOncuc3RhdHVzPT09InN1Y2Nlc3MiPyIjNGFkZTgwIjoiI2Y4NzE3MSJ9fSksSigic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpbZyYmaCYmYFVwbG9hZGluZyAke3cubmFtZX3igKYgJHtufSVgLGcmJiFoJiYody5raW5kPT09ImlwYSI/YEluc3RhbGxpbmcgJHt3Lm5hbWV94oCmYDpgQWRkaW5nICR7dy5uYW1lfeKApmApLHcuc3RhdHVzPT09InN1Y2Nlc3MiJiYody5raW5kPT09ImlwYSI/YEluc3RhbGxlZCAke3cubmFtZX1gOmBBZGRlZCAke3cubmFtZX0gdG8gUGhvdG9zYCksSCYmYCR7dy5uYW1lfTogJHt3Lm1lc3NhZ2U/PyJVcGxvYWQgZmFpbGVkIn1gXX0pXX0pLGcmJkooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgaC1bM3B4XSB3LWZ1bGwgYmctd2hpdGUvOCByb3VuZGVkLVsycHhdIG92ZXJmbG93LWhpZGRlbiIsY2hpbGRyZW46aD9KKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBiZy1hY2NlbnQgcm91bmRlZC1bMnB4XSBbdHJhbnNpdGlvbjp3aWR0aF8xMjBtc19saW5lYXJdIixzdHlsZTp7d2lkdGg6YCR7bn0lYH19KTpKKCJkaXYiLHtjbGFzc05hbWU6InNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIGFic29sdXRlIHRvcC0wIGxlZnQtMCBoLWZ1bGwgdy1bNDAlXSBiZy1hY2NlbnQgcm91bmRlZC1bMnB4XSJ9KX0pXX0sdy5pZCl9KX0pLGsxLnRvYXN0JiZKKEE5LHt0b2FzdDprMS50b2FzdCxvblJldmVhbDprMS5yZXZlYWwsb25EaXNtaXNzOmsxLmRpc21pc3Msb25QYXVzZTprMS5wYXVzZSxvblJlc3VtZTprMS5yZXN1bWV9KSxKKCJkaXYiLHtjbGFzc05hbWU6YGZpeGVkIHRvcC0zIHJpZ2h0LTMgZmxleCBmbGV4LWNvbCBnYXAtMSBwLTEgYmctcGFuZWwtYmcgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzEwcHhdIGJhY2tkcm9wLWJsdXItWzEycHhdIFstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpibHVyKDEycHgpXSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMThzX2Vhc2VdIHotNDAgJHtoMXx8cT8ib3BhY2l0eS0wIHBvaW50ZXItZXZlbnRzLW5vbmUiOiJvcGFjaXR5LTEwMCBwb2ludGVyLWV2ZW50cy1hdXRvIn1gLGNoaWxkcmVuOltKKCJidXR0b24iLHtvbkNsaWNrOigpPT57RyghMSksdjEoKHcpPT4hdyl9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gdG9vbHMgcGFuZWwiLCJhcmlhLXByZXNzZWQiOmgxLHRpdGxlOiJUb29scyIsY2hpbGRyZW46SihYMix7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KSxKKCJidXR0b24iLHtvbkNsaWNrOigpPT57djEoITEpLEcoKHcpPT4hdyl9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gV2ViS2l0IERldlRvb2xzIiwiYXJpYS1wcmVzc2VkIjpxLHRpdGxlOiJXZWJLaXQgRGV2VG9vbHMiLGNoaWxkcmVuOkooUTIse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSldfSksSihmOSx7b3BlbjpoMSxvbkNsb3NlOigpPT52MSghMSksdWRpZDokLmRldmljZSxkZXZpY2VSdW50aW1lOlEsY3VycmVudEFwcDp4MSxheE92ZXJsYXlFbmFibGVkOlosb25Ub2dnbGVBeE92ZXJsYXk6KCk9PlkoKHcpPT4hdyksd2lkdGg6YzF9KSxKKGkyLHtwYW5lbFdpZHRoOmMxLHZpc2libGU6aDEsb25Qb2ludGVyRG93bjpJMSxhcmlhTGFiZWw6IlJlc2l6ZSB0b29scyBwYW5lbCJ9KSxKKGM5LHtvcGVuOnEsb25DbG9zZTooKT0+RyghMSksdWRpZDokLmRldmljZSx0YXJnZXRzOlUudGFyZ2V0cyxzZWxlY3RlZFRhcmdldElkOkwsb25TZWxlY3RUYXJnZXQ6Rixsb2FkaW5nOlUubG9hZGluZyxlcnJvcjpVLmVycm9yLG9uUmVmcmVzaDooKT0+dm9pZCBVLnJlZnJlc2goKSx3aWR0aDpvMX0pLEooaTIse3BhbmVsV2lkdGg6bzEsdmlzaWJsZTpxLG9uUG9pbnRlckRvd246YTEsYXJpYUxhYmVsOiJSZXNpemUgV2ViS2l0IERldlRvb2xzIHBhbmVsIn0pXX0pfSl9cjMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvb3QiKSkucmVuZGVyKEooTiQse30pKTsKPC9zY3JpcHQ+CjwvYm9keT48L2h0bWw+","base64").toString("utf-8");return G_}function sR(){try{let H=SH("xcrun simctl list devices -j",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000}),$=JSON.parse(H),e=[];for(let[_,t]of Object.entries($.devices)){if(!/SimRuntime\.(iOS|watchOS|visionOS|xrOS)-/i.test(_))continue;for(let T of t){if(T.isAvailable===!1)continue;e.push({...T,runtime:_.replace(/^.*SimRuntime\./,"")})}}return e}catch{return[]}}function hR(){try{let H=Number(SH("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),$=Number(SH("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),e=SH("vm_stat",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}),_=(T)=>{let b=e.match(T);return b?Number(b[1]):0},t=_(/Pages free:\s+(\d+)/)+_(/Pages inactive:\s+(\d+)/)+_(/Pages speculative:\s+(\d+)/);return{totalBytes:Number.isFinite(H)?H:0,availableBytes:t*(Number.isFinite($)?$:4096)}}catch{return{totalBytes:0,availableBytes:0}}}function iR(){try{let H=SH("ps -axo rss=,args=",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000,maxBuffer:8388608}),$={},e=0,_=/\/Devices\/([0-9A-F-]{36})\//i;for(let t of H.split(`
84
- `)){let T=t.trimStart();if(!T)continue;let b=_.exec(T);if(!b)continue;let A=Number(T.split(/\s+/,1)[0]);if(!Number.isFinite(A))continue;let a=A*1024,r=b[1].toUpperCase();$[r]=($[r]??0)+a,e+=a}return{perUdid:$,totalBytes:e}}catch{return{perUdid:{},totalBytes:0}}}function nR(){let{totalBytes:H,availableBytes:$}=hR(),e=iR(),_=Object.keys(e.perUdid).length,t=_>0?e.totalBytes/_:0,T=t>=268435456?"measured":"estimated",b=T==="measured"?t:uR,A=b>0?Math.max(0,Math.floor($/b)):0;return{totalBytes:H,availableBytes:$,runningSimulators:_,perSimAvgBytes:b,perSimSource:T,estimatedAdditional:A}}function IR(){if(process.argv[0]&&/(^|\/)serve-sim-sjchmiela$/.test(process.argv[0]))return{command:process.argv[0],baseArgs:[]};if(process.argv[1]&&/(^|\/)serve-sim\.js$/.test(process.argv[1]))return{command:process.argv[0],baseArgs:[process.argv[1]]};try{let H=SH("command -v serve-sim-sjchmiela",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim();if(H)return{command:H,baseArgs:[]}}catch{}return null}function DR(H,$){let e=Buffer.from(H),_=Buffer.from($);if(e.length!==_.length)return!1;return HR(e,_)}function fR(H){if(!H)return!1;return H.split(";",1)[0].trim().toLowerCase()==="application/json"}function ER(H){let $=(H?.basePath??"/.sim").replace(/\/+$/,""),e=H?.execToken??zc(32).toString("base64url"),_=async(T)=>{let b=T??{};if(typeof b.device!=="string"||!/^[0-9A-Za-z-]+$/.test(b.device))throw Error("missing or invalid device udid");if(b.option===void 0)return{status:await We(b.device)};if(!CH[b.option])throw Error(`unknown option: ${b.option}`);let A=typeof b.value==="string"?qe(b.option,b.value):null;if(A===null)throw Error(`invalid value for ${b.option}: ${b.value}`);return await ye(b.device,b.option,A),{ok:!0}};return Object.assign((T,b,A)=>{let a=T.url??"",r=a.indexOf("?"),L=r===-1?a:a.slice(0,r),c=rR(a)??H?.device??null,u=$==="/"?"/devtools-frontend":`${$}/devtools-frontend`;if(L===u||L.startsWith(`${u}/`)){(async()=>{let n=L===u?"inspector.html":L.slice(u.length+1);if(n.split("/").some((h)=>h==="..")){b.writeHead(400,{"Content-Type":"text/plain; charset=utf-8"}),b.end("Invalid asset path");return}try{let h=await fetch(`https://chrome-devtools-frontend.appspot.com/serve_rev/@${$R}/${n}${r===-1?"":a.slice(r)}`),I={"Cache-Control":"public, max-age=604800"},l=h.headers.get("content-type");if(l)I["Content-Type"]=l;b.writeHead(h.status,I),b.end(Buffer.from(await h.arrayBuffer()))}catch(h){b.writeHead(502,{"Content-Type":"text/plain; charset=utf-8"}),b.end(h instanceof Error?h.message:"Failed to load DevTools frontend")}})();return}if(L===$||L===$+"/"){let n=gH(),h=UH(n,c),I=RR();if(!h){let l=JSON.stringify({basePath:$,execToken:e});I=I.replace("<!--__SIM_PREVIEW_CONFIG__-->",`<script>window.__SIM_PREVIEW__=${l}</script>`)}if(h){let l=p$(h,T.headers?.host),C=`<script>window.__SIM_PREVIEW__=${JSON.stringify(Te(l,$,g_(),e))}</script>`;I=I.replace("<!--__SIM_PREVIEW_CONFIG__-->",C)}b.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store"}),b.end(I);return}if(L===$+"/grid/api/memory"){b.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),b.end(JSON.stringify(nR()));return}if(L===$+"/grid/api/devicekit-chrome"){PT(new URL(a||"/","http://serve-sim.local"),b);return}if(L===$+"/grid/api/device-placeholder-asset"){xT(new URL(a||"/","http://serve-sim.local"),b);return}if(L===$+"/grid/api"){let n=gH(),h=new Map(n.map((E)=>[E.device,E])),l=sR().map((E)=>{let R=h.get(E.udid),o=R?p$(R,T.headers?.host):null;return{device:E.udid,name:E.name,runtime:E.runtime,state:E.state,chrome:mT(E),placeholderAsset:qT(E),helper:o?{port:o.port,url:o.url,streamUrl:o.streamUrl,wsUrl:o.wsUrl}:null}}),N=aR(),C=(E)=>{if(/iphone/i.test(E))return 0;if(/ipad/i.test(E))return 1;if(/watch/i.test(E))return 2;if(/(apple\s*tv|^tv\b)/i.test(E))return 3;if(/vision|reality/i.test(E))return 4;return 5},D=(E)=>E.helper?0:E.state==="Booted"?1:E.device===N?2:3,d=(E)=>{let R=E.match(/-(\d+)-(\d+)/),o=R?Number(R[1]):0,s=R?Number(R[2]):0;return-(o*1000+s)};l.sort((E,R)=>D(E)-D(R)||C(E.name)-C(R.name)||E.name.localeCompare(R.name)||d(E.runtime)-d(R.runtime)),b.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),b.end(JSON.stringify({devices:l}));return}if(L===$+"/grid/api/shutdown"&&T.method==="POST"){let n="";T.on("data",(h)=>{n+=typeof h==="string"?h:h.toString()}),T.on("end",()=>{let h="";try{h=JSON.parse(n).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(h)){b.writeHead(400,{"Content-Type":"application/json"}),b.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}l$={at:0,booted:null},mb("xcrun",["simctl","shutdown",h],{timeout:30000},(I,l,N)=>{if(I){b.writeHead(500,{"Content-Type":"application/json"}),b.end(JSON.stringify({ok:!1,error:N?.toString().trim()||I.message}));return}b.writeHead(200,{"Content-Type":"application/json"}),b.end(JSON.stringify({ok:!0}))})});return}if(L===$+"/grid/api/start"&&T.method==="POST"){let n="";T.on("data",(h)=>{n+=typeof h==="string"?h:h.toString()}),T.on("end",()=>{let h="";try{h=JSON.parse(n).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(h)){b.writeHead(400,{"Content-Type":"application/json"}),b.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}let I=IR();if(!I){b.writeHead(500,{"Content-Type":"application/json"}),b.end(JSON.stringify({ok:!1,error:"serve-sim-sjchmiela CLI not found in PATH. Install it (npm i -g serve-sim-sjchmiela) and retry."}));return}let l=pb(I.command,[...I.baseArgs,"--detach",h],{stdio:["ignore","pipe","pipe"],detached:!1}),N="",C="";l.stdout?.on("data",(d)=>{N+=d.toString()}),l.stderr?.on("data",(d)=>{C+=d.toString()});let D=setTimeout(()=>{try{l.kill("SIGTERM")}catch{}},180000);l.on("close",(d)=>{if(clearTimeout(D),d===0)b.writeHead(200,{"Content-Type":"application/json"}),b.end(JSON.stringify({ok:!0,stdout:N.trim()}));else b.writeHead(500,{"Content-Type":"application/json"}),b.end(JSON.stringify({ok:!1,error:C.trim()||N.trim()||`serve-sim exited with code ${d}`}))})});return}if(L===$+"/devtools"){(async()=>{let n=gH();if(!UH(n,c)){b.writeHead(404,{"Content-Type":"application/json"}),b.end(JSON.stringify({error:"No serve-sim device"}));return}try{let I=await M_(),l=await I.listTargets(),N=cR(T.headers?.host,I.port),C=l.map((D)=>({...D,webSocketDebuggerUrl:`ws://${N}/devtools/page/${encodeURIComponent(D.id)}`,devtoolsFrontendUrl:oR(u,N,D.id)}));b.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),b.end(JSON.stringify({port:I.port,targets:C}))}catch(I){b.writeHead(500,{"Content-Type":"application/json"}),b.end(JSON.stringify({error:I instanceof Error?I.message:"Failed to start inspect-webkit"}))}})();return}if(L===$+"/devtools/release"&&T.method==="POST"){let n="";T.on("data",(h)=>n+=h),T.on("end",async()=>{try{let h=n?JSON.parse(n):{};(await M_()).releaseHighlight?.(h.targetId),b.writeHead(200,{"Content-Type":"application/json"}),b.end("{}")}catch(h){b.writeHead(500,{"Content-Type":"application/json"}),b.end(JSON.stringify({error:h instanceof Error?h.message:"Failed to release"}))}});return}if(L===$+"/devtools/highlight"&&T.method==="POST"){let n="";T.on("data",(h)=>n+=h),T.on("end",async()=>{try{let{targetId:h,on:I}=JSON.parse(n||"{}");if(!h){b.writeHead(400,{"Content-Type":"application/json"}),b.end(JSON.stringify({error:"Missing targetId"}));return}let l=await M_();if(!l.highlightTarget){b.writeHead(501,{"Content-Type":"application/json"}),b.end(JSON.stringify({error:"highlightTarget not supported by inspect-webkit"}));return}await l.highlightTarget(h,!!I),b.writeHead(200,{"Content-Type":"application/json"}),b.end("{}")}catch(h){b.writeHead(500,{"Content-Type":"application/json"}),b.end(JSON.stringify({error:h instanceof Error?h.message:"Failed to highlight target"}))}});return}if(L===$+"/api"){let n=gH(),h=UH(n,c),I=`${c??"(any)"}|${n.length}|${h?`${h.device}@${h.port}`:"none"}`;if(I!==Bb)Bb=I,w$("GET /api selectedDevice=%s states=%d chose=%s",c??"(any)",n.length,h?`${h.device}@${h.port}`:"none");b.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"});let l=h?p$(h,T.headers?.host):null;b.end(JSON.stringify(l?Te(l,$,g_(),e):null));return}if(L===$+"/api/events"){let n=()=>{let o=gH(),s=UH(o,c),i=s?p$(s,T.headers?.host):null;return JSON.stringify(i?Te(i,$,g_(),e):null)};b.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),b.write(`:
83
+ `+i)}function R(o,s,i,p,B,M){if(o.listenerCount("wsClientError")){let G=Error(B);Error.captureStackTrace(G,R),o.emit("wsClientError",G,i,s)}else E(i,p,B,M)}});G9=MH(Eo(),1),g9=MH(f_(),1),S9=MH(C$(),1),k9=MH(_b(),1),m9=MH(tb(),1),q9=MH(Tb(),1),Wo=MH(E_(),1),sb=MH(Co(),1),$b=Wo.default;Yo={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},zo={"Network.requestWillBeSent":{walltime:"wallTime"}},Hc={hasUserGesture:!1,redirectHasExtraInfo:!1},$c={hasExtraInfo:!1},ec={encodedDataLength:0,shouldReportCorbBlocking:!1},_c={initialPriority:"Medium",referrerPolicy:"origin"},tc={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};uc={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};Dc={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:""};Bc=["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"],Oc={"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:[]}};Gc={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}});var xb={};rt(xb,{simMiddleware:()=>CR,selectServeSimState:()=>UH,rewriteStateForRequestHost:()=>p$,readServeSimStates:()=>gH,previewConfigForState:()=>Te,parseForegroundAppLogMessage:()=>Pb,matchInstalledAppByDisplayName:()=>LR});import{readdirSync as vc,readFileSync as Vc,existsSync as mb,unlinkSync as pb,watch as jc}from"fs";import{execSync as SH,spawn as Bb,exec as Qc,execFile as qb}from"child_process";import{tmpdir as Yc}from"os";import{join as k_}from"path";import{createServer as zc}from"net";import{randomBytes as HR,timingSafeEqual as $R}from"crypto";function Gb(H){return!bR.test(H)}function Pb(H){let $=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/.exec(H);if(!$)return null;return{bundleId:$[1],pid:parseInt($[2],10)}}function gb(H,$){if(tR.has($))return Promise.resolve(!0);return new Promise((e)=>{qb("xcrun",["simctl","get_app_container",H,$,"app"],{timeout:2000},(_,t)=>{if(_)return e(!1);let T=t.trim();if(!T)return e(!1);for(let b of TR)if(mb(k_(T,b)))return e(!0);e(!1)})})}function Sb(H){return H.trim().replace(/\s+/g," ").toLowerCase()}function LR(H,$){let e=Sb($);if(!e)return null;for(let[_,t]of Object.entries(H))if([t.CFBundleDisplayName,t.CFBundleName,t.CFBundleExecutable].filter((b)=>typeof b==="string").some((b)=>Sb(b)===e))return t.CFBundleIdentifier||_;return null}function aR(){let H=Date.now();if(l$.booted&&H-l$.at<1500)return l$.booted;try{let $=SH("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),e=JSON.parse($),_=new Set;for(let t of Object.values(e.devices))for(let T of t)if(T.state==="Booted")_.add(T.udid);return l$={at:H,booted:_},_}catch{return null}}function rR(){let H=Date.now();if(H-B_.at<1500)return B_.udid;let $=null;try{$=SH("defaults read com.apple.iphonesimulator CurrentDeviceUDID",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()||null}catch{$=null}return B_={at:H,udid:$},$}function gH(){let H;try{H=vc(S_).filter((_)=>_.startsWith("server-")&&_.endsWith(".json"))}catch{return[]}let $=aR(),e=[];for(let _ of H){let t=k_(S_,_);try{let T=JSON.parse(Vc(t,"utf-8"));try{process.kill(T.pid,0)}catch{w$("helper pid=%d gone, removing %s",T.pid,t);try{pb(t)}catch{}continue}if($&&!$.has(T.device)){w$("recycling stale helper pid=%d (device %s no longer booted)",T.pid,T.device);try{process.kill(T.pid,"SIGTERM")}catch{}try{pb(t)}catch{}continue}e.push(T)}catch{}}return e}function UH(H,$){if($)return H.find((e)=>e.device===$)??null;return H[0]??null}function AR(H){let $=H.indexOf("?");if($===-1)return null;return new URLSearchParams(H.slice($+1)).get("device")}function O_(H,$,e){return`${`${H}${$}`}?device=${encodeURIComponent(e)}`}function p$(H,$){if(!$)return H;let e;try{e=new URL(`http://${$}`).hostname}catch{return H}if(e==="localhost"||e==="127.0.0.1"||e==="[::1]")return H;let _=(t)=>t.replace("127.0.0.1",e);return{...H,url:_(H.url),streamUrl:_(H.streamUrl),wsUrl:_(H.wsUrl)}}function Te(H,$,e,_){let t=($===""?"":$)+"/grid/api";return{...H,basePath:$,appStateEndpoint:O_($,"/appstate",H.device),axEndpoint:O_($,"/ax",H.device),devtoolsEndpoint:O_($,"/devtools",H.device),serveSimBin:e,gridApiEndpoint:t,gridStartEndpoint:t+"/start",gridShutdownEndpoint:t+"/shutdown",gridMemoryEndpoint:t+"/memory",previewEndpoint:$===""?"/":$,execToken:_}}async function oR(H){return new Promise(($)=>{let e=zc();e.once("error",()=>$(!1)),e.once("listening",()=>e.close(()=>$(!0))),e.listen(H,"127.0.0.1")})}async function kb(H){let $=`http://127.0.0.1:${H}`;try{let e=await fetch(`${$}/json/version`);if(!e.ok)return null;if((await e.json()).Browser!=="Safari/inspect-webkit")return null;return{port:H,cdpUrl:$,async listTargets(){return(await(await fetch(`${$}/json/list`)).json()).filter((b)=>b.id.startsWith("sim:")).map((b)=>{let a=b.id.split(":")[1],r=b.description?.match(/\(([^)]+)\)/)?.[1];return{id:b.id,title:b.title||b.url||"Untitled",url:/^https?:/i.test(b.url)?b.url:"about:blank",type:b.type||"page",udid:a,bundleId:r}})}}}catch{return null}}async function M_(){if(ZH)try{return await(await ZH).listTargets(),ZH}catch{ZH=null}return ZH=(async()=>{let{startCdpServer:H}=await Promise.resolve().then(() => (lb(),db));for(let $=te;$<te+50;$++){if(!await oR($)){let e=await kb($);if(e)return e;continue}try{let e=await H({host:"127.0.0.1",port:$});return{port:$,cdpUrl:`http://127.0.0.1:${$}`,async listTargets(){return e.getTargets().filter((_)=>_.source?.kind==="simulator").map((_)=>{let t=_.url??"";return{id:_.targetId,title:_.title||_.appName||t||"Untitled",url:/^https?:/i.test(t)?t:"about:blank",type:_.type||"page",appName:_.appName,bundleId:_.bundleId,udid:_.source?.id,inUseByOtherInspector:!!_.inUseByOtherInspector}})},highlightTarget:e.highlightTarget?.bind(e),releaseHighlight:e.releaseHighlight?.bind(e)}}catch(e){if(e?.code==="EADDRINUSE"){let _=await kb($);if(_)return _;continue}throw e}}throw Error(`No available inspect-webkit port found in ${te}-${te+49}`)})().catch((H)=>{throw ZH=null,H}),ZH}function cR(H,$,e){let _=new URL(`${H}/inspector.html`,"http://serve-sim.local");return _.searchParams.set("ws",`${$}/devtools/page/${e}`),`${_.pathname}${_.search}`}function RR(H,$){return`127.0.0.1:${$}`}function g_(){try{let H=process.argv;if(H[1]&&mb(H[1]))return H[1]}catch{}return"serve-sim-sjchmiela"}function sR(){if(!G_)G_=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPHN0eWxlPi8qISB0YWlsd2luZGNzcyB2NC4xLjE0IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbSAqL0BsYXllciBwcm9wZXJ0aWVzO0BsYXllciB0aGVtZSxiYXNlLGNvbXBvbmVudHMsdXRpbGl0aWVzO0BsYXllciB0aGVtZXs6cm9vdCw6aG9zdHstLWZvbnQtc2Fuczp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSxzYW5zLXNlcmlmLCJBcHBsZSBDb2xvciBFbW9qaSIsIlNlZ29lIFVJIEVtb2ppIiwiU2Vnb2UgVUkgU3ltYm9sIiwiTm90byBDb2xvciBFbW9qaSI7LS1mb250LW1vbm86dWktbW9ub3NwYWNlLFNGTW9uby1SZWd1bGFyLE1lbmxvLG1vbm9zcGFjZTstLWNvbG9yLWJsYWNrOiMwMDA7LS1jb2xvci13aGl0ZTojZmZmOy0tc3BhY2luZzouMjVyZW07LS1mb250LXdlaWdodC1tZWRpdW06NTAwOy0tZm9udC13ZWlnaHQtc2VtaWJvbGQ6NjAwOy0tdHJhY2tpbmctd2lkZTouMDI1ZW07LS1sZWFkaW5nLXRpZ2h0OjEuMjU7LS1yYWRpdXMteHM6LjEyNXJlbTstLXJhZGl1cy1tZDouMzc1cmVtOy0tcmFkaXVzLWxnOi41cmVtOy0tcmFkaXVzLXhsOi43NXJlbTstLWVhc2Utb3V0OmN1YmljLWJlemllcigwLDAsLjIsMSk7LS1ibHVyLW1kOjEycHg7LS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb246LjE1czstLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC40LDAsLjIsMSk7LS1kZWZhdWx0LWZvbnQtZmFtaWx5OnZhcigtLWZvbnQtc2Fucyk7LS1kZWZhdWx0LW1vbm8tZm9udC1mYW1pbHk6dmFyKC0tZm9udC1tb25vKTstLWNvbG9yLXBhbmVsOiMxYzFjMWU7LS1jb2xvci1wYW5lbC1iZzojMTQxNDE2ZWI7LS1jb2xvci1wYW5lbC1vdmVybGF5OiMxNDE0MTZhNjstLWNvbG9yLXBhbmVsLWRlZXA6IzExMTExMzstLWNvbG9yLXBhZ2U6IzBhMGEwYTstLWNvbG9yLWFjY2VudDojYTViNGZjOy0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkOiMzNGQzOTk7LS1jb2xvci1kYW5nZXI6I2Y4NzE3MTstLWNvbG9yLWRhbmdlci1zb2Z0OiNmY2E1YTU7LS1jb2xvci13YXJuaW5nOiNmYmJmMjQ7LS1jb2xvci13YXJuaW5nLXNvZnQ6I2ZjZDM0ZDstLWZvbnQtc3lzdGVtOi1hcHBsZS1zeXN0ZW0sc3lzdGVtLXVpLHNhbnMtc2VyaWZ9fUBsYXllciBiYXNleyosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH06OmJhY2tkcm9we2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MCBzb2xpZDttYXJnaW46MDtwYWRkaW5nOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjAgc29saWQ7bWFyZ2luOjA7cGFkZGluZzowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjowIHNvbGlkO21hcmdpbjowO3BhZGRpbmc6MH1odG1sLDpob3N0ey13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlO3RhYi1zaXplOjQ7bGluZS1oZWlnaHQ6MS41O2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtZm9udC1mYW1pbHksdWktc2Fucy1zZXJpZixzeXN0ZW0tdWksc2Fucy1zZXJpZiwiQXBwbGUgQ29sb3IgRW1vamkiLCJTZWdvZSBVSSBFbW9qaSIsIlNlZ29lIFVJIFN5bWJvbCIsIk5vdG8gQ29sb3IgRW1vamkiKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1mb250LWZlYXR1cmUtc2V0dGluZ3Msbm9ybWFsKTtmb250LXZhcmlhdGlvbi1zZXR0aW5nczp2YXIoLS1kZWZhdWx0LWZvbnQtdmFyaWF0aW9uLXNldHRpbmdzLG5vcm1hbCk7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWhye2NvbG9yOmluaGVyaXQ7Ym9yZGVyLXRvcC13aWR0aDoxcHg7aGVpZ2h0OjB9YWJicjp3aGVyZShbdGl0bGVdKXstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9YXtjb2xvcjppbmhlcml0Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHNhbXAscHJle2ZvbnQtZmFtaWx5OnZhcigtLWRlZmF1bHQtbW9uby1mb250LWZhbWlseSx1aS1tb25vc3BhY2UsU0ZNb25vLVJlZ3VsYXIsTWVubG8sTW9uYWNvLENvbnNvbGFzLCJMaWJlcmF0aW9uIE1vbm8iLCJDb3VyaWVyIE5ldyIsbW9ub3NwYWNlKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dmFyKC0tZGVmYXVsdC1tb25vLWZvbnQtZmVhdHVyZS1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOnZhcigtLWRlZmF1bHQtbW9uby1mb250LXZhcmlhdGlvbi1zZXR0aW5ncyxub3JtYWwpO2ZvbnQtc2l6ZToxZW19c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MH1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfXRhYmxle3RleHQtaW5kZW50OjA7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfTotbW96LWZvY3VzcmluZ3tvdXRsaW5lOmF1dG99cHJvZ3Jlc3N7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1vbCx1bCxtZW51e2xpc3Qtc3R5bGU6bm9uZX1pbWcsc3ZnLHZpZGVvLGNhbnZhcyxhdWRpbyxpZnJhbWUsZW1iZWQsb2JqZWN0e2Rpc3BsYXk6YmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfWltZyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b31idXR0b24saW5wdXQsc2VsZWN0LG9wdGdyb3VwLHRleHRhcmVhe2ZvbnQ6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2xldHRlci1zcGFjaW5nOmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5OjE7YmFja2dyb3VuZC1jb2xvcjojMDAwMDtib3JkZXItcmFkaXVzOjB9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbntmb250OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7b3BhY2l0eToxO2JhY2tncm91bmQtY29sb3I6IzAwMDA7Ym9yZGVyLXJhZGl1czowfTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udDppbmhlcml0O2ZvbnQtZmVhdHVyZS1zZXR0aW5nczppbmhlcml0O2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6aW5oZXJpdDtjb2xvcjppbmhlcml0O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwO2JvcmRlci1yYWRpdXM6MH06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXB7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShzZWxlY3Q6LW1vei1hbnkoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cHtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKHNlbGVjdDppcyhbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoc2VsZWN0Oi13ZWJraXQtYW55KFttdWx0aXBsZV0sW3NpemVdKSkgb3B0Z3JvdXAgb3B0aW9ue3BhZGRpbmctaW5saW5lLXN0YXJ0OjIwcHh9OndoZXJlKHNlbGVjdDotbW96LWFueShbbXVsdGlwbGVdLFtzaXplXSkpIG9wdGdyb3VwIG9wdGlvbntwYWRkaW5nLWlubGluZS1zdGFydDoyMHB4fTp3aGVyZShzZWxlY3Q6aXMoW211bHRpcGxlXSxbc2l6ZV0pKSBvcHRncm91cCBvcHRpb257cGFkZGluZy1pbmxpbmUtc3RhcnQ6MjBweH06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OmZpbGUtc2VsZWN0b3ItYnV0dG9ue21hcmdpbi1pbmxpbmUtZW5kOjRweH06OnBsYWNlaG9sZGVye29wYWNpdHk6MX1Ac3VwcG9ydHMgKCBub3QgKC13ZWJraXQtYXBwZWFyYW5jZTogLWFwcGxlLXBheS1idXR0b24pKSBvciAoY29udGFpbi1pbnRyaW5zaWMtc2l6ZTogMXB4KXs6OnBsYWNlaG9sZGVye2NvbG9yOmN1cnJlbnRDb2xvcn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpezo6cGxhY2Vob2xkZXJ7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLGN1cnJlbnRjb2xvciA1MCUsdHJhbnNwYXJlbnQpfX19dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZXt0ZXh0LWFsaWduOmluaGVyaXQ7bWluLWhlaWdodDoxbGh9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7ZGlzcGxheTppbmxpbmUtZmxleH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1maWVsZHMtd3JhcHBlcntwYWRkaW5nOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQteWVhci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1tb250aC1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1kYXktZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1maWVsZHtwYWRkaW5nLWJsb2NrLXN0YXJ0OjA7cGFkZGluZy1ibG9jay1lbmQ6MH06Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC1taW51dGUtZmllbGR7cGFkZGluZy1ibG9jay1zdGFydDowO3BhZGRpbmctYmxvY2stZW5kOjB9Ojotd2Via2l0LWRhdGV0aW1lLWVkaXQtc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1pbGxpc2Vjb25kLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1lcmlkaWVtLWZpZWxke3BhZGRpbmctYmxvY2stc3RhcnQ6MDtwYWRkaW5nLWJsb2NrLWVuZDowfTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye2xpbmUtaGVpZ2h0OjF9Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9YnV0dG9ue2FwcGVhcmFuY2U6YnV0dG9ufWlucHV0OndoZXJlKFt0eXBlPWJ1dHRvbl0sW3R5cGU9cmVzZXRdLFt0eXBlPXN1Ym1pdF0pe2FwcGVhcmFuY2U6YnV0dG9ufTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257YXBwZWFyYW5jZTpidXR0b259OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbnthcHBlYXJhbmNlOmJ1dHRvbn06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVtoaWRkZW5dOndoZXJlKDpub3QoW2hpZGRlbj11bnRpbC1mb3VuZF0pKXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbGF5ZXIgdXRpbGl0aWVzey5cW2NvbnRhaW5lci10eXBlXDppbmxpbmUtc2l6ZVxde2NvbnRhaW5lci10eXBlOmlubGluZS1zaXplfS5wb2ludGVyLWV2ZW50cy1hdXRve3BvaW50ZXItZXZlbnRzOmF1dG99LnBvaW50ZXItZXZlbnRzLW5vbmV7cG9pbnRlci1ldmVudHM6bm9uZX0uY29sbGFwc2V7dmlzaWJpbGl0eTpjb2xsYXBzZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LmZpeGVke3Bvc2l0aW9uOmZpeGVkfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uc3RhdGlje3Bvc2l0aW9uOnN0YXRpY30uc3RpY2t5e3Bvc2l0aW9uOnN0aWNreX0uaW5zZXQtMHtpbnNldDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS50b3AtMHt0b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0udG9wLTFcLzJ7dG9wOjUwJX0udG9wLTJ7dG9wOmNhbGModmFyKC0tc3BhY2luZykqMil9LnRvcC0ze3RvcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS50b3AtXFsycHhcXXt0b3A6MnB4fS50b3AtXFtjYWxjXCgxMDBcJVwrNHB4XClcXXt0b3A6Y2FsYygxMDAlICsgNHB4KX0udG9wLVxbY2FsY1woMTAwXCVcKzZweFwpXF17dG9wOmNhbGMoMTAwJSArIDZweCl9LnJpZ2h0LTB7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ucmlnaHQtMFwuNXtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucmlnaHQtMlwuNXtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnJpZ2h0LTN7cmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucmlnaHQtNHtyaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5yaWdodC1cWzlweFxde3JpZ2h0OjlweH0uYm90dG9tLTB7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMCl9LmJvdHRvbS0wXC41e2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uYm90dG9tLTN7Ym90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMyl9LmJvdHRvbS00e2JvdHRvbTpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5ib3R0b20tNntib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0ubGVmdC0we2xlZnQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubGVmdC0xXC8ye2xlZnQ6NTAlfS5sZWZ0LTJcLjV7bGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmxlZnQtM3tsZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnotMXt6LWluZGV4OjF9LnotMTB7ei1pbmRleDoxMH0uei0yMHt6LWluZGV4OjIwfS56LTMwe3otaW5kZXg6MzB9LnotMzV7ei1pbmRleDozNX0uei0zNnt6LWluZGV4OjM2fS56LTQwe3otaW5kZXg6NDB9LnotNTB7ei1pbmRleDo1MH0uY29udGFpbmVye3dpZHRoOjEwMCV9QG1lZGlhIChtaW4td2lkdGg6NDByZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjQwcmVtfX1AbWVkaWEgKG1pbi13aWR0aDo0OHJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6NDhyZW19fUBtZWRpYSAobWluLXdpZHRoOjY0cmVtKXsuY29udGFpbmVye21heC13aWR0aDo2NHJlbX19QG1lZGlhIChtaW4td2lkdGg6ODByZW0pey5jb250YWluZXJ7bWF4LXdpZHRoOjgwcmVtfX1AbWVkaWEgKG1pbi13aWR0aDo5NnJlbSl7LmNvbnRhaW5lcnttYXgtd2lkdGg6OTZyZW19fS5tLTB7bWFyZ2luOmNhbGModmFyKC0tc3BhY2luZykqMCl9Li1teC0xe21hcmdpbi1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSotMSl9Lm14LTBcLjV7bWFyZ2luLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0uLW15LTJ7bWFyZ2luLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqLTIpfS5teS0xe21hcmdpbi1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5tdC0ye21hcmdpbi10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ubXQtXFszcHhcXXttYXJnaW4tdG9wOjNweH0ubXItXFszcHhcXXttYXJnaW4tcmlnaHQ6M3B4fS5tbC0wXC41e21hcmdpbi1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5tbC0xe21hcmdpbi1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMSl9LmJveC1ib3JkZXJ7Ym94LXNpemluZzpib3JkZXItYm94fS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5jb250ZW50c3tkaXNwbGF5OmNvbnRlbnRzfS5mbGV4e2Rpc3BsYXk6ZmxleH0uZ3JpZHtkaXNwbGF5OmdyaWR9LmhpZGRlbntkaXNwbGF5Om5vbmV9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS50YWJsZXtkaXNwbGF5OnRhYmxlfS5cW2FzcGVjdC1yYXRpb1w6MTZcLzExXF17YXNwZWN0LXJhdGlvOjE2LzExfS5zaXplLTFcLjV7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnNpemUtMlwuNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0uc2l6ZS0zXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMy41KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSozLjUpfS5zaXplLTR7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KTtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0uc2l6ZS01e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNSk7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LnNpemUtOXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjkpO2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjkpfS5zaXplLVxbMnB4XF17d2lkdGg6MnB4O2hlaWdodDoycHh9LnNpemUtXFsxNHB4XF17d2lkdGg6MTRweDtoZWlnaHQ6MTRweH0uc2l6ZS1cWzE4cHhcXXt3aWR0aDoxOHB4O2hlaWdodDoxOHB4fS5zaXplLVxbMTlweFxde3dpZHRoOjE5cHg7aGVpZ2h0OjE5cHh9LnNpemUtZnVsbHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5oLTJcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMi41KX0uaC0ze2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5oLTNcLjV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMy41KX0uaC00e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjQpfS5oLTV7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNSl9LmgtNVwuNXtoZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1LjUpfS5oLTZ7aGVpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqNil9LmgtN3toZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo3KX0uaC04e2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS5oLTEwe2hlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjEwKX0uaC1cWzNweFxde2hlaWdodDozcHh9LmgtXFsxM3B4XF17aGVpZ2h0OjEzcHh9LmgtXFsxNHB4XF17aGVpZ2h0OjE0cHh9LmgtXFsxNnB4XF17aGVpZ2h0OjE2cHh9LmgtXFsxOHB4XF17aGVpZ2h0OjE4cHh9LmgtXFsyMnB4XF17aGVpZ2h0OjIycHh9LmgtXFsyNnB4XF17aGVpZ2h0OjI2cHh9LmgtXFszMHB4XF17aGVpZ2h0OjMwcHh9LmgtZnVsbHtoZWlnaHQ6MTAwJX0uaC1weHtoZWlnaHQ6MXB4fS5oLXNjcmVlbntoZWlnaHQ6MTAwdmh9Lm1heC1oLTkwe21heC1oZWlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSo5MCl9Lm1heC1oLVxbMjYwcHhcXXttYXgtaGVpZ2h0OjI2MHB4fS5tYXgtaC1cWzMyMHB4XF17bWF4LWhlaWdodDozMjBweH0ubWF4LWgtZnVsbHttYXgtaGVpZ2h0OjEwMCV9Lm1pbi1oLTB7bWluLWhlaWdodDpjYWxjKHZhcigtLXNwYWNpbmcpKjApfS5taW4taC1cWzIycHhcXXttaW4taGVpZ2h0OjIycHh9Lm1pbi1oLVxbMzBweFxde21pbi1oZWlnaHQ6MzBweH0ubWluLWgtXFszNnB4XF17bWluLWhlaWdodDozNnB4fS5taW4taC1cWzQ0cHhcXXttaW4taGVpZ2h0OjQ0cHh9Lm1pbi1oLXB4e21pbi1oZWlnaHQ6MXB4fS53LTF7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0udy0yXC41e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMi41KX0udy00e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNCl9LnctNXt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjUpfS53LTZ7d2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSo2KX0udy03e3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqNyl9LnctOHt3aWR0aDpjYWxjKHZhcigtLXNwYWNpbmcpKjgpfS53LTEwe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTApfS53LTIxe3dpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMjEpfS53LVxbMjJweFxde3dpZHRoOjIycHh9LnctXFszMHB4XF17d2lkdGg6MzBweH0udy1cWzMyXCVcXXt3aWR0aDozMiV9LnctXFszNlwlXF17d2lkdGg6MzYlfS53LVxbNDBcJVxde3dpZHRoOjQwJX0udy1cWzQyXCVcXXt3aWR0aDo0MiV9LnctXFs0NlwlXF17d2lkdGg6NDYlfS53LVxbNDhcJVxde3dpZHRoOjQ4JX0udy1cWzU4XCVcXXt3aWR0aDo1OCV9LnctXFs2MlwlXF17d2lkdGg6NjIlfS53LVxbNjhcJVxde3dpZHRoOjY4JX0udy1cWzcwXCVcXXt3aWR0aDo3MCV9LnctXFs3NFwlXF17d2lkdGg6NzQlfS53LVxbMTIwcHhcXXt3aWR0aDoxMjBweH0udy1cW2NhbGNcKDEwMFwlXCs4cHhcKVxde3dpZHRoOmNhbGMoMTAwJSArIDhweCl9LnctZnVsbHt3aWR0aDoxMDAlfS53LXB4e3dpZHRoOjFweH0ubWF4LXctOTB7bWF4LXdpZHRoOmNhbGModmFyKC0tc3BhY2luZykqOTApfS5tYXgtdy0xMjB7bWF4LXdpZHRoOmNhbGModmFyKC0tc3BhY2luZykqMTIwKX0ubWF4LXctXFsxNTBweFxde21heC13aWR0aDoxNTBweH0ubWF4LXctXFszMjBweFxde21heC13aWR0aDozMjBweH0ubWF4LXctXFszNjBweFxde21heC13aWR0aDozNjBweH0ubWF4LXctZnVsbHttYXgtd2lkdGg6MTAwJX0ubWluLXctMHttaW4td2lkdGg6Y2FsYyh2YXIoLS1zcGFjaW5nKSowKX0ubWluLXctXFs1NnB4XF17bWluLXdpZHRoOjU2cHh9Lm1pbi13LVxbMjAwcHhcXXttaW4td2lkdGg6MjAwcHh9Lm1pbi13LVxbMjIwcHhcXXttaW4td2lkdGg6MjIwcHh9Lm1pbi13LXB4e21pbi13aWR0aDoxcHh9LmZsZXgtMXtmbGV4OjF9LnNocmlua3tmbGV4LXNocmluazoxfS5zaHJpbmstMHtmbGV4LXNocmluazowfS5ncm93e2ZsZXgtZ3JvdzoxfS4tdHJhbnNsYXRlLXgtMVwvMnstLXR3LXRyYW5zbGF0ZS14OmNhbGMoY2FsYygxLzIqMTAwJSkqLTEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9LnRyYW5zbGF0ZS14LTF7LS10dy10cmFuc2xhdGUteDpjYWxjKHZhcigtLXNwYWNpbmcpKjEpO3RyYW5zbGF0ZTp2YXIoLS10dy10cmFuc2xhdGUteCl2YXIoLS10dy10cmFuc2xhdGUteSl9Li10cmFuc2xhdGUteS0xXC8yey0tdHctdHJhbnNsYXRlLXk6Y2FsYyhjYWxjKDEvMioxMDAlKSotMSk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX0udHJhbnNmb3Jte3RyYW5zZm9ybTp2YXIoLS10dy1yb3RhdGUteCwpdmFyKC0tdHctcm90YXRlLXksKXZhcigtLXR3LXJvdGF0ZS16LCl2YXIoLS10dy1za2V3LXgsKXZhcigtLXR3LXNrZXcteSwpfS5hbmltYXRlLVxbZ3JpZC1zcGluXzBcLjdzX2xpbmVhcl9pbmZpbml0ZVxde2FuaW1hdGlvbjpncmlkLXNwaW4gLjdzIGxpbmVhciBpbmZpbml0ZX0uYW5pbWF0ZS1cW2dyaWQtc3Bpbl8wXC44c19saW5lYXJfaW5maW5pdGVcXXthbmltYXRpb246Z3JpZC1zcGluIC44cyBsaW5lYXIgaW5maW5pdGV9LmFuaW1hdGUtXFtzZXJ2ZS1zaW0tdG9hc3QtcG9wLWluXzBcLjIyc19jdWJpYy1iZXppZXJcKDBcLjJcLDBcLjhcLDBcLjJcLDFcKVxde2FuaW1hdGlvbjpzZXJ2ZS1zaW0tdG9hc3QtcG9wLWluIC4yMnMgY3ViaWMtYmV6aWVyKC4yLC44LC4yLDEpfS5hbmltYXRlLVxbc2VydmUtc2ltLXRvYXN0LXBvcC1vdXRfMFwuMnNfZWFzZS1pbl9mb3J3YXJkc1xde2FuaW1hdGlvbjpzZXJ2ZS1zaW0tdG9hc3QtcG9wLW91dCAuMnMgZWFzZS1pbiBmb3J3YXJkc30uY3Vyc29yLWNvbC1yZXNpemV7Y3Vyc29yOmNvbC1yZXNpemV9LmN1cnNvci1kZWZhdWx0e2N1cnNvcjpkZWZhdWx0fS5jdXJzb3Itbm90LWFsbG93ZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLXByb2dyZXNze2N1cnNvcjpwcm9ncmVzc30uY3Vyc29yLXRleHR7Y3Vyc29yOnRleHR9LnRvdWNoLW5vbmV7dG91Y2gtYWN0aW9uOm5vbmV9LnJlc2l6ZXtyZXNpemU6Ym90aH0ubGlzdC1ub25le2xpc3Qtc3R5bGUtdHlwZTpub25lfS5hcHBlYXJhbmNlLW5vbmV7YXBwZWFyYW5jZTpub25lfS5cW2dyaWQtdGVtcGxhdGUtY29sdW1uc1w6MWZyXzFmcl8xZnJcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmciAxZnJ9LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDphdXRvXzFmcl9hdXRvXF17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gMWZyIGF1dG99LlxbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXDphdXRvX21pbm1heFwoMFwsMWZyXClfYXV0b1xde2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIG1pbm1heCgwLDFmcilhdXRvfS5mbGV4LWNvbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uZmxleC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcH0ucGxhY2UtaXRlbXMtY2VudGVye3BsYWNlLWl0ZW1zOiBjZW50ZXJ9Lml0ZW1zLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lfS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6IGNlbnRlcn0uaXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNofS5qdXN0aWZ5LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZ2FwLTBcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5nYXAtMXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0uZ2FwLTFcLjV7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMS41KX0uZ2FwLTJ7Z2FwOmNhbGModmFyKC0tc3BhY2luZykqMil9LmdhcC0yXC41e2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LmdhcC0ze2dhcDpjYWxjKHZhcigtLXNwYWNpbmcpKjMpfS5nYXAtNXtnYXA6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0uZ2FwLVxbNXB4XF17Z2FwOjVweH0uZ2FwLXB4e2dhcDoxcHh9Lmp1c3RpZnktc2VsZi1lbmR7anVzdGlmeS1zZWxmOmZsZXgtZW5kfS50cnVuY2F0ZXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lm92ZXJmbG93LWhpZGRlbntvdmVyZmxvdzpoaWRkZW59Lm92ZXJmbG93LXktYXV0b3tvdmVyZmxvdy15OmF1dG99LnJvdW5kZWR7Ym9yZGVyLXJhZGl1czouMjVyZW19LnJvdW5kZWQtXFsycHhcXXtib3JkZXItcmFkaXVzOjJweH0ucm91bmRlZC1cWzNweFxde2JvcmRlci1yYWRpdXM6M3B4fS5yb3VuZGVkLVxbNHB4XF17Ym9yZGVyLXJhZGl1czo0cHh9LnJvdW5kZWQtXFs1cHhcXXtib3JkZXItcmFkaXVzOjVweH0ucm91bmRlZC1cWzdweFxde2JvcmRlci1yYWRpdXM6N3B4fS5yb3VuZGVkLVxbOHB4XF17Ym9yZGVyLXJhZGl1czo4cHh9LnJvdW5kZWQtXFs5cHhcXXtib3JkZXItcmFkaXVzOjlweH0ucm91bmRlZC1cWzEwcHhcXXtib3JkZXItcmFkaXVzOjEwcHh9LnJvdW5kZWQtXFsxNHB4XF17Ym9yZGVyLXJhZGl1czoxNHB4fS5yb3VuZGVkLWZ1bGx7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LnJvdW5kZWQtbGd7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtbGcpfS5yb3VuZGVkLW1ke2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzLW1kKX0ucm91bmRlZC1ub25le2JvcmRlci1yYWRpdXM6MH0ucm91bmRlZC14bHtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy14bCl9LnJvdW5kZWQteHN7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMteHMpfS5yb3VuZGVkLXQtXFsxMHB4XF17Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoxMHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjEwcHh9LmJvcmRlcntib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MXB4fS5ib3JkZXItMHtib3JkZXItc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6MH0uYm9yZGVyLTJ7Ym9yZGVyLXN0eWxlOnZhcigtLXR3LWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOjJweH0uYm9yZGVyLXR7Ym9yZGVyLXRvcC1zdHlsZTp2YXIoLS10dy1ib3JkZXItc3R5bGUpO2JvcmRlci10b3Atd2lkdGg6MXB4fS5ib3JkZXItcntib3JkZXItcmlnaHQtc3R5bGU6dmFyKC0tdHctYm9yZGVyLXN0eWxlKTtib3JkZXItcmlnaHQtd2lkdGg6MXB4fS5ib3JkZXItZGFzaGVkey0tdHctYm9yZGVyLXN0eWxlOmRhc2hlZDtib3JkZXItc3R5bGU6ZGFzaGVkfS5ib3JkZXItbm9uZXstLXR3LWJvcmRlci1zdHlsZTpub25lO2JvcmRlci1zdHlsZTpub25lfS5cIWJvcmRlci1cW3JnYmFcKDEwXCwxMzJcLDI1NVwsMFwuNlwpXF17Ym9yZGVyLWNvbG9yOiMwYTg0ZmY5OSFpbXBvcnRhbnR9LmJvcmRlci1cW1wjM2I1Zjk5XF17Ym9yZGVyLWNvbG9yOiMzYjVmOTl9LmJvcmRlci1cW1wjNWY2MjY4XF17Ym9yZGVyLWNvbG9yOiM1ZjYyNjh9LmJvcmRlci1cW1wjMjIyXF17Ym9yZGVyLWNvbG9yOiMyMjJ9LmJvcmRlci1hY2NlbnR7Ym9yZGVyLWNvbG9yOnZhcigtLWNvbG9yLWFjY2VudCl9LmJvcmRlci1kYW5nZXJcLzIwe2JvcmRlci1jb2xvcjojZjg3MTcxMzN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWRhbmdlclwvMjB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMjAlLHRyYW5zcGFyZW50KX19LmJvcmRlci1kYW5nZXJcLzMwe2JvcmRlci1jb2xvcjojZjg3MTcxNGR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLWRhbmdlclwvMzB7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMzAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13YXJuaW5nXC8yNXtib3JkZXItY29sb3I6I2ZiYmYyNDQwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJvcmRlci13YXJuaW5nXC8yNXtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdhcm5pbmcpMjUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZXtib3JkZXItY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOiNmZmZmZmYxNH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzh7Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk4JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzEwe2JvcmRlci1jb2xvcjojZmZmZmZmMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8xMHtib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEwJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzEye2JvcmRlci1jb2xvcjojZmZmZmZmMWZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC8xMntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCl9fS5ib3JkZXItd2hpdGVcLzIwe2JvcmRlci1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzIwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMjV7Ym9yZGVyLWNvbG9yOiNmZmZmZmY0MH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzI1e2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjUlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvMzB7Ym9yZGVyLWNvbG9yOiNmZmZmZmY0ZH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ib3JkZXItd2hpdGVcLzMwe2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMzAlLHRyYW5zcGFyZW50KX19LmJvcmRlci13aGl0ZVwvXFswXC4wNlxde2JvcmRlci1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXdoaXRlXC9cWzBcLjA2XF17Ym9yZGVyLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5ib3JkZXItdC1cW1wjZjRmNGY1XF17Ym9yZGVyLXRvcC1jb2xvcjojZjRmNGY1fS5ib3JkZXItdC13aGl0ZXtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNvbG9yLXdoaXRlKX0uYm9yZGVyLXQtd2hpdGVcLzYwe2JvcmRlci10b3AtY29sb3I6I2ZmZjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYm9yZGVyLXQtd2hpdGVcLzYwe2JvcmRlci10b3AtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYwJSx0cmFuc3BhcmVudCl9fS5cIWJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4wOFwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMTQhaW1wb3J0YW50fS5cIWJnLXdoaXRlXC9cWzBcLjEyXF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMWYhaW1wb3J0YW50fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LlwhYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkxMiUsdHJhbnNwYXJlbnQpIWltcG9ydGFudH19LmJnLVxbXCMwYTBhMGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTBhMGN9LmJnLVxbXCMwYTg0ZmZcXXtiYWNrZ3JvdW5kLWNvbG9yOiMwYTg0ZmZ9LmJnLVxbXCMxYzFjMWNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxYzFjMWN9LmJnLVxbXCM2ZTZlNzJcXXtiYWNrZ3JvdW5kLWNvbG9yOiM2ZTZlNzJ9LmJnLVxbXCM5YTlhOWVcXXtiYWNrZ3JvdW5kLWNvbG9yOiM5YTlhOWV9LmJnLVxbXCMyMDJiM2FcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMDJiM2F9LmJnLVxbXCMyMjJcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjJ9LmJnLVxbXCMyNjM2NGNcXXtiYWNrZ3JvdW5kLWNvbG9yOiMyNjM2NGN9LmJnLVxbXCMxMDEwMTBcXXtiYWNrZ3JvdW5kLWNvbG9yOiMxMDEwMTB9LmJnLVxbXCNmODcxNzFcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmODcxNzF9LmJnLVxbcmdiYVwoMTBcLDEzMlwsMjU1XCwwXC4yMlwpXF17YmFja2dyb3VuZC1jb2xvcjojMGE4NGZmMzh9LmJnLVxbcmdiYVwoMjBcLDIyXCwyOFwsMFwuNzhcKVxde2JhY2tncm91bmQtY29sb3I6IzE0MTYxY2M3fS5iZy1cW3JnYmFcKDk5XCwxMDJcLDI0MVwsMFwuMThcKVxde2JhY2tncm91bmQtY29sb3I6IzYzNjZmMTJlfS5iZy1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1hY2NlbnQpfS5iZy1ibGFja3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNvbG9yLWJsYWNrKX0uYmctZGFuZ2VyLXNvZnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1kYW5nZXItc29mdCl9LmJnLWRhbmdlclwvMTB7YmFja2dyb3VuZC1jb2xvcjojZjg3MTcxMWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctZGFuZ2VyXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci1kYW5nZXIpMTAlLHRyYW5zcGFyZW50KX19LmJnLXBhZ2V7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYWdlKX0uYmctcGFuZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbCl9LmJnLXBhbmVsLWJne2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtYmcpfS5iZy1wYW5lbC1kZWVwe2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItcGFuZWwtZGVlcCl9LmJnLXBhbmVsLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1wYW5lbC1vdmVybGF5KX0uYmctc3VjY2Vzcy1lbWVyYWxke2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itc3VjY2Vzcy1lbWVyYWxkKX0uYmctdHJhbnNwYXJlbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwMH0uYmctd2FybmluZ1wvMTB7YmFja2dyb3VuZC1jb2xvcjojZmJiZjI0MWF9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2FybmluZ1wvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2FybmluZykxMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LmJnLXdoaXRlXC82e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC82e2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC84e2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC84e2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8xMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMTB7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8xMntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMTJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8xNXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYyNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvMTV7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTUlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmYzfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC8yMHtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcLzQwe2JhY2tncm91bmQtY29sb3I6I2ZmZjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzQwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvNTB7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmODB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcLzUwe2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUwJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wM1xde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjA4fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjAzXF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMyUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMDRcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4wNFxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQlLHRyYW5zcGFyZW50KX19LmJnLXdoaXRlXC9cWzBcLjA2XF17YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuYmctd2hpdGVcL1xbMFwuMDZcXXtiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4wOFxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjA4XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uYmctd2hpdGVcL1xbMFwuMTJcXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5iZy13aGl0ZVwvXFswXC4xMlxde2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEyJSx0cmFuc3BhcmVudCl9fS5iZy13aGl0ZVwvXFswXC4xNlxde2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjI5fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmJnLXdoaXRlXC9cWzBcLjE2XF17YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTYlLHRyYW5zcGFyZW50KX19LmJnLVxbbGluZWFyLWdyYWRpZW50XCgxNDVkZWdcLFwjMjUzYTVmXCxcIzE2MjEzMlwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoMTQ1ZGVnLCMyNTNhNWYsIzE2MjEzMil9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b19ib3R0b21cLFwjMWMxYzFlXzBcJVwscmdiYVwoMjhcLDI4XCwzMFwsMFwpXzEwMFwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgjMWMxYzFlIDAlLCMxYzFjMWUwMCAxMDAlKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX2JvdHRvbVwscmdiYVwoMjBcLDIwXCwyMlwsMFwuOTZcKV8wXCVcLHJnYmFcKDIwXCwyMFwsMjJcLDBcKV8xMDBcJVwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoIzE0MTQxNmY1IDAlLCMxNDE0MTYwMCAxMDAlKX0uYmctXFtsaW5lYXItZ3JhZGllbnRcKHRvX3JpZ2h0XCxyZ2JhXCgyOFwsMjhcLDMwXCwwXClfMFwlXCxcIzFjMWMxZV81NVwlXClcXXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg5MGRlZywjMWMxYzFlMDAgMCUsIzFjMWMxZSA1NSUpfS5iZy1cW2xpbmVhci1ncmFkaWVudFwodG9fdG9wXCxcIzFjMWMxZV8wXCVcLHJnYmFcKDI4XCwyOFwsMzBcLDBcKV8xMDBcJVwpXF17YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoIzFjMWMxZTAwIDAlLCMxYzFjMWUgMTAwJSl9LmJnLVxbbGluZWFyLWdyYWRpZW50XCh0b190b3BcLHJnYmFcKDIwXCwyMFwsMjJcLDBcLjk2XClfMFwlXCxyZ2JhXCgyMFwsMjBcLDIyXCwwXClfMTAwXCVcKVxde2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KCMxNDE0MTYwMCAwJSwjMTQxNDE2ZjUgMTAwJSl9Lm9iamVjdC1jb250YWlue29iamVjdC1maXQ6Y29udGFpbn0ub2JqZWN0LWNvdmVye29iamVjdC1maXQ6Y292ZXJ9LnAtMHtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqMCl9LnAtMFwuNXtwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5wLTF7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpKjEpfS5wLTNcLjV7cGFkZGluZzpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnAtNntwYWRkaW5nOmNhbGModmFyKC0tc3BhY2luZykqNil9LnB4LTBcLjV7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSouNSl9LnB4LTF7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSoxKX0ucHgtMVwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnB4LTJ7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHgtMlwuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnB4LTN7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSozKX0ucHgtM1wuNXtwYWRkaW5nLWlubGluZTpjYWxjKHZhcigtLXNwYWNpbmcpKjMuNSl9LnB4LTV7cGFkZGluZy1pbmxpbmU6Y2FsYyh2YXIoLS1zcGFjaW5nKSo1KX0ucHgtXFs1XC41cHhcXXtwYWRkaW5nLWlubGluZS1zdGFydDo1LjVweDtwYWRkaW5nLWlubGluZS1lbmQ6NS41cHh9LnB4LVxbN3B4XF17cGFkZGluZy1pbmxpbmUtc3RhcnQ6N3B4O3BhZGRpbmctaW5saW5lLWVuZDo3cHh9LnB5LTBcLjV7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKi41KX0ucHktMXtwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnB5LTFcLjV7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjEuNSl9LnB5LTJ7cGFkZGluZy1ibG9jazpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5weS0yXC41e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5weS00e3BhZGRpbmctYmxvY2s6Y2FsYyh2YXIoLS1zcGFjaW5nKSo0KX0ucHktNntwYWRkaW5nLWJsb2NrOmNhbGModmFyKC0tc3BhY2luZykqNil9LnB5LVxbMnB4XF17cGFkZGluZy1ibG9jay1zdGFydDoycHg7cGFkZGluZy1ibG9jay1lbmQ6MnB4fS5weS1cWzNweFxde3BhZGRpbmctYmxvY2stc3RhcnQ6M3B4O3BhZGRpbmctYmxvY2stZW5kOjNweH0ucHktXFs1cHhcXXtwYWRkaW5nLWJsb2NrLXN0YXJ0OjVweDtwYWRkaW5nLWJsb2NrLWVuZDo1cHh9LnB5LVxbN3B4XF17cGFkZGluZy1ibG9jay1zdGFydDo3cHg7cGFkZGluZy1ibG9jay1lbmQ6N3B4fS5wdC0wXC41e3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5wdC0xe3BhZGRpbmctdG9wOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnB0LTJcLjV7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyLjUpfS5wci0ye3BhZGRpbmctcmlnaHQ6Y2FsYyh2YXIoLS1zcGFjaW5nKSoyKX0ucHItM1wuNXtwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tc3BhY2luZykqMy41KX0ucHItXFsyNnB4XF17cGFkZGluZy1yaWdodDoyNnB4fS5wYi0wXC41e3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqLjUpfS5wYi0xe3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMSl9LnBiLTFcLjV7cGFkZGluZy1ib3R0b206Y2FsYyh2YXIoLS1zcGFjaW5nKSoxLjUpfS5wYi0ye3BhZGRpbmctYm90dG9tOmNhbGModmFyKC0tc3BhY2luZykqMil9LnBiLVxbMnB4XF17cGFkZGluZy1ib3R0b206MnB4fS5wbC0ye3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIpfS5wbC0yXC41e3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLXNwYWNpbmcpKjIuNSl9LnBsLTN7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqMyl9LnBsLTd7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tc3BhY2luZykqNyl9LnBsLVxbMjZweFxde3BhZGRpbmctbGVmdDoyNnB4fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0uXFtmb250LWZhbWlseVw6LWFwcGxlLXN5c3RlbVwsc3lzdGVtLXVpXCxzYW5zLXNlcmlmXF17Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxzeXN0ZW0tdWksQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxOb3RvIFNhbnMsVWJ1bnR1LENhbnRhcmVsbCxIZWx2ZXRpY2EgTmV1ZSxzYW5zLXNlcmlmfS5mb250LVxbaW5oZXJpdFxde2ZvbnQtZmFtaWx5OmluaGVyaXR9LmZvbnQtbW9ub3tmb250LWZhbWlseTp2YXIoLS1mb250LW1vbm8pfS5mb250LXN5c3RlbXtmb250LWZhbWlseTp2YXIoLS1mb250LXN5c3RlbSl9LnRleHQtXFs5cHhcXXtmb250LXNpemU6OXB4fS50ZXh0LVxbMTBweFxde2ZvbnQtc2l6ZToxMHB4fS50ZXh0LVxbMTFcLjVweFxde2ZvbnQtc2l6ZToxMS41cHh9LnRleHQtXFsxMXB4XF17Zm9udC1zaXplOjExcHh9LnRleHQtXFsxMnB4XF17Zm9udC1zaXplOjEycHh9LnRleHQtXFsxM3B4XF17Zm9udC1zaXplOjEzcHh9LnRleHQtXFsxNHB4XF17Zm9udC1zaXplOjE0cHh9LnRleHQtXFsxN3B4XF17Zm9udC1zaXplOjE3cHh9LnRleHQtXFsxOHB4XF17Zm9udC1zaXplOjE4cHh9LmxlYWRpbmctXFsxXC41XF17LS10dy1sZWFkaW5nOjEuNTtsaW5lLWhlaWdodDoxLjV9LmxlYWRpbmctXFsxXC4zNVxdey0tdHctbGVhZGluZzoxLjM1O2xpbmUtaGVpZ2h0OjEuMzV9LmxlYWRpbmctbm9uZXstLXR3LWxlYWRpbmc6MTtsaW5lLWhlaWdodDoxfS5sZWFkaW5nLXRpZ2h0ey0tdHctbGVhZGluZzp2YXIoLS1sZWFkaW5nLXRpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1sZWFkaW5nLXRpZ2h0KX0uZm9udC1tZWRpdW17LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO2ZvbnQtd2VpZ2h0OnZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSl9LmZvbnQtc2VtaWJvbGR7LS10dy1mb250LXdlaWdodDp2YXIoLS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC13ZWlnaHQ6dmFyKC0tZm9udC13ZWlnaHQtc2VtaWJvbGQpfS50cmFja2luZy1cWzBcLjFlbVxdey0tdHctdHJhY2tpbmc6LjFlbTtsZXR0ZXItc3BhY2luZzouMWVtfS50cmFja2luZy1cWzBcLjAyZW1cXXstLXR3LXRyYWNraW5nOi4wMmVtO2xldHRlci1zcGFjaW5nOi4wMmVtfS50cmFja2luZy1cWzBcLjA0ZW1cXXstLXR3LXRyYWNraW5nOi4wNGVtO2xldHRlci1zcGFjaW5nOi4wNGVtfS50cmFja2luZy1cWzBcLjA2ZW1cXXstLXR3LXRyYWNraW5nOi4wNmVtO2xldHRlci1zcGFjaW5nOi4wNmVtfS50cmFja2luZy1cWzBcLjA4ZW1cXXstLXR3LXRyYWNraW5nOi4wOGVtO2xldHRlci1zcGFjaW5nOi4wOGVtfS50cmFja2luZy13aWRley0tdHctdHJhY2tpbmc6dmFyKC0tdHJhY2tpbmctd2lkZSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tdHJhY2tpbmctd2lkZSl9LmJyZWFrLXdvcmRze292ZXJmbG93LXdyYXA6YnJlYWstd29yZH0udGV4dC1lbGxpcHNpc3t0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS53aGl0ZXNwYWNlLW5vd3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9LlwhdGV4dC13aGl0ZXtjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSkhaW1wb3J0YW50fS50ZXh0LVxbXCMwYTBhMGNcXXtjb2xvcjojMGEwYTBjfS50ZXh0LVxbXCM4ZThlOTNcXXtjb2xvcjojOGU4ZTkzfS50ZXh0LVxbXCMzNGQzOTlcXXtjb2xvcjojMzRkMzk5fS50ZXh0LVxbXCMwNjIwMThcXXtjb2xvcjojMDYyMDE4fS50ZXh0LVxbXCNjOGQ3ZmZcXXtjb2xvcjojYzhkN2ZmfS50ZXh0LVxbXCNkMmU3ZmZcXXtjb2xvcjojZDJlN2ZmfS50ZXh0LWFjY2VudHtjb2xvcjp2YXIoLS1jb2xvci1hY2NlbnQpfS50ZXh0LWRhbmdlcntjb2xvcjp2YXIoLS1jb2xvci1kYW5nZXIpfS50ZXh0LWRhbmdlci1zb2Z0e2NvbG9yOnZhcigtLWNvbG9yLWRhbmdlci1zb2Z0KX0udGV4dC13YXJuaW5nLXNvZnR7Y29sb3I6dmFyKC0tY29sb3Itd2FybmluZy1zb2Z0KX0udGV4dC13aGl0ZXtjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LnRleHQtd2hpdGVcLzQwe2NvbG9yOiNmZmY2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzQwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNDV7Y29sb3I6I2ZmZmZmZjczfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzQ1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNTB7Y29sb3I6I2ZmZmZmZjgwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzUwe2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1MCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNTV7Y29sb3I6I2ZmZmZmZjhjfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcLzU1e2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1NSUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvNjB7Y29sb3I6I2ZmZjl9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNjB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTYwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC83MHtjb2xvcjojZmZmZmZmYjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNzB7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTcwJSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC83NXtjb2xvcjojZmZmZmZmYmZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvNzV7Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTc1JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC84MHtjb2xvcjojZmZmY31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC84MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzg1e2NvbG9yOiNmZmZmZmZkOX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC84NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzkwe2NvbG9yOiNmZmZmZmZlNn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC85MHtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOTAlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcLzk1e2NvbG9yOiNmZmZmZmZmMn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC85NXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOTUlLHRyYW5zcGFyZW50KX19LnRleHQtd2hpdGVcL1xbMFwuNDJcXXtjb2xvcjojZmZmZmZmNmJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsudGV4dC13aGl0ZVwvXFswXC40Mlxde2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MiUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC40OFxde2NvbG9yOiNmZmZmZmY3YX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjQ4XF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTQ4JSx0cmFuc3BhcmVudCl9fS50ZXh0LXdoaXRlXC9cWzBcLjU4XF17Y29sb3I6I2ZmZmZmZjk0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LnRleHQtd2hpdGVcL1xbMFwuNThcXXtjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTguMCUsdHJhbnNwYXJlbnQpfX0udGV4dC13aGl0ZVwvXFswXC45Mlxde2NvbG9yOiNmZmZmZmZlYn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey50ZXh0LXdoaXRlXC9cWzBcLjkyXF17Y29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTkyJSx0cmFuc3BhcmVudCl9fS5sb3dlcmNhc2V7dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlfS51cHBlcmNhc2V7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5pdGFsaWN7Zm9udC1zdHlsZTppdGFsaWN9LnRhYnVsYXItbnVtc3stLXR3LW51bWVyaWMtc3BhY2luZzp0YWJ1bGFyLW51bXM7Zm9udC12YXJpYW50LW51bWVyaWM6dmFyKC0tdHctb3JkaW5hbCwpdmFyKC0tdHctc2xhc2hlZC16ZXJvLCl2YXIoLS10dy1udW1lcmljLWZpZ3VyZSwpdmFyKC0tdHctbnVtZXJpYy1zcGFjaW5nLCl2YXIoLS10dy1udW1lcmljLWZyYWN0aW9uLCl9LlxbZm9udC12YXJpYW50LW51bWVyaWNcOnRhYnVsYXItbnVtc1xde2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uYW50aWFsaWFzZWR7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9Lm9wYWNpdHktMHtvcGFjaXR5OjB9Lm9wYWNpdHktNDB7b3BhY2l0eTouNH0ub3BhY2l0eS02MHtvcGFjaXR5Oi42fS5vcGFjaXR5LTEwMHtvcGFjaXR5OjF9LnNoYWRvd3stLXR3LXNoYWRvdzowIDFweCAzcHggMCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKSwwIDFweCAycHggLTFweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDFhKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfMXB4XzJweF9yZ2JhXCgwXCwwXCwwXCwwXC4xOFwpXCwwXzZweF8xOHB4X3JnYmFcKDBcLDBcLDBcLDBcLjI4XClcLGluc2V0XzBfMF8wXzFweF9yZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4wNlwpXF17LS10dy1zaGFkb3c6MCAxcHggMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwMmUpLDAgNnB4IDE4cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA0NyksaW5zZXQgMCAwIDAgMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjZmZmZmZmMGYpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LVxbMF80cHhfMTJweF9yZ2JhXCgwXCwwXCwwXCwwXC40XClcXXstLXR3LXNoYWRvdzowIDRweCAxMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwNik7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzhweF8yNHB4X3JnYmFcKDBcLDBcLDBcLDBcLjRcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDA2KTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNVwpXF17LS10dy1zaGFkb3c6MCA4cHggMjRweCB2YXIoLS10dy1zaGFkb3ctY29sb3IsIzAwMDAwMDgwKTtib3gtc2hhZG93OnZhcigtLXR3LWluc2V0LXNoYWRvdyksdmFyKC0tdHctaW5zZXQtcmluZy1zaGFkb3cpLHZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdyl9LnNoYWRvdy1cWzBfOHB4XzI0cHhfcmdiYVwoMFwsMFwsMFwsMFwuNDVcKVxdey0tdHctc2hhZG93OjAgOHB4IDI0cHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA3Myk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFswXzEycHhfNDBweF9yZ2JhXCgwXCwwXCwwXCwwXC41NVwpXF17LS10dy1zaGFkb3c6MCAxMnB4IDQwcHggdmFyKC0tdHctc2hhZG93LWNvbG9yLCMwMDAwMDA4Yyk7Ym94LXNoYWRvdzp2YXIoLS10dy1pbnNldC1zaGFkb3cpLHZhcigtLXR3LWluc2V0LXJpbmctc2hhZG93KSx2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctXFs4cHhfMF8zMnB4X3JnYmFcKDBcLDBcLDBcLDBcLjM1XClcXXstLXR3LXNoYWRvdzo4cHggMCAzMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNTkpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0ucmluZywucmluZy0xey0tdHctcmluZy1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpMCAwIDAgY2FsYygxcHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpdmFyKC0tdHctcmluZy1jb2xvcixjdXJyZW50Y29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0ucmluZy0yey0tdHctcmluZy1zaGFkb3c6dmFyKC0tdHctcmluZy1pbnNldCwpMCAwIDAgY2FsYygycHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpdmFyKC0tdHctcmluZy1jb2xvcixjdXJyZW50Y29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uXFtib3gtc2hhZG93XDowXzBfNnB4X3JnYmFcKDc0XCwyMjJcLDEyOFwsMFwuN1wpXF17Ym94LXNoYWRvdzowIDAgNnB4ICM0YWRlODBiM30uXFtib3gtc2hhZG93XDowXzBfNnB4X3JnYmFcKDI0OFwsMTEzXCwxMTNcLDBcLjU1XClcXXtib3gtc2hhZG93OjAgMCA2cHggI2Y4NzE3MThjfS5yaW5nLVxbXCMxYzFjMWVcXXstLXR3LXJpbmctY29sb3I6IzFjMWMxZX0ucmluZy13aGl0ZVwvMTB7LS10dy1yaW5nLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5yaW5nLXdoaXRlXC8xMHstLXR3LXJpbmctY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTEwJSx0cmFuc3BhcmVudCl9fS5vdXRsaW5le291dGxpbmUtc3R5bGU6dmFyKC0tdHctb3V0bGluZS1zdHlsZSk7b3V0bGluZS13aWR0aDoxcHh9LmJsdXJ7LS10dy1ibHVyOmJsdXIoOHB4KTtmaWx0ZXI6dmFyKC0tdHctYmx1ciwpdmFyKC0tdHctYnJpZ2h0bmVzcywpdmFyKC0tdHctY29udHJhc3QsKXZhcigtLXR3LWdyYXlzY2FsZSwpdmFyKC0tdHctaHVlLXJvdGF0ZSwpdmFyKC0tdHctaW52ZXJ0LCl2YXIoLS10dy1zYXR1cmF0ZSwpdmFyKC0tdHctc2VwaWEsKXZhcigtLXR3LWRyb3Atc2hhZG93LCl9LmdyYXlzY2FsZXstLXR3LWdyYXlzY2FsZTpncmF5c2NhbGUoMTAwJSk7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5maWx0ZXJ7ZmlsdGVyOnZhcigtLXR3LWJsdXIsKXZhcigtLXR3LWJyaWdodG5lc3MsKXZhcigtLXR3LWNvbnRyYXN0LCl2YXIoLS10dy1ncmF5c2NhbGUsKXZhcigtLXR3LWh1ZS1yb3RhdGUsKXZhcigtLXR3LWludmVydCwpdmFyKC0tdHctc2F0dXJhdGUsKXZhcigtLXR3LXNlcGlhLCl2YXIoLS10dy1kcm9wLXNoYWRvdywpfS5iYWNrZHJvcC1ibHVyey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDhweCk7LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1ciwpdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcywpdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QsKXZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSwpdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSwpdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0LCl2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5LCl2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSwpdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEsKX0uYmFja2Ryb3AtYmx1ci1cWzEycHhcXXstLXR3LWJhY2tkcm9wLWJsdXI6Ymx1cigxMnB4KTstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS5iYWNrZHJvcC1ibHVyLVxbMThweFxdey0tdHctYmFja2Ryb3AtYmx1cjpibHVyKDE4cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWJsdXItbWR7LS10dy1iYWNrZHJvcC1ibHVyOmJsdXIodmFyKC0tYmx1ci1tZCkpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLXNhdHVyYXRlLTE1MHstLXR3LWJhY2tkcm9wLXNhdHVyYXRlOnNhdHVyYXRlKDE1MCUpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCk7YmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIsKXZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MsKXZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0LCl2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUsKXZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUsKXZhcigtLXR3LWJhY2tkcm9wLWludmVydCwpdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSwpdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUsKXZhcigtLXR3LWJhY2tkcm9wLXNlcGlhLCl9LmJhY2tkcm9wLWZpbHRlcnstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpO2JhY2tkcm9wLWZpbHRlcjp2YXIoLS10dy1iYWNrZHJvcC1ibHVyLCl2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzLCl2YXIoLS10dy1iYWNrZHJvcC1jb250cmFzdCwpdmFyKC0tdHctYmFja2Ryb3AtZ3JheXNjYWxlLCl2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlLCl2YXIoLS10dy1iYWNrZHJvcC1pbnZlcnQsKXZhcigtLXR3LWJhY2tkcm9wLW9wYWNpdHksKXZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlLCl2YXIoLS10dy1iYWNrZHJvcC1zZXBpYSwpfS50cmFuc2l0aW9ue3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3Isb3V0bGluZS1jb2xvcix0ZXh0LWRlY29yYXRpb24tY29sb3IsZmlsbCxzdHJva2UsLS10dy1ncmFkaWVudC1mcm9tLC0tdHctZ3JhZGllbnQtdmlhLC0tdHctZ3JhZGllbnQtdG8sb3BhY2l0eSxib3gtc2hhZG93LHRyYW5zZm9ybSx0cmFuc2xhdGUsc2NhbGUscm90YXRlLGZpbHRlciwtd2Via2l0LWJhY2tkcm9wLWZpbHRlcixiYWNrZHJvcC1maWx0ZXIsZGlzcGxheSxjb250ZW50LXZpc2liaWxpdHksb3ZlcmxheSxwb2ludGVyLWV2ZW50czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLVxbYm9yZGVyLWNvbG9yXCxiYWNrZ3JvdW5kXF17dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLVxbd2lkdGhcLGJhY2tncm91bmRcXXt0cmFuc2l0aW9uLXByb3BlcnR5OndpZHRoLGJhY2tncm91bmQ7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246dmFyKC0tdHctZWFzZSx2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKSk7dHJhbnNpdGlvbi1kdXJhdGlvbjp2YXIoLS10dy1kdXJhdGlvbix2YXIoLS1kZWZhdWx0LXRyYW5zaXRpb24tZHVyYXRpb24pKX0udHJhbnNpdGlvbi1jb2xvcnN7dHJhbnNpdGlvbi1wcm9wZXJ0eTpjb2xvcixiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcixvdXRsaW5lLWNvbG9yLHRleHQtZGVjb3JhdGlvbi1jb2xvcixmaWxsLHN0cm9rZSwtLXR3LWdyYWRpZW50LWZyb20sLS10dy1ncmFkaWVudC12aWEsLS10dy1ncmFkaWVudC10bzt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS10dy1lYXNlLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24pKTt0cmFuc2l0aW9uLWR1cmF0aW9uOnZhcigtLXR3LWR1cmF0aW9uLHZhcigtLWRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikpfS50cmFuc2l0aW9uLW9wYWNpdHl7dHJhbnNpdGlvbi1wcm9wZXJ0eTpvcGFjaXR5O3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOnZhcigtLXR3LWVhc2UsdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbikpO3RyYW5zaXRpb24tZHVyYXRpb246dmFyKC0tdHctZHVyYXRpb24sdmFyKC0tZGVmYXVsdC10cmFuc2l0aW9uLWR1cmF0aW9uKSl9LmR1cmF0aW9uLTE1MHstLXR3LWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi1kdXJhdGlvbjouMTVzfS5kdXJhdGlvbi0yMDB7LS10dy1kdXJhdGlvbjouMnM7dHJhbnNpdGlvbi1kdXJhdGlvbjouMnN9LmR1cmF0aW9uLTMwMHstLXR3LWR1cmF0aW9uOi4zczt0cmFuc2l0aW9uLWR1cmF0aW9uOi4zc30uZWFzZS1vdXR7LS10dy1lYXNlOnZhcigtLWVhc2Utb3V0KTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjp2YXIoLS1lYXNlLW91dCl9Lm91dGxpbmUtbm9uZXstLXR3LW91dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLXN0eWxlOm5vbmV9LnNlbGVjdC1ub25ley13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5zZWxlY3QtdGV4dHstd2Via2l0LXVzZXItc2VsZWN0OnRleHQ7dXNlci1zZWxlY3Q6dGV4dH0uXFstd2Via2l0LWJhY2tkcm9wLWZpbHRlclw6Ymx1clwoMTJweFwpXF17LXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6Ymx1cigxMnB4KX0uXFtlZGdlXDp1OFw/XF17ZWRnZTp1OD99LlxbZWRnZVw6dThcXXtlZGdlOnU4fS5cW3Njcm9sbGJhci13aWR0aFw6dGhpblxde3Njcm9sbGJhci13aWR0aDp0aGlufS5cW3NlcVw6dTE2XF17c2VxOnUxNn0uXFtzdWJ0eXBlXDp1OFxde3N1YnR5cGU6dTh9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4yc1wsYm94LXNoYWRvd18wXC4yc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMnMsYm94LXNoYWRvdyAuMnN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4zc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuM3N9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xMnNcLGJvcmRlci1jb2xvcl8wXC4xMnNcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjEycyxib3JkZXItY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1wsY29sb3JfMFwuMTJzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnMsY29sb3IgLjEyc30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjEyc1xde3RyYW5zaXRpb246YmFja2dyb3VuZCAuMTJzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xNXN9LlxbdHJhbnNpdGlvblw6YmFja2dyb3VuZF8wXC4xNXNfZWFzZVwsY29sb3JfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1cyxjb2xvciAuMTVzfS5cW3RyYW5zaXRpb25cOmJhY2tncm91bmRfMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpiYWNrZ3JvdW5kXzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xOHN9LlxbdHJhbnNpdGlvblw6bGVmdF8wXC4xNXNcXXt0cmFuc2l0aW9uOmxlZnQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjEyc1wsYmFja2dyb3VuZF8wXC4xMnNcLGNvbG9yXzBcLjEyc1xde3RyYW5zaXRpb246b3BhY2l0eSAuMTJzLGJhY2tncm91bmQgLjEycyxjb2xvciAuMTJzfS5cW3RyYW5zaXRpb25cOm9wYWNpdHlfMFwuMTJzXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnN9LlxbdHJhbnNpdGlvblw6b3BhY2l0eV8wXC4xNXNfZWFzZVwsYmFja2dyb3VuZF8wXC4xNXNfZWFzZVxde3RyYW5zaXRpb246b3BhY2l0eSAuMTVzLGJhY2tncm91bmQgLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE1c19lYXNlXCx0cmFuc2Zvcm1fMFwuMTVzX2Vhc2VcXXt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyx0cmFuc2Zvcm0gLjE1c30uXFt0cmFuc2l0aW9uXDpvcGFjaXR5XzBcLjE4c19lYXNlXF17dHJhbnNpdGlvbjpvcGFjaXR5IC4xOHN9LlxbdHJhbnNpdGlvblw6cGFkZGluZ18wXC4yNXNfZWFzZVxde3RyYW5zaXRpb246cGFkZGluZyAuMjVzfS5cW3RyYW5zaXRpb25cOnRyYW5zZm9ybV8wXC4yNXNfZWFzZVwsb3BhY2l0eV8wXC4yc19lYXNlXF17dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjI1cyxvcGFjaXR5IC4yc30uXFt0cmFuc2l0aW9uXDp3aWR0aF8xMjBtc19saW5lYXJcXXt0cmFuc2l0aW9uOndpZHRoIC4xMnMgbGluZWFyfS5cW3hcOmYzMlxde3g6ZjMyfS5cW3lcOmYzMlxde3k6ZjMyfS5ncm91cC1mb2N1cy13aXRoaW5cOm9wYWNpdHktMDppcyg6d2hlcmUoLmdyb3VwKTpmb2N1cy13aXRoaW4gKil7b3BhY2l0eTowfUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6cG9pbnRlci1ldmVudHMtYXV0bzppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtwb2ludGVyLWV2ZW50czphdXRvfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOmhpZGRlbjppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXtkaXNwbGF5Om5vbmV9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ncm91cC1ob3Zlclw6dHJhbnNsYXRlLXgtMDppcyg6d2hlcmUoLmdyb3VwKTpob3ZlciAqKXstLXR3LXRyYW5zbGF0ZS14OmNhbGModmFyKC0tc3BhY2luZykqMCk7dHJhbnNsYXRlOnZhcigtLXR3LXRyYW5zbGF0ZS14KXZhcigtLXR3LXRyYW5zbGF0ZS15KX19QG1lZGlhIChob3Zlcjpob3Zlcil7Lmdyb3VwLWhvdmVyXDpvcGFjaXR5LTA6aXMoOndoZXJlKC5ncm91cCk6aG92ZXIgKil7b3BhY2l0eTowfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZ3JvdXAtaG92ZXJcOm9wYWNpdHktMTAwOmlzKDp3aGVyZSguZ3JvdXApOmhvdmVyICope29wYWNpdHk6MX19LnBsYWNlaG9sZGVyXDp0ZXh0LXdoaXRlXC80MDo6cGxhY2Vob2xkZXJ7Y29sb3I6I2ZmZjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsucGxhY2Vob2xkZXJcOnRleHQtd2hpdGVcLzQwOjpwbGFjZWhvbGRlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNDAlLHRyYW5zcGFyZW50KX19LmZvY3VzLXdpdGhpblw6Ymctd2hpdGVcLzEwOmZvY3VzLXdpdGhpbntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxYX1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5mb2N1cy13aXRoaW5cOmJnLXdoaXRlXC8xMDpmb2N1cy13aXRoaW57YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTAlLHRyYW5zcGFyZW50KX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4xNlwpXF06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyOX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4xOFwpXF06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmYyZX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpib3JkZXItd2hpdGVcLzIwOmhvdmVye2JvcmRlci1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ym9yZGVyLXdoaXRlXC8yMDpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JvcmRlci1jb2xvcjojZmZmZmZmZTB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JvcmRlci1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTR9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC84OmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzEyOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjFmfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvMTI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTIlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzE4OmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjJlfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvMTg6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMTglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcLzIwOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8yMDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyMCUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvMjU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmNDB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC8yNTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSkyNSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNVxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjBkfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNVxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTUlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwZn1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5ob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDZcXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA3XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTJ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA3XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNy4wJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMTd9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuaG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOSUsdHJhbnNwYXJlbnQpfX19QG1lZGlhIChob3Zlcjpob3Zlcil7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZmUwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuaG92ZXJcOnRleHQtXFtcIzBhMGEwY1xdOmhvdmVye2NvbG9yOiMwYTBhMGN9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC13aGl0ZTpob3Zlcntjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5ob3Zlclw6dGV4dC13aGl0ZVwvOTA6aG92ZXJ7Y29sb3I6I2ZmZmZmZmU2fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmhvdmVyXDp0ZXh0LXdoaXRlXC85MDpob3Zlcntjb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOTAlLHRyYW5zcGFyZW50KX19fS5mb2N1c1w6Ym9yZGVyLVxbcmdiYVwoMjU1XCwyNTVcLDI1NVwsMFwuMjRcKVxdOmZvY3Vze2JvcmRlci1jb2xvcjojZmZmZmZmM2R9LmZvY3VzXDpiZy13aGl0ZVwvXFswXC4wOFxdOmZvY3Vze2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzXDpiZy13aGl0ZVwvXFswXC4wOFxdOmZvY3Vze2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTglLHRyYW5zcGFyZW50KX19LmZvY3VzXDpvdXRsaW5lLW5vbmU6Zm9jdXN7LS10dy1vdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1zdHlsZTpub25lfS5mb2N1cy12aXNpYmxlXDpiZy13aGl0ZVwvODpmb2N1cy12aXNpYmxle2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjE0fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmZvY3VzLXZpc2libGVcOmJnLXdoaXRlXC84OmZvY3VzLXZpc2libGV7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpOCUsdHJhbnNwYXJlbnQpfX0uZm9jdXMtdmlzaWJsZVw6b3BhY2l0eS0xMDA6Zm9jdXMtdmlzaWJsZXtvcGFjaXR5OjF9LmZvY3VzLXZpc2libGVcOlxbb3V0bGluZVw6MVwuNXB4X3NvbGlkX3JnYmFcKDEwXCwxMzJcLDI1NVwsMFwuNTVcKVxdOmZvY3VzLXZpc2libGV7b3V0bGluZToxLjVweCBzb2xpZCAjMGE4NGZmOGN9LmZvY3VzLXZpc2libGVcOm91dGxpbmUtb2Zmc2V0LTQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLW9mZnNldDo0cHh9LmFjdGl2ZVw6c2NhbGUtXFswXC45N1xdOmFjdGl2ZXtzY2FsZTouOTd9QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpib3JkZXItXFtyZ2JhXCgyNTVcLDI1NVwsMjU1XCwwXC4xOFwpXF06ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6I2ZmZmZmZjJlfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6I2ZmZjN9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvMjA6ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJvcmRlci13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNmZmZmZmZlMH1Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ym9yZGVyLXdoaXRlXC9cWzBcLjg4XF06ZW5hYmxlZDpob3Zlcntib3JkZXItY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTg4JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLVxbXCMyYTJhMmNcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzJhMmEyY319QG1lZGlhIChob3Zlcjpob3Zlcil7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4wNlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMGZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA2XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk2JSx0cmFuc3BhcmVudCl9fX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOmJnLXdoaXRlXC9cWzBcLjA5XF06ZW5hYmxlZDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYxN31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMDlcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTklLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuMjJcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjM4fUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC4yMlxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpMjIlLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6Ymctd2hpdGVcL1xbMFwuODhcXTplbmFibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZmUwfUBzdXBwb3J0cyAoY29sb3I6IGNvbG9yLW1peChpbiBsYWIsIHJlZCwgcmVkKSl7LmVuYWJsZWRcOmhvdmVyXDpiZy13aGl0ZVwvXFswXC44OFxdOmVuYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpODglLHRyYW5zcGFyZW50KX19fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6dGV4dC1cW1wjMGEwYTBjXF06ZW5hYmxlZDpob3Zlcntjb2xvcjojMGEwYTBjfX1AbWVkaWEgKGhvdmVyOmhvdmVyKXsuZW5hYmxlZFw6aG92ZXJcOnRleHQtd2hpdGU6ZW5hYmxlZDpob3Zlcntjb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9fUBtZWRpYSAoaG92ZXI6aG92ZXIpey5lbmFibGVkXDpob3Zlclw6YnJpZ2h0bmVzcy1cWzFcLjA4XF06ZW5hYmxlZDpob3ZlcnstLXR3LWJyaWdodG5lc3M6YnJpZ2h0bmVzcygxLjA4KTtmaWx0ZXI6dmFyKC0tdHctYmx1ciwpdmFyKC0tdHctYnJpZ2h0bmVzcywpdmFyKC0tdHctY29udHJhc3QsKXZhcigtLXR3LWdyYXlzY2FsZSwpdmFyKC0tdHctaHVlLXJvdGF0ZSwpdmFyKC0tdHctaW52ZXJ0LCl2YXIoLS10dy1zYXR1cmF0ZSwpdmFyKC0tdHctc2VwaWEsKXZhcigtLXR3LWRyb3Atc2hhZG93LCl9fS5kaXNhYmxlZFw6Y3Vyc29yLWRlZmF1bHQ6ZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9LmRpc2FibGVkXDpjdXJzb3Itbm90LWFsbG93ZWQ6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5kaXNhYmxlZFw6dGV4dC13aGl0ZVwvNDA6ZGlzYWJsZWR7Y29sb3I6I2ZmZjZ9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuZGlzYWJsZWRcOnRleHQtd2hpdGVcLzQwOmRpc2FibGVke2NvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk0MCUsdHJhbnNwYXJlbnQpfX0uZGlzYWJsZWRcOm9wYWNpdHktNDA6ZGlzYWJsZWR7b3BhY2l0eTouNH0uZGlzYWJsZWRcOm9wYWNpdHktNTA6ZGlzYWJsZWR7b3BhY2l0eTouNX0uXFtcJlw6XDotbW96LXJhbmdlLXByb2dyZXNzXF1cOmgtXFs0cHhcXTo6LW1vei1yYW5nZS1wcm9ncmVzc3toZWlnaHQ6NHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtcHJvZ3Jlc3NcXVw6cm91bmRlZC1mdWxsOjotbW96LXJhbmdlLXByb2dyZXNze2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtcHJvZ3Jlc3NcXVw6YmctXFt2YXJcKC0tc2xpZGVyLWZpbGwtY29sb3JcKVxdOjotbW96LXJhbmdlLXByb2dyZXNze2JhY2tncm91bmQtY29sb3I6dmFyKC0tc2xpZGVyLWZpbGwtY29sb3IpfS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6c2l6ZS1cWzEzcHhcXTo6LW1vei1yYW5nZS10aHVtYnt3aWR0aDoxM3B4O2hlaWdodDoxM3B4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6cm91bmRlZC1mdWxsOjotbW96LXJhbmdlLXRodW1ie2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi1tb3otcmFuZ2UtdGh1bWJcXVw6Ym9yZGVyLW5vbmU6Oi1tb3otcmFuZ2UtdGh1bWJ7LS10dy1ib3JkZXItc3R5bGU6bm9uZTtib3JkZXItc3R5bGU6bm9uZX0uXFtcJlw6XDotbW96LXJhbmdlLXRodW1iXF1cOmJnLXdoaXRlOjotbW96LXJhbmdlLXRodW1ie2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3Itd2hpdGUpfS5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6aC1cWzRweFxdOjotbW96LXJhbmdlLXRyYWNre2hlaWdodDo0cHh9LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpyb3VuZGVkLWZ1bGw6Oi1tb3otcmFuZ2UtdHJhY2t7Ym9yZGVyLXJhZGl1czozLjQwMjgyZTM4cHh9LlxbXCZcOlw6LW1vei1yYW5nZS10cmFja1xdXDpiZy13aGl0ZVwvMjA6Oi1tb3otcmFuZ2UtdHJhY2t7YmFja2dyb3VuZC1jb2xvcjojZmZmM31Ac3VwcG9ydHMgKGNvbG9yOiBjb2xvci1taXgoaW4gbGFiLCByZWQsIHJlZCkpey5cW1wmXDpcOi1tb3otcmFuZ2UtdHJhY2tcXVw6Ymctd2hpdGVcLzIwOjotbW96LXJhbmdlLXRyYWNre2JhY2tncm91bmQtY29sb3I6Y29sb3ItbWl4KGluIG9rbGFiLHZhcigtLWNvbG9yLXdoaXRlKTIwJSx0cmFuc3BhcmVudCl9fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOmgtXFs0cHhcXTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7aGVpZ2h0OjRweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja1xdXDpyb3VuZGVkLWZ1bGw6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNre2JvcmRlci1yYWRpdXM6My40MDI4MmUzOHB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrXF1cOlxbYmFja2dyb3VuZFw6bGluZWFyLWdyYWRpZW50XCh0b19yaWdodFwsdmFyXCgtLXNsaWRlci1maWxsLWNvbG9yXClfdmFyXCgtLXNsaWRlci1maWxsXClcLHJnYmFcKDI1NVwsMjU1XCwyNTVcLDBcLjIyXClfdmFyXCgtLXNsaWRlci1maWxsXClcKVxdOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1zbGlkZXItZmlsbC1jb2xvcil2YXIoLS1zbGlkZXItZmlsbCksI2ZmZmZmZjM4IHZhcigtLXNsaWRlci1maWxsKSl9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6LW10LVxbNFwuNXB4XF06Oi13ZWJraXQtc2xpZGVyLXRodW1ie21hcmdpbi10b3A6LTQuNXB4fS5cW1wmXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOnNpemUtXFsxM3B4XF06Oi13ZWJraXQtc2xpZGVyLXRodW1ie3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHh9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6YXBwZWFyYW5jZS1ub25lOjotd2Via2l0LXNsaWRlci10aHVtYnthcHBlYXJhbmNlOm5vbmV9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6cm91bmRlZC1mdWxsOjotd2Via2l0LXNsaWRlci10aHVtYntib3JkZXItcmFkaXVzOjMuNDAyODJlMzhweH0uXFtcJlw6XDotd2Via2l0LXNsaWRlci10aHVtYlxdXDpiZy13aGl0ZTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci13aGl0ZSl9LlxbXCZcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6c2hhZG93LVxbMF8xcHhfM3B4X3JnYmFcKDBcLDBcLDBcLDBcLjQ1XClcXTo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7LS10dy1zaGFkb3c6MCAxcHggM3B4IHZhcigtLXR3LXNoYWRvdy1jb2xvciwjMDAwMDAwNzMpO2JveC1zaGFkb3c6dmFyKC0tdHctaW5zZXQtc2hhZG93KSx2YXIoLS10dy1pbnNldC1yaW5nLXNoYWRvdyksdmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93KX0uXFtcJlw6ZGlzYWJsZWRcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi1tb3otcmFuZ2UtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmODB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXFtcJlw6ZGlzYWJsZWRcOlw6LW1vei1yYW5nZS10aHVtYlxdXDpiZy13aGl0ZVwvNTA6ZGlzYWJsZWQ6Oi1tb3otcmFuZ2UtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpjb2xvci1taXgoaW4gb2tsYWIsdmFyKC0tY29sb3Itd2hpdGUpNTAlLHRyYW5zcGFyZW50KX19LlxbXCZcOmRpc2FibGVkXDpcOi13ZWJraXQtc2xpZGVyLXRodW1iXF1cOmJnLXdoaXRlXC81MDpkaXNhYmxlZDo6LXdlYmtpdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmZmZmZmODB9QHN1cHBvcnRzIChjb2xvcjogY29sb3ItbWl4KGluIGxhYiwgcmVkLCByZWQpKXsuXFtcJlw6ZGlzYWJsZWRcOlw6LXdlYmtpdC1zbGlkZXItdGh1bWJcXVw6Ymctd2hpdGVcLzUwOmRpc2FibGVkOjotd2Via2l0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOmNvbG9yLW1peChpbiBva2xhYix2YXIoLS1jb2xvci13aGl0ZSk1MCUsdHJhbnNwYXJlbnQpfX19OnJvb3R7LS1idW5jc3MtbGlnaHQ6IDstLWJ1bmNzcy1kYXJrOmluaXRpYWw7Y29sb3Itc2NoZW1lOmRhcmt9QHN1cHBvcnRzIChpbnRlcnBvbGF0ZS1zaXplOiBhbGxvdy1rZXl3b3Jkcyl7OnJvb3R7aW50ZXJwb2xhdGUtc2l6ZTphbGxvdy1rZXl3b3Jkc319ZGV0YWlscy5sZW0tc2VjdGlvbjo6ZGV0YWlscy1jb250ZW50e292ZXJmbG93OmNsaXA7dHJhbnNpdGlvbjpoZWlnaHQgLjIycyBlYXNlLGNvbnRlbnQtdmlzaWJpbGl0eSAuMjJzIGFsbG93LWRpc2NyZXRlO2hlaWdodDowfWRldGFpbHMubGVtLXNlY3Rpb25bb3Blbl06OmRldGFpbHMtY29udGVudHtoZWlnaHQ6YXV0b31kZXRhaWxzLmxlbS1zZWN0aW9uPnN1bW1hcnl7bGlzdC1zdHlsZTpub25lfWRldGFpbHMubGVtLXNlY3Rpb24+c3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5OmhvdmVye2NvbG9yOiNmZmZ9ZGV0YWlscy5sZW0tc2VjdGlvbj5zdW1tYXJ5OmhvdmVyIC5sZW0tY2hldnJvbntjb2xvcjojZmZmZmZmZDkhaW1wb3J0YW50fS5sZW0tY2hldnJvbnt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTZzLGNvbG9yIC4xMnN9QGNvbnRhaW5lciAod2lkdGg8PTIxMHB4KXtbZGF0YS1sb2NhdGlvbi1zdGF0dXMtdG90YWxde2Rpc3BsYXk6bm9uZX19QGtleWZyYW1lcyBncmlkLXNwaW57dG97dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlezAle3RyYW5zZm9ybTp0cmFuc2xhdGUoLTEwMCUpfXRve3RyYW5zZm9ybTp0cmFuc2xhdGUoMjUwJSl9fUBrZXlmcmFtZXMgc2VydmUtc2ltLXRvYXN0LXBvcC1pbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTJweClzY2FsZSguOTYpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKXNjYWxlKDEpfX1Aa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1wb3Atb3V0ezAle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKXNjYWxlKDEpfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSg4cHgpc2NhbGUoLjk2KX19LnNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRle2FuaW1hdGlvbjpzZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlfS5ncmlkLXNodXRkb3duLWJ0bntvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4xMnMsYmFja2dyb3VuZCAuMTJzLGNvbG9yIC4xMnN9LmdyaWQtdGlsZTpob3ZlciAuZ3JpZC1zaHV0ZG93bi1idG57b3BhY2l0eToxfS5ncmlkLXNodXRkb3duLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKXtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzVhMWQxZDtib3JkZXItY29sb3I6I2EzM30uZ3JpZC10aWxlOmhvdmVye2JvcmRlci1jb2xvcjojNTU1IWltcG9ydGFudH1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUteXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy10cmFuc2xhdGUtentzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MH1AcHJvcGVydHkgLS10dy1yb3RhdGUteHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXJvdGF0ZS15e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctcm90YXRlLXp7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1za2V3LXh7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1za2V3LXl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1ib3JkZXItc3R5bGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOnNvbGlkfUBwcm9wZXJ0eSAtLXR3LWxlYWRpbmd7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1mb250LXdlaWdodHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXRyYWNraW5ne3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctb3JkaW5hbHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNsYXNoZWQtemVyb3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LW51bWVyaWMtZmlndXJle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctbnVtZXJpYy1zcGFjaW5ne3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctbnVtZXJpYy1mcmFjdGlvbntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LXNoYWRvdy1hbHBoYXtzeW50YXg6IjxwZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxMDAlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXNoYWRvdy1jb2xvcntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXNoYWRvdy1hbHBoYXtzeW50YXg6IjxwZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxMDAlfUBwcm9wZXJ0eSAtLXR3LXJpbmctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yaW5nLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LWluc2V0LXJpbmctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnNldC1yaW5nLXNoYWRvd3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6MCAwICMwMDAwfUBwcm9wZXJ0eSAtLXR3LXJpbmctaW5zZXR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1yaW5nLW9mZnNldC13aWR0aHtzeW50YXg6IjxsZW5ndGg+Ijtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOjB9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZTtpbml0aWFsLXZhbHVlOiNmZmZ9QHByb3BlcnR5IC0tdHctcmluZy1vZmZzZXQtc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZTowIDAgIzAwMDB9QHByb3BlcnR5IC0tdHctb3V0bGluZS1zdHlsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlO2luaXRpYWwtdmFsdWU6c29saWR9QHByb3BlcnR5IC0tdHctYmx1cntzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJyaWdodG5lc3N7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1jb250cmFzdHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWdyYXlzY2FsZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWh1ZS1yb3RhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1pbnZlcnR7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1vcGFjaXR5e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctc2F0dXJhdGV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1zZXBpYXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHJvcC1zaGFkb3ctY29sb3J7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1kcm9wLXNoYWRvdy1hbHBoYXtzeW50YXg6IjxwZXJjZW50YWdlPiI7aW5oZXJpdHM6ZmFsc2U7aW5pdGlhbC12YWx1ZToxMDAlfUBwcm9wZXJ0eSAtLXR3LWRyb3Atc2hhZG93LXNpemV7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1ibHVye3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzc3tzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWNvbnRyYXN0e3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtZ3JheXNjYWxle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLWludmVydHtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLW9wYWNpdHl7c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1iYWNrZHJvcC1zYXR1cmF0ZXtzeW50YXg6IioiO2luaGVyaXRzOmZhbHNlfUBwcm9wZXJ0eSAtLXR3LWJhY2tkcm9wLXNlcGlhe3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QHByb3BlcnR5IC0tdHctZHVyYXRpb257c3ludGF4OiIqIjtpbmhlcml0czpmYWxzZX1AcHJvcGVydHkgLS10dy1lYXNle3N5bnRheDoiKiI7aW5oZXJpdHM6ZmFsc2V9QGxheWVyIHByb3BlcnRpZXN7QHN1cHBvcnRzICgoLXdlYmtpdC1oeXBoZW5zOiBub25lKSBhbmQgKCBub3QgKG1hcmdpbi10cmltOiBpbmxpbmUpKSkgb3IgKCgtbW96LW9yaWVudDogaW5saW5lKSBhbmQgKCBub3QgKGNvbG9yOnJnYihmcm9tIHJlZCByIGcgYikpKSl7Kiw6YmVmb3JlLDphZnRlciw6OmJhY2tkcm9wey0tdHctdHJhbnNsYXRlLXg6MDstLXR3LXRyYW5zbGF0ZS15OjA7LS10dy10cmFuc2xhdGUtejowOy0tdHctcm90YXRlLXg6aW5pdGlhbDstLXR3LXJvdGF0ZS15OmluaXRpYWw7LS10dy1yb3RhdGUtejppbml0aWFsOy0tdHctc2tldy14OmluaXRpYWw7LS10dy1za2V3LXk6aW5pdGlhbDstLXR3LWJvcmRlci1zdHlsZTpzb2xpZDstLXR3LWxlYWRpbmc6aW5pdGlhbDstLXR3LWZvbnQtd2VpZ2h0OmluaXRpYWw7LS10dy10cmFja2luZzppbml0aWFsOy0tdHctb3JkaW5hbDppbml0aWFsOy0tdHctc2xhc2hlZC16ZXJvOmluaXRpYWw7LS10dy1udW1lcmljLWZpZ3VyZTppbml0aWFsOy0tdHctbnVtZXJpYy1zcGFjaW5nOmluaXRpYWw7LS10dy1udW1lcmljLWZyYWN0aW9uOmluaXRpYWw7LS10dy1zaGFkb3c6MCAwICMwMDAwOy0tdHctc2hhZG93LWNvbG9yOmluaXRpYWw7LS10dy1zaGFkb3ctYWxwaGE6MTAwJTstLXR3LWluc2V0LXNoYWRvdzowIDAgIzAwMDA7LS10dy1pbnNldC1zaGFkb3ctY29sb3I6aW5pdGlhbDstLXR3LWluc2V0LXNoYWRvdy1hbHBoYToxMDAlOy0tdHctcmluZy1jb2xvcjppbml0aWFsOy0tdHctcmluZy1zaGFkb3c6MCAwICMwMDAwOy0tdHctaW5zZXQtcmluZy1jb2xvcjppbml0aWFsOy0tdHctaW5zZXQtcmluZy1zaGFkb3c6MCAwICMwMDAwOy0tdHctcmluZy1pbnNldDppbml0aWFsOy0tdHctcmluZy1vZmZzZXQtd2lkdGg6MHB4Oy0tdHctcmluZy1vZmZzZXQtY29sb3I6I2ZmZjstLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzowIDAgIzAwMDA7LS10dy1vdXRsaW5lLXN0eWxlOnNvbGlkOy0tdHctYmx1cjppbml0aWFsOy0tdHctYnJpZ2h0bmVzczppbml0aWFsOy0tdHctY29udHJhc3Q6aW5pdGlhbDstLXR3LWdyYXlzY2FsZTppbml0aWFsOy0tdHctaHVlLXJvdGF0ZTppbml0aWFsOy0tdHctaW52ZXJ0OmluaXRpYWw7LS10dy1vcGFjaXR5OmluaXRpYWw7LS10dy1zYXR1cmF0ZTppbml0aWFsOy0tdHctc2VwaWE6aW5pdGlhbDstLXR3LWRyb3Atc2hhZG93OmluaXRpYWw7LS10dy1kcm9wLXNoYWRvdy1jb2xvcjppbml0aWFsOy0tdHctZHJvcC1zaGFkb3ctYWxwaGE6MTAwJTstLXR3LWRyb3Atc2hhZG93LXNpemU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWJsdXI6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWJyaWdodG5lc3M6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWNvbnRyYXN0OmluaXRpYWw7LS10dy1iYWNrZHJvcC1ncmF5c2NhbGU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLWludmVydDppbml0aWFsOy0tdHctYmFja2Ryb3Atb3BhY2l0eTppbml0aWFsOy0tdHctYmFja2Ryb3Atc2F0dXJhdGU6aW5pdGlhbDstLXR3LWJhY2tkcm9wLXNlcGlhOmluaXRpYWw7LS10dy1kdXJhdGlvbjppbml0aWFsOy0tdHctZWFzZTppbml0aWFsfX19Cjwvc3R5bGU+CjwvaGVhZD48Ym9keT4KPGRpdiBpZD0icm9vdCI+PC9kaXY+CjwhLS1fX1NJTV9QUkVWSUVXX0NPTkZJR19fLS0+CjxzY3JpcHQgdHlwZT0ibW9kdWxlIj52YXIgVzIsbCxMMyxONixOMCxWMyxDMyxVMyxZNSxfMix1MCx6MyxONSxxNSxHNSxGMyxPMj17fSxEMj1bXSxMNj0vYWNpdHxleCg/OnN8Z3xufHB8JCl8cnBofGdyaWR8b3dzfG1uY3xudHd8aW5lW2NoXXx6b298Xm9yZHxpdGVyYS9pLGwwPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gWDAoJCxLKXtmb3IodmFyIFEgaW4gSykkW1FdPUtbUV07cmV0dXJuICR9ZnVuY3Rpb24gTDUoJCl7JCYmJC5wYXJlbnROb2RlJiYkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoJCl9ZnVuY3Rpb24gUjEoJCxLLFEpe3ZhciBYLFosWSxxPXt9O2ZvcihZIGluIEspWT09ImtleSI/WD1LW1ldOlk9PSJyZWYiP1o9S1tZXTpxW1ldPUtbWV07aWYoYXJndW1lbnRzLmxlbmd0aD4yJiYocS5jaGlsZHJlbj1hcmd1bWVudHMubGVuZ3RoPjM/VzIuY2FsbChhcmd1bWVudHMsMik6USksdHlwZW9mICQ9PSJmdW5jdGlvbiImJiQuZGVmYXVsdFByb3BzIT1udWxsKWZvcihZIGluICQuZGVmYXVsdFByb3BzKXFbWV09PT12b2lkIDAmJihxW1ldPSQuZGVmYXVsdFByb3BzW1ldKTtyZXR1cm4gazIoJCxxLFgsWixudWxsKX1mdW5jdGlvbiBrMigkLEssUSxYLFope3ZhciBZPXt0eXBlOiQscHJvcHM6SyxrZXk6USxyZWY6WCxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6Wj09bnVsbD8rK0wzOlosX19pOi0xLF9fdTowfTtyZXR1cm4gWj09bnVsbCYmbC52bm9kZSE9bnVsbCYmbC52bm9kZShZKSxZfWZ1bmN0aW9uIGUoJCl7cmV0dXJuICQuY2hpbGRyZW59ZnVuY3Rpb24gUzEoJCxLKXt0aGlzLnByb3BzPSQsdGhpcy5jb250ZXh0PUt9ZnVuY3Rpb24gVDAoJCxLKXtpZihLPT1udWxsKXJldHVybiAkLl9fP1QwKCQuX18sJC5fX2krMSk6bnVsbDtmb3IodmFyIFE7SzwkLl9fay5sZW5ndGg7SysrKWlmKChRPSQuX19rW0tdKSE9bnVsbCYmUS5fX2UhPW51bGwpcmV0dXJuIFEuX19lO3JldHVybiB0eXBlb2YgJC50eXBlPT0iZnVuY3Rpb24iP1QwKCQpOm51bGx9ZnVuY3Rpb24gQzYoJCl7aWYoJC5fX1AmJiQuX19kKXt2YXIgSz0kLl9fdixRPUsuX19lLFg9W10sWj1bXSxZPVgwKHt9LEspO1kuX192PUsuX192KzEsbC52bm9kZSYmbC52bm9kZShZKSxDNSgkLl9fUCxZLEssJC5fX24sJC5fX1AubmFtZXNwYWNlVVJJLDMyJksuX191P1tRXTpudWxsLFgsUT09bnVsbD9UMChLKTpRLCEhKDMyJksuX191KSxaKSxZLl9fdj1LLl9fdixZLl9fLl9fa1tZLl9faV09WSxrMyhYLFksWiksSy5fX2U9Sy5fXz1udWxsLFkuX19lIT1RJiZIMyhZKX19ZnVuY3Rpb24gSDMoJCl7aWYoKCQ9JC5fXykhPW51bGwmJiQuX19jIT1udWxsKXJldHVybiAkLl9fZT0kLl9fYy5iYXNlPW51bGwsJC5fX2suc29tZShmdW5jdGlvbihLKXtpZihLIT1udWxsJiZLLl9fZSE9bnVsbClyZXR1cm4gJC5fX2U9JC5fX2MuYmFzZT1LLl9fZX0pLEgzKCQpfWZ1bmN0aW9uIFY1KCQpeyghJC5fX2QmJigkLl9fZD0hMCkmJk4wLnB1c2goJCkmJiFNMi5fX3IrK3x8VjMhPWwuZGVib3VuY2VSZW5kZXJpbmcpJiYoKFYzPWwuZGVib3VuY2VSZW5kZXJpbmcpfHxDMykoTTIpfWZ1bmN0aW9uIE0yKCl7dHJ5e2Zvcih2YXIgJCxLPTE7TjAubGVuZ3RoOylOMC5sZW5ndGg+SyYmTjAuc29ydChVMyksJD1OMC5zaGlmdCgpLEs9TjAubGVuZ3RoLEM2KCQpfWZpbmFsbHl7TjAubGVuZ3RoPU0yLl9fcj0wfX1mdW5jdGlvbiBBMygkLEssUSxYLFosWSxxLEcsQixWLEMpe3ZhciBMLEYsTixfLHosVSxBLE09WCYmWC5fX2t8fEQyLEU9Sy5sZW5ndGg7Zm9yKEI9VTYoUSxLLE0sQixFKSxMPTA7TDxFO0wrKykoTj1RLl9fa1tMXSkhPW51bGwmJihGPU4uX19pIT0tMSYmTVtOLl9faV18fE8yLE4uX19pPUwsVT1DNSgkLE4sRixaLFkscSxHLEIsVixDKSxfPU4uX19lLE4ucmVmJiZGLnJlZiE9Ti5yZWYmJihGLnJlZiYmVTUoRi5yZWYsbnVsbCxOKSxDLnB1c2goTi5yZWYsTi5fX2N8fF8sTikpLHo9PW51bGwmJl8hPW51bGwmJih6PV8pLChBPSEhKDQmTi5fX3UpKXx8Ri5fX2s9PT1OLl9faz8oQj1fMyhOLEIsJCxBKSxBJiZGLl9fZSYmKEYuX19lPW51bGwpKTp0eXBlb2YgTi50eXBlPT0iZnVuY3Rpb24iJiZVIT09dm9pZCAwP0I9VTpfJiYoQj1fLm5leHRTaWJsaW5nKSxOLl9fdSY9LTcpO3JldHVybiBRLl9fZT16LEJ9ZnVuY3Rpb24gVTYoJCxLLFEsWCxaKXt2YXIgWSxxLEcsQixWLEM9US5sZW5ndGgsTD1DLEY9MDtmb3IoJC5fX2s9QXJyYXkoWiksWT0wO1k8WjtZKyspKHE9S1tZXSkhPW51bGwmJnR5cGVvZiBxIT0iYm9vbGVhbiImJnR5cGVvZiBxIT0iZnVuY3Rpb24iPyh0eXBlb2YgcT09InN0cmluZyJ8fHR5cGVvZiBxPT0ibnVtYmVyInx8dHlwZW9mIHE9PSJiaWdpbnQifHxxLmNvbnN0cnVjdG9yPT1TdHJpbmc/cT0kLl9fa1tZXT1rMihudWxsLHEsbnVsbCxudWxsLG51bGwpOmwwKHEpP3E9JC5fX2tbWV09azIoZSx7Y2hpbGRyZW46cX0sbnVsbCxudWxsLG51bGwpOnEuY29uc3RydWN0b3I9PT12b2lkIDAmJnEuX19iPjA/cT0kLl9fa1tZXT1rMihxLnR5cGUscS5wcm9wcyxxLmtleSxxLnJlZj9xLnJlZjpudWxsLHEuX192KTokLl9fa1tZXT1xLEI9WStGLHEuX189JCxxLl9fYj0kLl9fYisxLEc9bnVsbCwoVj1xLl9faT16NihxLFEsQixMKSkhPS0xJiYoTC0tLChHPVFbVl0pJiYoRy5fX3V8PTIpKSxHPT1udWxsfHxHLl9fdj09bnVsbD8oVj09LTEmJihaPkM/Ri0tOlo8QyYmRisrKSx0eXBlb2YgcS50eXBlIT0iZnVuY3Rpb24iJiYocS5fX3V8PTQpKTpWIT1CJiYoVj09Qi0xP0YtLTpWPT1CKzE/RisrOihWPkI/Ri0tOkYrKyxxLl9fdXw9NCkpKTokLl9fa1tZXT1udWxsO2lmKEwpZm9yKFk9MDtZPEM7WSsrKShHPVFbWV0pIT1udWxsJiYoMiZHLl9fdSk9PTAmJihHLl9fZT09WCYmKFg9VDAoRykpLEQzKEcsRykpO3JldHVybiBYfWZ1bmN0aW9uIF8zKCQsSyxRLFgpe3ZhciBaLFk7aWYodHlwZW9mICQudHlwZT09ImZ1bmN0aW9uIil7Zm9yKFo9JC5fX2ssWT0wO1omJlk8Wi5sZW5ndGg7WSsrKVpbWV0mJihaW1ldLl9fPSQsSz1fMyhaW1ldLEssUSxYKSk7cmV0dXJuIEt9JC5fX2UhPUsmJihYJiYoSyYmJC50eXBlJiYhSy5wYXJlbnROb2RlJiYoSz1UMCgkKSksUS5pbnNlcnRCZWZvcmUoJC5fX2UsS3x8bnVsbCkpLEs9JC5fX2UpO2RvIEs9SyYmSy5uZXh0U2libGluZzt3aGlsZShLIT1udWxsJiZLLm5vZGVUeXBlPT04KTtyZXR1cm4gS31mdW5jdGlvbiBaMCgkLEspe3JldHVybiBLPUt8fFtdLCQ9PW51bGx8fHR5cGVvZiAkPT0iYm9vbGVhbiJ8fChsMCgkKT8kLnNvbWUoZnVuY3Rpb24oUSl7WjAoUSxLKX0pOksucHVzaCgkKSksS31mdW5jdGlvbiB6NigkLEssUSxYKXt2YXIgWixZLHEsRz0kLmtleSxCPSQudHlwZSxWPUtbUV0sQz1WIT1udWxsJiYoMiZWLl9fdSk9PTA7aWYoVj09PW51bGwmJkc9PW51bGx8fEMmJkc9PVYua2V5JiZCPT1WLnR5cGUpcmV0dXJuIFE7aWYoWD4oQz8xOjApKXtmb3IoWj1RLTEsWT1RKzE7Wj49MHx8WTxLLmxlbmd0aDspaWYoKFY9S1txPVo+PTA/Wi0tOlkrK10pIT1udWxsJiYoMiZWLl9fdSk9PTAmJkc9PVYua2V5JiZCPT1WLnR5cGUpcmV0dXJuIHF9cmV0dXJuLTF9ZnVuY3Rpb24gQjMoJCxLLFEpe0tbMF09PSItIj8kLnNldFByb3BlcnR5KEssUT09bnVsbD8iIjpRKTokW0tdPVE9PW51bGw/IiI6dHlwZW9mIFEhPSJudW1iZXIifHxMNi50ZXN0KEspP1E6USsicHgifWZ1bmN0aW9uIEEyKCQsSyxRLFgsWil7dmFyIFkscTskOmlmKEs9PSJzdHlsZSIpaWYodHlwZW9mIFE9PSJzdHJpbmciKSQuc3R5bGUuY3NzVGV4dD1RO2Vsc2V7aWYodHlwZW9mIFg9PSJzdHJpbmciJiYoJC5zdHlsZS5jc3NUZXh0PVg9IiIpLFgpZm9yKEsgaW4gWClRJiZLIGluIFF8fEIzKCQuc3R5bGUsSywiIik7aWYoUSlmb3IoSyBpbiBRKVgmJlFbS109PVhbS118fEIzKCQuc3R5bGUsSyxRW0tdKX1lbHNlIGlmKEtbMF09PSJvIiYmS1sxXT09Im4iKVk9SyE9KEs9Sy5yZXBsYWNlKHozLCIkMSIpKSxxPUsudG9Mb3dlckNhc2UoKSxLPXEgaW4gJHx8Sz09Im9uRm9jdXNPdXQifHxLPT0ib25Gb2N1c0luIj9xLnNsaWNlKDIpOksuc2xpY2UoMiksJC5sfHwoJC5sPXt9KSwkLmxbSytZXT1RLFE/WD9RW3UwXT1YW3UwXTooUVt1MF09TjUsJC5hZGRFdmVudExpc3RlbmVyKEssWT9HNTpxNSxZKSk6JC5yZW1vdmVFdmVudExpc3RlbmVyKEssWT9HNTpxNSxZKTtlbHNle2lmKFo9PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpSz1LLnJlcGxhY2UoL3hsaW5rKEh8OmgpLywiaCIpLnJlcGxhY2UoL3NOYW1lJC8sInMiKTtlbHNlIGlmKEshPSJ3aWR0aCImJkshPSJoZWlnaHQiJiZLIT0iaHJlZiImJkshPSJsaXN0IiYmSyE9ImZvcm0iJiZLIT0idGFiSW5kZXgiJiZLIT0iZG93bmxvYWQiJiZLIT0icm93U3BhbiImJkshPSJjb2xTcGFuIiYmSyE9InJvbGUiJiZLIT0icG9wb3ZlciImJksgaW4gJCl0cnl7JFtLXT1RPT1udWxsPyIiOlE7YnJlYWsgJH1jYXRjaChHKXt9dHlwZW9mIFE9PSJmdW5jdGlvbiJ8fChRPT1udWxsfHxRPT09ITEmJktbNF0hPSItIj8kLnJlbW92ZUF0dHJpYnV0ZShLKTokLnNldEF0dHJpYnV0ZShLLEs9PSJwb3BvdmVyIiYmUT09MT8iIjpRKSl9fWZ1bmN0aW9uIE4zKCQpe3JldHVybiBmdW5jdGlvbihLKXtpZih0aGlzLmwpe3ZhciBRPXRoaXMubFtLLnR5cGUrJF07aWYoS1tfMl09PW51bGwpS1tfMl09TjUrKztlbHNlIGlmKEtbXzJdPFFbdTBdKXJldHVybjtyZXR1cm4gUShsLmV2ZW50P2wuZXZlbnQoSyk6Syl9fX1mdW5jdGlvbiBDNSgkLEssUSxYLFosWSxxLEcsQixWKXt2YXIgQyxMLEYsTixfLHosVSxBLE0sRSxULGIseCxtLFIsbz1LLnR5cGU7aWYoSy5jb25zdHJ1Y3RvciE9PXZvaWQgMClyZXR1cm4gbnVsbDsxMjgmUS5fX3UmJihCPSEhKDMyJlEuX191KSxZPVtHPUsuX19lPVEuX19lXSksKEM9bC5fX2IpJiZDKEspOyQ6aWYodHlwZW9mIG89PSJmdW5jdGlvbiIpdHJ5e2lmKEE9Sy5wcm9wcyxNPW8ucHJvdG90eXBlJiZvLnByb3RvdHlwZS5yZW5kZXIsRT0oQz1vLmNvbnRleHRUeXBlKSYmWFtDLl9fY10sVD1DP0U/RS5wcm9wcy52YWx1ZTpDLl9fOlgsUS5fX2M/VT0oTD1LLl9fYz1RLl9fYykuX189TC5fX0U6KE0/Sy5fX2M9TD1uZXcgbyhBLFQpOihLLl9fYz1MPW5ldyBTMShBLFQpLEwuY29uc3RydWN0b3I9byxMLnJlbmRlcj1INiksRSYmRS5zdWIoTCksTC5zdGF0ZXx8KEwuc3RhdGU9e30pLEwuX19uPVgsRj1MLl9fZD0hMCxMLl9faD1bXSxMLl9zYj1bXSksTSYmTC5fX3M9PW51bGwmJihMLl9fcz1MLnN0YXRlKSxNJiZvLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyE9bnVsbCYmKEwuX19zPT1MLnN0YXRlJiYoTC5fX3M9WDAoe30sTC5fX3MpKSxYMChMLl9fcyxvLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhBLEwuX19zKSkpLE49TC5wcm9wcyxfPUwuc3RhdGUsTC5fX3Y9SyxGKU0mJm8uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT1udWxsJiZMLmNvbXBvbmVudFdpbGxNb3VudCE9bnVsbCYmTC5jb21wb25lbnRXaWxsTW91bnQoKSxNJiZMLmNvbXBvbmVudERpZE1vdW50IT1udWxsJiZMLl9faC5wdXNoKEwuY29tcG9uZW50RGlkTW91bnQpO2Vsc2V7aWYoTSYmby5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM9PW51bGwmJkEhPT1OJiZMLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMhPW51bGwmJkwuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhBLFQpLEsuX192PT1RLl9fdnx8IUwuX19lJiZMLnNob3VsZENvbXBvbmVudFVwZGF0ZSE9bnVsbCYmTC5zaG91bGRDb21wb25lbnRVcGRhdGUoQSxMLl9fcyxUKT09PSExKXtLLl9fdiE9US5fX3YmJihMLnByb3BzPUEsTC5zdGF0ZT1MLl9fcyxMLl9fZD0hMSksSy5fX2U9US5fX2UsSy5fX2s9US5fX2ssSy5fX2suc29tZShmdW5jdGlvbihpKXtpJiYoaS5fXz1LKX0pLEQyLnB1c2guYXBwbHkoTC5fX2gsTC5fc2IpLEwuX3NiPVtdLEwuX19oLmxlbmd0aCYmcS5wdXNoKEwpO2JyZWFrICR9TC5jb21wb25lbnRXaWxsVXBkYXRlIT1udWxsJiZMLmNvbXBvbmVudFdpbGxVcGRhdGUoQSxMLl9fcyxUKSxNJiZMLmNvbXBvbmVudERpZFVwZGF0ZSE9bnVsbCYmTC5fX2gucHVzaChmdW5jdGlvbigpe0wuY29tcG9uZW50RGlkVXBkYXRlKE4sXyx6KX0pfWlmKEwuY29udGV4dD1ULEwucHJvcHM9QSxMLl9fUD0kLEwuX19lPSExLGI9bC5fX3IseD0wLE0pTC5zdGF0ZT1MLl9fcyxMLl9fZD0hMSxiJiZiKEspLEM9TC5yZW5kZXIoTC5wcm9wcyxMLnN0YXRlLEwuY29udGV4dCksRDIucHVzaC5hcHBseShMLl9faCxMLl9zYiksTC5fc2I9W107ZWxzZSBkbyBMLl9fZD0hMSxiJiZiKEspLEM9TC5yZW5kZXIoTC5wcm9wcyxMLnN0YXRlLEwuY29udGV4dCksTC5zdGF0ZT1MLl9fczt3aGlsZShMLl9fZCYmKyt4PDI1KTtMLnN0YXRlPUwuX19zLEwuZ2V0Q2hpbGRDb250ZXh0IT1udWxsJiYoWD1YMChYMCh7fSxYKSxMLmdldENoaWxkQ29udGV4dCgpKSksTSYmIUYmJkwuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUhPW51bGwmJih6PUwuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoTixfKSksbT1DIT1udWxsJiZDLnR5cGU9PT1lJiZDLmtleT09bnVsbD9PMyhDLnByb3BzLmNoaWxkcmVuKTpDLEc9QTMoJCxsMChtKT9tOlttXSxLLFEsWCxaLFkscSxHLEIsViksTC5iYXNlPUsuX19lLEsuX191Jj0tMTYxLEwuX19oLmxlbmd0aCYmcS5wdXNoKEwpLFUmJihMLl9fRT1MLl9fPW51bGwpfWNhdGNoKGkpe2lmKEsuX192PW51bGwsQnx8WSE9bnVsbClpZihpLnRoZW4pe2ZvcihLLl9fdXw9Qj8xNjA6MTI4O0cmJkcubm9kZVR5cGU9PTgmJkcubmV4dFNpYmxpbmc7KUc9Ry5uZXh0U2libGluZztZW1kuaW5kZXhPZihHKV09bnVsbCxLLl9fZT1HfWVsc2V7Zm9yKFI9WS5sZW5ndGg7Ui0tOylMNShZW1JdKTtCNShLKX1lbHNlIEsuX19lPVEuX19lLEsuX19rPVEuX19rLGkudGhlbnx8QjUoSyk7bC5fX2UoaSxLLFEpfWVsc2UgWT09bnVsbCYmSy5fX3Y9PVEuX192PyhLLl9faz1RLl9fayxLLl9fZT1RLl9fZSk6Rz1LLl9fZT1GNihRLl9fZSxLLFEsWCxaLFkscSxCLFYpO3JldHVybihDPWwuZGlmZmVkKSYmQyhLKSwxMjgmSy5fX3U/dm9pZCAwOkd9ZnVuY3Rpb24gQjUoJCl7JCYmKCQuX19jJiYoJC5fX2MuX19lPSEwKSwkLl9fayYmJC5fX2suc29tZShCNSkpfWZ1bmN0aW9uIGszKCQsSyxRKXtmb3IodmFyIFg9MDtYPFEubGVuZ3RoO1grKylVNShRW1hdLFFbKytYXSxRWysrWF0pO2wuX19jJiZsLl9fYyhLLCQpLCQuc29tZShmdW5jdGlvbihaKXt0cnl7JD1aLl9faCxaLl9faD1bXSwkLnNvbWUoZnVuY3Rpb24oWSl7WS5jYWxsKFopfSl9Y2F0Y2goWSl7bC5fX2UoWSxaLl9fdil9fSl9ZnVuY3Rpb24gTzMoJCl7cmV0dXJuIHR5cGVvZiAkIT0ib2JqZWN0Inx8JD09bnVsbHx8JC5fX2I+MD8kOmwwKCQpPyQubWFwKE8zKTpYMCh7fSwkKX1mdW5jdGlvbiBGNigkLEssUSxYLFosWSxxLEcsQil7dmFyIFYsQyxMLEYsTixfLHosVT1RLnByb3BzfHxPMixBPUsucHJvcHMsTT1LLnR5cGU7aWYoTT09InN2ZyI/Wj0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciOk09PSJtYXRoIj9aPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjpafHwoWj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLFkhPW51bGwpe2ZvcihWPTA7VjxZLmxlbmd0aDtWKyspaWYoKE49WVtWXSkmJiJzZXRBdHRyaWJ1dGUiaW4gTj09ISFNJiYoTT9OLmxvY2FsTmFtZT09TTpOLm5vZGVUeXBlPT0zKSl7JD1OLFlbVl09bnVsbDticmVha319aWYoJD09bnVsbCl7aWYoTT09bnVsbClyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoQSk7JD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoWixNLEEuaXMmJkEpLEcmJihsLl9fbSYmbC5fX20oSyxZKSxHPSExKSxZPW51bGx9aWYoTT09bnVsbClVPT09QXx8RyYmJC5kYXRhPT1BfHwoJC5kYXRhPUEpO2Vsc2V7aWYoWT1ZJiZXMi5jYWxsKCQuY2hpbGROb2RlcyksIUcmJlkhPW51bGwpZm9yKFU9e30sVj0wO1Y8JC5hdHRyaWJ1dGVzLmxlbmd0aDtWKyspVVsoTj0kLmF0dHJpYnV0ZXNbVl0pLm5hbWVdPU4udmFsdWU7Zm9yKFYgaW4gVSlOPVVbVl0sVj09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj9MPU46Vj09ImNoaWxkcmVuInx8KFYgaW4gQSl8fFY9PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIEEpfHxWPT0iY2hlY2tlZCImJigiZGVmYXVsdENoZWNrZWQiaW4gQSl8fEEyKCQsVixudWxsLE4sWik7Zm9yKFYgaW4gQSlOPUFbVl0sVj09ImNoaWxkcmVuIj9GPU46Vj09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj9DPU46Vj09InZhbHVlIj9fPU46Vj09ImNoZWNrZWQiP3o9TjpHJiZ0eXBlb2YgTiE9ImZ1bmN0aW9uInx8VVtWXT09PU58fEEyKCQsVixOLFVbVl0sWik7aWYoQylHfHxMJiYoQy5fX2h0bWw9PUwuX19odG1sfHxDLl9faHRtbD09JC5pbm5lckhUTUwpfHwoJC5pbm5lckhUTUw9Qy5fX2h0bWwpLEsuX19rPVtdO2Vsc2UgaWYoTCYmKCQuaW5uZXJIVE1MPSIiKSxBMyhLLnR5cGU9PSJ0ZW1wbGF0ZSI/JC5jb250ZW50OiQsbDAoRik/RjpbRl0sSyxRLFgsTT09ImZvcmVpZ25PYmplY3QiPyJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjpaLFkscSxZP1lbMF06US5fX2smJlQwKFEsMCksRyxCKSxZIT1udWxsKWZvcihWPVkubGVuZ3RoO1YtLTspTDUoWVtWXSk7R3x8KFY9InZhbHVlIixNPT0icHJvZ3Jlc3MiJiZfPT1udWxsPyQucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpOl8hPW51bGwmJihfIT09JFtWXXx8TT09InByb2dyZXNzIiYmIV98fE09PSJvcHRpb24iJiZfIT1VW1ZdKSYmQTIoJCxWLF8sVVtWXSxaKSxWPSJjaGVja2VkIix6IT1udWxsJiZ6IT0kW1ZdJiZBMigkLFYseixVW1ZdLFopKX1yZXR1cm4gJH1mdW5jdGlvbiBVNSgkLEssUSl7dHJ5e2lmKHR5cGVvZiAkPT0iZnVuY3Rpb24iKXt2YXIgWD10eXBlb2YgJC5fX3U9PSJmdW5jdGlvbiI7WCYmJC5fX3UoKSxYJiZLPT1udWxsfHwoJC5fX3U9JChLKSl9ZWxzZSAkLmN1cnJlbnQ9S31jYXRjaChaKXtsLl9fZShaLFEpfX1mdW5jdGlvbiBEMygkLEssUSl7dmFyIFgsWjtpZihsLnVubW91bnQmJmwudW5tb3VudCgkKSwoWD0kLnJlZikmJihYLmN1cnJlbnQmJlguY3VycmVudCE9JC5fX2V8fFU1KFgsbnVsbCxLKSksKFg9JC5fX2MpIT1udWxsKXtpZihYLmNvbXBvbmVudFdpbGxVbm1vdW50KXRyeXtYLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2goWSl7bC5fX2UoWSxLKX1YLmJhc2U9WC5fX1A9bnVsbH1pZihYPSQuX19rKWZvcihaPTA7WjxYLmxlbmd0aDtaKyspWFtaXSYmRDMoWFtaXSxLLFF8fHR5cGVvZiAkLnR5cGUhPSJmdW5jdGlvbiIpO1F8fEw1KCQuX19lKSwkLl9fYz0kLl9fPSQuX19lPXZvaWQgMH1mdW5jdGlvbiBINigkLEssUSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoJCxRKX1mdW5jdGlvbiBQMCgkLEssUSl7dmFyIFgsWixZLHE7Sz09ZG9jdW1lbnQmJihLPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCksbC5fXyYmbC5fXygkLEspLFo9KFg9dHlwZW9mIFE9PSJmdW5jdGlvbiIpP251bGw6USYmUS5fX2t8fEsuX19rLFk9W10scT1bXSxDNShLLCQ9KCFYJiZRfHxLKS5fX2s9UjEoZSxudWxsLFskXSksWnx8TzIsTzIsSy5uYW1lc3BhY2VVUkksIVgmJlE/W1FdOlo/bnVsbDpLLmZpcnN0Q2hpbGQ/VzIuY2FsbChLLmNoaWxkTm9kZXMpOm51bGwsWSwhWCYmUT9ROlo/Wi5fX2U6Sy5maXJzdENoaWxkLFgscSksazMoWSwkLHEpfWZ1bmN0aW9uIGQxKCQpe2Z1bmN0aW9uIEsoUSl7dmFyIFgsWjtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHR8fChYPW5ldyBTZXQsKFo9e30pW0suX19jXT10aGlzLHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIFp9LHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtYPW51bGx9LHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKFkpe3RoaXMucHJvcHMudmFsdWUhPVkudmFsdWUmJlguZm9yRWFjaChmdW5jdGlvbihxKXtxLl9fZT0hMCxWNShxKX0pfSx0aGlzLnN1Yj1mdW5jdGlvbihZKXtYLmFkZChZKTt2YXIgcT1ZLmNvbXBvbmVudFdpbGxVbm1vdW50O1kuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtYJiZYLmRlbGV0ZShZKSxxJiZxLmNhbGwoWSl9fSksUS5jaGlsZHJlbn1yZXR1cm4gSy5fX2M9Il9fY0MiK0YzKyssSy5fXz0kLEsuUHJvdmlkZXI9Sy5fX2w9KEsuQ29uc3VtZXI9ZnVuY3Rpb24oUSxYKXtyZXR1cm4gUS5jaGlsZHJlbihYKX0pLmNvbnRleHRUeXBlPUssS31XMj1EMi5zbGljZSxsPXtfX2U6ZnVuY3Rpb24oJCxLLFEsWCl7Zm9yKHZhciBaLFkscTtLPUsuX187KWlmKChaPUsuX19jKSYmIVouX18pdHJ5e2lmKChZPVouY29uc3RydWN0b3IpJiZZLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciE9bnVsbCYmKFouc2V0U3RhdGUoWS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoJCkpLHE9Wi5fX2QpLFouY29tcG9uZW50RGlkQ2F0Y2ghPW51bGwmJihaLmNvbXBvbmVudERpZENhdGNoKCQsWHx8e30pLHE9Wi5fX2QpLHEpcmV0dXJuIFouX19FPVp9Y2F0Y2goRyl7JD1HfXRocm93ICR9fSxMMz0wLE42PWZ1bmN0aW9uKCQpe3JldHVybiAkIT1udWxsJiYkLmNvbnN0cnVjdG9yPT09dm9pZCAwfSxTMS5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oJCxLKXt2YXIgUTtRPXRoaXMuX19zIT1udWxsJiZ0aGlzLl9fcyE9dGhpcy5zdGF0ZT90aGlzLl9fczp0aGlzLl9fcz1YMCh7fSx0aGlzLnN0YXRlKSx0eXBlb2YgJD09ImZ1bmN0aW9uIiYmKCQ9JChYMCh7fSxRKSx0aGlzLnByb3BzKSksJCYmWDAoUSwkKSwkIT1udWxsJiZ0aGlzLl9fdiYmKEsmJnRoaXMuX3NiLnB1c2goSyksVjUodGhpcykpfSxTMS5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oJCl7dGhpcy5fX3YmJih0aGlzLl9fZT0hMCwkJiZ0aGlzLl9faC5wdXNoKCQpLFY1KHRoaXMpKX0sUzEucHJvdG90eXBlLnJlbmRlcj1lLE4wPVtdLEMzPXR5cGVvZiBQcm9taXNlPT0iZnVuY3Rpb24iP1Byb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSk6c2V0VGltZW91dCxVMz1mdW5jdGlvbigkLEspe3JldHVybiAkLl9fdi5fX2ItSy5fX3YuX19ifSxNMi5fX3I9MCxZNT1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDgpLF8yPSJfX2QiK1k1LHUwPSJfX2EiK1k1LHozPS8oUG9pbnRlckNhcHR1cmUpJHxDYXB0dXJlJC9pLE41PTAscTU9TjMoITEpLEc1PU4zKCEwKSxGMz0wO3ZhciBMMCxIMSx6NSxNMyxkMD0wLGIzPVtdLFcxPWwsVzM9VzEuX19iLFQzPVcxLl9fcixQMz1XMS5kaWZmZWQsdzM9VzEuX19jLEUzPVcxLnVubW91bnQsSTM9VzEuX187ZnVuY3Rpb24gdzAoJCxLKXtXMS5fX2gmJlcxLl9faChIMSwkLGQwfHxLKSxkMD0wO3ZhciBRPUgxLl9fSHx8KEgxLl9fSD17X186W10sX19oOltdfSk7cmV0dXJuICQ+PVEuX18ubGVuZ3RoJiZRLl9fLnB1c2goe30pLFEuX19bJF19ZnVuY3Rpb24gRCgkKXtyZXR1cm4gZDA9MSxjMChTMywkKX1mdW5jdGlvbiBjMCgkLEssUSl7dmFyIFg9dzAoTDArKywyKTtpZihYLnQ9JCwhWC5fX2MmJihYLl9fPVtRP1EoSyk6UzModm9pZCAwLEspLGZ1bmN0aW9uKEcpe3ZhciBCPVguX19OP1guX19OWzBdOlguX19bMF0sVj1YLnQoQixHKTtCIT09ViYmKFguX19OPVtWLFguX19bMV1dLFguX19jLnNldFN0YXRlKHt9KSl9XSxYLl9fYz1IMSwhSDEuX19mKSl7dmFyIFo9ZnVuY3Rpb24oRyxCLFYpe2lmKCFYLl9fYy5fX0gpcmV0dXJuITA7dmFyIEM9WC5fX2MuX19ILl9fLmZpbHRlcihmdW5jdGlvbihGKXtyZXR1cm4gRi5fX2N9KTtpZihDLmV2ZXJ5KGZ1bmN0aW9uKEYpe3JldHVybiFGLl9fTn0pKXJldHVybiFZfHxZLmNhbGwodGhpcyxHLEIsVik7dmFyIEw9WC5fX2MucHJvcHMhPT1HO3JldHVybiBDLnNvbWUoZnVuY3Rpb24oRil7aWYoRi5fX04pe3ZhciBOPUYuX19bMF07Ri5fXz1GLl9fTixGLl9fTj12b2lkIDAsTiE9PUYuX19bMF0mJihMPSEwKX19KSxZJiZZLmNhbGwodGhpcyxHLEIsVil8fEx9O0gxLl9fZj0hMDt2YXJ7c2hvdWxkQ29tcG9uZW50VXBkYXRlOlksY29tcG9uZW50V2lsbFVwZGF0ZTpxfT1IMTtIMS5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKEcsQixWKXtpZih0aGlzLl9fZSl7dmFyIEM9WTtZPXZvaWQgMCxaKEcsQixWKSxZPUN9cSYmcS5jYWxsKHRoaXMsRyxCLFYpfSxIMS5zaG91bGRDb21wb25lbnRVcGRhdGU9Wn1yZXR1cm4gWC5fX058fFguX199ZnVuY3Rpb24gSSgkLEspe3ZhciBRPXcwKEwwKyssMyk7IVcxLl9fcyYmSDUoUS5fX0gsSykmJihRLl9fPSQsUS51PUssSDEuX19ILl9faC5wdXNoKFEpKX1mdW5jdGlvbiBvMCgkLEspe3ZhciBRPXcwKEwwKyssNCk7IVcxLl9fcyYmSDUoUS5fX0gsSykmJihRLl9fPSQsUS51PUssSDEuX19oLnB1c2goUSkpfWZ1bmN0aW9uIFMoJCl7cmV0dXJuIGQwPTUsTzEoZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDokfX0sW10pfWZ1bmN0aW9uIE8xKCQsSyl7dmFyIFE9dzAoTDArKyw3KTtyZXR1cm4gSDUoUS5fX0gsSykmJihRLl9fPSQoKSxRLl9fSD1LLFEuX19oPSQpLFEuX199ZnVuY3Rpb24gUCgkLEspe3JldHVybiBkMD04LE8xKGZ1bmN0aW9uKCl7cmV0dXJuICR9LEspfWZ1bmN0aW9uIHIxKCQpe3ZhciBLPUgxLmNvbnRleHRbJC5fX2NdLFE9dzAoTDArKyw5KTtyZXR1cm4gUS5jPSQsSz8oUS5fXz09bnVsbCYmKFEuX189ITAsSy5zdWIoSDEpKSxLLnByb3BzLnZhbHVlKTokLl9ffWZ1bmN0aW9uIFAyKCl7dmFyICQ9dzAoTDArKywxMSk7aWYoISQuX18pe2Zvcih2YXIgSz1IMS5fX3Y7SyE9PW51bGwmJiFLLl9fbSYmSy5fXyE9PW51bGw7KUs9Sy5fXzt2YXIgUT1LLl9fbXx8KEsuX19tPVswLDBdKTskLl9fPSJQIitRWzBdKyItIitRWzFdKyt9cmV0dXJuICQuX199ZnVuY3Rpb24gQTYoKXtmb3IodmFyICQ7JD1iMy5zaGlmdCgpOyl7dmFyIEs9JC5fX0g7aWYoJC5fX1AmJkspdHJ5e0suX19oLnNvbWUoVDIpLEsuX19oLnNvbWUoRjUpLEsuX19oPVtdfWNhdGNoKFEpe0suX19oPVtdLFcxLl9fZShRLCQuX192KX19fVcxLl9fYj1mdW5jdGlvbigkKXtIMT1udWxsLFczJiZXMygkKX0sVzEuX189ZnVuY3Rpb24oJCxLKXskJiZLLl9fayYmSy5fX2suX19tJiYoJC5fX209Sy5fX2suX19tKSxJMyYmSTMoJCxLKX0sVzEuX19yPWZ1bmN0aW9uKCQpe1QzJiZUMygkKSxMMD0wO3ZhciBLPShIMT0kLl9fYykuX19IO0smJih6NT09PUgxPyhLLl9faD1bXSxIMS5fX2g9W10sSy5fXy5zb21lKGZ1bmN0aW9uKFEpe1EuX19OJiYoUS5fXz1RLl9fTiksUS51PVEuX19OPXZvaWQgMH0pKTooSy5fX2guc29tZShUMiksSy5fX2guc29tZShGNSksSy5fX2g9W10sTDA9MCkpLHo1PUgxfSxXMS5kaWZmZWQ9ZnVuY3Rpb24oJCl7UDMmJlAzKCQpO3ZhciBLPSQuX19jO0smJksuX19IJiYoSy5fX0guX19oLmxlbmd0aCYmKGIzLnB1c2goSykhPT0xJiZNMz09PVcxLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChNMz1XMS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpfHxfNikoQTYpKSxLLl9fSC5fXy5zb21lKGZ1bmN0aW9uKFEpe1EudSYmKFEuX19IPVEudSksUS51PXZvaWQgMH0pKSx6NT1IMT1udWxsfSxXMS5fX2M9ZnVuY3Rpb24oJCxLKXtLLnNvbWUoZnVuY3Rpb24oUSl7dHJ5e1EuX19oLnNvbWUoVDIpLFEuX19oPVEuX19oLmZpbHRlcihmdW5jdGlvbihYKXtyZXR1cm4hWC5fX3x8RjUoWCl9KX1jYXRjaChYKXtLLnNvbWUoZnVuY3Rpb24oWil7Wi5fX2gmJihaLl9faD1bXSl9KSxLPVtdLFcxLl9fZShYLFEuX192KX19KSx3MyYmdzMoJCxLKX0sVzEudW5tb3VudD1mdW5jdGlvbigkKXtFMyYmRTMoJCk7dmFyIEssUT0kLl9fYztRJiZRLl9fSCYmKFEuX19ILl9fLnNvbWUoZnVuY3Rpb24oWCl7dHJ5e1QyKFgpfWNhdGNoKFope0s9Wn19KSxRLl9fSD12b2lkIDAsSyYmVzEuX19lKEssUS5fX3YpKX07dmFyIHkzPXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU9PSJmdW5jdGlvbiI7ZnVuY3Rpb24gXzYoJCl7dmFyIEssUT1mdW5jdGlvbigpe2NsZWFyVGltZW91dChYKSx5MyYmY2FuY2VsQW5pbWF0aW9uRnJhbWUoSyksc2V0VGltZW91dCgkKX0sWD1zZXRUaW1lb3V0KFEsMzUpO3kzJiYoSz1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoUSkpfWZ1bmN0aW9uIFQyKCQpe3ZhciBLPUgxLFE9JC5fX2M7dHlwZW9mIFE9PSJmdW5jdGlvbiImJigkLl9fYz12b2lkIDAsUSgpKSxIMT1LfWZ1bmN0aW9uIEY1KCQpe3ZhciBLPUgxOyQuX19jPSQuX18oKSxIMT1LfWZ1bmN0aW9uIEg1KCQsSyl7cmV0dXJuISR8fCQubGVuZ3RoIT09Sy5sZW5ndGh8fEsuc29tZShmdW5jdGlvbihRLFgpe3JldHVybiBRIT09JFtYXX0pfWZ1bmN0aW9uIFMzKCQsSyl7cmV0dXJuIHR5cGVvZiBLPT0iZnVuY3Rpb24iP0soJCk6S31mdW5jdGlvbiBXNigkLEspe2Zvcih2YXIgUSBpbiBLKSRbUV09S1tRXTtyZXR1cm4gJH1mdW5jdGlvbiBSMygkLEspe2Zvcih2YXIgUSBpbiAkKWlmKFEhPT0iX19zb3VyY2UiJiYhKFEgaW4gSykpcmV0dXJuITA7Zm9yKHZhciBYIGluIEspaWYoWCE9PSJfX3NvdXJjZSImJiRbWF0hPT1LW1hdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHgzKCQsSyl7dGhpcy5wcm9wcz0kLHRoaXMuY29udGV4dD1LfSh4My5wcm90b3R5cGU9bmV3IFMxKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCx4My5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKCQsSyl7cmV0dXJuIFIzKHRoaXMucHJvcHMsJCl8fFIzKHRoaXMuc3RhdGUsSyl9O3ZhciB2Mz1sLl9fYjtsLl9fYj1mdW5jdGlvbigkKXskLnR5cGUmJiQudHlwZS5fX2YmJiQucmVmJiYoJC5wcm9wcy5yZWY9JC5yZWYsJC5yZWY9bnVsbCksdjMmJnYzKCQpfTt2YXIgVDY9bC5fX2U7bC5fX2U9ZnVuY3Rpb24oJCxLLFEsWCl7aWYoJC50aGVuKXtmb3IodmFyIFosWT1LO1k9WS5fXzspaWYoKFo9WS5fX2MpJiZaLl9fYylyZXR1cm4gSy5fX2U9PW51bGwmJihLLl9fZT1RLl9fZSxLLl9faz1RLl9fayksWi5fX2MoJCxLKX1UNigkLEssUSxYKX07dmFyIGczPWwudW5tb3VudDtmdW5jdGlvbiB1MygkLEssUSl7cmV0dXJuICQmJigkLl9fYyYmJC5fX2MuX19IJiYoJC5fX2MuX19ILl9fLmZvckVhY2goZnVuY3Rpb24oWCl7dHlwZW9mIFguX19jPT0iZnVuY3Rpb24iJiZYLl9fYygpfSksJC5fX2MuX19IPW51bGwpLCgkPVc2KHt9LCQpKS5fX2MhPW51bGwmJigkLl9fYy5fX1A9PT1RJiYoJC5fX2MuX19QPUspLCQuX19jLl9fZT0hMCwkLl9fYz1udWxsKSwkLl9faz0kLl9fayYmJC5fX2subWFwKGZ1bmN0aW9uKFgpe3JldHVybiB1MyhYLEssUSl9KSksJH1mdW5jdGlvbiBsMygkLEssUSl7cmV0dXJuICQmJlEmJigkLl9fdj1udWxsLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWCl7cmV0dXJuIGwzKFgsSyxRKX0pLCQuX19jJiYkLl9fYy5fX1A9PT1LJiYoJC5fX2UmJlEuYXBwZW5kQ2hpbGQoJC5fX2UpLCQuX19jLl9fZT0hMCwkLl9fYy5fX1A9USkpLCR9ZnVuY3Rpb24gQTUoKXt0aGlzLl9fdT0wLHRoaXMubz1udWxsLHRoaXMuX19iPW51bGx9ZnVuY3Rpb24gZDMoJCl7dmFyIEs9JC5fXyYmJC5fXy5fX2M7cmV0dXJuIEsmJksuX19hJiZLLl9fYSgkKX1mdW5jdGlvbiB3Migpe3RoaXMuaT1udWxsLHRoaXMubD1udWxsfWwudW5tb3VudD1mdW5jdGlvbigkKXt2YXIgSz0kLl9fYztLJiYoSy5fX3o9ITApLEsmJksuX19SJiZLLl9fUigpLEsmJjMyJiQuX191JiYoJC50eXBlPW51bGwpLGczJiZnMygkKX0sKEE1LnByb3RvdHlwZT1uZXcgUzEpLl9fYz1mdW5jdGlvbigkLEspe3ZhciBRPUsuX19jLFg9dGhpcztYLm89PW51bGwmJihYLm89W10pLFguby5wdXNoKFEpO3ZhciBaPWQzKFguX192KSxZPSExLHE9ZnVuY3Rpb24oKXtZfHxYLl9fenx8KFk9ITAsUS5fX1I9bnVsbCxaP1ooQik6QigpKX07US5fX1I9cTt2YXIgRz1RLl9fUDtRLl9fUD1udWxsO3ZhciBCPWZ1bmN0aW9uKCl7aWYoIS0tWC5fX3Upe2lmKFguc3RhdGUuX19hKXt2YXIgVj1YLnN0YXRlLl9fYTtYLl9fdi5fX2tbMF09bDMoVixWLl9fYy5fX1AsVi5fX2MuX19PKX12YXIgQztmb3IoWC5zZXRTdGF0ZSh7X19hOlguX19iPW51bGx9KTtDPVguby5wb3AoKTspQy5fX1A9RyxDLmZvcmNlVXBkYXRlKCl9fTtYLl9fdSsrfHwzMiZLLl9fdXx8WC5zZXRTdGF0ZSh7X19hOlguX19iPVguX192Ll9fa1swXX0pLCQudGhlbihxLHEpfSxBNS5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LEE1LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oJCxLKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgUT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxYPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPXUzKHRoaXMuX19iLFEsWC5fX089WC5fX1ApfXRoaXMuX19iPW51bGx9dmFyIFo9Sy5fX2EmJlIxKGUsbnVsbCwkLmZhbGxiYWNrKTtyZXR1cm4gWiYmKFouX191Jj0tMzMpLFtSMShlLG51bGwsSy5fX2E/bnVsbDokLmNoaWxkcmVuKSxaXX07dmFyIGgzPWZ1bmN0aW9uKCQsSyxRKXtpZigrK1FbMV09PT1RWzBdJiYkLmwuZGVsZXRlKEspLCQucHJvcHMucmV2ZWFsT3JkZXImJigkLnByb3BzLnJldmVhbE9yZGVyWzBdIT09InQifHwhJC5sLnNpemUpKWZvcihRPSQuaTtROyl7Zm9yKDtRLmxlbmd0aD4zOylRLnBvcCgpKCk7aWYoUVsxXTxRWzBdKWJyZWFrOyQuaT1RPVFbMl19fTsodzIucHJvdG90eXBlPW5ldyBTMSkuX19hPWZ1bmN0aW9uKCQpe3ZhciBLPXRoaXMsUT1kMyhLLl9fdiksWD1LLmwuZ2V0KCQpO3JldHVybiBYWzBdKyssZnVuY3Rpb24oWil7dmFyIFk9ZnVuY3Rpb24oKXtLLnByb3BzLnJldmVhbE9yZGVyPyhYLnB1c2goWiksaDMoSywkLFgpKTpaKCl9O1E/UShZKTpZKCl9fSx3Mi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCQpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciBLPVowKCQuY2hpbGRyZW4pOyQucmV2ZWFsT3JkZXImJiQucmV2ZWFsT3JkZXJbMF09PT0iYiImJksucmV2ZXJzZSgpO2Zvcih2YXIgUT1LLmxlbmd0aDtRLS07KXRoaXMubC5zZXQoS1tRXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gJC5jaGlsZHJlbn0sdzIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT13Mi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgJD10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKEssUSl7aDMoJCxRLEspfSl9O3ZhciBQNj10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyx3Nj0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sRTY9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyxJNj0vW0EtWjAtOV0vZyx5Nj10eXBlb2YgZG9jdW1lbnQ8InUiLGI2PWZ1bmN0aW9uKCQpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdCgkKX07ZnVuY3Rpb24gYzMoJCxLLFEpe3JldHVybiBLLl9faz09bnVsbCYmKEsudGV4dENvbnRlbnQ9IiIpLFAwKCQsSyksdHlwZW9mIFE9PSJmdW5jdGlvbiImJlEoKSwkPyQuX19jOm51bGx9UzEucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oJCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFMxLnByb3RvdHlwZSwkLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbIlVOU0FGRV8iKyRdfSxzZXQ6ZnVuY3Rpb24oSyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsJCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkt9KX19KX0pO3ZhciBqMz1sLmV2ZW50O2wuZXZlbnQ9ZnVuY3Rpb24oJCl7cmV0dXJuIGozJiYoJD1qMygkKSksJC5wZXJzaXN0PWZ1bmN0aW9uKCl7fSwkLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSwkLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LCQubmF0aXZlRXZlbnQ9JH07dmFyIG8zLFM2PXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxtMz1sLnZub2RlO2wudm5vZGU9ZnVuY3Rpb24oJCl7dHlwZW9mICQudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKEspe3Zhcntwcm9wczpRLHR5cGU6WH09SyxaPXt9LFk9WC5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgcSBpbiBRKXt2YXIgRz1RW3FdO2lmKCEocT09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIFEpJiZHPT1udWxsfHx5NiYmcT09PSJjaGlsZHJlbiImJlg9PT0ibm9zY3JpcHQifHxxPT09ImNsYXNzInx8cT09PSJjbGFzc05hbWUiKSl7dmFyIEI9cS50b0xvd2VyQ2FzZSgpO3E9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluIFEmJlEudmFsdWU9PW51bGw/cT0idmFsdWUiOnE9PT0iZG93bmxvYWQiJiZHPT09ITA/Rz0iIjpCPT09InRyYW5zbGF0ZSImJkc9PT0ibm8iP0c9ITE6QlswXT09PSJvIiYmQlsxXT09PSJuIj9CPT09Im9uZG91YmxlY2xpY2siP3E9Im9uZGJsY2xpY2siOkIhPT0ib25jaGFuZ2UifHxYIT09ImlucHV0IiYmWCE9PSJ0ZXh0YXJlYSJ8fGI2KFEudHlwZSk/Qj09PSJvbmZvY3VzIj9xPSJvbmZvY3VzaW4iOkI9PT0ib25ibHVyIj9xPSJvbmZvY3Vzb3V0IjpFNi50ZXN0KHEpJiYocT1CKTpCPXE9Im9uaW5wdXQiOlkmJnc2LnRlc3QocSk/cT1xLnJlcGxhY2UoSTYsIi0kJiIpLnRvTG93ZXJDYXNlKCk6Rz09PW51bGwmJihHPXZvaWQgMCksQj09PSJvbmlucHV0IiYmWltxPUJdJiYocT0ib25pbnB1dENhcHR1cmUiKSxaW3FdPUd9fVg9PSJzZWxlY3QiJiYoWi5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShaLnZhbHVlKSYmKFoudmFsdWU9WjAoUS5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihWKXtWLnByb3BzLnNlbGVjdGVkPVoudmFsdWUuaW5kZXhPZihWLnByb3BzLnZhbHVlKSE9LTF9KSksWi5kZWZhdWx0VmFsdWUhPW51bGwmJihaLnZhbHVlPVowKFEuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oVil7Vi5wcm9wcy5zZWxlY3RlZD1aLm11bHRpcGxlP1ouZGVmYXVsdFZhbHVlLmluZGV4T2YoVi5wcm9wcy52YWx1ZSkhPS0xOlouZGVmYXVsdFZhbHVlPT1WLnByb3BzLnZhbHVlfSkpKSxRLmNsYXNzJiYhUS5jbGFzc05hbWU/KFouY2xhc3M9US5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkoWiwiY2xhc3NOYW1lIixTNikpOlEuY2xhc3NOYW1lJiYoWi5jbGFzcz1aLmNsYXNzTmFtZT1RLmNsYXNzTmFtZSksSy5wcm9wcz1afSgkKSwkLiQkdHlwZW9mPVA2LG0zJiZtMygkKX07dmFyIGYzPWwuX19yO2wuX19yPWZ1bmN0aW9uKCQpe2YzJiZmMygkKSxvMz0kLl9fY307dmFyIHAzPWwuZGlmZmVkO2wuZGlmZmVkPWZ1bmN0aW9uKCQpe3AzJiZwMygkKTt2YXJ7cHJvcHM6SyxfX2U6UX09JDtRIT1udWxsJiYkLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gSyYmSy52YWx1ZSE9PVEudmFsdWUmJihRLnZhbHVlPUsudmFsdWU9PW51bGw/IiI6Sy52YWx1ZSksbzM9bnVsbH07ZnVuY3Rpb24gYTMoJCl7cmV0dXJuISEkLl9fayYmKFAwKG51bGwsJCksITApfWZ1bmN0aW9uIHIzKCQpe3JldHVybntyZW5kZXI6ZnVuY3Rpb24oSyl7YzMoSywkKX0sdW5tb3VudDpmdW5jdGlvbigpe2EzKCQpfX19ZnVuY3Rpb24gSjgoJCxLKXtmb3IodmFyIFEgaW4gSykkW1FdPUtbUV07cmV0dXJuICR9ZnVuY3Rpb24gTzUoJCxLKXtmb3IodmFyIFEgaW4gJClpZihRIT09Il9fc291cmNlIiYmIShRIGluIEspKXJldHVybiEwO2Zvcih2YXIgWCBpbiBLKWlmKFghPT0iX19zb3VyY2UiJiYkW1hdIT09S1tYXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBpMygkLEspe3RoaXMucHJvcHM9JCx0aGlzLmNvbnRleHQ9S31mdW5jdGlvbiBFMCgkLEspe2Z1bmN0aW9uIFEoWil7dmFyIFk9dGhpcy5wcm9wcy5yZWY7cmV0dXJuIFkhPVoucmVmJiZZJiYodHlwZW9mIFk9PSJmdW5jdGlvbiI/WShudWxsKTpZLmN1cnJlbnQ9bnVsbCksSz8hSyh0aGlzLnByb3BzLFopfHxZIT1aLnJlZjpPNSh0aGlzLnByb3BzLFopfWZ1bmN0aW9uIFgoWil7cmV0dXJuIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPVEsUjEoJCxaKX1yZXR1cm4gWC5kaXNwbGF5TmFtZT0iTWVtbygiKygkLmRpc3BsYXlOYW1lfHwkLm5hbWUpKyIpIixYLl9fZj1YLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFgudHlwZT0kLFh9KGkzLnByb3RvdHlwZT1uZXcgUzEpLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwLGkzLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oJCxLKXtyZXR1cm4gTzUodGhpcy5wcm9wcywkKXx8TzUodGhpcy5zdGF0ZSxLKX07dmFyIG4zPWwuX19iO2wuX19iPWZ1bmN0aW9uKCQpeyQudHlwZSYmJC50eXBlLl9fZiYmJC5yZWYmJigkLnByb3BzLnJlZj0kLnJlZiwkLnJlZj1udWxsKSxuMyYmbjMoJCl9O3ZhciBSNj10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKXx8MzkxMTtmdW5jdGlvbiBpMSgkKXtmdW5jdGlvbiBLKFEpe3ZhciBYPUo4KHt9LFEpO3JldHVybiBkZWxldGUgWC5yZWYsJChYLFEucmVmfHxudWxsKX1yZXR1cm4gSy4kJHR5cGVvZj1SNixLLnJlbmRlcj0kLEsucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9Sy5fX2Y9ITAsSy5kaXNwbGF5TmFtZT0iRm9yd2FyZFJlZigiKygkLmRpc3BsYXlOYW1lfHwkLm5hbWUpKyIpIixLfXZhciB4Nj1sLl9fZTtsLl9fZT1mdW5jdGlvbigkLEssUSxYKXtpZigkLnRoZW4pe2Zvcih2YXIgWixZPUs7WT1ZLl9fOylpZigoWj1ZLl9fYykmJlouX19jKXJldHVybiBLLl9fZT09bnVsbCYmKEsuX19lPVEuX19lLEsuX19rPVEuX19rKSxaLl9fYygkLEspfXg2KCQsSyxRLFgpfTt2YXIgczM9bC51bm1vdW50O2Z1bmN0aW9uIFg4KCQsSyxRKXtyZXR1cm4gJCYmKCQuX19jJiYkLl9fYy5fX0gmJigkLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihYKXt0eXBlb2YgWC5fX2M9PSJmdW5jdGlvbiImJlguX19jKCl9KSwkLl9fYy5fX0g9bnVsbCksKCQ9Sjgoe30sJCkpLl9fYyE9bnVsbCYmKCQuX19jLl9fUD09PVEmJigkLl9fYy5fX1A9SyksJC5fX2MuX19lPSEwLCQuX19jPW51bGwpLCQuX19rPSQuX19rJiYkLl9fay5tYXAoZnVuY3Rpb24oWCl7cmV0dXJuIFg4KFgsSyxRKX0pKSwkfWZ1bmN0aW9uIFo4KCQsSyxRKXtyZXR1cm4gJCYmUSYmKCQuX192PW51bGwsJC5fX2s9JC5fX2smJiQuX19rLm1hcChmdW5jdGlvbihYKXtyZXR1cm4gWjgoWCxLLFEpfSksJC5fX2MmJiQuX19jLl9fUD09PUsmJigkLl9fZSYmUS5hcHBlbmRDaGlsZCgkLl9fZSksJC5fX2MuX19lPSEwLCQuX19jLl9fUD1RKSksJH1mdW5jdGlvbiBrNSgpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBZOCgkKXt2YXIgSz0kLl9fJiYkLl9fLl9fYztyZXR1cm4gSyYmSy5fX2EmJksuX19hKCQpfWZ1bmN0aW9uIEUyKCl7dGhpcy5pPW51bGwsdGhpcy5sPW51bGx9bC51bm1vdW50PWZ1bmN0aW9uKCQpe3ZhciBLPSQuX19jO0smJihLLl9fej0hMCksSyYmSy5fX1ImJksuX19SKCksSyYmMzImJC5fX3UmJigkLnR5cGU9bnVsbCksczMmJnMzKCQpfSwoazUucHJvdG90eXBlPW5ldyBTMSkuX19jPWZ1bmN0aW9uKCQsSyl7dmFyIFE9Sy5fX2MsWD10aGlzO1gubz09bnVsbCYmKFgubz1bXSksWC5vLnB1c2goUSk7dmFyIFo9WTgoWC5fX3YpLFk9ITEscT1mdW5jdGlvbigpe1l8fFguX196fHwoWT0hMCxRLl9fUj1udWxsLFo/WihCKTpCKCkpfTtRLl9fUj1xO3ZhciBHPVEuX19QO1EuX19QPW51bGw7dmFyIEI9ZnVuY3Rpb24oKXtpZighLS1YLl9fdSl7aWYoWC5zdGF0ZS5fX2Epe3ZhciBWPVguc3RhdGUuX19hO1guX192Ll9fa1swXT1aOChWLFYuX19jLl9fUCxWLl9fYy5fX08pfXZhciBDO2ZvcihYLnNldFN0YXRlKHtfX2E6WC5fX2I9bnVsbH0pO0M9WC5vLnBvcCgpOylDLl9fUD1HLEMuZm9yY2VVcGRhdGUoKX19O1guX191Kyt8fDMyJksuX191fHxYLnNldFN0YXRlKHtfX2E6WC5fX2I9WC5fX3YuX19rWzBdfSksJC50aGVuKHEscSl9LGs1LnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMubz1bXX0sazUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkLEspe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciBRPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFg9dGhpcy5fX3YuX19rWzBdLl9fYzt0aGlzLl9fdi5fX2tbMF09WDgodGhpcy5fX2IsUSxYLl9fTz1YLl9fUCl9dGhpcy5fX2I9bnVsbH12YXIgWj1LLl9fYSYmUjEoZSxudWxsLCQuZmFsbGJhY2spO3JldHVybiBaJiYoWi5fX3UmPS0zMyksW1IxKGUsbnVsbCxLLl9fYT9udWxsOiQuY2hpbGRyZW4pLFpdfTt2YXIgdDM9ZnVuY3Rpb24oJCxLLFEpe2lmKCsrUVsxXT09PVFbMF0mJiQubC5kZWxldGUoSyksJC5wcm9wcy5yZXZlYWxPcmRlciYmKCQucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCEkLmwuc2l6ZSkpZm9yKFE9JC5pO1E7KXtmb3IoO1EubGVuZ3RoPjM7KVEucG9wKCkoKTtpZihRWzFdPFFbMF0pYnJlYWs7JC5pPVE9UVsyXX19O2Z1bmN0aW9uIHY2KCQpe3JldHVybiB0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiAkLmNvbnRleHR9LCQuY2hpbGRyZW59ZnVuY3Rpb24gZzYoJCl7dmFyIEs9dGhpcyxRPSQuaDtpZihLLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7UDAobnVsbCxLLnYpLEsudj1udWxsLEsuaD1udWxsfSxLLmgmJksuaCE9PVEmJksuY29tcG9uZW50V2lsbFVubW91bnQoKSwhSy52KXtmb3IodmFyIFg9Sy5fX3Y7WCE9PW51bGwmJiFYLl9fbSYmWC5fXyE9PW51bGw7KVg9WC5fXztLLmg9USxLLnY9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpRLGNoaWxkTm9kZXM6W10sX19rOntfX206WC5fX219LGNvbnRhaW5zOmZ1bmN0aW9uKCl7cmV0dXJuITB9LG5hbWVzcGFjZVVSSTpRLm5hbWVzcGFjZVVSSSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oWixZKXt0aGlzLmNoaWxkTm9kZXMucHVzaChaKSxLLmguaW5zZXJ0QmVmb3JlKFosWSl9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKFope3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoWik+Pj4xLDEpLEsuaC5yZW1vdmVDaGlsZChaKX19fVAwKFIxKHY2LHtjb250ZXh0OksuY29udGV4dH0sJC5fX3YpLEsudil9ZnVuY3Rpb24gcTgoJCxLKXt2YXIgUT1SMShnNix7X192OiQsaDpLfSk7cmV0dXJuIFEuY29udGFpbmVySW5mbz1LLFF9KEUyLnByb3RvdHlwZT1uZXcgUzEpLl9fYT1mdW5jdGlvbigkKXt2YXIgSz10aGlzLFE9WTgoSy5fX3YpLFg9Sy5sLmdldCgkKTtyZXR1cm4gWFswXSsrLGZ1bmN0aW9uKFope3ZhciBZPWZ1bmN0aW9uKCl7Sy5wcm9wcy5yZXZlYWxPcmRlcj8oWC5wdXNoKFopLHQzKEssJCxYKSk6WigpfTtRP1EoWSk6WSgpfX0sRTIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigkKXt0aGlzLmk9bnVsbCx0aGlzLmw9bmV3IE1hcDt2YXIgSz1aMCgkLmNoaWxkcmVuKTskLnJldmVhbE9yZGVyJiYkLnJldmVhbE9yZGVyWzBdPT09ImIiJiZLLnJldmVyc2UoKTtmb3IodmFyIFE9Sy5sZW5ndGg7US0tOyl0aGlzLmwuc2V0KEtbUV0sdGhpcy5pPVsxLDAsdGhpcy5pXSk7cmV0dXJuICQuY2hpbGRyZW59LEUyLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9RTIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyICQ9dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbihLLFEpe3QzKCQsUSxLKX0pfTt2YXIgaDY9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKXx8NjAxMDMsajY9L14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxpbWFnZSghUyl8bGV0dGVyfGxpZ2h0aW5nfG1hcmtlcig/IUh8V3xVKXxvdmVybGluZXxwYWludHxwb2ludGVyfHNoYXBlfHN0b3B8c3RyaWtldGhyb3VnaHxzdHJva2V8dGV4dCg/IUwpfHRyYW5zZm9ybXx1bmRlcmxpbmV8dW5pY29kZXx1bml0c3x2fHZlY3Rvcnx2ZXJ0fHdvcmR8d3JpdGluZ3x4KD8hQykpW0EtWl0vLG02PS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sZjY9L1tBLVowLTldL2cscDY9dHlwZW9mIGRvY3VtZW50PCJ1Iix1Nj1mdW5jdGlvbigkKXtyZXR1cm4odHlwZW9mIFN5bWJvbDwidSImJnR5cGVvZiBTeW1ib2woKT09InN5bWJvbCI/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3QoJCl9O1MxLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLFsiY29tcG9uZW50V2lsbE1vdW50IiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsImNvbXBvbmVudFdpbGxVcGRhdGUiXS5mb3JFYWNoKGZ1bmN0aW9uKCQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShTMS5wcm90b3R5cGUsJCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzWyJVTlNBRkVfIiskXX0sc2V0OmZ1bmN0aW9uKEspe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpLfSl9fSl9KTt2YXIgZTM9bC5ldmVudDtsLmV2ZW50PWZ1bmN0aW9uKCQpe3JldHVybiBlMyYmKCQ9ZTMoJCkpLCQucGVyc2lzdD1mdW5jdGlvbigpe30sJC5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbmNlbEJ1YmJsZX0sJC5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0UHJldmVudGVkfSwkLm5hdGl2ZUV2ZW50PSR9O3ZhciBHOCxsNj17Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsYXNzfX0sJDg9bC52bm9kZTtsLnZub2RlPWZ1bmN0aW9uKCQpe3R5cGVvZiAkLnR5cGU9PSJzdHJpbmciJiZmdW5jdGlvbihLKXt2YXJ7cHJvcHM6USx0eXBlOlh9PUssWj17fSxZPVguaW5kZXhPZigiLSIpPT0tMTtmb3IodmFyIHEgaW4gUSl7dmFyIEc9UVtxXTtpZighKHE9PT0idmFsdWUiJiYoImRlZmF1bHRWYWx1ZSJpbiBRKSYmRz09bnVsbHx8cDYmJnE9PT0iY2hpbGRyZW4iJiZYPT09Im5vc2NyaXB0Inx8cT09PSJjbGFzcyJ8fHE9PT0iY2xhc3NOYW1lIikpe3ZhciBCPXEudG9Mb3dlckNhc2UoKTtxPT09ImRlZmF1bHRWYWx1ZSImJiJ2YWx1ZSJpbiBRJiZRLnZhbHVlPT1udWxsP3E9InZhbHVlIjpxPT09ImRvd25sb2FkIiYmRz09PSEwP0c9IiI6Qj09PSJ0cmFuc2xhdGUiJiZHPT09Im5vIj9HPSExOkJbMF09PT0ibyImJkJbMV09PT0ibiI/Qj09PSJvbmRvdWJsZWNsaWNrIj9xPSJvbmRibGNsaWNrIjpCIT09Im9uY2hhbmdlInx8WCE9PSJpbnB1dCImJlghPT0idGV4dGFyZWEifHx1NihRLnR5cGUpP0I9PT0ib25mb2N1cyI/cT0ib25mb2N1c2luIjpCPT09Im9uYmx1ciI/cT0ib25mb2N1c291dCI6bTYudGVzdChxKSYmKHE9Qik6Qj1xPSJvbmlucHV0IjpZJiZqNi50ZXN0KHEpP3E9cS5yZXBsYWNlKGY2LCItJCYiKS50b0xvd2VyQ2FzZSgpOkc9PT1udWxsJiYoRz12b2lkIDApLEI9PT0ib25pbnB1dCImJlpbcT1CXSYmKHE9Im9uaW5wdXRDYXB0dXJlIiksWltxXT1HfX1YPT0ic2VsZWN0IiYmKFoubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkoWi52YWx1ZSkmJihaLnZhbHVlPVowKFEuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oVil7Vi5wcm9wcy5zZWxlY3RlZD1aLnZhbHVlLmluZGV4T2YoVi5wcm9wcy52YWx1ZSkhPS0xfSkpLFouZGVmYXVsdFZhbHVlIT1udWxsJiYoWi52YWx1ZT1aMChRLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKFYpe1YucHJvcHMuc2VsZWN0ZWQ9Wi5tdWx0aXBsZT9aLmRlZmF1bHRWYWx1ZS5pbmRleE9mKFYucHJvcHMudmFsdWUpIT0tMTpaLmRlZmF1bHRWYWx1ZT09Vi5wcm9wcy52YWx1ZX0pKSksUS5jbGFzcyYmIVEuY2xhc3NOYW1lPyhaLmNsYXNzPVEuY2xhc3MsT2JqZWN0LmRlZmluZVByb3BlcnR5KFosImNsYXNzTmFtZSIsbDYpKTpRLmNsYXNzTmFtZSYmKFouY2xhc3M9Wi5jbGFzc05hbWU9US5jbGFzc05hbWUpLEsucHJvcHM9Wn0oJCksJC4kJHR5cGVvZj1oNiwkOCYmJDgoJCl9O3ZhciBLOD1sLl9fcjtsLl9fcj1mdW5jdGlvbigkKXtLOCYmSzgoJCksRzg9JC5fX2N9O3ZhciBROD1sLmRpZmZlZDtsLmRpZmZlZD1mdW5jdGlvbigkKXtROCYmUTgoJCk7dmFye3Byb3BzOkssX19lOlF9PSQ7USE9bnVsbCYmJC50eXBlPT09InRleHRhcmVhIiYmInZhbHVlImluIEsmJksudmFsdWUhPT1RLnZhbHVlJiYoUS52YWx1ZT1LLnZhbHVlPT1udWxsPyIiOksudmFsdWUpLEc4PW51bGx9O3ZhciBJMD0zO2Z1bmN0aW9uIEQ1KCQpe3JldHVybiAkPj0wLjkzPzM6dm9pZCAwfWZ1bmN0aW9uIE01KCQpe3JldHVybiAkPT09ImxhbmRzY2FwZV9sZWZ0Inx8JD09PSJsYW5kc2NhcGVfcmlnaHQifWZ1bmN0aW9uIHkwKCQpe3JldHVybiEhJCYmKE01KCQub3JpZW50YXRpb24pfHwkLndpZHRoPiQuaGVpZ2h0KX1mdW5jdGlvbiBiMCgkKXtpZighJHx8JC53aWR0aDw9MHx8JC5oZWlnaHQ8PTApcmV0dXJuIG51bGw7bGV0IEs9TTUoJC5vcmllbnRhdGlvbil8fCQud2lkdGg+JC5oZWlnaHQsUT1LP01hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpOk1hdGgubWluKCQud2lkdGgsJC5oZWlnaHQpLFg9Sz9NYXRoLm1pbigkLndpZHRoLCQuaGVpZ2h0KTpNYXRoLm1heCgkLndpZHRoLCQuaGVpZ2h0KTtpZihRPT09JC53aWR0aCYmWD09PSQuaGVpZ2h0KXJldHVybiAkO3JldHVybnsuLi4kLHdpZHRoOlEsaGVpZ2h0Olh9fWZ1bmN0aW9uIGEwKCQpe2xldCBLPWIwKCQpLFE9VjgoJD8ub3JpZW50YXRpb24pLFg9TWF0aC5hYnMoUSk9PT05MCxaPSEhJCYmJC53aWR0aD4kLmhlaWdodCxZPVE9PT0xODB8fFgmJiFaO3JldHVybntkaXNwbGF5Q29uZmlnOksscm90YXRpb25EZWdyZWVzOlk/UTowLG5lZWRzQ3NzUm90YXRpb246WSxpbnB1dE9yaWVudGF0aW9uOlk/JD8ub3JpZW50YXRpb246dm9pZCAwfX1mdW5jdGlvbiBWOCgkKXtzd2l0Y2goJCl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJuIDkwO2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm4tOTA7Y2FzZSJwb3J0cmFpdF91cHNpZGVfZG93biI6cmV0dXJuIDE4MDtkZWZhdWx0OnJldHVybiAwfX1mdW5jdGlvbiByMCgkLEssUSl7c3dpdGNoKCQpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnJldHVybnt4OlEseToxLUt9O2Nhc2UibGFuZHNjYXBlX3JpZ2h0IjpyZXR1cm57eDoxLVEseTpLfTtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm57eDoxLUsseToxLVF9O2RlZmF1bHQ6cmV0dXJue3g6Syx5OlF9fX1mdW5jdGlvbiBXNSgkLEspe3N3aXRjaCgkKXtjYXNlImxhbmRzY2FwZV9sZWZ0Ijpzd2l0Y2goSyl7Y2FzZSAxOnJldHVybiAzO2Nhc2UgNDpyZXR1cm4gMjtjYXNlIDI6cmV0dXJuIDE7Y2FzZSAzOnJldHVybiA0O2RlZmF1bHQ6cmV0dXJuIEt9Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnN3aXRjaChLKXtjYXNlIDE6cmV0dXJuIDI7Y2FzZSA0OnJldHVybiAzO2Nhc2UgMjpyZXR1cm4gNDtjYXNlIDM6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gS31jYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpzd2l0Y2goSyl7Y2FzZSAxOnJldHVybiA0O2Nhc2UgNDpyZXR1cm4gMTtjYXNlIDI6cmV0dXJuIDM7Y2FzZSAzOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIEt9ZGVmYXVsdDpyZXR1cm4gS319ZnVuY3Rpb24gQjgoJCxLLFEpe2lmKCFOdW1iZXIuaXNGaW5pdGUoJCkpcmV0dXJuIG51bGw7bGV0IFg9TnVtYmVyLmlzRmluaXRlKFEpJiZRPjA/UToxLFo9Sz09PTE/JCoxNjpLPT09Mj8kKlg6JCxZPU1hdGgubWF4KC0yMDAsTWF0aC5taW4oMjAwLFopKTtyZXR1cm4gTWF0aC5hYnMoWSk8MC4wMT9udWxsOll9dmFyIGQ2PXtbMV06ImRlc2NyaXB0aW9uIixbMl06ImtleWZyYW1lIixbM106ImRlbHRhIixbNF06InNlZWQifTtjbGFzcyBJMntidWZmZXI9bmV3IFVpbnQ4QXJyYXkoMCk7cHVzaCgkKXtpZigkLmxlbmd0aD4wKXtsZXQgWD1uZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlci5sZW5ndGgrJC5sZW5ndGgpO1guc2V0KHRoaXMuYnVmZmVyKSxYLnNldCgkLHRoaXMuYnVmZmVyLmxlbmd0aCksdGhpcy5idWZmZXI9WH1sZXQgSz1bXSxRPTA7d2hpbGUodGhpcy5idWZmZXIubGVuZ3RoLVE+PTQpe2xldCBaPW5ldyBEYXRhVmlldyh0aGlzLmJ1ZmZlci5idWZmZXIsdGhpcy5idWZmZXIuYnl0ZU9mZnNldCtRLDQpLmdldFVpbnQzMigwLCExKTtpZih0aGlzLmJ1ZmZlci5sZW5ndGgtUS00PFopYnJlYWs7aWYoWjwxKXtRKz00O2NvbnRpbnVlfWxldCBZPXRoaXMuYnVmZmVyW1ErNF0scT10aGlzLmJ1ZmZlci5zbGljZShRKzUsUSs0K1opLEc9ZDZbWV07aWYoRylLLnB1c2goe3R5cGU6RyxwYXlsb2FkOnF9KTtRKz00K1p9cmV0dXJuIHRoaXMuYnVmZmVyPVE9PT0wP3RoaXMuYnVmZmVyOnRoaXMuYnVmZmVyLnNsaWNlKFEpLEt9cmVzZXQoKXt0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgwKX19ZnVuY3Rpb24gVDUoJCl7aWYoJC5sZW5ndGg8NClyZXR1cm4iYXZjMS40MkUwMUUiO2xldCBLPShRKT0+US50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpO3JldHVybiJhdmMxLiIrSygkWzFdKStLKCRbMl0pK0soJFszXSl9ZnVuY3Rpb24gSDAoKXtyZXR1cm4gdHlwZW9mIGdsb2JhbFRoaXM8InUiJiZ0eXBlb2YgZ2xvYmFsVGhpcy5WaWRlb0RlY29kZXI8InUifXZhciBjNj0xMDAwLG82PTE2NjY3O2Z1bmN0aW9uIFA1KHt1cmw6JCxlbmFibGVkOkssY2FudmFzUmVmOlEsb25GaXJzdEZyYW1lOlgsb25GcmFtZTpaLG9uRXJyb3I6WX0pe2xldCBxPVMoe29uRmlyc3RGcmFtZTpYLG9uRnJhbWU6WixvbkVycm9yOll9KTtxLmN1cnJlbnQ9e29uRmlyc3RGcmFtZTpYLG9uRnJhbWU6WixvbkVycm9yOll9LEkoKCk9PntpZighS3x8ISR8fCFIMCgpKXJldHVybjtsZXQgRz1uZXcgQWJvcnRDb250cm9sbGVyLEI9bmV3IEkyLFY9ITEsQz0hMSxMPTAsRj1udWxsLE49bnVsbCxfPSgpPT4hViYmIUcuc2lnbmFsLmFib3J0ZWQsej0obSxSLG8pPT57aWYoIV8oKSlyZXR1cm47bGV0IGk9US5jdXJyZW50O2lmKCFpKXJldHVybjtpZihpLndpZHRoIT09Unx8aS5oZWlnaHQhPT1vKWkud2lkdGg9UixpLmhlaWdodD1vO2xldCBYMT1pLmdldENvbnRleHQoIjJkIik7aWYoIVgxKXJldHVybjtpZihYMS5kcmF3SW1hZ2UobSwwLDAsUixvKSxxLmN1cnJlbnQub25GcmFtZT8uKCksIUMpQz0hMCxxLmN1cnJlbnQub25GaXJzdEZyYW1lPy4oKX0sVT0oKT0+bmV3IFZpZGVvRGVjb2Rlcih7b3V0cHV0OihtKT0+e3RyeXtpZihfKCkpeihtLG0uZGlzcGxheVdpZHRoLG0uZGlzcGxheUhlaWdodCl9ZmluYWxseXttLmNsb3NlKCl9fSxlcnJvcjoobSk9PnEuY3VycmVudC5vbkVycm9yPy4oYGRlY29kZXI6ICR7bS5tZXNzYWdlfWApfSksQT1hc3luYyhtKT0+e2xldCBSPWF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKG5ldyBCbG9iKFttXSx7dHlwZToiaW1hZ2UvanBlZyJ9KSk7dHJ5e2lmKF8oKSl6KFIsUi53aWR0aCxSLmhlaWdodCl9ZmluYWxseXtSLmNsb3NlKCl9fSxNPShtKT0+e2lmKCFOfHxOLnN0YXRlPT09ImNsb3NlZCIpTj1VKCk7dHJ5e04uY29uZmlndXJlKHtjb2RlYzpUNShtKSxkZXNjcmlwdGlvbjptLG9wdGltaXplRm9yOiJsYXRlbmN5IixoYXJkd2FyZUFjY2VsZXJhdGlvbjoicHJlZmVyLWhhcmR3YXJlIn0pfWNhdGNoKFIpe3EuY3VycmVudC5vbkVycm9yPy4oYGNvbmZpZzogJHtSLm1lc3NhZ2V9YCl9fSxFPShtLFIpPT57aWYoTj8uc3RhdGUhPT0iY29uZmlndXJlZCIpcmV0dXJuO3RyeXtOLmRlY29kZShuZXcgRW5jb2RlZFZpZGVvQ2h1bmsoe3R5cGU6bT09PSJrZXlmcmFtZSI/ImtleSI6ImRlbHRhIix0aW1lc3RhbXA6TCxkYXRhOlJ9KSksTCs9bzZ9Y2F0Y2h7fX0sVD0obSxSKT0+e3N3aXRjaChtKXtjYXNlInNlZWQiOkEoUikuY2F0Y2goKCk9Pnt9KTtyZXR1cm47Y2FzZSJkZXNjcmlwdGlvbiI6TShSKTtyZXR1cm47Y2FzZSJrZXlmcmFtZSI6Y2FzZSJkZWx0YSI6RShtLFIpO3JldHVybn19LGI9KCk9PntpZighXygpfHxGKXJldHVybjtGPXNldFRpbWVvdXQoKCk9PntGPW51bGwseCgpfSxjNil9LHg9YXN5bmMoKT0+e0IucmVzZXQoKTt0cnl7bGV0IFI9KGF3YWl0IGZldGNoKGAkeyR9L3N0cmVhbS5hdmNjYCx7c2lnbmFsOkcuc2lnbmFsfSkpLmJvZHk/LmdldFJlYWRlcigpO2lmKCFSKXJldHVybjtmb3IoOzspe2xldHtkb25lOm8sdmFsdWU6aX09YXdhaXQgUi5yZWFkKCk7aWYobylicmVhaztpZighaSljb250aW51ZTtmb3IobGV0IFgxIG9mIEIucHVzaChpKSlUKFgxLnR5cGUsWDEucGF5bG9hZCl9fWNhdGNoe31maW5hbGx5e2lmKF8oKSliKCl9fTtyZXR1cm4geCgpLCgpPT57aWYoVj0hMCxGKWNsZWFyVGltZW91dChGKTtpZihHLmFib3J0KCksQi5yZXNldCgpLE4mJk4uc3RhdGUhPT0iY2xvc2VkIil0cnl7Ti5jbG9zZSgpfWNhdGNoe31OPW51bGx9fSxbJCxLLFFdKX12YXIgYTY9MDtmdW5jdGlvbiBKKCQsSyxRLFgsWixZKXtLfHwoSz17fSk7dmFyIHEsRyxCPUs7aWYoInJlZiJpbiBCKWZvcihHIGluIEI9e30sSylHPT0icmVmIj9xPUtbR106QltHXT1LW0ddO3ZhciBWPXt0eXBlOiQscHJvcHM6QixrZXk6USxyZWY6cSxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS1hNixfX2k6LTEsX191OjAsX19zb3VyY2U6WixfX3NlbGY6WX07aWYodHlwZW9mICQ9PSJmdW5jdGlvbiImJihxPSQuZGVmYXVsdFByb3BzKSlmb3IoRyBpbiBxKUJbR109PT12b2lkIDAmJihCW0ddPXFbR10pO3JldHVybiBsLnZub2RlJiZsLnZub2RlKFYpLFZ9dmFyIE44PWB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPSc5JyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpJyBzdHJva2U9J3JnYmEoMCwwLDAsMC41NSknIHN0cm9rZS13aWR0aD0nMS4yNScgZmlsdGVyPSdkcm9wLXNoYWRvdygwIDFweCAycHggcmdiYSgwLDAsMCwwLjQ1KSknLyUzRSUzQy9zdmclM0UiKSAxMiAxMiwgcG9pbnRlcmAscjY9MS4wMDQsaTY9MyxuNj00LHM2PTUsdDY9MTA7ZnVuY3Rpb24geTIoe3VybDokLHdzVXJsOkssc3R5bGU6USxpbWFnZVN0eWxlOlgsY2xhc3NOYW1lOlosb25Ib21lUHJlc3M6WSxvblN0cmVhbVRvdWNoOnEsb25TdHJlYW1NdWx0aVRvdWNoOkcsb25TdHJlYW1CdXR0b246QixvblN0cmVhbURpZ2l0YWxDcm93bjpWLGVuYWJsZURpZ2l0YWxDcm93bjpDLHN1YnNjcmliZUZyYW1lOkwsc3RyZWFtRnJhbWU6RixzdHJlYW1Db25maWc6TixvblNjcmVlbkNvbmZpZ0NoYW5nZTpfLGhpZGVDb250cm9sczp6LG9uU3RyZWFtaW5nQ2hhbmdlOlUsY29ubmVjdGlvblF1YWxpdHk6QSxjb2RlYzpNPSJhdmNjIn0pe2xldCBFPSEhcSxUPU09PT0iYXZjYyImJkgwKCksYj1TKG51bGwpLHg9UyhudWxsKSxtPVMobnVsbCksUj1TKG51bGwpLG89UyhudWxsKSxpPVMobnVsbCksW1gxLCQxXT1EKCExKSxbcyxMMV09RChudWxsKSxbZCxhXT1EKG51bGwpLEsxPVMobnVsbCksWTE9UyhfKTtZMS5jdXJyZW50PV87bGV0IFYxPVMobnVsbCksW2MsUTFdPUQobnVsbCk7SSgoKT0+e2xldCBXPVYxLmN1cnJlbnQ7aWYoIVd8fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCBPPW5ldyBSZXNpemVPYnNlcnZlcigoeSk9PntsZXQgZj15WzBdPy5jb250ZW50UmVjdDtpZihmKVExKHt3aWR0aDpmLndpZHRoLGhlaWdodDpmLmhlaWdodH0pfSk7cmV0dXJuIE8ub2JzZXJ2ZShXKSwoKT0+Ty5kaXNjb25uZWN0KCl9LFtdKTtsZXRbVTEsdV09RCgwKSxqPVMoMCksW2ssdl09RCghMSkscD1TKG51bGwpO0koKCk9PntpZihBPT09InBvb3IiKXtpZih2KCEwKSxwLmN1cnJlbnQpY2xlYXJUaW1lb3V0KHAuY3VycmVudCk7cC5jdXJyZW50PXNldFRpbWVvdXQoKCk9Pnt2KCExKSxwLmN1cnJlbnQ9bnVsbH0sMzAwMCl9ZWxzZSBpZih2KCExKSxwLmN1cnJlbnQpY2xlYXJUaW1lb3V0KHAuY3VycmVudCkscC5jdXJyZW50PW51bGw7cmV0dXJuKCk9PntpZihwLmN1cnJlbnQpY2xlYXJUaW1lb3V0KHAuY3VycmVudCl9fSxbQV0pO2xldCBxMT1gJHskfS9zdHJlYW0ubWpwZWdgO0koKCk9PntLMS5jdXJyZW50PW51bGwsYShudWxsKX0sWyRdKTtsZXQgTjE9UCgoVyk9PntpZighV3x8Vy53aWR0aDw9MHx8Vy5oZWlnaHQ8PTApcmV0dXJuO2xldCBPPUsxLmN1cnJlbnQseT1XLm9yaWVudGF0aW9uPT09dm9pZCAwJiZPPy5vcmllbnRhdGlvbj97Li4uVyxvcmllbnRhdGlvbjpPLm9yaWVudGF0aW9ufTpXO2lmKE8mJk8ud2lkdGg9PT15LndpZHRoJiZPLmhlaWdodD09PXkuaGVpZ2h0JiZPLm9yaWVudGF0aW9uPT09eS5vcmllbnRhdGlvbilyZXR1cm47SzEuY3VycmVudD15LGEoeSksWTEuY3VycmVudD8uKHkpfSxbXSksXzE9UyhVKTtfMS5jdXJyZW50PVUsSSgoKT0+e18xLmN1cnJlbnQ/LihYMSl9LFtYMV0pLEkoKCk9PntpZihFJiZOKU4xKE4pfSxbRSxOLE4xXSk7bGV0IHgxPVMoITEpO3gxLmN1cnJlbnQ9WDE7bGV0IFQxPVMobnVsbCksaDE9UyhudWxsKTtJKCgpPT57aWYoIUV8fCFMfHxUKXJldHVybjtsZXQgTz1zZXRUaW1lb3V0KCgpPT57aWYoIXgxLmN1cnJlbnQpTDEoIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKSx5PXJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiByKCl7bGV0IHQ9VDEuY3VycmVudDtpZih0KXtUMS5jdXJyZW50PW51bGw7bGV0IHoxPW0uY3VycmVudDtpZih6MSl7aWYoaDEuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKGgxLmN1cnJlbnQpO2gxLmN1cnJlbnQ9dCx6MS5zcmM9dCxqLmN1cnJlbnQrK31lbHNlIFVSTC5yZXZva2VPYmplY3RVUkwodCl9eT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocil9KSxmPUwoKHIpPT57aWYoWTAuY3VycmVudD1EYXRlLm5vdygpLFQxLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChUMS5jdXJyZW50KTtpZihUMS5jdXJyZW50PXIsIXgxLmN1cnJlbnQpY2xlYXJUaW1lb3V0KE8pLCQxKCEwKSxMMShudWxsKX0pO3JldHVybigpPT57aWYoY2xlYXJUaW1lb3V0KE8pLGNhbmNlbEFuaW1hdGlvbkZyYW1lKHkpLGY/LigpLFQxLmN1cnJlbnQpVVJMLnJldm9rZU9iamVjdFVSTChUMS5jdXJyZW50KSxUMS5jdXJyZW50PW51bGw7aWYoaDEuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKGgxLmN1cnJlbnQpLGgxLmN1cnJlbnQ9bnVsbH19LFtFLEwsVF0pO2xldCB2MT1QKCgpPT57WTAuY3VycmVudD1EYXRlLm5vdygpLCQxKCEwKSxMMShudWxsKX0sW10pLGMxPVAoKCk9PntpZihqLmN1cnJlbnQrKyxZMC5jdXJyZW50PURhdGUubm93KCksIXgxLmN1cnJlbnQpJDEoITApLEwxKG51bGwpfSxbXSk7UDUoe3VybDokLGVuYWJsZWQ6VCxjYW52YXNSZWY6eCxvbkZpcnN0RnJhbWU6djEsb25GcmFtZTpjMSxvbkVycm9yOkwxfSk7bGV0IEkxPVAoKFcpPT57bGV0IE89YTAoSzEuY3VycmVudCkuaW5wdXRPcmllbnRhdGlvbix5PXIwKE8sVy54LFcueSksZj1XLmVkZ2U9PT12b2lkIDA/dm9pZCAwOlc1KE8sVy5lZGdlKSxyPWY9PT12b2lkIDA/e3R5cGU6Vy50eXBlLC4uLnl9Ont0eXBlOlcudHlwZSwuLi55LGVkZ2U6Zn07aWYoRSl7cT8uKHIpO3JldHVybn1sZXQgdD1pLmN1cnJlbnQ7aWYoIXR8fHQucmVhZHlTdGF0ZSE9PVdlYlNvY2tldC5PUEVOKXJldHVybjtsZXQgejE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHIpKSxEMT1uZXcgVWludDhBcnJheSgxK3oxLmxlbmd0aCk7RDFbMF09aTYsRDEuc2V0KHoxLDEpLHQuc2VuZChEMSl9LFtFLHFdKSxvMT1QKChXKT0+e2lmKEUpe0I/LihXKTtyZXR1cm59bGV0IE89aS5jdXJyZW50O2lmKCFPfHxPLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IHk9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHtidXR0b246V30pKSxmPW5ldyBVaW50OEFycmF5KDEreS5sZW5ndGgpO2ZbMF09bjYsZi5zZXQoeSwxKSxPLnNlbmQoZil9LFtFLEJdKSxhMT1QKChXKT0+e2lmKCFOdW1iZXIuaXNGaW5pdGUoVyl8fFc9PT0wKXJldHVybjtpZihFKXtWPy4oVyk7cmV0dXJufWxldCBPPWkuY3VycmVudDtpZighT3x8Ty5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCB5PW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh7ZGVsdGE6V30pKSxmPW5ldyBVaW50OEFycmF5KDEreS5sZW5ndGgpO2ZbMF09dDYsZi5zZXQoeSwxKSxPLnNlbmQoZil9LFtFLFZdKSx5MT1QKChXKT0+e2xldCBPPWEwKEsxLmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24seT1yMChPLFcueDEsVy55MSksZj1yMChPLFcueDIsVy55Mikscj17dHlwZTpXLnR5cGUseDE6eS54LHkxOnkueSx4MjpmLngseTI6Zi55fTtpZihFKXtHPy4ocik7cmV0dXJufWxldCB0PWkuY3VycmVudDtpZighdHx8dC5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCB6MT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkocikpLEQxPW5ldyBVaW50OEFycmF5KDErejEubGVuZ3RoKTtEMVswXT1zNixEMS5zZXQoejEsMSksdC5zZW5kKEQxKX0sW0UsR10pO0koKCk9PntpZihFKXJldHVybjtsZXQgVz1LPz8kLnJlcGxhY2UoL15odHRwLywid3MiKSsiL3dzIixPPW5ldyBXZWJTb2NrZXQoVyk7Ty5iaW5hcnlUeXBlPSJhcnJheWJ1ZmZlciIsaS5jdXJyZW50PU8sTy5vbm1lc3NhZ2U9KHoxKT0+e2lmKCEoejEuZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm47bGV0IEQxPW5ldyBVaW50OEFycmF5KHoxLmRhdGEpO2lmKEQxLmxlbmd0aDwxfHxEMVswXSE9PTEzMClyZXR1cm47dHJ5e04xKEpTT04ucGFyc2UobmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKEQxLnN1YmFycmF5KDEpKSkpfWNhdGNoe319LE8ub25vcGVuPSgpPT57aWYoIVQpJDEoITApO0wxKG51bGwpfSxPLm9uY2xvc2U9KCk9PnskMSghMSl9LE8ub25lcnJvcj0oKT0+e0wxKCJXZWJTb2NrZXQgY29ubmVjdGlvbiBmYWlsZWQiKSwkMSghMSl9O2xldCB5PW5ldyBBYm9ydENvbnRyb2xsZXIsZj1zZXRJbnRlcnZhbCgoKT0+e3Uoai5jdXJyZW50KSxqLmN1cnJlbnQ9MH0sMTAwMCkscj0hMSx0PVQ/bnVsbDpzZXRUaW1lb3V0KCgpPT57aWYoIXIpTDEoIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKTtpZighVCkoYXN5bmMoKT0+e3RyeXtsZXQgRDE9KGF3YWl0IGZldGNoKHExLHtzaWduYWw6eS5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIUQxKXJldHVybjtsZXQgQjA9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCItLWZyYW1lIik7d2hpbGUoITApe2xldHtkb25lOkI2LHZhbHVlOlg1fT1hd2FpdCBEMS5yZWFkKCk7aWYoQjYpYnJlYWs7aWYoWDUpZm9yKGxldCBaNT0wO1o1PD1YNS5sZW5ndGgtQjAubGVuZ3RoO1o1Kyspe2xldCBHMz0hMDtmb3IobGV0IEgyPTA7SDI8QjAubGVuZ3RoO0gyKyspaWYoWDVbWjUrSDJdIT09QjBbSDJdKXtHMz0hMTticmVha31pZihHMyl7aWYoai5jdXJyZW50KyssIXIpe2lmKHI9ITAsdCljbGVhclRpbWVvdXQodCl9fX19fWNhdGNoe319KSgpO3JldHVybigpPT57aWYoeS5hYm9ydCgpLGNsZWFySW50ZXJ2YWwoZiksdCljbGVhclRpbWVvdXQodCk7Ty5jbG9zZSgpLGkuY3VycmVudD1udWxsfX0sWyQscTEsRSxOMSxLLFRdKTtsZXQgWTA9UygwKTtJKCgpPT57aWYoIUUpcmV0dXJuO2xldCBXPTIwMDAsTz0oKT0+e2xldCByPVkwLmN1cnJlbnQ7aWYoIXJ8fCF4MS5jdXJyZW50KXJldHVybjtpZihEYXRlLm5vdygpLXI+VykkMSghMSl9LHk9c2V0SW50ZXJ2YWwoKCk9Pnt1KGouY3VycmVudCksai5jdXJyZW50PTAsTygpfSwxMDAwKSxmPSgpPT57aWYoIWRvY3VtZW50LmhpZGRlbilPKCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixmKSwoKT0+e2NsZWFySW50ZXJ2YWwoeSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsZil9fSxbRV0pO2xldCBlMT1QKCgpPT57aWYoVClyZXR1cm4geC5jdXJyZW50O3JldHVybiBFP20uY3VycmVudDpiLmN1cnJlbnR9LFtFLFRdKSxqMT1QKCgpPT57cmV0dXJuIFIuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/P2UxKCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9udWxsfSxbZTFdKSwkMD1QKChXLE8pPT57bGV0IHk9ajEoKTtpZigheSlyZXR1cm47bGV0IGY9KE8uY2xpZW50WC15LmxlZnQpL3kud2lkdGgscj0oTy5jbGllbnRZLXkudG9wKS95LmhlaWdodDtJMSh7dHlwZTpXLHg6Zix5OnJ9KX0sW2oxLEkxXSksSzA9UCgoVyxPKT0+e2xldCBmPWoxKCk/LmhlaWdodHx8MSxyPUI4KFcsTyxmKTtpZihyPT09bnVsbClyZXR1cm4hMTtyZXR1cm4gYTEociksITB9LFtqMSxhMV0pO0koKCk9PntpZighQylyZXR1cm47bGV0IFc9by5jdXJyZW50O2lmKCFXKXJldHVybjtsZXQgTz0oeSk9PntpZighSzAoeS5kZWx0YVkseS5kZWx0YU1vZGUpKXJldHVybjt5LnByZXZlbnREZWZhdWx0KCkseS5zdG9wUHJvcGFnYXRpb24oKX07cmV0dXJuIFcuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLE8se3Bhc3NpdmU6ITF9KSwoKT0+Vy5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsTyl9LFtDLEswXSk7bGV0IE0xPVMoITEpLGIxPVMoITEpLHEwPVMoITEpLFUwPVMoe2R4OjAsZHk6MH0pLHUxPVMoITEpLFtHMCx6MF09RCghMSksVjA9Uyh7eDowLjUseTowLjV9KSxbUDEsazFdPUQobnVsbCk7SSgoKT0+e2xldCBXPSh5KT0+e2lmKHkua2V5PT09IkFsdCIpejAoITApfSxPPSh5KT0+e2lmKHkua2V5PT09IkFsdCIpe2lmKHowKCExKSwhYjEuY3VycmVudClrMShudWxsKX19O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsVyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixPKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixXKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLE8pfX0sW10pLEkoKCk9PntpZihHMCYmIWIxLmN1cnJlbnQpe2xldCBXPVYwLmN1cnJlbnQ7azEoe3gxOlcueCx5MTpXLnkseDI6MS1XLngseTI6MS1XLnl9KX1lbHNlIGlmKCFHMCYmIWIxLmN1cnJlbnQpazEobnVsbCl9LFtHMF0pO2xldCBRMD1TKG51bGwpLEYxPVMoITEpLGwxPVMoMCksbTE9UCgoVyxPKT0+e0YxLmN1cnJlbnQ9ITA7bGV0IHk9UTAuY3VycmVudDtpZih5KWNhbmNlbEFuaW1hdGlvbkZyYW1lKGwxLmN1cnJlbnQpLGwxLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57eS5zdHlsZS5sZWZ0PWAke1cqMTAwfSVgLHkuc3R5bGUudG9wPWAke08qMTAwfSVgLHkuc3R5bGUuZGlzcGxheT0iYmxvY2sifSl9LFtdKSxNMD1QKChXLE8pPT57aWYoIUYxLmN1cnJlbnQpcmV0dXJuO2xldCB5PVEwLmN1cnJlbnQ7aWYoeSljYW5jZWxBbmltYXRpb25GcmFtZShsMS5jdXJyZW50KSxsMS5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3kuc3R5bGUubGVmdD1gJHtXKjEwMH0lYCx5LnN0eWxlLnRvcD1gJHtPKjEwMH0lYH0pfSxbXSksZjE9UCgoKT0+e0YxLmN1cnJlbnQ9ITE7bGV0IFc9UTAuY3VycmVudDtpZihXKWNhbmNlbEFuaW1hdGlvbkZyYW1lKGwxLmN1cnJlbnQpLFcuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LFtdKSxGMD1TKDApLEowPVMobnVsbCksVzA9UCgoKT0+e2xldCBXPURhdGUubm93KCksTz1XLUYwLmN1cnJlbnQ7aWYoRjAuY3VycmVudD1XLE88MzAwKXtpZihKMC5jdXJyZW50KWNsZWFyVGltZW91dChKMC5jdXJyZW50KSxKMC5jdXJyZW50PW51bGw7aWYoWSlZKCk7ZWxzZSBvMSgiYXBwX3N3aXRjaGVyIil9ZWxzZSBKMC5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntpZihZKVkoKTtlbHNlIG8xKCJob21lIik7SjAuY3VycmVudD1udWxsfSwzMDApfSxbbzEsWV0pLHc9YTAoZCksSD13LmRpc3BsYXlDb25maWcsZz0oKCk9PntpZighSHx8IWMpcmV0dXJuIG51bGw7aWYoYy53aWR0aD09PTB8fGMuaGVpZ2h0PT09MClyZXR1cm4gbnVsbDtsZXQgVz1NYXRoLm1pbihjLndpZHRoL0gud2lkdGgsYy5oZWlnaHQvSC5oZWlnaHQpO3JldHVybnt3aWR0aDpILndpZHRoKlcsaGVpZ2h0OkguaGVpZ2h0Kld9fSkoKSxoPXcucm90YXRpb25EZWdyZWVzLG49dy5uZWVkc0Nzc1JvdGF0aW9uJiZNYXRoLmFicyhoKT09PTkwLEoxPVgsQjE9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiI1MCUiLGxlZnQ6IjUwJSIsd2lkdGg6biYmZz9gJHtnLmhlaWdodH1weGA6IjEwMCUiLGhlaWdodDpuJiZnP2Ake2cud2lkdGh9cHhgOiIxMDAlIix0cmFuc2Zvcm06YHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSR7aD09PTA/IiI6YCByb3RhdGUoJHtofWRlZylgfWAsdHJhbnNmb3JtT3JpZ2luOiJjZW50ZXIgY2VudGVyIixjdXJzb3I6TjgsZGlzcGxheToiYmxvY2siLHVzZXJTZWxlY3Q6Im5vbmUiLFdlYmtpdFVzZXJTZWxlY3Q6Im5vbmUiLHRvdWNoQWN0aW9uOiJub25lIiwuLi5YLC4uLmg9PT0wP3t9Ontib3JkZXJSYWRpdXM6MCxjb3JuZXJTaGFwZTp2b2lkIDB9fSx3MT17Li4uQjEsdHJhbnNmb3JtOmAke0IxLnRyYW5zZm9ybT8/IiJ9IHNjYWxlKCR7cjZ9KWB9O3JldHVybiBKKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixmbGV4OjEsLi4uej97fTp7Ym9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LG92ZXJmbG93OiJoaWRkZW4iLG1pbldpZHRoOjAsbWluSGVpZ2h0OjAsLi4uUX0sY2xhc3NOYW1lOlosY2hpbGRyZW46W0ooImRpdiIse3JlZjpWMSxzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIixmbGV4OjEsbWluSGVpZ2h0OjAsbWluV2lkdGg6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIifSxjaGlsZHJlbjpKKCJkaXYiLHtyZWY6UixzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIix3aWR0aDpnP2Ake2cud2lkdGh9cHhgOiIxMDAlIixoZWlnaHQ6Zz9gJHtnLmhlaWdodH1weGA6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLGJvcmRlclJhZGl1czpKMT8uYm9yZGVyUmFkaXVzLGNvcm5lclNoYXBlOkoxPy5jb3JuZXJTaGFwZX0sY2hpbGRyZW46W1Q/SigiY2FudmFzIix7cmVmOngsc3R5bGU6dzF9KTpKKCJpbWciLHtyZWY6YixzcmM6RT92b2lkIDA6cTEsZHJhZ2dhYmxlOiExLG9uTG9hZDooVyk9PntsZXQgTz1XLmN1cnJlbnRUYXJnZXQ7aWYoTy5uYXR1cmFsV2lkdGg+MCYmTy5uYXR1cmFsSGVpZ2h0PjApTjEoe3dpZHRoOk8ubmF0dXJhbFdpZHRoLGhlaWdodDpPLm5hdHVyYWxIZWlnaHR9KX0sc3R5bGU6RT97ZGlzcGxheToibm9uZSJ9OkIxfSksRSYmIVQmJkooImltZyIse3JlZjptLGRyYWdnYWJsZTohMSxvbkxvYWQ6KFcpPT57bGV0IE89Vy5jdXJyZW50VGFyZ2V0O2lmKE8ubmF0dXJhbFdpZHRoPjAmJk8ubmF0dXJhbEhlaWdodD4wKU4xKHt3aWR0aDpPLm5hdHVyYWxXaWR0aCxoZWlnaHQ6Ty5uYXR1cmFsSGVpZ2h0fSl9LHN0eWxlOkIxfSksSigiZGl2Iix7cmVmOm8sc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxjdXJzb3I6TjgsdG91Y2hBY3Rpb246Im5vbmUifSxvbk1vdXNlRG93bjooVyk9PntXLnByZXZlbnREZWZhdWx0KCk7bGV0IE89ajEoKTtpZighTylyZXR1cm47bGV0IHk9KFcuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsZj0oVy5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtpZihXLmFsdEtleSl7YjEuY3VycmVudD0hMCxxMC5jdXJyZW50PVcuc2hpZnRLZXk7bGV0IHQ9e3gxOnkseTE6Zix4MjoxLXkseTI6MS1mfTtVMC5jdXJyZW50PXtkeDoxLXkteSxkeToxLWYtZn0sazEodCkseTEoe3R5cGU6ImJlZ2luIiwuLi50fSk7cmV0dXJufW0xKHksZik7bGV0IHI9RDUoZik7aWYociE9PXZvaWQgMClNMS5jdXJyZW50PSEwLEkxKHt0eXBlOiJiZWdpbiIseDp5LHk6ZixlZGdlOnJ9KTtlbHNlIE0xLmN1cnJlbnQ9ITEsJDAoImJlZ2luIixXKX0sb25Nb3VzZU1vdmU6KFcpPT57bGV0IE89ajEoKTtpZighTylyZXR1cm47bGV0IHk9KFcuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsZj0oVy5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtpZihWMC5jdXJyZW50PXt4OnkseTpmfSxXLmJ1dHRvbnM9PT0wKXtpZihXLmFsdEtleSlrMSh7eDE6eSx5MTpmLHgyOjEteSx5MjoxLWZ9KTtyZXR1cm59aWYoYjEuY3VycmVudCl7bGV0IHI7aWYocTAuY3VycmVudCl7bGV0IHQ9VTAuY3VycmVudDtyPXt4MTp5LHkxOmYseDI6eSt0LmR4LHkyOmYrdC5keX19ZWxzZSByPXt4MTp5LHkxOmYseDI6MS15LHkyOjEtZn07azEocikseTEoe3R5cGU6Im1vdmUiLC4uLnJ9KTtyZXR1cm59aWYoTTAoeSxmKSxNMS5jdXJyZW50KUkxKHt0eXBlOiJtb3ZlIix4OnkseTpmLGVkZ2U6STB9KTtlbHNlICQwKCJtb3ZlIixXKX0sb25Nb3VzZVVwOihXKT0+e2lmKGIxLmN1cnJlbnQpe2xldCBPPWoxKCk7aWYoTyl7bGV0IHk9KFcuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsZj0oVy5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtpZihxMC5jdXJyZW50KXtsZXQgcj1VMC5jdXJyZW50O3kxKHt0eXBlOiJlbmQiLHgxOnkseTE6Zix4Mjp5K3IuZHgseTI6ZityLmR5fSl9ZWxzZSB5MSh7dHlwZToiZW5kIix4MTp5LHkxOmYseDI6MS15LHkyOjEtZn0pfWlmKGIxLmN1cnJlbnQ9ITEsIVcuYWx0S2V5KWsxKG51bGwpO3JldHVybn1pZihmMSgpLE0xLmN1cnJlbnQpe2xldCBPPWoxKCk7aWYoTyl7bGV0IHk9KFcuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgsZj0oVy5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtJMSh7dHlwZToiZW5kIix4OnkseTpmLGVkZ2U6STB9KX1NMS5jdXJyZW50PSExO3JldHVybn0kMCgiZW5kIixXKX0sb25Nb3VzZUxlYXZlOihXKT0+e2lmKGIxLmN1cnJlbnQpe2lmKFAxKXkxKHt0eXBlOiJlbmQiLC4uLlAxfSk7YjEuY3VycmVudD0hMSxrMShudWxsKTtyZXR1cm59aWYoZjEoKSxNMS5jdXJyZW50KXtsZXQgTz1qMSgpO2lmKE8pe2xldCB5PShXLmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLGY9KFcuY2xpZW50WS1PLnRvcCkvTy5oZWlnaHQ7STEoe3R5cGU6ImVuZCIseDp5LHk6ZixlZGdlOkkwfSl9TTEuY3VycmVudD0hMTtyZXR1cm59aWYoVy5idXR0b25zPjApJDAoImVuZCIsVyk7azEobnVsbCl9LG9uVG91Y2hTdGFydDooVyk9PntXLnByZXZlbnREZWZhdWx0KCk7bGV0IE89ajEoKTtpZighTylyZXR1cm47aWYoVy50b3VjaGVzLmxlbmd0aD49Mil7ZjEoKTtsZXQgejE9Vy50b3VjaGVzWzBdLEQxPVcudG91Y2hlc1sxXSxCMD17eDE6KHoxLmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLHkxOih6MS5jbGllbnRZLU8udG9wKS9PLmhlaWdodCx4MjooRDEuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgseTI6KEQxLmNsaWVudFktTy50b3ApL08uaGVpZ2h0fTtpZighdTEuY3VycmVudCYmIU0xLmN1cnJlbnQpSTEoe3R5cGU6ImVuZCIseDpCMC54MSx5OkIwLnkxfSk7dTEuY3VycmVudD0hMCxiMS5jdXJyZW50PSEwLE0xLmN1cnJlbnQ9ITEsazEoQjApLHkxKHt0eXBlOiJiZWdpbiIsLi4uQjB9KTtyZXR1cm59bGV0IHk9Vy50b3VjaGVzWzBdO2lmKCF5KXJldHVybjtsZXQgZj0oeS5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCxyPSh5LmNsaWVudFktTy50b3ApL08uaGVpZ2h0O20xKGYscik7bGV0IHQ9RDUocik7aWYodCE9PXZvaWQgMClNMS5jdXJyZW50PSEwLEkxKHt0eXBlOiJiZWdpbiIseDpmLHk6cixlZGdlOnR9KTtlbHNlIE0xLmN1cnJlbnQ9ITEsSTEoe3R5cGU6ImJlZ2luIix4OmYseTpyfSl9LG9uVG91Y2hNb3ZlOihXKT0+e1cucHJldmVudERlZmF1bHQoKTtsZXQgTz1qMSgpO2lmKCFPKXJldHVybjtpZih1MS5jdXJyZW50JiZXLnRvdWNoZXMubGVuZ3RoPj0yKXtsZXQgdD1XLnRvdWNoZXNbMF0sejE9Vy50b3VjaGVzWzFdLEQxPXt4MToodC5jbGllbnRYLU8ubGVmdCkvTy53aWR0aCx5MToodC5jbGllbnRZLU8udG9wKS9PLmhlaWdodCx4MjooejEuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgseTI6KHoxLmNsaWVudFktTy50b3ApL08uaGVpZ2h0fTtrMShEMSkseTEoe3R5cGU6Im1vdmUiLC4uLkQxfSk7cmV0dXJufWxldCB5PVcudG91Y2hlc1swXTtpZigheSlyZXR1cm47bGV0IGY9KHkuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgscj0oeS5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtpZihNMChmLHIpLE0xLmN1cnJlbnQpSTEoe3R5cGU6Im1vdmUiLHg6Zix5OnIsZWRnZTpJMH0pO2Vsc2UgSTEoe3R5cGU6Im1vdmUiLHg6Zix5OnJ9KX0sb25Ub3VjaEVuZDooVyk9PntXLnByZXZlbnREZWZhdWx0KCk7bGV0IE89ajEoKTtpZighTylyZXR1cm47aWYodTEuY3VycmVudCl7aWYoVy50b3VjaGVzLmxlbmd0aDwyKXtsZXQgdD1XLmNoYW5nZWRUb3VjaGVzWzBdLHoxPVAxO2lmKHQmJnoxKXkxKHt0eXBlOiJlbmQiLHgxOih0LmNsaWVudFgtTy5sZWZ0KS9PLndpZHRoLHkxOih0LmNsaWVudFktTy50b3ApL08uaGVpZ2h0LHgyOnoxLngyLHkyOnoxLnkyfSk7ZWxzZSBpZih6MSl5MSh7dHlwZToiZW5kIiwuLi56MX0pO3UxLmN1cnJlbnQ9ITEsYjEuY3VycmVudD0hMSxrMShudWxsKX1yZXR1cm59bGV0IHk9Vy5jaGFuZ2VkVG91Y2hlc1swXTtpZigheSlyZXR1cm47bGV0IGY9KHkuY2xpZW50WC1PLmxlZnQpL08ud2lkdGgscj0oeS5jbGllbnRZLU8udG9wKS9PLmhlaWdodDtpZihmMSgpLE0xLmN1cnJlbnQpSTEoe3R5cGU6ImVuZCIseDpmLHk6cixlZGdlOkkwfSksTTEuY3VycmVudD0hMTtlbHNlIEkxKHt0eXBlOiJlbmQiLHg6Zix5OnJ9KX19KSxKKCJkaXYiLHtyZWY6UTAsImRhdGEtdGVzdGlkIjoidG91Y2gtaW5kaWNhdG9yIixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJub25lIix3aWR0aDoyNCxoZWlnaHQ6MjQsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoNTksMTMwLDI0NiwwLjUpIixib3hTaGFkb3c6IjAgMCA4cHggcmdiYSg1OSwxMzAsMjQ2LDAuMykiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19KSxQMSYmSihlLHtjaGlsZHJlbjpbSigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZmluZ2VyLWRvdCIsc3R5bGU6VTgoUDEueDEsUDEueTEpfSksSigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZmluZ2VyLWRvdCIsc3R5bGU6VTgoUDEueDIsUDEueTIpfSldfSksIVgxJiYhcyYmSigiZGl2Iix7c3R5bGU6ey4uLkw4LC4uLlh8fHt9fSxjaGlsZHJlbjpKKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjODg4Iixmb250U2l6ZToxNH0sY2hpbGRyZW46IkNvbm5lY3RpbmcuLi4ifSl9KSxzJiZKKCJkaXYiLHtzdHlsZTpMOCxjaGlsZHJlbjpKKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjZjQ0Iixmb250U2l6ZToxNCxwYWRkaW5nOjIwLHRleHRBbGlnbjoiY2VudGVyIn0sY2hpbGRyZW46c30pfSksayYmSigiZGl2Iix7c3R5bGU6ZTYsY2hpbGRyZW46Sigic3BhbiIse3N0eWxlOntjb2xvcjoiI2ZiYmYyNCIsZm9udFNpemU6MTMsZm9udEZhbWlseToibW9ub3NwYWNlIn0sY2hpbGRyZW46IlNsb3cgY29ubmVjdGlvbiJ9KX0pXX0pfSksIXomJkooImRpdiIse3N0eWxlOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixwYWRkaW5nOiI0cHggOHB4Iixib3JkZXJUb3A6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIn0sY2hpbGRyZW46W0ooImJ1dHRvbiIse29uQ2xpY2s6VzAsc3R5bGU6e2JhY2tncm91bmQ6Im5vbmUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSIsY29sb3I6IiNhYWEiLGZvbnRTaXplOjExLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIscGFkZGluZzoiMnB4IDEwcHgiLGN1cnNvcjoicG9pbnRlciIsYm9yZGVyUmFkaXVzOjR9LGNoaWxkcmVuOiJIb21lIn0pLEooInNwYW4iLHtzdHlsZTp7Y29sb3I6VTE+MD8iIzRmNCI6IiM4ODgiLGZvbnRTaXplOjEyLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6Nn0sY2hpbGRyZW46W0EmJkooInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJxdWFsaXR5LWRvdCIsc3R5bGU6e3dpZHRoOjgsaGVpZ2h0OjgsYm9yZGVyUmFkaXVzOiI1MCUiLGRpc3BsYXk6ImlubGluZS1ibG9jayIsYmFja2dyb3VuZDpBPT09Imdvb2QiPyIjNGFkZTgwIjpBPT09ImRlZ3JhZGVkIj8iI2ZhY2MxNSI6IiNlZjQ0NDQifX0pLFUxLCIgZnBzIl19KV19KV19KX12YXIgZTY9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjgsbGVmdDoiNTAlIix0cmFuc2Zvcm06InRyYW5zbGF0ZVgoLTUwJSkiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC43KSIsYm9yZGVyUmFkaXVzOjYscGFkZGluZzoiNHB4IDEycHgiLHBvaW50ZXJFdmVudHM6Im5vbmUifSxMOD17cG9zaXRpb246ImFic29sdXRlIixpbnNldDowLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsYmFja2dyb3VuZDoicmdiYSgwLDAsMCwwLjgpIn0sQzg9MjA7ZnVuY3Rpb24gVTgoJCxLKXtyZXR1cm57cG9zaXRpb246ImFic29sdXRlIixsZWZ0OmAkeyQqMTAwfSVgLHRvcDpgJHtLKjEwMH0lYCx3aWR0aDpDOCxoZWlnaHQ6QzgsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoMjU1LDI1NSwyNTUsMC40NSkiLGJvcmRlcjoiMS4yNXB4IHNvbGlkIHJnYmEoMCwwLDAsMC41NSkiLGJveFNoYWRvdzoiMCAxcHggM3B4IHJnYmEoMCwwLDAsMC40NSkiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19ZnVuY3Rpb24gbjEoJCl7aWYoISQpcmV0dXJuImlwaG9uZSI7bGV0IEs9JC50b0xvd2VyQ2FzZSgpO2lmKEsuaW5jbHVkZXMoImlwYWQiKSlyZXR1cm4iaXBhZCI7aWYoSy5pbmNsdWRlcygid2F0Y2giKSlyZXR1cm4id2F0Y2giO2lmKEsuaW5jbHVkZXMoInZpc2lvbiIpKXJldHVybiJ2aXNpb24iO3JldHVybiJpcGhvbmUifXZhciBBMT17aXBob25lOnt3aWR0aDo0MjcsaGVpZ2h0Ojg4MSxiZXplbFg6MTgsYmV6ZWxZOjE4LGlubmVyUmFkaXVzOjU1fSxpcGFkOnt3aWR0aDo0MzAsaGVpZ2h0OjYwNSxiZXplbFg6MTYsYmV6ZWxZOjE2LGlubmVyUmFkaXVzOjEyfSx3YXRjaDp7d2lkdGg6Mjc0LGhlaWdodDozMjIsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czo3OX0sdmlzaW9uOnt3aWR0aDo2NDAsaGVpZ2h0OjQwMCxiZXplbFg6MTIsYmV6ZWxZOjEyLGlubmVyUmFkaXVzOjMyfX0sZSQ9QTEuaXBob25lLndpZHRoLCRLPUExLmlwaG9uZS5oZWlnaHQsS0s9QTEuaXBob25lLmJlemVsWCxRSz1BMS5pcGhvbmUuYmV6ZWxZLEpLPUExLmlwaG9uZS5pbm5lclJhZGl1cyx6OD17ImlQaG9uZSAxNyBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNyBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE3Ijp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSBBaXIiOnt3aWR0aDoxMjYwLGhlaWdodDoyNzM2fSwiaVBob25lIDE2IFBybyBNYXgiOnt3aWR0aDoxMzIwLGhlaWdodDoyODY4fSwiaVBob25lIDE2IFBybyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgMTYgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTYiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBob25lIDE2ZSI6e3dpZHRoOjExNzAsaGVpZ2h0OjI1MzJ9LCJpUGhvbmUgMTUgUHJvIE1heCI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUgUHJvIjp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNSBQbHVzIjp7d2lkdGg6MTI5MCxoZWlnaHQ6Mjc5Nn0sImlQaG9uZSAxNSI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGFkIFBybyAxMy1pbmNoIChNNSkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTUpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgUHJvIDEzLWluY2ggKE00KSI6e3dpZHRoOjIwNjQsaGVpZ2h0OjI3NTJ9LCJpUGFkIFBybyAxMS1pbmNoIChNNCkiOnt3aWR0aDoxNjY4LGhlaWdodDoyNDIwfSwiaVBhZCBBaXIgMTMtaW5jaCAoTTMpIjp7d2lkdGg6MjA0OCxoZWlnaHQ6MjczMn0sImlQYWQgQWlyIDExLWluY2ggKE0zKSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIChBMTYpIjp7d2lkdGg6MTY0MCxoZWlnaHQ6MjM2MH0sImlQYWQgbWluaSAoQTE3IFBybykiOnt3aWR0aDoxNDg4LGhlaWdodDoyMjY2fSwiQXBwbGUgV2F0Y2ggVWx0cmEgMyAoNDltbSkiOnt3aWR0aDo0MjIsaGVpZ2h0OjUxNH0sIkFwcGxlIFdhdGNoIFVsdHJhIDIgKDQ5bW0pIjp7d2lkdGg6NDEwLGhlaWdodDo1MDJ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTEgKDQ2bW0pIjp7d2lkdGg6NDE2LGhlaWdodDo0OTZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTEgKDQybW0pIjp7d2lkdGg6Mzc0LGhlaWdodDo0NDZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTAgKDQ2bW0pIjp7d2lkdGg6NDE2LGhlaWdodDo0OTZ9LCJBcHBsZSBXYXRjaCBTZXJpZXMgMTAgKDQybW0pIjp7d2lkdGg6Mzc0LGhlaWdodDo0NDZ9LCJBcHBsZSBXYXRjaCBTRSAzICg0NG1tKSI6e3dpZHRoOjM2OCxoZWlnaHQ6NDQ4fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDBtbSkiOnt3aWR0aDozMjQsaGVpZ2h0OjM5NH0sIkFwcGxlIFdhdGNoIFNFICg0NG1tKSI6e3dpZHRoOjM2OCxoZWlnaHQ6NDQ4fSwiQXBwbGUgV2F0Y2ggU0UgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBWaXNpb24gUHJvIjp7d2lkdGg6MTkyMCxoZWlnaHQ6MTA4MH19O2Z1bmN0aW9uIGIyKCQsSyl7bGV0IFE9JCYmJC53aWR0aD4wJiYkLmhlaWdodD4wPyQ6SyxYPWIwKFEpO2lmKFgpcmV0dXJuYCR7WC53aWR0aH0gLyAke1guaGVpZ2h0fWA7cmV0dXJuYCR7QTEuaXBob25lLndpZHRoLTIqQTEuaXBob25lLmJlemVsWH0gLyAke0ExLmlwaG9uZS5oZWlnaHQtMipBMS5pcGhvbmUuYmV6ZWxZfWB9ZnVuY3Rpb24gUzAoJD0iaXBob25lIixLKXtsZXQgUT1LP3o4W0tdOm51bGw7aWYoUSlyZXR1cm4gUTtsZXQgWD1BMVskXTtyZXR1cm57d2lkdGg6WC53aWR0aC0yKlguYmV6ZWxYLGhlaWdodDpYLmhlaWdodC0yKlguYmV6ZWxZfX1mdW5jdGlvbiBSMCgkPSJpcGhvbmUiLEspe2lmKHkwKEspKXN3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiA3MjA7Y2FzZSJ2aXNpb24iOnJldHVybiA1ODA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtkZWZhdWx0OnJldHVybiA2MjB9c3dpdGNoKCQpe2Nhc2UiaXBhZCI6cmV0dXJuIDQwMDtjYXNlIndhdGNoIjpyZXR1cm4gMjAwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2RlZmF1bHQ6cmV0dXJuIDMyMH19ZnVuY3Rpb24gUzIoJD0iaXBob25lIixLKXtsZXQgUT1BMVskXSxYPVEud2lkdGgtMipRLmJlemVsWCxaPVEuaGVpZ2h0LTIqUS5iZXplbFk7aWYoWDxaJiZ5MChLKSlyZXR1cm5gJHtRLmlubmVyUmFkaXVzL1oqMTAwfSUgLyAke1EuaW5uZXJSYWRpdXMvWCoxMDB9JWA7cmV0dXJuYCR7US5pbm5lclJhZGl1cy9YKjEwMH0lIC8gJHtRLmlubmVyUmFkaXVzL1oqMTAwfSVgfWZ1bmN0aW9uIEY4KCQpe2xldCBLPUExWyQudHlwZV0sUT1LLndpZHRoLTIqSy5iZXplbFgsWD1LLmhlaWdodC0yKksuYmV6ZWxZLFosWTtpZihRPFgmJnkwKCQuY29uZmlnPz9udWxsKSlaPUsuaW5uZXJSYWRpdXMvWCxZPUsuaW5uZXJSYWRpdXMvUTtlbHNlIFo9Sy5pbm5lclJhZGl1cy9RLFk9Sy5pbm5lclJhZGl1cy9YO2xldCBxPVoqJC5jb250YWluZXJXaWR0aCxHPVkqJC5jb250YWluZXJIZWlnaHQsQj1NYXRoLnNxcnQoTWF0aC5tYXgocSpHLDApKTtyZXR1cm57cng6cSxyeTpHLHJHZW9tOkJ9fXZhciBLND0xMyxRND02MjtmdW5jdGlvbiB3NSgkKXtsZXR7Y29udGFpbmVyV2lkdGg6Syxjb250YWluZXJIZWlnaHQ6UX09JCxYPShVKT0+VS50b0ZpeGVkKDMpLFo9KFUsQSk9PntsZXQgTT1BLEU9QSxUPVE0LzIqKE1hdGguUEkvMTgwKSxiPTIyNSpNYXRoLlBJLzE4MCx4PWIrVCxtPWItVCxSPU0rVSpNYXRoLmNvcyh4KSxvPUUrVSpNYXRoLnNpbih4KSxpPU0rVSpNYXRoLmNvcyhtKSxYMT1FK1UqTWF0aC5zaW4obSksJDE9YE0gJHtYKFIpfSAke1gobyl9IEEgJHtYKFUpfSAke1goVSl9IDAgMCAxICR7WChpKX0gJHtYKFgxKX1gLHM9YE0gJHtYKGkpfSAke1goWDEpfSBBICR7WChVKX0gJHtYKFUpfSAwIDAgMCAke1goUil9ICR7WChvKX1gO3JldHVybntkOiQxLGRGaWxsOnN9fTtpZighKEs+MCl8fCEoUT4wKSl7bGV0IFU9SzQsQT1NYXRoLmNlaWwoVSsxNCkse2Q6TSxkRmlsbDpFfT1aKFUsQSk7cmV0dXJue2Q6TSxkRmlsbDpFLHZpZXdCb3hTaXplOkF9fWxldHtyR2VvbTpZfT1GOCgkKSxxPU1hdGgubWF4KDIuMixNYXRoLm1pbig1LjIsMC4wMTEqTWF0aC5taW4oSyxRKSkpLEc9WSowLjM0K3EsQj1NYXRoLm1pbihLLFEpLFY9TWF0aC5taW4oMjIsTWF0aC5tYXgoMTIsQiowLjA1MikpO0c9TWF0aC5taW4oMjQsTWF0aC5tYXgoMTIsRyxWKSk7bGV0IE49TWF0aC5tYXgoMjYsTWF0aC5jZWlsKEcrMTMpKSx7ZDpfLGRGaWxsOnp9PVooRyxOKTtyZXR1cm57ZDpfLGRGaWxsOnosdmlld0JveFNpemU6Tn19ZnVuY3Rpb24gUjIoe3R5cGU6JD0iaXBob25lIixzdHJlYW1pbmc6Sz0hMX0pe3N3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiBKKFg0LHtzdHJlYW1pbmc6S30pO2Nhc2Uid2F0Y2giOnJldHVybiBKKFo0LHtzdHJlYW1pbmc6S30pO2Nhc2UidmlzaW9uIjpyZXR1cm4gSihZNCx7c3RyZWFtaW5nOkt9KTtkZWZhdWx0OnJldHVybiBKKEo0LHtzdHJlYW1pbmc6S30pfX1mdW5jdGlvbiBKNCh7c3RyZWFtaW5nOiQ9ITF9KXtyZXR1cm4gSigic3ZnIix7dmlld0JveDoiMCAwIDQyNyA4ODEiLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbSigiZGVmcyIse2NoaWxkcmVuOltKKCJmaWx0ZXIiLHtpZDoiY2hyb21lLWZpbHRlcjAiLHg6Ii0wLjE2Njk5MiIseToiMC4xNjY1MDQiLHdpZHRoOiI0MjciLGhlaWdodDoiODgwLjY2NyIsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSigiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSigiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEooImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiZWZmZWN0MV9mb3JlZ3JvdW5kQmx1ciJ9KV19KSxKKCJmaWx0ZXIiLHtpZDoiY2hyb21lLWZpbHRlcjEiLHg6IjYuMzMyMzYiLHk6IjYuMzMzODIiLHdpZHRoOiI0MTQiLGhlaWdodDoiODY4IixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltKKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxKKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksSigiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuMzMzMzMzIixyZXN1bHQ6ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXIifSldfSldfSksSigicmVjdCIse3g6IjMuODMyNjgiLHk6IjMuODMzNjYiLHdpZHRoOiI0MTkiLGhlaWdodDoiODczIixyeDoiNjYuMTY2NyIsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiNC4zMzMzMyJ9KSxKKCJyZWN0Iix7eDoiMC44MzMzMzMiLHk6IjAuODMzMzMzIix3aWR0aDoiNDI1IixoZWlnaHQ6Ijg3OSIscng6IjY5LjE2NjciLHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2NjcifSksSigiZyIse29wYWNpdHk6IjAuOSIsZmlsdGVyOiJ1cmwoI2Nocm9tZS1maWx0ZXIwKSIsY2hpbGRyZW46SigicmVjdCIse3g6IjEuNjY2MDIiLHk6IjIiLHdpZHRoOiI0MjMuMzMzIixoZWlnaHQ6Ijg3NyIscng6IjY4LjY2NjciLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2NjcifSl9KSxKKCJnIix7b3BhY2l0eToiMC44IixmaWx0ZXI6InVybCgjY2hyb21lLWZpbHRlcjEpIixjaGlsZHJlbjpKKCJyZWN0Iix7eDoiNy4zMzI2OCIseToiNy4zMzM2NiIsd2lkdGg6IjQxMiIsaGVpZ2h0OiI4NjYiLHJ4OiI2Mi42NjY3IixzdHJva2U6IiM2NDY0NjQiLHN0cm9rZVdpZHRoOiIwLjY2NjY2NyJ9KX0pLEooInJlY3QiLHt4OiIxNTEuNjY2Iix5OiIzMS42NjciLHdpZHRoOiIxMjMuMzMzIixoZWlnaHQ6IjM2IixyeDoiMTgiLGZpbGw6ImJsYWNrIixzdHlsZTp7b3BhY2l0eTokPzA6MSx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSldfSl9ZnVuY3Rpb24gWDQoe3N0cmVhbWluZzokPSExfSl7bGV0IEs9QTEuaXBhZC53aWR0aCxRPUExLmlwYWQuaGVpZ2h0LFg9MzAsWj0yNjtyZXR1cm4gSigic3ZnIix7dmlld0JveDpgMCAwICR7S30gJHtRfWAsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltKKCJkZWZzIix7Y2hpbGRyZW46W0ooImZpbHRlciIse2lkOiJpcGFkLWdsb3cwIix4OiIwIix5OiIwIix3aWR0aDpLLGhlaWdodDpRLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0ooImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLEooImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxKKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImJsdXIifSldfSksSigiZmlsdGVyIix7aWQ6ImlwYWQtZ2xvdzEiLHg6IjUiLHk6IjUiLHdpZHRoOkstMTAsaGVpZ2h0OlEtMTAsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSigiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSigiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEooImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjMzMzMzMyIscmVzdWx0OiJibHVyIn0pXX0pXX0pLEooInJlY3QiLHt4OiIzLjUiLHk6IjMuNSIsd2lkdGg6Sy03LGhlaWdodDpRLTcscng6MjYsc3Ryb2tlOiIjNDU0NTQ4IixzdHJva2VXaWR0aDoiNCJ9KSxKKCJyZWN0Iix7eDoiMC44MzMiLHk6IjAuODMzIix3aWR0aDpLLTEuNjY2LGhlaWdodDpRLTEuNjY2LHJ4OjMwLHN0cm9rZToiIzM3MzczYSIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pLEooImciLHtvcGFjaXR5OiIwLjkiLGZpbHRlcjoidXJsKCNpcGFkLWdsb3cwKSIsY2hpbGRyZW46SigicmVjdCIse3g6IjEuNSIseToiMS41Iix3aWR0aDpLLTMsaGVpZ2h0OlEtMyxyeDoyOSxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KX0pLEooImciLHtvcGFjaXR5OiIwLjgiLGZpbHRlcjoidXJsKCNpcGFkLWdsb3cxKSIsY2hpbGRyZW46SigicmVjdCIse3g6IjYiLHk6IjYiLHdpZHRoOkstMTIsaGVpZ2h0OlEtMTIscng6MjQsc3Ryb2tlOiIjNjQ2NDY0IixzdHJva2VXaWR0aDoiMC42NjYifSl9KSxKKCJjaXJjbGUiLHtjeDpLLzIsY3k6QTEuaXBhZC5iZXplbFkvMisxLHI6IjMiLGZpbGw6IiMxYTFhMWEiLHN0eWxlOntvcGFjaXR5OiQ/MDowLjgsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pLEooInJlY3QiLHt4OihLLTEyMCkvMix5OlEtQTEuaXBhZC5iZXplbFkvMi0yLjUsd2lkdGg6IjEyMCIsaGVpZ2h0OiI1IixyeDoiMi41IixmaWxsOiJ3aGl0ZSIsc3R5bGU6e29wYWNpdHk6JD8wOjAuMzUsbWl4QmxlbmRNb2RlOiJkaWZmZXJlbmNlIix0cmFuc2l0aW9uOiJvcGFjaXR5IDAuM3MgZWFzZSJ9fSldfSl9ZnVuY3Rpb24gWjQoe3N0cmVhbWluZzokPSExfSl7bGV0IEs9QTEud2F0Y2gud2lkdGgsUT1BMS53YXRjaC5oZWlnaHQsWD04OCxaPTgyLFk9OCxxPTM2LEc9US8yLTE4LTE2LEI9MjIsVj1RLzItMTErMTY7cmV0dXJuIEooInN2ZyIse3ZpZXdCb3g6YDAgMCAke0t9ICR7UX1gLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixvdmVyZmxvdzoidmlzaWJsZSJ9LGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46W0ooImRlZnMiLHtjaGlsZHJlbjpKKCJmaWx0ZXIiLHtpZDoid2F0Y2gtZ2xvdzAiLHg6IjAiLHk6IjAiLHdpZHRoOksrMTIsaGVpZ2h0OlEsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbSigiZmVGbG9vZCIse2Zsb29kT3BhY2l0eToiMCIscmVzdWx0OiJCYWNrZ3JvdW5kSW1hZ2VGaXgifSksSigiZmVCbGVuZCIse21vZGU6Im5vcm1hbCIsaW46IlNvdXJjZUdyYXBoaWMiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6InNoYXBlIn0pLEooImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjUiLHJlc3VsdDoiYmx1ciJ9KV19KX0pLEooInJlY3QiLHt4OkstMix5Okcsd2lkdGg6OCxoZWlnaHQ6MzYscng6IjMiLGZpbGw6IiMyYTJhMmMiLHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEifSksSigicmVjdCIse3g6Sy0xLHk6Vix3aWR0aDo2LGhlaWdodDoyMixyeDoiMi41IixmaWxsOiIjMmEyYTJjIixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIwLjgifSksSigicmVjdCIse3g6IjMuNSIseToiMy41Iix3aWR0aDpLLTcsaGVpZ2h0OlEtNyxyeDo4MixzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIzLjUifSksSigicmVjdCIse3g6IjAuODMzIix5OiIwLjgzMyIsd2lkdGg6Sy0xLjY2NixoZWlnaHQ6US0xLjY2NixyeDo4OCxzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KSxKKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjd2F0Y2gtZ2xvdzApIixjaGlsZHJlbjpKKCJyZWN0Iix7eDoiMS41Iix5OiIxLjUiLHdpZHRoOkstMyxoZWlnaHQ6US0zLHJ4Ojg3LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjEuNjY2In0pfSldfSl9ZnVuY3Rpb24gWTQoe3N0cmVhbWluZzokPSExfSl7bGV0IEs9QTEudmlzaW9uLndpZHRoLFE9QTEudmlzaW9uLmhlaWdodCxYPTQwLFo9MzQ7cmV0dXJuIEooInN2ZyIse3ZpZXdCb3g6YDAgMCAke0t9ICR7UX1gLHN0eWxlOnt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn0sZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpbSigiZGVmcyIse2NoaWxkcmVuOltKKCJmaWx0ZXIiLHtpZDoidmlzaW9uLWdsb3cwIix4OiIwIix5OiIwIix3aWR0aDpLLGhlaWdodDpRLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W0ooImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLEooImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluOiJTb3VyY2VHcmFwaGljIixpbjI6IkJhY2tncm91bmRJbWFnZUZpeCIscmVzdWx0OiJzaGFwZSJ9KSxKKCJmZUdhdXNzaWFuQmx1ciIse3N0ZERldmlhdGlvbjoiMC41IixyZXN1bHQ6ImJsdXIifSldfSksSigiZmlsdGVyIix7aWQ6InZpc2lvbi1nbG93MSIseDoiNSIseToiNSIsd2lkdGg6Sy0xMCxoZWlnaHQ6US0xMCxmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UiLGNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnM6InNSR0IiLGNoaWxkcmVuOltKKCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSxKKCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSksSigiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjAuMzMzIixyZXN1bHQ6ImJsdXIifSldfSksSigibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLWdsYXNzIix4MToiMCIseTE6IjAiLHgyOiIwIix5MjoiMSIsY2hpbGRyZW46W0ooInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiM1NTU1NTgiLHN0b3BPcGFjaXR5OiIwLjMifSksSigic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjM2EzYTNkIixzdG9wT3BhY2l0eToiMC4xIn0pXX0pXX0pLEooInJlY3QiLHt4OiIwIix5OiIwIix3aWR0aDpLLGhlaWdodDpRLHJ4OjQwLGZpbGw6InVybCgjdmlzaW9uLWdsYXNzKSJ9KSxKKCJyZWN0Iix7eDoiMy41Iix5OiIzLjUiLHdpZHRoOkstNyxoZWlnaHQ6US03LHJ4OjM0LHN0cm9rZToiIzQ1NDU0OCIsc3Ryb2tlV2lkdGg6IjMifSksSigicmVjdCIse3g6IjAuODMzIix5OiIwLjgzMyIsd2lkdGg6Sy0xLjY2NixoZWlnaHQ6US0xLjY2NixyeDo0MCxzdHJva2U6IiMzNzM3M2EiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KSxKKCJnIix7b3BhY2l0eToiMC45IixmaWx0ZXI6InVybCgjdmlzaW9uLWdsb3cwKSIsY2hpbGRyZW46SigicmVjdCIse3g6IjEuNSIseToiMS41Iix3aWR0aDpLLTMsaGVpZ2h0OlEtMyxyeDozOSxzdHJva2U6IiM0NTQ1NDgiLHN0cm9rZVdpZHRoOiIxLjY2NiJ9KX0pLEooImciLHtvcGFjaXR5OiIwLjgiLGZpbHRlcjoidXJsKCN2aXNpb24tZ2xvdzEpIixjaGlsZHJlbjpKKCJyZWN0Iix7eDoiNiIseToiNiIsd2lkdGg6Sy0xMixoZWlnaHQ6US0xMixyeDozMixzdHJva2U6IiM2NDY0NjQiLHN0cm9rZVdpZHRoOiIwLjY2NiJ9KX0pLEooImVsbGlwc2UiLHtjeDpLLzIsY3k6US8yLHJ4OksvMi0zMCxyeTpRLzItMjQsc3Ryb2tlOiIjNGE0YTRkIixzdHJva2VXaWR0aDoiMC41IixvcGFjaXR5OiIwLjMiLHN0eWxlOntvcGFjaXR5OiQ/MDowLjMsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjNzIGVhc2UifX0pXX0pfXZhciBFNT1kMShudWxsKTtmdW5jdGlvbiB4MigkKXtsZXQgSz1yMShFNSk7aWYoIUspdGhyb3cgRXJyb3IoYDxTaW11bGF0b3JUb29sYmFyLiR7JH0+IG11c3QgYmUgcmVuZGVyZWQgaW5zaWRlIDxTaW11bGF0b3JUb29sYmFyPmApO3JldHVybiBLfXZhciBHND17ZGlzcGxheToiZmxleCIsZmxleFdyYXA6IndyYXAiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLGdhcDoiNHB4IDEycHgiLHBhZGRpbmc6IjhweCAxMnB4Iixib3JkZXJSYWRpdXM6MjQsYmFja2dyb3VuZDoiIzFjMWMxZSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpIixib3hTaGFkb3c6IjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMikiLG1pbldpZHRoOjI0MCx3aWR0aDoiMTAwJSJ9O2Z1bmN0aW9uIFY0KHtleGVjOiQsb25Sb3RhdGU6SyxvcmllbnRhdGlvbjpRLGRldmljZVVkaWQ6WCxkZXZpY2VOYW1lOlosZGV2aWNlUnVudGltZTpZLHN0cmVhbWluZzpxPSExLGRpc2FibGVkOkc9ITEsY2hpbGRyZW46QixzdHlsZTpWLC4uLkN9KXtsZXQgTD1uMShaKSxOPXtleGVjOiQsb25Sb3RhdGU6SyxvcmllbnRhdGlvbjpRLGRldmljZVVkaWQ6WCxkZXZpY2VOYW1lOlosZGV2aWNlUnVudGltZTpZLGRldmljZVR5cGU6TCxzdHJlYW1pbmc6cSxkaXNhYmxlZDpHfHwhWHx8IXF9O3JldHVybiBKKEU1LlByb3ZpZGVyLHt2YWx1ZTpOLGNoaWxkcmVuOkooImRpdiIseyJkYXRhLXNpbXVsYXRvci10b29sYmFyIjohMCxzdHlsZTp7Li4uRzQsLi4uVn0sLi4uQyxjaGlsZHJlbjpCfSl9KX12YXIgQjQ9e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsYWxpZ25JdGVtczoiZmxleC1zdGFydCIsdGV4dEFsaWduOiJsZWZ0IixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixjb2xvcjoiI2ZmZiIscGFkZGluZzoiMnB4IDRweCIsbWFyZ2luOiItMnB4IC00cHgiLGJvcmRlclJhZGl1czo2LGN1cnNvcjoicG9pbnRlciIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsbGluZUhlaWdodDoxLjIsZm9udEZhbWlseToiaW5oZXJpdCJ9LE40PWkxKGZ1bmN0aW9uKHtuYW1lOkssc3VidGl0bGU6USxoaWRlQ2hldnJvbjpYLGhpZGVTdWJ0aXRsZTpaLHN0eWxlOlksb25Nb3VzZUVudGVyOnEsb25Nb3VzZUxlYXZlOkcsLi4uQn0sVil7bGV0IEM9eDIoIlRpdGxlIiksW0wsRl09RCghMSksTj1LPz9DLmRldmljZU5hbWU/PyJObyBzaW11bGF0b3IiLF89UT8/KEMuZGV2aWNlUnVudGltZT9DLmRldmljZVJ1bnRpbWUucmVwbGFjZSgvXC4vLCIgIik6IuKAlCIpO3JldHVybiBKKCJidXR0b24iLHtyZWY6Vix0eXBlOiJidXR0b24iLCJkYXRhLXNpbXVsYXRvci10b29sYmFyLXRpdGxlIjohMCxvbk1vdXNlRW50ZXI6KHopPT57RighMCkscT8uKHopfSxvbk1vdXNlTGVhdmU6KHopPT57RighMSksRz8uKHopfSxzdHlsZTp7Li4uQjQsYmFja2dyb3VuZDpMPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiOiJ0cmFuc3BhcmVudCIsLi4uWX0sLi4uQixjaGlsZHJlbjpbSigic3BhbiIse3N0eWxlOntkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmb250U2l6ZToxMixmb250V2VpZ2h0OjYwMCxjb2xvcjoiI2ZmZiIsbWF4V2lkdGg6IjEwMCUiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGNoaWxkcmVuOltOLCFYJiZKKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLHN0eWxlOntjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIixmbGV4U2hyaW5rOjB9LGNoaWxkcmVuOkooInBvbHlsaW5lIix7cG9pbnRzOiI2IDkgMTIgMTUgMTggOSJ9KX0pXX0pLCFaJiZKKCJzcGFuIix7c3R5bGU6e2ZvbnRTaXplOjEwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNSkiLG1heFdpZHRoOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpffSldfSl9KSxMND17ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmbGV4U2hyaW5rOjB9O2Z1bmN0aW9uIEM0KHtzdHlsZTokLC4uLkt9KXtyZXR1cm4gSigiZGl2Iix7c3R5bGU6ey4uLkw0LC4uLiR9LC4uLkt9KX12YXIgVTQ9e2JhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLHBhZGRpbmc6Nixib3JkZXJSYWRpdXM6MTIsY3Vyc29yOiJwb2ludGVyIixkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjgpIix0cmFuc2l0aW9uOiJiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzLCBjb2xvciAwLjE1cyIscG9zaXRpb246InJlbGF0aXZlIixvdmVyZmxvdzoidmlzaWJsZSJ9LHYyPWkxKGZ1bmN0aW9uKHtmb3JjZURpc2FibGVkOkssdG9vbHRpcDpRLHN0eWxlOlgsZGlzYWJsZWQ6Wix0aXRsZTpZLG9uTW91c2VFbnRlcjpxLG9uTW91c2VMZWF2ZTpHLG9uRm9jdXM6QixvbkJsdXI6VixjaGlsZHJlbjpDLCJhcmlhLWxhYmVsIjpMLC4uLkZ9LE4pe2xldCBfPXIxKEU1KSx6PVp8fEt8fF8/LmRpc2FibGVkLFtVLEFdPUQoITEpLFtNLEVdPUQoITEpLFQ9UDIoKSxiPVE/P1k/Pyh0eXBlb2YgTD09PSJzdHJpbmciP0w6bnVsbCkseD0hIWImJiF6JiYoVXx8TSk7cmV0dXJuIEooImJ1dHRvbiIse3JlZjpOLHR5cGU6ImJ1dHRvbiIsZGlzYWJsZWQ6eiwiYXJpYS1sYWJlbCI6TCwiYXJpYS1kZXNjcmliZWRieSI6Yj9UOnZvaWQgMCxvbk1vdXNlRW50ZXI6KG0pPT57QSghMCkscT8uKG0pfSxvbk1vdXNlTGVhdmU6KG0pPT57QSghMSksRz8uKG0pfSxvbkZvY3VzOihtKT0+e0UoITApLEI/LihtKX0sb25CbHVyOihtKT0+e0UoITEpLFY/LihtKX0sc3R5bGU6ey4uLlU0LGNvbG9yOno/InJnYmEoMjU1LDI1NSwyNTUsMC4yNSkiOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOCkiLGJhY2tncm91bmQ6VSYmIXo/InJnYmEoMjU1LDI1NSwyNTUsMC4xKSI6InRyYW5zcGFyZW50IixjdXJzb3I6ej8ibm90LWFsbG93ZWQiOiJwb2ludGVyIiwuLi5YfSwuLi5GLGNoaWxkcmVuOltDLGImJkooInNwYW4iLHtpZDpULHJvbGU6InRvb2x0aXAiLCJhcmlhLWhpZGRlbiI6IXgsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiNTAlIixib3R0b206ImNhbGMoMTAwJSArIDhweCkiLHRyYW5zZm9ybTpgdHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKCR7eD8wOjJ9cHgpYCxvcGFjaXR5Ong/MTowLHBvaW50ZXJFdmVudHM6Im5vbmUiLHdoaXRlU3BhY2U6Im5vd3JhcCIscGFkZGluZzoiNHB4IDdweCIsYm9yZGVyUmFkaXVzOjYsYmFja2dyb3VuZDoicmdiYSgzMCwzMCwzMiwwLjk2KSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC45MikiLGZvbnRTaXplOjExLGZvbnRXZWlnaHQ6NTAwLGxpbmVIZWlnaHQ6MSxib3hTaGFkb3c6IjAgNHB4IDE0cHggcmdiYSgwLDAsMCwwLjMyKSIsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjEycyBlYXNlLCB0cmFuc2Zvcm0gMC4xMnMgZWFzZSIsekluZGV4OjEwMH0sY2hpbGRyZW46Yn0pXX0pfSk7ZnVuY3Rpb24gejQoKXtyZXR1cm5bJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBzZXQgZnJvbnRtb3N0IHRvIHRydWUnLCd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gcGVyZm9ybSBhY3Rpb24gIkFYUmFpc2UiIG9mIChmaXJzdCB3aW5kb3cgd2hvc2UgbmFtZSBjb250YWlucyAid2F0Y2hPUyIpJywndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIGNsaWNrIG1lbnUgaXRlbSAiSG9tZSIgb2YgbWVudSAiRGV2aWNlIiBvZiBtZW51IGJhciBpdGVtICJEZXZpY2UiIG9mIG1lbnUgYmFyIDEnXS5tYXAoKEspPT5gLWUgJyR7S30nYCkucmVkdWNlKChLLFEpPT5gJHtLfSAke1F9YCwib3Nhc2NyaXB0Iil9dmFyIEY0PXtwb3J0cmFpdDoibGFuZHNjYXBlX2xlZnQiLGxhbmRzY2FwZV9sZWZ0OiJwb3J0cmFpdF91cHNpZGVfZG93biIscG9ydHJhaXRfdXBzaWRlX2Rvd246ImxhbmRzY2FwZV9yaWdodCIsbGFuZHNjYXBlX3JpZ2h0OiJwb3J0cmFpdCJ9LEg0PUooInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOkooInBhdGgiLHtkOiJNMyAxMC41IDEyIDNsOSA3LjVWMjBhMSAxIDAgMCAxLTEgMWgtNXYtN2gtNnY3SDRhMSAxIDAgMCAxLTEtMXoifSl9KSxBND1KKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCA0NCA0NCIsZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpKKCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGNsaXBSdWxlOiJldmVub2RkIixmaWxsOiJjdXJyZW50Q29sb3IiLGQ6Ik00My42ODc1IDEyLjQ2ODhWOC4yNzM0NEM0My42ODc1IDUuNzI2NTYgNDIuOTUzMSAzLjcxMDk0IDQxLjQ4NDQgMi4yMjY1NkM0MC4wMTU2IDAuNzQyMTg4IDM4IDAgMzUuNDM3NSAwSDMxLjE0ODRDMzAuNjAxNiAwIDMwLjEzMjggMC4xOTUzMTIgMjkuNzQyMiAwLjU4NTkzOEMyOS4zNTE2IDAuOTc2NTYyIDI5LjE1NjIgMS40NDUzMSAyOS4xNTYyIDEuOTkyMTlDMjkuMTU2MiAyLjUyMzQ0IDI5LjM1MTYgMi45ODQzOCAyOS43NDIyIDMuMzc1QzMwLjEzMjggMy43NjU2MiAzMC42MDE2IDMuOTYwOTQgMzEuMTQ4NCAzLjk2MDk0SDM1LjQzNzVDMzYuNzgxMiAzLjk2MDk0IDM3LjgzNTkgNC4zNDM3NSAzOC42MDE2IDUuMTA5MzhDMzkuMzUxNiA1Ljg3NSAzOS43MjY2IDYuOTI5NjkgMzkuNzI2NiA4LjI3MzQ0VjEyLjQ2ODhDMzkuNzI2NiAxMyAzOS45MjE5IDEzLjQ2MDkgNDAuMzEyNSAxMy44NTE2QzQwLjcwMzEgMTQuMjQyMiA0MS4xNzE5IDE0LjQzNzUgNDEuNzE4OCAxNC40Mzc1QzQyLjI1IDE0LjQzNzUgNDIuNzEwOSAxNC4yNDIyIDQzLjEwMTYgMTMuODUxNkM0My40OTIyIDEzLjQ2MDkgNDMuNjg3NSAxMyA0My42ODc1IDEyLjQ2ODhaTTAgMTIuNDY4OEMwIDEzIDAuMTk1MzEyIDEzLjQ2MDkgMC41ODU5MzggMTMuODUxNkMwLjk3NjU2MiAxNC4yNDIyIDEuNDM3NSAxNC40Mzc1IDEuOTY4NzUgMTQuNDM3NUMyLjUgMTQuNDM3NSAyLjk2MDk0IDE0LjI0MjIgMy4zNTE1NiAxMy44NTE2QzMuNzQyMTkgMTMuNDYwOSAzLjkzNzUgMTMgMy45Mzc1IDEyLjQ2ODhWOC4yNzM0NEMzLjkzNzUgNi45Mjk2OSA0LjMyMDMxIDUuODc1IDUuMDg1OTQgNS4xMDkzOEM1LjgzNTk0IDQuMzQzNzUgNi44OTA2MiAzLjk2MDk0IDguMjUgMy45NjA5NEgxMi41MzkxQzEzLjA4NTkgMy45NjA5NCAxMy41NTQ3IDMuNzY1NjIgMTMuOTQ1MyAzLjM3NUMxNC4zMjAzIDIuOTg0MzggMTQuNTA3OCAyLjUyMzQ0IDE0LjUwNzggMS45OTIxOUMxNC41MDc4IDEuNDQ1MzEgMTQuMzIwMyAwLjk3NjU2MiAxMy45NDUzIDAuNTg1OTM4QzEzLjU1NDcgMC4xOTUzMTIgMTMuMDg1OSAwIDEyLjUzOTEgMEg4LjI1QzUuNjg3NSAwIDMuNjcxODggMC43NDIxODggMi4yMDMxMiAyLjIyNjU2QzAuNzM0Mzc1IDMuNzEwOTQgMCA1LjcyNjU2IDAgOC4yNzM0NFYxMi40Njg4Wk00My42ODc1IDMxLjI0MjJDNDMuNjg3NSAzMC43MTA5IDQzLjQ5MjIgMzAuMjUgNDMuMTAxNiAyOS44NTk0QzQyLjcxMDkgMjkuNDY4OCA0Mi4yNSAyOS4yNzM0IDQxLjcxODggMjkuMjczNEM0MS4xNzE5IDI5LjI3MzQgNDAuNzAzMSAyOS40Njg4IDQwLjMxMjUgMjkuODU5NEMzOS45MjE5IDMwLjI1IDM5LjcyNjYgMzAuNzEwOSAzOS43MjY2IDMxLjI0MjJWMzUuNDM3NUMzOS43MjY2IDM2Ljc4MTIgMzkuMzUxNiAzNy44MzU5IDM4LjYwMTYgMzguNjAxNkMzNy44MzU5IDM5LjM2NzIgMzYuNzgxMiAzOS43NSAzNS40Mzc1IDM5Ljc1SDMxLjE0ODRDMzAuNjAxNiAzOS43NSAzMC4xMzI4IDM5Ljk0NTMgMjkuNzQyMiA0MC4zMzU5QzI5LjM1MTYgNDAuNzI2NiAyOS4xNTYyIDQxLjE4NzUgMjkuMTU2MiA0MS43MTg4QzI5LjE1NjIgNDIuMjY1NiAyOS4zNTE2IDQyLjcyNjYgMjkuNzQyMiA0My4xMDE2QzMwLjEzMjggNDMuNDkyMiAzMC42MDE2IDQzLjY4NzUgMzEuMTQ4NCA0My42ODc1SDM1LjQzNzVDMzggNDMuNjg3NSA0MC4wMTU2IDQyLjk0NTMgNDEuNDg0NCA0MS40NjA5QzQyLjk1MzEgMzkuOTkyMiA0My42ODc1IDM3Ljk4NDQgNDMuNjg3NSAzNS40Mzc1VjMxLjI0MjJaTTAgMzEuMjQyMlYzNS40Mzc1QzAgMzcuOTg0NCAwLjczNDM3NSAzOS45OTIyIDIuMjAzMTIgNDEuNDYwOUMzLjY3MTg4IDQyLjk0NTMgNS42ODc1IDQzLjY4NzUgOC4yNSA0My42ODc1SDEyLjUzOTFDMTMuMDg1OSA0My42ODc1IDEzLjU1NDcgNDMuNDkyMiAxMy45NDUzIDQzLjEwMTZDMTQuMzIwMyA0Mi43MjY2IDE0LjUwNzggNDIuMjY1NiAxNC41MDc4IDQxLjcxODhDMTQuNTA3OCA0MS4xODc1IDE0LjMyMDMgNDAuNzI2NiAxMy45NDUzIDQwLjMzNTlDMTMuNTU0NyAzOS45NDUzIDEzLjA4NTkgMzkuNzUgMTIuNTM5MSAzOS43NUg4LjI1QzYuODkwNjIgMzkuNzUgNS44MzU5NCAzOS4zNjcyIDUuMDg1OTQgMzguNjAxNkM0LjMyMDMxIDM3LjgzNTkgMy45Mzc1IDM2Ljc4MTIgMy45Mzc1IDM1LjQzNzVWMzEuMjQyMkMzLjkzNzUgMzAuNzEwOSAzLjc0MjE5IDMwLjI1IDMuMzUxNTYgMjkuODU5NEMyLjk2MDk0IDI5LjQ2ODggMi41IDI5LjI3MzQgMS45Njg3NSAyOS4yNzM0QzEuNDM3NSAyOS4yNzM0IDAuOTc2NTYyIDI5LjQ2ODggMC41ODU5MzggMjkuODU5NEMwLjE5NTMxMiAzMC4yNSAwIDMwLjcxMDkgMCAzMS4yNDIyWk0zMS41OTM4IDMxLjgwNDdDMzIuNzgxMiAzMS44MDQ3IDMzLjY3MTkgMzEuNTE1NiAzNC4yNjU2IDMwLjkzNzVDMzQuODU5NCAzMC4zNDM4IDM1LjE1NjIgMjkuNDY4OCAzNS4xNTYyIDI4LjMxMjVWMTYuNzEwOUMzNS4xNTYyIDE1LjUzOTEgMzQuODU5NCAxNC42NjQxIDM0LjI2NTYgMTQuMDg1OUMzMy42NzE5IDEzLjQ5MjIgMzIuNzgxMiAxMy4xOTUzIDMxLjU5MzggMTMuMTk1M0gyOC44OTg0QzI4LjQ2MDkgMTMuMTk1MyAyOC4xNDg0IDEzLjE0MDYgMjcuOTYwOSAxMy4wMzEyQzI3Ljc1NzggMTIuOTIxOSAyNy41MjM0IDEyLjcyNjYgMjcuMjU3OCAxMi40NDUzTDI2LjM2NzIgMTEuNTA3OEMyNi4wODU5IDExLjE5NTMgMjUuNzgxMiAxMC45Njg4IDI1LjQ1MzEgMTAuODI4MUMyNS4xMDk0IDEwLjY3MTkgMjQuNjU2MiAxMC41OTM4IDI0LjA5MzggMTAuNTkzOEgxOS42MTcyQzE5LjA1NDcgMTAuNTkzOCAxOC42MDk0IDEwLjY3MTkgMTguMjgxMiAxMC44MjgxQzE3LjkzNzUgMTAuOTY4OCAxNy42MjUgMTEuMTk1MyAxNy4zNDM4IDExLjUwNzhMMTYuNDc2NiAxMi40NDUzQzE2LjIxMDkgMTIuNzQyMiAxNS45NzY2IDEyLjk0NTMgMTUuNzczNCAxMy4wNTQ3QzE1LjU1NDcgMTMuMTQ4NCAxNS4yMzQ0IDEzLjE5NTMgMTQuODEyNSAxMy4xOTUzSDEyLjA0NjlDMTAuODkwNiAxMy4xOTUzIDEwLjAxNTYgMTMuNDkyMiA5LjQyMTg4IDE0LjA4NTlDOC44MTI1IDE0LjY2NDEgOC41MDc4MSAxNS41MzkxIDguNTA3ODEgMTYuNzEwOVYyOC4zMTI1QzguNTA3ODEgMjkuNDY4OCA4LjgxMjUgMzAuMzQzOCA5LjQyMTg4IDMwLjkzNzVDMTAuMDE1NiAzMS41MTU2IDEwLjg5MDYgMzEuODA0NyAxMi4wNDY5IDMxLjgwNDdIMzEuNTkzOFpNMjEuNzk2OSAyOC45NDUzQzIwLjU5MzggMjguOTQ1MyAxOS41IDI4LjY2NDEgMTguNTE1NiAyOC4xMDE2QzE3LjUxNTYgMjcuNTIzNCAxNi43MjY2IDI2Ljc0MjIgMTYuMTQ4NCAyNS43NTc4QzE1LjU1NDcgMjQuNzU3OCAxNS4yNTc4IDIzLjYzMjggMTUuMjU3OCAyMi4zODI4QzE1LjI1NzggMjEuMTc5NyAxNS41NTQ3IDIwLjA4NTkgMTYuMTQ4NCAxOS4xMDE2QzE2LjcyNjYgMTguMTAxNiAxNy41MTU2IDE3LjMxMjUgMTguNTE1NiAxNi43MzQ0QzE5LjUgMTYuMTQwNiAyMC41OTM4IDE1Ljg0MzggMjEuNzk2OSAxNS44NDM4QzIzLjAxNTYgMTUuODQzOCAyNC4xMjUgMTYuMTQwNiAyNS4xMjUgMTYuNzM0NEMyNi4xMDk0IDE3LjMxMjUgMjYuODk4NCAxOC4xMDE2IDI3LjQ5MjIgMTkuMTAxNkMyOC4wNzAzIDIwLjA4NTkgMjguMzU5NCAyMS4xNzk3IDI4LjM1OTQgMjIuMzgyOEMyOC4zNTk0IDIzLjYxNzIgMjguMDcwMyAyNC43MjY2IDI3LjQ5MjIgMjUuNzEwOUMyNi44OTg0IDI2LjY5NTMgMjYuMTA5NCAyNy40ODQ0IDI1LjEyNSAyOC4wNzgxQzI0LjEyNSAyOC42NTYyIDIzLjAxNTYgMjguOTQ1MyAyMS43OTY5IDI4Ljk0NTNaTTIxLjgyMDMgMjYuOTA2MkMyMi42NDg0IDI2LjkwNjIgMjMuNDA2MiAyNi43MTA5IDI0LjA5MzggMjYuMzIwM0MyNC43ODEyIDI1LjkxNDEgMjUuMzI4MSAyNS4zNjcyIDI1LjczNDQgMjQuNjc5N0MyNi4xMjUgMjMuOTkyMiAyNi4zMjAzIDIzLjIyNjYgMjYuMzIwMyAyMi4zODI4QzI2LjMyMDMgMjEuNTcwMyAyNi4xMjUgMjAuODIwMyAyNS43MzQ0IDIwLjEzMjhDMjUuMzI4MSAxOS40NDUzIDI0Ljc4MTIgMTguOTA2MiAyNC4wOTM4IDE4LjUxNTZDMjMuNDA2MiAxOC4xMDk0IDIyLjY0ODQgMTcuOTA2MiAyMS44MjAzIDE3LjkwNjJDMjAuOTkyMiAxNy45MDYyIDIwLjI0MjIgMTguMTA5NCAxOS41NzAzIDE4LjUxNTZDMTguODgyOCAxOC45MDYyIDE4LjMzNTkgMTkuNDQ1MyAxNy45Mjk3IDIwLjEzMjhDMTcuNTIzNCAyMC44MjAzIDE3LjMyMDMgMjEuNTcwMyAxNy4zMjAzIDIyLjM4MjhDMTcuMzIwMyAyMy4yMjY2IDE3LjUyMzQgMjMuOTkyMiAxNy45Mjk3IDI0LjY3OTdDMTguMzM1OSAyNS4zNjcyIDE4Ljg4MjggMjUuOTE0MSAxOS41NzAzIDI2LjMyMDNDMjAuMjQyMiAyNi43MTA5IDIwLjk5MjIgMjYuOTA2MiAyMS44MjAzIDI2LjkwNjJaTTEyLjYzMjggMTguOTg0NEMxMi4yMTA5IDE4Ljk4NDQgMTEuODU5NCAxOC44MzU5IDExLjU3ODEgMTguNTM5MUMxMS4yODEyIDE4LjI0MjIgMTEuMTMyOCAxNy44OTA2IDExLjEzMjggMTcuNDg0NEMxMS4xMzI4IDE3LjA2MjUgMTEuMjgxMiAxNi43MTA5IDExLjU3ODEgMTYuNDI5N0MxMS44NTk0IDE2LjEzMjggMTIuMjEwOSAxNS45ODQ0IDEyLjYzMjggMTUuOTg0NEMxMy4wMzkxIDE1Ljk4NDQgMTMuMzkwNiAxNi4xMzI4IDEzLjY4NzUgMTYuNDI5N0MxMy45ODQ0IDE2LjcxMDkgMTQuMTMyOCAxNy4wNjI1IDE0LjEzMjggMTcuNDg0NEMxNC4xMzI4IDE3Ljg5MDYgMTMuOTg0NCAxOC4yNDIyIDEzLjY4NzUgMTguNTM5MUMxMy4zOTA2IDE4LjgzNTkgMTMuMDM5MSAxOC45ODQ0IDEyLjYzMjggMTguOTg0NFoifSl9KSxfND1KKCJzdmciLHt3aWR0aDoiMjEiLGhlaWdodDoiMjEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNoaWxkcmVuOltKKCJwYXRoIix7ZDoiTTEyIDVINmEyIDIgMCAwIDAtMiAydjMifSksSigicGF0aCIse2Q6Im05IDggMy0zLTMtMyJ9KSxKKCJwYXRoIix7ZDoiTTQgMTR2NGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC0yIn0pXX0pLGs0PWkxKGZ1bmN0aW9uKHtvbkNsaWNrOkssLi4uUX0sWCl7bGV0IFo9eDIoIkhvbWVCdXR0b24iKTtyZXR1cm4gSih2Mix7cmVmOlgsImFyaWEtbGFiZWwiOiJIb21lIixvbkNsaWNrOihZKT0+e2lmKEs/LihZKSxZLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKFouZGV2aWNlVHlwZT09PSJ3YXRjaCIpWi5leGVjKHo0KCkpO2Vsc2UgWi5leGVjKCJzZXJ2ZS1zaW0gYnV0dG9uIGhvbWUiKX0sLi4uUSxjaGlsZHJlbjpINH0pfSksTzQ9aTEoZnVuY3Rpb24oe29uQ2xpY2s6SywuLi5RfSxYKXtsZXQgWj14MigiU2NyZWVuc2hvdEJ1dHRvbiIpO3JldHVybiBKKHYyLHtyZWY6WCwiYXJpYS1sYWJlbCI6IlNjcmVlbnNob3QiLG9uQ2xpY2s6KFkpPT57aWYoSz8uKFkpLFkuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoWi5kZXZpY2VVZGlkKVouZXhlYyhgeGNydW4gc2ltY3RsIGlvICR7Wi5kZXZpY2VVZGlkfSBzY3JlZW5zaG90IH4vRGVza3RvcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC0kKGRhdGUgKyVzKS5wbmdgKX0sLi4uUSxjaGlsZHJlbjpBNH0pfSksRDQ9aTEoZnVuY3Rpb24oe29uQ2xpY2s6Syxmb3JjZURpc2FibGVkOlEsLi4uWH0sWil7bGV0IFk9eDIoIlJvdGF0ZUJ1dHRvbiIpLHE9WS5kZXZpY2VUeXBlPT09IndhdGNoInx8WS5kZXZpY2VUeXBlPT09InZpc2lvbiIsW0csQl09RCgicG9ydHJhaXQiKTtyZXR1cm4gSSgoKT0+e0IoWS5vcmllbnRhdGlvbj8/InBvcnRyYWl0Iil9LFtZLmRldmljZVVkaWQsWS5vcmllbnRhdGlvbl0pLEoodjIse3JlZjpaLCJhcmlhLWxhYmVsIjoiUm90YXRlIGRldmljZSIsZm9yY2VEaXNhYmxlZDpRfHxxLG9uQ2xpY2s6KFYpPT57aWYoSz8uKFYpLFYuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoIVkuZGV2aWNlVWRpZHx8cSlyZXR1cm47bGV0IEM9RjRbWS5vcmllbnRhdGlvbj8/R107aWYoQihDKSxZLm9uUm90YXRlKVkub25Sb3RhdGUoQyk7ZWxzZSBZLmV4ZWMoYHNlcnZlLXNpbSByb3RhdGUgJHtDfSAtZCAke1kuZGV2aWNlVWRpZH1gKX0sLi4uWCxjaGlsZHJlbjpfNH0pfSksRTE9VjQ7RTEuVGl0bGU9TjQ7RTEuQWN0aW9ucz1DNDtFMS5CdXR0b249djI7RTEuSG9tZUJ1dHRvbj1rNDtFMS5TY3JlZW5zaG90QnV0dG9uPU80O0UxLlJvdGF0ZUJ1dHRvbj1ENDt2YXIgZzI9KC4uLiQpPT4kLmZpbHRlcigoSyxRLFgpPT57cmV0dXJuIEJvb2xlYW4oSykmJksudHJpbSgpIT09IiImJlguaW5kZXhPZihLKT09PVF9KS5qb2luKCIgIikudHJpbSgpO3ZhciBIOD0oJCk9PiQucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpO3ZhciBBOD0oJCk9PiQucmVwbGFjZSgvXihbQS1aXSl8W1xzLV9dKyhcdykvZywoSyxRLFgpPT5YP1gudG9VcHBlckNhc2UoKTpRLnRvTG93ZXJDYXNlKCkpO3ZhciBJNT0oJCk9PntsZXQgSz1BOCgkKTtyZXR1cm4gSy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStLLnNsaWNlKDEpfTt2YXIgaDI9e3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6MjQsaGVpZ2h0OjI0LHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOjIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9O3ZhciBfOD0oJCk9Pntmb3IobGV0IEsgaW4gJClpZihLLnN0YXJ0c1dpdGgoImFyaWEtIil8fEs9PT0icm9sZSJ8fEs9PT0idGl0bGUiKXJldHVybiEwO3JldHVybiExfTt2YXIgTTQ9ZDEoe30pO3ZhciBrOD0oKT0+cjEoTTQpO3ZhciBPOD1pMSgoe2NvbG9yOiQsc2l6ZTpLLHN0cm9rZVdpZHRoOlEsYWJzb2x1dGVTdHJva2VXaWR0aDpYLGNsYXNzTmFtZTpaPSIiLGNoaWxkcmVuOlksaWNvbk5vZGU6cSwuLi5HfSxCKT0+e2xldHtzaXplOlY9MjQsc3Ryb2tlV2lkdGg6Qz0yLGFic29sdXRlU3Ryb2tlV2lkdGg6TD0hMSxjb2xvcjpGPSJjdXJyZW50Q29sb3IiLGNsYXNzTmFtZTpOPSIifT1rOCgpPz97fSxfPVg/P0w/TnVtYmVyKFE/P0MpKjI0L051bWJlcihLPz9WKTpRPz9DO3JldHVybiBSMSgic3ZnIix7cmVmOkIsLi4uaDIsd2lkdGg6Sz8/Vj8/aDIud2lkdGgsaGVpZ2h0Oks/P1Y/P2gyLmhlaWdodCxzdHJva2U6JD8/RixzdHJva2VXaWR0aDpfLGNsYXNzTmFtZTpnMigibHVjaWRlIixOLFopLC4uLiFZJiYhXzgoRykmJnsiYXJpYS1oaWRkZW4iOiJ0cnVlIn0sLi4uR30sWy4uLnEubWFwKChbeixVXSk9PlIxKHosVSkpLC4uLkFycmF5LmlzQXJyYXkoWSk/WTpbWV1dKX0pO3ZhciBHMT0oJCxLKT0+e2xldCBRPWkxKCh7Y2xhc3NOYW1lOlgsLi4uWn0sWSk9PlIxKE84LHtyZWY6WSxpY29uTm9kZTpLLGNsYXNzTmFtZTpnMihgbHVjaWRlLSR7SDgoSTUoJCkpfWAsYGx1Y2lkZS0keyR9YCxYKSwuLi5afSkpO3JldHVybiBRLmRpc3BsYXlOYW1lPUk1KCQpLFF9O3ZhciBXND1bWyJyZWN0Iix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix4OiIzIix5OiIzIixyeDoiMiIsa2V5OiJhZml0djcifV0sWyJwYXRoIix7ZDoiTTkgM3YxOCIsa2V5OiJmaDNocWEifV1dLHMxPUcxKCJwYW5lbC1sZWZ0IixXNCk7dmFyIFQ0PVtbInBhdGgiLHtkOiJNMTIuMDM0IDEyLjY4MWEuNDk4LjQ5OCAwIDAgMSAuNjQ3LS42NDdsOSAzLjVhLjUuNSAwIDAgMS0uMDMzLjk0M2wtMy40NDQgMS4wNjhhMSAxIDAgMCAwLS42Ni42NmwtMS4wNjcgMy40NDNhLjUuNSAwIDAgMS0uOTQzLjAzM3oiLGtleToieHduemlwIn1dLFsicGF0aCIse2Q6Ik0yMSAxMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNiIsa2V5OiIxNHJzdnEifV1dLEMwPUcxKCJzcXVhcmUtbW91c2UtcG9pbnRlciIsVDQpO3ZhciBQND1bWyJyZWN0Iix7eDoiMiIseToiNCIsd2lkdGg6IjIwIixoZWlnaHQ6IjE2IixyeDoiMiIsa2V5OiJpenhsYW8ifV0sWyJwYXRoIix7ZDoiTTEwIDR2NCIsa2V5OiJwcDh1ODAifV0sWyJwYXRoIix7ZDoiTTIgOGgyMCIsa2V5OiJkMTFjczcifV0sWyJwYXRoIix7ZDoiTTYgNHY0IixrZXk6IjFzdnRqdyJ9XV0saTA9RzEoImFwcC13aW5kb3ciLFA0KTt2YXIgdzQ9W1sicGF0aCIse2Q6Ik03IDdoMTB2MTAiLGtleToiMXRpdm45In1dLFsicGF0aCIse2Q6Ik03IDE3IDE3IDciLGtleToiMXZraXphIn1dXSxuMD1HMSgiYXJyb3ctdXAtcmlnaHQiLHc0KTt2YXIgRTQ9W1sicGF0aCIse2Q6Ik0yMCA2IDkgMTdsLTUtNSIsa2V5OiIxZ21mMmMifV1dLHMwPUcxKCJjaGVjayIsRTQpO3ZhciBJND1bWyJwYXRoIix7ZDoibTYgOSA2IDYgNi02IixrZXk6InFydW5zbCJ9XV0sdDA9RzEoImNoZXZyb24tZG93biIsSTQpO3ZhciB5ND1bWyJwYXRoIix7ZDoibTkgMTggNi02LTYtNiIsa2V5OiJtdGhod3EifV1dLGUwPUcxKCJjaGV2cm9uLXJpZ2h0Iix5NCk7dmFyIGI0PVtbInBhdGgiLHtkOiJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiIsa2V5OiJiMTloNXEifV0sWyJwYXRoIix7ZDoiTTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDIgMTh6IixrZXk6Img3aDVnZSJ9XV0sJDI9RzEoImZhc3QtZm9yd2FyZCIsYjQpO3ZhciBTND1bWyJwYXRoIix7ZDoibTMgNyA1IDUtNSA1VjciLGtleToiY291aGk3In1dLFsicGF0aCIse2Q6Im0yMSA3LTUgNSA1IDVWNyIsa2V5OiI2b3VpYTcifV0sWyJwYXRoIix7ZDoiTTEyIDIwdjIiLGtleToiMWxoMWtnIn1dLFsicGF0aCIse2Q6Ik0xMiAxNHYyIixrZXk6IjhqY3h1ZCJ9XSxbInBhdGgiLHtkOiJNMTIgOHYyIixrZXk6IjF3b3FpdiJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIixrZXk6InR1czAzbSJ9XV0sSzI9RzEoImZsaXAtaG9yaXpvbnRhbC0yIixTNCk7dmFyIFI0PVtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCIsa2V5OiIxbWdsYXkifV0sWyJwYXRoIix7ZDoiTTEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDAtMjAiLGtleToiMTNvMXpsIn1dLFsicGF0aCIse2Q6Ik0yIDEyaDIwIixrZXk6IjlpNHB1NCJ9XV0sUTI9RzEoImdsb2JlIixSNCk7dmFyIHg0PVtbInBhdGgiLHtkOiJtMjIgMTEtMS4yOTYtMS4yOTZhMi40IDIuNCAwIDAgMC0zLjQwOCAwTDExIDE2IixrZXk6IjlrenkzNSJ9XSxbInBhdGgiLHtkOiJNNCA4YTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxMGEyIDIgMCAwIDAgMi0yIixrZXk6IjF0MGYwdCJ9XSxbImNpcmNsZSIse2N4OiIxMyIsY3k6IjciLHI6IjEiLGZpbGw6ImN1cnJlbnRDb2xvciIsa2V5OiIxb2J1czYifV0sWyJyZWN0Iix7eDoiOCIseToiMiIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMiIsa2V5OiIxZ3ZoYnkifV1dLEoyPUcxKCJpbWFnZXMiLHg0KTt2YXIgdjQ9W1sicmVjdCIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIseDoiMyIseToiMyIscng6IjIiLGtleToiYWZpdHY3In1dLFsicGF0aCIse2Q6Ik0xNSAzdjE4IixrZXk6IjE0bnZwMCJ9XV0sWDI9RzEoInBhbmVsLXJpZ2h0Iix2NCk7dmFyIGc0PVtbInBhdGgiLHtkOiJNMyAxMmE5IDkgMCAxIDAgOS05IDkuNzUgOS43NSAwIDAgMC02Ljc0IDIuNzRMMyA4IixrZXk6IjEzNTdlMyJ9XSxbInBhdGgiLHtkOiJNMyAzdjVoNSIsa2V5OiIxeGhxOGEifV1dLFoyPUcxKCJyb3RhdGUtY2N3IixnNCk7dmFyIGg0PVtbInBhdGgiLHtkOiJtMjEgMjEtNC4zNC00LjM0IixrZXk6IjE0ajdyaiJ9XSxbImNpcmNsZSIse2N4OiIxMSIsY3k6IjExIixyOiI4IixrZXk6IjRlajk3dSJ9XV0sWTI9RzEoInNlYXJjaCIsaDQpO3ZhciBqND1bWyJwYXRoIix7ZDoiTTEyIDN2MTIiLGtleToiMXgwajVzIn1dLFsicGF0aCIse2Q6Im0xNyA4LTUtNS01IDUiLGtleToiN3E5N3I4In1dLFsicGF0aCIse2Q6Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00IixrZXk6ImloN24zaCJ9XV0scTI9RzEoInVwbG9hZCIsajQpO3ZhciBtND1bWyJwYXRoIix7ZDoiTTE4IDYgNiAxOCIsa2V5OiIxYmw1ZjgifV0sWyJwYXRoIix7ZDoibTYgNiAxMiAxMiIsa2V5OiJkOGJrNnYifV1dLHAxPUcxKCJ4IixtNCk7ZnVuY3Rpb24gRzIoe29wZW46JH0pe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNsYXNzTmFtZToibGVtLWNoZXZyb24gdGV4dC13aGl0ZS81MCIsc3R5bGU6e3RyYW5zZm9ybTokPyJyb3RhdGUoMTgwZGVnKSI6InJvdGF0ZSgwZGVnKSJ9LGNoaWxkcmVuOkooInBvbHlsaW5lIix7cG9pbnRzOiI2IDkgMTIgMTUgMTggOSJ9KX0pfWZ1bmN0aW9uIGoyKHtkaXI6JH0pe3JldHVybiBKKCJzdmciLHt3aWR0aDoiOSIsaGVpZ2h0OiI5Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2xhc3NOYW1lOiJtci1bM3B4XSIsY2hpbGRyZW46JD09PSJ1cCI/SigicG9seWdvbiIse3BvaW50czoiMTIsNCAyMCwxOCA0LDE4In0pOkooInBvbHlnb24iLHtwb2ludHM6IjQsNiAyMCw2IDEyLDIwIn0pfSl9ZnVuY3Rpb24gVjIoKXtyZXR1cm4gSigic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46SigicG9seWdvbiIse3BvaW50czoiNiw0IDIwLDEyIDYsMjAifSl9KX1mdW5jdGlvbiB5NSgpe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpbSigicmVjdCIse3g6IjYiLHk6IjQiLHdpZHRoOiI0IixoZWlnaHQ6IjE2In0pLEooInJlY3QiLHt4OiIxNCIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiMTYifSldfSl9ZnVuY3Rpb24gQjIoKXtyZXR1cm4gSigic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46SigicmVjdCIse3g6IjUiLHk6IjUiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxNCIscng6IjEuNSJ9KX0pfWZ1bmN0aW9uIGI1KCl7cmV0dXJuIEooJDIse3NpemU6MTIsc3Ryb2tlV2lkdGg6MiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pfWZ1bmN0aW9uIFM1KCl7cmV0dXJuIEooInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI0IDIgOSAxMyIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOkooInBhdGgiLHtkOiJNNi4wMDg1MiAxNC44MDU0QzUuODkxODEgMTQuOTM1IDUuNzU4MTUgMTQuOTk5OCA1LjYwNzU2IDE0Ljk5OThDNS40NTY5NiAxNS4wMDMzIDUuMzIzMyAxNC45NjEzIDUuMjA2NTkgMTQuODczN0M1LjA5MzY0IDE0Ljc4NjEgNS4wMjU4NyAxNC42NzIzIDUuMDAzMjggMTQuNTMyMkM0Ljk4NDQ2IDE0LjM5MjEgNS4wNDY1OCAxNC4yNDUgNS4xODk2NSAxNC4wOTA5TDYuOTQ1OTkgMTIuMTUyMkw3LjI0NTMgMTAuODc1NUw4LjE5OTcxIDExLjk4OTNMOC4wNTg1MyAxMi4zOTM5QzguMDIwODggMTIuNDk1NSA3Ljk4Njk5IDEyLjU3MDggNy45NTY4NyAxMi42MTk4QzcuOTMwNTIgMTIuNjY4OCA3Ljg3NDA0IDEyLjc0MDYgNy43ODc0NSAxMi44MzUyTDYuMDA4NTIgMTQuODA1NFpNMTAuMzQ1NyAxNC42NDI1TDkuMTAzMjkgMTIuMzA0NkM5LjA3Njk0IDEyLjI2MjUgOS4wNTQzNSAxMi4yMjIzIDkuMDM1NTMgMTIuMTgzN0M5LjAxNjcgMTIuMTQ1MiA4Ljk3NzE3IDEyLjA5MDkgOC45MTY5MyAxMi4wMjA5TDcuNzE5NjggMTAuNjE4MUM3LjQ5Mzc5IDEwLjM1NTQgNy4zMzc1NCAxMC4xMjk1IDcuMjUwOTUgOS45NDAzNEM3LjE2NDM1IDkuNzQ3NyA3LjEzNDI0IDkuNDk5MDEgNy4xNjA1OSA5LjE5NDI5TDcuMjYyMjQgNy45ODA2NUM3LjI2OTc3IDcuOTA3MSA3LjIzMjEyIDcuODU0NTYgNy4xNDkyOSA3LjgyMzA0QzcuMDY2NDcgNy43OTE1MSA2Ljk4NTUyIDcuODA5MDMgNi45MDY0NiA3Ljg3NTU3TDYuNDcxNjEgOC4yNDMzNEw2LjM0MTcyIDkuNjcyMzlDNi4zMjI4OSA5Ljg0NzUyIDYuMjY0NTQgOS45Nzg4NyA2LjE2NjY1IDEwLjA2NjRDNi4wNjg3NiAxMC4xNTQgNS45Mzg4NyAxMC4xOTI1IDUuNzc2OTggMTAuMTgyQzUuNjExMzIgMTAuMTc1IDUuNDgzMzEgMTAuMTE5IDUuMzkyOTUgMTAuMDEzOUM1LjMwNjM2IDkuOTA4ODIgNS4yNjg3MSA5Ljc3Mzk3IDUuMjgwMDEgOS42MDkzNUw1LjM4NzMxIDguMzA2MzlDNS40MDIzNyA4LjEyNzc2IDUuNDM4MTMgNy45NzU0IDUuNDk0NjEgNy44NDkzMUM1LjU1NDg1IDcuNzIzMjEgNS42NjAyNiA3LjU5MTg3IDUuODEwODYgNy40NTUyN0w2LjcxNDQ1IDYuNjI1MTZDNy4wMDQzNSA2LjM2MjQ3IDcuMjY5NzcgNi4xNjEwNyA3LjUxMDczIDYuMDIwOTZDNy43NTE2OCA1Ljg3NzM2IDguMDI4NDEgNS44MDU1NiA4LjM0MDkgNS44MDU1NkM4Ljc1ODggNS44MDU1NiA5LjA3ODgyIDUuOTMzNCA5LjMwMDk1IDYuMTg5MDlDOS41MjY4NSA2LjQ0NDc4IDkuNjI0NzQgNi43NjE3NiA5LjU5NDYyIDcuMTQwMDRMOS40NzYwMiA4LjczMTk1QzkuNDUzNDMgOS4wMTU2NiA5LjQxOTU1IDkuMjYyNTkgOS4zNzQzNyA5LjQ3Mjc1QzkuMzI5MTkgOS42ODI5IDkuMjUzODkgOS45Mjk4MyA5LjE0ODQ3IDEwLjIxMzVMOS4wOTIgMTAuMzYwNkw5Ljg2NTY5IDExLjM3OTlDOS45MjIxNyAxMS40NTM0IDkuOTgwNTIgMTEuNTM0IDEwLjA0MDggMTEuNjIxNkMxMC4xMDEgMTEuNzA5MSAxMC4xNTM3IDExLjc5NjcgMTAuMTk4OSAxMS44ODQzTDExLjQwNzQgMTQuMTY0NEMxMS41MDUzIDE0LjM1MDEgMTEuNTI0MSAxNC41MTEyIDExLjQ2MzkgMTQuNjQ3OEMxMS40MDM3IDE0Ljc4NDQgMTEuMzAyIDE0Ljg4MjUgMTEuMTU4OSAxNC45NDJDMTEuMDE5NiAxNS4wMDE1IDEwLjg3MDkgMTUuMDEwMyAxMC43MTI4IDE0Ljk2ODNDMTAuNTU4NCAxNC45MjYyIDEwLjQzNjEgMTQuODE3NyAxMC4zNDU3IDE0LjY0MjVaTTEyLjQwNyA3Ljk2NDg5QzEyLjU4NCA3Ljk2NDg5IDEyLjcyNyA4LjAxMDQyIDEyLjgzNjIgOC4xMDE0OUMxMi45NDU0IDguMTg5MDUgMTMgOC4zMDYzOSAxMyA4LjQ1MzVDMTMgOC42MTExMSAxMi45NDU0IDguNzMzNyAxMi44MzYyIDguODIxMjdDMTIuNzMwOCA4LjkwODgzIDEyLjU4NzcgOC45NTI2MSAxMi40MDcgOC45NTI2MUgxMS4xMzA3QzEwLjk1MzggOC45NTI2MSAxMC44MTQ1IDguOTM2ODUgMTAuNzEyOCA4LjkwNTMzQzEwLjYxMTIgOC44NzAzIDEwLjUxMzMgOC44MDcyNiAxMC40MTkxIDguNzE2MTlMMTAuMDUyMSA4LjM3OTk0TDEwLjE0MjQgNy4wNDAyMUwxMS4wMzQ3IDcuOTY0ODlIMTIuNDA3Wk05LjAwMTY0IDUuMzExNjlDOC43NzE5OCA1LjMxMTY5IDguNTYzMDMgNS4yNjA5MSA4LjM3NDc4IDUuMTU5MzNDOC4xODY1MyA1LjA1NDI2IDguMDM1OTQgNC45MTQxNSA3LjkyMjk5IDQuNzM5MDNDNy44MTM4MSA0LjU2MzkgNy43NTkyMSA0LjM2OTUgNy43NTkyMSA0LjE1NTg1QzcuNzU5MjEgMy45NDIxOSA3LjgxMzgxIDMuNzQ3OCA3LjkyMjk5IDMuNTcyNjdDOC4wMzU5NCAzLjM5NzU0IDguMTg2NTMgMy4yNTkxOSA4LjM3NDc4IDMuMTU3NjJDOC41NjMwMyAzLjA1MjU0IDguNzcxOTggMyA5LjAwMTY0IDNDOS4yMzEzIDMgOS40NDAyNiAzLjA1MjU0IDkuNjI4NSAzLjE1NzYyQzkuODE2NzUgMy4yNTkxOSA5Ljk2NTQ2IDMuMzk3NTQgMTAuMDc0NiAzLjU3MjY3QzEwLjE4NzYgMy43NDc4IDEwLjI0NDEgMy45NDIxOSAxMC4yNDQxIDQuMTU1ODVDMTAuMjQ0MSA0LjM2OTUgMTAuMTg3NiA0LjU2MzkgMTAuMDc0NiA0LjczOTAzQzkuOTY1NDYgNC45MTQxNSA5LjgxNjc1IDUuMDU0MjYgOS42Mjg1IDUuMTU5MzNDOS40NDAyNiA1LjI2MDkxIDkuMjMxMyA1LjMxMTY5IDkuMDAxNjQgNS4zMTE2OVoifSl9KX1mdW5jdGlvbiBSNSgpe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjI2IDEgMTIgMTQiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpKKCJwYXRoIix7ZDoiTTMzLjI0MzcgNC41ODQ1OUMzMy4wMDA4IDQuNTg0NTkgMzIuNzgxNyA0LjUyNzI4IDMyLjU4NjYgNC40MTI2OEMzMi4zOTE1IDQuMjk0MTIgMzIuMjM0MiA0LjEzODAxIDMyLjExNDcgMy45NDQzN0MzMS45OTkyIDMuNzQ2NzcgMzEuOTQxNCAzLjUyOTQxIDMxLjk0MTQgMy4yOTIyOUMzMS45NDE0IDMuMDUxMjIgMzEuOTk5MiAyLjgzMzg3IDMyLjExNDcgMi42NDAyMkMzMi4yMzQyIDIuNDQ2NTcgMzIuMzkxNSAyLjI5MjQ1IDMyLjU4NjYgMi4xNzc4NEMzMi43ODE3IDIuMDU5MjggMzMuMDAwOCAyIDMzLjI0MzcgMkMzMy40ODI2IDIgMzMuNjk5NyAyLjA1OTI4IDMzLjg5NDggMi4xNzc4NEMzNC4wOTM5IDIuMjkyNDUgMzQuMjUxMiAyLjQ0NjU3IDM0LjM2NjcgMi42NDAyMkMzNC40ODYyIDIuODMzODcgMzQuNTQ1OSAzLjA1MTIyIDM0LjU0NTkgMy4yOTIyOUMzNC41NDU5IDMuNTI5NDEgMzQuNDg2MiAzLjc0Njc3IDM0LjM2NjcgMy45NDQzN0MzNC4yNTEyIDQuMTM4MDEgMzQuMDkzOSA0LjI5NDEyIDMzLjg5NDggNC40MTI2OEMzMy42OTk3IDQuNTI3MjggMzMuNDgyNiA0LjU4NDU5IDMzLjI0MzcgNC41ODQ1OVpNMzEuMjAwNyA5Ljc0MTkxQzMxLjA3MzMgOS42NzA3NyAzMC45NDE5IDkuNTk1NjggMzAuODA2NSA5LjUxNjY0QzMwLjY3NSA5LjQzNzYgMzAuNTU5NiA5LjM0Mjc2IDMwLjQ2IDkuMjMyMUMzMC4zNjA0IDkuMTE3NDkgMzAuMjkyNyA4Ljk3NzIgMzAuMjU2OSA4LjgxMTIyQzMwLjIyNSA4LjY0MTI4IDMwLjI0NDkgOC40Mjk4NSAzMC4zMTY2IDguMTc2OTNMMzAuODA2NSA2LjQ4MTUzQzMwLjgzODMgNi4zNjY5MiAzMC44MTg0IDYuMjc5OTggMzAuNzQ2NyA2LjIyMDdDMzAuNjc5IDYuMTU3NDcgMzAuNTk3NCA2LjEyOTgxIDMwLjUwMTggNi4xMzc3MUwyOS42NTk1IDYuMTk2OTlMMjkuNDAyNyA3LjkyMjAyQzI5LjM3ODggOC4xMDc3NyAyOS4zMTUxIDguMjQ2MDkgMjkuMjExNSA4LjMzNjk4QzI5LjEwOCA4LjQyNzg4IDI4Ljk3MjYgOC40NjU0MiAyOC44MDUzIDguNDQ5NjFDMjguNjQyIDguNDMzOCAyOC41MTg2IDguMzY2NjIgMjguNDM0OSA4LjI0ODA2QzI4LjM1MTMgOC4xMjk1IDI4LjMyMTQgNy45NzczNSAyOC4zNDUzIDcuNzkxNjFMMjguNjI2MSA1LjY4MTI2QzI4LjY1IDUuNTExMzIgMjguNzE1NyA1LjM3NDk4IDI4LjgyMzIgNS4yNzIyM0MyOC45MzA4IDUuMTY5NDggMjkuMDY4MSA1LjExMjE3IDI5LjIzNTQgNS4xMDAzMkwzMS4zMzIxIDQuOTUyMTJDMzEuODgxNyA0LjkxMjYgMzIuMzM1NyA0Ljk2OTkgMzIuNjk0MSA1LjEyNDAzQzMzLjA1MjUgNS4yNzgxNiAzMy4zNjcxIDUuNTM4OTkgMzMuNjM3OSA1LjkwNjUyTDM0LjY3MTQgNy4zMjMzTDM2LjE3MDggNi42NjUzQzM2LjMzOCA2LjU5MDIxIDM2LjQ4OTMgNi41NzQ0IDM2LjYyNDggNi42MTc4N0MzNi43NjAyIDYuNjU3MzkgMzYuODY1NyA2Ljc1MjI0IDM2Ljk0MTQgNi45MDI0MkMzNy4wMTMgNy4wNTI1OSAzNy4wMTkgNy4xOTQ4NiAzNi45NTkzIDcuMzI5MjNDMzYuOTAzNSA3LjQ2MzYgMzYuNzkyIDcuNTY4MzIgMzYuNjI0OCA3LjY0MzQxTDM0LjczMTEgOC40NzkyNUMzNC42MDM3IDguNTM4NTMgMzQuNDc0MyA4LjU1MDM5IDM0LjM0MjggOC41MTQ4MkMzNC4yMTU0IDguNDc1MyAzNC4xMTM4IDguNDAwMjEgMzQuMDM4MiA4LjI4OTU2TDMzLjM4MTEgNy4zMzUxNkMzMy4zMTM0IDcuMjQwMzEgMzMuMjI5OCA3LjE5ODgxIDMzLjEzMDIgNy4yMTA2N0MzMy4wMzA2IDcuMjIyNTMgMzIuOTY0OSA3LjI4Mzc4IDMyLjkzMzEgNy4zOTQ0NEwzMi40OTEgOC45Mjk3OEwzNC43MzExIDEwLjM4ODFDMzQuODQyNiAxMC40NTkyIDM0LjkyMjMgMTAuNTU2IDM0Ljk3MDEgMTAuNjc4NUMzNS4wMTc5IDEwLjgwMSAzNS4wMjk4IDEwLjkyNTUgMzUuMDA1OSAxMS4wNTJDMzQuOTg2IDExLjE3NDUgMzQuOTI4MiAxMS4yNzUzIDM0LjgzMjcgMTEuMzU0M0wzMi43NzE4IDEzLjA5NzFDMzIuNjA4NSAxMy4yMzU0IDMyLjQ0NTIgMTMuMjk4NyAzMi4yODE5IDEzLjI4NjhDMzIuMTIyNiAxMy4yNzUgMzEuOTkzMiAxMy4yMTM3IDMxLjg5MzcgMTMuMTAzMUMzMS43OTgxIDEyLjk5NjQgMzEuNzU0MyAxMi44NjU5IDMxLjc2MjIgMTIuNzExOEMzMS43NzAyIDEyLjU1MzcgMzEuODUzOCAxMi40MDc1IDMyLjAxMzEgMTIuMjczMUwzMy40ODg2IDExLjAxNjRMMzEuMjAwNyA5Ljc0MTkxWk0yNy4yMDQ0IDE0Ljg2MzdDMjcuMDg0OSAxNC43NTcgMjcuMDE3MiAxNC42MTg2IDI3LjAwMTMgMTQuNDQ4N0MyNi45ODkzIDE0LjI3ODggMjcuMDYxIDE0LjExNjcgMjcuMjE2MyAxMy45NjI2TDI5LjIyMzUgMTEuOTc2N0wyOS45MzQzIDkuNDgxMDhDMzAuMDQxOCA5LjYxNTQ0IDMwLjE3NTMgOS43NDU4NiAzMC4zMzQ1IDkuODcyMzJDMzAuNDk3OCA5Ljk5NDgzIDMwLjY5MyAxMC4xMTczIDMwLjkyIDEwLjIzOTlMMzEuMTE3MSAxMC4zNDY2TDMwLjMwNDcgMTIuNDMzMkMzMC4yNTI5IDEyLjU1NTcgMzAuMjA5MSAxMi42NDA3IDMwLjE3MzMgMTIuNjg4MUMzMC4xNDE0IDEyLjczNTUgMzAuMDg1NiAxMi43OTg4IDMwLjAwNiAxMi44Nzc4TDI4LjA3MDYgMTQuNzgwN0MyNy45MTkyIDE0LjkyNjkgMjcuNzYzOSAxNSAyNy42MDQ2IDE1QzI3LjQ0OTMgMTUgMjcuMzE1OSAxNC45NTQ2IDI3LjIwNDQgMTQuODYzN1oifSl9KX1mdW5jdGlvbiB4NSgpe3JldHVybiBKKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjQ5IDMgMTYgMTIiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpKKCJwYXRoIix7ZDoiTTU3LjAwMjggMTEuOTQ5QzU2Ljg0OCAxMS45NDkgNTYuNzE3MiAxMS44OTg3IDU2LjYxMDMgMTEuNzk4QzU2LjUwMzUgMTEuNjkzOSA1Ni40NTAxIDExLjU3MDcgNTYuNDUwMSAxMS40Mjg0VjkuMDI4NjNMNTQuNDIxNiA3LjEwNzc2QzU0LjIyMjcgNi45MjAzNSA1NC4wOTU1IDYuNjk4MjUgNTQuMDQwMyA2LjQ0MTQ0QzUzLjk4NSA2LjE4MTE2IDU0LjAxMDggNS45Mjc4MiA1NC4xMTc2IDUuNjgxNDJDNTQuMjI4MiA1LjQzODQ5IDU0LjM5NzcgNS4yNDQxNCA1NC42MjYxIDUuMDk4MzlDNTQuODU4MyA0Ljk0OTE2IDU1LjExNjIgNC44NzQ1NCA1NS4zOTk5IDQuODc0NTRINTguMTEzN0M1OC40MjMyIDQuODc0NTQgNTguNjg0OCA0Ljk3NjkyIDU4Ljg5ODUgNS4xODE2OEM1OS4xMTU5IDUuMzgyOTYgNTkuMjI0NiA1LjYyOTM2IDU5LjIyNDYgNS45MjA4N1Y3Ljc2MzY2SDYwLjg5OTNDNjEuMDUwNCA3Ljc2MzY2IDYxLjE3OTQgNy44MTM5OSA2MS4yODYyIDcuOTE0NjNDNjEuMzkzMSA4LjAxNTI3IDYxLjQ0NjUgOC4xMzg0NyA2MS40NDY1IDguMjg0MjNDNjEuNDQ2NSA4LjQyNjUxIDYxLjM5MzEgOC41NDc5OCA2MS4yODYyIDguNjQ4NjJDNjEuMTc5NCA4Ljc0OTI2IDYxLjA1MDQgOC43OTk1OCA2MC44OTkzIDguNzk5NThINTguNjcxOUM1OC41MjA5IDguNzk5NTggNTguMzkwMSA4Ljc0OTI2IDU4LjI3OTUgOC42NDg2MkM1OC4xNzI3IDguNTQ3OTggNTguMTE5MiA4LjQyNjUxIDU4LjExOTIgOC4yODQyM1Y2Ljk4ODAzQzU4LjExOTIgNi45MTg2MiA1OC4wOTkgNi44NTQ0MiA1OC4wNTg0IDYuNzk1NDJDNTguMDE3OSA2LjczMjk1IDU3Ljk0NDIgNi43MDE3MiA1Ny44MzczIDYuNzAxNzJINTYuMDYzMkM1NS45OTMyIDYuNzAxNzIgNTUuOTQ1MyA2LjcyOTQ4IDU1LjkxOTUgNi43ODUwMUM1NS44OTc0IDYuODM3MDYgNTUuOTA4NCA2Ljg4NzM5IDU1Ljk1MjYgNi45MzU5N0w1Ny40MDA3IDguNDU2MDFDNTcuNTAzOSA4LjU2MzYgNTcuNTU1NSA4LjY4MTU5IDU3LjU1NTUgOC44MDk5OVYxMS40Mjg0QzU3LjU1NTUgMTEuNTcwNyA1Ny41MDAyIDExLjY5MzkgNTcuMzg5NyAxMS43OThDNTcuMjgyOCAxMS44OTg3IDU3LjE1MzggMTEuOTQ5IDU3LjAwMjggMTEuOTQ5Wk01My4wMDEyIDE0QzUyLjU4NDggMTQgNTIuMTk0MiAxMy45MjcxIDUxLjgyOTUgMTMuNzgxNEM1MS40Njg0IDEzLjYzNTYgNTEuMTQ5NiAxMy40MzI2IDUwLjg3MzMgMTMuMTcyM0M1MC42MDA2IDEyLjkxMiA1MC4zODY5IDEyLjYxMTggNTAuMjMyMSAxMi4yNzE3QzUwLjA3NzQgMTEuOTI4MiA1MCAxMS41NjAzIDUwIDExLjE2ODFDNTAgMTAuNzc2IDUwLjA3NzQgMTAuNDA5OSA1MC4yMzIxIDEwLjA2OThDNTAuMzg2OSA5LjcyNjE4IDUwLjYwMDYgOS40MjQyNiA1MC44NzMzIDkuMTYzOThDNTEuMTQ5NiA4LjkwMzcgNTEuNDY4NCA4LjcwMDY4IDUxLjgyOTUgOC41NTQ5MkM1Mi4xOTQyIDguNDA5MTYgNTIuNTg0OCA4LjMzNjI4IDUzLjAwMTIgOC4zMzYyOEM1My40MjEyIDguMzM2MjggNTMuODExOCA4LjQwOTE2IDU0LjE3MjkgOC41NTQ5MkM1NC41Mzc3IDguNzAwNjggNTQuODU2NCA4LjkwMzcgNTUuMTI5MSA5LjE2Mzk4QzU1LjQwNTQgOS40MjQyNiA1NS42MjEgOS43MjYxOCA1NS43NzU4IDEwLjA2OThDNTUuOTMwNSAxMC40MDk5IDU2LjAwNzkgMTAuNzc2IDU2LjAwNzkgMTEuMTY4MUM1Ni4wMDc5IDExLjU2MDMgNTUuOTMwNSAxMS45MjgyIDU1Ljc3NTggMTIuMjcxN0M1NS42MjEgMTIuNjExOCA1NS40MDU0IDEyLjkxMiA1NS4xMjkxIDEzLjE3MjNDNTQuODU2NCAxMy40MzI2IDU0LjUzNzcgMTMuNjM1NiA1NC4xNzI5IDEzLjc4MTRDNTMuODExOCAxMy45MjcxIDUzLjQyMTIgMTQgNTMuMDAxMiAxNFpNNTMuMDAxMiAxMy4yNjZDNTMuNDEwMiAxMy4yNjYgNTMuNzgyMyAxMy4xNzA2IDU0LjExNzYgMTIuOTc5N0M1NC40NTY2IDEyLjc5MjMgNTQuNzI1NiAxMi41NDA3IDU0LjkyNDYgMTIuMjI0OUM1NS4xMjczIDExLjkwNTYgNTUuMjI4NiAxMS41NTM0IDU1LjIyODYgMTEuMTY4MUM1NS4yMjg2IDEwLjc4MjkgNTUuMTI3MyAxMC40MzI0IDU0LjkyNDYgMTAuMTE2NkM1NC43MjU2IDkuNzk3MzMgNTQuNDU2NiA5LjU0Mzk5IDU0LjExNzYgOS4zNTY1OUM1My43ODIzIDkuMTY1NzEgNTMuNDEwMiA5LjA3MDI4IDUzLjAwMTIgOS4wNzAyOEM1Mi41OTU5IDkuMDcwMjggNTIuMjIzNyA5LjE2NTcxIDUxLjg4NDcgOS4zNTY1OUM1MS41NDk0IDkuNTQzOTkgNTEuMjgwNCA5Ljc5NzMzIDUxLjA3NzggMTAuMTE2NkM1MC44Nzg4IDEwLjQzMjQgNTAuNzc5MyAxMC43ODI5IDUwLjc3OTMgMTEuMTY4MUM1MC43NzkzIDExLjU1MzQgNTAuODc4OCAxMS45MDU2IDUxLjA3NzggMTIuMjI0OUM1MS4yODA0IDEyLjU0MDcgNTEuNTQ5NCAxMi43OTIzIDUxLjg4NDcgMTIuOTc5N0M1Mi4yMjM3IDEzLjE3MDYgNTIuNTk1OSAxMy4yNjYgNTMuMDAxMiAxMy4yNjZaTTYyLjQ4MDEgOS42MTE2NkM2Mi4zNjIyIDkuNTE0NDkgNjIuMzAxNCA5LjQxNTU4IDYyLjI5NzcgOS4zMTQ5NEM2Mi4yOTc3IDkuMjEwODMgNjIuMzMwOCA5LjEyNDA3IDYyLjM5NzIgOS4wNTQ2NkM2Mi40NjcyIDguOTg1MjUgNjIuNTUzOCA4Ljk0NTM0IDYyLjY1NjkgOC45MzQ5M0M2Mi43NjM4IDguOTIxMDUgNjIuODY4OCA4Ljk1NTc1IDYyLjk3MiA5LjAzOTA0QzYzLjI4ODkgOS4zMDI3OSA2My41Mzk0IDkuNjE2ODcgNjMuNzIzNiA5Ljk4MTI2QzYzLjkwNzkgMTAuMzQ1NyA2NCAxMC43NDEzIDY0IDExLjE2ODFDNjQgMTEuNTYwMyA2My45MjI2IDExLjkyODIgNjMuNzY3OSAxMi4yNzE3QzYzLjYxMzEgMTIuNjExOCA2My4zOTc2IDEyLjkxMiA2My4xMjEyIDEzLjE3MjNDNjIuODQ4NSAxMy40MzI2IDYyLjUyOTggMTMuNjM1NiA2Mi4xNjUgMTMuNzgxNEM2MS44MDM5IDEzLjkyNzEgNjEuNDE1MiAxNCA2MC45OTg4IDE0QzYwLjU4MjQgMTQgNjAuMTkxOSAxMy45MjcxIDU5LjgyNzEgMTMuNzgxNEM1OS40NjIzIDEzLjYzNTYgNTkuMTQxNyAxMy40MzI2IDU4Ljg2NTQgMTMuMTcyM0M1OC41OTI3IDEyLjkxMiA1OC4zNzkgMTIuNjExOCA1OC4yMjQyIDEyLjI3MTdDNTguMDY5NSAxMS45MjgyIDU3Ljk5MjEgMTEuNTYwMyA1Ny45OTIxIDExLjE2ODFDNTcuOTkyMSAxMC45NjM0IDU4LjAxNDIgMTAuNzY1NiA1OC4wNTg0IDEwLjU3NDdDNTguMTA2MyAxMC4zODA0IDU4LjE3MjcgMTAuMTkzIDU4LjI1NzQgMTAuMDEyNUM1OC4zMDkgOS45MDE0NCA1OC4zODA4IDkuODMwMyA1OC40NzMgOS43OTkwNkM1OC41Njg4IDkuNzY0MzYgNTguNjYyNyA5Ljc2NDM2IDU4Ljc1NDggOS43OTkwNkM1OC44NTA2IDkuODMwMyA1OC45MjI1IDkuODkyNzYgNTguOTcwNCA5Ljk4NjQ3QzU5LjAxODMgMTAuMDgwMiA1OS4wMTA5IDEwLjE5ODIgNTguOTQ4MyAxMC4zNDA0QzU4LjgzMDQgMTAuNjAwNyA1OC43NzE0IDEwLjg3NjYgNTguNzcxNCAxMS4xNjgxQzU4Ljc3MTQgMTEuNTUzNCA1OC44NzA5IDExLjkwNTYgNTkuMDY5OSAxMi4yMjQ5QzU5LjI3MjUgMTIuNTQwNyA1OS41NDE1IDEyLjc5MjMgNTkuODc2OCAxMi45Nzk3QzYwLjIxNTggMTMuMTcwNiA2MC41ODk4IDEzLjI2NiA2MC45OTg4IDEzLjI2NkM2MS40MDc4IDEzLjI2NiA2MS43OCAxMy4xNzA2IDYyLjExNTMgMTIuOTc5N0M2Mi40NTA2IDEyLjc5MjMgNjIuNzE3NyAxMi41NDA3IDYyLjkxNjcgMTIuMjI0OUM2My4xMTk0IDExLjkwNTYgNjMuMjIwNyAxMS41NTM0IDYzLjIyMDcgMTEuMTY4MUM2My4yMjA3IDEwLjg1OTMgNjMuMTUyNSAxMC41NzEyIDYzLjAxNjIgMTAuMzA0QzYyLjg4MzUgMTAuMDMzMyA2Mi43MDQ4IDkuODAyNTMgNjIuNDgwMSA5LjYxMTY2Wk02MC45OTg4IDYuMjc0ODZDNjAuNzc0IDYuMjc0ODYgNjAuNTY5NSA2LjIyNDU0IDYwLjM4NTMgNi4xMjM4OUM2MC4yMDExIDYuMDE5NzggNjAuMDUzNyA1Ljg4MjcgNTkuOTQzMiA1LjcxMjY1QzU5LjgzNjMgNS41MzkxMyA1OS43ODI5IDUuMzQ2NTIgNTkuNzgyOSA1LjEzNDgzQzU5Ljc4MjkgNC45MjY2IDU5LjgzNjMgNC43Mzc0NiA1OS45NDMyIDQuNTY3NDFDNjAuMDUzNyA0LjM5Mzg5IDYwLjIwMTEgNC4yNTY4MSA2MC4zODUzIDQuMTU2MTdDNjAuNTY5NSA0LjA1MjA2IDYwLjc3NCA0IDYwLjk5ODggNEM2MS4yMTk5IDQgNjEuNDIwNyA0LjA1MjA2IDYxLjYwMTMgNC4xNTYxN0M2MS43ODE4IDQuMjU2ODEgNjEuOTI1NSA0LjM5Mzg5IDYyLjAzMjQgNC41Njc0MUM2Mi4xNDI5IDQuNzM3NDYgNjIuMTk4MiA0LjkyNjYgNjIuMTk4MiA1LjEzNDgzQzYyLjE5ODIgNS4zNDY1MiA2Mi4xNDI5IDUuNTM5MTMgNjIuMDMyNCA1LjcxMjY1QzYxLjkyNTUgNS44ODI3IDYxLjc4MTggNi4wMTk3OCA2MS42MDEzIDYuMTIzODlDNjEuNDIwNyA2LjIyNDU0IDYxLjIxOTkgNi4yNzQ4NiA2MC45OTg4IDYuMjc0ODZaIn0pfSl9ZnVuY3Rpb24gdjUoKXtyZXR1cm4gSigic3ZnIix7d2lkdGg6IjE2IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI3MCA1IDE4IDkiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpKKCJwYXRoIix7ZDoiTTg1LjU3MiAxMi4xMDM4Qzg2LjA2IDEyLjEwMzggODYuNDIwNyAxMS45ODkyIDg2LjY1NDIgMTEuNzYwMUM4Ni44ODQ3IDExLjUyODEgODcgMTEuMTY0MSA4NyAxMC42NjgxVjEwLjExMTJDODcgOS43NjkwMSA4Ni45MjA3IDkuNDYzMDIgODYuNzYyIDkuMTkzMjlDODYuNjAzMyA4LjkyMDY1IDg2LjM3NTggOC42OTczMyA4Ni4wNzk0IDguNTIzMzFDODUuNzgwMSA4LjM0OTI5IDg1LjQyMjMgOC4yMzc2MiA4NS4wMDYyIDguMTg4MzJMODMuMDE2OCA3Ljk1MzM5TDgxLjE5ODEgNi44NDgzNUM4MC45MjI3IDYuNjgwMTMgODAuNjYwOCA2LjU0MjM3IDgwLjQxMjMgNi40MzUwNUM4MC4xNjA4IDYuMzI0ODQgNzkuODk3NCA2LjIzNzgzIDc5LjYyMTkgNi4xNzQwMkM3OS4zNDY1IDYuMTEwMjEgNzkuMDM4MiA2LjA2NTI2IDc4LjY5NjkgNi4wMzkxNUM3OC4zNTI2IDYuMDEzMDUgNzcuOTUxNCA2IDc3LjQ5MzQgNkg3Ni44MTA4Qzc2LjM4ODcgNiA3NS45OTUgNi4wNDkzMSA3NS42Mjk4IDYuMTQ3OTJDNzUuMjYxNiA2LjI0MzYzIDc0LjkxODggNi4zNzEyNSA3NC42MDE1IDYuNTMwNzZDNzQuMjgxMSA2LjY5MDI4IDczLjk4NjIgNi44NjU3NiA3My43MTY4IDcuMDU3MThDNzMuNDQ0NCA3LjI0ODYgNzMuMTk1OSA3LjQzNzEyIDcyLjk3MTQgNy42MjI3NUw3Mi4yNTc0IDcuODUzMzNDNzEuODMyMyA3Ljk4Njc0IDcxLjUxNjQgOC4xODM5NyA3MS4zMDk5IDguNDQ1QzcxLjEwMzMgOC43MDMxMyA3MSA5LjAzMzc3IDcxIDkuNDM2OTJWMTAuNjQyQzcxIDExLjE0NjcgNzEuMTE1MyAxMS41MTY1IDcxLjM0NTggMTEuNzUxNEM3MS41NzYzIDExLjk4NjMgNzEuOTM3IDEyLjEwMzggNzIuNDI4IDEyLjEwMzhINzIuNzE1NEM3Mi43MDA0IDEyLjAzNzEgNzIuNjg4NSAxMS45NzA0IDcyLjY3OTUgMTEuOTAzN0M3Mi42NzA1IDExLjgzNDEgNzIuNjY2IDExLjc2NDUgNzIuNjY2IDExLjY5NDhDNzIuNjY2IDExLjM1NTUgNzIuNzQ5OCAxMS4wNDk1IDcyLjkxNzUgMTAuNzc2OUM3My4wODUxIDEwLjUwNDIgNzMuMzExMiAxMC4yODgyIDczLjU5NTYgMTAuMTI4N0M3My44NzcgOS45NjYyMyA3NC4xOTI4IDkuODg1MDIgNzQuNTQzMSA5Ljg4NTAyQzc0Ljg5MDQgOS44ODUwMiA3NS4yMDYyIDkuOTY2MjMgNzUuNDkwNiAxMC4xMjg3Qzc1Ljc3MiAxMC4yODgyIDc1Ljk5NjUgMTAuNTA0MiA3Ni4xNjQyIDEwLjc3NjlDNzYuMzMxOCAxMS4wNDk1IDc2LjQxNTcgMTEuMzU1NSA3Ni40MTU3IDExLjY5NDhDNzYuNDE1NyAxMS43NjQ1IDc2LjQxMTIgMTEuODM0MSA3Ni40MDIyIDExLjkwMzdDNzYuMzkzMiAxMS45NzA0IDc2LjM4MjcgMTIuMDM3MSA3Ni4zNzA4IDEyLjEwMzhIODEuNjM4MkM4MS42MjAzIDEyLjAzNzEgODEuNjA4MyAxMS45NzA0IDgxLjYwMjMgMTEuOTAzN0M4MS41OTMzIDExLjgzNDEgODEuNTg4OCAxMS43NjQ1IDgxLjU4ODggMTEuNjk0OEM4MS41ODg4IDExLjM1NTUgODEuNjcyNyAxMS4wNDk1IDgxLjg0MDMgMTAuNzc2OUM4Mi4wMDUgMTAuNTA0MiA4Mi4yMjk1IDEwLjI4ODIgODIuNTEzOSAxMC4xMjg3QzgyLjc5NTMgOS45NjYyMyA4My4xMTExIDkuODg1MDIgODMuNDYxNCA5Ljg4NTAyQzgzLjgxMTcgOS44ODUwMiA4NC4xMjkgOS45NjYyMyA4NC40MTM0IDEwLjEyODdDODQuNjk0OCAxMC4yODgyIDg0LjkxOTQgMTAuNTA0MiA4NS4wODcgMTAuNzc2OUM4NS4yNTE3IDExLjA0OTUgODUuMzM0IDExLjM1NTUgODUuMzM0IDExLjY5NDhDODUuMzM0IDExLjc2NDUgODUuMzMxIDExLjgzNDEgODUuMzI1IDExLjkwMzdDODUuMzE2IDExLjk3MDQgODUuMzA0MSAxMi4wMzcxIDg1LjI4OTEgMTIuMTAzOEg4NS41NzJaTTgzLjQ2MTQgMTNDODMuNzEyOSAxMyA4My45NDA0IDEyLjk0MiA4NC4xNDQgMTIuODI2Qzg0LjM0NzYgMTIuNzEgODQuNTA5MiAxMi41NTMzIDg0LjYyOSAxMi4zNTYxQzg0Ljc0ODcgMTIuMTU4OSA4NC44MDg2IDExLjkzODUgODQuODA4NiAxMS42OTQ4Qzg0LjgwODYgMTEuNDUxMiA4NC43NDg3IDExLjIzMDggODQuNjI5IDExLjAzMzZDODQuNTA5MiAxMC44MzYzIDg0LjM0NzYgMTAuNjc5NyA4NC4xNDQgMTAuNTYzN0M4My45NDA0IDEwLjQ0NzcgODMuNzEyOSAxMC4zODk3IDgzLjQ2MTQgMTAuMzg5N0M4My4yMDY5IDEwLjM4OTcgODIuOTc3OSAxMC40NDc3IDgyLjc3NDMgMTAuNTYzN0M4Mi41NzA4IDEwLjY3OTcgODIuNDA5MSAxMC44MzYzIDgyLjI4OTQgMTEuMDMzNkM4Mi4xNjk2IDExLjIzMDggODIuMTA5NyAxMS40NTEyIDgyLjEwOTcgMTEuNjk0OEM4Mi4xMDk3IDExLjkzODUgODIuMTY5NiAxMi4xNTg5IDgyLjI4OTQgMTIuMzU2MUM4Mi40MDkxIDEyLjU1MzMgODIuNTcwOCAxMi43MSA4Mi43NzQzIDEyLjgyNkM4Mi45Nzc5IDEyLjk0MiA4My4yMDY5IDEzIDgzLjQ2MTQgMTNaTTc0LjU0MzEgMTNDNzQuNzk0NiAxMyA3NS4wMjIxIDEyLjk0MiA3NS4yMjU3IDEyLjgyNkM3NS40MjkyIDEyLjcxIDc1LjU5MDkgMTIuNTUzMyA3NS43MTA2IDEyLjM1NjFDNzUuODMwNCAxMi4xNTg5IDc1Ljg5MDMgMTEuOTM4NSA3NS44OTAzIDExLjY5NDhDNzUuODkwMyAxMS40NTEyIDc1LjgzMDQgMTEuMjMwOCA3NS43MTA2IDExLjAzMzZDNzUuNTkwOSAxMC44MzYzIDc1LjQyOTIgMTAuNjc5NyA3NS4yMjU3IDEwLjU2MzdDNzUuMDIyMSAxMC40NDc3IDc0Ljc5NDYgMTAuMzg5NyA3NC41NDMxIDEwLjM4OTdDNzQuMjg4NiAxMC4zODk3IDc0LjA1OTYgMTAuNDQ3NyA3My44NTYgMTAuNTYzN0M3My42NTI0IDEwLjY3OTcgNzMuNDkwOCAxMC44MzYzIDczLjM3MSAxMS4wMzM2QzczLjI1MTMgMTEuMjMwOCA3My4xOTE0IDExLjQ1MTIgNzMuMTkxNCAxMS42OTQ4QzczLjE5MTQgMTEuOTM4NSA3My4yNTEzIDEyLjE1ODkgNzMuMzcxIDEyLjM1NjFDNzMuNDkwOCAxMi41NTMzIDczLjY1MjQgMTIuNzEgNzMuODU2IDEyLjgyNkM3NC4wNTk2IDEyLjk0MiA3NC4yODg2IDEzIDc0LjU0MzEgMTNaIn0pfSl9ZnVuY3Rpb24gQTAoe3NpemU6JD0xOCxzdHJva2VXaWR0aDpLPTJ9KXtyZXR1cm4gSihaMix7c2l6ZTokLHN0cm9rZVdpZHRoOkt9KX12YXIgRDg9IkFjY2Vzc2liaWxpdHkgdW5hdmFpbGFibGUgb24gdGhpcyBzaW11bGF0b3IuIjtmdW5jdGlvbiBtMigkKXtyZXR1cm4gJD8uZXJyb3JzPy5pbmNsdWRlcyhEOCk/PyExfWZ1bmN0aW9uIGYyKCQsSyl7aWYoJD09PUspcmV0dXJuITA7aWYoJC5pZCE9PUsuaWR8fCQucGF0aCE9PUsucGF0aHx8JC5sYWJlbCE9PUsubGFiZWx8fCQudmFsdWUhPT1LLnZhbHVlfHwkLnJvbGUhPT1LLnJvbGV8fCQudHlwZSE9PUsudHlwZXx8JC5lbmFibGVkIT09Sy5lbmFibGVkKXJldHVybiExO2xldCBRPSQuZnJhbWUsWD1LLmZyYW1lO3JldHVybiBRPT09WHx8US54PT09WC54JiZRLnk9PT1YLnkmJlEud2lkdGg9PT1YLndpZHRoJiZRLmhlaWdodD09PVguaGVpZ2h0fWZ1bmN0aW9uIHAyKCQsSyl7bGV0IFE9JC5sYWJlbHx8JC5yb2xlfHxgZWxlbWVudCAke0srMX1gLFg9JC5yb2xlfHwkLnR5cGU7cmV0dXJue2lkOiQuaWQscGF0aDokLnBhdGgsbGFiZWw6USx2YWx1ZTokLnZhbHVlLHJvbGU6WCx0eXBlOiQudHlwZSxlbmFibGVkOiQuZW5hYmxlZCxmcmFtZTokLmZyYW1lfX1mdW5jdGlvbiBNOCgkLEspe2xldCBRPU1hdGgubWF4KDAsJC54KSxYPU1hdGgubWF4KDAsJC55KSxaPU1hdGgubWluKEsud2lkdGgsJC54KyQud2lkdGgpLFk9TWF0aC5taW4oSy5oZWlnaHQsJC55KyQuaGVpZ2h0KSxxPU1hdGgubWF4KDAsWi1RKSxHPU1hdGgubWF4KDAsWS1YKTtyZXR1cm4gcT4wJiZHPjA/e3g6USx5Olgsd2lkdGg6cSxoZWlnaHQ6R306bnVsbH1mdW5jdGlvbiBfMCgkKXtyZXR1cm4gJC5pZH1mdW5jdGlvbiBnNSgkKXtyZXR1cm5gJHskLnh9LCR7JC55fSAkeyQud2lkdGh9eCR7JC5oZWlnaHR9YH1mdW5jdGlvbiBXOCgkKXtyZXR1cm5bYEFYIGxhYmVsOiAkeyQubGFiZWx8fCJVbmxhYmVsZWQifWAsJC5yb2xlP2Byb2xlOiAkeyQucm9sZX1gOiIiLCQudHlwZT9gdHlwZTogJHskLnR5cGV9YDoiIiwkLnZhbHVlP2B2YWx1ZTogJHskLnZhbHVlfWA6IiIsJC5pZD9gaWQ6ICR7JC5pZH1gOiIiLGBwYXRoOiAkeyQucGF0aH1gLGBmcmFtZTogJHtnNSgkLmZyYW1lKX1gXS5maWx0ZXIoQm9vbGVhbikuam9pbigiOyAiKX1mdW5jdGlvbiB1MigkKXtyZXR1cm4gJCYmdHlwZW9mICQuZGV2aWNlPT09InN0cmluZyImJnR5cGVvZiAkLnVybD09PSJzdHJpbmciPyQ6bnVsbH1mdW5jdGlvbiBnMSgkKXtsZXQgUT13aW5kb3cuX19TSU1fUFJFVklFV19fPy5iYXNlUGF0aD8/KHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cLyskLywiIil8fCIvIik7cmV0dXJuIFE9PT0iLyI/YC8keyR9YDpgJHtRfS8keyR9YH12YXIgZjQ9NTAwMCxwND0yMDAwLE4yPW51bGwsaDU9bnVsbCx1ND0xLGw0PTEsdjA9bmV3IE1hcCx4MD1uZXcgTWFwO2Z1bmN0aW9uIGQ0KCl7bGV0ICQ9bmV3IFVSTChnMSgiZXhlYy13cyIpLHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtyZXR1cm4gJC5wcm90b2NvbD0kLnByb3RvY29sPT09Imh0dHBzOiI/IndzczoiOiJ3czoiLCQudG9TdHJpbmcoKX1mdW5jdGlvbiBjNCgkKXtmb3IobGV0IEsgb2YgdjAudmFsdWVzKCkpSy5yZWplY3QoJCk7djAuY2xlYXIoKX1mdW5jdGlvbiBUOCgpe3JldHVybiBOMj8/PW5ldyBQcm9taXNlKCgkLEspPT57bGV0IFE9ITEsWDt0cnl7WD1uZXcgV2ViU29ja2V0KGQ0KCkpfWNhdGNoKHEpe04yPW51bGwsSyhxKTtyZXR1cm59bGV0IFo9c2V0VGltZW91dCgoKT0+e2lmKCFRKVE9ITAsTjI9bnVsbCxLKEVycm9yKCJjb250cm9sIHNvY2tldCBjb25uZWN0IHRpbWVvdXQiKSksWC5jbG9zZSgpfSxmNCk7WC5vbm9wZW49KCk9PntYLnNlbmQoSlNPTi5zdHJpbmdpZnkoe3Rva2VuOndpbmRvdy5fX1NJTV9QUkVWSUVXX18/LmV4ZWNUb2tlbj8/IiJ9KSl9LFgub25tZXNzYWdlPShxKT0+e2xldCBHO3RyeXtHPUpTT04ucGFyc2UoU3RyaW5nKHEuZGF0YSkpfWNhdGNoe3JldHVybn1pZihHLnJlYWR5KXtpZighUSlRPSEwLGNsZWFyVGltZW91dChaKSxoNT1YLCQoWCk7cmV0dXJufWlmKHR5cGVvZiBHLnN1Yj09PSJudW1iZXIiKXtsZXQgVj14MC5nZXQoRy5zdWIpO2lmKCFWKXJldHVybjtpZihHLmVuZCl4MC5kZWxldGUoRy5zdWIpLFYub25FbmQoKTtlbHNlIGlmKHR5cGVvZiBHLmRhdGE9PT0ic3RyaW5nIilWLm9uRGF0YShHLmRhdGEpO3JldHVybn1pZih0eXBlb2YgRy5pZCE9PSJudW1iZXIiKXJldHVybjtsZXQgQj12MC5nZXQoRy5pZCk7aWYoIUIpcmV0dXJuO3YwLmRlbGV0ZShHLmlkKSxCLnJlc29sdmUoRyl9O2xldCBZPSgpPT57TjI9bnVsbCxoNT1udWxsO2xldCBxPUVycm9yKCJjb250cm9sIHNvY2tldCBjbG9zZWQg4oCUIHJlbG9hZCB0aGUgcGFnZSBpZiB0aGlzIHBlcnNpc3RzIik7YzQocSk7bGV0IEc9Wy4uLngwLnZhbHVlcygpXTt4MC5jbGVhcigpO2ZvcihsZXQgQiBvZiBHKUIub25FbmQoKTtpZighUSlRPSEwLGNsZWFyVGltZW91dChaKSxLKHEpfTtYLm9uZXJyb3I9WSxYLm9uY2xvc2U9WX0pLE4yfWFzeW5jIGZ1bmN0aW9uIFA4KCQsSyl7bGV0IFE9YXdhaXQgVDgoKTtpZihRLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTil0aHJvdyBFcnJvcigiY29udHJvbCBzb2NrZXQgbm90IG9wZW4iKTtyZXR1cm4gbmV3IFByb21pc2UoKFgsWik9PntsZXQgWT11NCsrLHE9KCk9Pnt2MC5kZWxldGUoWSksWihLPy5yZWFzb24/P25ldyBET01FeGNlcHRpb24oIkFib3J0ZWQiLCJBYm9ydEVycm9yIikpfTtpZihLKXtpZihLLmFib3J0ZWQpe3EoKTtyZXR1cm59Sy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIscSx7b25jZTohMH0pfXYwLnNldChZLHtyZXNvbHZlOihHKT0+e0s/LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixxKSxYKEcpfSxyZWplY3Q6KEcpPT57Sz8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHEpLFooRyl9fSksUS5zZW5kKEpTT04uc3RyaW5naWZ5KHtpZDpZLC4uLiR9KSl9KX1hc3luYyBmdW5jdGlvbiBDMSgkLEspe2xldCBRPWF3YWl0IFA4KHtjb21tYW5kOiR9LEs/LnNpZ25hbCk7cmV0dXJue3N0ZG91dDpRLnN0ZG91dD8/IiIsc3RkZXJyOlEuc3RkZXJyPz8iIixleGl0Q29kZTpRLmV4aXRDb2RlPz8xfX1hc3luYyBmdW5jdGlvbiBqNSgkLEspe2xldCBRPWF3YWl0IFA4KHt1aTokfSxLPy5zaWduYWwpO2lmKFEuZXJyb3IpdGhyb3cgRXJyb3IoUS5lcnJvcik7cmV0dXJuIFEuc3RhdHVzPz9udWxsfWZ1bmN0aW9uIEwyKCQpe2xldCBLPXtvbm1lc3NhZ2U6bnVsbCxvbmVycm9yOm51bGwsY2xvc2U6KCk9Pnt9fSxRPSExLFg9bnVsbCxaPW51bGwsWT0iIixxPShWKT0+e1krPVYucmVwbGFjZSgvXHJcbi9nLGAKYCk7bGV0IEM7d2hpbGUoKEM9WS5pbmRleE9mKGAKCmApKSE9PS0xKXtsZXQgTD1ZLnNsaWNlKDAsQyk7WT1ZLnNsaWNlKEMrMik7bGV0IEY9TC5zcGxpdChgCmApLmZpbHRlcigoTik9Pk4uc3RhcnRzV2l0aCgiZGF0YToiKSkubWFwKChOKT0+Ti5zbGljZSg1KS5yZXBsYWNlKC9eIC8sIiIpKS5qb2luKGAKYCk7aWYoRilLLm9ubWVzc2FnZT8uKHtkYXRhOkZ9KX19LEc9KCk9PntpZihRfHxaKXJldHVybjtLLm9uZXJyb3I/LigpLFo9c2V0VGltZW91dCgoKT0+e1o9bnVsbCxCKCl9LHA0KX0sQj1hc3luYygpPT57aWYoUSlyZXR1cm47dHJ5e2xldCBWPWF3YWl0IFQ4KCk7aWYoUSlyZXR1cm47WT0iIixYPWw0KysseDAuc2V0KFgse29uRGF0YTpxLG9uRW5kOkd9KSxWLnNlbmQoSlNPTi5zdHJpbmdpZnkoe3N1YjpYLHBhdGg6JH0pKX1jYXRjaHtHKCl9fTtyZXR1cm4gQigpLEsuY2xvc2U9KCk9PntpZihRPSEwLFopY2xlYXJUaW1lb3V0KFopO2lmKFghPT1udWxsKXt4MC5kZWxldGUoWCk7dHJ5e2g1Py5zZW5kKEpTT04uc3RyaW5naWZ5KHt1bnN1YjpYfSkpfWNhdGNoe31YPW51bGx9fSxLfWZ1bmN0aW9uIFoxKCQpe3JldHVybmAnJHskLnJlcGxhY2UoLycvZywiJ1xcJyciKX0nYH1mdW5jdGlvbiB3OCgkKXtsZXRbSyxRXT1EKG51bGwpLFtYLFpdPUQoIkFYIG9mZiIpO3JldHVybiBJKCgpPT57aWYoISQpe1EobnVsbCksWigiQVggb2ZmIik7cmV0dXJufVEobnVsbCksWigiQVggd2FpdGluZyIpO2xldCBZPUwyKCQpO3JldHVybiBZLm9ubWVzc2FnZT0ocSk9Pnt0cnl7bGV0IEc9SlNPTi5wYXJzZShxLmRhdGEpO1EoRyksWihtMihHKT8iQVggdW5hdmFpbGFibGUiOmAke0cuZWxlbWVudHMubGVuZ3RofSBBWCBlbGVtZW50c2ApfWNhdGNoe1ooIkFYIHBhcnNlIGVycm9yIil9fSxZLm9uZXJyb3I9KCk9PntaKCJBWCByZWNvbm5lY3RpbmciKX0sKCk9PlkuY2xvc2UoKX0sWyRdKSx7c25hcHNob3Q6SyxzdGF0dXM6WH19dmFyIG01PWQxKHtzbmFwc2hvdDpudWxsLHN0YXR1czoiQVggb2ZmIn0pLGY1PWQxKG51bGwpO2Z1bmN0aW9uIGcwKCl7cmV0dXJuIHIxKG01KX1mdW5jdGlvbiBsMigpe2xldCAkPXIxKGY1KTtpZighJCl0aHJvdyBFcnJvcigiQVggc2VsZWN0aW9uIGNvbnRleHQgaXMgdW5hdmFpbGFibGUiKTtyZXR1cm4gJH12YXIgRTg9RTAoZnVuY3Rpb24oe2VsZW1lbnQ6SyxpbmRleDpRLHNjcmVlbjpYLGhpZ2hsaWdodGVkOlosc2VsZWN0ZWQ6WSxvbkhpZ2hsaWdodDpxLG9uU2VsZWN0Okd9KXtsZXQgQj1fMChLKSxWPXAyKEssUSksQz1NOChLLmZyYW1lLFgpO2lmKCFDKXJldHVybiBudWxsO2xldCBMPVc4KFYpO3JldHVybiBKKCJidXR0b24iLHt0eXBlOiJidXR0b24iLCJkYXRhLWF4LWtleSI6QiwiZGF0YS1heC1pZCI6Vi5pZCwiZGF0YS1heC1wYXRoIjpWLnBhdGgsImRhdGEtYXgtbGFiZWwiOlYubGFiZWwsImRhdGEtYXgtdmFsdWUiOlYudmFsdWUsImRhdGEtYXgtcm9sZSI6Vi5yb2xlLCJkYXRhLWF4LXR5cGUiOlYudHlwZSwiZGF0YS1heC1lbmFibGVkIjpTdHJpbmcoVi5lbmFibGVkKSwiZGF0YS1heC1mcmFtZSI6ZzUoVi5mcmFtZSksImRhdGEtYXgtc2VsZWN0ZWQiOlN0cmluZyhZKSwiYXJpYS1sYWJlbCI6Sy5sYWJlbHx8TCx0aXRsZTpMLG9uQ2xpY2s6KCk9PkcoQiksb25Nb3VzZUVudGVyOigpPT5xKEIpLG9uTW91c2VMZWF2ZTooKT0+cShudWxsKSxjbGFzc05hbWU6ImFic29sdXRlIGJveC1ib3JkZXIgbWluLXctcHggbWluLWgtcHggcC0wIHJvdW5kZWQtWzNweF0gYm9yZGVyIGN1cnNvci1wb2ludGVyIHBvaW50ZXItZXZlbnRzLWF1dG8iLHN0eWxlOntsZWZ0OmAke0MueC9YLndpZHRoKjEwMH0lYCx0b3A6YCR7Qy55L1guaGVpZ2h0KjEwMH0lYCx3aWR0aDpgJHtDLndpZHRoL1gud2lkdGgqMTAwfSVgLGhlaWdodDpgJHtDLmhlaWdodC9YLmhlaWdodCoxMDB9JWAsYm9yZGVyQ29sb3I6WT8iIzYwYTVmYSI6Wj8iI2ZiYmYyNCI6IiMzNGQzOTkiLGJhY2tncm91bmQ6WT8icmdiYSg5NiwxNjUsMjUwLDAuMjQpIjpaPyJyZ2JhKDI0NSwxNTgsMTEsMC4yOCkiOiJyZ2JhKDE2LDE4NSwxMjksMC4xMikifX0pfSwoJCxLKT0+JC5pbmRleD09PUsuaW5kZXgmJiQuaGlnaGxpZ2h0ZWQ9PT1LLmhpZ2hsaWdodGVkJiYkLnNlbGVjdGVkPT09Sy5zZWxlY3RlZCYmJC5vbkhpZ2hsaWdodD09PUsub25IaWdobGlnaHQmJiQub25TZWxlY3Q9PT1LLm9uU2VsZWN0JiYkLnNjcmVlbi53aWR0aD09PUsuc2NyZWVuLndpZHRoJiYkLnNjcmVlbi5oZWlnaHQ9PT1LLnNjcmVlbi5oZWlnaHQmJmYyKCQuZWxlbWVudCxLLmVsZW1lbnQpKTtmdW5jdGlvbiBJOCgpe2xldHtzbmFwc2hvdDokfT1nMCgpLHtoaWdobGlnaHRlZEtleTpLLHNlbGVjdGVkS2V5OlEsc2V0SGlnaGxpZ2h0ZWRLZXk6WCxzZXRTZWxlY3RlZEtleTpafT1sMigpO2lmKCEkPy5zY3JlZW4ud2lkdGh8fCEkPy5zY3JlZW4uaGVpZ2h0KXJldHVybiBudWxsO3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgei0xMCBvdmVyZmxvdy1oaWRkZW4gcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46JC5lbGVtZW50cy5tYXAoKFkscSk9PntsZXQgRz1fMChZKTtyZXR1cm4gSihFOCx7ZWxlbWVudDpZLGluZGV4OnEsc2NyZWVuOiQuc2NyZWVuLGhpZ2hsaWdodGVkOkc9PT1LLHNlbGVjdGVkOkc9PT1RLG9uSGlnaGxpZ2h0Olgsb25TZWxlY3Q6Wn0sRyl9KX0pfWZ1bmN0aW9uIHk4KHtlbmRwb2ludDokLGNoaWxkcmVuOkt9KXtsZXR7c25hcHNob3Q6USxzdGF0dXM6WH09dzgoJCksW1osWV09RChudWxsKSxbcSxHXT1EKG51bGwpO0koKCk9PntpZighJClZKG51bGwpLEcobnVsbCl9LFskXSk7bGV0IEI9TzEoKCk9Pih7c25hcHNob3Q6USxzdGF0dXM6WH0pLFtRLFhdKSxWPU8xKCgpPT4oe2hpZ2hsaWdodGVkS2V5Olosc2VsZWN0ZWRLZXk6cSxzZXRIaWdobGlnaHRlZEtleTpZLHNldFNlbGVjdGVkS2V5Okd9KSxbWixxXSk7cmV0dXJuIEoobTUse3ZhbHVlOkIsY2hpbGRyZW46SihmNSx7dmFsdWU6VixjaGlsZHJlbjpLfSl9KX1mdW5jdGlvbiBiOCh7b3ZlcmxheUVuYWJsZWQ6JCxzdHJlYW1pbmc6SyxvblRvZ2dsZU92ZXJsYXk6UX0pe2xldHtzdGF0dXM6WH09ZzAoKSxbWixZXT1EKCExKSxxPSQmJks7cmV0dXJuIEooRTEuQnV0dG9uLHsiYXJpYS1sYWJlbCI6JD8iSGlkZSBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiOiJTaG93IGFjY2Vzc2liaWxpdHkgb3ZlcmxheSIsImFyaWEtcHJlc3NlZCI6JCx0aXRsZTpYLG9uQ2xpY2s6USxvbk1vdXNlRW50ZXI6KCk9PlkoITApLG9uTW91c2VMZWF2ZTooKT0+WSghMSksc3R5bGU6cT97YmFja2dyb3VuZDpaPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIjoicmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC45NSkifTp2b2lkIDAsY2hpbGRyZW46SihDMCx7c2l6ZToxOSxzdHJva2VXaWR0aDoyfSl9KX1mdW5jdGlvbiBTOCgkKXtpZighTnVtYmVyLmlzRmluaXRlKCQpfHwkPD0wKXJldHVybiIwIEIiO2xldCBLPSQvMTA3Mzc0MTgyNDtpZihLPj0xKXJldHVybmAke0sudG9GaXhlZChLPj0xMD8wOjEpfSBHQmA7cmV0dXJuYCR7KCQvMTA0ODU3NikudG9GaXhlZCgwKX0gTUJgfWZ1bmN0aW9uIGQyKCQpe2xldCBLPSQubWF0Y2goL14oW2EtekEtWl0rKS0oLispJC8pO2lmKCFLKXJldHVybntvczokLHZlcnNpb246IiJ9O3JldHVybntvczpLWzFdLHZlcnNpb246S1syXS5yZXBsYWNlKC8tL2csIi4iKX19ZnVuY3Rpb24gUjgoJCl7cmV0dXJuIGQyKCQpLnZlcnNpb258fCR9ZnVuY3Rpb24gYzIoJCl7bGV0e29zOkssdmVyc2lvbjpRfT1kMigkKTtyZXR1cm4gUT9gJHtLfSAke1F9YDpLfWZ1bmN0aW9uIHg4KHtuYW1lOiQscnVudGltZTpLLGNocm9tZTpRLHBsYWNlaG9sZGVyQXNzZXQ6WCxidXN5OlosYnVzeUxhYmVsOlk9IlN0YXJ0aW5n4oCmIixlcnJvcjpxLG9uU3RhcnQ6R30pe2xldCBCPW4xKCQpLFY9QTFbQl0sQz1YPz9udWxsLEw9Qz9udWxsOlE/P251bGwsRj1MP3t3aWR0aDpMLnNjcmVlbi53aWR0aCxoZWlnaHQ6TC5zY3JlZW4uaGVpZ2h0fTpTMChCLCQpLE49UjAoQixGKSxfPUM/bzQoQixDLm5hbWUpOkw/TipMLmZyYW1lLndpZHRoL0wuc2NyZWVuLndpZHRoOk4qVi53aWR0aC8oVi53aWR0aC0yKlYuYmV6ZWxYKSx6PUM/e3dpZHRoOkMud2lkdGgsaGVpZ2h0OkMuaGVpZ2h0fTpMP3t3aWR0aDpMLmZyYW1lLndpZHRoLGhlaWdodDpMLmZyYW1lLmhlaWdodH06e3dpZHRoOlYud2lkdGgsaGVpZ2h0OlYuaGVpZ2h0fSxVPWAke3oud2lkdGh9IC8gJHt6LmhlaWdodH1gLEE9KHoud2lkdGgvei5oZWlnaHQqYTQoQikpLnRvRml4ZWQoMiksTT1CPT09InZpc2lvbiI/SihuNCx7fSk6SihyNCx7dHlwZTpCfSk7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTUgbWluLXctMCB3LWZ1bGwiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHctZnVsbCIsc3R5bGU6e3dpZHRoOmBtaW4oMTAwJSwgJHtffXB4LCAke0F9ZHZoKWAsbWF4V2lkdGg6Xyxhc3BlY3RSYXRpbzpVfSxjaGlsZHJlbjpDP0ooaTQse25hbWU6Qy5uYW1lLGZhbGxiYWNrOk19KTpMP0ooczQse2Nocm9tZTpMfSk6TX0pLEooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1jZW50ZXIiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzE3cHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS85MCIsY2hpbGRyZW46JH0pLEooImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTNweF0gdGV4dC13aGl0ZS80NSIsY2hpbGRyZW46W2MyKEspLCIgU2ltdWxhdG9yIl19KV19KSxxJiZKKCJkaXYiLHtjbGFzc05hbWU6InRleHQtZGFuZ2VyIHRleHQtWzEycHhdIGZvbnQtbW9ubyBtYXgtdy05MCB0ZXh0LWNlbnRlciIsY2hpbGRyZW46cX0pLEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpHLGRpc2FibGVkOlosY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC01IHB5LTIgcm91bmRlZC1mdWxsIHRleHQtWzE0cHhdIGZvbnQtbWVkaXVtIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xNXNdICR7Wj8iYmctd2hpdGUvOCB0ZXh0LXdoaXRlLzU1IGN1cnNvci1kZWZhdWx0IjoiYmctd2hpdGUvMTIgdGV4dC13aGl0ZS85MCBob3ZlcjpiZy13aGl0ZS8xOCBjdXJzb3ItcG9pbnRlciJ9YCxjaGlsZHJlbjpbWiYmSigic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsY2xhc3NOYW1lOiJzaXplLTMuNSByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXdoaXRlLzI1IGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjhzX2xpbmVhcl9pbmZpbml0ZV0iLHN0eWxlOntib3JkZXJUb3BDb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjkpIn19KSxaP1k6IlN0YXJ0Il19KV19KX1mdW5jdGlvbiBvNCgkLEspe2lmKCQ9PT0id2F0Y2giKXtpZihLLmluY2x1ZGVzKCJ1bHRyYSIpKXJldHVybiAyNTU7aWYoSy5pbmNsdWRlcygid2F0Y2gtc2UtIil8fEsuaW5jbHVkZXMoImFwcGxlLXdhdGNoLXNlLSIpKXJldHVybiAyMzg7cmV0dXJuIDI1MH1pZigkPT09InZpc2lvbiIpcmV0dXJuIDM5MDtpZigkPT09ImlwYWQiKXJldHVybiAzNDA7cmV0dXJuIDI4MH1mdW5jdGlvbiBhNCgkKXtpZigkPT09InZpc2lvbiIpcmV0dXJuIDM0O2lmKCQ9PT0iaXBhZCIpcmV0dXJuIDUwO2lmKCQ9PT0id2F0Y2giKXJldHVybiA1NjtyZXR1cm4gNTJ9ZnVuY3Rpb24gcjQoe3R5cGU6JH0pe2xldCBLPUExWyRdO3JldHVybiBKKGUse2NoaWxkcmVuOltKKCJzdmciLHt2aWV3Qm94OmAwIDAgJHtLLndpZHRofSAke0suaGVpZ2h0fWAsY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHNpemUtZnVsbCIscHJlc2VydmVBc3BlY3RSYXRpbzoieE1pZFlNaWQgbWVldCIsY2hpbGRyZW46W0ooImRlZnMiLHtjaGlsZHJlbjpKKCJsaW5lYXJHcmFkaWVudCIse2lkOiJwbGFjZWhvbGRlci1zY3JlZW4iLHgxOiIwIix5MToiMCIseDI6IjEiLHkyOiIxIixjaGlsZHJlbjpbSigic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzZmYThlNiJ9KSxKKCJzdG9wIix7b2Zmc2V0OiI1NSUiLHN0b3BDb2xvcjoiIzViOTNkNiJ9KSxKKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiM1MTg4Y2YifSldfSl9KSxKKCJyZWN0Iix7eDpLLmJlemVsWCx5OksuYmV6ZWxZLHdpZHRoOksud2lkdGgtMipLLmJlemVsWCxoZWlnaHQ6Sy5oZWlnaHQtMipLLmJlemVsWSxyeDpLLmlubmVyUmFkaXVzLGZpbGw6InVybCgjcGxhY2Vob2xkZXItc2NyZWVuKSJ9KV19KSxKKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46SihSMix7dHlwZTokfSl9KV19KX1mdW5jdGlvbiBpNCh7bmFtZTokLGZhbGxiYWNrOkt9KXtsZXRbUSxYXT1EKCJsb2FkaW5nIik7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46W1EhPT0ibG9hZGVkIiYmSyxRIT09ImVycm9yIiYmSigiaW1nIix7YWx0OiIiLCJhcmlhLWhpZGRlbiI6ITAsZHJhZ2dhYmxlOiExLHNyYzokNygkKSxjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgc2l6ZS1mdWxsIHNlbGVjdC1ub25lIG9iamVjdC1jb250YWluIixzdHlsZTp7V2Via2l0VXNlckRyYWc6Im5vbmUifSxvbkxvYWQ6KCk9PlgoImxvYWRlZCIpLG9uRXJyb3I6KCk9PlgoImVycm9yIil9KV19KX1mdW5jdGlvbiBuNCgpe2xldHt3aWR0aDokLGhlaWdodDpLfT1BMS52aXNpb247cmV0dXJuIEooInN2ZyIse3ZpZXdCb3g6YDAgMCAkeyR9ICR7S31gLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQtMCBzaXplLWZ1bGwiLHByZXNlcnZlQXNwZWN0UmF0aW86InhNaWRZTWlkIG1lZXQiLGZpbGw6Im5vbmUiLCJhcmlhLWhpZGRlbiI6ITAsY2hpbGRyZW46W0ooImRlZnMiLHtjaGlsZHJlbjpbSigibGluZWFyR3JhZGllbnQiLHtpZDoidmlzaW9uLXBsYWNlaG9sZGVyLXNoZWxsIix4MToiMCIseTE6IjAiLHgyOiIwIix5MjoiMSIsY2hpbGRyZW46W0ooInN0b3AiLHtvZmZzZXQ6IjAlIixzdG9wQ29sb3I6IiMyODI4MmIifSksSigic3RvcCIse29mZnNldDoiNTQlIixzdG9wQ29sb3I6IiMxMjEyMTQifSksSigic3RvcCIse29mZnNldDoiMTAwJSIsc3RvcENvbG9yOiIjMDcwNzA4In0pXX0pLEooImxpbmVhckdyYWRpZW50Iix7aWQ6InZpc2lvbi1wbGFjZWhvbGRlci1nbGFzcyIseDE6IjAiLHkxOiIwIix4MjoiMSIseTI6IjEiLGNoaWxkcmVuOltKKCJzdG9wIix7b2Zmc2V0OiIwJSIsc3RvcENvbG9yOiIjMzEzNTNhIn0pLEooInN0b3AiLHtvZmZzZXQ6IjQ4JSIsc3RvcENvbG9yOiIjMGEwYjBkIn0pLEooInN0b3AiLHtvZmZzZXQ6IjEwMCUiLHN0b3BDb2xvcjoiIzAxMDEwMiJ9KV19KSxKKCJyYWRpYWxHcmFkaWVudCIse2lkOiJ2aXNpb24tcGxhY2Vob2xkZXItbGVucyIsY3g6IjUwJSIsY3k6IjQ2JSIscjoiNjAlIixjaGlsZHJlbjpbSigic3RvcCIse29mZnNldDoiMCUiLHN0b3BDb2xvcjoiIzIwMjgzMiJ9KSxKKCJzdG9wIix7b2Zmc2V0OiI3MiUiLHN0b3BDb2xvcjoiIzA5MGEwZCJ9KSxKKCJzdG9wIix7b2Zmc2V0OiIxMDAlIixzdG9wQ29sb3I6IiMwMTAxMDIifSldfSldfSksSigicGF0aCIse2Q6Ik05NSAxNzdDOTUgMTE5IDE0NyA4NiAyMTggOTFDMjU3IDk0IDI4NiAxMTEgMzIwIDExMUMzNTQgMTExIDM4MyA5NCA0MjIgOTFDNDkzIDg2IDU0NSAxMTkgNTQ1IDE3N1YyMjJDNTQ1IDI3OCA1MDEgMzExIDQ0MyAzMTBDMzk4IDMwOSAzNzEgMjg2IDM0NSAyNjhDMzI5IDI1NyAzMTEgMjU3IDI5NSAyNjhDMjY5IDI4NiAyNDIgMzA5IDE5NyAzMTBDMTM5IDMxMSA5NSAyNzggOTUgMjIyVjE3N1oiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLXNoZWxsKSIsc3Ryb2tlOiIjM2QzZDQyIixzdHJva2VXaWR0aDoiNyJ9KSxKKCJwYXRoIix7ZDoiTTExNyAxODFDMTE3IDEzNCAxNTcgMTEyIDIyMCAxMTZDMjYwIDExOSAyODcgMTM2IDMyMCAxMzZDMzUzIDEzNiAzODAgMTE5IDQyMCAxMTZDNDgzIDExMiA1MjMgMTM0IDUyMyAxODFWMjE3QzUyMyAyNjMgNDg4IDI4NyA0MzkgMjg3QzM5OSAyODcgMzY5IDI2NCAzNDUgMjUwQzMyOSAyNDAgMzExIDI0MCAyOTUgMjUwQzI3MSAyNjQgMjQxIDI4NyAyMDEgMjg3QzE1MiAyODcgMTE3IDI2MyAxMTcgMjE3VjE4MVoiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLWdsYXNzKSIsc3Ryb2tlOiIjMTcxODFiIixzdHJva2VXaWR0aDoiNSJ9KSxKKCJwYXRoIix7ZDoiTTE0MyAxODZDMTQ1IDE0OCAxNzYgMTM1IDIyNiAxMzhDMjY0IDE0MSAyODkgMTU2IDMyMCAxNTZDMzUxIDE1NiAzNzYgMTQxIDQxNCAxMzhDNDY0IDEzNSA0OTUgMTQ4IDQ5NyAxODZWMjEzQzQ5NyAyNTAgNDY5IDI2NiA0MzIgMjY2QzM5NCAyNjYgMzY5IDI0NiAzNDMgMjM1QzMyOCAyMjkgMzEyIDIyOSAyOTcgMjM1QzI3MSAyNDYgMjQ2IDI2NiAyMDggMjY2QzE3MSAyNjYgMTQzIDI1MCAxNDMgMjEzVjE4NloiLGZpbGw6InVybCgjdmlzaW9uLXBsYWNlaG9sZGVyLWxlbnMpIixzdHJva2U6IiMyNjJhMmYiLHN0cm9rZVdpZHRoOiIyIn0pLEooInBhdGgiLHtkOiJNMTUxIDE3MUMxNzkgMTUwIDIxNyAxNDcgMjUxIDE1NE0zODkgMTU0QzQyMyAxNDcgNDYxIDE1MCA0ODkgMTcxIixzdHJva2U6IiM0ZTUzNWEiLHN0cm9rZVdpZHRoOiIzIixzdHJva2VMaW5lY2FwOiJyb3VuZCJ9KSxKKCJwYXRoIix7ZDoiTTI3NyAyMzNDMjg5IDIyNCAzMDQgMjE5IDMyMCAyMTlDMzM2IDIxOSAzNTEgMjI0IDM2MyAyMzMiLHN0cm9rZToiIzNiNDA0NiIsc3Ryb2tlV2lkdGg6IjQiLHN0cm9rZUxpbmVjYXA6InJvdW5kIn0pXX0pfWZ1bmN0aW9uIHM0KHtjaHJvbWU6JH0pe2xldCBLPWAkeyQuaW5uZXJDb3JuZXJSYWRpdXMvJC5zY3JlZW4ud2lkdGgqMTAwfSUgLyAkeyQuaW5uZXJDb3JuZXJSYWRpdXMvJC5zY3JlZW4uaGVpZ2h0KjEwMH0lYCxRPSQuY29tcG9zaXRlSW1hZ2U/JC5idXR0b25zLmZpbHRlcigoWCk9Plgub25Ub3ApOiQuYnV0dG9ucztyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC0wIHBvaW50ZXItZXZlbnRzLW5vbmUiLGNoaWxkcmVuOltRLm1hcCgoWCk9PkoocDUse2Nocm9tZTokLGltYWdlOlguaW1hZ2UscmVjdDpYLmZyYW1lLHpJbmRleDpYLm9uVG9wPzQ6MH0sYGJ1dHRvbi0ke1gubmFtZX1gKSksSigiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBiZy1ibGFjayIsc3R5bGU6ey4uLnY4KCQsJC5zY3JlZW4sMSksYm9yZGVyUmFkaXVzOkt9fSksJC5jb21wb3NpdGVJbWFnZT9KKHA1LHtjaHJvbWU6JCxpbWFnZTokLmNvbXBvc2l0ZUltYWdlLHJlY3Q6JC5ib2R5LHpJbmRleDoyfSk6JC5zbGljZSYmJC5jb3JuZXI/Sih0NCx7Y2hyb21lOiR9KTpudWxsXX0pfWZ1bmN0aW9uIHQ0KHtjaHJvbWU6JH0pe2lmKCEkLnNsaWNlfHwhJC5jb3JuZXIpcmV0dXJuIG51bGw7bGV0e2JvZHk6Syxjb3JuZXI6USxzbGljZTpYfT0kLFo9TWF0aC5tYXgoSy53aWR0aC1RLndpZHRoKjIsMCksWT1NYXRoLm1heChLLmhlaWdodC1RLmhlaWdodCoyLDApLHE9W3trZXk6InRvcC1sZWZ0IixpbWFnZTpYLnRvcExlZnQscmVjdDp7eDpLLngseTpLLnksd2lkdGg6US53aWR0aCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJ0b3AtcmlnaHQiLGltYWdlOlgudG9wUmlnaHQscmVjdDp7eDpLLngrSy53aWR0aC1RLndpZHRoLHk6Sy55LHdpZHRoOlEud2lkdGgsaGVpZ2h0OlEuaGVpZ2h0fX0se2tleToiYm90dG9tLWxlZnQiLGltYWdlOlguYm90dG9tTGVmdCxyZWN0Ont4OksueCx5OksueStLLmhlaWdodC1RLmhlaWdodCx3aWR0aDpRLndpZHRoLGhlaWdodDpRLmhlaWdodH19LHtrZXk6ImJvdHRvbS1yaWdodCIsaW1hZ2U6WC5ib3R0b21SaWdodCxyZWN0Ont4OksueCtLLndpZHRoLVEud2lkdGgseTpLLnkrSy5oZWlnaHQtUS5oZWlnaHQsd2lkdGg6US53aWR0aCxoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJ0b3AiLGltYWdlOlgudG9wLHJlY3Q6e3g6Sy54K1Eud2lkdGgseTpLLnksd2lkdGg6WixoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJib3R0b20iLGltYWdlOlguYm90dG9tLHJlY3Q6e3g6Sy54K1Eud2lkdGgseTpLLnkrSy5oZWlnaHQtUS5oZWlnaHQsd2lkdGg6WixoZWlnaHQ6US5oZWlnaHR9fSx7a2V5OiJsZWZ0IixpbWFnZTpYLmxlZnQscmVjdDp7eDpLLngseTpLLnkrUS5oZWlnaHQsd2lkdGg6US53aWR0aCxoZWlnaHQ6WX19LHtrZXk6InJpZ2h0IixpbWFnZTpYLnJpZ2h0LHJlY3Q6e3g6Sy54K0sud2lkdGgtUS53aWR0aCx5OksueStRLmhlaWdodCx3aWR0aDpRLndpZHRoLGhlaWdodDpZfX1dO3JldHVybiBKKGUse2NoaWxkcmVuOnEuZmlsdGVyKChHKT0+Ry5yZWN0LndpZHRoPjAmJkcucmVjdC5oZWlnaHQ+MCkubWFwKChHKT0+SihwNSx7Y2hyb21lOiQsaW1hZ2U6Ry5pbWFnZSxyZWN0OkcucmVjdCx6SW5kZXg6Mn0sRy5rZXkpKX0pfWZ1bmN0aW9uIHA1KHtjaHJvbWU6JCxpbWFnZTpLLHJlY3Q6USx6SW5kZXg6WH0pe3JldHVybiBKKCJpbWciLHthbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3JjOmU0KCQuaWRlbnRpZmllcixLKSxjbGFzc05hbWU6ImFic29sdXRlIHNlbGVjdC1ub25lIixzdHlsZTp7Li4udjgoJCxRLFgpLG9iamVjdEZpdDoiZmlsbCIsV2Via2l0VXNlckRyYWc6Im5vbmUifX0pfWZ1bmN0aW9uIGU0KCQsSyl7bGV0IFE9YGdyaWQvYXBpL2RldmljZWtpdC1jaHJvbWU/Y2hyb21lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KCQpfSZpbWFnZT0ke2VuY29kZVVSSUNvbXBvbmVudChLKX1gO3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9gLyR7UX1gOmcxKFEpfWZ1bmN0aW9uICQ3KCQpe2xldCBLPWBncmlkL2FwaS9kZXZpY2UtcGxhY2Vob2xkZXItYXNzZXQ/bmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudCgkKX1gO3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij9gLyR7S31gOmcxKEspfWZ1bmN0aW9uIHY4KCQsSyxRKXtyZXR1cm57bGVmdDpvMihLLngsJC5mcmFtZS53aWR0aCksdG9wOm8yKEsueSwkLmZyYW1lLmhlaWdodCksd2lkdGg6bzIoSy53aWR0aCwkLmZyYW1lLndpZHRoKSxoZWlnaHQ6bzIoSy5oZWlnaHQsJC5mcmFtZS5oZWlnaHQpLHpJbmRleDpRfX1mdW5jdGlvbiBvMigkLEspe3JldHVybmAkeyQvSyoxMDB9JWB9ZnVuY3Rpb24gaDAoe29wZW46JCx3aWR0aDpLLGNoaWxkcmVuOlEsc3R5bGU6WCxzaWRlOlo9InJpZ2h0In0pe3JldHVybiBKKCJhc2lkZSIse2NsYXNzTmFtZTpgZml4ZWQgei0zNSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiBiZy1wYW5lbC1iZyB0ZXh0LXdoaXRlLzkwIGJhY2tkcm9wLWJsdXItWzE4cHhdIFtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLHN5c3RlbS11aSxzYW5zLXNlcmlmXSBbdHJhbnNpdGlvbjp0cmFuc2Zvcm1fMC4yNXNfZWFzZSxvcGFjaXR5XzAuMnNfZWFzZV0gZmxleCBmbGV4LWNvbCAke1o9PT0ibGVmdCI/InRvcC0wIGJvdHRvbS0wIGxlZnQtMCByb3VuZGVkLW5vbmUgYm9yZGVyLTAgYm9yZGVyLXIgYm9yZGVyLXdoaXRlLzEwIHNoYWRvdy1bOHB4XzBfMzJweF9yZ2JhKDAsMCwwLDAuMzUpXSI6InRvcC0zIGJvdHRvbS0zIHJpZ2h0LTMgcm91bmRlZC1bMTRweF0gYm9yZGVyIGJvcmRlci13aGl0ZS8xMCBzaGFkb3ctWzBfMTJweF80MHB4X3JnYmEoMCwwLDAsMC41NSldIn1gLHN0eWxlOnt3aWR0aDpLLHRyYW5zZm9ybTokPyJ0cmFuc2xhdGVYKDApIjpaPT09ImxlZnQiPyJ0cmFuc2xhdGVYKC0xMDAlKSI6InRyYW5zbGF0ZVgoY2FsYygxMDAlICsgMjRweCkpIixvcGFjaXR5OiQ/MTowLHBvaW50ZXJFdmVudHM6JD8iYXV0byI6Im5vbmUiLC4uLlh9LCJhcmlhLWhpZGRlbiI6ISQsY2hpbGRyZW46UX0pfWZ1bmN0aW9uIGowKHtjaGlsZHJlbjokLHN0eWxlOkt9KXtyZXR1cm4gSigiaGVhZGVyIix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIuNSBweC0yLjUgcHktMS41IHBsLTMiLHN0eWxlOkssY2hpbGRyZW46JH0pfWZ1bmN0aW9uIGEyKHtjaGlsZHJlbjokfSl7cmV0dXJuIEooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUvNTUiLGNoaWxkcmVuOiR9KX1mdW5jdGlvbiByMih7b25DbGljazokLGFyaWFMYWJlbDpLPSJDbG9zZSBwYW5lbCIsdGl0bGU6USxpY29uU2l6ZTpYPTE2fSl7cmV0dXJuIEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazokLGNsYXNzTmFtZToiZmxleCBoLVszMHB4XSB3LVszMHB4XSBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXItbm9uZSBiZy10cmFuc3BhcmVudCBwLTAgdGV4dC1bIzhlOGU5M10gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOkssdGl0bGU6USxjaGlsZHJlbjpKKHAxLHtzaXplOlgsc3Ryb2tlV2lkdGg6Mn0pfSl9ZnVuY3Rpb24gZzgoJCxLKXtsZXRbUSxYXT1EKG51bGwpO3JldHVybiBJKCgpPT57aWYoIUt8fCEkKXJldHVybjtsZXQgWj0hMSxZPWFzeW5jKCk9Pnt0cnl7bGV0IEI9YXdhaXQoYXdhaXQgZmV0Y2goJCx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCk7aWYoIVopWChCKX1jYXRjaHt9fTtZKCk7bGV0IHE9c2V0SW50ZXJ2YWwoWSw1MDAwKTtyZXR1cm4oKT0+e1o9ITAsY2xlYXJJbnRlcnZhbChxKX19LFskLEtdKSxRfWZ1bmN0aW9uIGg4KHtyZXBvcnQ6JH0pe2lmKCEkfHwkLnRvdGFsQnl0ZXM9PT0wKXJldHVybiBudWxsO2xldHtlc3RpbWF0ZWRBZGRpdGlvbmFsOkssYXZhaWxhYmxlQnl0ZXM6USx0b3RhbEJ5dGVzOlgscnVubmluZ1NpbXVsYXRvcnM6Wn09JCxZPU1hdGgubWF4KDAsTWF0aC5taW4oMSwxLVEvWCkpLHE9WitLLEc9Sz09PTA/IiNlNjYiOks8PTE/IiNlOWExM2IiOiIjM2IzIixCPVk+MC45PyIjZTY2IjpZPjAuNzU/IiNlOWExM2IiOiIjM2IzIjtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBtYXgtdy1mdWxsIG1pbi13LTAgZmxleC1ub3dyYXAgaXRlbXMtY2VudGVyIGdhcC0xLjUgb3ZlcmZsb3ctaGlkZGVuIHdoaXRlc3BhY2Utbm93cmFwIHB4LTIgcHktWzNweF0gcm91bmRlZC1mdWxsIGJnLVsjMTAxMDEwXSBib3JkZXIgYm9yZGVyLVsjMjIyXSBmb250LW1vbm8gdGV4dC1bMTFweF0gdGV4dC13aGl0ZS83MCBsZWFkaW5nLW5vbmUiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLVszcHhdIHNocmluay0wIixzdHlsZTp7YmFja2dyb3VuZDpHfX0pLEooInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgdHJ1bmNhdGUiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2hpbGRyZW46W1osIi8iLHEsIiBzaW1zIl19KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzQwIixjaGlsZHJlbjoiIMK3ICJ9KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjpbUzgoUSksIiBmcmVlIl19KV19KSxKKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6Im1sLTAuNSB3LTcgaC1bM3B4XSBzaHJpbmstMCBiZy1bIzFjMWMxY10gcm91bmRlZC1bMnB4XSBvdmVyZmxvdy1oaWRkZW4gaW5saW5lLWJsb2NrIixjaGlsZHJlbjpKKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBoLWZ1bGwgdHJhbnNpdGlvbi1bd2lkdGgsYmFja2dyb3VuZF0gZHVyYXRpb24tMzAwIGVhc2Utb3V0IixzdHlsZTp7d2lkdGg6YCR7KFkqMTAwKS50b0ZpeGVkKDEpfSVgLGJhY2tncm91bmQ6Qn19KX0pXX0pfWZ1bmN0aW9uIGo4KHt0eXBlOiQsc2l6ZTpLPTIwLHNjcmVlbk9uOlE9ITF9KXtsZXQgWD17d2lkdGg6SyxoZWlnaHQ6Syx2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoxLjYsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9O3N3aXRjaCgkKXtjYXNlImlwYWQiOnJldHVybiBKKCJzdmciLHsuLi5YLGNoaWxkcmVuOltRJiZKKCJyZWN0Iix7eDoiNS4wNSIseToiMy41NSIsd2lkdGg6IjEzLjkiLGhlaWdodDoiMTYuNDUiLHJ4OiIxLjY1IixmaWxsOiIjNDdiN2ZmIixzdHJva2U6Im5vbmUiLCJkYXRhLXRlc3RpZCI6ImRldmljZS1nbHlwaC1zY3JlZW4tb24ifSksSigicmVjdCIse3g6IjQiLHk6IjIuNSIsd2lkdGg6IjE2IixoZWlnaHQ6IjE5IixyeDoiMi41In0pLEooImxpbmUiLHt4MToiMTIiLHkxOiIxOC41Iix4MjoiMTIiLHkyOiIxOC41In0pXX0pO2Nhc2Uid2F0Y2giOnJldHVybiBKKCJzdmciLHsuLi5YLGNoaWxkcmVuOltKKCJyZWN0Iix7eDoiNi41Iix5OiI3Iix3aWR0aDoiMTEiLGhlaWdodDoiMTAiLHJ4OiIzIn0pLEooInBhdGgiLHtkOiJNOC41IDdsLjYtMy4yQTEuNSAxLjUgMCAwIDEgMTAuNiAyLjVoMi44YTEuNSAxLjUgMCAwIDEgMS41IDEuM0wxNS41IDcifSksSigicGF0aCIse2Q6Ik04LjUgMTdsLjYgMy4yYTEuNSAxLjUgMCAwIDAgMS41IDEuM2gyLjhhMS41IDEuNSAwIDAgMCAxLjUtMS4zbC42LTMuMiJ9KV19KTtjYXNlInZpc2lvbiI6cmV0dXJuIEooInN2ZyIsey4uLlgsY2hpbGRyZW46SigicGF0aCIse2Q6Ik0zIDExYTQgNCAwIDAgMSA0LTRoMTBhNCA0IDAgMCAxIDQgNHYyLjVhMi41IDIuNSAwIDAgMS0yLjUgMi41Yy0xLjggMC0yLjUtMS4yLTMuNS0xLjgtLjktLjUtMS42LS43LTIuNS0uN3MtMS42LjItMi41LjdjLTEgLjYtMS43IDEuOC0zLjUgMS44QTIuNSAyLjUgMCAwIDEgMyAxMy41eiJ9KX0pO2RlZmF1bHQ6cmV0dXJuIEooInN2ZyIsey4uLlgsY2hpbGRyZW46W1EmJkooInJlY3QiLHt4OiI3LjQ1Iix5OiIzLjY1Iix3aWR0aDoiOS4xIixoZWlnaHQ6IjE2LjM1IixyeDoiMiIsZmlsbDoiIzQ3YjdmZiIsc3Ryb2tlOiJub25lIiwiZGF0YS10ZXN0aWQiOiJkZXZpY2UtZ2x5cGgtc2NyZWVuLW9uIn0pLEooInJlY3QiLHt4OiI2LjUiLHk6IjIuNSIsd2lkdGg6IjExIixoZWlnaHQ6IjE5IixyeDoiMi44In0pLEooImxpbmUiLHt4MToiMTAuNSIseTE6IjUiLHgyOiIxMy41Iix5MjoiNSJ9KV19KX19ZnVuY3Rpb24gbTgoe2RldmljZTokLGFjdGl2ZTpLLHN0YXJ0aW5nOlEsc2h1dHRpbmdEb3duOlgsb25TZWxlY3Q6WixvblNodXRkb3duOll9KXtsZXQgcT0kLmhlbHBlcixHPSQuc3RhdGU9PT0iQm9vdGVkIixCPW4xKCQubmFtZSksVj1SOCgkLnJ1bnRpbWUpLEM9cT8iU3RyZWFtaW5nIjpRP0c/IlN0YXJ0aW5n4oCmIjoiQm9vdGluZ+KApiI6WD8iU2h1dHRpbmcgZG93buKApiI6Rz8iQm9vdGVkIjpudWxsLEw9cT8iIzM0ZDM5OSI6Rz8iI2U5YTEzYiI6bnVsbCxGPXF8fEcsTj1xP0s/ImJnLVsjMjYzNjRjXSI6ImJnLVsjMjAyYjNhXSI6Sz8iYmctd2hpdGUvMTUiOiJiZy13aGl0ZS82IixfPXE/InRleHQtWyNkMmU3ZmZdIjpLPyJ0ZXh0LXdoaXRlLzkwIjoidGV4dC13aGl0ZS81NSI7cmV0dXJuIEooImRpdiIse3JvbGU6ImJ1dHRvbiIsdGFiSW5kZXg6MCwiYXJpYS1wcmVzc2VkIjpLLG9uQ2xpY2s6WixvbktleURvd246KHopPT57aWYoei5rZXk9PT0iRW50ZXIifHx6LmtleT09PSIgIil6LnByZXZlbnREZWZhdWx0KCksWigpfSxjbGFzc05hbWU6YGdyb3VwIHJlbGF0aXZlIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yLjUgcHgtMiBweS0xLjUgcm91bmRlZC1sZyBjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzXSAke0s/ImJnLXdoaXRlLzEwIHRleHQtd2hpdGUiOiJ0ZXh0LXdoaXRlLzkwIGhvdmVyOmJnLXdoaXRlLzgifWAsY2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZTpgcmVsYXRpdmUgc2hyaW5rLTAgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS05IHJvdW5kZWQtWzlweF0gb3ZlcmZsb3ctaGlkZGVuICR7Tn1gLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOl8sY2hpbGRyZW46SihqOCx7dHlwZTpCLHNjcmVlbk9uOkJvb2xlYW4ocSl9KX0pLEwmJiFxJiZKKCJzcGFuIix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBib3R0b20tMC41IHJpZ2h0LTAuNSBzaXplLTEuNSByb3VuZGVkLWZ1bGwgcmluZy0yIHJpbmctWyMxYzFjMWVdIixzdHlsZTp7YmFja2dyb3VuZDpMfX0pXX0pLEooImRpdiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InRydW5jYXRlIHRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgbGVhZGluZy10aWdodCIsY2hpbGRyZW46JC5uYW1lfSksQyYmSigiZGl2Iix7Y2xhc3NOYW1lOmB0cnVuY2F0ZSB0ZXh0LVsxMXB4XSBsZWFkaW5nLXRpZ2h0ICR7cT8idGV4dC1bIzM0ZDM5OV0iOks/InRleHQtd2hpdGUvNzUiOiJ0ZXh0LXdoaXRlLzQ1In1gLGNoaWxkcmVuOkN9KV19KSxKKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2Utcm93LXRyYWlsaW5nLXNsb3QiLGNsYXNzTmFtZToicmVsYXRpdmUgc2hyaW5rLTAgdy04IGgtNiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6YGFic29sdXRlIHJpZ2h0LTAgdGV4dC1bMTFweF0gZm9udC1tb25vIHRhYnVsYXItbnVtcyBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTJzXSAke0s/InRleHQtd2hpdGUvODUiOiJ0ZXh0LXdoaXRlLzQwIn0gJHtGPyJncm91cC1ob3ZlcjpvcGFjaXR5LTAgZ3JvdXAtZm9jdXMtd2l0aGluOm9wYWNpdHktMCI6IiJ9YCxjaGlsZHJlbjpWfSksRiYmSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIix0aXRsZTpYPyJTaHV0dGluZyBkb3du4oCmIjoiU2h1dCBkb3duIHNpbXVsYXRvciIsImFyaWEtbGFiZWwiOiJTaHV0IGRvd24gc2ltdWxhdG9yIixvbkNsaWNrOih6KT0+e3oucHJldmVudERlZmF1bHQoKSx6LnN0b3BQcm9wYWdhdGlvbigpLFkoKX0sZGlzYWJsZWQ6WCxjbGFzc05hbWU6YGFic29sdXRlIHJpZ2h0LTAgdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtNSByb3VuZGVkLW1kIG9wYWNpdHktMCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMCBmb2N1cy12aXNpYmxlOm9wYWNpdHktMTAwIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xMnMsYmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10gJHtLPyJ0ZXh0LXdoaXRlLzgwIGhvdmVyOmJnLXdoaXRlLzIwIjoidGV4dC13aGl0ZS83MCBob3ZlcjpiZy13aGl0ZS8xMiBob3Zlcjp0ZXh0LXdoaXRlIn1gLGNoaWxkcmVuOkoocDEse3NpemU6MTMsc3Ryb2tlV2lkdGg6Mi4yfSl9KV19KV19KX12YXIgSzc9MTI7ZnVuY3Rpb24gZjgoe29wZW46JCxvbkNsb3NlOkssd2lkdGg6USxzaWRlOlg9InJpZ2h0IixkZXZpY2VzOlosc2VsZWN0ZWRVZGlkOlksb25TZWxlY3Q6cSxzdGFydGluZzpHLHNodXR0aW5nRG93bjpCLG9uU2h1dGRvd246Vn0pe2xldCBMPSh0eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6d2luZG93Ll9fU0lNX1BSRVZJRVdfXyk/LmdyaWRNZW1vcnlFbmRwb2ludD8/KHR5cGVvZiB3aW5kb3c+InUiP3ZvaWQgMDpnMSgiZ3JpZC9hcGkvbWVtb3J5IikpLEY9ZzgoTCwkKSxbTixfXT1EKCIiKSx6PU8xKCgpPT57bGV0IFU9Ti50cmltKCkudG9Mb3dlckNhc2UoKTtpZighVXx8IVopcmV0dXJuIFo7cmV0dXJuIFouZmlsdGVyKChBKT0+QS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoVSl8fGMyKEEucnVudGltZSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhVKSl9LFtaLE5dKTtyZXR1cm4gSihoMCx7b3BlbjokLHdpZHRoOlEsc2lkZTpYLGNoaWxkcmVuOltKKGowLHtzdHlsZTp7anVzdGlmeUNvbnRlbnQ6ImZsZXgtc3RhcnQiLHBhZGRpbmdMZWZ0OjE2LHBhZGRpbmdUb3A6MTYsZ2FwOjR9LGNoaWxkcmVuOltKKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6SyxjbGFzc05hbWU6ImZsZXggaC1bMzBweF0gdy1bMzBweF0gc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyLW5vbmUgYmctdHJhbnNwYXJlbnQgdGV4dC1bIzhlOGU5M10gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJDbG9zZSBkZXZpY2VzIHNpZGViYXIiLCJhcmlhLXByZXNzZWQiOiEwLHRpdGxlOiJEZXZpY2VzIixjaGlsZHJlbjpKKHMxLHtzaXplOjE4LHN0cm9rZVdpZHRoOjEuNzV9KX0pLEooYTIse2NoaWxkcmVuOiJEZXZpY2VzIn0pXX0pLEooImRpdiIse2NsYXNzTmFtZToicHgtMyBwYi0yIHB0LTAuNSBzaHJpbmstMCIsY2hpbGRyZW46SigibGFiZWwiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTIuNSBoLTggcm91bmRlZC1sZyBiZy13aGl0ZS82IGZvY3VzLXdpdGhpbjpiZy13aGl0ZS8xMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTJzXSIsY2hpbGRyZW46W0ooWTIse3NpemU6MTQsc3Ryb2tlV2lkdGg6MixjbGFzc05hbWU6InRleHQtd2hpdGUvNDAgc2hyaW5rLTAifSksSigiaW5wdXQiLHt2YWx1ZTpOLG9uQ2hhbmdlOihVKT0+XyhVLnRhcmdldC52YWx1ZSkscGxhY2Vob2xkZXI6IlNlYXJjaCIsY2xhc3NOYW1lOiJtaW4tdy0wIGZsZXgtMSBiZy10cmFuc3BhcmVudCBib3JkZXItbm9uZSBvdXRsaW5lLW5vbmUgdGV4dC1bMTNweF0gdGV4dC13aGl0ZS85MCBwbGFjZWhvbGRlcjp0ZXh0LXdoaXRlLzQwIn0pLE4mJkooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsImFyaWEtbGFiZWwiOiJDbGVhciBzZWFyY2giLG9uQ2xpY2s6KCk9Pl8oIiIpLGNsYXNzTmFtZToic2hyaW5rLTAgZ3JpZCBwbGFjZS1pdGVtcy1jZW50ZXIgc2l6ZS00IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS8xNSB0ZXh0LXdoaXRlLzcwIGhvdmVyOmJnLXdoaXRlLzI1IixjaGlsZHJlbjpKKHAxLHtzaXplOjksc3Ryb2tlV2lkdGg6M30pfSldfSl9KSxKKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGZsZXgtMSBtaW4taC0wIixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgbWluLWgtMCBvdmVyZmxvdy15LWF1dG8gcHgtMiBweS0yIFtzY3JvbGxiYXItd2lkdGg6dGhpbl0iLGNoaWxkcmVuOno9PT1udWxsP0ooUTcse30pOnoubGVuZ3RoPT09MD9KKCJkaXYiLHtjbGFzc05hbWU6InB4LTIgcHktNiB0ZXh0LXdoaXRlLzQwIHRleHQtWzEycHhdIHRleHQtY2VudGVyIixjaGlsZHJlbjpOPyJObyBtYXRjaGluZyBzaW11bGF0b3JzLiI6Ik5vIGlPUyBzaW11bGF0b3JzIGF2YWlsYWJsZS4ifSk6SihlLHtjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB0LTEgcGItMSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUiLGNoaWxkcmVuOiJBdmFpbGFibGUifSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0wLjUgcGItMSIsY2hpbGRyZW46ei5tYXAoKFUpPT5KKG04LHtkZXZpY2U6VSxhY3RpdmU6VS5kZXZpY2U9PT1ZLHN0YXJ0aW5nOiEhR1tVLmRldmljZV0sc2h1dHRpbmdEb3duOiEhQltVLmRldmljZV0sb25TZWxlY3Q6KCk9PnEoVS5kZXZpY2UpLG9uU2h1dGRvd246KCk9PlYoVS5kZXZpY2UpfSxVLmRldmljZSkpfSldfSl9KSxKKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJkZXZpY2UtbGlzdC10b3AtZmFkZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgcmlnaHQtMCBoLVsxNnB4XSBwb2ludGVyLWV2ZW50cy1ub25lIGJnLVtsaW5lYXItZ3JhZGllbnQodG9fYm90dG9tLHJnYmEoMjAsMjAsMjIsMC45NilfMCUscmdiYSgyMCwyMCwyMiwwKV8xMDAlKV0ifSksSigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3QtYm90dG9tLWZhZGUiLGNsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTZweF0gcG9pbnRlci1ldmVudHMtbm9uZSBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3RvcCxyZ2JhKDIwLDIwLDIyLDAuOTYpXzAlLHJnYmEoMjAsMjAsMjIsMClfMTAwJSldIn0pXX0pLEooWDcse3JlcG9ydDpGfSldfSl9ZnVuY3Rpb24gUTcoKXtyZXR1cm4gSihlLHtjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJweC0yIHB0LTEgcGItMSB0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGUiLGNoaWxkcmVuOiJBdmFpbGFibGUifSksSigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLWxpc3Qtc2tlbGV0b24iLGNsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMC41IHBiLTEiLCJhcmlhLWxhYmVsIjoiTG9hZGluZyBzaW11bGF0b3JzIiwiYXJpYS1idXN5IjoidHJ1ZSIsY2hpbGRyZW46QXJyYXkuZnJvbSh7bGVuZ3RoOks3fSwoJCxLKT0+SihKNyx7aW5kZXg6S30sSykpfSldfSl9ZnVuY3Rpb24gSjcoe2luZGV4OiR9KXtsZXQgSz1bInctWzYyJV0iLCJ3LVs3NCVdIiwidy1bNTglXSIsInctWzcwJV0iXVskJTRdLFE9WyJ3LVs0MiVdIiwidy1bMzYlXSIsInctWzQ4JV0iLCJ3LVszMiVdIl1bJCU0XSxYPVsidy03Iiwidy02Iiwidy04Il1bJCUzXTtyZXR1cm4gSigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiZGV2aWNlLXJvdy1za2VsZXRvbiIsY2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMi41IHB4LTIgcHktMS41IHJvdW5kZWQtbGcgc2VsZWN0LW5vbmUiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIHNocmluay0wIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyIHNpemUtOSByb3VuZGVkLVs5cHhdIG92ZXJmbG93LWhpZGRlbiBiZy13aGl0ZS82IixjaGlsZHJlbjpKKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTQgcm91bmRlZC1bNHB4XSBiZy13aGl0ZS9bMC4xMl0ifSl9KSxKKCJkaXYiLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTEuNSIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6YGgtMyByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMTJdICR7S31gfSksSigic3BhbiIse2NsYXNzTmFtZTpgaC0yLjUgcm91bmRlZC1mdWxsIGJnLXdoaXRlL1swLjA4XSAke1F9YH0pXX0pLEooInNwYW4iLHtjbGFzc05hbWU6YHNocmluay0wIGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0gJHtYfWB9KV19KX1mdW5jdGlvbiBYNyh7cmVwb3J0OiR9KXtpZighJHx8JC50b3RhbEJ5dGVzPD0wKXJldHVybiBudWxsO3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6InNocmluay0wIG1pbi13LTAgb3ZlcmZsb3ctaGlkZGVuIHB4LTMgcHktMiBmbGV4IGp1c3RpZnktY2VudGVyIixjaGlsZHJlbjpKKGg4LHtyZXBvcnQ6JH0pfSl9ZnVuY3Rpb24gaTIoe3BhbmVsV2lkdGg6JCx2aXNpYmxlOkssb25Qb2ludGVyRG93bjpRLGFyaWFMYWJlbDpYLHNpZGU6Wj0icmlnaHQifSl7bGV0W1kscV09RCghMSksW0csQl09RCghMSksVj1ZfHxHLEM9KFo9PT0ibGVmdCI/MDoxMikrJC05O3JldHVybiBKKCJkaXYiLHtyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLWxhYmVsIjpYLCJhcmlhLWhpZGRlbiI6IUssb25Qb2ludGVyRG93bjooRik9PntCKCEwKSxRKEYpfSxvblBvaW50ZXJVcDooKT0+QighMSksb25Qb2ludGVyQ2FuY2VsOigpPT5CKCExKSxvblBvaW50ZXJFbnRlcjooKT0+cSghMCksb25Qb2ludGVyTGVhdmU6KCk9PnEoITEpLGNsYXNzTmFtZTpgZml4ZWQgJHtaPT09ImxlZnQiPyJ0b3AtMCBib3R0b20tMCI6InRvcC0zIGJvdHRvbS0zIn0gdy00IHotMzYgY3Vyc29yLWNvbC1yZXNpemUgdG91Y2gtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMjAwICR7Sz8ib3BhY2l0eS0xMDAgcG9pbnRlci1ldmVudHMtYXV0byI6Im9wYWNpdHktMCBwb2ludGVyLWV2ZW50cy1ub25lIn1gLHN0eWxlOlo9PT0ibGVmdCI/e2xlZnQ6Q306e3JpZ2h0OkN9LGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6YGFic29sdXRlIHRvcC0wIGJvdHRvbS0wIGxlZnQtMS8yIHctcHggcG9pbnRlci1ldmVudHMtbm9uZSB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tMTUwICR7Vj8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifWAsc3R5bGU6e3RyYW5zZm9ybToidHJhbnNsYXRlWCgtMC41cHgpIixiYWNrZ3JvdW5kOiJsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwyNTUsMjU1LDApIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjgpIDMwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSA3MCUsIHJnYmEoMjU1LDI1NSwyNTUsMCkgMTAwJSkifX0pLEooImRpdiIse2NsYXNzTmFtZTpgYWJzb2x1dGUgdG9wLTEvMiBsZWZ0LTEvMiB3LTEgaC03IHJvdW5kZWQteHMgLXRyYW5zbGF0ZS14LTEvMiAtdHJhbnNsYXRlLXktMS8yIHotMSBwb2ludGVyLWV2ZW50cy1ub25lIFt0cmFuc2l0aW9uOm9wYWNpdHlfMC4xNXNfZWFzZSxiYWNrZ3JvdW5kXzAuMTVzX2Vhc2VdICR7Vj8ib3BhY2l0eS0xMDAiOiJvcGFjaXR5LTAifSAke0c/ImJnLVsjOWE5YTllXSI6ImJnLVsjNmU2ZTcyXSJ9YH0pXX0pfWZ1bmN0aW9uIHA4KCl7bGV0WyQsS109RCgoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSIpLm1hdGNoZXM9PT0hMCk7cmV0dXJuIEkoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8IXdpbmRvdy5tYXRjaE1lZGlhKXJldHVybjtsZXQgUT13aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIiksWD0oKT0+SyhRLm1hdGNoZXMpO3JldHVybiBYKCksUS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFgpLCgpPT5RLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsWCl9LFtdKSwkfWZ1bmN0aW9uIG4yKCl7bGV0WyQsS109RCgoKT0+dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tYXRjaE1lZGlhPy4oIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcz09PSEwKTtyZXR1cm4gSSgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUifHwhd2luZG93Lm1hdGNoTWVkaWEpcmV0dXJuO2xldCBRPXdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLFg9KCk9PksoUS5tYXRjaGVzKTtyZXR1cm4gWCgpLFEuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixYKSwoKT0+US5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLFgpfSxbXSksJH12YXIgdTg9MjgwO3ZhciB1NT0id2lkdGggNzBtcyBsaW5lYXIiLGw1PSJ3aWR0aCAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSkiLGw4PSJwYWRkaW5nLXJpZ2h0IDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSIsZDg9ImN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIix0Mj0iY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSIsYzg9ImxpbmVhcigwLCAwLjMyIDklLCAwLjYyIDE4JSwgMC44NSAyNyUsIDEuMDEgMzYlLCAxLjA3IDQ1JSwgMS4wNSA1NiUsIDEuMDIgNzAlLCAxKSIsbzg9IjAuMTZzIixhOD0iMC4ycyIscjg9NSxpOD17aWRsZToxLGhvdmVyOjEuMDksZHJhZzoxLjEyfSxuOD17aWRsZToiIzY4NmU3OCIsaG92ZXI6IiNiN2JiYzIiLGRyYWc6IiNmNGY2ZmEifSxzOD17aWRsZToyLjY1LGhvdmVyOjQuMTUsZHJhZzo0LjY1fSx0OD17aWRsZTowLjM4LGhvdmVyOjAuODYsZHJhZzoxfSxzMj1udWxsO2Z1bmN0aW9uIGU4KCl7aWYoczIhPW51bGwpcmV0dXJuIHMyO2lmKHR5cGVvZiBDU1M+InUifHx0eXBlb2YgQ1NTLnN1cHBvcnRzIT09ImZ1bmN0aW9uIilyZXR1cm4hMTtyZXR1cm4gczI9Q1NTLnN1cHBvcnRzKCJhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uIiwibGluZWFyKDAsIDEpIiksczJ9dmFyIFo3PTQwLCQ5PTE0LEs5PTI0MCxROT0zMCxKOT0wLjE1LFk3PTgwLFg5PTE1MCxaOT0yNTAsZDU9InNlcnZlLXNpbTpzaW11bGF0b3ItZnJhbWUtc2NhbGUiO2Z1bmN0aW9uIGM1KCQsSyxRLFgpe2xldCBaPSQqMyxZPUs+MD9NYXRoLm1heCgxODAsSy00OCk6WixxPVE+MCYmTnVtYmVyLmlzRmluaXRlKFgpJiZYPjA/TWF0aC5tYXgoMTgwLChRLTEzNikqWCk6WjtyZXR1cm4gTWF0aC5tYXgoMTgwLE1hdGgubWluKFosWSxxKSl9ZnVuY3Rpb24gazAoJCxLLFEsWCxaKXtsZXQgWT1jNShLLFEsWCxaKSxxPU1hdGgubWluKDI4MCxZKTtyZXR1cm4gTWF0aC5taW4oWSxNYXRoLm1heChxLCQpKX1mdW5jdGlvbiBZOSgkLEssUSxYLFope2xldCBZPU51bWJlci5pc0Zpbml0ZShaKT8kKlo6JDtyZXR1cm4gazAoWSwkLEssUSxYKX1mdW5jdGlvbiBlMigkKXtpZighTnVtYmVyLmlzRmluaXRlKCQpKXJldHVybiAkO2xldCBLPXR5cGVvZiB3aW5kb3c8InUiP01hdGgubWF4KDEsd2luZG93LmRldmljZVBpeGVsUmF0aW98fDEpOjE7cmV0dXJuIE1hdGgucm91bmQoJCpLKS9LfWZ1bmN0aW9uIG81KCQsSyl7aWYoJDw9MHx8Szw9MClyZXR1cm4gMDtsZXQgUT0wLjU1LFg9JCpLKlEvKEsrUSokKTtyZXR1cm4gTWF0aC5taW4oWjcsWCl9ZnVuY3Rpb24gcTkoJCxLLFEpe2xldCBYPSQsWj1RO2ZvcihsZXQgWSBvZiBLKXtsZXQgcT1NYXRoLmFicygkLVkpO2lmKHE8WilYPVksWj1xfXJldHVybiBYfWZ1bmN0aW9uIEc5KCQpe2xldHtmcm9tOkssdG86USx2ZWxvY2l0eTpYLHN0aWZmbmVzczpaLGRhbXBpbmc6WSxvblVwZGF0ZTpxLG9uQ29tcGxldGU6R309JCxCPTAuNCxWPTAuMDMzMzMzMzMzMzMzMzMzMzMsQz1LLEw9WCxGPXBlcmZvcm1hbmNlLm5vdygpLE49MCxfPSExLHo9KFUpPT57aWYoXylyZXR1cm47bGV0IEE9TWF0aC5taW4oKFUtRikvMTAwMCwwLjAzMzMzMzMzMzMzMzMzMzMzKTtGPVU7bGV0IE09LVoqKEMtUSktWSpMO2lmKEwrPU0qQSxDKz1MKkEsTWF0aC5hYnMoTCk8MC40JiZNYXRoLmFicyhDLVEpPDAuNCl7cShRKSxHPy4oKTtyZXR1cm59cShDKSxOPXJlcXVlc3RBbmltYXRpb25GcmFtZSh6KX07cmV0dXJuIE49cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHopLCgpPT57aWYoXz0hMCxOKWNhbmNlbEFuaW1hdGlvbkZyYW1lKE4pfX1mdW5jdGlvbiBWOSgkKXtpZigkLmxlbmd0aDwyKXJldHVybiAwO2xldCBLPSRbJC5sZW5ndGgtMV0sUT0kWzBdO2ZvcihsZXQgWj0kLmxlbmd0aC0xO1o+PTA7Wi0tKWlmKEsudC0kW1pdLnQ+PVk3KXtRPSRbWl07YnJlYWt9bGV0IFg9KEsudC1RLnQpLzEwMDA7cmV0dXJuIFg+MD8oSy54LVEueCkvWDowfXZhciBCOT0iZHJvcC1zaGFkb3coMCAwLjVweCAxcHggcmdiYSgwLDAsMCwwLjEpKSBkcm9wLXNoYWRvdygwIDJweCA1cHggcmdiYSgwLDAsMCwwLjEzKSkiO2Z1bmN0aW9uIHE3KHthcmM6JCxwaGFzZTpLLHJlZHVjZWRNb3Rpb246USxoaWdoQ29udHJhc3Q6WCxmb2N1c1Zpc2libGU6Wn0pe2xldCBZPUshPT0iaWRsZSIscT1YPzEuMTI6MSxHPVE/MTppOFtLXSxCPXM4W0tdKnEsVj1YPzE6dDhbS10sQz1ZP284OmE4LEw9WT9kODp0MixGPVkmJmU4KCk/Yzg6TCxOPVE/Im5vbmUiOmB0cmFuc2Zvcm0gJHtDfSAke0Z9YCxfPVE/Im5vbmUiOmBzdHJva2UgJHtDfSAke0x9LCBzdHJva2Utd2lkdGggJHtDfSAke0x9YCx6PSQudmlld0JveFNpemUsVT0kLmQsQT17dHJhbnNmb3JtOmB0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoJHtHfSlgLHRyYW5zZm9ybU9yaWdpbjoiMTAwJSAxMDAlIix0cmFuc2l0aW9uOk4sd2lsbENoYW5nZTpRP3ZvaWQgMDoidHJhbnNmb3JtIixiYWNrZmFjZVZpc2liaWxpdHk6ImhpZGRlbiIsV2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5OiJoaWRkZW4ifTtyZXR1cm4gSigic3ZnIix7d2lkdGg6eixoZWlnaHQ6eix2aWV3Qm94OmAwIDAgJHt6fSAke3p9YCxmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLHNoYXBlUmVuZGVyaW5nOiJnZW9tZXRyaWNQcmVjaXNpb24iLHN0eWxlOntkaXNwbGF5OiJibG9jayIsb3ZlcmZsb3c6InZpc2libGUiLGN1cnNvcjoiaW5oZXJpdCIsdG91Y2hBY3Rpb246Im5vbmUiLHBvaW50ZXJFdmVudHM6Im5vbmUifSxjaGlsZHJlbjpbSigiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0ooInBhdGgiLHtkOlUsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDEwLCAxMzIsIDI1NSwgMC45NSkiLHN0cm9rZVdpZHRoOihyOCoyKzYpKnEsc3Ryb2tlTGluZWNhcDoicm91bmQiLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTp7b3BhY2l0eTpaPzAuOTU6MCx0cmFuc2l0aW9uOlE/Im9wYWNpdHkgODBtcyBsaW5lYXIiOmBvcGFjaXR5IDIwMG1zICR7dDJ9YCxmaWx0ZXI6ImRyb3Atc2hhZG93KDAgMCAycHggcmdiYSgxMCwxMzIsMjU1LDAuNTUpKSBkcm9wLXNoYWRvdygwIDAgNHB4IHJnYmEoMTAsMTMyLDI1NSwwLjMyKSkifX0pLEooInBhdGgiLHtkOlUsZmlsbDoibm9uZSIsc3Ryb2tlOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpIixzdHJva2VXaWR0aDoxLjUqcSxzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5Olo/MC43OjAsdHJhbnNpdGlvbjpRPyJvcGFjaXR5IDgwbXMgbGluZWFyIjpgb3BhY2l0eSAyMDBtcyAke3QyfWB9fSldfSksSigiZyIseyJhcmlhLWhpZGRlbiI6InRydWUiLHN0eWxlOkEsY2hpbGRyZW46SigiZyIse3N0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn0sY2hpbGRyZW46W0ooInBhdGgiLHtkOlUsc3Ryb2tlOiIjMzQzNjNiIixzdHJva2VXaWR0aDpCKzIuMipxLHN0cm9rZUxpbmVjYXA6InJvdW5kIix2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6e29wYWNpdHk6TWF0aC5taW4oMSxWKzAuMDgpLHRyYW5zaXRpb246YCR7X30sIG9wYWNpdHkgJHtDfSAke0x9YCxmaWx0ZXI6Qjl9fSksSigicGF0aCIse2Q6VSxzdHJva2U6bjhbS10sc3Ryb2tlV2lkdGg6QixzdHJva2VMaW5lY2FwOiJyb3VuZCIsdmVjdG9yRWZmZWN0OiJub24tc2NhbGluZy1zdHJva2UiLHN0eWxlOntvcGFjaXR5OlYsdHJhbnNpdGlvbjpgJHtffSwgb3BhY2l0eSAke0N9ICR7TH1gLGZpbHRlcjpCOX19KV19KX0pXX0pfWZ1bmN0aW9uIE45KHtzaW11bGF0b3JSZXNpemU6JCxkZXZpY2VUeXBlOkssc3RyZWFtQ29uZmlnOlEsY29udGFpbmVyV2lkdGg6WCxjb250YWluZXJIZWlnaHQ6Wn0pe2xldCBZPW4yKCkscT1wOCgpLFtHLEJdPUQoITEpLFY9TzEoKCk9Pnc1KHt0eXBlOkssY29uZmlnOlE/P251bGwsY29udGFpbmVyV2lkdGg6WCxjb250YWluZXJIZWlnaHQ6Wn0pLFtLLFEsWCxaXSksQz0kLmlzUmVzaXppbmd8fCQuaXNJbmVydGlhPyJkcmFnIjokLmhhbmRsZUhvdmVyZWQ/ImhvdmVyIjoiaWRsZSI7cmV0dXJuIEooImRpdiIse3JvbGU6InNlcGFyYXRvciIsImFyaWEtbGFiZWwiOiJSZXNpemUgc2ltdWxhdG9yIHdpZHRoLiBEcmFnIHRoZSBjb3JuZXIgb3IgdXNlIExlZnQgYW5kIFJpZ2h0IEFycm93IGtleXM7IGhvbGQgU2hpZnQgZm9yIGxhcmdlciBzdGVwcy4iLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLXZhbHVlbWluIjpNYXRoLnJvdW5kKCQubWluV2lkdGgpLCJhcmlhLXZhbHVlbWF4IjpNYXRoLnJvdW5kKCQubWF4V2lkdGgpLCJhcmlhLXZhbHVlbm93IjpNYXRoLnJvdW5kKCQuY29tbWl0dGVkV2lkdGgpLHRhYkluZGV4OjAscmVmOiQuaGFuZGxlUmVmLG9uS2V5RG93bjokLm9uS2V5RG93bixvblBvaW50ZXJEb3duOiQub25Qb2ludGVyRG93bixvblBvaW50ZXJNb3ZlOiQub25Qb2ludGVyTW92ZSxvblBvaW50ZXJVcDokLm9uUG9pbnRlckVuZCxvblBvaW50ZXJDYW5jZWw6JC5vblBvaW50ZXJFbmQsb25Mb3N0UG9pbnRlckNhcHR1cmU6JC5vblBvaW50ZXJFbmQsb25Qb2ludGVyRW50ZXI6KCk9PiQuc2V0SGFuZGxlSG92ZXJlZCghMCksb25Qb2ludGVyTGVhdmU6KCk9PiQuc2V0SGFuZGxlSG92ZXJlZCghMSksb25Gb2N1czooTCk9PntCKEwuY3VycmVudFRhcmdldC5tYXRjaGVzPy4oIjpmb2N1cy12aXNpYmxlIik/PyExKX0sb25CbHVyOigpPT5CKCExKSxzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixyaWdodDotMTQsYm90dG9tOi0xNCx3aWR0aDo2MCxoZWlnaHQ6NjAsYm9yZGVyOiJub25lIixwYWRkaW5nOjAsbWFyZ2luOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiZmxleC1lbmQiLGp1c3RpZnlDb250ZW50OiJmbGV4LWVuZCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGN1cnNvcjoibndzZS1yZXNpemUiLHRvdWNoQWN0aW9uOiJub25lIixwb2ludGVyRXZlbnRzOiJhdXRvIixvdXRsaW5lOiJub25lIix6SW5kZXg6MjUsV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6InRyYW5zcGFyZW50In0sY2hpbGRyZW46SihxNyx7YXJjOlYscGhhc2U6QyxyZWR1Y2VkTW90aW9uOlksaGlnaENvbnRyYXN0OnEsZm9jdXNWaXNpYmxlOkd9KX0pfXZhciBHNz1uZXcgU2V0KFsiaW1hZ2UvanBlZyIsImltYWdlL3BuZyIsImltYWdlL2dpZiIsImltYWdlL2hlaWMiLCJpbWFnZS9oZWlmIiwiaW1hZ2Uvd2VicCIsInZpZGVvL21wNCIsInZpZGVvL3F1aWNrdGltZSJdKSxhNT0xOTY2MDgsTDk9NTI0Mjg4MDAwLCQ1PSJhcHBsaWNhdGlvbi94LXNlcnZlLXNpbS1ob3N0LXBhdGgiO2FzeW5jIGZ1bmN0aW9uIEM5KCQsSyxRKXtsZXQgWD1hd2FpdCBLKGB4Y3J1biBzaW1jdGwgYWRkbWVkaWEgJHtRfSAke1oxKCQpfWApO2lmKFguZXhpdENvZGUhPT0wKXRocm93IEVycm9yKFguc3RkZXJyfHxgYWRkbWVkaWEgZmFpbGVkIChleGl0ICR7WC5leGl0Q29kZX0pYCl9ZnVuY3Rpb24gbTAoJCl7bGV0IEs9JC5uYW1lLFE9Sy5sYXN0SW5kZXhPZigiLiIpO2lmKFE+PTApcmV0dXJuIEsuc2xpY2UoUSsxKS50b0xvd2VyQ2FzZSgpO2lmKCQudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSlyZXR1cm4ibXA0IjtyZXR1cm4ianBnIn1mdW5jdGlvbiBVOSgkKXtpZihtMCgkKT09PSJpcGEiKXJldHVybiJpcGEiO2lmKEc3LmhhcygkLnR5cGUpKXJldHVybiJtZWRpYSI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gVjcoJCl7bGV0IEs9bmV3IFVpbnQ4QXJyYXkoJCksUT0iIjtmb3IobGV0IFg9MDtYPEsubGVuZ3RoO1grPTMyNzY4KVErPVN0cmluZy5mcm9tQ2hhckNvZGUoLi4uSy5zdWJhcnJheShYLFgrMzI3NjgpKTtyZXR1cm4gYnRvYShRKX1hc3luYyBmdW5jdGlvbiB6OSgkLEssUSxYKXtsZXQgWj0wO2ZvcihsZXQgWT0wO1k8JC5zaXplO1krPWE1KXtsZXQgcT1hd2FpdCAkLnNsaWNlKFksWSthNSkuYXJyYXlCdWZmZXIoKSxHPVY3KHEpLFY9YXdhaXQgUShgYmFzaCAtYyAnZWNobyAke0d9IHwgYmFzZTY0IC1kICR7WT09PTA/Ij4iOiI+PiJ9ICR7S30nYCk7aWYoVi5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3IoVi5zdGRlcnJ8fGBXcml0ZSBmYWlsZWQgKGV4aXQgJHtWLmV4aXRDb2RlfSlgKTtpZighWCljb250aW51ZTtsZXQgQz1NYXRoLm1pbihZK2E1LCQuc2l6ZSksTD1NYXRoLmZsb29yKEMvJC5zaXplKjEwMCk7aWYoTCE9PVopWj1MLFgoQy8kLnNpemUpfX1hc3luYyBmdW5jdGlvbiBGOSgkLEssUSxYKXtpZigkLnNpemU+TDkpdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7bGV0IFo9YC90bXAvJHtLfS0ke2NyeXB0by5yYW5kb21VVUlEKCl9LiR7UX1gO3JldHVybiBhd2FpdCB6OSgkLFosWCksWn1hc3luYyBmdW5jdGlvbiBIOSgkLEssUSxYLFope2lmKCQuc2l6ZT5MOSl0aHJvdyBFcnJvcigiRmlsZSB0b28gbGFyZ2UgKG1heCA1MDBNQikiKTtsZXQgWT1LPT09ImlwYSI/ImlwYSI6bTAoJCksRz1gL3RtcC8ke0s9PT0iaXBhIj8ic2VydmUtc2ltLWluc3RhbGwiOiJzZXJ2ZS1zaW0tdXBsb2FkIn0tJHtjcnlwdG8ucmFuZG9tVVVJRCgpfS4ke1l9YDt0cnl7WigwKSxhd2FpdCB6OSgkLEcsUSxaKSxaKG51bGwpO2xldCBCPUs9PT0iaXBhIj9geGNydW4gc2ltY3RsIGluc3RhbGwgJHtYfSAke0d9YDpgeGNydW4gc2ltY3RsIGFkZG1lZGlhICR7WH0gJHtHfWAsVj1hd2FpdCBRKEIpO2lmKFYuZXhpdENvZGUhPT0wKXtsZXQgQz1LPT09ImlwYSI/Imluc3RhbGwiOiJhZGRtZWRpYSI7dGhyb3cgRXJyb3IoVi5zdGRlcnJ8fGAke0N9IGZhaWxlZCAoZXhpdCAke1YuZXhpdENvZGV9KWApfX1maW5hbGx5e1EoYGJhc2ggLWMgJ3JtIC1mICR7R30nYCkuY2F0Y2goKCk9Pnt9KX19ZnVuY3Rpb24gQjcoJCl7cmV0dXJuImZpbGU6Ly8iKyQuc3BsaXQoIi8iKS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKCIvIil9ZnVuY3Rpb24gQTkoe3RvYXN0OiQsb25SZXZlYWw6SyxvbkRpc21pc3M6USxvblBhdXNlOlgsb25SZXN1bWU6Wn0pe2xldFtZLHFdPUQoITEpLEc9UyhudWxsKSxCPSQucGhhc2U9PT0ib3V0IixWPUI/ImFuaW1hdGUtW3NlcnZlLXNpbS10b2FzdC1wb3Atb3V0XzAuMnNfZWFzZS1pbl9mb3J3YXJkc10iOiJhbmltYXRlLVtzZXJ2ZS1zaW0tdG9hc3QtcG9wLWluXzAuMjJzX2N1YmljLWJlemllcigwLjIsMC44LDAuMiwxKV0iLEM9KCk9PntpZihCKVEoKX0sTD0oTik9PntpZighJC5wYXRoKXtOLnByZXZlbnREZWZhdWx0KCk7cmV0dXJufVgoKSxOLmRhdGFUcmFuc2Zlci5zZXREYXRhKCJ0ZXh0L3BsYWluIixCNygkLnBhdGgpKSxOLmRhdGFUcmFuc2Zlci5zZXREYXRhKCQ1LCQucGF0aCksTi5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZD0iY29weSI7bGV0IF89Ry5jdXJyZW50O2lmKF8pTi5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKF8sXy5vZmZzZXRXaWR0aC8yLF8ub2Zmc2V0SGVpZ2h0LzIpO3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+cSghMCkpfSxGPSgpPT57cSghMSksWigpfTtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiJmaXhlZCBib3R0b20tNiBsZWZ0LTEvMiAtdHJhbnNsYXRlLXgtMS8yIHotNDAiLG9uTW91c2VFbnRlcjpYLG9uTW91c2VMZWF2ZTpaLGNoaWxkcmVuOlskLnRodW1iJiZKKCJpbWciLHtyZWY6RywiZGF0YS10ZXN0aWQiOiJkcmFnLWltYWdlIixzcmM6JC50aHVtYixhbHQ6IiIsImFyaWEtaGlkZGVuIjohMCxkcmFnZ2FibGU6ITEsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOi05OTk5LGxlZnQ6MCx3aWR0aDo4MCxoZWlnaHQ6ODAsYm9yZGVyUmFkaXVzOjEyLG9iamVjdEZpdDoiY292ZXIiLHBvaW50ZXJFdmVudHM6Im5vbmUifX0pLEooImRpdiIse2NsYXNzTmFtZTpWLG9uQW5pbWF0aW9uRW5kOkMsY2hpbGRyZW46JC5zdGF0dXM9PT0iZXJyb3IiP0ooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMy41IHB5LTIuNSBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQteGwgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjQ1KV0iLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgYmctWyNmODcxNzFdIn0pLEooInNwYW4iLHtjbGFzc05hbWU6InNlbGVjdC10ZXh0IixjaGlsZHJlbjokLm1lc3NhZ2U/PyJTY3JlZW5zaG90IGZhaWxlZCJ9KV19KTpKKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6SyxkaXNhYmxlZDokLnN0YXR1cyE9PSJzYXZlZCIsZHJhZ2dhYmxlOiQuc3RhdHVzPT09InNhdmVkIixvbkRyYWdTdGFydDpMLG9uRHJhZ0VuZDpGLCJhcmlhLWxhYmVsIjoiT3BlbiBzY3JlZW5zaG90IGluIEZpbmRlciIsdGl0bGU6IkNsaWNrIHRvIHJldmVhbCBpbiBGaW5kZXIgwrcgZHJhZyB0byBjb3B5IHRoZSBmaWxlIixjbGFzc05hbWU6YGdyb3VwIGZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHBsLTIgcHItMy41IHB5LTIgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLXhsIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNDUpXSB0ZXh0LWxlZnQgY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy1bIzJhMmEyY10gZGlzYWJsZWQ6Y3Vyc29yLWRlZmF1bHQgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlXSAke1k/ImludmlzaWJsZSI6IiJ9YCxjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJzaXplLTkgcm91bmRlZC1tZCBvdmVyZmxvdy1oaWRkZW4gYmctd2hpdGUvMTAgc2hyaW5rLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcmluZy0xIHJpbmctd2hpdGUvMTAgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46JC50aHVtYj9KKCJpbWciLHtzcmM6JC50aHVtYixhbHQ6IiIsY2xhc3NOYW1lOiJzaXplLWZ1bGwgb2JqZWN0LWNvdmVyIixkcmFnZ2FibGU6ITF9KTpKKCJzcGFuIix7Y2xhc3NOYW1lOiJibG9jayBzaXplLTQgcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci13aGl0ZS8zMCBib3JkZXItdC13aGl0ZSBhbmltYXRlLVtncmlkLXNwaW5fMC44c19saW5lYXJfaW5maW5pdGVdIn0pfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGxlYWRpbmctdGlnaHQgcG9pbnRlci1ldmVudHMtbm9uZSIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZSIsY2hpbGRyZW46JC5zdGF0dXM9PT0ic2F2aW5nIj8iU2F2aW5nIFNjcmVlbnNob3TigKYiOiJTY3JlZW5zaG90IFNhdmVkIn0pLCQuc3RhdHVzPT09InNhdmVkIiYmSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS82MCIsY2hpbGRyZW46Ik9wZW4gaW4gRmluZGVyIn0pXX0pLCQuc3RhdHVzPT09InNhdmVkIiYmSihlMCx7Y2xhc3NOYW1lOiJtbC0xIHRleHQtd2hpdGUvODAgcG9pbnRlci1ldmVudHMtbm9uZSIsc2l6ZToxNixzdHJva2VXaWR0aDoyLjI1fSldfSl9KV19KX1mdW5jdGlvbiBfOSh7d2lkdGg6JCxoZWlnaHQ6Syx2aXNpYmxlOlF9KXtyZXR1cm4gSigiZGl2Iix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC0zIGJvdHRvbS0zIHotMjAgcG9pbnRlci1ldmVudHMtbm9uZSBzZWxlY3Qtbm9uZSByb3VuZGVkLWxnIHB4LTIuNSBweS0xIHRleHQtWzExLjVweF0gZm9udC1tb25vIGxlYWRpbmctbm9uZSB0cmFja2luZy13aWRlIHRleHQtd2hpdGUvOTUgYmctW3JnYmEoMjAsMjIsMjgsMC43OCldIHNoYWRvdy1bMF8xcHhfMnB4X3JnYmEoMCwwLDAsMC4xOCksMF82cHhfMThweF9yZ2JhKDAsMCwwLDAuMjgpLGluc2V0XzBfMF8wXzFweF9yZ2JhKDI1NSwyNTUsMjU1LDAuMDYpXSBiYWNrZHJvcC1ibHVyLW1kIGJhY2tkcm9wLXNhdHVyYXRlLTE1MCB3aGl0ZXNwYWNlLW5vd3JhcCIsc3R5bGU6e29wYWNpdHk6UT8xOjAsdHJhbnNmb3JtOmB0cmFuc2xhdGVZKCR7UT8wOjR9cHgpIHNjYWxlKCR7UT8xOjAuOTZ9KWAsdHJhbnNmb3JtT3JpZ2luOiIxMDAlIDEwMCUiLHRyYW5zaXRpb246Im9wYWNpdHkgMTgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSwgdHJhbnNmb3JtIDIyMG1zIGN1YmljLWJlemllcigwLjIsIDAuODIsIDAuMjIsIDEpIn0sY2hpbGRyZW46W01hdGgucm91bmQoJCksIiAiLEooInNwYW4iLHtjbGFzc05hbWU6Im9wYWNpdHktNjAgbXgtMC41IixjaGlsZHJlbjoiw5cifSksIiAiLE1hdGgucm91bmQoSyldfSl9ZnVuY3Rpb24gazkoe3N0cmVhbWluZzokfSl7bGV0IEs9JD8iIzRhZGU4MCI6IiM4ZThlOTMiO3JldHVybiBKKCJzcGFuIix7ImRhdGEtdGVzdGlkIjoic3RyZWFtLXN0YXR1cy1waWxsIixjbGFzc05hbWU6ImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtWzVweF0gdGV4dC1bMTJweF0gZm9udC1tb25vIGZvbnQtbWVkaXVtIGxlYWRpbmctbm9uZSB3aGl0ZXNwYWNlLW5vd3JhcCIsc3R5bGU6e2NvbG9yOkt9LCJhcmlhLWxpdmUiOiJwb2xpdGUiLGNoaWxkcmVuOltKKCJzcGFuIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE4c19lYXNlXSIsc3R5bGU6e2JhY2tncm91bmQ6S319KSwkPyJsaXZlIjoiY29ubmVjdGluZyJdfSl9ZnVuY3Rpb24gTjcoJCxLLFEpe2xldCBYPVEubGF0Kk1hdGguUEkvMTgwLFo9KCQtUS5sYXQpKk1hdGguUEkvMTgwO3JldHVybnt4OihLLVEubG5nKSpNYXRoLlBJLzE4MCpNYXRoLmNvcyhYKSo2MzcxMDAwLHo6LVoqNjM3MTAwMH19ZnVuY3Rpb24gTDcoJCxLLFEpe2xldCBYPVEubGF0Kk1hdGguUEkvMTgwLFo9LUsvNjM3MTAwMCooMTgwL01hdGguUEkpLFk9JC8oNjM3MTAwMCpNYXRoLmNvcyhYKSkqKDE4MC9NYXRoLlBJKTtyZXR1cm57bGF0OlEubGF0K1osbG5nOlEubG5nK1l9fWZ1bmN0aW9uIEM3KCQsSyxRLFgsWil7bGV0IFk9WipaLHE9WSpaLEc9KEIsVixDLEwpPT4wLjUqKDIqVisoLUIrQykqWisoMipCLTUqVis0KkMtTCkqWSsoLUIrMypWLTMqQytMKSpxKTtyZXR1cm57eDpHKCQueCxLLngsUS54LFgueCksejpHKCQueixLLnosUS56LFgueikseTpHKCQueSxLLnksUS55LFgueSkscmF3QWx0OkcoJC5yYXdBbHQsSy5yYXdBbHQsUS5yYXdBbHQsWC5yYXdBbHQpfX1mdW5jdGlvbiBVNygkLEssUSl7aWYoJC5sZW5ndGg8MilyZXR1cm4gJC5zbGljZSgpO2xldCBYPVtdLFo9JC5sZW5ndGgsWT1RP1o6Wi0xO2ZvcihsZXQgcT0wO3E8WTtxKyspe2xldCBHPSRbUT8ocS0xK1opJVo6TWF0aC5tYXgoMCxxLTEpXSxCPSRbcSVaXSxWPSRbKHErMSklWl0sQz0kW1E/KHErMiklWjpNYXRoLm1pbihaLTEscSsyKV0sTD1WLngtQi54LEY9Vi56LUIueixOPU1hdGguaHlwb3QoTCxGKSxfPU1hdGgubWF4KDIsTWF0aC5jZWlsKE4vSykpO2ZvcihsZXQgej0wO3o8Xzt6Kyspe2xldCBVPXovXztYLnB1c2goQzcoRyxCLFYsQyxVKSl9fWlmKCFRKVgucHVzaCgkW1otMV0pO3JldHVybiBYfWZ1bmN0aW9uIE85KCQpe2lmKCQud2F5cG9pbnRzLmxlbmd0aDwyKXRocm93IEVycm9yKGBUcmFpbCAkeyQuaWR9IG5lZWRzIGF0IGxlYXN0IDIgd2F5cG9pbnRzYCk7bGV0IEs9e2xhdDokLndheXBvaW50cy5yZWR1Y2UoKHosVSk9PnorVS5sYXQsMCkvJC53YXlwb2ludHMubGVuZ3RoLGxuZzokLndheXBvaW50cy5yZWR1Y2UoKHosVSk9PnorVS5sbmcsMCkvJC53YXlwb2ludHMubGVuZ3RofSxRPSQud2F5cG9pbnRzLm1hcCgoeik9PnouYWx0Pz8wKSxYPU1hdGgubWluKC4uLlEpLFo9TWF0aC5tYXgoLi4uUSksWT0kLndheXBvaW50cy5tYXAoKHopPT57bGV0e3g6VSx6OkF9PU43KHoubGF0LHoubG5nLEspLE09ei5hbHQ/PzA7cmV0dXJue3g6VSx6OkEseTpNLVgscmF3QWx0Ok19fSkscT1VNyhZLDgsISEkLmxvb3ApLEc9W10sQj0wO2ZvcihsZXQgej0wO3o8cS5sZW5ndGg7eisrKXtsZXQgVT1xW3pdO2lmKHo+MCl7bGV0IFQ9cVt6LTFdO0IrPU1hdGguaHlwb3QoVS54LVQueCxVLnotVC56LFUueS1ULnkpfWxldHtsYXQ6QSxsbmc6TX09TDcoVS54LFUueixLKSxFPU1hdGgubWF4KDAsVS55KTtHLnB1c2goe3g6VS54LHo6VS56LHk6RSxhcmM6QixsYXQ6QSxsbmc6TX0pfWxldCBWPTEvMCxDPS0xLzAsTD0xLzAsRj0tMS8wLE49MS8wLF89LTEvMDtmb3IobGV0IHogb2YgRyl7aWYoei54PFYpVj16Lng7aWYoei54PkMpQz16Lng7aWYoei56PEwpTD16Lno7aWYoei56PkYpRj16Lno7aWYoei55PE4pTj16Lnk7aWYoei55Pl8pXz16Lnl9cmV0dXJue3RyYWlsOiQsb3JpZ2luOksscG9pbnRzOkcsdG90YWxEaXN0YW5jZTpHW0cubGVuZ3RoLTFdLmFyYyxib3VuZHM6e3g6W1YsQ10seTpbTixfXSx6OltMLEZdfSxyYXdNaW5BbHQ6WCxyYXdNYXhBbHQ6Wn19ZnVuY3Rpb24gTzAoJCxLKXtsZXQgUT0kLnRvdGFsRGlzdGFuY2U7aWYoUT09PTApcmV0dXJuICQucG9pbnRzWzBdO2xldCBYPUs7aWYoJC50cmFpbC5sb29wKVg9KFglUStRKSVRO2Vsc2V7aWYoWDw9MClyZXR1cm4gJC5wb2ludHNbMF07aWYoWD49USlyZXR1cm4gJC5wb2ludHNbJC5wb2ludHMubGVuZ3RoLTFdfWxldCBaPTAsWT0kLnBvaW50cy5sZW5ndGgtMTt3aGlsZShaKzE8WSl7bGV0IEM9WitZPj4+MTtpZigkLnBvaW50c1tDXS5hcmM8PVgpWj1DO2Vsc2UgWT1DfWxldCBxPSQucG9pbnRzW1pdLEc9JC5wb2ludHNbWV0sQj1HLmFyYy1xLmFyYyxWPUI9PT0wPzA6KFgtcS5hcmMpL0I7cmV0dXJue3g6cS54KyhHLngtcS54KSpWLHo6cS56KyhHLnotcS56KSpWLHk6cS55KyhHLnktcS55KSpWLGFyYzpYLGxhdDpxLmxhdCsoRy5sYXQtcS5sYXQpKlYsbG5nOnEubG5nKyhHLmxuZy1xLmxuZykqVn19ZnVuY3Rpb24gcjUoJCl7c3dpdGNoKCQpe2Nhc2Uid2FsayI6cmV0dXJuIDEuNDtjYXNlInJ1biI6cmV0dXJuIDM7Y2FzZSJjeWNsZSI6cmV0dXJuIDUuNTtjYXNlImRyaXZlIjpyZXR1cm4gMTMuNH19dmFyIHo3PVt7bGF0OjM3LjMzMjcyLGxuZzotMTIyLjAwODMzLGFsdDo0OX0se2xhdDozNy4zMzMwOSxsbmc6LTEyMi4wMDczNSxhbHQ6NDh9LHtsYXQ6MzcuMzMzNzMsbG5nOi0xMjIuMDA2NjMsYWx0OjQ5fSx7bGF0OjM3LjMzNDU0LGxuZzotMTIyLjAwNjI3LGFsdDo0OX0se2xhdDozNy4zMzU0LGxuZzotMTIyLjAwNjMzLGFsdDo0OX0se2xhdDozNy4zMzYxOCxsbmc6LTEyMi4wMDY3OSxhbHQ6NDV9LHtsYXQ6MzcuMzM2NzUsbG5nOi0xMjIuMDA3NTksYWx0OjQ1fSx7bGF0OjM3LjMzNzA0LGxuZzotMTIyLjAwODYxLGFsdDo0Nn0se2xhdDozNy4zMzY5OCxsbmc6LTEyMi4wMDk2OSxhbHQ6NDh9LHtsYXQ6MzcuMzM2NjIsbG5nOi0xMjIuMDEwNjYsYWx0OjQ4fSx7bGF0OjM3LjMzNTk4LGxuZzotMTIyLjAxMTM4LGFsdDo0OX0se2xhdDozNy4zMzUxNyxsbmc6LTEyMi4wMTE3NCxhbHQ6NTB9LHtsYXQ6MzcuMzM0MzEsbG5nOi0xMjIuMDExNjksYWx0OjUwfSx7bGF0OjM3LjMzMzU0LGxuZzotMTIyLjAxMTIyLGFsdDo1MH0se2xhdDozNy4zMzI5Nixsbmc6LTEyMi4wMTA0MixhbHQ6NTF9LHtsYXQ6MzcuMzMyNjgsbG5nOi0xMjIuMDA5NCxhbHQ6NTB9XSxGNz1be2xhdDozNy44MzIxMixsbmc6LTEyMi40ODA2NSxhbHQ6MzB9LHtsYXQ6MzcuODI5MzcsbG5nOi0xMjIuNDc5NzQsYWx0OjMwfSx7bGF0OjM3LjgyNjQ5LGxuZzotMTIyLjQ3OTQsYWx0OjMwfSx7bGF0OjM3LjgyMzYyLGxuZzotMTIyLjQ3OTA3LGFsdDo0NX0se2xhdDozNy44MjA3NCxsbmc6LTEyMi40Nzg3MyxhbHQ6NTl9LHtsYXQ6MzcuODE3ODYsbG5nOi0xMjIuNDc4MzksYWx0OjY2fSx7bGF0OjM3LjgxNDk4LGxuZzotMTIyLjQ3ODA2LGFsdDo2Nn0se2xhdDozNy44MTIxMSxsbmc6LTEyMi40Nzc3MixhbHQ6NTh9LHtsYXQ6MzcuODA5MjMsbG5nOi0xMjIuNDc3MzQsYWx0OjQ0fSx7bGF0OjM3LjgwOTQ5LGxuZzotMTIyLjQ3NzMsYWx0OjQ1fSx7bGF0OjM3LjgxMjM2LGxuZzotMTIyLjQ3NzY1LGFsdDo1OX0se2xhdDozNy44MTUyNCxsbmc6LTEyMi40Nzc5OCxhbHQ6NjZ9LHtsYXQ6MzcuODE4MTIsbG5nOi0xMjIuNDc4MzIsYWx0OjY2fSx7bGF0OjM3LjgyMSxsbmc6LTEyMi40Nzg2NixhbHQ6NTh9LHtsYXQ6MzcuODIzODcsbG5nOi0xMjIuNDc5LGFsdDo0NH0se2xhdDozNy44MjY3NSxsbmc6LTEyMi40NzkzMyxhbHQ6MzB9LHtsYXQ6MzcuODI5NjMsbG5nOi0xMjIuNDc5NjcsYWx0OjMwfSx7bGF0OjM3LjgzMjMzLGxuZzotMTIyLjQ4MDcyLGFsdDozMH1dLEg3PVt7bGF0OjM3Ljg4NjY0LGxuZzotMTIyLjYyNTk5LGFsdDoxMjF9LHtsYXQ6MzcuODg4ODcsbG5nOi0xMjIuNjIzMzIsYWx0OjEzNX0se2xhdDozNy44OTExNSxsbmc6LTEyMi42MjE2LGFsdDoxNjR9LHtsYXQ6MzcuODkzNTMsbG5nOi0xMjIuNjE5MjEsYWx0OjE4MH0se2xhdDozNy44OTQ2Nixsbmc6LTEyMi42MTU3NyxhbHQ6MjIwfSx7bGF0OjM3Ljg5NjMxLGxuZzotMTIyLjYxMjY4LGFsdDoyNzN9LHtsYXQ6MzcuODk5MTcsbG5nOi0xMjIuNjEwOTgsYWx0OjMxM30se2xhdDozNy45MDE2Nixsbmc6LTEyMi42MDg1NSxhbHQ6MzQyfSx7bGF0OjM3LjkwMTk5LGxuZzotMTIyLjYwNjAxLGFsdDo0MDh9LHtsYXQ6MzcuOTAzMzksbG5nOi0xMjIuNjA0MDEsYWx0OjQ1MH0se2xhdDozNy45MDY2Mixsbmc6LTEyMi42MDI5MSxhbHQ6NDQwfSx7bGF0OjM3LjkwOTcxLGxuZzotMTIyLjYwMTczLGFsdDo0MzJ9LHtsYXQ6MzcuOTEyMTMsbG5nOi0xMjIuNjAwMDcsYWx0OjQzNn0se2xhdDozNy45MTQzOSxsbmc6LTEyMi41OTc4LGFsdDo0MTB9LHtsYXQ6MzcuOTEyODUsbG5nOi0xMjIuNTk1MDQsYWx0OjQyMn0se2xhdDozNy45MTI3NCxsbmc6LTEyMi41OTIwMixhbHQ6NDI1fSx7bGF0OjM3LjkxNSxsbmc6LTEyMi41OTAzMixhbHQ6NDEyfSx7bGF0OjM3LjkxNjM3LGxuZzotMTIyLjU4OTAzLGFsdDo0MDZ9LHtsYXQ6MzcuOTE0ODEsbG5nOi0xMjIuNTg1OTUsYWx0OjM4Mn0se2xhdDozNy45MTc0LGxuZzotMTIyLjU4Mzk4LGFsdDozNzJ9LHtsYXQ6MzcuOTE2NDIsbG5nOi0xMjIuNTgyMzYsYWx0OjM1Mn0se2xhdDozNy45MTQ4MSxsbmc6LTEyMi41ODAxMSxhbHQ6MzQyfV0sQTc9W3tsYXQ6NDAuNzgyMTYsbG5nOi03My45NjI1NCxhbHQ6Mzd9LHtsYXQ6NDAuNzgyMjEsbG5nOi03My45NjA5OCxhbHQ6MzZ9LHtsYXQ6NDAuNzgzMjgsbG5nOi03My45NjAxLGFsdDozNn0se2xhdDo0MC43ODQ0LGxuZzotNzMuOTU5MyxhbHQ6MzZ9LHtsYXQ6NDAuNzg1NSxsbmc6LTczLjk1ODQ4LGFsdDozNn0se2xhdDo0MC43ODY2NCxsbmc6LTczLjk1Nzc0LGFsdDozNn0se2xhdDo0MC43ODc5LGxuZzotNzMuOTU3NjQsYWx0OjM2fSx7bGF0OjQwLjc4ODk4LGxuZzotNzMuOTU3OTIsYWx0OjM2fSx7bGF0OjQwLjc4ODY4LGxuZzotNzMuOTU5NTEsYWx0OjM3fSx7bGF0OjQwLjc4ODk3LGxuZzotNzMuOTYxMTIsYWx0OjM2fSx7bGF0OjQwLjc4ODMzLGxuZzotNzMuOTYyNSxhbHQ6Mzd9LHtsYXQ6NDAuNzg4MjgsbG5nOi03My45NjQxNixhbHQ6Mzd9LHtsYXQ6NDAuNzg4MDUsbG5nOi03My45NjU3MyxhbHQ6MzZ9LHtsYXQ6NDAuNzg2OTEsbG5nOi03My45NjYzNixhbHQ6MzZ9LHtsYXQ6NDAuNzg1NjYsbG5nOi03My45NjY2NSxhbHQ6MzZ9LHtsYXQ6NDAuNzg0NTgsbG5nOi03My45NjYwOCxhbHQ6MzZ9LHtsYXQ6NDAuNzg0MDIsbG5nOi03My45NjQ1OSxhbHQ6MzZ9LHtsYXQ6NDAuNzgzMjIsbG5nOi03My45NjMzNCxhbHQ6Mzd9XSxfNz1be2xhdDozNy41OTY1OSxsbmc6LTEyMi41MDMxNixhbHQ6NH0se2xhdDozNy41OTU1NSxsbmc6LTEyMi41MDQyNCxhbHQ6NH0se2xhdDozNy41OTQ1Mixsbmc6LTEyMi41MDUzNCxhbHQ6NX0se2xhdDozNy41OTMyOSxsbmc6LTEyMi41MDU4OCxhbHQ6OX0se2xhdDozNy41OTIxMixsbmc6LTEyMi41MDUwOCxhbHQ6MjB9LHtsYXQ6MzcuNTkxLGxuZzotMTIyLjUwNDEzLGFsdDoyOX0se2xhdDozNy41ODk3NCxsbmc6LTEyMi41MDQxNixhbHQ6NDB9LHtsYXQ6MzcuNTg4Nyxsbmc6LTEyMi41MDUyNCxhbHQ6NTF9LHtsYXQ6MzcuNTg3NDUsbG5nOi0xMjIuNTA0OTYsYWx0OjYwfSx7bGF0OjM3LjU4NjI3LGxuZzotMTIyLjUwNDIyLGFsdDo3MX0se2xhdDozNy41ODUzOSxsbmc6LTEyMi41MDUzNCxhbHQ6ODJ9LHtsYXQ6MzcuNTg1MDUsbG5nOi0xMjIuNTA2OTgsYWx0OjkzfSx7bGF0OjM3LjU4NTM5LGxuZzotMTIyLjUwNTM0LGFsdDo4Mn0se2xhdDozNy41ODYyNyxsbmc6LTEyMi41MDQyMixhbHQ6NzF9LHtsYXQ6MzcuNTg3NDUsbG5nOi0xMjIuNTA0OTYsYWx0OjYwfSx7bGF0OjM3LjU4ODcsbG5nOi0xMjIuNTA1MjQsYWx0OjUxfSx7bGF0OjM3LjU4OTc0LGxuZzotMTIyLjUwNDE2LGFsdDo0MH0se2xhdDozNy41OTEsbG5nOi0xMjIuNTA0MTMsYWx0OjI5fSx7bGF0OjM3LjU5MjEyLGxuZzotMTIyLjUwNTA4LGFsdDoyMH0se2xhdDozNy41OTMyOSxsbmc6LTEyMi41MDU4OCxhbHQ6OX0se2xhdDozNy41OTQ1Mixsbmc6LTEyMi41MDUzNCxhbHQ6NX0se2xhdDozNy41OTU1NSxsbmc6LTEyMi41MDQyNCxhbHQ6NH1dLEQwPVt7aWQ6ImFwcGxlLXBhcmstbG9vcCIsbmFtZToiQXBwbGUgUGFyayBMb29wIixkZXNjcmlwdGlvbjoiQ3VwZXJ0aW5vIOKAoiBmbGF0IHJpbmcgcm9hZCIsbW9kZToid2FsayIsd2F5cG9pbnRzOno3LGxvb3A6ITB9LHtpZDoiZ29sZGVuLWdhdGUiLG5hbWU6IkdvbGRlbiBHYXRlIENyb3NzaW5nIixkZXNjcmlwdGlvbjoiU2FuIEZyYW5jaXNjbyDigKIgYnJpZGdlIHJvdW5kLXRyaXAiLG1vZGU6InJ1biIsd2F5cG9pbnRzOkY3LGxvb3A6ITB9LHtpZDoidGFtLXJpZGdlIixuYW1lOiJNdC4gVGFtIFJpZGdlIixkZXNjcmlwdGlvbjoiU3RpbnNvbiBCZWFjaCDigKIgU3RlZXAgUmF2aW5lICsgTWF0dCBEYXZpcyBsb29wIixtb2RlOiJ3YWxrIix3YXlwb2ludHM6SDcsbG9vcDohMH0se2lkOiJjZW50cmFsLXBhcmsiLG5hbWU6IlJlc2Vydm9pciBMb29wIixkZXNjcmlwdGlvbjoiQ2VudHJhbCBQYXJrIOKAoiAyLjUga20iLG1vZGU6InJ1biIsd2F5cG9pbnRzOkE3LGxvb3A6ITB9LHtpZDoicGNoLXBhY2lmaWNhIixuYW1lOiJQYWNpZmljIENvYXN0IEh3eSIsZGVzY3JpcHRpb246IlBhY2lmaWNhIOKAoiBEZXZpbCdzIFNsaWRlIHJvdW5kLXRyaXAiLG1vZGU6ImRyaXZlIix3YXlwb2ludHM6XzcsbG9vcDohMH1dO2Z1bmN0aW9uIHQxKHtvcGVuOiQsb25PcGVuQ2hhbmdlOkssc3VtbWFyeTpRLGNoaWxkcmVuOlgsc3VtbWFyeUNsYXNzTmFtZTpaPSIiLGJvZHlDbGFzc05hbWU6WT0iZmxleCBmbGV4LWNvbCBnYXAtMi41IHB0LTIuNSIsY2xhc3NOYW1lOnE9IiIsLi4uR30pe3JldHVybiBKKCJkZXRhaWxzIix7b3BlbjokLG9uVG9nZ2xlOihCKT0+SyhCLmN1cnJlbnRUYXJnZXQub3BlbiksY2xhc3NOYW1lOmBsZW0tc2VjdGlvbiBiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIgJHtxfWAsLi4uRyxjaGlsZHJlbjpbSigic3VtbWFyeSIse2NsYXNzTmFtZTpgbGVtLXRvZ2dsZSBjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSB0ZXh0LXdoaXRlLzkwIG1pbi1oLVszNnB4XSBsZWFkaW5nLW5vbmUgcHktMi41IHB4LTEgLW15LTIgLW14LTEgdy1bY2FsYygxMDAlKzhweCldICR7Wn1gLGNoaWxkcmVuOltRLEooRzIse29wZW46JH0pXX0pLEooImRpdiIse2NsYXNzTmFtZTpZLGNoaWxkcmVuOlh9KV19KX1mdW5jdGlvbiBLNSh7bGFiZWw6JCx2YWx1ZTpLLG9wdGlvbnM6USxkaXNhYmxlZDpYLG9uQ2hhbmdlOlosY2xhc3NOYW1lOll9KXtsZXRbcSxHXT1EKCExKSxCPVMobnVsbCksVj1TKG51bGwpLFtDLExdPUQobnVsbCksRj0oKT0+e2xldCBVPUIuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoIVUpcmV0dXJuO0woe3RvcDpVLmJvdHRvbSs0LGxlZnQ6VS5sZWZ0LG1pbldpZHRoOlUud2lkdGh9KX07bzAoKCk9PntpZihxKUYoKX0sW3FdKSxvMCgoKT0+e2lmKCFxfHwhQylyZXR1cm47bGV0IFU9Vi5jdXJyZW50O2lmKCFVKXJldHVybjtsZXQgQT04LE09d2luZG93LmlubmVyV2lkdGgtVS5vZmZzZXRXaWR0aC1BO2lmKEMubGVmdD5NKUwoey4uLkMsbGVmdDpNYXRoLm1heChBLE0pfSl9LFtxLENdKSxJKCgpPT57aWYoIXEpcmV0dXJuO2xldCBVPSgpPT5HKCExKSxBPShFKT0+e2xldCBUPUUudGFyZ2V0O2lmKCFWLmN1cnJlbnQ/LmNvbnRhaW5zKFQpJiYhQi5jdXJyZW50Py5jb250YWlucyhUKSlVKCl9LE09KEUpPT57aWYoIVYuY3VycmVudD8uY29udGFpbnMoRS50YXJnZXQpKUYoKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLE0sITApLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLFUpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsQSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsTSwhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsVSl9fSxbcV0pO2xldCBOPVMoITEpO0koKCk9PntpZighcSl7Ti5jdXJyZW50PSExO3JldHVybn1pZighQ3x8Ti5jdXJyZW50KXJldHVybjtsZXQgVT1WLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3JBbGwoIltyb2xlPW9wdGlvbl0iKTtpZighVT8ubGVuZ3RoKXJldHVybjtOLmN1cnJlbnQ9ITA7bGV0IEE9US5maW5kSW5kZXgoKE0pPT5NLnZhbHVlPT09Syk7VVtNYXRoLm1heChBLDApXT8uZm9jdXMoKX0sW3EsQyxRLEtdKTtsZXQgXz0oVSk9PntsZXQgQT1bLi4uVi5jdXJyZW50Py5xdWVyeVNlbGVjdG9yQWxsKCJbcm9sZT1vcHRpb25dIik/P1tdXSxNPUEuaW5kZXhPZihkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtpZihVLmtleT09PSJBcnJvd0Rvd24ifHxVLmtleT09PSJBcnJvd1VwIil7VS5wcmV2ZW50RGVmYXVsdCgpO2xldCBFPVUua2V5PT09IkFycm93RG93biI/TWF0aC5taW4oTSsxLEEubGVuZ3RoLTEpOk1hdGgubWF4KE0tMSwwKTtBW0VdPy5mb2N1cygpfWVsc2UgaWYoVS5rZXk9PT0iRXNjYXBlIilVLnByZXZlbnREZWZhdWx0KCksRyghMSksQi5jdXJyZW50Py5mb2N1cygpfSx6PVEuZmluZCgoVSk9PlUudmFsdWU9PT1LKTtyZXR1cm4gSihlLHtjaGlsZHJlbjpbSigiYnV0dG9uIix7cmVmOkIsdHlwZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6JCwiYXJpYS1oYXNwb3B1cCI6Imxpc3Rib3giLCJhcmlhLWV4cGFuZGVkIjpxLGRpc2FibGVkOlgsb25DbGljazooKT0+RygoVSk9PiFVKSxjbGFzc05hbWU6YHRleHQtbGVmdCBmb250LVtpbmhlcml0XSBjdXJzb3ItcG9pbnRlciBkaXNhYmxlZDpjdXJzb3ItZGVmYXVsdCAke1k/PyIifWAsY2hpbGRyZW46Sigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgdHJ1bmNhdGUiLGNoaWxkcmVuOno/LmxhYmVsPz9LfSl9KSxxJiZDJiZxOChKKCJkaXYiLHtyZWY6Vixyb2xlOiJsaXN0Ym94IiwiYXJpYS1sYWJlbCI6JCxvbktleURvd246XyxzdHlsZTp7dG9wOkMudG9wLGxlZnQ6Qy5sZWZ0LG1pbldpZHRoOkMubWluV2lkdGh9LGNsYXNzTmFtZToiZml4ZWQgbWF4LWgtOTAgb3ZlcmZsb3cteS1hdXRvIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1bMTBweF0gcC0xIHNoYWRvdy1bMF84cHhfMjRweF9yZ2JhKDAsMCwwLDAuNSldIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgei01MCIsY2hpbGRyZW46US5tYXAoKFUpPT5KKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHJvbGU6Im9wdGlvbiIsImFyaWEtc2VsZWN0ZWQiOlUudmFsdWU9PT1LLG9uQ2xpY2s6KCk9PntaKFUudmFsdWUpLEcoITEpLEIuY3VycmVudD8uZm9jdXMoKX0sY2xhc3NOYW1lOmBibG9jayB3LWZ1bGwgdGV4dC1sZWZ0IGZvbnQtW2luaGVyaXRdIHB4LTIuNSBweS0xIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgd2hpdGVzcGFjZS1ub3dyYXAgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6Ymctd2hpdGUvOCBmb2N1cy12aXNpYmxlOmJnLXdoaXRlLzggb3V0bGluZS1ub25lICR7VS52YWx1ZT09PUs/InRleHQtYWNjZW50IjoiIn1gLGNoaWxkcmVuOlUubGFiZWx9LFUudmFsdWUpKX0pLGRvY3VtZW50LmJvZHkpXX0pfXZhciBrNz02NTAsaTU9WzEsMiw1LDIwXSxEOT0xMDAwLG41PXtzdGF0dXM6ImlkbGUiLGFyYzowLGVsYXBzZWRNczowfTtmdW5jdGlvbiBFOSh7dWRpZDokLGV4ZWM6S30pe2xldFtRLFhdPUQoITEpLFtaLFldPUQoRDBbMF0uaWQpLFtxLEddPUQoRDBbMF0ubW9kZSksW0IsVl09RCgxKSxbQyxMXT1EKG41KSxbRixOXT1EKG51bGwpLF89TzEoKCk9PkQwLmZpbmQoKGQpPT5kLmlkPT09Wik/P0QwWzBdLFtaXSksej1PMSgoKT0+TzkoXyksW19dKSxVPVMoMCksQT1TKCJpZGxlIiksTT1TKHI1KHEpKkIpLEU9UygwKSxUPVMoeiksYj1TKG51bGwpO0koKCk9PntNLmN1cnJlbnQ9cjUocSkqQn0sW3EsQl0pO2xldCB4PVMobnVsbCk7SSgoKT0+e2xldCBkPVQuY3VycmVudCxhPVUuY3VycmVudDtpZihULmN1cnJlbnQ9eixkJiZkIT09eil4LmN1cnJlbnQ9TTcoZCxhLHoscGVyZm9ybWFuY2Uubm93KCkpO1UuY3VycmVudD0wLEUuY3VycmVudD0wLEEuY3VycmVudD0iaWRsZSIsYi5jdXJyZW50PW51bGwsTChuNSl9LFt6XSk7bGV0IG09UygwKSxSPVMobnVsbCksbz1TKG51bGwpO0koKCk9PntsZXQgZD0wLGE9KEsxKT0+e2xldCBZMT1SLmN1cnJlbnQsVjE9WTE9PW51bGw/MTY6TWF0aC5taW4oNjQsSzEtWTEpO2lmKFIuY3VycmVudD1LMSxtLmN1cnJlbnQ9KG0uY3VycmVudCtWMSowLjAwMDEyKSUoTWF0aC5QSSoyKSxBLmN1cnJlbnQ9PT0icGxheWluZyIpe2xldCBRMT1NLmN1cnJlbnQqVjEvMTAwMDtVLmN1cnJlbnQrPVExLEUuY3VycmVudCs9VjE7bGV0IFUxPVQuY3VycmVudC50b3RhbERpc3RhbmNlO2lmKCFULmN1cnJlbnQudHJhaWwubG9vcCYmVS5jdXJyZW50Pj1VMSlVLmN1cnJlbnQ9VTEsQS5jdXJyZW50PSJwYXVzZWQiLEwoe3N0YXR1czoicGF1c2VkIixhcmM6VTEsZWxhcHNlZE1zOkUuY3VycmVudH0pfWxldCBjPW8uY3VycmVudDtpZihjKXtsZXQgUTE9VC5jdXJyZW50LFUxPW51bGwsdT14LmN1cnJlbnQ7aWYodSl7bGV0IGo9KEsxLXUuc3RhcnRNcykvazc7aWYoaj49MSl4LmN1cnJlbnQ9bnVsbDtlbHNle2xldCBrPVA3KGopO1ExPVQ3KHUsayksVTE9e3g6dS5wcmV2TWFya2VyLngrKHUubmV4dE1hcmtlci54LXUucHJldk1hcmtlci54KSprLHk6dS5wcmV2TWFya2VyLnkrKHUubmV4dE1hcmtlci55LXUucHJldk1hcmtlci55KSprLHo6dS5wcmV2TWFya2VyLnorKHUubmV4dE1hcmtlci56LXUucHJldk1hcmtlci56KSprfX19dzcoYyxRMSxVLmN1cnJlbnQsbS5jdXJyZW50LEsxLEEuY3VycmVudD09PSJwbGF5aW5nIixVMSl9ZD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYSl9O3JldHVybiBkPXJlcXVlc3RBbmltYXRpb25GcmFtZShhKSwoKT0+Y2FuY2VsQW5pbWF0aW9uRnJhbWUoZCl9LFtdKSxJKCgpPT57bGV0IGQ9c2V0SW50ZXJ2YWwoKCk9PntpZihBLmN1cnJlbnQ9PT0icGxheWluZyIpTCh7c3RhdHVzOiJwbGF5aW5nIixhcmM6VS5jdXJyZW50LGVsYXBzZWRNczpFLmN1cnJlbnR9KX0sMjUwKTtyZXR1cm4oKT0+Y2xlYXJJbnRlcnZhbChkKX0sW10pLEkoKCk9PntpZihDLnN0YXR1cyE9PSJwbGF5aW5nIilyZXR1cm47bGV0IGQ9ITEsYT0wLEsxPW51bGwsWTE9YXN5bmMoKT0+e2lmKGR8fEsxKXJldHVybjtsZXQgYz1EYXRlLm5vdygpO2lmKGMtYTxEOSlyZXR1cm47YT1jO2xldCBRMT1PMChULmN1cnJlbnQsVS5jdXJyZW50KSxVMT1geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gc2V0ICR7UTEubGF0LnRvRml4ZWQoNyl9LCR7UTEubG5nLnRvRml4ZWQoNyl9YDtLMT1LKFUxKS50aGVuKCh1KT0+e2lmKGQpcmV0dXJuO2lmKHUuZXhpdENvZGUhPT0wKU4odzkodS5zdGRlcnIpfHwic2ltY3RsIGxvY2F0aW9uIHNldCBmYWlsZWQiKTtlbHNlIE4obnVsbCl9KS5jYXRjaCgodSk9PntpZighZClOKHUgaW5zdGFuY2VvZiBFcnJvcj91Lm1lc3NhZ2U6U3RyaW5nKHUpKX0pLmZpbmFsbHkoKCk9PntLMT1udWxsfSl9O1kxKCk7bGV0IFYxPXNldEludGVydmFsKFkxLEQ5KTtyZXR1cm4oKT0+e2Q9ITAsY2xlYXJJbnRlcnZhbChWMSl9fSxbQy5zdGF0dXMsJCxLXSk7bGV0IGk9UCgoKT0+e2lmKEEuY3VycmVudD09PSJwbGF5aW5nIil7QS5jdXJyZW50PSJwYXVzZWQiLEwoKGQpPT4oey4uLmQsc3RhdHVzOiJwYXVzZWQifSkpO3JldHVybn1pZihVLmN1cnJlbnQ+PVQuY3VycmVudC50b3RhbERpc3RhbmNlJiYhVC5jdXJyZW50LnRyYWlsLmxvb3ApVS5jdXJyZW50PTAsRS5jdXJyZW50PTA7aWYoYi5jdXJyZW50PT1udWxsKXtsZXQgZD1PMChULmN1cnJlbnQsVS5jdXJyZW50KTtiLmN1cnJlbnQ9e2xhdDpkLmxhdCxsbmc6ZC5sbmd9fUEuY3VycmVudD0icGxheWluZyIsTCgoZCk9Pih7Li4uZCxzdGF0dXM6InBsYXlpbmciLGFyYzpVLmN1cnJlbnQsZWxhcHNlZE1zOkUuY3VycmVudH0pKX0sW10pLFgxPVAoKCk9PntBLmN1cnJlbnQ9ImlkbGUiLFUuY3VycmVudD0wLEUuY3VycmVudD0wLEwobjUpO2xldCBkPWIuY3VycmVudDtiLmN1cnJlbnQ9bnVsbDtsZXQgYT1kP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBzZXQgJHtkLmxhdC50b0ZpeGVkKDcpfSwke2QubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7JH0gY2xlYXJgO0soYSkudGhlbigoSzEpPT57aWYoSzEuZXhpdENvZGUhPT0wKU4odzkoSzEuc3RkZXJyKXx8bnVsbCk7ZWxzZSBOKG51bGwpfSl9LFtLLCRdKSwkMT1QKChkKT0+e1koZCk7bGV0IGE9RDAuZmluZCgoSzEpPT5LMS5pZD09PWQpO2lmKGEpRyhhLm1vZGUpfSxbXSk7SSgoKT0+KCk9PntpZihBLmN1cnJlbnQ9PT0iaWRsZSIpcmV0dXJuO2xldCBkPWIuY3VycmVudCxhPWQ/YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAkeyR9IHNldCAke2QubGF0LnRvRml4ZWQoNyl9LCR7ZC5sbmcudG9GaXhlZCg3KX1gOmB4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHskfSBjbGVhcmA7SyhhKS5jYXRjaCgoKT0+e30pfSxbSywkXSk7bGV0IHM9Qy5zdGF0dXM9PT0icGxheWluZyIsTDE9cz9gJHt0NShDLmFyYyl9IMK3ICR7VDkoQy5lbGFwc2VkTXMpfWA6dDUoei50b3RhbERpc3RhbmNlKTtyZXR1cm4gSih0MSx7b3BlbjpRLG9uT3BlbkNoYW5nZTpYLHN1bW1hcnlDbGFzc05hbWU6ImdyaWQgW2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvX21pbm1heCgwLDFmcilfYXV0b10gW2NvbnRhaW5lci10eXBlOmlubGluZS1zaXplXSBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC1sZWZ0IixzdW1tYXJ5OkooZSx7Y2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS81MCB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0gbGVhZGluZy1ub25lIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46IkxvY2F0aW9uIn0pLFE/Sigic3BhbiIseyJkYXRhLWxvY2F0aW9uLXN0YXR1cyI6ITAsY2xhc3NOYW1lOiJtaW4tdy0wIHRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IGp1c3RpZnktc2VsZi1lbmQgbGVhZGluZy1ub25lIHdoaXRlc3BhY2Utbm93cmFwIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIG1heC13LWZ1bGwiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJzaXplLTEuNSByb3VuZGVkLWZ1bGwgc2hyaW5rLTAgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjJzLGJveC1zaGFkb3dfMC4yc10iLHN0eWxlOntiYWNrZ3JvdW5kOnM/IiM0YWRlODAiOnoudG90YWxEaXN0YW5jZT4wPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMykiOiJ0cmFuc3BhcmVudCIsYm94U2hhZG93OnM/IjAgMCA2cHggcmdiYSg3NCwyMjIsMTI4LDAuNykiOiJub25lIn19KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIixjaGlsZHJlbjpMMX0pLCFzJiZKKCJzcGFuIix7ImRhdGEtbG9jYXRpb24tc3RhdHVzLXRvdGFsIjohMCxjbGFzc05hbWU6InNocmluay0wIixjaGlsZHJlbjoidG90YWwifSldfSk6Sigic3BhbiIse30pXX0pLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTEiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGJsb2NrIixjaGlsZHJlbjpbSihLNSx7bGFiZWw6IlRyYWlsIix2YWx1ZTpaLG9uQ2hhbmdlOiQxLG9wdGlvbnM6RDAubWFwKChkKT0+KHt2YWx1ZTpkLmlkLGxhYmVsOmQubmFtZX0pKSxjbGFzc05hbWU6ImJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzkwIHRleHQtWzEycHhdIHB5LTEuNSBwci1bMjZweF0gcGwtMiB3LWZ1bGwgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxib3JkZXItY29sb3JfMC4xMnNdIGhvdmVyOmJnLXdoaXRlL1swLjA3XSBob3Zlcjpib3JkZXItW3JnYmEoMjU1LDI1NSwyNTUsMC4xNildIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpiZy13aGl0ZS9bMC4wOF0gZm9jdXM6Ym9yZGVyLVtyZ2JhKDI1NSwyNTUsMjU1LDAuMjQpXSJ9KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSByaWdodC1bOXB4XSB0b3AtMS8yIC10cmFuc2xhdGUteS0xLzIgcG9pbnRlci1ldmVudHMtbm9uZSBmbGV4IGl0ZW1zLWNlbnRlciIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46SihHMix7b3BlbjohMX0pfSldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMHB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpfLmRlc2NyaXB0aW9ufSldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwgcm91bmRlZC1bMTBweF0gb3ZlcmZsb3ctaGlkZGVuIGJnLVsjMGEwYTBjXSBib3JkZXIgYm9yZGVyLXdoaXRlL1swLjA2XSBbYXNwZWN0LXJhdGlvOjE2LzExXSIsY2hpbGRyZW46W0ooImNhbnZhcyIse3JlZjpvLGNsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBibG9jayJ9KSxKKEQ3LHtwcmVwYXJlZDp6fSldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyXzFmcl8xZnJdIGdhcC0xLjUiLGNoaWxkcmVuOltKKHM1LHtsYWJlbDoiRGlzdGFuY2UiLHZhbHVlOnQ1KEMuYXJjKX0pLEooczUse2xhYmVsOiJQYWNlIix2YWx1ZTpJNyhNLmN1cnJlbnQpfSksSihzNSx7bGFiZWw6IkVsYXBzZWQiLHZhbHVlOlQ5KEMuZWxhcHNlZE1zKX0pXX0pLEooImRpdiIse2NsYXNzTmFtZToiZmxleCBnYXAtMS41IixjaGlsZHJlbjpbSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOmksY2xhc3NOYW1lOmBmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTIuNSBib3JkZXItbm9uZSByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gJHtzPyJiZy13aGl0ZS9bMC4xNl0gdGV4dC13aGl0ZSBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjIyXSI6ImJnLXN1Y2Nlc3MtZW1lcmFsZCB0ZXh0LVsjMDYyMDE4XSBlbmFibGVkOmhvdmVyOmJyaWdodG5lc3MtWzEuMDhdIn1gLCJhcmlhLXByZXNzZWQiOnMsdGl0bGU6cz8iUGF1c2UiOiJQbGF5IixjaGlsZHJlbjpbcz9KKHk1LHt9KTpKKFYyLHt9KSxKKCJzcGFuIix7Y2hpbGRyZW46cz8iUGF1c2UiOiJQbGF5In0pXX0pLEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpYMSxjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcHktMiBweC0zIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1bN3B4XSB0ZXh0LVsxMnB4XSBmb250LW1lZGl1bSBiZy10cmFuc3BhcmVudCB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIGZvbnQtW2luaGVyaXRdIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMDZdIGVuYWJsZWQ6aG92ZXI6Ym9yZGVyLXdoaXRlLzIwIGVuYWJsZWQ6aG92ZXI6dGV4dC13aGl0ZSBkaXNhYmxlZDpvcGFjaXR5LTQwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCIsZGlzYWJsZWQ6Qy5zdGF0dXM9PT0iaWRsZSImJkMuYXJjPT09MCx0aXRsZToiU3RvcCBhbmQgY2xlYXIgc2ltdWxhdGVkIGxvY2F0aW9uIixjaGlsZHJlbjpbSihCMix7fSksSigic3BhbiIse2NoaWxkcmVuOiJTdG9wIn0pXX0pXX0pLEooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LXJvdyBpdGVtcy1zdHJldGNoIGdhcC0xLjUiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4tdy0wIixjaGlsZHJlbjpKKE83LHthcmlhTGFiZWw6IlRyYW5zcG9ydCBtb2RlIix2YWx1ZTpxLG9uQ2hhbmdlOihkKT0+RyhkKSxvcHRpb25zOlt7dmFsdWU6IndhbGsiLGxhYmVsOiJXYWxrIixpY29uOkooUzUse30pfSx7dmFsdWU6InJ1biIsbGFiZWw6IlJ1biIsaWNvbjpKKFI1LHt9KX0se3ZhbHVlOiJjeWNsZSIsbGFiZWw6IkN5Y2xlIixpY29uOkooeDUse30pfSx7dmFsdWU6ImRyaXZlIixsYWJlbDoiRHJpdmUiLGljb246Sih2NSx7fSl9XX0pfSksSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT57bGV0IGQ9aTUuaW5kZXhPZihCKSxhPWk1WyhkKzEpJWk1Lmxlbmd0aF07VihhKX0sY2xhc3NOYW1lOmBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMSBweC0yLjUgYm9yZGVyIHJvdW5kZWQtWzdweF0gY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gdGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCBtaW4tdy1bNTZweF0gYWN0aXZlOnNjYWxlLVswLjk3XSAke0I+MT8iYmctd2hpdGUgYm9yZGVyLXdoaXRlIHRleHQtWyMwYTBhMGNdIGhvdmVyOmJnLXdoaXRlL1swLjg4XSBob3Zlcjpib3JkZXItd2hpdGUvWzAuODhdIGhvdmVyOnRleHQtWyMwYTBhMGNdIjoiYmctd2hpdGUvWzAuMDRdIGJvcmRlci13aGl0ZS84IHRleHQtd2hpdGUvODUgaG92ZXI6Ymctd2hpdGUvWzAuMDldIGhvdmVyOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjE4KV0gaG92ZXI6dGV4dC13aGl0ZSJ9YCwiYXJpYS1sYWJlbCI6YFNwZWVkICR7Qn3DlyDigJQgdGFwIHRvIGN5Y2xlYCx0aXRsZTpgU3BlZWQgJHtCfcOXIOKAlCB0YXAgdG8gY3ljbGVgLGNoaWxkcmVuOltKKGI1LHt9KSxCPjEmJkooInNwYW4iLHtjbGFzc05hbWU6ImZvbnQtbW9ubyBbZm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zXSIsY2hpbGRyZW46W0IsIsOXIl19KV19KV19KSxGJiZKKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOkZ9KV19KX12YXIgczU9RTAoZnVuY3Rpb24oe2xhYmVsOkssdmFsdWU6UX0pe3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBiZy13aGl0ZS9bMC4wM10gYm9yZGVyIGJvcmRlci13aGl0ZS9bMC4wNl0gcm91bmRlZC1tZCBweS1bNXB4XSBweC1bN3B4XSBtaW4tdy0wIixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVs5cHhdIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNmVtXSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpLfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSBmb250LW1vbm8gdGV4dC13aGl0ZSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46UX0pXX0pfSk7ZnVuY3Rpb24gTzcoe3ZhbHVlOiQsb25DaGFuZ2U6SyxvcHRpb25zOlEsYXJpYUxhYmVsOlh9KXtyZXR1cm4gSigiZGl2Iix7cm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpYLGNsYXNzTmFtZToiZmxleCBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gcC0wLjUgZ2FwLTAuNSIsY2hpbGRyZW46US5tYXAoKFopPT57bGV0IFk9Wi52YWx1ZT09PSQ7cmV0dXJuIEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+SyhaLnZhbHVlKSxjbGFzc05hbWU6YGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItbm9uZSByb3VuZGVkLVs1cHhdIHB5LVs1cHhdIHB4LTIgdGV4dC1bMTFweF0gZm9udC1tZWRpdW0gY3Vyc29yLXBvaW50ZXIgZm9udC1baW5oZXJpdF0gW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjEycyxjb2xvcl8wLjEyc10gbWluLWgtWzIycHhdICR7WT8iYmctd2hpdGUvWzAuMTJdIHRleHQtd2hpdGUiOiJiZy10cmFuc3BhcmVudCB0ZXh0LXdoaXRlLzYwIGhvdmVyOmJnLXdoaXRlL1swLjA1XSBob3Zlcjp0ZXh0LXdoaXRlLzkwIn1gLCJhcmlhLXByZXNzZWQiOlksImFyaWEtbGFiZWwiOlouaWNvbj9aLmxhYmVsOnZvaWQgMCx0aXRsZTpaLmljb24/Wi5sYWJlbDp2b2lkIDAsY2hpbGRyZW46Wi5pY29uPz9aLmxhYmVsfSxaLnZhbHVlKX0pfSl9ZnVuY3Rpb24gRDcoe3ByZXBhcmVkOiR9KXtpZigkLnJhd01heEFsdC0kLnJhd01pbkFsdDw1KXJldHVybiBudWxsO3JldHVybiBKKGUse2NoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0yIGxlZnQtMi41IGJnLXBhbmVsLW92ZXJsYXkgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gcHgtMS41IHB5LTAuNSByb3VuZGVkLVs1cHhdIGZsZXggaXRlbXMtY2VudGVyIHRyYWNraW5nLVswLjAyZW1dIGJvcmRlciBib3JkZXItd2hpdGUvWzAuMDZdIixjaGlsZHJlbjpbSihqMix7ZGlyOiJ1cCJ9KSwiICIsUDkoJC5yYXdNYXhBbHQpXX0pLEooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTIgcmlnaHQtMi41IGJnLXBhbmVsLW92ZXJsYXkgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gcHgtMS41IHB5LTAuNSByb3VuZGVkLVs1cHhdIGZsZXggaXRlbXMtY2VudGVyIHRyYWNraW5nLVswLjAyZW1dIGJvcmRlciBib3JkZXItd2hpdGUvWzAuMDZdIixjaGlsZHJlbjpbSihqMix7ZGlyOiJkb3duIn0pLCIgIixQOSgkLnJhd01pbkFsdCldfSldfSl9dmFyIE05PTE0MDtmdW5jdGlvbiBXOSgkLEspe2xldCBRPUFycmF5KEspO2ZvcihsZXQgWD0wO1g8SztYKyspe2xldCBaPUs9PT0xPzA6WC8oSy0xKSxZPU8wKCQsWiokLnRvdGFsRGlzdGFuY2UpO1FbWF09e3g6WS54LHk6WS55LHo6WS56fX1yZXR1cm4gUX1mdW5jdGlvbiBNNygkLEssUSxYKXtsZXQgWj0oJC5ib3VuZHMueFswXSskLmJvdW5kcy54WzFdKS8yLFk9KCQuYm91bmRzLnpbMF0rJC5ib3VuZHMuelsxXSkvMixxPSQuYm91bmRzLnlbMF0sRz1NYXRoLm1heCgxLCQuYm91bmRzLnhbMV0tJC5ib3VuZHMueFswXSwkLmJvdW5kcy56WzFdLSQuYm91bmRzLnpbMF0pLEI9KFEuYm91bmRzLnhbMF0rUS5ib3VuZHMueFsxXSkvMixWPShRLmJvdW5kcy56WzBdK1EuYm91bmRzLnpbMV0pLzIsQz1RLmJvdW5kcy55WzBdLEY9TWF0aC5tYXgoMSxRLmJvdW5kcy54WzFdLVEuYm91bmRzLnhbMF0sUS5ib3VuZHMuelsxXS1RLmJvdW5kcy56WzBdKS9HLF89VzkoJCxNOSkubWFwKCh4KT0+KHt4Oih4LngtWikqRitCLHk6KHgueS1xKSpGK0MsejooeC56LVkpKkYrVn0pKSx6PVc5KFEsTTkpLFU9KCQudHJhaWwubG9vcHx8US50cmFpbC5sb29wKT8/ITEsQT1XNyhfLHosVSksTT1PMCgkLEspLEU9e3g6KE0ueC1aKSpGK0IseTooTS55LXEpKkYrQyx6OihNLnotWSkqRitWfSxUPU8wKFEsMCksYj17eDpULngseTpULnksejpULnp9O3JldHVybntmcm9tOiQsdG86USxmcm9tUHRzOl8sdG9QdHM6QSxwcmV2TWFya2VyOkUsbmV4dE1hcmtlcjpiLHN0YXJ0TXM6WH19ZnVuY3Rpb24gVzcoJCxLLFEpe2xldCBYPSQubGVuZ3RoLFo9MS8wLFk9MCxxPSExLEc9W0ssWy4uLktdLnJldmVyc2UoKV07Zm9yKGxldCBDPTA7QzxHLmxlbmd0aDtDKyspe2xldCBMPUdbQ10sRj1RP1g6MTtmb3IobGV0IE49MDtOPEY7TisrKXtsZXQgXz0wO2ZvcihsZXQgej0wO3o8WDt6Kyspe2xldCBVPSRbel0sQT1MWyh6K04pJVhdLE09VS54LUEueCxFPVUueS1BLnksVD1VLnotQS56O2lmKF8rPU0qTStFKkUrVCpULF8+PVopYnJlYWt9aWYoXzxaKVo9XyxZPU4scT1DPT09MX19bGV0IEI9cT9bLi4uS10ucmV2ZXJzZSgpOkssVj1BcnJheShYKTtmb3IobGV0IEM9MDtDPFg7QysrKVZbQ109QlsoQytZKSVYXTtyZXR1cm4gVn1mdW5jdGlvbiBUNygkLEspe2xldCBRPSQuZnJvbVB0cy5sZW5ndGgsWD1BcnJheShRKSxaPTAsWT1udWxsLHE9MS8wLEc9LTEvMCxCPTEvMCxWPS0xLzAsQz0xLzAsTD0tMS8wO2ZvcihsZXQgRj0wO0Y8UTtGKyspe2xldCBOPSQuZnJvbVB0c1tGXSxfPSQudG9QdHNbRl0sej1OLngrKF8ueC1OLngpKkssVT1OLnkrKF8ueS1OLnkpKkssQT1OLnorKF8uei1OLnopKks7aWYoWSl7bGV0IEU9ei1ZLngsVD1VLVkueSxiPUEtWS56O1orPU1hdGguc3FydChFKkUrVCpUK2IqYil9bGV0IE09e3g6eix5OlUsejpBLGFyYzpaLGxhdDowLGxuZzowfTtpZihYW0ZdPU0sWT1NLHo8cSlxPXo7aWYoej5HKUc9ejtpZihVPEIpQj1VO2lmKFU+VilWPVU7aWYoQTxDKUM9QTtpZihBPkwpTD1BfXJldHVybnt0cmFpbDokLnRvLnRyYWlsLG9yaWdpbjokLnRvLm9yaWdpbixwb2ludHM6WCx0b3RhbERpc3RhbmNlOlosYm91bmRzOnt4OltxLEddLHk6W0IsVl0sejpbQyxMXX0scmF3TWluQWx0OiQudG8ucmF3TWluQWx0KygkLmZyb20ucmF3TWluQWx0LSQudG8ucmF3TWluQWx0KSooMS1LKSxyYXdNYXhBbHQ6JC50by5yYXdNYXhBbHQrKCQuZnJvbS5yYXdNYXhBbHQtJC50by5yYXdNYXhBbHQpKigxLUspfX1mdW5jdGlvbiBQNygkKXtyZXR1cm4gJDwwLjU/MiokKiQ6MS1NYXRoLnBvdygtMiokKzIsMikvMn1mdW5jdGlvbiB3NygkLEssUSxYLFosWSxxKXtsZXQgRz0kLmdldENvbnRleHQoIjJkIik7aWYoIUcpcmV0dXJuO2xldHtjbGllbnRXaWR0aDpCLGNsaWVudEhlaWdodDpWfT0kO2lmKEI9PT0wfHxWPT09MClyZXR1cm47bGV0IEM9dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE6MSxMPU1hdGgucm91bmQoQipDKSxGPU1hdGgucm91bmQoVipDKTtpZigkLndpZHRoIT09THx8JC5oZWlnaHQhPT1GKSQud2lkdGg9TCwkLmhlaWdodD1GO0cuc2V0VHJhbnNmb3JtKEMsMCwwLEMsMCwwKSxHLmNsZWFyUmVjdCgwLDAsQixWKTtsZXQgTj1HLmNyZWF0ZVJhZGlhbEdyYWRpZW50KEIqMC41LFYqMC41NSxNYXRoLm1pbihCLFYpKjAuMixCKjAuNSxWKjAuNTUsTWF0aC5tYXgoQixWKSowLjg1KTtOLmFkZENvbG9yU3RvcCgwLCIjMWExYTFkIiksTi5hZGRDb2xvclN0b3AoMSwiIzBhMGEwYyIpLEcuZmlsbFN0eWxlPU4sRy5maWxsUmVjdCgwLDAsQixWKSxFNyhHLEIsVik7bGV0e3BvaW50czpfLGJvdW5kczp6fT1LO2lmKF8ubGVuZ3RoPDIpcmV0dXJuO2xldCBVPTI4Kk1hdGguUEkvMTgwLEE9TWF0aC5zaW4oVSksTT1NYXRoLmNvcyhVKSxFPU1hdGguc2luKFgpLFQ9TWF0aC5jb3MoWCksYj0oei54WzBdK3oueFsxXSkvMix4PSh6LnpbMF0rei56WzFdKS8yLG09ei54WzFdLXoueFswXSxSPXouelsxXS16LnpbMF0sbz16LnlbMV0tei55WzBdLGk9TWF0aC5tYXgobSxSKSoxLjA1LFgxPU1hdGgubWF4KFIqTStvKkEsbSowLjQpKjEuMTUsJDE9QiowLjA4LHM9ViowLjE4LEwxPU1hdGgubWluKChCLSQxKjIpL2ksKFYtcyoyKS9YMSkqMS40NSxkPW88MT8xOk1hdGgubWluKDI0LDE0MC9NYXRoLm1heCgyMCxvKSksYT0odSxqLGspPT57bGV0IHY9dS1iLHA9ay14LHExPXYqVCtwKkUsTjE9LXYqRStwKlQsXzE9aipkLHgxPV8xKk0tTjEqQSxUMT1fMSpBK04xKk07cmV0dXJue3N4OkIvMitxMSpMMSxzeTpWKjAuNTUteDEqTDEsZGVwdGg6VDF9fSxLMT0zOCxZMT1fLm1hcCgodSk9PntsZXQgaj1hKHUueCx1LnksdS56KSxrPWEodS54LDAsdS56KSx2PXtzeDpqLnN4LHN5Ok1hdGgubWF4KGsuc3ksai5zeStLMSksZGVwdGg6ay5kZXB0aH07cmV0dXJue3A6dSx0b3A6aixib3Q6dn19KTtmb3IobGV0IHU9MTt1PFkxLmxlbmd0aDt1Kyspe2xldCBqPVkxW3UtMV0saz1ZMVt1XSx2PUcuY3JlYXRlTGluZWFyR3JhZGllbnQoKGoudG9wLnN4K2sudG9wLnN4KS8yLChqLnRvcC5zeStrLnRvcC5zeSkvMiwoai5ib3Quc3gray5ib3Quc3gpLzIsKGouYm90LnN5K2suYm90LnN5KS8yKTt2LmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIiksdi5hZGRDb2xvclN0b3AoMC40NSwicmdiYSgxODAsMTgwLDE4NSwwLjI4KSIpLHYuYWRkQ29sb3JTdG9wKDAuODUsInJnYmEoNDAsNDAsNDUsMC4xOCkiKSx2LmFkZENvbG9yU3RvcCgxLCJyZ2JhKDAsMCwwLDApIiksRy5maWxsU3R5bGU9dixHLmJlZ2luUGF0aCgpLEcubW92ZVRvKGoudG9wLnN4LGoudG9wLnN5KSxHLmxpbmVUbyhrLnRvcC5zeCxrLnRvcC5zeSksRy5saW5lVG8oay5ib3Quc3gsay5ib3Quc3kpLEcubGluZVRvKGouYm90LnN4LGouYm90LnN5KSxHLmNsb3NlUGF0aCgpLEcuZmlsbCgpfUcuc3Ryb2tlU3R5bGU9IiNmZmZmZmYiLEcubGluZVdpZHRoPTEuNixHLmxpbmVDYXA9InJvdW5kIixHLmxpbmVKb2luPSJyb3VuZCIsRy5iZWdpblBhdGgoKTtmb3IobGV0IHU9MDt1PFkxLmxlbmd0aDt1Kyspe2xldHt0b3A6an09WTFbdV07aWYodT09PTApRy5tb3ZlVG8oai5zeCxqLnN5KTtlbHNlIEcubGluZVRvKGouc3gsai5zeSl9Ry5zdHJva2UoKTtsZXQgVjE9UTtHLnN0cm9rZVN0eWxlPSIjZjlkMmE0IixHLmxpbmVXaWR0aD0yLjIsRy5iZWdpblBhdGgoKTtsZXQgYz0hMTtmb3IobGV0IHU9MDt1PFkxLmxlbmd0aDt1Kyspe2xldHtwOmosdG9wOmt9PVkxW3VdO2lmKGouYXJjPlYxKWJyZWFrO2lmKCFjKUcubW92ZVRvKGsuc3gsay5zeSksYz0hMDtlbHNlIEcubGluZVRvKGsuc3gsay5zeSl9aWYoYylHLnN0cm9rZSgpO2xldCBRMT1xPz9PMChLLFEpLFUxPWEoUTEueCxRMS55LFExLnopO2lmKFkpe2xldCBrPVolMjYwMC8yNjAwLHY9NCsyMiprLHA9MC4yMiooMS1rKSxxMT1HLmNyZWF0ZVJhZGlhbEdyYWRpZW50KFUxLnN4LFUxLnN5LHYqMC41LFUxLnN4LFUxLnN5LHYpO3ExLmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDApIikscTEuYWRkQ29sb3JTdG9wKDAuNyxgcmdiYSgyNTUsMjU1LDI1NSwke3AudG9GaXhlZCgzKX0pYCkscTEuYWRkQ29sb3JTdG9wKDEsInJnYmEoMjU1LDI1NSwyNTUsMCkiKSxHLmZpbGxTdHlsZT1xMSxHLmJlZ2luUGF0aCgpLEcuYXJjKFUxLnN4LFUxLnN5LHYsMCxNYXRoLlBJKjIpLEcuZmlsbCgpfUcuZmlsbFN0eWxlPSIjZmZmIixHLmJlZ2luUGF0aCgpLEcuYXJjKFUxLnN4LFUxLnN5LDMuOCwwLE1hdGguUEkqMiksRy5maWxsKCl9ZnVuY3Rpb24gRTcoJCxLLFEpeyQuZmlsbFN0eWxlPSJyZ2JhKDI1NSwyNTUsMjU1LDAuMDYpIjtmb3IobGV0IFk9NztZPFE7WSs9MTQpZm9yKGxldCBxPTc7cTxLO3ErPTE0KSQuYmVnaW5QYXRoKCksJC5hcmMocSxZLDAuNywwLE1hdGguUEkqMiksJC5maWxsKCl9ZnVuY3Rpb24gdDUoJCl7aWYoJDwxMDAwKXJldHVybmAkeyQudG9GaXhlZCgwKX0gbWA7cmV0dXJuYCR7KCQvMTAwMCkudG9GaXhlZCgyKX0ga21gfWZ1bmN0aW9uIFQ5KCQpe2xldCBLPU1hdGguZmxvb3IoJC8xMDAwKSxRPU1hdGguZmxvb3IoSy8zNjAwKSxYPU1hdGguZmxvb3IoSyUzNjAwLzYwKSxaPUslNjA7aWYoUT4wKXJldHVybmAke1F9OiR7WC50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHtaLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWA7cmV0dXJuYCR7WH06JHtaLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWB9ZnVuY3Rpb24gSTcoJCl7aWYoJDw9MClyZXR1cm4i4oCUIjtpZigkPjcpcmV0dXJuYCR7KCQqMy42KS50b0ZpeGVkKDApfSBrbS9oYDtsZXQgSz0xMDAwLyQsUT1NYXRoLmZsb29yKEsvNjApLFg9TWF0aC5yb3VuZChLJTYwKTtyZXR1cm5gJHtRfToke1gudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9L2ttYH1mdW5jdGlvbiBQOSgkKXtyZXR1cm5gJHskLnRvRml4ZWQoMCl9IG1gfWZ1bmN0aW9uIHc5KCQpe2xldCBLPSQudHJpbSgpO2lmKCFLKXJldHVybiIiO2xldCBRPUsubWF0Y2goL1JlYXNvbjpccyooLispJC9tKTtpZihRKXJldHVybiBRWzFdO3JldHVybiBLLnNwbGl0KGAKYCkuc2xpY2UoLTEpWzBdPz9LfWFzeW5jIGZ1bmN0aW9uIGU1KCQsSyxRKXtsZXQgWD1hd2FpdCAkKGB4Y3J1biBzaW1jdGwgZ2V0X2FwcF9jb250YWluZXIgJHtLfSAke1oxKFEpfSBhcHBgKTtpZihYLmV4aXRDb2RlIT09MClyZXR1cm57ZXJyb3I6WC5zdGRlcnIudHJpbSgpfHwiQXBwIG5vdCBmb3VuZCBvbiBzaW11bGF0b3IifTtsZXQgWj1YLnN0ZG91dC50cmltKCk7aWYoIVopcmV0dXJue2Vycm9yOiJFbXB0eSBhcHAgcGF0aCJ9O2xldCBZPWF3YWl0ICQoYHBsdXRpbCAtY29udmVydCBqc29uIC1vIC0gJHtaMShaKyIvSW5mby5wbGlzdCIpfWApLHE9e307aWYoWS5leGl0Q29kZT09PTApdHJ5e3E9SlNPTi5wYXJzZShZLnN0ZG91dCl9Y2F0Y2h7fWxldCBHLFY9KHE/LkNGQnVuZGxlSWNvbnM/LkNGQnVuZGxlUHJpbWFyeUljb24/P3E/LlsiQ0ZCdW5kbGVJY29uc35pcGFkIl0/LkNGQnVuZGxlUHJpbWFyeUljb24pPy5DRkJ1bmRsZUljb25GaWxlcz8/cT8uQ0ZCdW5kbGVJY29uRmlsZXM7aWYoViYmVi5sZW5ndGg+MClHPVZbVi5sZW5ndGgtMV07ZWxzZSBpZih0eXBlb2YgcT8uQ0ZCdW5kbGVJY29uRmlsZT09PSJzdHJpbmciKUc9cS5DRkJ1bmRsZUljb25GaWxlO2xldCBDPW51bGw7aWYoRyl7bGV0IEw9W2Ake0d9QDN4LnBuZ2AsYCR7R31AMngucG5nYCxgJHtHfS5wbmdgLGAke0d9NjB4NjBAM3gucG5nYCxgJHtHfTYweDYwQDJ4LnBuZ2BdLE49KGF3YWl0ICQoYGJhc2ggLWMgJHtaMShMLm1hcCgoXyk9PmBbIC1mICR7WjEoWisiLyIrXyl9IF0gJiYgZWNobyAke1oxKForIi8iK18pfSAmJiBleGl0IDBgKS5qb2luKCI7ICIpKyI7IGV4aXQgMSIpfWApKS5zdGRvdXQudHJpbSgpO2lmKE4pe2xldCBfPWF3YWl0ICQoYGJhc2U2NCAtaSAke1oxKE4pfWApO2lmKF8uZXhpdENvZGU9PT0wKUM9YGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke18uc3Rkb3V0LnJlcGxhY2UoL1xzKy9nLCIiKX1gfX1yZXR1cm57YXBwUGF0aDpaLGRpc3BsYXlOYW1lOnEuQ0ZCdW5kbGVEaXNwbGF5TmFtZT8/cS5DRkJ1bmRsZU5hbWUsc2hvcnRWZXJzaW9uOnEuQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmcsYnVuZGxlVmVyc2lvbjpxLkNGQnVuZGxlVmVyc2lvbixtaW5PUzpxLk1pbmltdW1PU1ZlcnNpb24sZXhlY3V0YWJsZTpxLkNGQnVuZGxlRXhlY3V0YWJsZSxpY29uRGF0YVVybDpDfX12YXIgZjA9bmV3IE1hcDtmdW5jdGlvbiBJOSgkLEssUSl7bGV0IFg9YCR7S306JHtRfWAsWj1mMC5nZXQoWCk7aWYoWiE9PXZvaWQgMClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFopO2xldCBZPWU1KCQsSyxRKS50aGVuKChxKT0+e2xldCBHPXEuaWNvbkRhdGFVcmw/P251bGw7cmV0dXJuIGYwLnNldChYLEcpLEd9KS5jYXRjaCgoKT0+e3JldHVybiBmMC5zZXQoWCxudWxsKSxudWxsfSk7cmV0dXJuIGYwLnNldChYLFkpLFl9ZnVuY3Rpb24geTcoJCl7cmV0dXJuICQuc3RhcnRzV2l0aCgiY29tLmFwcGxlLiIpfWZ1bmN0aW9uIGI3KCQpe2lmKCQ9PT0iY29tLmFwcGxlLnNwcmluZ2JvYXJkIilyZXR1cm4iU3ByaW5nQm9hcmQiO3JldHVybiAkfWZ1bmN0aW9uIFM3KHtidW5kbGVJZDokfSl7bGV0IEs9eTcoJCk7cmV0dXJuIEooImRpdiIseyJkYXRhLXRlc3RpZCI6Sz8ic3lzdGVtLWFwcC1pY29uIjoiYXBwLWljb24tZmFsbGJhY2siLGNsYXNzTmFtZTpgdy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgYm9yZGVyIGdyaWQgcGxhY2UtaXRlbXMtY2VudGVyICR7Sz8iYm9yZGVyLVsjM2I1Zjk5XSBiZy1bbGluZWFyLWdyYWRpZW50KDE0NWRlZywjMjUzYTVmLCMxNjIxMzIpXSB0ZXh0LVsjYzhkN2ZmXSI6ImJvcmRlci13aGl0ZS8xMCBiZy13aGl0ZS9bMC4wNl0gdGV4dC13aGl0ZS84MCJ9YCwiYXJpYS1sYWJlbCI6Sz8iU3lzdGVtIGFwcCI6IkFwcCBpY29uIHVuYXZhaWxhYmxlIix0aXRsZTpLPyJTeXN0ZW0gYXBwIjoiQXBwIGljb24gdW5hdmFpbGFibGUiLGNoaWxkcmVuOks/Sigic3ZnIix7cm9sZToiaW1nIix2aWV3Qm94OiIwIDAgMjQgMjQiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2xhc3NOYW1lOiJzaXplLVsxOXB4XSIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpbSigidGl0bGUiLHtjaGlsZHJlbjoiQXBwbGUifSksSigicGF0aCIse2Q6Ik0xMi4xNTIgNi44OTZjLS45NDggMC0yLjQxNS0xLjA3OC0zLjk2LTEuMDQtMi4wNC4wMjctMy45MSAxLjE4My00Ljk2MSAzLjAxNC0yLjExNyAzLjY3NS0uNTQ2IDkuMTAzIDEuNTE5IDEyLjA5IDEuMDEzIDEuNDU0IDIuMjA4IDMuMDkgMy43OTIgMy4wMzkgMS41Mi0uMDY1IDIuMDktLjk4NyAzLjkzNS0uOTg3IDEuODMxIDAgMi4zNS45ODcgMy45Ni45NDggMS42MzctLjAyNiAyLjY3Ni0xLjQ4IDMuNjc2LTIuOTQ4IDEuMTU2LTEuNjg4IDEuNjM2LTMuMzI1IDEuNjYyLTMuNDE1LS4wMzktLjAxMy0zLjE4Mi0xLjIyMS0zLjIyLTQuODU3LS4wMjYtMy4wNCAyLjQ4LTQuNDk0IDIuNTk3LTQuNTU5LTEuNDI5LTIuMDktMy42MjMtMi4zMjQtNC4zOS0yLjM3Ni0yLS4xNTYtMy42NzUgMS4wOS00LjYxIDEuMDl6TTE1LjUzIDMuODNjLjg0My0xLjAxMiAxLjQtMi40MjcgMS4yNDUtMy44My0xLjIwNy4wNTItMi42NjIuODA1LTMuNTMyIDEuODE4LS43OC44OTYtMS40NTQgMi4zMzgtMS4yNzMgMy43MTQgMS4zMzguMTA0IDIuNzE1LS42ODggMy41NTktMS43MDEifSldfSk6SihpMCx7c2l6ZToxOSxzdHJva2VXaWR0aDoxLjl9KX0pfWZ1bmN0aW9uIFI3KHtidW5kbGVJZDokLGljb25EYXRhVXJsOkt9KXtpZihLKXJldHVybiBKKCJpbWciLHtzcmM6SyxjbGFzc05hbWU6InctMTAgaC0xMCByb3VuZGVkLVs4cHhdIHNocmluay0wIG9iamVjdC1jb3ZlciBib3JkZXIgYm9yZGVyLXdoaXRlLzgiLGFsdDoiIn0pO3JldHVybiBKKFM3LHtidW5kbGVJZDokfSl9ZnVuY3Rpb24geTkoe3VkaWQ6JCxjdXJyZW50QXBwOkt9KXtsZXRbUSxYXT1EKG51bGwpLFtaLFldPUQoITEpO2lmKEkoKCk9PntpZighSyl7WChudWxsKTtyZXR1cm59bGV0IHE9ITE7cmV0dXJuIFgoe2J1bmRsZUlkOksuYnVuZGxlSWQsaXNSZWFjdE5hdGl2ZTpLLmlzUmVhY3ROYXRpdmUscGlkOksucGlkLGxvYWRpbmc6ITB9KSxlNShDMSwkLEsuYnVuZGxlSWQpLnRoZW4oKEcpPT57aWYocSlyZXR1cm47WCh7YnVuZGxlSWQ6Sy5idW5kbGVJZCxpc1JlYWN0TmF0aXZlOksuaXNSZWFjdE5hdGl2ZSxwaWQ6Sy5waWQsbG9hZGluZzohMSwuLi5HfSl9KSwoKT0+e3E9ITB9fSxbJCxLLEs/LmJ1bmRsZUlkLEs/LnBpZCxLPy5pc1JlYWN0TmF0aXZlXSksIVEpcmV0dXJuIEooeDcse30pO3JldHVybiBKKHQxLHtvcGVuOlosb25PcGVuQ2hhbmdlOlksc3VtbWFyeUNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1sZWZ0IixzdW1tYXJ5OkooZSx7Y2hpbGRyZW46W0ooUjcse2J1bmRsZUlkOlEuYnVuZGxlSWQsaWNvbkRhdGFVcmw6US5pY29uRGF0YVVybH0pLEoodjcse2J1bmRsZUlkOlEuYnVuZGxlSWQsZGlzcGxheU5hbWU6US5kaXNwbGF5TmFtZX0pXX0pLGNoaWxkcmVuOltRLmVycm9yJiZKKCJkaXYiLHtjbGFzc05hbWU6ImJnLWRhbmdlci8xMCBib3JkZXIgYm9yZGVyLWRhbmdlci8yMCB0ZXh0LWRhbmdlci1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQiLGNoaWxkcmVuOlEuZXJyb3J9KSxKKCJkbCIse2NsYXNzTmFtZToibS0wIGZsZXggZmxleC1jb2wgZ2FwLTEuNSIsY2hpbGRyZW46W0oocDAse2xhYmVsOiJWZXJzaW9uIix2YWx1ZTpRLnNob3J0VmVyc2lvbj9gJHtRLnNob3J0VmVyc2lvbn0gKCR7US5idW5kbGVWZXJzaW9uPz8i4oCUIn0pYDpRLmxvYWRpbmc/IuKApiI6IuKAlCJ9KSxKKHAwLHtsYWJlbDoiTWluIGlPUyIsdmFsdWU6US5taW5PUz8/KFEubG9hZGluZz8i4oCmIjoi4oCUIil9KSxKKHAwLHtsYWJlbDoiRXhlY3V0YWJsZSIsdmFsdWU6US5leGVjdXRhYmxlPz8oUS5sb2FkaW5nPyLigKYiOiLigJQiKX0pLEoocDAse2xhYmVsOiJQSUQiLHZhbHVlOlEucGlkIT1udWxsP1N0cmluZyhRLnBpZCk6IuKAlCJ9KSxRLmlzUmVhY3ROYXRpdmUmJkoocDAse2xhYmVsOiJSZWFjdCBOYXRpdmUiLHZhbHVlOiJZZXMifSksSihwMCx7bGFiZWw6IkFwcCBwYXRoIix2YWx1ZTpRLmFwcFBhdGg/PyhRLmxvYWRpbmc/IuKApiI6IuKAlCIpLG1vbm86ITAsYWN0aW9uOlEuYXBwUGF0aD97dGl0bGU6IlJldmVhbCBpbiBGaW5kZXIiLG9uQ2xpY2s6KCk9PntDMShgb3BlbiAtUiAke1oxKFEuYXBwUGF0aCl9YCl9LGljb246SihuMCx7c2l6ZToxMSxzdHJva2VXaWR0aDoyLjJ9KX06dm9pZCAwfSldfSldfSl9ZnVuY3Rpb24geDcoKXtyZXR1cm4gSigiZGl2Iix7ImRhdGEtdGVzdGlkIjoiYXBwLWRldGVjdGlvbi1za2VsZXRvbiIsY2xhc3NOYW1lOiJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIiLCJhcmlhLWxhYmVsIjoiV2FpdGluZyBmb3IgZm9yZWdyb3VuZCBhcHAiLGNoaWxkcmVuOkooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1sZWZ0IG1pbi1oLVszNnB4XSBsZWFkaW5nLW5vbmUgcHktMi41IHB4LTEgLW15LTIgLW14LTEgdy1bY2FsYygxMDAlKzhweCldIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToidy0xMCBoLTEwIHJvdW5kZWQtWzhweF0gc2hyaW5rLTAgYmctd2hpdGUvWzAuMDhdIn0pLEooInNwYW4iLHtjbGFzc05hbWU6Im1pbi13LTAgZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTIiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJoLTMuNSB3LVs0NiVdIHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4xMl0ifSksSigic3BhbiIse2NsYXNzTmFtZToiaC0yLjUgdy1bNjglXSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvWzAuMDhdIn0pXX0pLEooInNwYW4iLHtjbGFzc05hbWU6InctMi41IGgtMi41IHJvdW5kZWQtZnVsbCBiZy13aGl0ZS9bMC4wOF0ifSldfSl9KX1mdW5jdGlvbiB2Nyh7YnVuZGxlSWQ6JCxkaXNwbGF5TmFtZTpLfSl7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZToibWluLXctMCBmbGV4LTEgbGVhZGluZy10aWdodCB0ZXh0LWxlZnQiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzEzcHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS85MCB0cnVuY2F0ZSIsY2hpbGRyZW46Sz8/YjcoJCl9KSxKKCJkaXYiLHtjbGFzc05hbWU6InRleHQtWzExcHhdIHRleHQtd2hpdGUvNTUgZm9udC1tb25vIHRydW5jYXRlIix0aXRsZTokLGNoaWxkcmVuOiR9KV19KX1mdW5jdGlvbiBwMCh7bGFiZWw6JCx2YWx1ZTpLLG1vbm86USxhY3Rpb246WH0pe3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6Imdyb3VwIGZsZXggaXRlbXMtYmFzZWxpbmUgZ2FwLTIgbWluLXctMCIsY2hpbGRyZW46W0ooImR0Iix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1bMTFweF0gdGV4dC13aGl0ZS81MCB3LTIxIHNocmluay0wIixjaGlsZHJlbjokfSksSigiZGQiLHtjbGFzc05hbWU6YG0tMCB0ZXh0LXdoaXRlLzkwIGZsZXgtMSBtaW4tdy0wIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHJlbGF0aXZlICR7UT8iZm9udC1tb25vIHRleHQtWzExcHhdIjoidGV4dC1bMTJweF0ifWAsdGl0bGU6SyxjaGlsZHJlbjpbSyxYJiZKKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIHJpZ2h0LTAgYm90dG9tLTAgcGwtNyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3JpZ2h0LHJnYmEoMjgsMjgsMzAsMClfMCUsIzFjMWMxZV81NSUpXSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMTVzX2Vhc2UsdHJhbnNmb3JtXzAuMTVzX2Vhc2VdIG9wYWNpdHktMCB0cmFuc2xhdGUteC0xIHBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZ3JvdXAtaG92ZXI6dHJhbnNsYXRlLXgtMCBncm91cC1ob3Zlcjpwb2ludGVyLWV2ZW50cy1hdXRvIixjaGlsZHJlbjpKKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6WC5vbkNsaWNrLHRpdGxlOlgudGl0bGUsImFyaWEtbGFiZWwiOlgudGl0bGUsY2xhc3NOYW1lOiJ3LTUgaC01IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQgdGV4dC13aGl0ZSBjdXJzb3ItcG9pbnRlciBwLTAiLGNoaWxkcmVuOlguaWNvbn0pfSldfSldfSl9dmFyIGI5PVt7a2V5OiJjYW1lcmEiLGxhYmVsOiJDYW1lcmEifSx7a2V5OiJtaWNyb3Bob25lIixsYWJlbDoiTWljcm9waG9uZSJ9LHtrZXk6InBob3RvcyIsbGFiZWw6IlBob3RvcyJ9LHtrZXk6InBob3Rvcy1hZGQiLGxhYmVsOiJBZGQgdG8gUGhvdG9zIn0se2tleToiY29udGFjdHMiLGxhYmVsOiJDb250YWN0cyJ9LHtrZXk6ImNhbGVuZGFyIixsYWJlbDoiQ2FsZW5kYXIifSx7a2V5OiJyZW1pbmRlcnMiLGxhYmVsOiJSZW1pbmRlcnMifSx7a2V5OiJsb2NhdGlvbiIsbGFiZWw6IkxvY2F0aW9uIn0se2tleToibG9jYXRpb24tYWx3YXlzIixsYWJlbDoiTG9jYXRpb24gKEFsd2F5cykifSx7a2V5OiJub3RpZmljYXRpb25zIixsYWJlbDoiTm90aWZpY2F0aW9ucyJ9LHtrZXk6Im1vdGlvbiIsbGFiZWw6Ik1vdGlvbiJ9LHtrZXk6Im1lZGlhLWxpYnJhcnkiLGxhYmVsOiJNZWRpYSBMaWJyYXJ5In0se2tleToic2lyaSIsbGFiZWw6IlNpcmkifV07ZnVuY3Rpb24gUzkoe3VkaWQ6JCxidW5kbGVJZDpLfSl7bGV0W1EsWF09RCh7fSksW1osWV09RChudWxsKSxbcSxHXT1EKG51bGwpLFtCLFZdPUQoITEpLEM9TzEoKCk9PntsZXQgTj10eXBlb2Ygd2luZG93PiJ1Ij92b2lkIDA6d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uc2VydmVTaW1CaW47aWYoIU4pcmV0dXJuInNlcnZlLXNpbS1zamNobWllbGEiO2lmKC9cLnRzJC8udGVzdChOKSlyZXR1cm5gYnVuICR7WjEoTil9YDtpZigvXC5qcyQvLnRlc3QoTikpcmV0dXJuYG5vZGUgJHtaMShOKX1gO3JldHVybiBaMShOKX0sW10pO0koKCk9PntYKHt9KSxHKG51bGwpfSxbS10pO2xldCBMPVAoYXN5bmMoTixfKT0+e2lmKCFLKXJldHVybjtsZXQgej1gJHtOfToke199YDtZKHopLEcobnVsbCk7dHJ5e2xldCBVPWF3YWl0IEMxKGAke0N9IHBlcm1pc3Npb25zICR7X30gJHtOfSAke1oxKEspfSAtZCAke1oxKCQpfWApO2lmKFUuZXhpdENvZGUhPT0wKXtHKFUuc3RkZXJyLnRyaW0oKXx8YHNlcnZlLXNpbS1zamNobWllbGEgcGVybWlzc2lvbnMgZmFpbGVkIChleGl0ICR7VS5leGl0Q29kZX0pYCk7cmV0dXJufVgoKEEpPT4oey4uLkEsW05dOl89PT0icmVzZXQiP3ZvaWQgMDpffSkpfWZpbmFsbHl7WShudWxsKX19LFtDLCQsS10pLEY9UChhc3luYygpPT57aWYoIUspcmV0dXJuO1koIl9fYWxsX18iKSxHKG51bGwpO3RyeXtsZXQgTj1hd2FpdCBDMShgJHtDfSBwZXJtaXNzaW9ucyByZXNldCBhbGwgJHtaMShLKX0gLWQgJHtaMSgkKX1gKTtpZihOLmV4aXRDb2RlIT09MCl7RyhOLnN0ZGVyci50cmltKCl8fGBzZXJ2ZS1zaW0tc2pjaG1pZWxhIHBlcm1pc3Npb25zIGZhaWxlZCAoZXhpdCAke04uZXhpdENvZGV9KWApO3JldHVybn1YKHt9KX1maW5hbGx5e1kobnVsbCl9fSxbQywkLEtdKTtpZighSylyZXR1cm4gSihnNyx7fSk7cmV0dXJuIEoodDEse29wZW46Qixvbk9wZW5DaGFuZ2U6VixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpKKGUse2NoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJQZXJtaXNzaW9ucyJ9KSxKKCJzcGFuIix7fSldfSksY2hpbGRyZW46W3EmJkooImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCIsY2hpbGRyZW46cX0pLEooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUiLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6Im1heC1oLVsyNjBweF0gb3ZlcmZsb3cteS1hdXRvIGZsZXggZmxleC1jb2wgZ2FwLTEgcHktMiBbc2Nyb2xsYmFyLXdpZHRoOnRoaW5dIixjaGlsZHJlbjpiOS5tYXAoKHtrZXk6TixsYWJlbDpffSk9PntsZXQgej1RW05dO3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBweC0wLjUgcHktMSIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXAgZmxleC0xIG1pbi13LTAiLGNoaWxkcmVuOl99KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZ2FwLTAuNSBiZy13aGl0ZS9bMC4wNF0gYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtbWQgcC0wLjUiLHJvbGU6Imdyb3VwIiwiYXJpYS1sYWJlbCI6XyxjaGlsZHJlbjpbSigkMyx7YWN0aXZlOno9PT0iZ3JhbnQiLHBlbmRpbmc6Wj09PWAke059OmdyYW50YCxvbkNsaWNrOigpPT5MKE4sImdyYW50IiksdmFyaWFudDoiZ3JhbnQiLHRpdGxlOiJBbGxvdyIsY2hpbGRyZW46SihzMCx7c2l6ZToxMSxzdHJva2VXaWR0aDozfSl9KSxKKCQzLHthY3RpdmU6ej09PSJyZXZva2UiLHBlbmRpbmc6Wj09PWAke059OnJldm9rZWAsb25DbGljazooKT0+TChOLCJyZXZva2UiKSx2YXJpYW50OiJyZXZva2UiLHRpdGxlOiJEZW55IixjaGlsZHJlbjpKKHAxLHtzaXplOjExLHN0cm9rZVdpZHRoOjN9KX0pLEooJDMse2FjdGl2ZTohMSxwZW5kaW5nOlo9PT1gJHtOfTpyZXNldGAsb25DbGljazooKT0+TChOLCJyZXNldCIpLHZhcmlhbnQ6InJlc2V0Iix0aXRsZToiUmVzZXQiLGNoaWxkcmVuOkooQTAse3NpemU6MTEsc3Ryb2tlV2lkdGg6Mi40fSl9KV19KV19LE4pfSl9KSxKKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIHRvcC0wIGxlZnQtMCByaWdodC0wIGgtWzE0cHhdIHBvaW50ZXItZXZlbnRzLW5vbmUgcm91bmRlZC10LVsxMHB4XSBiZy1bbGluZWFyLWdyYWRpZW50KHRvX2JvdHRvbSwjMWMxYzFlXzAlLHJnYmEoMjgsMjgsMzAsMClfMTAwJSldIn0pLEooImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTAgaC1bMTRweF0gcG9pbnRlci1ldmVudHMtbm9uZSBiZy1bbGluZWFyLWdyYWRpZW50KHRvX3RvcCwjMWMxYzFlXzAlLHJnYmEoMjgsMjgsMzAsMClfMTAwJSldIn0pXX0pLEooImRpdiIse2NsYXNzTmFtZToiZmxleCBqdXN0aWZ5LWVuZCIsY2hpbGRyZW46SigiYnV0dG9uIix7b25DbGljazpGLGRpc2FibGVkOlo9PT0iX19hbGxfXyIsY2xhc3NOYW1lOiJiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHRleHQtd2hpdGUvNzAgdGV4dC1bMTBweF0gcHgtMiBweS1bM3B4XSByb3VuZGVkLVs1cHhdIGN1cnNvci1wb2ludGVyIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wNGVtXSIsdGl0bGU6InNlcnZlLXNpbS1zamNobWllbGEgcGVybWlzc2lvbnMgcmVzZXQgYWxsIixjaGlsZHJlbjpaPT09Il9fYWxsX18iPyLigKYiOiJSZXNldCBhbGwifSl9KV19KX1mdW5jdGlvbiBnNygpe3JldHVybiBKKCJkaXYiLHsiZGF0YS10ZXN0aWQiOiJhcHAtcGVybWlzc2lvbnMtbG9hZGluZyIsY2xhc3NOYW1lOiJiZy1wYW5lbCByb3VuZGVkLVsxMHB4XSBweC0zIHB5LTIiLCJhcmlhLWRpc2FibGVkIjoidHJ1ZSIsImFyaWEtYnVzeSI6InRydWUiLGNoaWxkcmVuOkooImRpdiIse2NsYXNzTmFtZToic2VsZWN0LW5vbmUgdGV4dC13aGl0ZS81NSBtaW4taC1bMzZweF0gbGVhZGluZy1ub25lIHB5LTIuNSBweC0xIC1teS0yIC1teC0xIHctW2NhbGMoMTAwJSs4cHgpXSBncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCBjdXJzb3ItZGVmYXVsdCIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6InRleHQtWzExcHhdIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJQZXJtaXNzaW9ucyJ9KSxKKCJzcGFuIix7fSksSigic3BhbiIseyJkYXRhLXRlc3RpZCI6InBlcm1pc3Npb25zLWxvYWRpbmctaW5kaWNhdG9yIixyb2xlOiJzdGF0dXMiLCJhcmlhLWxhYmVsIjoiTG9hZGluZyBwZXJtaXNzaW9ucyIsY2xhc3NOYW1lOiJzaXplLTIuNSByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1bIzVmNjI2OF0gYm9yZGVyLXQtWyNmNGY0ZjVdIGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjdzX2xpbmVhcl9pbmZpbml0ZV0ifSldfSl9KX1mdW5jdGlvbiAkMyh7YWN0aXZlOiQscGVuZGluZzpLLG9uQ2xpY2s6USx2YXJpYW50OlgsdGl0bGU6WixjaGlsZHJlbjpZfSl7bGV0IHE9WD09PSJncmFudCI/IiM0YWRlODAiOlg9PT0icmV2b2tlIj8iI2Y4NzE3MSI6IiNhNWI0ZmMiO3JldHVybiBKKCJidXR0b24iLHtvbkNsaWNrOlEsZGlzYWJsZWQ6Syx0aXRsZTpaLCJhcmlhLWxhYmVsIjpaLGNsYXNzTmFtZToidy02IGgtNS41IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1ub25lIHJvdW5kZWQgcC0wIGN1cnNvci1wb2ludGVyIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4xMnMsY29sb3JfMC4xMnNdIixzdHlsZTp7YmFja2dyb3VuZDokP2Ake3F9MjJgOiJ0cmFuc3BhcmVudCIsY29sb3I6JD9xOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIixvcGFjaXR5Oks/MC41OjF9LGNoaWxkcmVuOll9KX1mdW5jdGlvbiBRNSh7bGFiZWw6JCxjaGVja2VkOkssZGlzYWJsZWQ6UT0hMSxvbkNoYW5nZTpYfSl7cmV0dXJuIEooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIscm9sZToic3dpdGNoIiwiYXJpYS1jaGVja2VkIjpLLCJhcmlhLWxhYmVsIjokLGRpc2FibGVkOlEsb25DbGljazooKT0+WCghSyksY2xhc3NOYW1lOmByZWxhdGl2ZSBoLVsxOHB4XSB3LTggc2hyaW5rLTAgcm91bmRlZC1mdWxsIGJvcmRlci1ub25lIHAtMCBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzXSAke1E/ImN1cnNvci1kZWZhdWx0IGJnLXdoaXRlLzIwIjpLPyJjdXJzb3ItcG9pbnRlciBiZy1bIzBhODRmZl0iOiJjdXJzb3ItcG9pbnRlciBiZy13aGl0ZS8yMCJ9YCxjaGlsZHJlbjpKKCJzcGFuIix7Y2xhc3NOYW1lOmBhYnNvbHV0ZSB0b3AtWzJweF0gc2l6ZS1bMTRweF0gcm91bmRlZC1mdWxsIFt0cmFuc2l0aW9uOmxlZnRfMC4xNXNdICR7UT8iYmctd2hpdGUvNTAiOiJiZy13aGl0ZSJ9YCxzdHlsZTp7bGVmdDpLPzE2OjJ9fSl9KX12YXIgaDc9ImJnLXBhbmVsIHJvdW5kZWQtWzEwcHhdIixqNz0idGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBtLTAiO2Z1bmN0aW9uIHg5KHtvdmVybGF5RW5hYmxlZDokLG9uVG9nZ2xlT3ZlcmxheTpLfSl7bGV0e3NuYXBzaG90OlF9PWcwKCkse2hpZ2hsaWdodGVkS2V5Olgsc2V0SGlnaGxpZ2h0ZWRLZXk6Wn09bDIoKSxZPVE/LmVsZW1lbnRzPz9bXSxxPW0yKFEpLEc9UT8uZXJyb3JzPy5bMF0/P251bGw7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZTpgJHtoN30gcHgtMyBweS0yYCxjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOmo3LGNoaWxkcmVuOiJBWCBUcmVlIn0pLEooUTUse2xhYmVsOiJFbmFibGUgb3ZlcmxheSIsY2hlY2tlZDokLG9uQ2hhbmdlOkt9KV19KSwhJD9udWxsOnE/SihSOSx7Y2hpbGRyZW46IkFYIHVuYXZhaWxhYmxlIG9uIHRoaXMgc2ltdWxhdG9yLiJ9KTpZLmxlbmd0aD09PTA/SihSOSx7c3Bpbm5lcjohRyxjaGlsZHJlbjpHPz8iV2FpdGluZyBmb3IgYWNjZXNzaWJpbGl0eSBkYXRh4oCmIn0pOkooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtMSBtdC0yIHB5LTIgbWF4LWgtWzI2MHB4XSBvdmVyZmxvdy15LWF1dG8gW3Njcm9sbGJhci13aWR0aDp0aGluXSIscm9sZToibGlzdCIsY2hpbGRyZW46WS5tYXAoKEIsVik9PntsZXQgQz1fMChCKTtyZXR1cm4gSihtNyx7ZWxlbWVudDpCLGluZGV4OlYsYWN0aXZlOkM9PT1YLG9uSGlnaGxpZ2h0Olp9LEMpfSl9KV19KX1mdW5jdGlvbiBSOSh7Y2hpbGRyZW46JCxzcGlubmVyOks9ITF9KXtyZXR1cm4gSigiZGl2Iix7cm9sZToic3RhdHVzIiwiYXJpYS1saXZlIjoicG9saXRlIixjbGFzc05hbWU6Im10LTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcHktNCB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjpbSz9KKCJzcGFuIix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2xhc3NOYW1lOiJzaXplLTMuNSBzaHJpbmstMCByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXdoaXRlLzIwIGJvcmRlci10LXdoaXRlLzYwIGFuaW1hdGUtW2dyaWQtc3Bpbl8wLjhzX2xpbmVhcl9pbmZpbml0ZV0ifSk6bnVsbCxKKCJzcGFuIix7Y2hpbGRyZW46JH0pXX0pfXZhciBtNz1FMChmdW5jdGlvbih7ZWxlbWVudDpLLGluZGV4OlEsYWN0aXZlOlgsb25IaWdobGlnaHQ6Wn0pe2xldCBZPV8wKEspLHE9cDIoSyxRKSxHPWAke01hdGgucm91bmQoSy5mcmFtZS53aWR0aCl9eCR7TWF0aC5yb3VuZChLLmZyYW1lLmhlaWdodCl9YCxCPVtxLmxhYmVsLHEucm9sZXx8cS50eXBlfHwiZWxlbWVudCIsR10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm4gSigiZGl2Iix7cm9sZToibGlzdGl0ZW0iLHRhYkluZGV4OjAsImRhdGEtYXgta2V5IjpZLHRpdGxlOkIsb25Nb3VzZUVudGVyOigpPT5aKFkpLG9uTW91c2VMZWF2ZTooKT0+WihudWxsKSxvbkZvY3VzOigpPT5aKFkpLG9uQmx1cjooKT0+WihudWxsKSxjbGFzc05hbWU6YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiByb3VuZGVkLW1kIHB5LTEgcHgtMC41IG1pbi13LTAgJHtYPyJiZy13aGl0ZS9bMC4wNl0iOiIifWAsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTAuNSBmbGV4LTEgbWluLXctMCIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gZm9udC1tZWRpdW0iLGNoaWxkcmVuOksubGFiZWx8fEsucm9sZXx8IlVubGFiZWxlZCJ9KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LXdoaXRlLzQ1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSIsY2hpbGRyZW46Sy5yb2xlfHxLLnR5cGV8fCJlbGVtZW50In0pXX0pLEooImNvZGUiLHtjbGFzc05hbWU6InNocmluay0wIGJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcm91bmRlZC1tZCB0ZXh0LXdoaXRlLzU1IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSBweC0xLjUgcHktWzNweF0iLGNoaWxkcmVuOkd9KV19KX0sKCQsSyk9PiQuaW5kZXg9PT1LLmluZGV4JiYkLmFjdGl2ZT09PUsuYWN0aXZlJiYkLm9uSGlnaGxpZ2h0PT09Sy5vbkhpZ2hsaWdodCYmZjIoJC5lbGVtZW50LEsuZWxlbWVudCkpO3ZhciBmNz0zMDAwLHA3PTIwOTcxNTIwMCx1Nz0iTGFyZ2UgdmlkZW8gKD4yMDAgTUIpIOKAlCBtYXkgc3R1dHRlciBvbiBzaGFyZWQgbWVtb3J5IixnOT0iSEVJQyBkZWNvZGUgZmFpbGVkIOKAlCBleHBvcnQgYXMgSlBFRyBvciBQTkcgYW5kIHJldHJ5IjtmdW5jdGlvbiBsNygkLEspe2lmKEspcmV0dXJuImFjdGl2ZSI7aWYoJD09PSJhY3RpdmUiKXJldHVybiJkaXNjb25uZWN0ZWQiO2lmKCQ9PT0iZGlzY29ubmVjdGVkIilyZXR1cm4icmVhZHkiO3JldHVybiAkfWZ1bmN0aW9uIGQ3KCQpe2lmKCEkLmluamVjdGVkKXJldHVybiJwbGF5IjtpZigkLnNvdXJjZT09PSJwbGFjZWhvbGRlciIpcmV0dXJuInBsYXkiO2lmKCQuYnVuZGxlSWQmJiEkLmZvcmVncm91bmRJc0luamVjdGVkKXJldHVybiJhdHRhY2giO3JldHVybiJzdG9wIn1mdW5jdGlvbiBjNygkKXtyZXR1cm4gJC5zcGxpdChgCmApLm1hcCgoSyk9PksudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikuZmxhdE1hcCgoSyk9PntsZXQgUT1LLmluZGV4T2YoIlx0Iik7aWYoUTw9MClyZXR1cm5bXTtsZXQgWD1LLnNsaWNlKDAsUSkudHJpbSgpLFo9Sy5zbGljZShRKzEpLnRyaW0oKTtpZighWHx8IVopcmV0dXJuW107cmV0dXJuW3tpZDpYLG5hbWU6Wn1dfSl9dmFyIG83PW5ldyBTZXQoWyJtcDQiLCJtNHYiLCJtb3YiLCJxdCIsImF2aSIsIm1rdiIsIndlYm0iLCJtcGciLCJtcGVnIiwiM2dwIiwiM2cyIiwidHMiLCJ3bXYiXSk7ZnVuY3Rpb24gaDkoJCl7aWYoJC50eXBlJiYkLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpcmV0dXJuITA7bGV0IEs9KCQubmFtZT8/IiIpLnRvTG93ZXJDYXNlKCksUT1LLmxhc3RJbmRleE9mKCIuIik7aWYoUTwwKXJldHVybiExO3JldHVybiBvNy5oYXMoSy5zbGljZShRKzEpKX1mdW5jdGlvbiBhNygkKXtyZXR1cm4gaDkoJCkmJiQuc2l6ZT5wN31mdW5jdGlvbiByNygkKXtsZXQgSz0oJC50eXBlPz8iIikudG9Mb3dlckNhc2UoKTtpZihLPT09ImltYWdlL2hlaWMifHxLPT09ImltYWdlL2hlaWYiKXJldHVybiEwO2xldCBRPSgkLm5hbWU/PyIiKS50b0xvd2VyQ2FzZSgpO3JldHVybiBRLmVuZHNXaXRoKCIuaGVpYyIpfHxRLmVuZHNXaXRoKCIuaGVpZiIpfWZ1bmN0aW9uIGk3KHtyYXdNZXNzYWdlOiQsbGFzdEZpbGVJc0hlaWM6Syxzb3VyY2U6UX0pe2lmKEsmJihRPT09ImltYWdlInx8UT09PSJ2aWRlbyIpKXJldHVybiBnOTtyZXR1cm4gJH1mdW5jdGlvbiBuNyh7c3RhdGU6JH0pe2xldCBLPSQ9PT0iYWN0aXZlIj8iQWN0aXZlIjokPT09ImRpc2Nvbm5lY3RlZCI/IkRpc2Nvbm5lY3RlZCI6IlJlYWR5IixRPSQ9PT0iYWN0aXZlIj8ic2l6ZS0xLjUgcm91bmRlZC1mdWxsIGJnLXN1Y2Nlc3MtZW1lcmFsZCBbYm94LXNoYWRvdzowXzBfNnB4X3JnYmEoNzQsMjIyLDEyOCwwLjcpXSI6JD09PSJkaXNjb25uZWN0ZWQiPyJzaXplLTEuNSByb3VuZGVkLWZ1bGwgYmctZGFuZ2VyLXNvZnQgW2JveC1zaGFkb3c6MF8wXzZweF9yZ2JhKDI0OCwxMTMsMTEzLDAuNTUpXSI6bnVsbDtyZXR1cm4gSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gdGV4dC13aGl0ZS81NSBmb250LW1vbm8gaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUganVzdGlmeS1zZWxmLWVuZCBsZWFkaW5nLW5vbmUiLCJkYXRhLWNhbWVyYS1waWxsLXN0YXRlIjokLGNoaWxkcmVuOltRJiZKKCJzcGFuIix7Y2xhc3NOYW1lOlF9KSxLXX0pfWZ1bmN0aW9uIHM3KCl7cmV0dXJuIEooInAiLHtjbGFzc05hbWU6Im0tMCB0ZXh0LWNlbnRlciB0ZXh0LVsxMHB4XSBsZWFkaW5nLVsxLjVdIHRleHQtd2hpdGUvNDUiLCJkYXRhLWNhbWVyYS10ZXN0LXBhdHRlcm4taGludCI6ITAsY2hpbGRyZW46IlRlc3QtcGF0dGVybiBmZWVkIn0pfWZ1bmN0aW9uIHQ3KHttb2RlOiQsZmlsZU5hbWU6Syx3ZWJjYW1OYW1lOlEsc291cmNlS2luZDpYfSl7aWYoJD09PSJ1cGxvYWRpbmciKXJldHVybiBKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSB0ZXh0LXdoaXRlLzU1IixjaGlsZHJlbjoiVXBsb2FkaW5n4oCmIn0pO2lmKCQ9PT0iZmlsZSIpcmV0dXJuIEooZSx7Y2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToic2hyaW5rLTAgdGV4dC1bOXB4XSB0cmFja2luZy1bMC4xZW1dIHVwcGVyY2FzZSB0ZXh0LXdoaXRlLzU1IGJnLXdoaXRlL1swLjA2XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcHgtWzdweF0gcHktWzJweF0gcm91bmRlZC1mdWxsIixjaGlsZHJlbjpYPT09InZpZGVvIj8iVmlkZW8iOiJJbWFnZSJ9KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4LTEgbWluLXctMCB0cnVuY2F0ZSB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIGZvbnQtbW9ubyIsY2hpbGRyZW46Sz8/IiJ9KV19KTtpZigkPT09IndlYmNhbSIpcmV0dXJuIEooZSx7Y2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToic2hyaW5rLTAgdGV4dC1bOXB4XSB0cmFja2luZy1bMC4xZW1dIHVwcGVyY2FzZSB0ZXh0LXdoaXRlLzU1IGJnLXdoaXRlL1swLjA2XSBib3JkZXIgYm9yZGVyLXdoaXRlLzggcHgtWzdweF0gcHktWzJweF0gcm91bmRlZC1mdWxsIixjaGlsZHJlbjoiV2ViY2FtIn0pLEooInNwYW4iLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4tdy0wIHRydW5jYXRlIHRleHQtWzEycHhdIHRleHQtd2hpdGUvOTAgZm9udC1tb25vIixjaGlsZHJlbjpRPz8iIn0pXX0pO3JldHVybiBKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzg1IGZvbnQtbWVkaXVtIixjaGlsZHJlbjoiU2VsZWN0IG9yIGRyb3AgbWVkaWEifSl9ZnVuY3Rpb24gdjkoe2tpbmQ6JCxtZXNzYWdlOkt9KXtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOiQ9PT0id2FybmluZyI/ImJnLXdhcm5pbmcvMTAgYm9yZGVyIGJvcmRlci13YXJuaW5nLzI1IHRleHQtd2FybmluZy1zb2Z0IHRleHQtWzExcHhdIHB4LTIgcHktMS41IHJvdW5kZWQtbWQgYnJlYWstd29yZHMiOiJiZy1kYW5nZXIvMTAgYm9yZGVyIGJvcmRlci1kYW5nZXIvMjAgdGV4dC1kYW5nZXItc29mdCB0ZXh0LVsxMXB4XSBweC0yIHB5LTEuNSByb3VuZGVkLW1kIGJyZWFrLXdvcmRzIiwiZGF0YS1jYW1lcmEtYmFubmVyLWtpbmQiOiQscm9sZTokPT09ImVycm9yIj8iYWxlcnQiOiJzdGF0dXMiLGNoaWxkcmVuOkt9KX1mdW5jdGlvbiBqOSh7dWRpZDokLGJ1bmRsZUlkOkt9KXtsZXRbUSxYXT1EKCExKSxbWixZXT1EKCJwbGFjZWhvbGRlciIpLFtxLEddPUQoIiIpLFtCLFZdPUQobnVsbCksW0MsTF09RCghMSksRj1TKDApLFtOLF9dPUQoITEpLFt6LFVdPUQoITEpLEE9UyhudWxsKSxbTSxFXT1EKFtdKSxbVCxiXT1EKCExKSxbeCxtXT1EKCIiKSxbUixvXT1EKCJvZmYiKSxbaSxYMV09RChudWxsKSxbJDEsc109RChudWxsKSxMMT1pIT09bnVsbHx8JDEhPT1udWxsLFtkLGFdPUQobnVsbCksW0sxLFkxXT1EKG51bGwpLFssVjFdPUQobnVsbCksW2MsUTFdPUQoITEpLFtVMSx1XT1EKCJyZWFkeSIpLFtqLGtdPUQoKCk9Pm5ldyBTZXQpLFt2LHBdPUQobnVsbCksW3ExLE4xXT1EKG51bGwpLF8xPVMoITEpLHgxPVMoITEpLFQxPVMoIm9mZiIpLGgxPVMoITEpLHYxPU8xKCgpPT57bGV0IEg9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uc2VydmVTaW1CaW47aWYoIUgpcmV0dXJuInNlcnZlLXNpbS1zamNobWllbGEiO2lmKC9cLnRzJC8udGVzdChIKSlyZXR1cm5gYnVuICR7WjEoSCl9YDtpZigvXC5qcyQvLnRlc3QoSCkpcmV0dXJuYG5vZGUgJHtaMShIKX1gO3JldHVybiBaMShIKX0sW10pLGMxPVAoYXN5bmMoKT0+e2xldCBIPWF3YWl0IEMxKGAke3YxfSBjYW1lcmEgc3RhdHVzIC1kICR7JH1gKTtpZihILmV4aXRDb2RlIT09MClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIEpTT04ucGFyc2UoSC5zdGRvdXQudHJpbSgpKX1jYXRjaHtyZXR1cm4gbnVsbH19LFt2MSwkXSksSTE9Uyhhc3luYygpPT57fSksbzE9UyhLKTtJKCgpPT57bzEuY3VycmVudD1LfSxbS10pLEkoKCk9PntsZXQgSD0hMTtyZXR1cm4oYXN5bmMoKT0+e2xldCBnPWF3YWl0IGMxKCk7aWYoSHx8IWd8fCFnLmFsaXZlKXJldHVybjt4MS5jdXJyZW50PSEwO2xldCBoPWcuc291cmNlO2lmKGg9PT0icGxhY2Vob2xkZXIifHxoPT09IndlYmNhbSJ8fGg9PT0iaW1hZ2UifHxoPT09InZpZGVvIilZKGgpO2lmKChoPT09ImltYWdlInx8aD09PSJ2aWRlbyIpJiZnLmFyZylHKGcuYXJnKSxWKGcuYXJnLnNwbGl0KCIvIikucG9wKCk/P251bGwpO2lmKGg9PT0id2ViY2FtIiYmZy5hcmcpbShnLmFyZyksSTEuY3VycmVudCgpO2xldCBuPWcubWlycm9yPT09Im9uIj8ib24iOiJvZmYiO28obiksVDEuY3VycmVudD1uLHAoZy5oZWxwZXJQaWQ/P251bGwpLFExKCEwKTtsZXQgSjE9QXJyYXkuaXNBcnJheShnLmJ1bmRsZUlkcyk/Zy5idW5kbGVJZHM6W107aWYoSjEubGVuZ3RoPjApayhuZXcgU2V0KEoxKSk7bGV0IEIxPW8xLmN1cnJlbnQsdzE9aCYmaCE9PSJwbGFjZWhvbGRlciI7dShCMSYmSjEuaW5jbHVkZXMoQjEpJiZ3MT8iYWN0aXZlIjoicmVhZHkiKSxWMShgUmVhdHRhY2hlZCDihpIgJHtoPz8icnVubmluZyBoZWxwZXIifSR7Zy5hcmc/YCAoJHtnLmFyZ30pYDoiIn1gKX0pKCksKCk9PntIPSEwfX0sWyQsYzFdKSxJKCgpPT57bGV0IEg9ITEsZz0hMSxoPW51bGwsbj1hc3luYygpPT57aWYoSHx8ZylyZXR1cm47aWYodHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpcmV0dXJuO2c9ITA7dHJ5e2xldCBCMT1hd2FpdCBjMSgpO2lmKEgpcmV0dXJuO2xldCB3MT0hIUIxPy5hbGl2ZSxXPUFycmF5LmlzQXJyYXkoQjE/LmJ1bmRsZUlkcyk/QjEuYnVuZGxlSWRzOm51bGwsTz0hIUsmJihXP1cuaW5jbHVkZXMoSyk6ai5oYXMoSykpLHk9QjE/LnNvdXJjZT8/bnVsbCxyPWMmJncxJiZPJiYhISh5JiZ5IT09InBsYWNlaG9sZGVyIikmJih2PT1udWxsfHxCMT8uaGVscGVyUGlkPT09dik7aWYodSgodCk9Pmw3KHQscikpLCF3MSlRMSgodCk9PntpZighdClyZXR1cm4gdDtyZXR1cm4gayhuZXcgU2V0KSxwKG51bGwpLFQxLmN1cnJlbnQ9Im9mZiIsITF9KTtlbHNlIGlmKGMmJnYhPW51bGwmJkIxPy5oZWxwZXJQaWQhPT12KVExKCExKSxrKG5ldyBTZXQpLHAobnVsbCksVDEuY3VycmVudD0ib2ZmIjtlbHNlIGlmKHcxJiZBcnJheS5pc0FycmF5KEIxPy5idW5kbGVJZHMpKXtsZXQgdD1CMS5idW5kbGVJZHM7aygoejEpPT57aWYoejEuc2l6ZT09PXQubGVuZ3RoJiZ0LmV2ZXJ5KChEMSk9PnoxLmhhcyhEMSkpKXJldHVybiB6MTtyZXR1cm4gbmV3IFNldCh0KX0pfX1maW5hbGx5e2c9ITF9fTtoPXNldEludGVydmFsKCgpPT57bigpfSxmNyk7bGV0IEoxPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09InZpc2libGUiKW4oKX07aWYodHlwZW9mIGRvY3VtZW50PCJ1Iilkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixKMSk7cmV0dXJuKCk9PntpZihIPSEwLGgpY2xlYXJJbnRlcnZhbChoKTtpZih0eXBlb2YgZG9jdW1lbnQ8InUiKWRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEoxKX19LFtjMSxjLHYsSyxqXSk7bGV0IGExPVAoYXN5bmMoKT0+e2IoITApLGEobnVsbCk7dHJ5e2xldCBIPWF3YWl0IEMxKGAke3YxfSBjYW1lcmEgLS1saXN0LXdlYmNhbXNgKTtpZihILmV4aXRDb2RlIT09MCl7YShILnN0ZGVyci50cmltKCl8fGAtLWxpc3Qtd2ViY2FtcyBmYWlsZWQgKCR7SC5leGl0Q29kZX0pYCk7cmV0dXJufWxldCBnPWM3KEguc3Rkb3V0KTtpZihFKGcpLGcubGVuZ3RoPjAmJiF4KW0oZ1swXS5pZCl9ZmluYWxseXtiKCExKX19LFt4LHYxXSk7SSgoKT0+e0kxLmN1cnJlbnQ9YTF9LFthMV0pLEkoKCk9PntpZih6JiZNLmxlbmd0aD09PTAmJiFUKWExKCl9LFt6LE0ubGVuZ3RoLFQsYTFdKTtsZXQgeTE9UCgoSCk9PnthKGk3KHtyYXdNZXNzYWdlOkgsbGFzdEZpbGVJc0hlaWM6XzEuY3VycmVudCxzb3VyY2U6Wn0pKX0sW1pdKSxZMD1QKGFzeW5jKEgsZyxoKT0+e2xldCBuPUg9PT0iaW1hZ2UifHxIPT09InZpZGVvIixKMT1bImNhbWVyYSIsInN3aXRjaCIsbj8iZmlsZSI6SF07aWYoSD09PSJ3ZWJjYW0iJiZnKUoxLnB1c2goWjEoZykpO2lmKG4pe2lmKCFoLnRyaW0oKSlyZXR1cm4gYSgiRHJvcCBhIGZpbGUgaW50byB0aGUgcGFuZWwgb3IgcGljayBhbm90aGVyIHNvdXJjZS4iKSwhMTtKMS5wdXNoKFoxKGgudHJpbSgpKSl9SjEucHVzaCgiLWQiLCQsIi0tcXVpZXQiKTtsZXQgQjE9YXdhaXQgQzEoYCR7djF9ICR7SjEuam9pbigiICIpfWApO2lmKEIxLmV4aXRDb2RlIT09MClyZXR1cm4geTEoQjEuc3RkZXJyLnRyaW0oKXx8QjEuc3Rkb3V0LnRyaW0oKXx8YHN3aXRjaCBmYWlsZWQgKCR7QjEuZXhpdENvZGV9KWApLCExO18xLmN1cnJlbnQ9ITE7dHJ5e2xldCB3MT1KU09OLnBhcnNlKEIxLnN0ZG91dC50cmltKCkpO1YxKGBTd2l0Y2hlZCDihpIgJHt3MS5zb3VyY2U/P0h9JHt3MS5hcmc/YCAoJHt3MS5hcmd9KWA6IiJ9YCl9Y2F0Y2h7VjEoYFN3aXRjaGVkIOKGkiAke0h9YCl9cmV0dXJuITB9LFskLHYxLHkxXSksZTE9UChhc3luYygpPT57aWYoIUspcmV0dXJuO1gxKCJpbmplY3QiKSxhKG51bGwpLFYxKG51bGwpO3RyeXtsZXQgSD1bImNhbWVyYSIsWjEoSyksIi1kIiwkLCItLXF1aWV0Il07aWYoWj09PSJpbWFnZSJ8fFo9PT0idmlkZW8iKXtpZighcS50cmltKCkpe2EoIkRyb3AgYSBmaWxlIGludG8gdGhlIHBhbmVsIG9yIHBpY2sgYW5vdGhlciBzb3VyY2UuIik7cmV0dXJufUgucHVzaCgiLS1maWxlIixaMShxLnRyaW0oKSkpfWVsc2UgaWYoWj09PSJ3ZWJjYW0iKWlmKHgpSC5wdXNoKCItLXdlYmNhbSIsWjEoeCkpO2Vsc2UgSC5wdXNoKCItLXdlYmNhbSIpO0gucHVzaCgiLS1taXJyb3IiLFIpO2xldCBnPWF3YWl0IEMxKGAke3YxfSAke0guam9pbigiICIpfWApO2lmKGcuZXhpdENvZGUhPT0wKXt5MShnLnN0ZGVyci50cmltKCl8fGcuc3Rkb3V0LnRyaW0oKXx8YGluamVjdCBmYWlsZWQgKCR7Zy5leGl0Q29kZX0pYCk7cmV0dXJufV8xLmN1cnJlbnQ9ITE7bGV0IGg9bnVsbDt0cnl7bGV0IG49SlNPTi5wYXJzZShnLnN0ZG91dC50cmltKCkpO2g9bi5oZWxwZXJQaWQ/P251bGw7bGV0IEoxPW4uaGVscGVyUmVsYXVuY2hlZD09PSExPyJBdHRhY2hlZCI6IkluamVjdGVkIixCMT1uLnBpZD9gIHBpZCAke24ucGlkfWA6IiIsdzE9bi5oZWxwZXJQaWQ/YCwgaGVscGVyIHBpZCAke24uaGVscGVyUGlkfWA6IiI7VjEoYCR7SjF9ICR7bi5zb3VyY2U/P1p9IGludG8gJHtLfSR7QjF9JHt3MX1gKX1jYXRjaHtWMShnLnN0ZG91dC50cmltKCl8fCJJbmplY3RlZC4iKX1RMSghMCksdShaPT09InBsYWNlaG9sZGVyIj8icmVhZHkiOiJhY3RpdmUiKSxwKGgpLGsoKG4pPT5uLmhhcyhLKT9uOm5ldyBTZXQobikuYWRkKEspKSxUMS5jdXJyZW50PVJ9ZmluYWxseXtYMShudWxsKX19LFtLLCQsWixxLHgsUix2MSx5MV0pLGoxPWM/YCR7Wn06OiR7Wj09PSJ3ZWJjYW0iP3g6IiJ9Ojoke1o9PT0iaW1hZ2UifHxaPT09InZpZGVvIj9xOiIifWA6bnVsbCwkMD0hIUsmJmouaGFzKEspLEswPSQwJiZaIT09InBsYWNlaG9sZGVyIjtJKCgpPT57aWYoIUswKXtoMS5jdXJyZW50PSExO3JldHVybn1pZihoMS5jdXJyZW50KXJldHVybjtoMS5jdXJyZW50PSEwLFgoITApfSxbSzBdKSxJKCgpPT57aWYoIXExKXJldHVybjtpZighS3x8TDF8fE4pcmV0dXJuO2lmKFohPT0id2ViY2FtInx8eCE9PXExKXJldHVybjtpZihOMShudWxsKSxjKXJldHVybjtlMSgpfSxbcTEsSyxMMSxOLFoseCxjLGUxXSksSSgoKT0+e2lmKCFjKXJldHVybjtpZigoWj09PSJpbWFnZSJ8fFo9PT0idmlkZW8iKSYmIXEudHJpbSgpKXJldHVybjtpZihaPT09IndlYmNhbSImJiF4KXJldHVybjtpZih4MS5jdXJyZW50KXt4MS5jdXJyZW50PSExO3JldHVybn1sZXQgSD0hMTtyZXR1cm4oYXN5bmMoKT0+e3MoInN3aXRjaCIpLGEobnVsbCk7dHJ5e2lmKEgpcmV0dXJuO2F3YWl0IFkwKFoseCxxKX1maW5hbGx5e2lmKCFIKXMobnVsbCl9fSkoKSwoKT0+e0g9ITB9fSxbajFdKSxJKCgpPT57aWYoIWMpcmV0dXJuO2lmKFQxLmN1cnJlbnQ9PT1SKXJldHVybjtsZXQgSD1SLGc9ITE7cmV0dXJuKGFzeW5jKCk9PntzKCJtaXJyb3IiKSxhKG51bGwpO3RyeXtsZXQgaD1hd2FpdCBDMShgJHt2MX0gY2FtZXJhIG1pcnJvciAke0h9IC1kICR7JH0gLS1xdWlldGApO2lmKGcpcmV0dXJuO2lmKGguZXhpdENvZGUhPT0wKXthKGguc3RkZXJyLnRyaW0oKXx8aC5zdGRvdXQudHJpbSgpfHxgbWlycm9yIGZhaWxlZCAoJHtoLmV4aXRDb2RlfSlgKTtyZXR1cm59VDEuY3VycmVudD1ILFYxKGBNaXJyb3Ig4oaSICR7SH1gKX1maW5hbGx5e2lmKCFnKXMobnVsbCl9fSkoKSwoKT0+e2c9ITB9fSxbUixjXSk7bGV0IE0xPVAoYXN5bmMoKT0+e1gxKCJzdG9wIiksYShudWxsKTt0cnl7bGV0IEg9YXdhaXQgQzEoYCR7djF9IGNhbWVyYSAtLXN0b3Atd2ViY2FtIC1kICR7JH1gKTtpZihILmV4aXRDb2RlIT09MCl7YShILnN0ZGVyci50cmltKCl8fGBzdG9wLXdlYmNhbSBmYWlsZWQgKCR7SC5leGl0Q29kZX0pYCk7cmV0dXJufVYxKCJDYW1lcmEgaGVscGVyIHN0b3BwZWQuIiksUTEoITEpLHUoInJlYWR5IiksayhuZXcgU2V0KSxUMS5jdXJyZW50PSJvZmYifWZpbmFsbHl7WDEobnVsbCl9fSxbJCx2MV0pLGIxPVAoYXN5bmMoSCk9PntsZXQgZz1yNyh7dHlwZTpILnR5cGUsbmFtZTpILm5hbWV9KSxoPUgudHlwZS5zdGFydHNXaXRoKCJpbWFnZS8iKXx8ZyxuPUgudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKXx8aDkoe3R5cGU6SC50eXBlLG5hbWU6SC5uYW1lfSk7aWYoIWgmJiFuKXtfMS5jdXJyZW50PSExLGEoYFVuc3VwcG9ydGVkIGZpbGUgdHlwZTogJHtILnR5cGV8fEgubmFtZX1gKTtyZXR1cm59aWYoXyghMCksYShudWxsKSxZMShudWxsKSxhNyh7dHlwZTpILnR5cGUsbmFtZTpILm5hbWUsc2l6ZTpILnNpemV9KSlZMSh1Nyk7XzEuY3VycmVudD1nO3RyeXtsZXQgSjE9bTAoSCksQjE9YXdhaXQgRjkoSCwic2VydmUtc2ltLWNhbXNyYyIsSjEsQzEpO1YoSC5uYW1lKSxZKG4/InZpZGVvIjoiaW1hZ2UiKSxHKEIxKSxWMShgTG9hZGVkICR7SC5uYW1lfWApfWNhdGNoKEoxKXtpZihfMS5jdXJyZW50KWEoZzkpO2Vsc2UgYShKMT8ubWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQiKX1maW5hbGx5e18oITEpfX0sW10pLHEwPVAoYXN5bmMoSCk9PntILnByZXZlbnREZWZhdWx0KCksSC5zdG9wUHJvcGFnYXRpb24oKSxGLmN1cnJlbnQ9MCxMKCExKTtsZXQgZz1ILmRhdGFUcmFuc2Zlcj8uZmlsZXM/LlswXTtpZihnKWF3YWl0IGIxKGcpfSxbYjFdKSxVMD1QKCgpPT57WSgicGxhY2Vob2xkZXIiKSxHKCIiKSxWKG51bGwpLGEobnVsbCksWTEobnVsbCksXzEuY3VycmVudD0hMX0sW10pLHUxPVAoKCk9PntBLmN1cnJlbnQ/LmNsaWNrKCl9LFtdKSxHMD1QKGFzeW5jKEgpPT57bGV0IGc9SC50YXJnZXQsaD1nLmZpbGVzPy5bMF07aWYoZy52YWx1ZT0iIixoKWF3YWl0IGIxKGgpfSxbYjFdKTtJKCgpPT57aWYoIXopcmV0dXJuO2xldCBIPShnKT0+e2xldCBoPWcudGFyZ2V0O2lmKGggaW5zdGFuY2VvZiBFbGVtZW50JiZoLmNsb3Nlc3QoIltkYXRhLWNhbWVyYS1zb3VyY2UtbWVudV0iKSlyZXR1cm47VSghMSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixIKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsSCl9LFt6XSk7bGV0IHowPVAoKEgpPT57aWYobShILmlkKSxZKCJ3ZWJjYW0iKSxWKG51bGwpLGEobnVsbCksXzEuY3VycmVudD0hMSxVKCExKSxLKU4xKEguaWQpfSxbS10pLFYwPVAoKCk9PntvKChIKT0+SD09PSJvbiI/Im9mZiI6Im9uIil9LFtdKSxQMT0hY3x8Wj09PSJwbGFjZWhvbGRlciIsazE9UCgoSCk9PntpZihILnByZXZlbnREZWZhdWx0KCksRi5jdXJyZW50KyssRi5jdXJyZW50PT09MSlMKCEwKX0sW10pLFEwPVAoKEgpPT57aWYoSC5wcmV2ZW50RGVmYXVsdCgpLEguZGF0YVRyYW5zZmVyKUguZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbXSksRjE9UCgoSCk9PntpZihILnByZXZlbnREZWZhdWx0KCksRi5jdXJyZW50LS0sRi5jdXJyZW50PD0wKUYuY3VycmVudD0wLEwoITEpfSxbXSksbDE9ZDcoe2J1bmRsZUlkOkssaW5qZWN0ZWQ6Yyxzb3VyY2U6Wixmb3JlZ3JvdW5kSXNJbmplY3RlZDokMH0pLG0xPWwxPT09InN0b3AiP3tsYWJlbDppPT09InN0b3AiPyJTdG9wcGluZ+KApiI6IlN0b3AiLG9uQ2xpY2s6TTEsa2luZDoic3RvcCJ9OmwxPT09ImF0dGFjaCI/e2xhYmVsOmk9PT0iaW5qZWN0Ij8iSW5qZWN0aW5n4oCmIjpgSW5qZWN0ICR7S31gLG9uQ2xpY2s6ZTEsa2luZDoiYXR0YWNoIn06e2xhYmVsOmk9PT0iaW5qZWN0Ij8iU3RhcnRpbmfigKYiOiJQbGF5IixvbkNsaWNrOmUxLGtpbmQ6InBsYXkifSxNMD1sMT09PSJzdG9wIj9OfHxpIT09bnVsbDohS3x8Tnx8aSE9PW51bGwsZjE9Wj09PSJwbGFjZWhvbGRlciIsRjA9Wj09PSJ3ZWJjYW0iLEowPShaPT09ImltYWdlInx8Wj09PSJ2aWRlbyIpJiYhIUIsVzA9RjA/TS5maW5kKChIKT0+SC5pZD09PXgpPy5uYW1lPz94Pz8iV2ViY2FtIjpudWxsLHc9Tj8idXBsb2FkaW5nIjpKMD8iZmlsZSI6RjA/IndlYmNhbSI6InBsYWNlaG9sZGVyIjtyZXR1cm4gSih0MSx7b3BlbjpRLG9uT3BlbkNoYW5nZTpYLGJvZHlDbGFzc05hbWU6InB0LTIuNSIsc3VtbWFyeUNsYXNzTmFtZToiZ3JpZCBbZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG9fMWZyX2F1dG9dIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LWxlZnQiLHN1bW1hcnk6SihlLHtjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTFweF0gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlLzUwIHVwcGVyY2FzZSB0cmFja2luZy1bMC4wOGVtXSBsZWFkaW5nLW5vbmUgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIixjaGlsZHJlbjoiQ2FtZXJhIn0pLEoobjcse3N0YXRlOlUxfSldfSksY2hpbGRyZW46SigiZGl2Iix7b25EcmFnRW50ZXI6azEsb25EcmFnT3ZlcjpRMCxvbkRyYWdMZWF2ZTpGMSxvbkRyb3A6cTAsY2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0yLjUiLGNoaWxkcmVuOltKKCJwIix7Y2xhc3NOYW1lOiJtLTAgdGV4dC1bMTBweF0gbGVhZGluZy1bMS41XSB0ZXh0LXdoaXRlLzQ1IixjaGlsZHJlbjoiUmVwbGFjZXMgdGhlIHNpbXVsYXRvcidzIGNhbWVyYSBmZWVkIGJ5IGluamVjdGluZyBhIGR5bGliIGF0IGFwcCBsYXVuY2ggYW5kIHN0cmVhbWluZyBmcmFtZXMgaW50byBzaGFyZWQgbWVtb3J5LiBQaWNrIG1lZGlhIG9yIGEgd2ViY2FtLCB0aGVuIFBsYXkgdG8gaW5qZWN0IGludG8gdGhlIGZvcmVncm91bmQgYXBwLiJ9KSxKKCJpbnB1dCIse3JlZjpBLHR5cGU6ImZpbGUiLGFjY2VwdDoiaW1hZ2UvKix2aWRlby8qIixjbGFzc05hbWU6ImhpZGRlbiIsb25DaGFuZ2U6RzB9KSxKKCJkaXYiLHtvbkNsaWNrOihIKT0+e2lmKCFmMSlyZXR1cm47aWYoSC50YXJnZXQuY2xvc2VzdCgiW2RhdGEtY2xlYXItbWVkaWFdIikpcmV0dXJuO3UxKCl9LHRpdGxlOmYxPyJObyBzb3VyY2Ugc2VsZWN0ZWQg4oCUIFBsYXkgdXNlcyBhIHRlc3QtcGF0dGVybiBmZWVkLiBDbGljayB0byBwaWNrIGFuIGltYWdlL3ZpZGVvLCBvciBkcm9wIG9uZSBoZXJlLiI6RjA/YFNvdXJjZTogJHtXMH1gOmBTb3VyY2U6ICR7Qj8/Wn1gLGNsYXNzTmFtZTpbInJlbGF0aXZlIG1pbi1oLVs0NHB4XSBmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMi41IHB4LTMuNSBweS0yLjUgcm91bmRlZC1bN3B4XSB0ZXh0LWNlbnRlciB0cmFuc2l0aW9uLVtib3JkZXItY29sb3IsYmFja2dyb3VuZF0gZHVyYXRpb24tMTUwIixmMT8iYmctd2hpdGUvWzAuMDRdIGJvcmRlciBib3JkZXItZGFzaGVkIGJvcmRlci13aGl0ZS8xMiI6ImJnLXdoaXRlL1swLjA0XSBib3JkZXIgYm9yZGVyLXdoaXRlLzgiLEM/IiFiZy1bcmdiYSgxMCwxMzIsMjU1LDAuMDgpXSAhYm9yZGVyLVtyZ2JhKDEwLDEzMiwyNTUsMC42KV0iOiIiLE4/ImN1cnNvci1wcm9ncmVzcyI6ZjE/ImN1cnNvci1wb2ludGVyIjoiY3Vyc29yLWRlZmF1bHQiXS5qb2luKCIgIiksY2hpbGRyZW46W0oodDcse21vZGU6dyxmaWxlTmFtZTpCLHdlYmNhbU5hbWU6VzAsc291cmNlS2luZDpafSksIWYxJiYhTiYmSigiYnV0dG9uIix7ImRhdGEtY2xlYXItbWVkaWEiOiEwLG9uQ2xpY2s6KEgpPT57SC5zdG9wUHJvcGFnYXRpb24oKSxVMCgpfSxjbGFzc05hbWU6InNocmluay0wIHctNSBoLTUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC13aGl0ZS81NSBob3Zlcjp0ZXh0LXdoaXRlLzkwIGN1cnNvci1wb2ludGVyIHAtMCIsImFyaWEtbGFiZWwiOiJDbGVhciBzb3VyY2UiLHRpdGxlOiJDbGVhciDihpIgcGxhY2Vob2xkZXIiLGNoaWxkcmVuOkoocDEse3NpemU6MTQsc3Ryb2tlV2lkdGg6Mn0pfSldfSksZjEmJiFOJiZKKHM3LHt9KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtc3RyZXRjaCBnYXAtMS41IixjaGlsZHJlbjpbSigiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSIsImRhdGEtY2FtZXJhLXNvdXJjZS1tZW51IjohMCxjaGlsZHJlbjpbSigiYnV0dG9uIix7b25DbGljazooKT0+VSgoSCk9PiFIKSxjbGFzc05hbWU6ImgtZnVsbCBtaW4taC1bMzZweF0gdy0xMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy10cmFuc3BhcmVudCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHRleHQtd2hpdGUvODUgcm91bmRlZC1bN3B4XSBjdXJzb3ItcG9pbnRlciBwLTAgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIGhvdmVyOmJvcmRlci13aGl0ZS8yMCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1oYXNwb3B1cCI6Im1lbnUiLCJhcmlhLWV4cGFuZGVkIjp6LHRpdGxlOlo9PT0id2ViY2FtIj9gU291cmNlOiB3ZWJjYW0ke3g/YCAoJHtNLmZpbmQoKEgpPT5ILmlkPT09eCk/Lm5hbWU/P3h9KWA6IiJ9IOKAlCBjbGljayB0byBjaGFuZ2VgOmBTb3VyY2U6ICR7Wn0g4oCUIGNsaWNrIHRvIHBpY2sgbWVkaWEgb3Igd2ViY2FtYCwiYXJpYS1sYWJlbCI6IkNob29zZSBjYW1lcmEgc291cmNlIixjaGlsZHJlbjpKKEoyLHtzaXplOjIwLHN0cm9rZVdpZHRoOjJ9KX0pLHomJkooImRpdiIse3JvbGU6Im1lbnUiLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNnB4KV0gbGVmdC0wIHotMTAgbWluLXctWzIwMHB4XSBmbGV4IGZsZXgtY29sIGdhcC1weCBwLTEgYmctcGFuZWwgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzdweF0gc2hhZG93LVswXzhweF8yNHB4X3JnYmEoMCwwLDAsMC40KV0iLGNoaWxkcmVuOltKKCJidXR0b24iLHtyb2xlOiJtZW51aXRlbSIsY2xhc3NOYW1lOiJ0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC13aGl0ZS84NSB0ZXh0LVsxMnB4XSBweC0yLjUgcHktWzdweF0gcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy13aGl0ZS9bMC4wNl0iLG9uQ2xpY2s6KCk9PntVKCExKSx1MSgpfSx0aXRsZToiUGljayBhbiBpbWFnZSBvciB2aWRlbyBmcm9tIGRpc2siLGNoaWxkcmVuOiJCcm93c2UgbWVkaWHigKYifSksSigiZGl2Iix7Y2xhc3NOYW1lOiJoLXB4IGJnLXdoaXRlLzggbXktMSJ9KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBwbC0yLjUgcHItMiBwdC0xIHBiLVsycHhdIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToidGV4dC1bMTBweF0gdGV4dC13aGl0ZS80NSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMDhlbV0iLGNoaWxkcmVuOlQ/IkNhbWVyYXMgKGxvYWRpbmfigKYpIjpNLmxlbmd0aD09PTA/Ik5vIGNhbWVyYXMiOiJDYW1lcmFzIn0pLEooImJ1dHRvbiIse29uQ2xpY2s6KEgpPT57SC5zdG9wUHJvcGFnYXRpb24oKSxhMSgpfSxkaXNhYmxlZDpULGNsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy1bMjJweF0gaC1bMjJweF0gYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1bNXB4XSB0ZXh0LXdoaXRlLzU1IGhvdmVyOnRleHQtd2hpdGUvOTAgY3Vyc29yLXBvaW50ZXIgcC0wIGRpc2FibGVkOm9wYWNpdHktNTAiLCJhcmlhLWxhYmVsIjoiUmVmcmVzaCBjYW1lcmFzIix0aXRsZToiUmVmcmVzaCBjYW1lcmFzIixjaGlsZHJlbjpKKEEwLHtzaXplOjEzLHN0cm9rZVdpZHRoOjJ9KX0pXX0pLE0ubWFwKChIKT0+e2xldCBnPVo9PT0id2ViY2FtIiYmeD09PUguaWQ7cmV0dXJuIEooImJ1dHRvbiIse3JvbGU6Im1lbnVpdGVtIixjbGFzc05hbWU6WyJ0ZXh0LWxlZnQgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgdGV4dC1bMTJweF0gcHgtMi41IHB5LVs3cHhdIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgaG92ZXI6Ymctd2hpdGUvWzAuMDZdIixnPyIhYmctd2hpdGUvWzAuMTJdICF0ZXh0LXdoaXRlIjoidGV4dC13aGl0ZS84NSJdLmpvaW4oIiAiKSxvbkNsaWNrOigpPT56MChIKSx0aXRsZTpILm5hbWUsY2hpbGRyZW46SC5uYW1lfSxILmlkKX0pXX0pXX0pLEooImJ1dHRvbiIse29uQ2xpY2s6bTEub25DbGljayxkaXNhYmxlZDpNMCxjbGFzc05hbWU6WyJmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEuNSBweS0yIHB4LTIuNSBib3JkZXItbm9uZSByb3VuZGVkLVs3cHhdIHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgY3Vyc29yLXBvaW50ZXIgZGlzYWJsZWQ6b3BhY2l0eS01MCBtaW4taC1bMzZweF0iLG0xLmtpbmQ9PT0ic3RvcCI/ImJnLXdoaXRlL1swLjE2XSB0ZXh0LXdoaXRlIGVuYWJsZWQ6aG92ZXI6Ymctd2hpdGUvWzAuMjJdIjoiYmctc3VjY2Vzcy1lbWVyYWxkIHRleHQtWyMwNjIwMThdIGVuYWJsZWQ6aG92ZXI6YnJpZ2h0bmVzcy1bMS4wOF0iXS5qb2luKCIgIiksdGl0bGU6bTEua2luZD09PSJzdG9wIj8iU3RvcCB0aGUgY2FtZXJhIGhlbHBlciBhbmQgdGVybWluYXRlIGluamVjdGVkIGFwcHMiOm0xLmtpbmQ9PT0iYXR0YWNoIj9gSW5qZWN0ICR7S30gc28gaXQgam9pbnMgdGhlIGNhbWVyYSBmZWVkYDohSz8iQnJpbmcgYW4gYXBwIHRvIHRoZSBmb3JlZ3JvdW5kIGZpcnN0IjoiU3RhcnQ6IGluamVjdCB0aGUgZHlsaWIgYW5kIGxhdW5jaCB0aGUgZm9yZWdyb3VuZCBhcHAgd2l0aCB0aGUgY2hvc2VuIHNvdXJjZSIsImFyaWEtcHJlc3NlZCI6bTEua2luZD09PSJzdG9wIiwiYXJpYS1sYWJlbCI6bTEua2luZD09PSJzdG9wIj8iU3RvcCI6IlBsYXkiLGNoaWxkcmVuOlttMS5raW5kPT09InN0b3AiP0ooQjIse30pOkooVjIse30pLEooInNwYW4iLHtjaGlsZHJlbjptMS5raW5kPT09InN0b3AiPyJTdG9wIjptMS5raW5kPT09ImF0dGFjaCI/IkluamVjdCI6IlBsYXkifSldfSksSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOlYwLGRpc2FibGVkOlAxLGNsYXNzTmFtZTpgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy0xMCBtaW4taC1bMzZweF0gYm9yZGVyIHJvdW5kZWQtWzdweF0gZm9udC1baW5oZXJpdF0gZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgYWN0aXZlOnNjYWxlLVswLjk3XSAke1I9PT0ib24iPyJiZy13aGl0ZSBib3JkZXItd2hpdGUgdGV4dC1bIzBhMGEwY10gY3Vyc29yLXBvaW50ZXIgZW5hYmxlZDpob3ZlcjpiZy13aGl0ZS9bMC44OF0gZW5hYmxlZDpob3Zlcjpib3JkZXItd2hpdGUvWzAuODhdIGVuYWJsZWQ6aG92ZXI6dGV4dC1bIzBhMGEwY10iOiJiZy13aGl0ZS9bMC4wNF0gYm9yZGVyLXdoaXRlLzggdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciBlbmFibGVkOmhvdmVyOmJnLXdoaXRlL1swLjA5XSBlbmFibGVkOmhvdmVyOmJvcmRlci1bcmdiYSgyNTUsMjU1LDI1NSwwLjE4KV0gZW5hYmxlZDpob3Zlcjp0ZXh0LXdoaXRlIn1gLCJhcmlhLWxhYmVsIjpgTWlycm9yOiAke1J9IOKAlCB0YXAgdG8gdG9nZ2xlYCx0aXRsZTpQMT8iTWlycm9yIHRvZ2dsZSBhdmFpbGFibGUgb25jZSBhIHNvdXJjZSBpcyBzdHJlYW1pbmciOmBNaXJyb3I6ICR7Un0g4oCUIGNsaWNrIHRvIHRvZ2dsZWAsImFyaWEtcHJlc3NlZCI6Uj09PSJvbiIsY2hpbGRyZW46SihLMix7c2l6ZToyMCxzdHJva2VXaWR0aDoyLGZpbGw6Uj09PSJvbiI/ImN1cnJlbnRDb2xvciI6Im5vbmUifSl9KV19KSxLMSYmSih2OSx7a2luZDoid2FybmluZyIsbWVzc2FnZTpLMX0pLGQmJkoodjkse2tpbmQ6ImVycm9yIixtZXNzYWdlOmR9KV19KX0pfXZhciB6Mj1bImV4dHJhLXNtYWxsIiwic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsImV4dHJhLWxhcmdlIiwiZXh0cmEtZXh0cmEtbGFyZ2UiLCJleHRyYS1leHRyYS1leHRyYS1sYXJnZSJdLGU3PTI1MCwkJD17YXBwZWFyYW5jZToibGlnaHQiLCJsaXF1aWQtZ2xhc3MiOiJjbGVhciIsImNvbG9yLWZpbHRlciI6Im5vbmUiLCJ0ZXh0LXNpemUiOiJsYXJnZSIsInJlZHVjZS1tb3Rpb24iOiJvZmYiLCJpbmNyZWFzZS1jb250cmFzdCI6Im9mZiIsInNob3ctYm9yZGVycyI6Im9mZiIsInJlZHVjZS10cmFuc3BhcmVuY3kiOiJvZmYiLHZvaWNlb3Zlcjoib2ZmIn0sSzM9e2FwcGVhcmFuY2U6W3t2YWx1ZToibGlnaHQiLGxhYmVsOiJMaWdodCJ9LHt2YWx1ZToiZGFyayIsbGFiZWw6IkRhcmsifV0sImxpcXVpZC1nbGFzcyI6W3t2YWx1ZToiY2xlYXIiLGxhYmVsOiJDbGVhciJ9LHt2YWx1ZToidGludGVkIixsYWJlbDoiVGludGVkIn1dLCJjb2xvci1maWx0ZXIiOlt7dmFsdWU6Im5vbmUiLGxhYmVsOiJOb25lIn0se3ZhbHVlOiJyZWQtZ3JlZW4iLGxhYmVsOiJSZWQvR3JlZW4gKFByb3Rhbm9waWEpIn0se3ZhbHVlOiJncmVlbi1yZWQiLGxhYmVsOiJHcmVlbi9SZWQgKERldXRlcmFub3BpYSkifSx7dmFsdWU6ImJsdWUteWVsbG93IixsYWJlbDoiQmx1ZS9ZZWxsb3cgKFRyaXRhbm9waWEpIn0se3ZhbHVlOiJncmF5c2NhbGUiLGxhYmVsOiJHcmF5c2NhbGUifV19LEskPVt7a2V5OiJyZWR1Y2UtbW90aW9uIixsYWJlbDoiUmVkdWNlIE1vdGlvbiJ9LHtrZXk6ImluY3JlYXNlLWNvbnRyYXN0IixsYWJlbDoiSW5jcmVhc2UgQ29udHJhc3QifSx7a2V5OiJzaG93LWJvcmRlcnMiLGxhYmVsOiJTaG93IEJvcmRlcnMifSx7a2V5OiJyZWR1Y2UtdHJhbnNwYXJlbmN5IixsYWJlbDoiUmVkdWNlIFRyYW5zcGFyZW5jeSJ9LHtrZXk6InZvaWNlb3ZlciIsbGFiZWw6IlZvaWNlT3ZlciJ9XTtmdW5jdGlvbiBDMih7aWNvbjokLGxhYmVsOkssY2hpbGRyZW46UX0pe3JldHVybiBKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBtaW4taC1bMzBweF0iLCJkYXRhLXNldHRpbmctcm93IjpLLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlLzkwIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToiZmxleCBzaXplLVsxOHB4XSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC13aGl0ZSIsY2hpbGRyZW46JH0pLEtdfSksSigic3BhbiIse2NsYXNzTmFtZToiZmxleCBtaW4tdy0wIGp1c3RpZnktZW5kIixjaGlsZHJlbjpRfSldfSl9ZnVuY3Rpb24gUSQoe3ZhbHVlOiQsZGlzYWJsZWQ6SyxvbkNoYW5nZTpRfSl7bGV0W1gsWl09RChudWxsKSxZPVMobnVsbCkscT1TKG51bGwpLEc9UCgoVSk9PntpZihxLmN1cnJlbnQ9PT1VKXJldHVybjtxLmN1cnJlbnQ9VSxRKFUpfSxbUV0pLEI9UCgoVSk9PntpZihaKFUpLFkuY3VycmVudCljbGVhclRpbWVvdXQoWS5jdXJyZW50KTtZLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+RyhVKSxlNyl9LFtHXSksVj1QKCgpPT57aWYoWS5jdXJyZW50KWNsZWFyVGltZW91dChZLmN1cnJlbnQpLFkuY3VycmVudD1udWxsO1ooKFUpPT57aWYoVSE9PW51bGwpRyhVKTtyZXR1cm4gbnVsbH0pLHEuY3VycmVudD1udWxsfSxbR10pLEM9ejIubGVuZ3RoLTEsTD1YPz8kLEY9YCR7TC9DKjEwMH0lYDtyZXR1cm4gSigic3BhbiIse2NsYXNzTmFtZToiZmxleCB3LVsxMjBweF0gbWluLXctMCBmbGV4LWNvbCIsY2hpbGRyZW46W0ooImlucHV0Iix7dHlwZToicmFuZ2UiLCJhcmlhLWxhYmVsIjoiVGV4dCBTaXplIixtaW46MCxtYXg6QyxzdGVwOjEsdmFsdWU6TCxkaXNhYmxlZDpLLG9uQ2hhbmdlOihVKT0+QihOdW1iZXIoVS50YXJnZXQudmFsdWUpKSxvblBvaW50ZXJVcDpWLG9uS2V5VXA6VixvbkJsdXI6VixzdHlsZTp7Ii0tc2xpZGVyLWZpbGwiOkYsIi0tc2xpZGVyLWZpbGwtY29sb3IiOks/InJnYmEoMjU1LDI1NSwyNTUsMC4zKSI6IiMwYTg0ZmYifSxjbGFzc05hbWU6YGgtWzEzcHhdIHctZnVsbCBhcHBlYXJhbmNlLW5vbmUgcm91bmRlZC1mdWxsIGJnLXRyYW5zcGFyZW50IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOltvdXRsaW5lOjEuNXB4X3NvbGlkX3JnYmEoMTAsMTMyLDI1NSwwLjU1KV0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC00ICR7Sz8iY3Vyc29yLWRlZmF1bHQiOiJjdXJzb3ItcG9pbnRlciJ9ICR7IlsmOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFja106aC1bNHB4XSBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2tdOltiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0b19yaWdodCx2YXIoLS1zbGlkZXItZmlsbC1jb2xvcilfdmFyKC0tc2xpZGVyLWZpbGwpLHJnYmEoMjU1LDI1NSwyNTUsMC4yMilfdmFyKC0tc2xpZGVyLWZpbGwpKV0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOmgtWzRweF0gWyY6Oi1tb3otcmFuZ2UtdHJhY2tdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS10cmFja106Ymctd2hpdGUvMjAgWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOmgtWzRweF0gWyY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3NdOnJvdW5kZWQtZnVsbCBbJjo6LW1vei1yYW5nZS1wcm9ncmVzc106YmctW3ZhcigtLXNsaWRlci1maWxsLWNvbG9yKV0ifSAkeyJbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOmFwcGVhcmFuY2Utbm9uZSBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06cm91bmRlZC1mdWxsIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06Ymctd2hpdGUgWyY6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iXTpiZy13aGl0ZS81MCBbJjo6LXdlYmtpdC1zbGlkZXItdGh1bWJdOnNoYWRvdy1bMF8xcHhfM3B4X3JnYmEoMCwwLDAsMC40NSldIFsmOjotd2Via2l0LXNsaWRlci10aHVtYl06LW10LVs0LjVweF0gWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOnNpemUtWzEzcHhdIFsmOjotbW96LXJhbmdlLXRodW1iXTpyb3VuZGVkLWZ1bGwgWyY6Oi1tb3otcmFuZ2UtdGh1bWJdOmJvcmRlci1ub25lIFsmOjotbW96LXJhbmdlLXRodW1iXTpiZy13aGl0ZSBbJjpkaXNhYmxlZDo6LW1vei1yYW5nZS10aHVtYl06Ymctd2hpdGUvNTAifWB9KSxKKCJzcGFuIix7ImFyaWEtaGlkZGVuIjohMCxjbGFzc05hbWU6InBvaW50ZXItZXZlbnRzLW5vbmUgbXQtWzNweF0gZmxleCBqdXN0aWZ5LWJldHdlZW4gcHgtWzUuNXB4XSIsY2hpbGRyZW46ejIubWFwKChVKT0+Sigic3BhbiIse2NsYXNzTmFtZToic2l6ZS1bMnB4XSByb3VuZGVkLWZ1bGwgYmctd2hpdGUvNDAifSxVKSl9KV19KX1mdW5jdGlvbiBRMyh7bGFiZWw6JCx2YWx1ZTpLLG9wdGlvbnM6USxkaXNhYmxlZDpYLG9uQ2hhbmdlOlp9KXtyZXR1cm4gSihLNSx7bGFiZWw6JCx2YWx1ZTpLLG9wdGlvbnM6USxkaXNhYmxlZDpYLG9uQ2hhbmdlOlosY2xhc3NOYW1lOiJiZy13aGl0ZS9bMC4wNl0gYm9yZGVyIGJvcmRlci13aGl0ZS8xMCByb3VuZGVkLW1kIHRleHQtd2hpdGUvOTAgdGV4dC1bMTJweF0gcHktMC41IHB4LTIgbWluLXctMCBtYXgtdy1bMTUwcHhdIGRpc2FibGVkOnRleHQtd2hpdGUvNDAifSl9dmFyIFUyPXthcHBlYXJhbmNlOkooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltKKCJwYXRoIix7ZDoiTTEyIDJ2MiJ9KSxKKCJwYXRoIix7ZDoiTTE0LjgzNyAxNi4zODVhNiA2IDAgMSAxLTcuMjIzLTcuMjIyYy42MjQtLjE0Ny45Ny42Ni43MTUgMS4yNDhhNCA0IDAgMCAwIDUuMjYgNS4yNTljLjU4OS0uMjU1IDEuMzk2LjA5IDEuMjQ4LjcxNSJ9KSxKKCJwYXRoIix7ZDoiTTE2IDEyYTQgNCAwIDAgMC00LTQifSksSigicGF0aCIse2Q6Im0xOSA1LTEuMjU2IDEuMjU2In0pLEooInBhdGgiLHtkOiJNMjAgMTJoMiJ9KV19KSxnbGFzczpKKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyMjAgMjIwIixmaWxsOiJjdXJyZW50Q29sb3IiLHN0cm9rZToibm9uZSIsY2hpbGRyZW46W0ooInBhdGgiLHtkOiJNMTUyIDE4M1YxOTVIMTAwVjE4M0gxNTJaTTE5NiAxMzlWMTI2QzE5NiAxMDEuNjk5IDE3Ni4zMDEgODIgMTUyIDgySDEwMEM3NS42OTk1IDgyIDU2IDEwMS42OTkgNTYgMTI2VjEzOUM1NiAxNjMuMzAxIDc1LjY5OTUgMTgzIDEwMCAxODNWMTk1TDk5LjI3NjQgMTk0Ljk5NUM2OC45MjI4IDE5NC42MTEgNDQuMzg5MyAxNzAuMDc3IDQ0LjAwNDkgMTM5LjcyNEw0NCAxMzlWMTI2QzQ0IDk1LjA3MjEgNjkuMDcyMSA3MCAxMDAgNzBIMTUyQzE4Mi45MjggNzAgMjA4IDk1LjA3MjEgMjA4IDEyNlYxMzlMMjA3Ljk5NSAxMzkuNzI0QzIwNy42MTEgMTcwLjA3NyAxODMuMDc3IDE5NC42MTEgMTUyLjcyNCAxOTQuOTk1TDE1MiAxOTVWMTgzQzE3Ni4zMDEgMTgzIDE5NiAxNjMuMzAxIDE5NiAxMzlaIn0pLEooInBhdGgiLHtkOiJNMTM2IDI1QzE0Ny4wNDYgMjUgMTU2IDMzLjk1NDMgMTU2IDQ1VjcwSDE0M1Y0NUMxNDMgNDEuMTM0IDEzOS44NjYgMzggMTM2IDM4SDQxQzM3LjEzNCAzOCAzNCA0MS4xMzQgMzQgNDVWMTQwQzM0IDE0My44NjYgMzcuMTM0IDE0NyA0MSAxNDdINDQuODYwNEM0NS42NDg3IDE1MS41MzYgNDYuOTYzNCAxNTUuODkxIDQ4Ljc0MDIgMTYwSDQxTDQwLjQ4MzQgMTU5Ljk5M0MyOS44NDgxIDE1OS43MjQgMjEuMjc2NSAxNTEuMTUyIDIxLjAwNjggMTQwLjUxN0wyMSAxNDBWNDVDMjEgMzMuOTU0MyAyOS45NTQzIDI1IDQxIDI1SDEzNloifSksSigicGF0aCIse2Q6Ik0xNTYuMTk5IDE0MEMxNTYuMTk5IDE1MC44NzMgMTQ3LjUyMyAxNTkuNzE5IDEzNi43MTYgMTU5Ljk5M0wxMzYuMTk5IDE2MEg4MC45MTdDNzcuOTQ2MSAxNjAgNzYuMTYzOSAxNjMuMyA3Ny43OTMgMTY1Ljc4NEM3OS4yNDUxIDE2Ny45OTkgNzYuMTY0NyAxNzAuMzUzIDc0LjQwOTQgMTY4LjM3TDczLjYwNTkgMTY3LjQ2MkM2OS4zNDk3IDE2Mi42NTQgNjcgMTU2LjQ1NSA2NyAxNTAuMDM0QzY3IDE0OC4zNTggNjguMzU4MyAxNDcgNzAuMDMzOSAxNDdIMTM2LjE5OUMxNDAuMDY1IDE0NyAxNDMuMTk5IDE0My44NjYgMTQzLjE5OSAxNDBWOTYuOTk1NUMxNDMuMTk5IDkzLjk4MjIgMTQxLjM1NCA5MS4yNzYzIDEzOC41NDkgOTAuMTc2MUMxMzcuMzg5IDg5LjcyMTUgMTM3LjcxNSA4OCAxMzguOTYgODhMMTQzLjE5OSA4OEMxNTAuMzc5IDg4IDE1Ni4xOTkgOTMuODIwMyAxNTYuMTk5IDEwMVYxNDBaIn0pXX0pLGZpbHRlcjpKKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbSigicGF0aCIse2Q6Ik0xMSAxN2E0IDQgMCAwIDEtOCAwVjVhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJaIn0pLEooInBhdGgiLHtkOiJNMTYuNyAxM0gxOWEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMkg3In0pLEooInBhdGgiLHtkOiJNIDcgMTdoLjAxIn0pLEooInBhdGgiLHtkOiJtMTEgOCAyLjMtMi4zYTIuNCAyLjQgMCAwIDEgMy40MDQuMDA0TDE4LjYgNy42YTIuNCAyLjQgMCAwIDEgLjAyNiAzLjQzNEw5LjkgMTkuOCJ9KV19KSx0ZXh0U2l6ZTpKKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjAgMCA1MiAzNCIsZmlsbDoiY3VycmVudENvbG9yIixzdHJva2U6Im5vbmUiLGNoaWxkcmVuOkooInBhdGgiLHtkOiJNMzkuNzI2NiAzMy4wMjM0QzM4LjE0ODQgMzMuMDIzNCAzNi43NSAzMi43MjY2IDM1LjUzMTIgMzIuMTMyOEMzNC4zMTI1IDMxLjUzOTEgMzMuMzU5NCAzMC43MTA5IDMyLjY3MTkgMjkuNjQ4NEMzMiAyOC41NzAzIDMxLjY2NDEgMjcuMzEyNSAzMS42NjQxIDI1Ljg3NUMzMS42NjQxIDIzLjc4MTIgMzIuNDI5NyAyMi4xMDk0IDMzLjk2MDkgMjAuODU5NEMzNS41MDc4IDE5LjYwOTQgMzcuNzEwOSAxOC45MDYyIDQwLjU3MDMgMTguNzVMNDcuNjAxNiAxOC4zNTE2VjE2LjVDNDcuNjAxNiAxNS4wMTU2IDQ3LjEzMjggMTMuODM1OSA0Ni4xOTUzIDEyLjk2MDlDNDUuMjU3OCAxMi4wODU5IDQzLjk1MzEgMTEuNjQ4NCA0Mi4yODEyIDExLjY0ODRDNDAuOTA2MiAxMS42NDg0IDM5Ljc1IDExLjk0NTMgMzguODEyNSAxMi41MzkxQzM3Ljg3NSAxMy4xMzI4IDM3LjA5MzggMTQuMDQ2OSAzNi40Njg4IDE1LjI4MTJDMzYuMjY1NiAxNS42MDk0IDM2LjAxNTYgMTUuODUxNiAzNS43MTg4IDE2LjAwNzhDMzUuNDIxOSAxNi4xNjQxIDM1LjA3ODEgMTYuMjQyMiAzNC42ODc1IDE2LjI0MjJDMzQuMTU2MiAxNi4yNDIyIDMzLjcxMDkgMTYuMDc4MSAzMy4zNTE2IDE1Ljc1QzMzLjAwNzggMTUuNDIxOSAzMi44MzU5IDE0Ljk5MjIgMzIuODM1OSAxNC40NjA5QzMyLjgzNTkgMTQuMjI2NiAzMi44NjcyIDEzLjk3NjYgMzIuOTI5NyAxMy43MTA5QzMzLjAwNzggMTMuNDQ1MyAzMy4xMDk0IDEzLjE3OTcgMzMuMjM0NCAxMi45MTQxQzMzLjg3NSAxMS40NjA5IDM1LjAxNTYgMTAuMzA0NyAzNi42NTYyIDkuNDQ1MzFDMzguMzEyNSA4LjU4NTk0IDQwLjIyNjYgOC4xNTYyNSA0Mi4zOTg0IDguMTU2MjVDNDQuMzIwMyA4LjE1NjI1IDQ1Ljk4NDQgOC40OTIxOSA0Ny4zOTA2IDkuMTY0MDZDNDguODEyNSA5LjgyMDMxIDQ5Ljg5ODQgMTAuNzUgNTAuNjQ4NCAxMS45NTMxQzUxLjQxNDEgMTMuMTU2MiA1MS43OTY5IDE0LjU3MDMgNTEuNzk2OSAxNi4xOTUzVjMwLjkxNDFDNTEuNzk2OSAzMS41ODU5IDUxLjYwOTQgMzIuMTA5NCA1MS4yMzQ0IDMyLjQ4NDRDNTAuODU5NCAzMi44NTk0IDUwLjM2NzIgMzMuMDQ2OSA0OS43NTc4IDMzLjA0NjlDNDkuMTY0MSAzMy4wNDY5IDQ4LjY3OTcgMzIuODY3MiA0OC4zMDQ3IDMyLjUwNzhDNDcuOTI5NyAzMi4xNDg0IDQ3LjczNDQgMzEuNjY0MSA0Ny43MTg4IDMxLjA1NDdWMjguMzU5NEg0Ny42NzE5QzQ2Ljk4NDQgMjkuNzgxMiA0NS45MDYyIDMwLjkxNDEgNDQuNDM3NSAzMS43NTc4QzQyLjk4NDQgMzIuNjAxNiA0MS40MTQxIDMzLjAyMzQgMzkuNzI2NiAzMy4wMjM0Wk00MC44MDQ3IDI5LjY3MTlDNDIuMDcwMyAyOS42NzE5IDQzLjIxMDkgMjkuNDA2MiA0NC4yMjY2IDI4Ljg3NUM0NS4yNTc4IDI4LjM0MzggNDYuMDc4MSAyNy42MTcyIDQ2LjY4NzUgMjYuNjk1M0M0Ny4yOTY5IDI1Ljc3MzQgNDcuNjAxNiAyNC43NSA0Ny42MDE2IDIzLjYyNVYyMS4zMjgxTDQxLjEzMjggMjEuNzVDMzkuNDQ1MyAyMS44NTk0IDM4LjE2NDEgMjIuMjczNCAzNy4yODkxIDIyLjk5MjJDMzYuNDE0MSAyMy42OTUzIDM1Ljk3NjYgMjQuNjA5NCAzNS45NzY2IDI1LjczNDRDMzUuOTc2NiAyNi45MjE5IDM2LjQyMTkgMjcuODc1IDM3LjMxMjUgMjguNTkzOEMzOC4yMDMxIDI5LjMxMjUgMzkuMzY3MiAyOS42NzE5IDQwLjgwNDcgMjkuNjcxOVpNMi4xNzk2OSAzMy4wMjM0QzEuNTA3ODEgMzMuMDIzNCAwLjk3NjU2MiAzMi44MzU5IDAuNTg1OTM4IDMyLjQ2MDlDMC4xOTUzMTIgMzIuMDg1OSAwIDMxLjU3ODEgMCAzMC45Mzc1QzAgMzAuNTMxMiAwLjA4NTkzNzUgMzAuMDcwMyAwLjI1NzgxMiAyOS41NTQ3TDEwLjQwNjIgMi40MTQwNkMxMC45ODQ0IDAuODA0Njg4IDEyLjEwMTYgMCAxMy43NTc4IDBDMTQuNjE3MiAwIDE1LjMyODEgMC4yMDMxMjUgMTUuODkwNiAwLjYwOTM3NUMxNi40NTMxIDEuMDE1NjIgMTYuODc1IDEuNjI1IDE3LjE1NjIgMi40Mzc1TDI3LjI1NzggMjkuNDg0NEMyNy40NDUzIDMwIDI3LjUzOTEgMzAuNDY4OCAyNy41MzkxIDMwLjg5MDZDMjcuNTM5MSAzMS41NDY5IDI3LjMzNTkgMzIuMDcwMyAyNi45Mjk3IDMyLjQ2MDlDMjYuNTIzNCAzMi44MzU5IDI1Ljk3NjYgMzMuMDIzNCAyNS4yODkxIDMzLjAyMzRDMjQuNjMyOCAzMy4wMjM0IDI0LjEwOTQgMzIuODc1IDIzLjcxODggMzIuNTc4MUMyMy4zNDM4IDMyLjI4MTIgMjMuMDM5MSAzMS43ODkxIDIyLjgwNDcgMzEuMTAxNkwxMy44MjgxIDUuMzQzNzVIMTMuNjY0MUw0LjY2NDA2IDMxLjEwMTZDNC40Mjk2OSAzMS43ODkxIDQuMTI1IDMyLjI4MTIgMy43NSAzMi41NzgxQzMuMzc1IDMyLjg3NSAyLjg1MTU2IDMzLjAyMzQgMi4xNzk2OSAzMy4wMjM0Wk02LjY3OTY5IDIzLjc0MjJDNi4xNDg0NCAyMy43NDIyIDUuNzAzMTIgMjMuNTYyNSA1LjM0Mzc1IDIzLjIwMzFDNC45ODQzOCAyMi44NDM4IDQuODA0NjkgMjIuMzk4NCA0LjgwNDY5IDIxLjg2NzJDNC44MDQ2OSAyMS4zNTE2IDQuOTg0MzggMjAuOTE0MSA1LjM0Mzc1IDIwLjU1NDdDNS43MDMxMiAyMC4xOTUzIDYuMTQ4NDQgMjAuMDE1NiA2LjY3OTY5IDIwLjAxNTZIMjAuODU5NEMyMS4zNzUgMjAuMDE1NiAyMS44MTI1IDIwLjE5NTMgMjIuMTcxOSAyMC41NTQ3QzIyLjUzMTIgMjAuOTE0MSAyMi43MTA5IDIxLjM1MTYgMjIuNzEwOSAyMS44NjcyQzIyLjcxMDkgMjIuMzk4NCAyMi41MzEyIDIyLjg0MzggMjIuMTcxOSAyMy4yMDMxQzIxLjgxMjUgMjMuNTYyNSAyMS4zNzUgMjMuNzQyMiAyMC44NTk0IDIzLjc0MjJINi42Nzk2OVoifSl9KSxtb3Rpb246Sigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLGNoaWxkcmVuOltKKCJjaXJjbGUiLHtjeDoiMTQiLGN5OiIxMiIscjoiNiJ9KSxKKCJwYXRoIix7ZDoiTTMgOGg0TTIgMTJoNE0zIDE2aDQifSldfSksY29udHJhc3Q6Sigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9KSxKKCJwYXRoIix7ZDoiTTEyIDE4YTYgNiAwIDAgMCAwLTEydjEyeiJ9KV19KSxib3JkZXJzOkooInN2ZyIse3dpZHRoOiIxNCIsaGVpZ2h0OiIxNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltKKCJwYXRoIix7ZDoiTTUgMjFhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyIn0pLEooInBhdGgiLHtkOiJNOSAyMWgxIn0pLEooInBhdGgiLHtkOiJNMTQgMjFoMSJ9KV19KSx0cmFuc3BhcmVuY3k6Sigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgNjMgNDYiLGZpbGw6ImN1cnJlbnRDb2xvciIsc3Ryb2tlOiJub25lIixjaGlsZHJlbjpKKCJwYXRoIix7ZDoiTTIyLjczNDQgNC4xNzE4OEMyMi4xODc1IDQuMTcxODggMjEuNzE4OCAzLjk3NjU2IDIxLjMyODEgMy41ODU5NEMyMC45Mzc1IDMuMTk1MzEgMjAuNzQyMiAyLjcxODc1IDIwLjc0MjIgMi4xNTYyNUMyMC43NDIyIDEuNjA5MzggMjAuOTM3NSAxLjE0MDYyIDIxLjMyODEgMC43NUMyMS43MTg4IDAuMzU5Mzc1IDIyLjE4NzUgMC4xNjQwNjIgMjIuNzM0NCAwLjE2NDA2MkMyMy4yODEyIDAuMTY0MDYyIDIzLjc1IDAuMzU5Mzc1IDI0LjE0MDYgMC43NUMyNC41MzEyIDEuMTQwNjIgMjQuNzI2NiAxLjYwOTM4IDI0LjcyNjYgMi4xNTYyNUMyNC43MjY2IDIuNzE4NzUgMjQuNTMxMiAzLjE5NTMxIDI0LjE0MDYgMy41ODU5NEMyMy43NSAzLjk3NjU2IDIzLjI4MTIgNC4xNzE4OCAyMi43MzQ0IDQuMTcxODhaTTI5LjEwOTQgNS4yMDMxMkMyOC41NDY5IDUuMjAzMTIgMjguMDcwMyA1LjAwNzgxIDI3LjY3OTcgNC42MTcxOUMyNy4yODkxIDQuMjI2NTYgMjcuMDkzOCAzLjc1NzgxIDI3LjA5MzggMy4yMTA5NEMyNy4wOTM4IDIuNjY0MDYgMjcuMjg5MSAyLjE5NTMxIDI3LjY3OTcgMS44MDQ2OUMyOC4wNzAzIDEuMzk4NDQgMjguNTQ2OSAxLjE5NTMxIDI5LjEwOTQgMS4xOTUzMUMyOS42NTYyIDEuMTk1MzEgMzAuMTI1IDEuMzk4NDQgMzAuNTE1NiAxLjgwNDY5QzMwLjkwNjIgMi4xOTUzMSAzMS4xMDE2IDIuNjY0MDYgMzEuMTAxNiAzLjIxMDk0QzMxLjEwMTYgMy43NTc4MSAzMC45MDYyIDQuMjI2NTYgMzAuNTE1NiA0LjYxNzE5QzMwLjEyNSA1LjAwNzgxIDI5LjY1NjIgNS4yMDMxMiAyOS4xMDk0IDUuMjAzMTJaTTM0Ljg3NSA4LjEzMjgxQzM0LjMyODEgOC4xMzI4MSAzMy44NTE2IDcuOTM3NSAzMy40NDUzIDcuNTQ2ODhDMzMuMDU0NyA3LjE0MDYyIDMyLjg1OTQgNi42NzE4OCAzMi44NTk0IDYuMTQwNjJDMzIuODU5NCA1LjU3ODEyIDMzLjA1NDcgNS4xMDE1NiAzMy40NDUzIDQuNzEwOTRDMzMuODUxNiA0LjMyMDMxIDM0LjMyODEgNC4xMjUgMzQuODc1IDQuMTI1QzM1LjQyMTkgNC4xMjUgMzUuODkwNiA0LjMyMDMxIDM2LjI4MTIgNC43MTA5NEMzNi42ODc1IDUuMTAxNTYgMzYuODkwNiA1LjU3ODEyIDM2Ljg5MDYgNi4xNDA2MkMzNi44OTA2IDYuNjcxODggMzYuNjg3NSA3LjE0MDYyIDM2LjI4MTIgNy41NDY4OEMzNS44OTA2IDcuOTM3NSAzNS40MjE5IDguMTMyODEgMzQuODc1IDguMTMyODFaTTM5LjQ0NTMgMTIuNjc5N0MzOC44OTg0IDEyLjY3OTcgMzguNDIxOSAxMi40ODQ0IDM4LjAxNTYgMTIuMDkzOEMzNy42MjUgMTEuNzAzMSAzNy40Mjk3IDExLjIzNDQgMzcuNDI5NyAxMC42ODc1QzM3LjQyOTcgMTAuMTU2MiAzNy42MjUgOS42OTUzMSAzOC4wMTU2IDkuMzA0NjlDMzguNDIxOSA4Ljg5ODQ0IDM4Ljg5ODQgOC42OTUzMSAzOS40NDUzIDguNjk1MzFDMzkuOTkyMiA4LjY5NTMxIDQwLjQ2MDkgOC44OTg0NCA0MC44NTE2IDkuMzA0NjlDNDEuMjQyMiA5LjY5NTMxIDQxLjQzNzUgMTAuMTU2MiA0MS40Mzc1IDEwLjY4NzVDNDEuNDM3NSAxMS4yMzQ0IDQxLjI0MjIgMTEuNzAzMSA0MC44NTE2IDEyLjA5MzhDNDAuNDYwOSAxMi40ODQ0IDM5Ljk5MjIgMTIuNjc5NyAzOS40NDUzIDEyLjY3OTdaTTQyLjM3NSAxOC4zOTg0QzQxLjgxMjUgMTguMzk4NCA0MS4zMjgxIDE4LjIwMzEgNDAuOTIxOSAxNy44MTI1QzQwLjUzMTIgMTcuNDIxOSA0MC4zMzU5IDE2Ljk1MzEgNDAuMzM1OSAxNi40MDYyQzQwLjMzNTkgMTUuODQzOCA0MC41MzEyIDE1LjM2NzIgNDAuOTIxOSAxNC45NzY2QzQxLjMyODEgMTQuNTg1OSA0MS44MTI1IDE0LjM5MDYgNDIuMzc1IDE0LjM5MDZDNDIuOTA2MiAxNC4zOTA2IDQzLjM2NzIgMTQuNTg1OSA0My43NTc4IDE0Ljk3NjZDNDQuMTY0MSAxNS4zNjcyIDQ0LjM2NzIgMTUuODQzOCA0NC4zNjcyIDE2LjQwNjJDNDQuMzY3MiAxNi45NTMxIDQ0LjE2NDEgMTcuNDIxOSA0My43NTc4IDE3LjgxMjVDNDMuMzY3MiAxOC4yMDMxIDQyLjkwNjIgMTguMzk4NCA0Mi4zNzUgMTguMzk4NFpNNDMuNDUzMSAyNC43OTY5QzQyLjkwNjIgMjQuNzk2OSA0Mi40Mzc1IDI0LjYwMTYgNDIuMDQ2OSAyNC4yMTA5QzQxLjY1NjIgMjMuODIwMyA0MS40NjA5IDIzLjM0MzggNDEuNDYwOSAyMi43ODEyQzQxLjQ2MDkgMjIuMjM0NCA0MS42NTYyIDIxLjc2NTYgNDIuMDQ2OSAyMS4zNzVDNDIuNDM3NSAyMC45ODQ0IDQyLjkwNjIgMjAuNzg5MSA0My40NTMxIDIwLjc4OTFDNDQgMjAuNzg5MSA0NC40Njg4IDIwLjk4NDQgNDQuODU5NCAyMS4zNzVDNDUuMjY1NiAyMS43NjU2IDQ1LjQ2ODggMjIuMjM0NCA0NS40Njg4IDIyLjc4MTJDNDUuNDY4OCAyMy4zNDM4IDQ1LjI2NTYgMjMuODIwMyA0NC44NTk0IDI0LjIxMDlDNDQuNDY4OCAyNC42MDE2IDQ0IDI0Ljc5NjkgNDMuNDUzMSAyNC43OTY5Wk00Mi4zNzUgMzEuMTcxOUM0MS44MTI1IDMxLjE3MTkgNDEuMzI4MSAzMC45NzY2IDQwLjkyMTkgMzAuNTg1OUM0MC41MzEyIDMwLjE5NTMgNDAuMzM1OSAyOS43MjY2IDQwLjMzNTkgMjkuMTc5N0M0MC4zMzU5IDI4LjYxNzIgNDAuNTMxMiAyOC4xNDA2IDQwLjkyMTkgMjcuNzVDNDEuMzI4MSAyNy4zNTk0IDQxLjgxMjUgMjcuMTY0MSA0Mi4zNzUgMjcuMTY0MUM0Mi45MDYyIDI3LjE2NDEgNDMuMzY3MiAyNy4zNTk0IDQzLjc1NzggMjcuNzVDNDQuMTY0MSAyOC4xNDA2IDQ0LjM2NzIgMjguNjE3MiA0NC4zNjcyIDI5LjE3OTdDNDQuMzY3MiAyOS43MjY2IDQ0LjE2NDEgMzAuMTk1MyA0My43NTc4IDMwLjU4NTlDNDMuMzY3MiAzMC45NzY2IDQyLjkwNjIgMzEuMTcxOSA0Mi4zNzUgMzEuMTcxOVpNMzkuNDQ1MyAzNi44OTA2QzM4Ljg5ODQgMzYuODkwNiAzOC40MjE5IDM2LjY5NTMgMzguMDE1NiAzNi4zMDQ3QzM3LjYyNSAzNS44OTg0IDM3LjQyOTcgMzUuNDIxOSAzNy40Mjk3IDM0Ljg3NUMzNy40Mjk3IDM0LjMyODEgMzcuNjI1IDMzLjg1OTQgMzguMDE1NiAzMy40Njg4QzM4LjQyMTkgMzMuMDYyNSAzOC44OTg0IDMyLjg1OTQgMzkuNDQ1MyAzMi44NTk0QzM5Ljk5MjIgMzIuODU5NCA0MC40NjA5IDMzLjA2MjUgNDAuODUxNiAzMy40Njg4QzQxLjI0MjIgMzMuODU5NCA0MS40Mzc1IDM0LjMyODEgNDEuNDM3NSAzNC44NzVDNDEuNDM3NSAzNS40MjE5IDQxLjI0MjIgMzUuODk4NCA0MC44NTE2IDM2LjMwNDdDNDAuNDYwOSAzNi42OTUzIDM5Ljk5MjIgMzYuODkwNiAzOS40NDUzIDM2Ljg5MDZaTTM0Ljg3NSA0MS40Mzc1QzM0LjMyODEgNDEuNDM3NSAzMy44NTE2IDQxLjI0MjIgMzMuNDQ1MyA0MC44NTE2QzMzLjA1NDcgNDAuNDYwOSAzMi44NTk0IDM5Ljk5MjIgMzIuODU5NCAzOS40NDUzQzMyLjg1OTQgMzguODk4NCAzMy4wNTQ3IDM4LjQyOTcgMzMuNDQ1MyAzOC4wMzkxQzMzLjg1MTYgMzcuNjMyOCAzNC4zMjgxIDM3LjQyOTcgMzQuODc1IDM3LjQyOTdDMzUuNDIxOSAzNy40Mjk3IDM1Ljg5MDYgMzcuNjMyOCAzNi4yODEyIDM4LjAzOTFDMzYuNjg3NSAzOC40Mjk3IDM2Ljg5MDYgMzguODk4NCAzNi44OTA2IDM5LjQ0NTNDMzYuODkwNiAzOS45OTIyIDM2LjY4NzUgNDAuNDYwOSAzNi4yODEyIDQwLjg1MTZDMzUuODkwNiA0MS4yNDIyIDM1LjQyMTkgNDEuNDM3NSAzNC44NzUgNDEuNDM3NVpNMjkuMTA5NCA0NC4zNjcyQzI4LjU0NjkgNDQuMzY3MiAyOC4wNzAzIDQ0LjE2NDEgMjcuNjc5NyA0My43NTc4QzI3LjI4OTEgNDMuMzY3MiAyNy4wOTM4IDQyLjg5ODQgMjcuMDkzOCA0Mi4zNTE2QzI3LjA5MzggNDEuODA0NyAyNy4yODkxIDQxLjMzNTkgMjcuNjc5NyA0MC45NDUzQzI4LjA3MDMgNDAuNTU0NyAyOC41NDY5IDQwLjM1OTQgMjkuMTA5NCA0MC4zNTk0QzI5LjY1NjIgNDAuMzU5NCAzMC4xMjUgNDAuNTU0NyAzMC41MTU2IDQwLjk0NTNDMzAuOTA2MiA0MS4zMzU5IDMxLjEwMTYgNDEuODA0NyAzMS4xMDE2IDQyLjM1MTZDMzEuMTAxNiA0Mi44OTg0IDMwLjkwNjIgNDMuMzY3MiAzMC41MTU2IDQzLjc1NzhDMzAuMTI1IDQ0LjE2NDEgMjkuNjU2MiA0NC4zNjcyIDI5LjEwOTQgNDQuMzY3MlpNMjIuNzM0NCA0NS4zOTg0QzIyLjE4NzUgNDUuMzk4NCAyMS43MTg4IDQ1LjIwMzEgMjEuMzI4MSA0NC44MTI1QzIwLjkzNzUgNDQuNDIxOSAyMC43NDIyIDQzLjk1MzEgMjAuNzQyMiA0My40MDYyQzIwLjc0MjIgNDIuODQzOCAyMC45Mzc1IDQyLjM2NzIgMjEuMzI4MSA0MS45NzY2QzIxLjcxODggNDEuNTg1OSAyMi4xODc1IDQxLjM5MDYgMjIuNzM0NCA0MS4zOTA2QzIzLjI4MTIgNDEuMzkwNiAyMy43NSA0MS41ODU5IDI0LjE0MDYgNDEuOTc2NkMyNC41MzEyIDQyLjM2NzIgMjQuNzI2NiA0Mi44NDM4IDI0LjcyNjYgNDMuNDA2MkMyNC43MjY2IDQzLjk1MzEgMjQuNTMxMiA0NC40MjE5IDI0LjE0MDYgNDQuODEyNUMyMy43NSA0NS4yMDMxIDIzLjI4MTIgNDUuMzk4NCAyMi43MzQ0IDQ1LjM5ODRaTTE2LjM1OTQgNDQuMzY3MkMxNS44MTI1IDQ0LjM2NzIgMTUuMzQzOCA0NC4xNjQxIDE0Ljk1MzEgNDMuNzU3OEMxNC41NjI1IDQzLjM2NzIgMTQuMzY3MiA0Mi44OTg0IDE0LjM2NzIgNDIuMzUxNkMxNC4zNjcyIDQxLjgwNDcgMTQuNTYyNSA0MS4zMzU5IDE0Ljk1MzEgNDAuOTQ1M0MxNS4zNDM4IDQwLjU1NDcgMTUuODEyNSA0MC4zNTk0IDE2LjM1OTQgNDAuMzU5NEMxNi45MjE5IDQwLjM1OTQgMTcuMzk4NCA0MC41NTQ3IDE3Ljc4OTEgNDAuOTQ1M0MxOC4xNzk3IDQxLjMzNTkgMTguMzc1IDQxLjgwNDcgMTguMzc1IDQyLjM1MTZDMTguMzc1IDQyLjg5ODQgMTguMTc5NyA0My4zNjcyIDE3Ljc4OTEgNDMuNzU3OEMxNy4zOTg0IDQ0LjE2NDEgMTYuOTIxOSA0NC4zNjcyIDE2LjM1OTQgNDQuMzY3MlpNMTAuNTcwMyA0MS40Mzc1QzEwLjAzOTEgNDEuNDM3NSA5LjU3MDMxIDQxLjI0MjIgOS4xNjQwNiA0MC44NTE2QzguNzczNDQgNDAuNDYwOSA4LjU3ODEyIDM5Ljk5MjIgOC41NzgxMiAzOS40NDUzQzguNTc4MTIgMzguODk4NCA4Ljc3MzQ0IDM4LjQyOTcgOS4xNjQwNiAzOC4wMzkxQzkuNTcwMzEgMzcuNjMyOCAxMC4wMzkxIDM3LjQyOTcgMTAuNTcwMyAzNy40Mjk3QzExLjEzMjggMzcuNDI5NyAxMS42MDk0IDM3LjYzMjggMTIgMzguMDM5MUMxMi4zOTA2IDM4LjQyOTcgMTIuNTg1OSAzOC44OTg0IDEyLjU4NTkgMzkuNDQ1M0MxMi41ODU5IDM5Ljk5MjIgMTIuMzkwNiA0MC40NjA5IDEyIDQwLjg1MTZDMTEuNjA5NCA0MS4yNDIyIDExLjEzMjggNDEuNDM3NSAxMC41NzAzIDQxLjQzNzVaTTYuMDIzNDQgMzYuODkwNkM1LjQ3NjU2IDM2Ljg5MDYgNSAzNi42OTUzIDQuNTkzNzUgMzYuMzA0N0M0LjIwMzEyIDM1Ljg5ODQgNC4wMDc4MSAzNS40MjE5IDQuMDA3ODEgMzQuODc1QzQuMDA3ODEgMzQuMzI4MSA0LjIwMzEyIDMzLjg1OTQgNC41OTM3NSAzMy40Njg4QzUgMzMuMDYyNSA1LjQ3NjU2IDMyLjg1OTQgNi4wMjM0NCAzMi44NTk0QzYuNTcwMzEgMzIuODU5NCA3LjAzOTA2IDMzLjA2MjUgNy40Mjk2OSAzMy40Njg4QzcuODIwMzEgMzMuODU5NCA4LjAxNTYyIDM0LjMyODEgOC4wMTU2MiAzNC44NzVDOC4wMTU2MiAzNS40MjE5IDcuODIwMzEgMzUuODk4NCA3LjQyOTY5IDM2LjMwNDdDNy4wMzkwNiAzNi42OTUzIDYuNTcwMzEgMzYuODkwNiA2LjAyMzQ0IDM2Ljg5MDZaTTMuMDkzNzUgMzEuMTcxOUMyLjU2MjUgMzEuMTcxOSAyLjA5Mzc1IDMwLjk3NjYgMS42ODc1IDMwLjU4NTlDMS4yOTY4OCAzMC4xOTUzIDEuMTAxNTYgMjkuNzI2NiAxLjEwMTU2IDI5LjE3OTdDMS4xMDE1NiAyOC42MTcyIDEuMjk2ODggMjguMTQwNiAxLjY4NzUgMjcuNzVDMi4wOTM3NSAyNy4zNTk0IDIuNTYyNSAyNy4xNjQxIDMuMDkzNzUgMjcuMTY0MUMzLjY1NjI1IDI3LjE2NDEgNC4xMzI4MSAyNy4zNTk0IDQuNTIzNDQgMjcuNzVDNC45MTQwNiAyOC4xNDA2IDUuMTA5MzggMjguNjE3MiA1LjEwOTM4IDI5LjE3OTdDNS4xMDkzOCAyOS43MjY2IDQuOTE0MDYgMzAuMTk1MyA0LjUyMzQ0IDMwLjU4NTlDNC4xMzI4MSAzMC45NzY2IDMuNjU2MjUgMzEuMTcxOSAzLjA5Mzc1IDMxLjE3MTlaTTIuMDE1NjIgMjQuNzk2OUMxLjQ1MzEyIDI0Ljc5NjkgMC45NzY1NjIgMjQuNjAxNiAwLjU4NTkzOCAyNC4yMTA5QzAuMTk1MzEyIDIzLjgyMDMgMCAyMy4zNDM4IDAgMjIuNzgxMkMwIDIyLjIzNDQgMC4xOTUzMTIgMjEuNzY1NiAwLjU4NTkzOCAyMS4zNzVDMC45NzY1NjIgMjAuOTg0NCAxLjQ1MzEyIDIwLjc4OTEgMi4wMTU2MiAyMC43ODkxQzIuNTYyNSAyMC43ODkxIDMuMDMxMjUgMjAuOTg0NCAzLjQyMTg4IDIxLjM3NUMzLjgxMjUgMjEuNzY1NiA0LjAwNzgxIDIyLjIzNDQgNC4wMDc4MSAyMi43ODEyQzQuMDA3ODEgMjMuMzQzOCAzLjgxMjUgMjMuODIwMyAzLjQyMTg4IDI0LjIxMDlDMy4wMzEyNSAyNC42MDE2IDIuNTYyNSAyNC43OTY5IDIuMDE1NjIgMjQuNzk2OVpNMy4wOTM3NSAxOC4zOTg0QzIuNTYyNSAxOC4zOTg0IDIuMDkzNzUgMTguMjAzMSAxLjY4NzUgMTcuODEyNUMxLjI5Njg4IDE3LjQyMTkgMS4xMDE1NiAxNi45NTMxIDEuMTAxNTYgMTYuNDA2MkMxLjEwMTU2IDE1Ljg0MzggMS4yOTY4OCAxNS4zNjcyIDEuNjg3NSAxNC45NzY2QzIuMDkzNzUgMTQuNTg1OSAyLjU2MjUgMTQuMzkwNiAzLjA5Mzc1IDE0LjM5MDZDMy42NTYyNSAxNC4zOTA2IDQuMTMyODEgMTQuNTg1OSA0LjUyMzQ0IDE0Ljk3NjZDNC45MTQwNiAxNS4zNjcyIDUuMTA5MzggMTUuODQzOCA1LjEwOTM4IDE2LjQwNjJDNS4xMDkzOCAxNi45NTMxIDQuOTE0MDYgMTcuNDIxOSA0LjUyMzQ0IDE3LjgxMjVDNC4xMzI4MSAxOC4yMDMxIDMuNjU2MjUgMTguMzk4NCAzLjA5Mzc1IDE4LjM5ODRaTTYuMDIzNDQgMTIuNjc5N0M1LjQ3NjU2IDEyLjY3OTcgNSAxMi40ODQ0IDQuNTkzNzUgMTIuMDkzOEM0LjIwMzEyIDExLjcwMzEgNC4wMDc4MSAxMS4yMzQ0IDQuMDA3ODEgMTAuNjg3NUM0LjAwNzgxIDEwLjE1NjIgNC4yMDMxMiA5LjY5NTMxIDQuNTkzNzUgOS4zMDQ2OUM1IDguODk4NDQgNS40NzY1NiA4LjY5NTMxIDYuMDIzNDQgOC42OTUzMUM2LjU3MDMxIDguNjk1MzEgNy4wMzkwNiA4Ljg5ODQ0IDcuNDI5NjkgOS4zMDQ2OUM3LjgyMDMxIDkuNjk1MzEgOC4wMTU2MiAxMC4xNTYyIDguMDE1NjIgMTAuNjg3NUM4LjAxNTYyIDExLjIzNDQgNy44MjAzMSAxMS43MDMxIDcuNDI5NjkgMTIuMDkzOEM3LjAzOTA2IDEyLjQ4NDQgNi41NzAzMSAxMi42Nzk3IDYuMDIzNDQgMTIuNjc5N1pNMTAuNTcwMyA4LjEzMjgxQzEwLjAzOTEgOC4xMzI4MSA5LjU3MDMxIDcuOTM3NSA5LjE2NDA2IDcuNTQ2ODhDOC43NzM0NCA3LjE0MDYyIDguNTc4MTIgNi42NzE4OCA4LjU3ODEyIDYuMTQwNjJDOC41NzgxMiA1LjU3ODEyIDguNzczNDQgNS4xMDE1NiA5LjE2NDA2IDQuNzEwOTRDOS41NzAzMSA0LjMyMDMxIDEwLjAzOTEgNC4xMjUgMTAuNTcwMyA0LjEyNUMxMS4xMzI4IDQuMTI1IDExLjYwOTQgNC4zMjAzMSAxMiA0LjcxMDk0QzEyLjM5MDYgNS4xMDE1NiAxMi41ODU5IDUuNTc4MTIgMTIuNTg1OSA2LjE0MDYyQzEyLjU4NTkgNi42NzE4OCAxMi4zOTA2IDcuMTQwNjIgMTIgNy41NDY4OEMxMS42MDk0IDcuOTM3NSAxMS4xMzI4IDguMTMyODEgMTAuNTcwMyA4LjEzMjgxWk0xNi4zNTk0IDUuMjAzMTJDMTUuODEyNSA1LjIwMzEyIDE1LjM0MzggNS4wMDc4MSAxNC45NTMxIDQuNjE3MTlDMTQuNTYyNSA0LjIyNjU2IDE0LjM2NzIgMy43NTc4MSAxNC4zNjcyIDMuMjEwOTRDMTQuMzY3MiAyLjY2NDA2IDE0LjU2MjUgMi4xOTUzMSAxNC45NTMxIDEuODA0NjlDMTUuMzQzOCAxLjM5ODQ0IDE1LjgxMjUgMS4xOTUzMSAxNi4zNTk0IDEuMTk1MzFDMTYuOTIxOSAxLjE5NTMxIDE3LjM5ODQgMS4zOTg0NCAxNy43ODkxIDEuODA0NjlDMTguMTc5NyAyLjE5NTMxIDE4LjM3NSAyLjY2NDA2IDE4LjM3NSAzLjIxMDk0QzE4LjM3NSAzLjc1NzgxIDE4LjE3OTcgNC4yMjY1NiAxNy43ODkxIDQuNjE3MTlDMTcuMzk4NCA1LjAwNzgxIDE2LjkyMTkgNS4yMDMxMiAxNi4zNTk0IDUuMjAzMTJaTTQwLjEwMTYgNDUuNTYyNUMzNi45NDUzIDQ1LjU2MjUgMzMuOTkyMiA0NC45Njg4IDMxLjI0MjIgNDMuNzgxMkMyOC41MDc4IDQyLjYwOTQgMjYuMDkzOCA0MC45NzY2IDI0IDM4Ljg4MjhDMjEuOTA2MiAzNi43ODkxIDIwLjI2NTYgMzQuMzY3MiAxOS4wNzgxIDMxLjYxNzJDMTcuOTA2MiAyOC44NjcyIDE3LjMyMDMgMjUuOTIxOSAxNy4zMjAzIDIyLjc4MTJDMTcuMzIwMyAxOS42NDA2IDE3LjkwNjIgMTYuNjk1MyAxOS4wNzgxIDEzLjk0NTNDMjAuMjY1NiAxMS4xNzk3IDIxLjkwNjIgOC43NTc4MSAyNCA2LjY3OTY5QzI2LjA5MzggNC41ODU5NCAyOC41MDc4IDIuOTUzMTIgMzEuMjQyMiAxLjc4MTI1QzMzLjk5MjIgMC41OTM3NSAzNi45NDUzIDAgNDAuMTAxNiAwQzQzLjI0MjIgMCA0Ni4xODc1IDAuNTkzNzUgNDguOTM3NSAxLjc4MTI1QzUxLjY4NzUgMi45NTMxMiA1NC4xMDE2IDQuNTg1OTQgNTYuMTc5NyA2LjY3OTY5QzU4LjI3MzQgOC43NTc4MSA1OS45MDYyIDExLjE3OTcgNjEuMDc4MSAxMy45NDUzQzYyLjI2NTYgMTYuNjk1MyA2Mi44NTk0IDE5LjY0MDYgNjIuODU5NCAyMi43ODEyQzYyLjg1OTQgMjUuOTIxOSA2Mi4yNjU2IDI4Ljg2NzIgNjEuMDc4MSAzMS42MTcyQzU5LjkwNjIgMzQuMzY3MiA1OC4yNzM0IDM2Ljc4OTEgNTYuMTc5NyAzOC44ODI4QzU0LjEwMTYgNDAuOTc2NiA1MS42ODc1IDQyLjYwOTQgNDguOTM3NSA0My43ODEyQzQ2LjE4NzUgNDQuOTY4OCA0My4yNDIyIDQ1LjU2MjUgNDAuMTAxNiA0NS41NjI1Wk00MC4xMDE2IDQxLjM5MDZDNDIuNjY0MSA0MS4zOTA2IDQ1LjA3MDMgNDAuOTA2MiA0Ny4zMjAzIDM5LjkzNzVDNDkuNTcwMyAzOC45Njg4IDUxLjU0NjkgMzcuNjMyOCA1My4yNSAzNS45Mjk3QzU0Ljk2ODggMzQuMjI2NiA1Ni4zMDQ3IDMyLjI1NzggNTcuMjU3OCAzMC4wMjM0QzU4LjIxMDkgMjcuNzczNCA1OC42ODc1IDI1LjM1OTQgNTguNjg3NSAyMi43ODEyQzU4LjY4NzUgMjAuMjAzMSA1OC4yMTA5IDE3Ljc5NjkgNTcuMjU3OCAxNS41NjI1QzU2LjMwNDcgMTMuMzEyNSA1NC45Njg4IDExLjMzNTkgNTMuMjUgOS42MzI4MUM1MS41NDY5IDcuOTI5NjkgNDkuNTcwMyA2LjU5Mzc1IDQ3LjMyMDMgNS42MjVDNDUuMDcwMyA0LjY1NjI1IDQyLjY2NDEgNC4xNzE4OCA0MC4xMDE2IDQuMTcxODhDMzcuNTIzNCA0LjE3MTg4IDM1LjEwOTQgNC42NTYyNSAzMi44NTk0IDUuNjI1QzMwLjYyNSA2LjU5Mzc1IDI4LjY0ODQgNy45Mjk2OSAyNi45Mjk3IDkuNjMyODFDMjUuMjI2NiAxMS4zMzU5IDIzLjg5MDYgMTMuMzEyNSAyMi45MjE5IDE1LjU2MjVDMjEuOTY4OCAxNy43OTY5IDIxLjQ5MjIgMjAuMjAzMSAyMS40OTIyIDIyLjc4MTJDMjEuNDkyMiAyNS4zNTk0IDIxLjk2ODggMjcuNzczNCAyMi45MjE5IDMwLjAyMzRDMjMuODkwNiAzMi4yNTc4IDI1LjIyNjYgMzQuMjI2NiAyNi45Mjk3IDM1LjkyOTdDMjguNjQ4NCAzNy42MzI4IDMwLjYyNSAzOC45Njg4IDMyLjg1OTQgMzkuOTM3NUMzNS4xMDk0IDQwLjkwNjIgMzcuNTIzNCA0MS4zOTA2IDQwLjEwMTYgNDEuMzkwNloifSl9KSx2b2ljZW92ZXI6Sigic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W0ooInBhdGgiLHtkOiJtMTEgNy42MDEtNS45OTQgOC4xOWExIDEgMCAwIDAgLjEgMS4yOThsLjgxNy44MThhMSAxIDAgMCAwIDEuMzE0LjA4N0wxNS4wOSAxMiJ9KSxKKCJwYXRoIix7ZDoiTTE2LjUgMjEuMTc0QzE1LjUgMjAuNSAxNC4zNzIgMjAgMTMgMjBjLTIuMDU4IDAtMy45MjggMi4zNTYtNiAyLTIuMDcyLS4zNTYtMi43NzUtMy4zNjktMS41LTQuNSJ9KSxKKCJjaXJjbGUiLHtjeDoiMTYiLGN5OiI3IixyOiI1In0pXX0pfTtmdW5jdGlvbiBKJCgkKXtpZighJClyZXR1cm4hMDtyZXR1cm4gZDIoJCkub3MudG9Mb3dlckNhc2UoKT09PSJpb3MifWZ1bmN0aW9uIG05KHt1ZGlkOiQscnVudGltZTpLfSl7bGV0W1EsWF09RCghMCksW1osWV09RChudWxsKSxbcSxHXT1EKG51bGwpLFtCLFZdPUQobnVsbCksQz1KJChLKSxMPVAoYXN5bmMoKT0+e1YobnVsbCk7dHJ5e2xldCBUPWF3YWl0IGo1KHtkZXZpY2U6JH0se3NpZ25hbDpBYm9ydFNpZ25hbC50aW1lb3V0KDE1MDAwKX0pO2lmKFQpWShUKTtlbHNlIFYoIlVuZXhwZWN0ZWQgc2ltdWxhdG9yLXNldHRpbmdzIHJlcGx5Iil9Y2F0Y2goVCl7VihUIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uJiZULm5hbWU9PT0iVGltZW91dEVycm9yIj8iVGltZWQgb3V0IHJlYWRpbmcgc2ltdWxhdG9yIHNldHRpbmdzIjpUIGluc3RhbmNlb2YgRXJyb3ImJlQubWVzc2FnZSE9PSJGYWlsZWQgdG8gZmV0Y2giP1QubWVzc2FnZToiQ291bGQgbm90IHJlYWNoIHRoZSBwcmV2aWV3IHNlcnZlciDigJQgcmVsb2FkIHRoZSBwYWdlIGlmIHRoaXMgcGVyc2lzdHMiKX19LFskXSk7SSgoKT0+e2lmKFkobnVsbCksIUMpcmV0dXJuO0woKX0sW0wsQ10pO2xldCBGPVAoYXN5bmMoVCxiKT0+e0coVCksVihudWxsKSxZKCh4KT0+eD97Li4ueCxbVF06Yn06eCk7dHJ5e2F3YWl0IGo1KHtkZXZpY2U6JCxvcHRpb246VCx2YWx1ZTpifSx7c2lnbmFsOkFib3J0U2lnbmFsLnRpbWVvdXQoMTUwMDApfSl9Y2F0Y2goeCl7Vih4IGluc3RhbmNlb2YgRXJyb3I/eC5tZXNzYWdlOmBGYWlsZWQgdG8gc2V0ICR7VH1gKSxMKCl9ZmluYWxseXtHKG51bGwpfX0sWyQsTF0pLE49Uyh7cnVubmluZzohMSxuZXh0Om51bGx9KSxfPVMoRik7Xy5jdXJyZW50PUY7bGV0IHo9UCgoVCk9PntsZXQgYj1OLmN1cnJlbnQ7aWYoYi5uZXh0PVQsYi5ydW5uaW5nKXJldHVybjtiLnJ1bm5pbmc9ITAsKGFzeW5jKCk9Pnt3aGlsZShiLm5leHQhPT1udWxsKXtsZXQgeD1iLm5leHQ7Yi5uZXh0PW51bGwsYXdhaXQgXy5jdXJyZW50KCJ0ZXh0LXNpemUiLHoyW3hdKX1iLnJ1bm5pbmc9ITF9KSgpfSxbXSksVT1aIT09bnVsbCxBPVo/PyQkLE09ejIuaW5kZXhPZihBWyJ0ZXh0LXNpemUiXSksRT1NPj0wP006QVsidGV4dC1zaXplIl0/LnN0YXJ0c1dpdGgoImFjY2Vzc2liaWxpdHkiKT96Mi5sZW5ndGgtMTozO3JldHVybiBKKHQxLHtvcGVuOlEsb25PcGVuQ2hhbmdlOlgsImRhdGEtc2ltdWxhdG9yLXNldHRpbmdzIjoiIixzdW1tYXJ5Q2xhc3NOYW1lOiJncmlkIFtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0b18xZnJfYXV0b10gaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtbGVmdCIsc3VtbWFyeTpKKGUse2NoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMXB4XSBmb250LXNlbWlib2xkIHRleHQtd2hpdGUvNTAgdXBwZXJjYXNlIHRyYWNraW5nLVswLjA4ZW1dIGxlYWRpbmctbm9uZSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOiJTaW11bGF0b3IifSksSigic3BhbiIse30pXX0pLGNoaWxkcmVuOiFDP0ooImRpdiIse2NsYXNzTmFtZToidGV4dC13aGl0ZS80NSB0ZXh0LVsxMXB4XSBweC0wLjUgcHktMSIsY2hpbGRyZW46IlNpbXVsYXRvciBzZXR0aW5ncyBhcmUgYXZhaWxhYmxlIG9uIGlPUyBzaW11bGF0b3JzIG9ubHkuIn0pOkooZSx7Y2hpbGRyZW46W0ImJkooImRpdiIse2NsYXNzTmFtZToiYmctZGFuZ2VyLzEwIGJvcmRlciBib3JkZXItZGFuZ2VyLzIwIHRleHQtZGFuZ2VyLXNvZnQgdGV4dC1bMTFweF0gcHgtMiBweS0xLjUgcm91bmRlZC1tZCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIiLGNoaWxkcmVuOltKKCJzcGFuIix7Y2xhc3NOYW1lOiJtaW4tdy0wIixjaGlsZHJlbjpCfSksSigiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT52b2lkIEwoKSxjbGFzc05hbWU6InNocmluay0wIGN1cnNvci1wb2ludGVyIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1kYW5nZXIvMzAgYmctdHJhbnNwYXJlbnQgcHgtMS41IHB5LTAuNSB0ZXh0LVsxMXB4XSB0ZXh0LWRhbmdlci1zb2Z0IixjaGlsZHJlbjoiUmV0cnkifSldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC0xLjUgcGItMS41IixjaGlsZHJlbjpbSihDMix7aWNvbjpVMi5hcHBlYXJhbmNlLGxhYmVsOiJBcHBlYXJhbmNlIixjaGlsZHJlbjpKKFEzLHtsYWJlbDoiQXBwZWFyYW5jZSIsdmFsdWU6QS5hcHBlYXJhbmNlPz8ibGlnaHQiLG9wdGlvbnM6SzMuYXBwZWFyYW5jZSxkaXNhYmxlZDohVXx8cT09PSJhcHBlYXJhbmNlIixvbkNoYW5nZTooVCk9PkYoImFwcGVhcmFuY2UiLFQpfSl9KSxKKEMyLHtpY29uOlUyLmdsYXNzLGxhYmVsOiJMaXF1aWQgR2xhc3MiLGNoaWxkcmVuOkooUTMse2xhYmVsOiJMaXF1aWQgR2xhc3MiLHZhbHVlOkFbImxpcXVpZC1nbGFzcyJdPz8iY2xlYXIiLG9wdGlvbnM6SzNbImxpcXVpZC1nbGFzcyJdLGRpc2FibGVkOiFVfHxxPT09ImxpcXVpZC1nbGFzcyIsb25DaGFuZ2U6KFQpPT5GKCJsaXF1aWQtZ2xhc3MiLFQpfSl9KSxKKEMyLHtpY29uOlUyLmZpbHRlcixsYWJlbDoiQ29sb3IgRmlsdGVyIixjaGlsZHJlbjpKKFEzLHtsYWJlbDoiQ29sb3IgRmlsdGVyIix2YWx1ZTpBWyJjb2xvci1maWx0ZXIiXT8/Im5vbmUiLG9wdGlvbnM6SzNbImNvbG9yLWZpbHRlciJdLGRpc2FibGVkOiFVfHxxPT09ImNvbG9yLWZpbHRlciIsb25DaGFuZ2U6KFQpPT5GKCJjb2xvci1maWx0ZXIiLFQpfSl9KSxKKEMyLHtpY29uOlUyLnRleHRTaXplLGxhYmVsOiJUZXh0IFNpemUiLGNoaWxkcmVuOkooUSQse3ZhbHVlOkUsZGlzYWJsZWQ6IVUsb25DaGFuZ2U6en0pfSksSyQubWFwKCh7a2V5OlQsbGFiZWw6Yn0pPT5KKEMyLHtpY29uOlUyW1Q9PT0icmVkdWNlLW1vdGlvbiI/Im1vdGlvbiI6VD09PSJpbmNyZWFzZS1jb250cmFzdCI/ImNvbnRyYXN0IjpUPT09InNob3ctYm9yZGVycyI/ImJvcmRlcnMiOlQ9PT0icmVkdWNlLXRyYW5zcGFyZW5jeSI/InRyYW5zcGFyZW5jeSI6InZvaWNlb3ZlciJdLGxhYmVsOmIsY2hpbGRyZW46SihRNSx7bGFiZWw6YixjaGVja2VkOkFbVF09PT0ib24iLGRpc2FibGVkOiFVfHxxPT09VCxvbkNoYW5nZTooeCk9PkYoVCx4PyJvbiI6Im9mZiIpfSl9LFQpKV19KV19KX0pfWZ1bmN0aW9uIGY5KHtvcGVuOiQsb25DbG9zZTpLLHVkaWQ6USxkZXZpY2VSdW50aW1lOlgsY3VycmVudEFwcDpaLGF4T3ZlcmxheUVuYWJsZWQ6WSxvblRvZ2dsZUF4T3ZlcmxheTpxLHdpZHRoOkd9KXtyZXR1cm4gSihoMCx7b3BlbjokLHdpZHRoOkcsY2hpbGRyZW46W0ooajAse2NoaWxkcmVuOltKKGEyLHtjaGlsZHJlbjoiVG9vbHMifSksSihyMix7b25DbGljazpLfSldfSksJCYmSigiZGl2Iix7Y2xhc3NOYW1lOiJwLTMuNSBvdmVyZmxvdy15LWF1dG8gZmxleC0xIGZsZXggZmxleC1jb2wgZ2FwLTMiLGNoaWxkcmVuOltKKHk5LHt1ZGlkOlEsY3VycmVudEFwcDpafSksSihtOSx7dWRpZDpRLHJ1bnRpbWU6WH0pLEooeDkse292ZXJsYXlFbmFibGVkOlksb25Ub2dnbGVPdmVybGF5OnF9KSxKKGo5LHt1ZGlkOlEsYnVuZGxlSWQ6Wj8uYnVuZGxlSWQ/P251bGx9KSxKKEU5LHt1ZGlkOlEsZXhlYzpDMX0pLEooUzkse3VkaWQ6USxidW5kbGVJZDpaPy5idW5kbGVJZD8/bnVsbH0pXX0pXX0pfWZ1bmN0aW9uIEYyKCQsSyl7ZmV0Y2goZzEoImRldnRvb2xzL2hpZ2hsaWdodCIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dGFyZ2V0SWQ6JCxvbjpLfSksa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiBKMygpe2xldCAkPWcxKCJkZXZ0b29scy9yZWxlYXNlIik7dHJ5e2lmKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3Iuc2VuZEJlYWNvbil7bGV0IEs9bmV3IEJsb2IoWyJ7fSJdLHt0eXBlOiJhcHBsaWNhdGlvbi9qc29uIn0pO2lmKG5hdmlnYXRvci5zZW5kQmVhY29uKCQsSykpcmV0dXJufX1jYXRjaHt9ZmV0Y2goJCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6Int9IixrZWVwYWxpdmU6ITB9KS5jYXRjaCgoKT0+e30pfWZ1bmN0aW9uIHA5KCQpe2xldCBLPSQuY29udGVudERvY3VtZW50O2lmKCFLKXJldHVybjtsZXQgUT0oKT0+e2xldCBZPVtLXTt3aGlsZShZLmxlbmd0aCl7bGV0IHE9WS5wb3AoKSxHPXEucXVlcnlTZWxlY3RvckFsbCgiW2FyaWEtbGFiZWxdLFt0aXRsZV0iKTtmb3IobGV0IEIgb2YgRyl7bGV0IFY9Qi5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8Qi50aXRsZXx8IiI7aWYoL150b2dnbGUgc2NyZWVuY2FzdCQvaS50ZXN0KFYpKXJldHVybiBCfWZvcihsZXQgQiBvZiBxLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKSlpZihCLnNoYWRvd1Jvb3QpWS5wdXNoKEIuc2hhZG93Um9vdCl9cmV0dXJuIG51bGx9LFg9MCxaPSgpPT57WCsrO2xldCBZPVEoKTtpZihZJiZZLmdldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIikhPT0iZmFsc2UiKXtZLmNsaWNrKCk7cmV0dXJufWlmKFg8MjApc2V0VGltZW91dChaLDEwMCl9O1ooKX1mdW5jdGlvbiB1OSgkKXtsZXQgSz1bXSxRPW5ldyBNYXA7Zm9yKGxldCBYIG9mICQpe2xldCBaPVguYXBwTmFtZXx8WC5idW5kbGVJZHx8IlVua25vd24iLFk9WC5idW5kbGVJZHx8WixxPVEuZ2V0KFkpO2lmKCFxKXE9e2tleTpZLGFwcE5hbWU6WixidW5kbGVJZDpYLmJ1bmRsZUlkLHRhcmdldHM6W119LFEuc2V0KFkscSksSy5wdXNoKFkpO3EudGFyZ2V0cy5wdXNoKFgpfXJldHVybiBLLm1hcCgoWCk9PlEuZ2V0KFgpKX1mdW5jdGlvbiBsOSgkLEspe2xldFtRLFhdPUQoe30pLFo9TzEoKCk9Pksuc2xpY2UoKS5zb3J0KCkuam9pbigifCIpLFtLXSk7cmV0dXJuIEkoKCk9PntpZighJClyZXR1cm47bGV0IFk9ITE7Zm9yKGxldCBxIG9mIEspe2lmKCFxKWNvbnRpbnVlO2xldCBHPWAkeyR9OiR7cX1gLEI9ZjAuZ2V0KEcpO2lmKHR5cGVvZiBCPT09InN0cmluZyJ8fEI9PT1udWxsKXtYKChWKT0+VltxXT09PUI/Vjp7Li4uVixbcV06Qn0pO2NvbnRpbnVlfUk5KEMxLCQscSkudGhlbigoVik9PntpZihZKXJldHVybjtYKChDKT0+KHsuLi5DLFtxXTpWfSkpfSl9cmV0dXJuKCk9PntZPSEwfX0sWyQsWl0pLFF9ZnVuY3Rpb24gZDkoe3VkaWQ6JCx0YXJnZXRzOkssc2VsZWN0ZWQ6USxvblNlbGVjdFRhcmdldDpYLG9uUmVmcmVzaDpafSl7bGV0IFk9dTkoSykscT1ZLm1hcCgoeik9PnouYnVuZGxlSWQpLmZpbHRlcigoeik9PiEheiksRz1sOSgkLHEpLFtCLFZdPUQoITEpLFtDLExdPUQobnVsbCksRj1TKG51bGwpLE49UyhudWxsKTtJKCgpPT57aWYoIUIpcmV0dXJuO2xldCB6PShVKT0+e2lmKCFOLmN1cnJlbnQpcmV0dXJuO2lmKCFOLmN1cnJlbnQuY29udGFpbnMoVS50YXJnZXQpKVYoITEpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix6KSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix6KX0sW0JdKSxJKCgpPT57aWYoQilyZXR1cm47aWYoRi5jdXJyZW50KUYyKEYuY3VycmVudCwhMSksRi5jdXJyZW50PW51bGw7SjMoKX0sW0JdKSxJKCgpPT57bGV0IHo9KCk9PkozKCk7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIseiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIseiksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLHopLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLHopfX0sW10pO2xldCBfPVE/KFEudGl0bGV8fFEudXJsfHxRLmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApOiJTZWxlY3QgdGFyZ2V0IjtyZXR1cm4gSigiZGl2Iix7cmVmOk4sY2xhc3NOYW1lOiJyZWxhdGl2ZSB3LWZ1bGwgbWluLXctMCIsY2hpbGRyZW46W0ooImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazooKT0+e1YoKHopPT57aWYoIXopWigpO3JldHVybiF6fSl9LGNsYXNzTmFtZToidy1mdWxsIG1pbi13LTAgaC1bMjZweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIGJnLXBhbmVsIHRleHQtd2hpdGUvOTAgYm9yZGVyIGJvcmRlci13aGl0ZS8xMiByb3VuZGVkLW1kIHRleHQtWzEycHhdIHB4LTIgY3Vyc29yLXBvaW50ZXIgdGV4dC1sZWZ0IiwiYXJpYS1oYXNwb3B1cCI6Imxpc3Rib3giLCJhcmlhLWV4cGFuZGVkIjpCLCJhcmlhLWxhYmVsIjoiV2ViS2l0IHRhcmdldCIsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6Im92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIG1pbi13LTAiLGNoaWxkcmVuOl99KSxKKHQwLHtzaXplOjEyLHN0cm9rZVdpZHRoOjJ9KV19KSxCJiZKKCJ1bCIse3JvbGU6Imxpc3Rib3giLGNsYXNzTmFtZToiYWJzb2x1dGUgdG9wLVtjYWxjKDEwMCUrNHB4KV0gbGVmdC0wIG0tMCBwLTEgbGlzdC1ub25lIGJnLXBhbmVsIGJvcmRlciBib3JkZXItd2hpdGUvMTIgcm91bmRlZC1sZyBzaGFkb3ctWzBfOHB4XzI0cHhfcmdiYSgwLDAsMCwwLjUpXSBtaW4tdy1bMjIwcHhdIG1heC13LVszNjBweF0gbWF4LWgtWzMyMHB4XSBvdmVyZmxvdy15LWF1dG8gei01MCIsY2hpbGRyZW46WS5tYXAoKHopPT57bGV0IFU9ei5idW5kbGVJZD9HW3ouYnVuZGxlSWRdOm51bGw7cmV0dXJuIEooImxpIix7Y2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCIsY2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcHgtMS41IHB0LTEgcGItMC41IHRleHQtWzEycHhdIGZvbnQtc2VtaWJvbGQgdGV4dC13aGl0ZS9bMC45Ml0iLGNoaWxkcmVuOltVP0ooImltZyIse3NyYzpVLGFsdDoiIixjbGFzc05hbWU6InctNCBoLTQgcm91bmRlZC1bM3B4XSBzaHJpbmstMCBvYmplY3QtY292ZXIifSk6Sigic3BhbiIse2NsYXNzTmFtZToidy00IGgtNCByb3VuZGVkLVszcHhdIHNocmluay0wIG9iamVjdC1jb3ZlciIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46ei5hcHBOYW1lfSldfSksSigidWwiLHtyb2xlOiJncm91cCIsY2xhc3NOYW1lOiJsaXN0LW5vbmUgbS0wIHAtMCBwbC1bMjZweF0iLGNoaWxkcmVuOnoudGFyZ2V0cy5tYXAoKEEpPT57bGV0IE09UT8uaWQ9PT1BLmlkLEU9ISFBLmluVXNlQnlPdGhlckluc3BlY3RvciYmIU0sVD0oQS50aXRsZXx8QS51cmx8fEEuYXBwTmFtZXx8IlVudGl0bGVkIikuc2xpY2UoMCw5MCksYj1DPT09QS5pZCYmIUUseD0iZmxleCBmbGV4LWNvbCBweC0yIHB5LVszcHhdIHJvdW5kZWQgdGV4dC1bMTJweF0gbGVhZGluZy1bMS4zNV0iO3JldHVybiBKKCJsaSIse3JvbGU6Im9wdGlvbiIsImFyaWEtc2VsZWN0ZWQiOk0sImFyaWEtZGlzYWJsZWQiOkUsdGFiSW5kZXg6RT8tMTowLHRpdGxlOkU/IkFscmVhZHkgYmVpbmcgaW5zcGVjdGVkIGJ5IGFub3RoZXIgZGVidWdnZXIiOnZvaWQgMCxvbk1vdXNlRW50ZXI6KCk9PntpZihFKXJldHVybjtpZihGLmN1cnJlbnQmJkYuY3VycmVudCE9PUEuaWQpRjIoRi5jdXJyZW50LCExKTtGLmN1cnJlbnQ9QS5pZCxMKEEuaWQpLEYyKEEuaWQsITApfSxvbk1vdXNlTGVhdmU6KCk9PntpZihGLmN1cnJlbnQ9PT1BLmlkKUYyKEEuaWQsITEpLEYuY3VycmVudD1udWxsO0woKFIpPT5SPT09QS5pZD9udWxsOlIpfSxvbkNsaWNrOigpPT57aWYoRSlyZXR1cm47WChBLmlkKSxWKCExKX0sY2xhc3NOYW1lOmBmbGV4IGZsZXgtY29sIHB4LTIgcHktWzNweF0gcm91bmRlZCB0ZXh0LVsxMnB4XSBsZWFkaW5nLVsxLjM1XSAke0U/Im9wYWNpdHktNDAgY3Vyc29yLW5vdC1hbGxvd2VkIGl0YWxpYyB0ZXh0LXdoaXRlLzg1IjpiPyJiZy1bcmdiYSgxMCwxMzIsMjU1LDAuMjIpXSB0ZXh0LXdoaXRlLzg1IGN1cnNvci1wb2ludGVyIjpNPyJiZy13aGl0ZS9bMC4wNl0gdGV4dC13aGl0ZS84NSBjdXJzb3ItcG9pbnRlciI6InRleHQtd2hpdGUvODUgY3Vyc29yLXBvaW50ZXIifWAsY2hpbGRyZW46W0ooInNwYW4iLHtjbGFzc05hbWU6ImJsb2NrIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpUfSksQS51cmwmJkEudXJsIT09ImFib3V0OmJsYW5rIiYmSigic3BhbiIse2NsYXNzTmFtZToiYmxvY2sgZm9udC1tb25vIHRleHQtWzEwcHhdIHRleHQtd2hpdGUvWzAuNDJdIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpBLnVybH0pXX0sQS5pZCl9KX0pXX0sei5rZXkpfSl9KV19KX1mdW5jdGlvbiBjOSh7b3BlbjokLG9uQ2xvc2U6Syx1ZGlkOlEsdGFyZ2V0czpYLHNlbGVjdGVkVGFyZ2V0SWQ6WixvblNlbGVjdFRhcmdldDpZLGxvYWRpbmc6cSxlcnJvcjpHLG9uUmVmcmVzaDpCLHdpZHRoOlZ9KXtsZXQgQz1aP1guZmluZCgoTCk9PkwuaWQ9PT1aKT8/bnVsbDpudWxsO3JldHVybiBKKGgwLHtvcGVuOiQsd2lkdGg6VixjaGlsZHJlbjpbSihqMCx7Y2hpbGRyZW46W1gubGVuZ3RoPjA/SihkOSx7dWRpZDpRLHRhcmdldHM6WCxzZWxlY3RlZDpDLG9uU2VsZWN0VGFyZ2V0Olksb25SZWZyZXNoOkJ9KTpKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSB0ZXh0LXdoaXRlL1swLjQ4XSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcCIsY2hpbGRyZW46cT8iTG9va2luZyBmb3IgU2FmYXJpIGFuZCBpbnNwZWN0YWJsZSB3ZWJ2aWV3cy4uLiI6Ik5vIGluc3BlY3RhYmxlIFNhZmFyaSBvciBXS1dlYlZpZXcgdGFyZ2V0cyJ9KSxKKHIyLHtvbkNsaWNrOkssYXJpYUxhYmVsOiJDbG9zZSBXZWJLaXQgRGV2VG9vbHMiLHRpdGxlOiJDbG9zZSIsaWNvblNpemU6MTV9KV19KSxKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXgtMSBtaW4taC0wIGJnLXdoaXRlIHJlbGF0aXZlIixjaGlsZHJlbjpHP0ooImRpdiIse2NsYXNzTmFtZToiaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtNiBiZy1wYW5lbC1kZWVwIHRleHQtd2hpdGUvWzAuNThdIHRleHQtY2VudGVyIHRleHQtWzEzcHhdIixjaGlsZHJlbjpHfSk6QyYmJD9KKCJpZnJhbWUiLHtzcmM6Qy5kZXZ0b29sc0Zyb250ZW5kVXJsLHRpdGxlOmBXZWJLaXQgRGV2VG9vbHMgLSAke0MudGl0bGV8fEMudXJsfHxDLmlkfWAsY2xhc3NOYW1lOiJ3LWZ1bGwgaC1mdWxsIGJvcmRlci1ub25lIGJsb2NrIGJnLXdoaXRlIixvbkxvYWQ6KEwpPT5wOShMLmN1cnJlbnRUYXJnZXQpfSxDLmlkKTpKKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTYgYmctcGFuZWwtZGVlcCB0ZXh0LXdoaXRlL1swLjU4XSB0ZXh0LWNlbnRlciB0ZXh0LVsxM3B4XSIsY2hpbGRyZW46Qz8iRGV2VG9vbHMgcGF1c2VkIOKAlCBvcGVuIHRoZSBwYW5lbCB0byByZWF0dGFjaC4iOiJPcGVuIFNhZmFyaSBvciBhbiBpbnNwZWN0YWJsZSBXS1dlYlZpZXcgaW4gdGhlIHNpbXVsYXRvci4ifSl9KV19KX1mdW5jdGlvbiBYJCh7aG9zdFBhdGg6JCxleGVjOkssdWRpZDpRLG9uVXBsb2FkU3RhcnQ6WCxvblVwbG9hZFByb2dyZXNzOlosb25VcGxvYWRFbmQ6WSxvbkhvc3RQYXRoRHJvcDpxfSl7cT8uKCQpO2xldCBHPSQuc3BsaXQoIi8iKS5wb3AoKT8/ImltYWdlIixCPVgoRywibWVkaWEiKTtyZXR1cm4gWihCLG51bGwpLEM5KCQsSyxRKS50aGVuKCgpPT5ZKEIsITApKS5jYXRjaCgoVik9PlkoQiwhMSxWIGluc3RhbmNlb2YgRXJyb3I/Vi5tZXNzYWdlOiJBZGQgZmFpbGVkIikpfWZ1bmN0aW9uIG85KHtleGVjOiQsdWRpZDpLLGVuYWJsZWQ6USxvblVwbG9hZFN0YXJ0Olgsb25VcGxvYWRQcm9ncmVzczpaLG9uVXBsb2FkRW5kOlksb25VbnN1cHBvcnRlZDpxLG9uSG9zdFBhdGhEcm9wOkd9KXtsZXRbQixWXT1EKCExKSxDPVMoMCksTD1QKGFzeW5jKHopPT57aWYoei5wcmV2ZW50RGVmYXVsdCgpLHouc3RvcFByb3BhZ2F0aW9uKCksQy5jdXJyZW50PTAsVighMSksIVF8fCFLKXJldHVybjtsZXQgVT16LmRhdGFUcmFuc2Zlci5nZXREYXRhKCQ1KTtpZihVKXtYJCh7aG9zdFBhdGg6VSxleGVjOiQsdWRpZDpLLG9uVXBsb2FkU3RhcnQ6WCxvblVwbG9hZFByb2dyZXNzOlosb25VcGxvYWRFbmQ6WSxvbkhvc3RQYXRoRHJvcDpHfSk7cmV0dXJufWxldCBBPUFycmF5LmZyb20oei5kYXRhVHJhbnNmZXIuZmlsZXMpO2lmKEEubGVuZ3RoPT09MClyZXR1cm47Zm9yKGxldCBNIG9mIEEpe2xldCBFPVU5KE0pO2lmKCFFKXtxKE0pO2NvbnRpbnVlfWxldCBUPVgoTS5uYW1lLEUpO0g5KE0sRSwkLEssKGIpPT5aKFQsYikpLnRoZW4oKCk9PlkoVCwhMCkpLmNhdGNoKChiKT0+WShULCExLGIgaW5zdGFuY2VvZiBFcnJvcj9iLm1lc3NhZ2U6IlVwbG9hZCBmYWlsZWQiKSl9fSxbUSxLLCQsWCxaLFkscSxHXSksRj1QKCh6KT0+e2lmKHoucHJldmVudERlZmF1bHQoKSxRKXouZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbUV0pLE49UCgoeik9PntpZih6LnByZXZlbnREZWZhdWx0KCksIVEpcmV0dXJuO2lmKEMuY3VycmVudCsrLEMuY3VycmVudD09PTEpVighMCl9LFtRXSksXz1QKCh6KT0+e2lmKHoucHJldmVudERlZmF1bHQoKSxDLmN1cnJlbnQtLSxDLmN1cnJlbnQ8PTApQy5jdXJyZW50PTAsVighMSl9LFtdKTtyZXR1cm57aXNEcmFnT3ZlcjpCLGRyb3Bab25lUHJvcHM6e29uRHJhZ092ZXI6RixvbkRyYWdFbnRlcjpOLG9uRHJhZ0xlYXZlOl8sb25Ecm9wOkx9fX1mdW5jdGlvbiBhOSgkKXtsZXQgSz1TKG5ldyBTZXQpLFE9UCgoWCk9PntyZXR1cm4gSy5jdXJyZW50LmFkZChYKSwoKT0+e0suY3VycmVudC5kZWxldGUoWCl9fSxbXSk7cmV0dXJuIEkoKCk9PntpZighJClyZXR1cm47bGV0IFg9bmV3IEFib3J0Q29udHJvbGxlcixaPSExLFk9bnVsbCxxPW5ldyBVUkwoJCk7cS5zZWFyY2hQYXJhbXMuc2V0KCJyYXciLCIxIik7bGV0IEc9cS50b1N0cmluZygpLEI9KCk9PntpZihafHxYLnNpZ25hbC5hYm9ydGVkfHxZKXJldHVybjtZPXNldFRpbWVvdXQoKCk9PntZPW51bGwsQygpfSwxMDAwKX0sVj0oTCk9PntpZihLLmN1cnJlbnQuc2l6ZT09PTApcmV0dXJuO2xldCBGPVVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW0xdLHt0eXBlOiJpbWFnZS9qcGVnIn0pKTtmb3IobGV0IE4gb2YgSy5jdXJyZW50KU4oRil9LEM9YXN5bmMoKT0+e3RyeXtsZXQgRj0oYXdhaXQgZmV0Y2goRyx7c2lnbmFsOlguc2lnbmFsfSkpLmJvZHk/LmdldFJlYWRlcigpO2lmKCFGKXtCKCk7cmV0dXJufWxldCBOPW5ldyBVaW50OEFycmF5KDApLF89MCx6PTEwMjQsVT0oYix4KT0+e2xldCBtPU1hdGgubWluKGIubGVuZ3RoLTQseCt6KTtmb3IobGV0IFI9eDtSPD1tO1IrKylpZihiW1JdPT09MTMmJmJbUisxXT09PTEwJiZiW1IrMl09PT0xMyYmYltSKzNdPT09MTApcmV0dXJuIFI7cmV0dXJuLTF9LEE9bmV3IFRleHREZWNvZGVyKCJsYXRpbjEiKSxNPShiLHgsbSk9PntsZXQgUj1BLmRlY29kZShiLnN1YmFycmF5KHgsbSkpLG89L2NvbnRlbnQtbGVuZ3RoOlxzKihcZCspL2kuZXhlYyhSKTtyZXR1cm4gbz9OdW1iZXIob1sxXSk6bnVsbH0sRT0oYix4KT0+e2xldCBtPS0xO2ZvcihsZXQgUj14O1I8Yi5sZW5ndGgtMTtSKyspaWYoYltSXT09PTI1NSYmYltSKzFdPT09MjE2KXttPVI7YnJlYWt9aWYobT09PS0xKXJldHVybiBudWxsO2ZvcihsZXQgUj1tKzI7UjxiLmxlbmd0aC0xO1IrKylpZihiW1JdPT09MjU1JiZiW1IrMV09PT0yMTcpcmV0dXJue3M6bSxlOlIrMn07cmV0dXJuIG51bGx9LFQ9KCk9Pnt3aGlsZShfPE4ubGVuZ3RoKXtsZXQgYj1VKE4sXyk7aWYoYj49MCl7bGV0IG09TShOLF8sYik7aWYobSE9bnVsbCYmbT4wKXtsZXQgUj1iKzQsbz1SK207aWYoTi5sZW5ndGg8bylicmVhaztWKE4uc3ViYXJyYXkoUixvKSksXz1vO2NvbnRpbnVlfX1lbHNlIGlmKE4ubGVuZ3RoLV88PXopYnJlYWs7bGV0IHg9RShOLF8pO2lmKCF4KWJyZWFrO1YoTi5zdWJhcnJheSh4LnMseC5lKSksXz14LmV9aWYoXz4wKU49XzxOLmxlbmd0aD9OLnNsaWNlKF8pOm5ldyBVaW50OEFycmF5KDApLF89MH07d2hpbGUoITApe2xldHtkb25lOmIsdmFsdWU6eH09YXdhaXQgRi5yZWFkKCk7aWYoYilicmVhaztpZih4JiZ4Lmxlbmd0aCl7bGV0IG09bmV3IFVpbnQ4QXJyYXkoTi5sZW5ndGgreC5sZW5ndGgpO20uc2V0KE4pLG0uc2V0KHgsTi5sZW5ndGgpLE49bSxUKCl9fX1jYXRjaHt9ZmluYWxseXtCKCl9fTtyZXR1cm4gQygpLCgpPT57aWYoWj0hMCxZKWNsZWFyVGltZW91dChZKTtYLmFib3J0KCl9fSxbJF0pLHtzdWJzY3JpYmVGcmFtZTpRLGZyYW1lOm51bGx9fWZ1bmN0aW9uIHI5KCl7bGV0WyRdPUQoSDApO3JldHVybntzdXBwb3J0ZWQ6JH19ZnVuY3Rpb24gSjUoJCxLLFEsWCxaPSJsZWZ0Iil7bGV0IFk9UCgoRixOKT0+Wj09PSJsZWZ0Ij9GLU46Ti1GLFtaXSkscT1QKChGKT0+TWF0aC5tYXgoUSxNYXRoLm1pbihYLEYpKSxbUSxYXSksW0csQl09RCgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiBLO2xldCBGPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgkKSxOPUYhPW51bGw/TnVtYmVyKEYpOk5hTjtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKE4pP3EoTik6S30pLFY9dHlwZW9mIHdpbmRvdzwidSI/TWF0aC5taW4oWCx3aW5kb3cuaW5uZXJXaWR0aC0zMik6WCxDPU1hdGgubWF4KFEsTWF0aC5taW4oVixHKSksTD1QKChGKT0+e0YucHJldmVudERlZmF1bHQoKTtsZXQgTj1GLmNsaWVudFgsXz1DLHo9Ri5jdXJyZW50VGFyZ2V0O3ouc2V0UG9pbnRlckNhcHR1cmUoRi5wb2ludGVySWQpO2xldCBVPShNKT0+e2xldCBFPXEoXytZKE4sTS5jbGllbnRYKSk7QihFKX0sQT0oTSk9Pnt6LnJlbGVhc2VQb2ludGVyQ2FwdHVyZShNLnBvaW50ZXJJZCksei5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsVSksei5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLEEpLHoucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsQSk7dHJ5e3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgkLFN0cmluZyhxKF8rWShOLE0uY2xpZW50WCkpKSl9Y2F0Y2h7fX07ei5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsVSksei5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLEEpLHouYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsQSl9LFtxLFksQywkXSk7cmV0dXJue3dpZHRoOkMsb25Qb2ludGVyRG93bjpMfX12YXIgaTk9MzUwMCxuOT00MDAwO2Z1bmN0aW9uIFokKCl7cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9bOi5dL2csIi0iKS5zbGljZSgwLDIzKX1mdW5jdGlvbiBzOSgkKXtsZXRbSyxRXT1EKG51bGwpLFg9UyhudWxsKSxaPVMoaTkpLFk9UyhudWxsKTtJKCgpPT57WS5jdXJyZW50PUt9LFtLXSk7bGV0IHE9KCk9PntpZihYLmN1cnJlbnQpY2xlYXJUaW1lb3V0KFguY3VycmVudCk7WC5jdXJyZW50PW51bGx9LEc9UCgoTixfKT0+e3EoKSxaLmN1cnJlbnQ9XyxYLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e1EoKHopPT56Py5pZD09PU4/ey4uLnoscGhhc2U6Im91dCJ9OnopfSxfKX0sW10pLEI9UCgoKT0+e3EoKSxZLmN1cnJlbnQ9bnVsbCxRKG51bGwpfSxbXSksVj1QKCgpPT57cSgpfSxbXSksQz1QKCgpPT57bGV0IE49WS5jdXJyZW50O2lmKE4mJk4ucGhhc2U9PT0iaW4iJiZOLnN0YXR1cyE9PSJzYXZpbmciKUcoTi5pZCxaLmN1cnJlbnQpfSxbR10pLEw9UCgoKT0+e2xldCBOPVkuY3VycmVudDtpZihOPy5wYXRoKUMxKGBvcGVuIC1SICR7WjEoTi5wYXRoKX1gKX0sW10pLEY9UChhc3luYygpPT57aWYoISQpcmV0dXJuO3EoKTtsZXQgTj1jcnlwdG8ucmFuZG9tVVVJRCgpO1Eoe2lkOk4sc3RhdHVzOiJzYXZpbmciLHBoYXNlOiJpbiJ9KTtsZXQgej1gRj0iJHtgJEhPTUUvRGVza3RvcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC0ke1okKCl9LnBuZ2B9IjsgeGNydW4gc2ltY3RsIGlvICR7WjEoJCl9IHNjcmVlbnNob3QgIiRGIiAmJiBwcmludGYgJyVzJyAiJEYiYCxVO3RyeXtsZXQgTT1hd2FpdCBDMSh6KTtpZihVPU0uc3Rkb3V0LnRyaW0oKSxNLmV4aXRDb2RlIT09MHx8IVUpe1Eoe2lkOk4sc3RhdHVzOiJlcnJvciIscGhhc2U6ImluIixtZXNzYWdlOk0uc3RkZXJyLnRyaW0oKXx8IlNjcmVlbnNob3QgZmFpbGVkIn0pLEcoTixuOSk7cmV0dXJufX1jYXRjaChNKXtRKHtpZDpOLHN0YXR1czoiZXJyb3IiLHBoYXNlOiJpbiIsbWVzc2FnZTpNIGluc3RhbmNlb2YgRXJyb3I/TS5tZXNzYWdlOiJTY3JlZW5zaG90IGZhaWxlZCJ9KSxHKE4sbjkpO3JldHVybn1RKHtpZDpOLHN0YXR1czoic2F2ZWQiLHBoYXNlOiJpbiIscGF0aDpVfSksRyhOLGk5KTtsZXQgQT1gL3RtcC9zZXJ2ZS1zaW0tc2NyZWVuc2hvdC10aHVtYi0ke059LnBuZ2A7dHJ5e2xldCBFPShhd2FpdCBDMShgc2lwcyAtWiAzMjAgJHtaMShVKX0gLS1vdXQgJHtaMShBKX0gPi9kZXYvbnVsbCAyPiYxICYmIGJhc2U2NCAtaSAke1oxKEEpfTsgcm0gLWYgJHtaMShBKX1gKSkuc3Rkb3V0LnJlcGxhY2UoL1xzKy9nLCIiKTtpZihFKVEoKFQpPT5UPy5pZD09PU4/ey4uLlQsdGh1bWI6YGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke0V9YH06VCl9Y2F0Y2h7fX0sWyQsR10pO3JldHVybnt0b2FzdDpLLGNhcHR1cmU6RixyZXZlYWw6TCxkaXNtaXNzOkIscGF1c2U6VixyZXN1bWU6Q319ZnVuY3Rpb24gZTkoe2RlZmF1bHRXaWR0aDokLHZpZXdwb3J0V2lkdGg6Syx2aWV3cG9ydEhlaWdodDpRLGFzcGVjdFJhdGlvOlgsb25TdGFydDpafSl7bGV0IFk9bjIoKSxbcSxHXT1EKCExKSxbQixWXT1EKCExKSxbQyxMXT1EKCExKSxGPVMobnVsbCksTj1TKFtdKSxfPVMobnVsbCksej1TKG51bGwpLFU9UyhudWxsKSxBPVMobnVsbCksTT1QKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuICQ7bGV0IGs9TmFOO3RyeXtsZXQgdj13aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oZDUpO2s9diE9bnVsbD9OdW1iZXIodik6TmFOfWNhdGNoe31yZXR1cm4gWTkoJCxLLFEsWCxrKX0sW1gsJCxRLEtdKSxFPU8xKCgpPT5NKCksW01dKSxbVCxiXT1EKEUpLHg9UyhFKSxtPVMoJCksUj1jNSgkLEssUSxYKSxvPU1hdGgubWluKHU4LFIpLGk9VD8/JCxYMT1rMChpLCQsSyxRLFgpLCQxPVAoKGspPT57bGV0IHY9ZTIoayk7eC5jdXJyZW50PXYsYih2KX0sW10pLHM9UCgoayk9PntpZih0eXBlb2Ygd2luZG93PiJ1Inx8JDw9MClyZXR1cm47bGV0IHY9azAoaywkLEssUSxYKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGQ1LFN0cmluZyh2LyQpKX1jYXRjaHt9fSxbWCwkLFEsS10pLEwxPVAoKGspPT57aWYoVS5jdXJyZW50IT1udWxsKWNsZWFyVGltZW91dChVLmN1cnJlbnQpO1UuY3VycmVudD1zZXRUaW1lb3V0KCgpPT57VS5jdXJyZW50PW51bGwscyhrKX0sWjkpfSxbc10pO0koKCk9PntpZihxfHxCKXJldHVybjtsZXQgaz14LmN1cnJlbnQ7aWYoaz09bnVsbClyZXR1cm47bGV0IHY9azAoaywkLEssUSxYKTtpZih2IT09aykkMSh2KX0sW1gsJCxCLHEsUSxLLCQxXSksSSgoKT0+e2lmKG0uY3VycmVudD09PSQpcmV0dXJuO20uY3VycmVudD0kLCQxKE0oKSl9LFskLE0sJDFdKSxJKCgpPT57aWYoIXEmJiFCKXJldHVybjtsZXQgaz1kb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcix2PWRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCxwPWRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdDtyZXR1cm4gZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I9Im53c2UtcmVzaXplIixkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q9Im5vbmUiLGRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD0ibm9uZSIsKCk9Pntkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj1rLGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdD12LGRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD1wfX0sW3EsQl0pLEkoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm47bGV0IGs9KCk9PntsZXQgcD14LmN1cnJlbnQ7aWYocD09bnVsbClyZXR1cm47aWYoVS5jdXJyZW50IT1udWxsKWNsZWFyVGltZW91dChVLmN1cnJlbnQpLFUuY3VycmVudD1udWxsO3MocCl9LHY9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIilrKCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLGspLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHYpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixrKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix2KX19LFtzXSk7bGV0IGQ9UCgoayk9PntpZihrPlIpcmV0dXJuIFIrbzUoay1SLFIpO2lmKGs8bylyZXR1cm4gby1vNShvLWssUik7cmV0dXJuIGt9LFtSLG9dKSxhPVAoKCk9PntpZih6LmN1cnJlbnQpei5jdXJyZW50KCksei5jdXJyZW50PW51bGw7VighMSl9LFtdKSxLMT1QKChrKT0+e2xldCB2PXBlcmZvcm1hbmNlLm5vdygpLHA9Ti5jdXJyZW50O3AucHVzaCh7dDp2LHg6a30pO3doaWxlKHAubGVuZ3RoPjEmJnYtcFswXS50Plg5KXAuc2hpZnQoKX0sW10pLFkxPVAoKGspPT57bGV0IHY9ZChrKTtpZihfLmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoXy5jdXJyZW50KTtfLmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57Xy5jdXJyZW50PW51bGwsJDEodiksSzEodil9KX0sW2QsSzEsJDFdKSxWMT1QKChrLHYscCk9PnthKCk7bGV0IHExPXguY3VycmVudD8/JDtGLmN1cnJlbnQ9e3BvaW50ZXJJZDprLHN0YXJ0WDp2LHN0YXJ0WTpwLHN0YXJ0V2lkdGg6cTF9LE4uY3VycmVudD1be3Q6cGVyZm9ybWFuY2Uubm93KCkseDpxMX1dLFooKSxHKCEwKX0sW2EsJCxaXSksYz1QKCgpPT57bGV0IGs9Ri5jdXJyZW50O2lmKEYuY3VycmVudD1udWxsLF8uY3VycmVudCE9bnVsbCljYW5jZWxBbmltYXRpb25GcmFtZShfLmN1cnJlbnQpLF8uY3VycmVudD1udWxsO2lmKGsmJmsucG9pbnRlcklkPj0wKXtsZXQgeDE9QS5jdXJyZW50O2lmKHgxPy5oYXNQb2ludGVyQ2FwdHVyZShrLnBvaW50ZXJJZCkpeDEucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGsucG9pbnRlcklkKX1HKCExKTtsZXQgdj14LmN1cnJlbnQ/PyQscD1WOShOLmN1cnJlbnQpO04uY3VycmVudD1bXTtsZXQgcTE9azAoditwKko5LCQsSyxRLFgpLE4xPWUyKHE5KHExLFskXSwkOSkpLF8xPU1hdGguYWJzKHYtTjEpPDAuNSYmTWF0aC5hYnMocCk8ODtpZihZfHxfMSl7JDEoTjEpLEwxKE4xKTtyZXR1cm59VighMCksei5jdXJyZW50PUc5KHtmcm9tOnYsdG86TjEsdmVsb2NpdHk6cCxzdGlmZm5lc3M6SzksZGFtcGluZzpROSxvblVwZGF0ZTokMSxvbkNvbXBsZXRlOigpPT57ei5jdXJyZW50PW51bGwsVighMSksTDEoTjEpfX0pfSxbWCwkLFksTDEsUSxLLCQxXSk7SSgoKT0+e3JldHVybigpPT57aWYoYSgpLF8uY3VycmVudCE9bnVsbCljYW5jZWxBbmltYXRpb25GcmFtZShfLmN1cnJlbnQpO2lmKFUuY3VycmVudCE9bnVsbCl7aWYoY2xlYXJUaW1lb3V0KFUuY3VycmVudCkseC5jdXJyZW50IT1udWxsKXMoeC5jdXJyZW50KX19fSxbYSxzXSksSSgoKT0+e2lmKCFxKXJldHVybjtsZXQgaz0oKT0+YygpLHY9KCk9PntpZihkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU9PT0iaGlkZGVuIiljKCl9LHA9KHExKT0+e2xldCBOMT1GLmN1cnJlbnQ7aWYoIU4xfHxOMS5wb2ludGVySWQhPT1xMS5wb2ludGVySWQpcmV0dXJuO3ExLnByZXZlbnREZWZhdWx0KCksWTEodDkoTjEscTEuY2xpZW50WCxxMS5jbGllbnRZLFgpKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIixrKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHAse2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLGssITApLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixrLCEwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix2KSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixrKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHAsITApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLGssITApLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixrLCEwKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix2KX19LFtYLGMscSxZMV0pO2xldCBRMT1QKChrKT0+e2xldCB2PUYuY3VycmVudDtpZighdnx8di5wb2ludGVySWQhPT1rLnBvaW50ZXJJZClyZXR1cm47ay5wcmV2ZW50RGVmYXVsdCgpLGsuc3RvcFByb3BhZ2F0aW9uKCksYygpfSxbY10pLFUxPVAoKGspPT57aWYoay5idXR0b24hPT0wKXJldHVybjtrLnByZXZlbnREZWZhdWx0KCksay5zdG9wUHJvcGFnYXRpb24oKSxrLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoay5wb2ludGVySWQpLFYxKGsucG9pbnRlcklkLGsuY2xpZW50WCxrLmNsaWVudFkpfSxbVjFdKSx1PVAoKGspPT57bGV0IHY9Ri5jdXJyZW50O2lmKCF2fHx2LnBvaW50ZXJJZCE9PWsucG9pbnRlcklkKXJldHVybjtrLnByZXZlbnREZWZhdWx0KCksWTEodDkodixrLmNsaWVudFgsay5jbGllbnRZLFgpKX0sW1gsWTFdKSxqPVAoKGspPT57bGV0IHY9ay5rZXk9PT0iQXJyb3dSaWdodCJ8fGsua2V5PT09IkFycm93RG93biI/MTprLmtleT09PSJBcnJvd0xlZnQifHxrLmtleT09PSJBcnJvd1VwIj8tMTowO2lmKHY9PT0wKXJldHVybjtrLnByZXZlbnREZWZhdWx0KCksYSgpO2xldCBwPWsuc2hpZnRLZXk/ODA6MjQscTE9ZTIoazAoWDErdipwLCQsSyxRLFgpKTskMShxMSksTDEocTEpfSxbWCxhLFgxLCQsTDEsUSxLLCQxXSk7cmV0dXJue2hhbmRsZVJlZjpBLHdpZHRoOmksY29tbWl0dGVkV2lkdGg6WDEsbWluV2lkdGg6byxtYXhXaWR0aDpSLGlzUmVzaXppbmc6cSxpc0luZXJ0aWE6QixoYW5kbGVIb3ZlcmVkOkMsaGFuZGxlQWN0aXZlOkN8fHF8fEIsc2V0SGFuZGxlSG92ZXJlZDpMLG9uUG9pbnRlckRvd246VTEsb25Qb2ludGVyTW92ZTp1LG9uUG9pbnRlckVuZDpRMSxvbktleURvd246an19ZnVuY3Rpb24gdDkoJCxLLFEsWCl7bGV0IFo9Sy0kLnN0YXJ0WCxZPShRLSQuc3RhcnRZKSpYO3JldHVybiAkLnN0YXJ0V2lkdGgrKE1hdGguYWJzKFopPj1NYXRoLmFicyhZKT9aOlkpfWZ1bmN0aW9uICQ2KCl7bGV0WyQsS109RChbXSksUT1QKChZLHEpPT57bGV0IEc9Y3J5cHRvLnJhbmRvbVVVSUQoKTtyZXR1cm4gSygoQik9PlsuLi5CLHtpZDpHLG5hbWU6WSxraW5kOnEsc3RhdHVzOiJ1cGxvYWRpbmciLHByb2dyZXNzOjB9XSksR30sW10pLFg9UCgoWSxxKT0+e2lmKEsoKEcpPT5HLm1hcCgoQik9PkIuaWQ9PT1ZP3suLi5CLC4uLnF9OkIpKSxxLnN0YXR1cz09PSJzdWNjZXNzInx8cS5zdGF0dXM9PT0iZXJyb3IiKXNldFRpbWVvdXQoKCk9PntLKChHKT0+Ry5maWx0ZXIoKEIpPT5CLmlkIT09WSkpfSwzMDAwKX0sW10pLFo9UCgoWSxxKT0+e0soKEcpPT5HLm1hcCgoQik9PkIuaWQ9PT1ZP3suLi5CLHByb2dyZXNzOnF9OkIpKX0sW10pO3JldHVybnt0b2FzdHM6JCxhZGQ6USx1cGRhdGU6WCxzZXRQcm9ncmVzczpafX1mdW5jdGlvbiBLNigkLEspe2xldFtRLFhdPUQoW10pLFtaLFldPUQobnVsbCksW3EsR109RCghMSksQj1QKGFzeW5jKCk9PntpZighJClyZXR1cm47RyghMCksWShudWxsKTt0cnl7bGV0IFY9YXdhaXQgZmV0Y2goJCx7Y2FjaGU6Im5vLXN0b3JlIn0pLEM9YXdhaXQgVi5qc29uKCk7aWYoIVYub2t8fEMuZXJyb3IpdGhyb3cgRXJyb3IoQy5lcnJvcnx8IkZhaWxlZCB0byBsaXN0IFdlYktpdCB0YXJnZXRzIik7WChDLnRhcmdldHM/P1tdKX1jYXRjaChWKXtZKFYgaW5zdGFuY2VvZiBFcnJvcj9WLm1lc3NhZ2U6IkZhaWxlZCB0byBzdGFydCBXZWJLaXQgRGV2VG9vbHMiKX1maW5hbGx5e0coITEpfX0sWyRdKTtyZXR1cm4gSSgoKT0+e2lmKCFLKXJldHVybjtCKCk7bGV0IFY9c2V0SW50ZXJ2YWwoKCk9PnZvaWQgQigpLDI1MDApO3JldHVybigpPT5jbGVhckludGVydmFsKFYpfSxbSyxCXSkse3RhcmdldHM6USxlcnJvcjpaLGxvYWRpbmc6cSxyZWZyZXNoOkJ9fWZ1bmN0aW9uIFE2KCQsSyxRKXtsZXRbWCxaXT1EKG51bGwpLFtZLHFdPUQoMCk7SSgoKT0+e2lmKCFLfHwhJClyZXR1cm47bGV0IEI9ITEsVj1hc3luYygpPT57dHJ5e2xldCBGPWF3YWl0KGF3YWl0IGZldGNoKCQse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpO2lmKCFCKVooRi5kZXZpY2VzPz9bXSl9Y2F0Y2h7aWYoIUIpWihbXSl9fTtWKCk7bGV0IEM9c2V0SW50ZXJ2YWwoVixRPzc1MDozMDAwKTtyZXR1cm4oKT0+e0I9ITAsY2xlYXJJbnRlcnZhbChDKX19LFskLEssWSxRXSk7bGV0IEc9UCgoKT0+cSgoQik9PkIrMSksW10pO3JldHVybntkZXZpY2VzOlgscmVmcmVzaDpHfX12YXIgWDM9e3N0cmVhbWVkOiExLGZlbGxCYWNrOiExfTtmdW5jdGlvbiBKNigkLEspe3N3aXRjaChLKXtjYXNlImZyYW1lIjpyZXR1cm4gJC5zdHJlYW1lZD8kOnsuLi4kLHN0cmVhbWVkOiEwfTtjYXNlInRpbWVvdXQiOnJldHVybiAkLnN0cmVhbWVkfHwkLmZlbGxCYWNrPyQ6ey4uLiQsZmVsbEJhY2s6ITB9O2Nhc2UicmVzZXQiOnJldHVybiBYM319dmFyIFg2PTQwMDA7dmFyIFkkPXtLZXlBOjQsS2V5Qjo1LEtleUM6NixLZXlEOjcsS2V5RTo4LEtleUY6OSxLZXlHOjEwLEtleUg6MTEsS2V5SToxMixLZXlKOjEzLEtleUs6MTQsS2V5TDoxNSxLZXlNOjE2LEtleU46MTcsS2V5TzoxOCxLZXlQOjE5LEtleVE6MjAsS2V5UjoyMSxLZXlTOjIyLEtleVQ6MjMsS2V5VToyNCxLZXlWOjI1LEtleVc6MjYsS2V5WDoyNyxLZXlZOjI4LEtleVo6MjksRGlnaXQxOjMwLERpZ2l0MjozMSxEaWdpdDM6MzIsRGlnaXQ0OjMzLERpZ2l0NTozNCxEaWdpdDY6MzUsRGlnaXQ3OjM2LERpZ2l0ODozNyxEaWdpdDk6MzgsRGlnaXQwOjM5LEVudGVyOjQwLEVzY2FwZTo0MSxCYWNrc3BhY2U6NDIsVGFiOjQzLFNwYWNlOjQ0LE1pbnVzOjQ1LEVxdWFsOjQ2LEJyYWNrZXRMZWZ0OjQ3LEJyYWNrZXRSaWdodDo0OCxCYWNrc2xhc2g6NDksU2VtaWNvbG9uOjUxLFF1b3RlOjUyLEJhY2txdW90ZTo1MyxDb21tYTo1NCxQZXJpb2Q6NTUsU2xhc2g6NTYsQ2Fwc0xvY2s6NTcsRjE6NTgsRjI6NTksRjM6NjAsRjQ6NjEsRjU6NjIsRjY6NjMsRjc6NjQsRjg6NjUsRjk6NjYsRjEwOjY3LEYxMTo2OCxGMTI6NjksUHJpbnRTY3JlZW46NzAsU2Nyb2xsTG9jazo3MSxQYXVzZTo3MixJbnNlcnQ6NzMsSG9tZTo3NCxQYWdlVXA6NzUsRGVsZXRlOjc2LEVuZDo3NyxQYWdlRG93bjo3OCxBcnJvd1JpZ2h0Ojc5LEFycm93TGVmdDo4MCxBcnJvd0Rvd246ODEsQXJyb3dVcDo4MixOdW1Mb2NrOjgzLE51bXBhZERpdmlkZTo4NCxOdW1wYWRNdWx0aXBseTo4NSxOdW1wYWRTdWJ0cmFjdDo4NixOdW1wYWRBZGQ6ODcsTnVtcGFkRW50ZXI6ODgsTnVtcGFkMTo4OSxOdW1wYWQyOjkwLE51bXBhZDM6OTEsTnVtcGFkNDo5MixOdW1wYWQ1OjkzLE51bXBhZDY6OTQsTnVtcGFkNzo5NSxOdW1wYWQ4Ojk2LE51bXBhZDk6OTcsTnVtcGFkMDo5OCxOdW1wYWREZWNpbWFsOjk5LENvbnRyb2xMZWZ0OjIyNCxTaGlmdExlZnQ6MjI1LEFsdExlZnQ6MjI2LE1ldGFMZWZ0OjIyNyxDb250cm9sUmlnaHQ6MjI4LFNoaWZ0UmlnaHQ6MjI5LEFsdFJpZ2h0OjIzMCxNZXRhUmlnaHQ6MjMxfTtmdW5jdGlvbiBaNigkKXtyZXR1cm4gWSRbJF0/P251bGx9dmFyIFozPTMyMCxZNj03NjAsWTM9MzAwO2Z1bmN0aW9uIHE2KCQsSyl7bGV0IFE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KEspKSxYPW5ldyBVaW50OEFycmF5KDErUS5sZW5ndGgpO3JldHVybiBYWzBdPSQsWC5zZXQoUSwxKSxYfWZ1bmN0aW9uIHEkKCQsSyxRPTMyKXtsZXQgWD1bLi4uJCxLXTtyZXR1cm4gWC5sZW5ndGg+UT9YLnNsaWNlKFgubGVuZ3RoLVEpOlh9ZnVuY3Rpb24gcTMoJCxLLFE9RGF0ZS5ub3coKSxYPTE1MDApe2xldCBaPUsuZmlsdGVyKChZKT0+US1ZLmNyZWF0ZWRBdDw9WCk7aWYoISR8fCQucmVhZHlTdGF0ZSE9PTEpcmV0dXJuIFo7Zm9yKGxldCBZIG9mIFopJC5zZW5kKHE2KFkudGFnLFkucGF5bG9hZCkuYnVmZmVyKTtyZXR1cm5bXX1mdW5jdGlvbiBHNigkLEssUSxYLFo9RGF0ZS5ub3coKSl7bGV0IFk9cTMoJCxLLFopO2lmKCQ/LnJlYWR5U3RhdGU9PT0xKXJldHVybiAkLnNlbmQocTYoUSxYKS5idWZmZXIpLFk7cmV0dXJuIHEkKFkse3RhZzpRLHBheWxvYWQ6WCxjcmVhdGVkQXQ6Wn0pfXZhciBHJD17cG9ydHJhaXQ6ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXRfdXBzaWRlX2Rvd24iLHBvcnRyYWl0X3Vwc2lkZV9kb3duOiJsYW5kc2NhcGVfcmlnaHQiLGxhbmRzY2FwZV9yaWdodDoicG9ydHJhaXQifSxWJD17cG9ydHJhaXQ6ImxhbmRzY2FwZV9yaWdodCIsbGFuZHNjYXBlX3JpZ2h0OiJwb3J0cmFpdF91cHNpZGVfZG93biIscG9ydHJhaXRfdXBzaWRlX2Rvd246ImxhbmRzY2FwZV9sZWZ0IixsYW5kc2NhcGVfbGVmdDoicG9ydHJhaXQifTtmdW5jdGlvbiBWNigkKXtyZXR1cm4gJD9gJHskLmRldmljZX06JHskLnBpZH06JHskLnN0cmVhbVVybH06JHskLndzVXJsfWA6IiJ9ZnVuY3Rpb24gQiQoe29wZW46JCxvbkNsaWNrOkt9KXtyZXR1cm4gSigiZGl2Iix7Y2xhc3NOYW1lOmBmaXhlZCB0b3AtMyBsZWZ0LTMgZmxleCBmbGV4LWNvbCBnYXAtMSBwLTEgW3RyYW5zaXRpb246b3BhY2l0eV8wLjE4c19lYXNlXSB6LTQwICR7JD8ib3BhY2l0eS0wIHBvaW50ZXItZXZlbnRzLW5vbmUiOiJvcGFjaXR5LTEwMCBwb2ludGVyLWV2ZW50cy1hdXRvIn1gLGNoaWxkcmVuOkooImJ1dHRvbiIse29uQ2xpY2s6SyxjbGFzc05hbWU6InctWzMwcHhdIGgtWzMwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXRyYW5zcGFyZW50IGJvcmRlci1ub25lIHJvdW5kZWQtbWQgdGV4dC1bIzhlOGU5M10gY3Vyc29yLXBvaW50ZXIgW3RyYW5zaXRpb246YmFja2dyb3VuZF8wLjE1c19lYXNlLGNvbG9yXzAuMTVzX2Vhc2VdIGhvdmVyOmJnLXdoaXRlLzggaG92ZXI6dGV4dC13aGl0ZSIsImFyaWEtbGFiZWwiOiJPcGVuIGRldmljZXMgc2lkZWJhciIsImFyaWEtcHJlc3NlZCI6JCx0aXRsZToiRGV2aWNlcyIsY2hpbGRyZW46SihzMSx7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KX0pfWZ1bmN0aW9uIE4kKCl7bGV0WyQsS109RCgoKT0+dTIod2luZG93Ll9fU0lNX1BSRVZJRVdfXykpLFtRLFhdPUQoITEpLFtaLFldPUQoKCk9PntsZXQgaj11Mih3aW5kb3cuX19TSU1fUFJFVklFV19fKTtpZihqKXJldHVybiBqLmRldmljZTtyZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoImRldmljZSIpfSksW3EsR109RCghMSksW0IsVl09RCghMSksW0MsTF09RCgoKT0+e2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aD49WTMrNTIwfSkse3dpZHRoOkYsb25Qb2ludGVyRG93bjpOfT1KNSgic2VydmUtc2ltOmRldmljZS1zaWRlYmFyLXdpZHRoIixZMywyNDAsNjQwLCJyaWdodCIpLFtfLHpdPUQobnVsbCksVT13aW5kb3cuX19TSU1fUFJFVklFV19fLEE9VT8uZ3JpZEFwaUVuZHBvaW50Pz9nMSgiZ3JpZC9hcGkiKSxNPVU/LmdyaWRTdGFydEVuZHBvaW50Pz9nMSgiZ3JpZC9hcGkvc3RhcnQiKSxFPVU/LmdyaWRTaHV0ZG93bkVuZHBvaW50Pz9nMSgiZ3JpZC9hcGkvc2h1dGRvd24iKSxbVCxiXT1EKHt9KSxbeCxtXT1EKHt9KSxbUixvXT1EKHt9KSxbaSxYMV09RCgoKT0+bmV3IFNldCksJDE9T2JqZWN0LnZhbHVlcyhUKS5zb21lKEJvb2xlYW4pfHxPYmplY3QudmFsdWVzKHgpLnNvbWUoQm9vbGVhbikse2RldmljZXM6cyxyZWZyZXNoOkwxfT1RNihBLCEwLCQxKSxkPSEhKFomJnM/LmZpbmQoKGopPT5qLmRldmljZT09PVopPy5oZWxwZXIpLGE9UCgoaik9PntZKGopO3RyeXtsZXQgaz1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtrLnNlYXJjaFBhcmFtcy5zZXQoImRldmljZSIsaiksd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIiIsay50b1N0cmluZygpKX1jYXRjaHt9fSxbXSksSzE9UChhc3luYyhqLGs9MjAwMDApPT57bGV0IHY9RGF0ZS5ub3coKStrO3doaWxlKERhdGUubm93KCk8dil7dHJ5e2lmKCgoYXdhaXQoYXdhaXQgZmV0Y2goQSx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCkpLmRldmljZXM/P1tdKS5zb21lKChOMSk9Pk4xLmRldmljZT09PWomJk4xLmhlbHBlcikpcmV0dXJuITB9Y2F0Y2h7fWF3YWl0IG5ldyBQcm9taXNlKChwKT0+c2V0VGltZW91dChwLDQwMCkpfXJldHVybiExfSxbQV0pLFkxPVAoYXN5bmMoaik9PntiKChrKT0+KHsuLi5rLFtqXTohMH0pKSxvKChrKT0+KHsuLi5rLFtqXTpudWxsfSkpO3RyeXtsZXQgaz1hd2FpdCBmZXRjaChNLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpqfSl9KSx2PWF3YWl0IGsuanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZighay5va3x8IXYub2spe28oKHApPT4oey4uLnAsW2pdOnYuZXJyb3I/P2BIVFRQICR7ay5zdGF0dXN9YH0pKTtyZXR1cm59WDEoKHApPT5wLmhhcyhqKT9wOm5ldyBTZXQocCkuYWRkKGopKSxhd2FpdCBLMShqKX1jYXRjaChrKXtvKCh2KT0+KHsuLi52LFtqXTprPy5tZXNzYWdlPz8iUmVxdWVzdCBmYWlsZWQifSkpfWZpbmFsbHl7Yigoayk9Pih7Li4uayxbal06ITF9KSksTDEoKX19LFtNLEsxLEwxXSksVjE9UChhc3luYyhqKT0+e20oKGspPT4oey4uLmssW2pdOiEwfSkpLG8oKGspPT4oey4uLmssW2pdOm51bGx9KSk7dHJ5e2xldCBrPWF3YWl0IGZldGNoKEUse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHt1ZGlkOmp9KX0pLHY9YXdhaXQgay5qc29uKCkuY2F0Y2goKCk9Pih7fSkpO2lmKCFrLm9rfHwhdi5vaylvKChwKT0+KHsuLi5wLFtqXTp2LmVycm9yPz9gSFRUUCAke2suc3RhdHVzfWB9KSl9Y2F0Y2goayl7bygodik9Pih7Li4udixbal06az8ubWVzc2FnZT8/IlJlcXVlc3QgZmFpbGVkIn0pKX1maW5hbGx5e20oKGspPT4oey4uLmssW2pdOiExfSkpLEwxKCl9fSxbRSxMMV0pO0koKCk9PntpZihaKXJldHVybjtpZigkPy5kZXZpY2Upe1koJC5kZXZpY2UpO3JldHVybn1pZighc3x8cy5sZW5ndGg9PT0wKXJldHVybjtsZXQgaj1zLmZpbmQoKGspPT5rLmhlbHBlcik/P3MuZmluZCgoayk9Pmsuc3RhdGU9PT0iQm9vdGVkIik/P3NbMF07aWYoailZKGouZGV2aWNlKX0sW1osJD8uZGV2aWNlLHNdKSxJKCgpPT57bGV0IGo9YCR7ZzEoImFwaS9ldmVudHMiKX0ke1o/YD9kZXZpY2U9JHtlbmNvZGVVUklDb21wb25lbnQoWil9YDoiIn1gLGs9KHApPT57SygocTEpPT57aWYoVjYocTEpPT09VjYocCkpcmV0dXJuIHExO2lmKHApd2luZG93Ll9fU0lNX1BSRVZJRVdfXz1wO2Vsc2UgaWYod2luZG93Ll9fU0lNX1BSRVZJRVdfXyl7bGV0e2Jhc2VQYXRoOk4xLGV4ZWNUb2tlbjpfMX09d2luZG93Ll9fU0lNX1BSRVZJRVdfXzt3aW5kb3cuX19TSU1fUFJFVklFV19fPXtiYXNlUGF0aDpOMSxleGVjVG9rZW46XzF9fXJldHVybiBwfSl9LHY9TDIoaik7cmV0dXJuIHYub25tZXNzYWdlPShwKT0+e3RyeXtrKHUyKEpTT04ucGFyc2UocC5kYXRhKSkpfWNhdGNoe319LCgpPT52LmNsb3NlKCl9LFtaLGRdKTtsZXQgYz1aPz8kPy5kZXZpY2U/P251bGwsUTE9cz8uZmluZCgoaik9PmouZGV2aWNlPT09Yyk/P251bGwsVTE9ISEkJiYkLmRldmljZT09PWMsdTtpZihVMSYmJCl1PUooTCQse2NvbmZpZzokLGRldmljZU5hbWU6UTE/Lm5hbWU/P251bGwsZGV2aWNlUnVudGltZTpRMT8ucnVudGltZT8/bnVsbCxwcmVmZXJNanBlZzppLmhhcygkLmRldmljZSksYXhPdmVybGF5RW5hYmxlZDpxLHNldEF4T3ZlcmxheUVuYWJsZWQ6RyxkZXZ0b29sc09wZW46QixzZXREZXZ0b29sc09wZW46VixncmlkT3BlbjpDLHNldEdyaWRPcGVuOkwsZ3JpZFBhbmVsV2lkdGg6RixzZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6XyxzZXRTZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6eixzdHJlYW1pbmc6USxzZXRTdHJlYW1pbmc6WH0pO2Vsc2V7bGV0IGo9Qz9GKzM2OjI0O3U9SigiZGl2Iix7Y2xhc3NOYW1lOiJoLXNjcmVlbiBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMyBiZy1wYWdlIGZvbnQtc3lzdGVtIGJveC1ib3JkZXIgW3RyYW5zaXRpb246cGFkZGluZ18wLjI1c19lYXNlXSIsc3R5bGU6e3BhZGRpbmdMZWZ0OmoscGFkZGluZ1JpZ2h0OjI0fSxjaGlsZHJlbjpRMT9KKHg4LHtuYW1lOlExLm5hbWUscnVudGltZTpRMS5ydW50aW1lLGNocm9tZTpRMS5jaHJvbWU/P251bGwscGxhY2Vob2xkZXJBc3NldDpRMS5wbGFjZWhvbGRlckFzc2V0Pz9udWxsLGJ1c3k6ISFRMS5oZWxwZXJ8fCEhVFtRMS5kZXZpY2VdLGJ1c3lMYWJlbDpRMS5oZWxwZXI/IkNvbm5lY3RpbmfigKYiOiJTdGFydGluZ+KApiIsZXJyb3I6UltRMS5kZXZpY2VdPz9udWxsLG9uU3RhcnQ6KCk9PlkxKFExLmRldmljZSl9KTpKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0zIHRleHQtY2VudGVyIixjaGlsZHJlbjpbSigiaDEiLHtjbGFzc05hbWU6InRleHQtWzE4cHhdIG0tMCB0ZXh0LXdoaXRlLzkwIixjaGlsZHJlbjoiTm8gc2ltdWxhdG9ycyBhdmFpbGFibGUifSksSigicCIse2NsYXNzTmFtZToidGV4dC13aGl0ZS81NSB0ZXh0LVsxNHB4XSBtYXgtdy0xMjAiLGNoaWxkcmVuOlsiQ3JlYXRlIGEgc2ltdWxhdG9yIGluIFhjb2RlLCBvciBzdGFydCBvbmUgd2l0aCIsIiAiLEooImNvZGUiLHtjbGFzc05hbWU6ImJnLVsjMjIyXSBweC0xLjUgcHktMC41IHJvdW5kZWQgdGV4dC1bMTNweF0iLGNoaWxkcmVuOiJidW54IHNlcnZlLXNpbS1zamNobWllbGEgLS1kZXRhY2gifSksIi4iXX0pXX0pfSl9cmV0dXJuIEooZSx7Y2hpbGRyZW46W3UsSihmOCx7b3BlbjpDLG9uQ2xvc2U6KCk9PkwoITEpLHdpZHRoOkYsc2lkZToibGVmdCIsZGV2aWNlczpzLHNlbGVjdGVkVWRpZDpjLG9uU2VsZWN0OmEsc3RhcnRpbmc6VCxzaHV0dGluZ0Rvd246eCxvblNodXRkb3duOlYxfSksSihpMix7cGFuZWxXaWR0aDpGLHZpc2libGU6QyxvblBvaW50ZXJEb3duOk4sYXJpYUxhYmVsOiJSZXNpemUgc2ltdWxhdG9ycyBzaWRlYmFyIixzaWRlOiJsZWZ0In0pLEooQiQse29wZW46QyxvbkNsaWNrOigpPT5MKCEwKX0pXX0pfWZ1bmN0aW9uIEwkKHtjb25maWc6JCxkZXZpY2VOYW1lOkssZGV2aWNlUnVudGltZTpRLHByZWZlck1qcGVnOlgsYXhPdmVybGF5RW5hYmxlZDpaLHNldEF4T3ZlcmxheUVuYWJsZWQ6WSxkZXZ0b29sc09wZW46cSxzZXREZXZ0b29sc09wZW46RyxncmlkT3BlbjpCLHNldEdyaWRPcGVuOlYsZ3JpZFBhbmVsV2lkdGg6QyxzZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6TCxzZXRTZWxlY3RlZERldnRvb2xzVGFyZ2V0SWQ6RixzdHJlYW1pbmc6TixzZXRTdHJlYW1pbmc6X30pe0koKCk9Pntkb2N1bWVudC50aXRsZT1LP2BTaW11bGF0b3IgLSAke0t9YDoiU2ltdWxhdG9yIFByZXZpZXcifSxbS10pO2xldCB6PW4xKEspLFU9SzYoJC5kZXZ0b29sc0VuZHBvaW50Pz9nMSgiZGV2dG9vbHMiKSxxKTtJKCgpPT57aWYoIXEpcmV0dXJuO2lmKEwmJlUudGFyZ2V0cy5zb21lKCh3KT0+dy5pZD09PUwpKXJldHVybjtGKFUudGFyZ2V0cy5sZW5ndGg9PT0xP1UudGFyZ2V0c1swXS5pZDpudWxsKX0sW3EsVS50YXJnZXRzLEwsRl0pLEkoKCk9PntGKG51bGwpfSxbJC5kZXZpY2UsRl0pO2xldCBBPXI5KCksW00sRV09YzAoSjYsWDMpLFtUXT1EKCgpPT5uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgiY29kZWMiKT09PSJtanBlZyIpLGI9QS5zdXBwb3J0ZWQmJiFNLmZlbGxCYWNrJiYhWCYmIVQseD1hOShiP251bGw6JC5zdHJlYW1VcmwpO0koKCk9PntfKCExKSxFKCJyZXNldCIpfSxbJC5zdHJlYW1VcmwsX10pLEkoKCk9PntpZihiJiZOKUUoImZyYW1lIil9LFtiLE5dKSxJKCgpPT57aWYoIWIpcmV0dXJuO2xldCB3PXNldFRpbWVvdXQoKCk9PkUoInRpbWVvdXQiKSxYNik7cmV0dXJuKCk9PmNsZWFyVGltZW91dCh3KX0sW2IsJC5zdHJlYW1VcmxdKTtsZXRbbSxSXT1EKG51bGwpLFtvLGldPUQobnVsbCksWDE9bywkMT1tPz9YMT8/UzAoeixLKSxzPVMyKHosJDEpLEwxPVIwKHosJDEpLGQ9YjIoJDEpLGE9YjAoJDEpLEsxPWE/YS53aWR0aC9hLmhlaWdodDoxLFkxPVMobnVsbCksVjE9UyhbXSk7SSgoKT0+e2xldCB3PSExLEg9bnVsbCxnPW51bGw7VjEuY3VycmVudD1bXTtsZXQgaD0oKT0+e2lmKHd8fEgpcmV0dXJuO0g9c2V0VGltZW91dCgoKT0+e0g9bnVsbCxuKCl9LDEwMDApfSxuPSgpPT57bGV0IEoxPW5ldyBXZWJTb2NrZXQoJC53c1VybCk7SjEuYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLGc9SjEsWTEuY3VycmVudD1KMSxKMS5vbm9wZW49KCk9PntWMS5jdXJyZW50PXEzKEoxLFYxLmN1cnJlbnQpfSxKMS5vbm1lc3NhZ2U9KEIxKT0+e2lmKCEoQjEuZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm47bGV0IHcxPW5ldyBVaW50OEFycmF5KEIxLmRhdGEpO2lmKHcxLmxlbmd0aDwxfHx3MVswXSE9PTEzMClyZXR1cm47dHJ5e2xldCBXPUpTT04ucGFyc2UobmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKHcxLnN1YmFycmF5KDEpKSk7aWYoVy53aWR0aDw9MHx8Vy5oZWlnaHQ8PTApcmV0dXJuO2koKE8pPT5PJiZPLndpZHRoPT09Vy53aWR0aCYmTy5oZWlnaHQ9PT1XLmhlaWdodCYmTy5vcmllbnRhdGlvbj09PVcub3JpZW50YXRpb24/TzpXKX1jYXRjaHt9fSxKMS5vbmNsb3NlPSgpPT57aWYoWTEuY3VycmVudD09PUoxKVkxLmN1cnJlbnQ9bnVsbDtoKCl9LEoxLm9uZXJyb3I9KCk9PntKMS5jbG9zZSgpfX07cmV0dXJuIG4oKSwoKT0+e2lmKHc9ITAsSCljbGVhclRpbWVvdXQoSCk7aWYoWTEuY3VycmVudD09PWcpWTEuY3VycmVudD1udWxsO2c/LmNsb3NlKCl9fSxbJC53c1VybF0pO2xldCBjPVAoKHcsSCk9PntWMS5jdXJyZW50PUc2KFkxLmN1cnJlbnQsVjEuY3VycmVudCx3LEgpfSxbXSksUTE9UCgodyk9PmMoMyx3KSxbY10pLFUxPVAoKHcpPT5jKDUsdyksW2NdKSx1PVAoKHcpPT5jKDQse2J1dHRvbjp3fSksW2NdKSxqPVAoKHcpPT5jKDEwLHtkZWx0YTp3fSksW2NdKSxrPVAoKHcpPT57UigoSCk9PkgmJkgud2lkdGg9PT13LndpZHRoJiZILmhlaWdodD09PXcuaGVpZ2h0JiZILm9yaWVudGF0aW9uPT09dy5vcmllbnRhdGlvbj9IOncpfSxbXSksdj1QKCh3KT0+e2MoNyx7b3JpZW50YXRpb246d30pfSxbY10pLHA9JDEub3JpZW50YXRpb24/PyJwb3J0cmFpdCIscTE9eiE9PSJ3YXRjaCImJnohPT0idmlzaW9uIixOMT1QKCh3KT0+e2lmKCFxMSlyZXR1cm47bGV0IEg9KHc9PT0ibGVmdCI/RyQ6ViQpW3BdO3YoSCl9LFtxMSxwLHZdKTtJKCgpPT57UihudWxsKSxpKG51bGwpfSxbJC5zdHJlYW1VcmxdKSxJKCgpPT57bGV0IHc9WDE7aWYoIXcpcmV0dXJuO1IoKEgpPT5IJiZILndpZHRoPT09dy53aWR0aCYmSC5oZWlnaHQ9PT13LmhlaWdodCYmSC5vcmllbnRhdGlvbj09PXcub3JpZW50YXRpb24/SDpudWxsKX0sW1gxLFgxPy53aWR0aCxYMT8uaGVpZ2h0LFgxPy5vcmllbnRhdGlvbl0pO2xldCBfMT1QKCh3LEgpPT57Yyg2LHt0eXBlOncsdXNhZ2U6SH0pfSxbY10pLFt4MSxUMV09RChudWxsKSxbaDEsdjFdPUQoKCk9PntpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4hMTtsZXQgdz1OdW1iZXIod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJzZXJ2ZS1zaW06dG9vbHMtcGFuZWwtd2lkdGgiKSksSD1OdW1iZXIuaXNGaW5pdGUodykmJnc+MD93OlozO3JldHVybiB3aW5kb3cuaW5uZXJXaWR0aD49SCs0ODB9KSx7d2lkdGg6YzEsb25Qb2ludGVyRG93bjpJMX09SjUoInNlcnZlLXNpbTp0b29scy1wYW5lbC13aWR0aCIsWjMsMjQwLDcyMCkse3dpZHRoOm8xLG9uUG9pbnRlckRvd246YTF9PUo1KCJzZXJ2ZS1zaW06ZGV2dG9vbHMtcGFuZWwtd2lkdGgiLFk2LDQyMCwxNDAwKSxbeTEsWTBdPUQoKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lcldpZHRoOjApLFtlMSxqMV09RCgoKT0+dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmlubmVySGVpZ2h0OjApO0koKCk9PntsZXQgdz0oKT0+e1kwKHdpbmRvdy5pbm5lcldpZHRoKSxqMSh3aW5kb3cuaW5uZXJIZWlnaHQpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdyksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHcpfSxbXSksSSgoKT0+e2xldCB3PUwyKCQuYXBwU3RhdGVFbmRwb2ludD8/ZzEoImFwcHN0YXRlIikpLEg9bnVsbDtyZXR1cm4gdy5vbm1lc3NhZ2U9KGcpPT57dHJ5e2xldCBoPUpTT04ucGFyc2UoZy5kYXRhKTtpZihIKWNsZWFyVGltZW91dChIKTtsZXQgbj1oPy5pc1JlYWN0TmF0aXZlPzA6NjAwO0g9c2V0VGltZW91dCgoKT0+VDEoaCksbil9Y2F0Y2h7fX0sKCk9PntpZihIKWNsZWFyVGltZW91dChIKTt3LmNsb3NlKCl9fSxbJC5hcHBTdGF0ZUVuZHBvaW50XSk7bGV0ICQwPVAoYXN5bmMoKT0+e18xKCJkb3duIiwyMjcpLGF3YWl0IG5ldyBQcm9taXNlKChnKT0+c2V0VGltZW91dChnLDMwKSksXzEoImRvd24iLDIxKSxhd2FpdCBuZXcgUHJvbWlzZSgoZyk9PnNldFRpbWVvdXQoZywzMCkpLF8xKCJ1cCIsMjEpLGF3YWl0IG5ldyBQcm9taXNlKChnKT0+c2V0VGltZW91dChnLDMwKSksXzEoInVwIiwyMjcpfSxbXzFdKSxLMD1TKG51bGwpLFtNMSxiMV09RCgwKSxbcTAsVTBdPUQoMCk7SSgoKT0+e2xldCB3PUswLmN1cnJlbnQ7aWYoIXd8fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCBIPW5ldyBSZXNpemVPYnNlcnZlcigoZyk9PntsZXQgaD1nWzBdPy5jb250ZW50UmVjdDtiMShoPy53aWR0aD8/MCksVTAoaD8uaGVpZ2h0Pz8wKX0pO3JldHVybiBILm9ic2VydmUodyksKCk9PkguZGlzY29ubmVjdCgpfSxbXSk7bGV0W3UxLEcwXT1EKCEwKSx6MD1TKCEwKTt6MC5jdXJyZW50PXUxO2xldCBWMD1TKG5ldyBTZXQpO0koKCk9PntsZXQgdz0oSCk9PntsZXQgZz0hIUswLmN1cnJlbnQ/LmNvbnRhaW5zKEgudGFyZ2V0KTtHMChnKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIix3LCEwKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHcsITApfSxbXSksSSgoKT0+e2lmKHUxKXJldHVybjtsZXQgdz1WMC5jdXJyZW50O2lmKHcuc2l6ZT09PTApcmV0dXJuO2ZvcihsZXQgSCBvZiB3KWMoNix7dHlwZToidXAiLHVzYWdlOkh9KTt3LmNsZWFyKCl9LFt1MSxjXSksSSgoKT0+e2xldCB3PShoLG4pPT57aWYoIXowLmN1cnJlbnQpcmV0dXJuO2lmKGguY29kZT09PSJLZXlIIiYmaC5tZXRhS2V5JiZoLnNoaWZ0S2V5KXtpZihoLnByZXZlbnREZWZhdWx0KCksbj09PSJkb3duIiYmIWgucmVwZWF0KWMoNCx7YnV0dG9uOiJob21lIn0pO3JldHVybn1pZigoaC5jb2RlPT09IkFycm93TGVmdCJ8fGguY29kZT09PSJBcnJvd1JpZ2h0IikmJmgubWV0YUtleSYmIWguc2hpZnRLZXkmJiFoLmFsdEtleSYmIWguY3RybEtleSl7aWYoaC5wcmV2ZW50RGVmYXVsdCgpLG49PT0iZG93biImJiFoLnJlcGVhdClOMShoLmNvZGU9PT0iQXJyb3dMZWZ0Ij8ibGVmdCI6InJpZ2h0Iik7cmV0dXJufWlmKGguY29kZT09PSJLZXlBIiYmaC5tZXRhS2V5JiZoLnNoaWZ0S2V5KXtpZihoLnByZXZlbnREZWZhdWx0KCksbj09PSJkb3duIiYmIWgucmVwZWF0KUMxKGB4Y3J1biBzaW1jdGwgdWkgJHskLmRldmljZX0gYXBwZWFyYW5jZWApLnRoZW4oKEIxKT0+e2xldCB3MT1CMS5zdGRvdXQudHJpbSgpPT09ImRhcmsiPyJsaWdodCI6ImRhcmsiO3JldHVybiBDMShgeGNydW4gc2ltY3RsIHVpICR7JC5kZXZpY2V9IGFwcGVhcmFuY2UgJHt3MX1gKX0pLmNhdGNoKCgpPT57fSk7cmV0dXJufWxldCBKMT1aNihoLmNvZGUpO2lmKEoxPT1udWxsKXJldHVybjtpZihoLnByZXZlbnREZWZhdWx0KCksbj09PSJkb3duIilWMC5jdXJyZW50LmFkZChKMSk7ZWxzZSBWMC5jdXJyZW50LmRlbGV0ZShKMSk7Yyg2LHt0eXBlOm4sdXNhZ2U6SjF9KX0sSD0oaCk9PncoaCwiZG93biIpLGc9KGgpPT53KGgsInVwIik7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixIKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLGcpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLEgpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsZyl9fSxbYywkLmRldmljZSxOMV0pO2xldCBQMT0kNigpLGsxPXM5KCQuZGV2aWNlKSxRMD1vOSh7ZXhlYzpDMSx1ZGlkOiQuZGV2aWNlLGVuYWJsZWQ6TixvblVwbG9hZFN0YXJ0OlAxLmFkZCxvblVwbG9hZFByb2dyZXNzOlAxLnNldFByb2dyZXNzLG9uVXBsb2FkRW5kOih3LEgsZyk9PlAxLnVwZGF0ZSh3LHtzdGF0dXM6SD8ic3VjY2VzcyI6ImVycm9yIixtZXNzYWdlOmd9KSxvblVuc3VwcG9ydGVkOih3KT0+e2xldCBIPVAxLmFkZCh3Lm5hbWUsIm1lZGlhIik7UDEudXBkYXRlKEgse3N0YXR1czoiZXJyb3IiLG1lc3NhZ2U6YFVuc3VwcG9ydGVkOiAke3cudHlwZXx8bTAodyl9YH0pfSxvbkhvc3RQYXRoRHJvcDprMS5kaXNtaXNzfSksRjE9ZTkoe2RlZmF1bHRXaWR0aDpMMSx2aWV3cG9ydFdpZHRoOnkxLHZpZXdwb3J0SGVpZ2h0OmUxLGFzcGVjdFJhdGlvOksxLG9uU3RhcnQ6KCk9PkcwKCExKX0pLGwxPTEyLG0xPTI0LE0wPU0xPjA/TWF0aC5taW4oTTEsRjEud2lkdGgpOkYxLndpZHRoLGYxPSh3KT0+e2lmKHc8PTApcmV0dXJuIDA7bGV0IEg9eTEtbDEtdyxoPXkxLzIrTTAvMi0oSC1tMSk7aWYoaDw9MClyZXR1cm4gMDtsZXQgbj0yKmg7cmV0dXJuIG48PXcrbTE/bjowfSxKMD1mMShxP28xOmgxP2MxOjApLFcwPWYxKEI/QzowKTtyZXR1cm4gSih5OCx7ZW5kcG9pbnQ6Wj8kPy5heEVuZHBvaW50OnZvaWQgMCxjaGlsZHJlbjpKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtc2NyZWVuIGJnLXBhZ2UgcHktNiBnYXAtMyBmb250LXN5c3RlbSBib3gtYm9yZGVyIixzdHlsZTp7cGFkZGluZ0xlZnQ6MjQrVzAscGFkZGluZ1JpZ2h0OjI0K0owLHRyYW5zaXRpb246RjEuaXNSZXNpemluZ3x8RjEuaXNJbmVydGlhPyJub25lIjpsOH0sY2hpbGRyZW46W0ooImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTMgbWluLXctMCIsc3R5bGU6e3dpZHRoOkYxLndpZHRoLHRyYW5zaXRpb246RjEuaXNSZXNpemluZ3x8RjEuaXNJbmVydGlhP3U1Omw1fSxjaGlsZHJlbjpbSihFMSx7ZXhlYzpDMSxvblJvdGF0ZTp2LG9yaWVudGF0aW9uOiQxLm9yaWVudGF0aW9uPz9udWxsLGRldmljZVVkaWQ6JC5kZXZpY2UsZGV2aWNlTmFtZTpLLGRldmljZVJ1bnRpbWU6USxzdHJlYW1pbmc6TiwiYXJpYS1sYWJlbCI6IlNpbXVsYXRvciBzdGF0dXMiLHN0eWxlOnthbGlnblNlbGY6ImNlbnRlciIsd2lkdGg6ImF1dG8iLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGZsZXhXcmFwOiJub3dyYXAiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGdhcDoxMCxwYWRkaW5nOiI2cHggMTBweCIsYm9yZGVyUmFkaXVzOjE4fSxjaGlsZHJlbjpbSihFMS5UaXRsZSx7b25DbGljazooKT0+Vigodyk9PiF3KSwiYXJpYS1sYWJlbCI6IlRvZ2dsZSBzaW11bGF0b3JzIHNpZGViYXIiLCJhcmlhLXByZXNzZWQiOkIsdGl0bGU6IlNpbXVsYXRvcnMiLGhpZGVTdWJ0aXRsZTohMCxoaWRlQ2hldnJvbjohMCxzdHlsZTp7bWF4V2lkdGg6Im1pbigyMzBweCwgY2FsYygxMDB2dyAtIDE3MHB4KSkifX0pLEooazkse3N0cmVhbWluZzpOfSldfSksSigiZGl2Iix7cmVmOkswLGNsYXNzTmFtZToicmVsYXRpdmUgbWF4LWgtZnVsbCIsc3R5bGU6e3dpZHRoOkYxLndpZHRoLGFzcGVjdFJhdGlvOmQsdHJhbnNpdGlvbjpGMS5pc1Jlc2l6aW5nfHxGMS5pc0luZXJ0aWE/dTU6bDUsd2lsbENoYW5nZTpGMS5pc1Jlc2l6aW5nfHxGMS5pc0luZXJ0aWE/IndpZHRoIjp2b2lkIDB9LC4uLlEwLmRyb3Bab25lUHJvcHMsY2hpbGRyZW46W0ooeTIse3VybDokLnVybCxzdHlsZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsYm9yZGVyOiJub25lIixwb2ludGVyRXZlbnRzOkYxLmlzUmVzaXppbmd8fEYxLmlzSW5lcnRpYT8ibm9uZSI6dm9pZCAwfSxpbWFnZVN0eWxlOntib3JkZXJSYWRpdXM6cyxjb3JuZXJTaGFwZToic3VwZXJlbGxpcHNlKDEuMykiLGJveFNoYWRvdzoiaW5zZXQgMCAwIDAgMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSJ9LGhpZGVDb250cm9sczohMCxvblN0cmVhbWluZ0NoYW5nZTpfLG9uU3RyZWFtVG91Y2g6UTEsb25TdHJlYW1NdWx0aVRvdWNoOlUxLG9uU3RyZWFtQnV0dG9uOnUsb25TdHJlYW1EaWdpdGFsQ3Jvd246aixjb2RlYzpiPyJhdmNjIjoibWpwZWciLHN1YnNjcmliZUZyYW1lOmI/dm9pZCAwOnguc3Vic2NyaWJlRnJhbWUsc3RyZWFtRnJhbWU6Yj92b2lkIDA6eC5mcmFtZSxzdHJlYW1Db25maWc6JDEsZW5hYmxlRGlnaXRhbENyb3duOno9PT0id2F0Y2giLG9uU2NyZWVuQ29uZmlnQ2hhbmdlOmt9KSxaJiZKKEk4LHt9KSxRMC5pc0RyYWdPdmVyJiZKKCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LTAgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgYm9yZGVyLTIgYm9yZGVyLWRhc2hlZCBib3JkZXItYWNjZW50IGJnLVtyZ2JhKDk5LDEwMiwyNDEsMC4xOCldIHRleHQtYWNjZW50IHBvaW50ZXItZXZlbnRzLW5vbmUgei0yMCIsc3R5bGU6e2JvcmRlclJhZGl1czpzfSxjaGlsZHJlbjpbSihxMix7c2l6ZTozMixzdHJva2VXaWR0aDoxLjV9KSxKKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LVsxM3B4XSBmb250LW1lZGl1bSIsY2hpbGRyZW46IkRyb3AgbWVkaWEgb3IgLmlwYSJ9KV19KSxKKE45LHtzaW11bGF0b3JSZXNpemU6RjEsZGV2aWNlVHlwZTp6LHN0cmVhbUNvbmZpZzokMSxjb250YWluZXJXaWR0aDpNMXx8RjEud2lkdGgsY29udGFpbmVySGVpZ2h0OnEwfHwoSzE+MD9GMS53aWR0aC9LMTowKX0pLEooXzkse3dpZHRoOk0xfHxGMS53aWR0aCxoZWlnaHQ6cTB8fChLMT4wP0YxLndpZHRoL0sxOjApLHZpc2libGU6RjEuaXNSZXNpemluZ3x8RjEuaXNJbmVydGlhfSldfSksSigiZGl2Iix7Y2xhc3NOYW1lOiJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgbWF4LXctZnVsbCIsY2hpbGRyZW46W0ooRTEse2V4ZWM6QzEsb25Sb3RhdGU6dixvcmllbnRhdGlvbjokMS5vcmllbnRhdGlvbj8/bnVsbCxkZXZpY2VVZGlkOiQuZGV2aWNlLGRldmljZU5hbWU6SyxkZXZpY2VSdW50aW1lOlEsc3RyZWFtaW5nOk4sImFyaWEtbGFiZWwiOiJTaW11bGF0b3IgYWN0aW9ucyIsc3R5bGU6e2FsaWduU2VsZjoiY2VudGVyIix3aWR0aDoiYXV0byIsbWluV2lkdGg6MCxtYXhXaWR0aDoiMTAwJSIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIscGFkZGluZzoiNnB4IDhweCIsYm9yZGVyUmFkaXVzOjE4fSxjaGlsZHJlbjpKKEUxLkFjdGlvbnMse2NoaWxkcmVuOlt4MT8uaXNSZWFjdE5hdGl2ZSYmSihFMS5CdXR0b24seyJhcmlhLWxhYmVsIjoiUmVsb2FkIFJlYWN0IE5hdGl2ZSBidW5kbGUiLHRpdGxlOiJSZWxvYWQgKENtZCtSKSIsb25DbGljazooKT0+dm9pZCAkMCgpLGNoaWxkcmVuOkooQTAse30pfSksSihFMS5Ib21lQnV0dG9uLHtvbkNsaWNrOih3KT0+e3cucHJldmVudERlZmF1bHQoKSx1KCJob21lIil9fSksSihFMS5TY3JlZW5zaG90QnV0dG9uLHt0aXRsZToiU2NyZWVuc2hvdCIsb25DbGljazoodyk9Pnt3LnByZXZlbnREZWZhdWx0KCksazEuY2FwdHVyZSgpfX0pLEooRTEuUm90YXRlQnV0dG9uLHt0aXRsZToiUm90YXRlIGRldmljZSJ9KV19KX0pLEooRTEse2V4ZWM6QzEsb25Sb3RhdGU6dixvcmllbnRhdGlvbjokMS5vcmllbnRhdGlvbj8/bnVsbCxkZXZpY2VVZGlkOiQuZGV2aWNlLGRldmljZU5hbWU6SyxkZXZpY2VSdW50aW1lOlEsc3RyZWFtaW5nOk4sImFyaWEtbGFiZWwiOiJBY2Nlc3NpYmlsaXR5IG92ZXJsYXkiLHN0eWxlOnt3aWR0aDoiYXV0byIsbWluV2lkdGg6MCxqdXN0aWZ5Q29udGVudDoiY2VudGVyIixwYWRkaW5nOjYsYm9yZGVyUmFkaXVzOjIyfSxjaGlsZHJlbjpKKGI4LHtvdmVybGF5RW5hYmxlZDpaLHN0cmVhbWluZzpOLG9uVG9nZ2xlT3ZlcmxheTooKT0+WSgodyk9PiF3KX0pfSldfSldfSksUDEudG9hc3RzLmxlbmd0aD4wJiZKKCJkaXYiLHtjbGFzc05hbWU6ImZpeGVkIGJvdHRvbS00IHJpZ2h0LTQgZmxleCBmbGV4LWNvbCBnYXAtMS41IG1heC13LVszMjBweF0gei0zMCIsY2hpbGRyZW46UDEudG9hc3RzLm1hcCgodyk9PntsZXQgSD13LnN0YXR1cz09PSJlcnJvciIsZz13LnN0YXR1cz09PSJ1cGxvYWRpbmciLGg9ZyYmdy5wcm9ncmVzcyE9PW51bGwsbj13LnByb2dyZXNzIT1udWxsP01hdGgucm91bmQody5wcm9ncmVzcyoxMDApOjA7cmV0dXJuIEooImRpdiIse2NsYXNzTmFtZTpgZmxleCBmbGV4LWNvbCBnYXAtMS41IHB4LTMgcHktMiBiZy1wYW5lbCBib3JkZXIgYm9yZGVyLXdoaXRlLzEyIHJvdW5kZWQtbGcgdGV4dC13aGl0ZS85MCB0ZXh0LVsxMnB4XSBmb250LW1vbm8gc2hhZG93LVswXzRweF8xMnB4X3JnYmEoMCwwLDAsMC40KV0gJHtIPyJzZWxlY3QtdGV4dCBjdXJzb3ItdGV4dCI6InNlbGVjdC1ub25lIGN1cnNvci1kZWZhdWx0In1gLGNoaWxkcmVuOltKKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIixjaGlsZHJlbjpbSigic3BhbiIse2NsYXNzTmFtZToic2l6ZS0xLjUgcm91bmRlZC1mdWxsIHNocmluay0wIFt0cmFuc2l0aW9uOmJhY2tncm91bmRfMC4zc10iLHN0eWxlOntiYWNrZ3JvdW5kOmc/IiNhNWI0ZmMiOncuc3RhdHVzPT09InN1Y2Nlc3MiPyIjNGFkZTgwIjoiI2Y4NzE3MSJ9fSksSigic3BhbiIse2NsYXNzTmFtZToiZmxleC0xIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwIixjaGlsZHJlbjpbZyYmaCYmYFVwbG9hZGluZyAke3cubmFtZX3igKYgJHtufSVgLGcmJiFoJiYody5raW5kPT09ImlwYSI/YEluc3RhbGxpbmcgJHt3Lm5hbWV94oCmYDpgQWRkaW5nICR7dy5uYW1lfeKApmApLHcuc3RhdHVzPT09InN1Y2Nlc3MiJiYody5raW5kPT09ImlwYSI/YEluc3RhbGxlZCAke3cubmFtZX1gOmBBZGRlZCAke3cubmFtZX0gdG8gUGhvdG9zYCksSCYmYCR7dy5uYW1lfTogJHt3Lm1lc3NhZ2U/PyJVcGxvYWQgZmFpbGVkIn1gXX0pXX0pLGcmJkooImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUgaC1bM3B4XSB3LWZ1bGwgYmctd2hpdGUvOCByb3VuZGVkLVsycHhdIG92ZXJmbG93LWhpZGRlbiIsY2hpbGRyZW46aD9KKCJkaXYiLHtjbGFzc05hbWU6ImgtZnVsbCBiZy1hY2NlbnQgcm91bmRlZC1bMnB4XSBbdHJhbnNpdGlvbjp3aWR0aF8xMjBtc19saW5lYXJdIixzdHlsZTp7d2lkdGg6YCR7bn0lYH19KTpKKCJkaXYiLHtjbGFzc05hbWU6InNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIGFic29sdXRlIHRvcC0wIGxlZnQtMCBoLWZ1bGwgdy1bNDAlXSBiZy1hY2NlbnQgcm91bmRlZC1bMnB4XSJ9KX0pXX0sdy5pZCl9KX0pLGsxLnRvYXN0JiZKKEE5LHt0b2FzdDprMS50b2FzdCxvblJldmVhbDprMS5yZXZlYWwsb25EaXNtaXNzOmsxLmRpc21pc3Msb25QYXVzZTprMS5wYXVzZSxvblJlc3VtZTprMS5yZXN1bWV9KSxKKCJkaXYiLHtjbGFzc05hbWU6YGZpeGVkIHRvcC0zIHJpZ2h0LTMgZmxleCBmbGV4LWNvbCBnYXAtMSBwLTEgYmctcGFuZWwtYmcgYm9yZGVyIGJvcmRlci13aGl0ZS84IHJvdW5kZWQtWzEwcHhdIGJhY2tkcm9wLWJsdXItWzEycHhdIFstd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpibHVyKDEycHgpXSBbdHJhbnNpdGlvbjpvcGFjaXR5XzAuMThzX2Vhc2VdIHotNDAgJHtoMXx8cT8ib3BhY2l0eS0wIHBvaW50ZXItZXZlbnRzLW5vbmUiOiJvcGFjaXR5LTEwMCBwb2ludGVyLWV2ZW50cy1hdXRvIn1gLGNoaWxkcmVuOltKKCJidXR0b24iLHtvbkNsaWNrOigpPT57RyghMSksdjEoKHcpPT4hdyl9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gdG9vbHMgcGFuZWwiLCJhcmlhLXByZXNzZWQiOmgxLHRpdGxlOiJUb29scyIsY2hpbGRyZW46SihYMix7c2l6ZToxOCxzdHJva2VXaWR0aDoxLjc1fSl9KSxKKCJidXR0b24iLHtvbkNsaWNrOigpPT57djEoITEpLEcoKHcpPT4hdyl9LGNsYXNzTmFtZToidy1bMzBweF0gaC1bMzBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctdHJhbnNwYXJlbnQgYm9yZGVyLW5vbmUgcm91bmRlZC1tZCB0ZXh0LVsjOGU4ZTkzXSBjdXJzb3ItcG9pbnRlciBbdHJhbnNpdGlvbjpiYWNrZ3JvdW5kXzAuMTVzX2Vhc2UsY29sb3JfMC4xNXNfZWFzZV0gaG92ZXI6Ymctd2hpdGUvOCBob3Zlcjp0ZXh0LXdoaXRlIiwiYXJpYS1sYWJlbCI6Ik9wZW4gV2ViS2l0IERldlRvb2xzIiwiYXJpYS1wcmVzc2VkIjpxLHRpdGxlOiJXZWJLaXQgRGV2VG9vbHMiLGNoaWxkcmVuOkooUTIse3NpemU6MTgsc3Ryb2tlV2lkdGg6MS43NX0pfSldfSksSihmOSx7b3BlbjpoMSxvbkNsb3NlOigpPT52MSghMSksdWRpZDokLmRldmljZSxkZXZpY2VSdW50aW1lOlEsY3VycmVudEFwcDp4MSxheE92ZXJsYXlFbmFibGVkOlosb25Ub2dnbGVBeE92ZXJsYXk6KCk9PlkoKHcpPT4hdyksd2lkdGg6YzF9KSxKKGkyLHtwYW5lbFdpZHRoOmMxLHZpc2libGU6aDEsb25Qb2ludGVyRG93bjpJMSxhcmlhTGFiZWw6IlJlc2l6ZSB0b29scyBwYW5lbCJ9KSxKKGM5LHtvcGVuOnEsb25DbG9zZTooKT0+RyghMSksdWRpZDokLmRldmljZSx0YXJnZXRzOlUudGFyZ2V0cyxzZWxlY3RlZFRhcmdldElkOkwsb25TZWxlY3RUYXJnZXQ6Rixsb2FkaW5nOlUubG9hZGluZyxlcnJvcjpVLmVycm9yLG9uUmVmcmVzaDooKT0+dm9pZCBVLnJlZnJlc2goKSx3aWR0aDpvMX0pLEooaTIse3BhbmVsV2lkdGg6bzEsdmlzaWJsZTpxLG9uUG9pbnRlckRvd246YTEsYXJpYUxhYmVsOiJSZXNpemUgV2ViS2l0IERldlRvb2xzIHBhbmVsIn0pXX0pfSl9cjMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvb3QiKSkucmVuZGVyKEooTiQse30pKTsKPC9zY3JpcHQ+CjwvYm9keT48L2h0bWw+","base64").toString("utf-8");return G_}function uR(){try{let H=SH("xcrun simctl list devices -j",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000}),$=JSON.parse(H),e=[];for(let[_,t]of Object.entries($.devices)){if(!/SimRuntime\.(iOS|watchOS|visionOS|xrOS)-/i.test(_))continue;for(let T of t){if(T.isAvailable===!1)continue;e.push({...T,runtime:_.replace(/^.*SimRuntime\./,"")})}}return e}catch{return[]}}function iR(){try{let H=Number(SH("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),$=Number(SH("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),e=SH("vm_stat",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}),_=(T)=>{let b=e.match(T);return b?Number(b[1]):0},t=_(/Pages free:\s+(\d+)/)+_(/Pages inactive:\s+(\d+)/)+_(/Pages speculative:\s+(\d+)/);return{totalBytes:Number.isFinite(H)?H:0,availableBytes:t*(Number.isFinite($)?$:4096)}}catch{return{totalBytes:0,availableBytes:0}}}function nR(){try{let H=SH("ps -axo rss=,args=",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000,maxBuffer:8388608}),$={},e=0,_=/\/Devices\/([0-9A-F-]{36})\//i;for(let t of H.split(`
84
+ `)){let T=t.trimStart();if(!T)continue;let b=_.exec(T);if(!b)continue;let A=Number(T.split(/\s+/,1)[0]);if(!Number.isFinite(A))continue;let a=A*1024,r=b[1].toUpperCase();$[r]=($[r]??0)+a,e+=a}return{perUdid:$,totalBytes:e}}catch{return{perUdid:{},totalBytes:0}}}function IR(){let{totalBytes:H,availableBytes:$}=iR(),e=nR(),_=Object.keys(e.perUdid).length,t=_>0?e.totalBytes/_:0,T=t>=268435456?"measured":"estimated",b=T==="measured"?t:hR,A=b>0?Math.max(0,Math.floor($/b)):0;return{totalBytes:H,availableBytes:$,runningSimulators:_,perSimAvgBytes:b,perSimSource:T,estimatedAdditional:A}}function DR(){if(process.argv[0]&&/(^|\/)serve-sim-sjchmiela$/.test(process.argv[0]))return{command:process.argv[0],baseArgs:[]};if(process.argv[1]&&/(^|\/)serve-sim\.js$/.test(process.argv[1]))return{command:process.argv[0],baseArgs:[process.argv[1]]};try{let H=SH("command -v serve-sim-sjchmiela",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim();if(H)return{command:H,baseArgs:[]}}catch{}return null}function fR(H,$){let e=Buffer.from(H),_=Buffer.from($);if(e.length!==_.length)return!1;return $R(e,_)}function ER(H){if(!H)return!1;return H.split(";",1)[0].trim().toLowerCase()==="application/json"}function CR(H){let $=(H?.basePath??"/.sim").replace(/\/+$/,""),e=H?.execToken??HR(32).toString("base64url"),_=async(T)=>{let b=T??{};if(typeof b.device!=="string"||!/^[0-9A-Za-z-]+$/.test(b.device))throw Error("missing or invalid device udid");if(b.option===void 0)return{status:await We(b.device)};if(!CH[b.option])throw Error(`unknown option: ${b.option}`);let A=typeof b.value==="string"?qe(b.option,b.value):null;if(A===null)throw Error(`invalid value for ${b.option}: ${b.value}`);return await ye(b.device,b.option,A),{ok:!0}};return Object.assign((T,b,A)=>{let a=T.url??"",r=a.indexOf("?"),L=r===-1?a:a.slice(0,r),c=AR(a)??H?.device??null,u=$==="/"?"/devtools-frontend":`${$}/devtools-frontend`;if(L===u||L.startsWith(`${u}/`)){(async()=>{let n=L===u?"inspector.html":L.slice(u.length+1);if(n.split("/").some((h)=>h==="..")){b.writeHead(400,{"Content-Type":"text/plain; charset=utf-8"}),b.end("Invalid asset path");return}try{let h=await fetch(`https://chrome-devtools-frontend.appspot.com/serve_rev/@${eR}/${n}${r===-1?"":a.slice(r)}`),I={"Cache-Control":"public, max-age=604800"},l=h.headers.get("content-type");if(l)I["Content-Type"]=l;b.writeHead(h.status,I),b.end(Buffer.from(await h.arrayBuffer()))}catch(h){b.writeHead(502,{"Content-Type":"text/plain; charset=utf-8"}),b.end(h instanceof Error?h.message:"Failed to load DevTools frontend")}})();return}if(L===$||L===$+"/"){let n=gH(),h=UH(n,c),I=sR();if(!h){let l=JSON.stringify({basePath:$,execToken:e});I=I.replace("<!--__SIM_PREVIEW_CONFIG__-->",`<script>window.__SIM_PREVIEW__=${l}</script>`)}if(h){let l=p$(h,T.headers?.host),C=`<script>window.__SIM_PREVIEW__=${JSON.stringify(Te(l,$,g_(),e))}</script>`;I=I.replace("<!--__SIM_PREVIEW_CONFIG__-->",C)}b.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store"}),b.end(I);return}if(L===$+"/grid/api/memory"){b.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),b.end(JSON.stringify(IR()));return}if(L===$+"/grid/api/devicekit-chrome"){xT(new URL(a||"/","http://serve-sim.local"),b);return}if(L===$+"/grid/api/device-placeholder-asset"){yT(new URL(a||"/","http://serve-sim.local"),b);return}if(L===$+"/grid/api"){let n=gH(),h=new Map(n.map((E)=>[E.device,E])),l=uR().map((E)=>{let R=h.get(E.udid),o=R?p$(R,T.headers?.host):null;return{device:E.udid,name:E.name,runtime:E.runtime,state:E.state,chrome:qT(E),placeholderAsset:PT(E),helper:o?{port:o.port,url:o.url,streamUrl:o.streamUrl,wsUrl:o.wsUrl}:null}}),N=rR(),C=(E)=>{if(/iphone/i.test(E))return 0;if(/ipad/i.test(E))return 1;if(/watch/i.test(E))return 2;if(/(apple\s*tv|^tv\b)/i.test(E))return 3;if(/vision|reality/i.test(E))return 4;return 5},D=(E)=>E.helper?0:E.state==="Booted"?1:E.device===N?2:3,d=(E)=>{let R=E.match(/-(\d+)-(\d+)/),o=R?Number(R[1]):0,s=R?Number(R[2]):0;return-(o*1000+s)};l.sort((E,R)=>D(E)-D(R)||C(E.name)-C(R.name)||E.name.localeCompare(R.name)||d(E.runtime)-d(R.runtime)),b.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),b.end(JSON.stringify({devices:l}));return}if(L===$+"/grid/api/shutdown"&&T.method==="POST"){let n="";T.on("data",(h)=>{n+=typeof h==="string"?h:h.toString()}),T.on("end",()=>{let h="";try{h=JSON.parse(n).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(h)){b.writeHead(400,{"Content-Type":"application/json"}),b.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}l$={at:0,booted:null},qb("xcrun",["simctl","shutdown",h],{timeout:30000},(I,l,N)=>{if(I){b.writeHead(500,{"Content-Type":"application/json"}),b.end(JSON.stringify({ok:!1,error:N?.toString().trim()||I.message}));return}b.writeHead(200,{"Content-Type":"application/json"}),b.end(JSON.stringify({ok:!0}))})});return}if(L===$+"/grid/api/start"&&T.method==="POST"){let n="";T.on("data",(h)=>{n+=typeof h==="string"?h:h.toString()}),T.on("end",()=>{let h="";try{h=JSON.parse(n).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(h)){b.writeHead(400,{"Content-Type":"application/json"}),b.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}let I=DR();if(!I){b.writeHead(500,{"Content-Type":"application/json"}),b.end(JSON.stringify({ok:!1,error:"serve-sim-sjchmiela CLI not found in PATH. Install it (npm i -g serve-sim-sjchmiela) and retry."}));return}let l=Bb(I.command,[...I.baseArgs,"--detach",h],{stdio:["ignore","pipe","pipe"],detached:!1}),N="",C="";l.stdout?.on("data",(d)=>{N+=d.toString()}),l.stderr?.on("data",(d)=>{C+=d.toString()});let D=setTimeout(()=>{try{l.kill("SIGTERM")}catch{}},180000);l.on("close",(d)=>{if(clearTimeout(D),d===0)b.writeHead(200,{"Content-Type":"application/json"}),b.end(JSON.stringify({ok:!0,stdout:N.trim()}));else b.writeHead(500,{"Content-Type":"application/json"}),b.end(JSON.stringify({ok:!1,error:C.trim()||N.trim()||`serve-sim exited with code ${d}`}))})});return}if(L===$+"/devtools"){(async()=>{let n=gH();if(!UH(n,c)){b.writeHead(404,{"Content-Type":"application/json"}),b.end(JSON.stringify({error:"No serve-sim device"}));return}try{let I=await M_(),l=await I.listTargets(),N=RR(T.headers?.host,I.port),C=l.map((D)=>({...D,webSocketDebuggerUrl:`ws://${N}/devtools/page/${encodeURIComponent(D.id)}`,devtoolsFrontendUrl:cR(u,N,D.id)}));b.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),b.end(JSON.stringify({port:I.port,targets:C}))}catch(I){b.writeHead(500,{"Content-Type":"application/json"}),b.end(JSON.stringify({error:I instanceof Error?I.message:"Failed to start inspect-webkit"}))}})();return}if(L===$+"/devtools/release"&&T.method==="POST"){let n="";T.on("data",(h)=>n+=h),T.on("end",async()=>{try{let h=n?JSON.parse(n):{};(await M_()).releaseHighlight?.(h.targetId),b.writeHead(200,{"Content-Type":"application/json"}),b.end("{}")}catch(h){b.writeHead(500,{"Content-Type":"application/json"}),b.end(JSON.stringify({error:h instanceof Error?h.message:"Failed to release"}))}});return}if(L===$+"/devtools/highlight"&&T.method==="POST"){let n="";T.on("data",(h)=>n+=h),T.on("end",async()=>{try{let{targetId:h,on:I}=JSON.parse(n||"{}");if(!h){b.writeHead(400,{"Content-Type":"application/json"}),b.end(JSON.stringify({error:"Missing targetId"}));return}let l=await M_();if(!l.highlightTarget){b.writeHead(501,{"Content-Type":"application/json"}),b.end(JSON.stringify({error:"highlightTarget not supported by inspect-webkit"}));return}await l.highlightTarget(h,!!I),b.writeHead(200,{"Content-Type":"application/json"}),b.end("{}")}catch(h){b.writeHead(500,{"Content-Type":"application/json"}),b.end(JSON.stringify({error:h instanceof Error?h.message:"Failed to highlight target"}))}});return}if(L===$+"/api"){let n=gH(),h=UH(n,c),I=`${c??"(any)"}|${n.length}|${h?`${h.device}@${h.port}`:"none"}`;if(I!==Ob)Ob=I,w$("GET /api selectedDevice=%s states=%d chose=%s",c??"(any)",n.length,h?`${h.device}@${h.port}`:"none");b.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"});let l=h?p$(h,T.headers?.host):null;b.end(JSON.stringify(l?Te(l,$,g_(),e):null));return}if(L===$+"/api/events"){let n=()=>{let o=gH(),s=UH(o,c),i=s?p$(s,T.headers?.host):null;return JSON.stringify(i?Te(i,$,g_(),e):null)};b.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),b.write(`:
85
85
 
86
86
  `);let h=n();b.write("data: "+h+`
87
87
 
88
88
  `);let I=!1,l=()=>{if(I||b.writableEnded)return;let o=n();if(o===h)return;h=o,b.write("data: "+o+`
89
89
 
90
- `)},N=null,C=()=>{if(N)return;N=setTimeout(()=>{N=null,l()},150)},D=null,d=null,E=()=>{if(I||b.writableEnded||D||d)return;d=setTimeout(()=>{if(d=null,I||b.writableEnded||D)return;try{D=Vc(S_,C),D.on("error",()=>{D?.close(),D=null,E()}),l()}catch{E()}},250)};E();let R=setInterval(()=>{if(I||b.writableEnded)return;b.write(`:
90
+ `)},N=null,C=()=>{if(N)return;N=setTimeout(()=>{N=null,l()},150)},D=null,d=null,E=()=>{if(I||b.writableEnded||D||d)return;d=setTimeout(()=>{if(d=null,I||b.writableEnded||D)return;try{D=jc(S_,C),D.on("error",()=>{D?.close(),D=null,E()}),l()}catch{E()}},250)};E();let R=setInterval(()=>{if(I||b.writableEnded)return;b.write(`:
91
91
 
92
92
  `),E()},15000);T.on("close",()=>{if(I=!0,N)clearTimeout(N);if(d)clearTimeout(d);clearInterval(R),D?.close()});return}if(L===$+"/ax"){let n=gH(),h=UH(n,c);if(!h){b.writeHead(404),b.end("No serve-sim device");return}b.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),b.write(`:
93
93
 
94
- `),Ob.prune(n.map((N)=>N.device));let l=Ob.get(h.device,h.port).addClient(b);T.on("close",l);return}if((L===$+"/exec"||L===$+"/exec/")&&T.method==="POST"){if(!fR(T.headers["content-type"])){b.writeHead(415,{"Content-Type":"application/json"}),b.end(JSON.stringify({stdout:"",stderr:"Unsupported Media Type",exitCode:1}));return}let n=T.headers.origin;if(n)try{if(new URL(n).host!==T.headers.host){b.writeHead(403,{"Content-Type":"application/json"}),b.end(JSON.stringify({stdout:"",stderr:"Cross-origin request blocked",exitCode:1}));return}}catch{b.writeHead(403,{"Content-Type":"application/json"}),b.end(JSON.stringify({stdout:"",stderr:"Invalid Origin",exitCode:1}));return}let h=T.headers.authorization??"",I=/^Bearer\s+(.+)$/i.exec(h);if(!I||!DR(I[1].trim(),e)){b.writeHead(401,{"Content-Type":"application/json"}),b.end(JSON.stringify({stdout:"",stderr:"Unauthorized",exitCode:1}));return}let l="",N=!1;T.on("data",(C)=>{if(l+=typeof C==="string"?C:C.toString(),l.length>4194304)N=!0,b.writeHead(413,{"Content-Type":"application/json"}),b.end(JSON.stringify({stdout:"",stderr:"Payload Too Large",exitCode:1})),T.destroy()}),T.on("end",()=>{if(N)return;let C="";try{C=JSON.parse(l).command??""}catch{}if(!C){b.writeHead(400,{"Content-Type":"application/json"}),b.end(JSON.stringify({stdout:"",stderr:"Missing command",exitCode:1}));return}jc(C,{maxBuffer:16777216},(D,d,E)=>{b.writeHead(200,{"Content-Type":"application/json"}),b.end(JSON.stringify({stdout:d.toString(),stderr:E.toString(),exitCode:D?D.code??1:0}))})});return}if(L===$+"/appstate"){let n=gH(),h=UH(n,c);if(!h){b.writeHead(404),b.end("No serve-sim device");return}let I=h.device;b.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),b.write(`:
94
+ `),Mb.prune(n.map((N)=>N.device));let l=Mb.get(h.device,h.port).addClient(b);T.on("close",l);return}if((L===$+"/exec"||L===$+"/exec/")&&T.method==="POST"){if(!ER(T.headers["content-type"])){b.writeHead(415,{"Content-Type":"application/json"}),b.end(JSON.stringify({stdout:"",stderr:"Unsupported Media Type",exitCode:1}));return}let n=T.headers.origin;if(n)try{if(new URL(n).host!==T.headers.host){b.writeHead(403,{"Content-Type":"application/json"}),b.end(JSON.stringify({stdout:"",stderr:"Cross-origin request blocked",exitCode:1}));return}}catch{b.writeHead(403,{"Content-Type":"application/json"}),b.end(JSON.stringify({stdout:"",stderr:"Invalid Origin",exitCode:1}));return}let h=T.headers.authorization??"",I=/^Bearer\s+(.+)$/i.exec(h);if(!I||!fR(I[1].trim(),e)){b.writeHead(401,{"Content-Type":"application/json"}),b.end(JSON.stringify({stdout:"",stderr:"Unauthorized",exitCode:1}));return}let l="",N=!1;T.on("data",(C)=>{if(l+=typeof C==="string"?C:C.toString(),l.length>4194304)N=!0,b.writeHead(413,{"Content-Type":"application/json"}),b.end(JSON.stringify({stdout:"",stderr:"Payload Too Large",exitCode:1})),T.destroy()}),T.on("end",()=>{if(N)return;let C="";try{C=JSON.parse(l).command??""}catch{}if(!C){b.writeHead(400,{"Content-Type":"application/json"}),b.end(JSON.stringify({stdout:"",stderr:"Missing command",exitCode:1}));return}Qc(C,{maxBuffer:16777216},(D,d,E)=>{b.writeHead(200,{"Content-Type":"application/json"}),b.end(JSON.stringify({stdout:d.toString(),stderr:E.toString(),exitCode:D?D.code??1:0}))})});return}if(L===$+"/appstate"){let n=gH(),h=UH(n,c);if(!h){b.writeHead(404),b.end("No serve-sim device");return}let I=h.device;b.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),b.write(`:
95
95
 
96
- `);let l="";(async()=>{try{let E=new AbortController,R=setTimeout(()=>E.abort(),1500),o=await fetch(`http://127.0.0.1:${h.port}/foreground`,{signal:E.signal});if(clearTimeout(R),!o.ok)return;let s=await o.json();if(!s.bundleId||!Mb(s.bundleId))return;if(b.writableEnded)return;l=s.bundleId;let i=await Gb(I,s.bundleId);if(b.writableEnded)return;b.write("data: "+JSON.stringify({bundleId:s.bundleId,pid:s.pid,isReactNative:i})+`
96
+ `);let l="";(async()=>{try{let E=new AbortController,R=setTimeout(()=>E.abort(),1500),o=await fetch(`http://127.0.0.1:${h.port}/foreground`,{signal:E.signal});if(clearTimeout(R),!o.ok)return;let s=await o.json();if(!s.bundleId||!Gb(s.bundleId))return;if(b.writableEnded)return;l=s.bundleId;let i=await gb(I,s.bundleId);if(b.writableEnded)return;b.write("data: "+JSON.stringify({bundleId:s.bundleId,pid:s.pid,isReactNative:i})+`
97
97
 
98
- `)}catch{}})();let N=pb("xcrun",["simctl","spawn",I,"log","stream","--style","ndjson","--level","info","--predicate",'process == "SpringBoard" AND eventMessage CONTAINS "Setting process visibility to: Foreground"'],{stdio:["ignore","pipe","ignore"]}),C=!1,D=async(E,R)=>{if(!Mb(E))return;if(E===l)return;l=E;let o=await Gb(I,E);if(!C)b.write("data: "+JSON.stringify({bundleId:E,pid:R,isReactNative:o})+`
98
+ `)}catch{}})();let N=Bb("xcrun",["simctl","spawn",I,"log","stream","--style","ndjson","--level","info","--predicate",'process == "SpringBoard" AND eventMessage CONTAINS "Setting process visibility to: Foreground"'],{stdio:["ignore","pipe","ignore"]}),C=!1,D=async(E,R)=>{if(!Gb(E))return;if(E===l)return;l=E;let o=await gb(I,E);if(!C)b.write("data: "+JSON.stringify({bundleId:E,pid:R,isReactNative:o})+`
99
99
 
100
100
  `)},d="";N.stdout.on("data",(E)=>{d+=E.toString();let R;while((R=d.indexOf(`
101
- `))!==-1){let o=d.slice(0,R).trim();if(d=d.slice(R+1),!o)continue;let s;try{s=JSON.parse(o).eventMessage??""}catch{continue}let i=qb(s);if(!i)continue;D(i.bundleId,i.pid)}if(d.length>eR)d=""}),N.on("error",()=>{C=!0;try{b.end()}catch{}}),N.on("close",()=>b.end()),T.on("close",()=>{C=!0,N.stdout?.destroy(),N.kill()});return}if(A)A()},{handleUpgrade:KT({path:`${$}/exec-ws`,execToken:e,ssePrefixes:[`${$}/api/events`,`${$}/appstate`,`${$}/ax`],onUiRequest:_})})}var S_,Bb,$R="854a02be78c7ffea104cb523636efa991bef5c5b",te=9222,Ob,eR=1048576,ZH=null,_R,tR,TR,l$,B_,G_=null,uR=1610612736;var xb=DH(()=>{IT();we();wT();vT();Fe();S_=k_(Qc(),"serve-sim"),Ob=nT(),_R=new Set(["host.exp.Exponent","dev.expo.Exponent"]),tR=["Frameworks/React.framework","Frameworks/hermes.framework","Frameworks/Hermes.framework","Frameworks/ExpoModulesCore.framework","main.jsbundle"],TR=/(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;l$={at:0,booted:null};B_={at:0,udid:null}});var dt=Ie(Nt(),1),{program:ss,createCommand:us,createArgument:hs,createOption:is,CommanderError:ns,InvalidArgumentError:Is,InvalidOptionArgumentError:Ds,Command:lt,Argument:fs,Option:Es,Help:Cs}=dt.default;import{execSync as _H,spawn as W_}from"child_process";import{chmodSync as CR,existsSync as V,mkdirSync as ae,openSync as re,closeSync as Ae,readSync as NR,readFileSync as oH,unlinkSync as T$,writeFileSync as oe}from"fs";import{createHash as F_}from"crypto";import{homedir as dR,networkInterfaces as lR}from"os";import{join as AH,resolve as nH}from"path";import{tmpdir as _a}from"os";import{join as S$}from"path";import{readdirSync as ta}from"fs";var EH=S$(_a(),"serve-sim"),Bs=S$(EH,"server.json");function k$(H){return S$(EH,`server-${H}.json`)}function m$(){try{return ta(EH).filter((H)=>H.startsWith("server-")&&H.endsWith(".json")).map((H)=>S$(EH,H))}catch{return[]}}function Ta(){let H={};for(let t=0;t<26;t++){let T=4+t;H[String.fromCharCode(97+t)]={usage:T,shift:!1},H[String.fromCharCode(65+t)]={usage:T,shift:!0}}let $="1234567890",e="!@#$%^&*()";for(let t=0;t<10;t++){let T=30+t;H[$[t]]={usage:T,shift:!1},H[e[t]]={usage:T,shift:!0}}let _=[["-","_",45],["=","+",46],["[","{",47],["]","}",48],["\\","|",49],[";",":",51],["'",'"',52],["`","~",53],[",","<",54],[".",">",55],["/","?",56]];for(let[t,T,b]of _)H[t]={usage:b,shift:!1},H[T]={usage:b,shift:!0};return H[" "]={usage:44,shift:!1},H[`
102
- `]={usage:40,shift:!1},H["\t"]={usage:43,shift:!1},H}var ba=Ta();class q$ extends Error{char;constructor(H){super(`Unsupported character: ${JSON.stringify(H)}`);this.char=H}}async function pt(H,$,e=4){return new Promise((_,t)=>{let T=new WebSocket(H);T.binaryType="arraybuffer",T.onopen=async()=>{try{for(let b of $){let A=new TextEncoder().encode(JSON.stringify(b)),a=new Uint8Array(1+A.length);if(a[0]=6,a.set(A,1),T.send(a),e>0)await new Promise((r)=>setTimeout(r,e))}setTimeout(()=>{T.close(),_()},50)}catch(b){T.close(),t(b)}},T.onerror=()=>{t(Error(`WebSocket connection failed: ${H}`))}})}function Bt(H){let $=[];for(let e of H){if(e==="\r")continue;let _=ba[e];if(!_)throw new q$(e);if(_.shift)$.push({type:"down",usage:225});if($.push({type:"down",usage:_.usage}),$.push({type:"up",usage:_.usage}),_.shift)$.push({type:"up",usage:225})}return $}x$();x$();import{execSync as oa}from"child_process";function ca(H){try{let $=oa(`lsof -ti tcp:${H} -sTCP:LISTEN`,{encoding:"utf-8",stdio:"pipe"}).trim();if(!$)return[];let e=process.pid;return $.split(`
103
- `).map((_)=>parseInt(_,10)).filter((_)=>Number.isFinite(_)&&_!==e)}catch{return[]}}function Gt(H){let $=ca(H);if($.length===0)return;console.log(`\x1B[90mPort ${H} busy, killing listener pid(s): ${$.join(", ")}\x1B[0m`);for(let e of $)try{process.kill(e,"SIGKILL")}catch{}mH(100)}y$();y$();import{execFileSync as QH}from"child_process";import{chmodSync as Ra,existsSync as qH,mkdtempSync as sa,rmSync as kt,writeFileSync as mt}from"fs";import{homedir as ua,tmpdir as ha}from"os";import{join as BH}from"path";var ge={camera:"kTCCServiceCamera",microphone:"kTCCServiceMicrophone",photos:"kTCCServicePhotos","photos-add":"kTCCServicePhotosAdd",contacts:"kTCCServiceAddressBook",calendar:"kTCCServiceCalendar",reminders:"kTCCServiceReminders",motion:"kTCCServiceMotion","media-library":"kTCCServiceMediaLibrary",siri:"kTCCServiceSiri",speech:"kTCCServiceSpeechRecognition",faceid:"kTCCServiceFaceID","user-tracking":"kTCCServiceUserTracking",homekit:"kTCCServiceWillow"},ia={push:{permission:"notifications"},notification:{permission:"notifications"},"photo-library":{permission:"photos"},photo:{permission:"photos"},"location-always":{permission:"location",value:"always"},"location-in-use":{permission:"location",value:"inuse"},"location-inuse":{permission:"location",value:"inuse"},mic:{permission:"microphone"}};function qt(H){if(H==="notifications")return{kind:"notifications",values:["critical"]};if(H==="location")return{kind:"location",values:["always","inuse","never"]};let $=ge[H];if($)return{kind:"tcc",tccService:$,tccAuthVersion:H==="photos"?2:1,values:H==="photos"?["limited"]:void 0};return null}function Oe(){return["notifications","location",...Object.keys(ge)]}var Be=/^[A-Za-z0-9][A-Za-z0-9.-]*$/;function na(H){let $,e,_=[];for(let L=0;L<H.length;L++){let c=H[L];if(c===void 0)continue;if(c==="-d"||c==="--device"){if($=H[++L],!$)return{error:"Missing value for -d/--device"}}else if(c==="--value"){if(e=H[++L],e===void 0)return{error:"Missing value for --value"}}else if(c.startsWith("--value="))e=c.slice(8);else if(c.startsWith("-"))return{error:`Unknown flag: ${c}`};else _.push(c)}let t=_[0];if(!t)return{error:"Missing subcommand: grant | revoke | reset | list"};let T={grant:"grant",revoke:"revoke",deny:"revoke",reset:"reset",list:"list"}[t];if(!T)return{error:`Unknown subcommand: ${t}`};if(T==="list"){let L=_[1];if(L&&!Be.test(L))return{error:`Invalid bundle id: ${L}`};return{verb:T,bundleId:L,device:$}}let b=_[1];if(!b)return{error:`Missing permission name for "${T}"`};if(T==="reset"&&b==="all"){let L=_[2];if(!L)return{error:"Missing bundle id for `reset all`"};if(!Be.test(L))return{error:`Invalid bundle id: ${L}`};return{verb:T,permission:"all",bundleId:L,device:$}}let A=ia[b];if(A){if(b=A.permission,A.value&&!e)e=A.value}let a=qt(b);if(!a)return{error:`Unknown permission: ${_[1]}
104
- Supported: ${Oe().join(", ")}`};let r=_[2];if(!r)return{error:`Missing bundle id for "${T} ${b}"`};if(!Be.test(r))return{error:`Invalid bundle id: ${r}`};if(!e&&_[3])e=_[3];if(e!==void 0){if(!a.values||!a.values.includes(e)){let L=a.values?a.values.join(", "):"(none)";return{error:`Invalid --value "${e}" for ${b}. Allowed: ${L}`}}}return{verb:T,permission:b,value:e,bundleId:r,device:$}}function Se(H){return BH(ua(),"Library/Developer/CoreSimulator/Devices",H,"data/Library")}function Pt(H){return BH(Se(H),"TCC/TCC.db")}function Ia(H){return BH(Se(H),"BulletinBoard")}function Da(H){return BH(Se(H),"Caches/locationd/clients.plist")}function fa(H){let $=Date.now()+5000;for(;;)try{return H()}catch(e){let _=String(e?.stderr??e?.message??e);if(Date.now()<$&&/database is locked|database is busy/i.test(_)){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,200);continue}throw e}}function Me(H,$){return fa(()=>QH("sqlite3",[H,$],{encoding:"utf-8"}))}function Ea(H,$,e,_,t){let T=Pt(H);if(!qH(T))throw Error(`TCC.db not found for ${H}. Is the simulator booted?
105
- ${T}`);if(Me(T,`DELETE FROM access WHERE service='${$}' AND client='${_}' AND client_type=0;`),t!=="delete")Me(T,`INSERT INTO access (service, client, client_type, auth_value, auth_reason, auth_version, flags) VALUES ('${$}', '${_}', 0, ${t}, 2, ${e}, 0);`)}var Ca=Object.fromEntries(Object.entries(ge).map(([H,$])=>[$,H]));function Na(H,$){let e=Pt(H);if(!qH(e))return{};let _=$?` WHERE client='${$}'`:"",t=Me(e,`SELECT service, auth_value FROM access${_};`),T={};for(let b of t.split(`
106
- `)){let[A,a]=b.split("|");if(A)T[Ca[A]??A]=Number(a)}return T}function R$(H){return QH("plutil",H,{encoding:"utf-8"})}function Ge(H,$,e={}){let _=[];for(let t of $)_.push("-c",t);_.push(H);try{return QH("/usr/libexec/PlistBuddy",_,{encoding:"utf-8",stdio:["ignore","pipe","pipe"]})}catch(t){if(e.ignoreErrors)return String(t?.stdout??"");throw Error(String(t?.stderr??t?.stdout??t?.message??t).trim())}}function xt(){return sa(BH(ha(),"serve-sim-perm-"))}function da(H,$,e,_){let t="grant",T="location";if(e==="reset")t="reset";else if(e==="revoke"||_==="never")t="revoke";else if(_==="always")T="location-always";try{QH("xcrun",["simctl","privacy",H,t,T,$],{stdio:["ignore","ignore","pipe"]})}catch(b){throw Error(`simctl privacy ${t} ${T} failed: `+String(b?.stderr??b?.message??b).trim())}}function la(H,$){if(!$)return null;let e=Da(H);if(!qH(e))return null;let _;try{_=R$(["-convert","xml1","-o","-",e])}catch{return null}let t=_.match(new RegExp(`<key>i${$.replace(/[.-]/g,"\\$&")}:</key>\\s*<dict>[\\s\\S]*?<key>Authorization</key>\\s*<integer>(\\d+)</integer>`));return t?{Authorization:Number(t[1])}:null}var pa="YnBsaXN0MDDUAQIDBAUGTU5YJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKgHCDAxQUgfSVUkbnVsbN8QFQkKCwwNDg8QERITFBUWFxgZGhscHR4fHiEiIx4jJicfHygjIh8jIyMjI18QFHN1cHByZXNzRnJvbVNldHRpbmdzXxASc3VwcHJlc3NlZFNldHRpbmdzWmhpZGVXZWVBcHBZc2VjdGlvbklEW2Rpc3BsYXlOYW1lVGljb25fEBlkaXNwbGF5c0NyaXRpY2FsQnVsbGV0aW5zW3N1YnNlY3Rpb25zXxATc2VjdGlvbkluZm9TZXR0aW5nc1YkY2xhc3NfEA9zZWN0aW9uQ2F0ZWdvcnlfEBJzdWJzZWN0aW9uUHJpb3JpdHlXdmVyc2lvbl8QGm1hbmFnZWRTZWN0aW9uSW5mb1NldHRpbmdzV2FwcE5hbWVbc2VjdGlvblR5cGVfEBBmYWN0b3J5U2VjdGlvbklEXxAPZGF0YVByb3ZpZGVySURzXHN1YnNlY3Rpb25JRFdmaWx0ZXJzXxAYcGF0aFRvV2VlQXBwUGx1Z2luQnVuZGxlCBAACIACgAWAAAiAAIADgAeABoAAgAWAAIAAgACAAIAAXxAmY29tLkxlb05hdGFuLkxOUG9wdXBDb250cm9sbGVyRXhhbXBsZS3ZMjM0NTY3Ejg5Ojs7Ox8fPjtAXHB1c2hTZXR0aW5nc18QGXNob3dzSW5Ob3RpZmljYXRpb25DZW50ZXJfEBNhbGxvd3NOb3RpZmljYXRpb25zXxAWc2hvd3NPbkV4dGVybmFsRGV2aWNlc18QFWNvbnRlbnRQcmV2aWV3U2V0dGluZ15jYXJQbGF5U2V0dGluZ18QEXNob3dzSW5Mb2NrU2NyZWVuWWFsZXJ0VHlwZRA/CQkJgAQJEAHSQkNERVokY2xhc3NuYW1lWCRjbGFzc2VzXxAVQkJTZWN0aW9uSW5mb1NldHRpbmdzokZHXxAVQkJTZWN0aW9uSW5mb1NldHRpbmdzWE5TT2JqZWN0V0xOUG9wdXDSQkNKS11CQlNlY3Rpb25JbmZvokxHXUJCU2VjdGlvbkluZm9fEA9OU0tleWVkQXJjaGl2ZXLRT1BUcm9vdIABAAgAEQAaACMALQAyADcAQABGAHMAigCfAKoAtADAAMUA4QDtAQMBCgEcATEBOQFWAV4BagF9AY8BnAGkAb8BwAHCAcMBxQHHAckBygHMAc4B0AHSAdQB1gHYAdoB3AHeAeACCQIcAikCRQJbAnQCjAKbAq8CuQK7ArwCvQK+AsACwQLDAsgC0wLcAvQC9wMPAxgDIAMlAzMDNgNEA1YDWQNeAAAAAAAAAgEAAAAAAAAAUQAAAAAAAAAAAAAAAAAAA2A=";function yt(H){return BH(Ia(H),"VersionedSectionInfo.plist")}function Ba(H,$,e,_){let t=BH(H,"section-info.plist");return mt(t,Buffer.from(pa,"base64")),Ge(t,[`Set :$objects:2 ${$}`,`Set :$objects:3:allowsNotifications ${e?"true":"false"}`,`Add :$objects:3:criticalAlertSetting integer ${_?2:0}`,`Set :$objects:5 ${$}`,"Save"]),R$(["-convert","binary1",t]),t}function Oa(H,$,e){let _=yt(H);if(!qH(_)){if(e==="reset")return;let T=Date.now()+5000;while(!qH(_)&&Date.now()<T)Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,250);if(!qH(_))throw Error(`BulletinBoard plist not found for ${H}. The simulator may still `+`be booting — wait for it to finish and retry.
107
- ${_}`)}try{QH("chflags",["nouchg",_])}catch{}let t=xt();try{if(Ge(_,[`Delete :sectionInfo:${$}`,"Save"],{ignoreErrors:!0}),e!=="reset"){let T=Ba(t,$,e!=="revoke",e==="critical");Ge(_,[`Import :sectionInfo:${$} ${T}`,"Save"])}R$(["-convert","binary1",_])}finally{kt(t,{recursive:!0,force:!0});try{Ra(_,420),QH("chflags",["uchg",_])}catch{}}}function Ma(H,$){if(!$)return null;let e=yt(H);if(!qH(e))return null;let _;try{_=R$(["-extract","sectionInfo","xml1","-o","-",e])}catch{return null}let t=_.match(new RegExp(`<key>${$.replace(/[.-]/g,"\\$&")}</key>\\s*<data>([\\s\\S]*?)</data>`));if(!t?.[1])return null;let T=xt();try{let b=BH(T,"section-info.plist");mt(b,Buffer.from(t[1].replace(/\s/g,""),"base64"));let A=R$(["-convert","xml1","-o","-",b]);return{allowsNotifications:/<key>allowsNotifications<\/key>\s*<true\/>/.test(A),critical:/<key>criticalAlertSetting<\/key>\s*<integer>2<\/integer>/.test(A)}}catch{return null}finally{kt(T,{recursive:!0,force:!0})}}function St(H,$,e,_,t){let T=qt(e);if(T.kind==="tcc"){let b=$==="reset"?"delete":$==="revoke"?0:_==="limited"?3:2;Ea(H,T.tccService,T.tccAuthVersion,t,b)}else if(T.kind==="notifications")Oa(H,t,$==="reset"?"reset":$==="revoke"?"revoke":_==="critical"?"critical":"grant");else da(H,t,$,_)}async function Wt(H){let $=H.includes("-q")||H.includes("--quiet"),e=H.filter((b)=>b!=="-q"&&b!=="--quiet"),_=na(e);if("error"in _)console.error(_.error),console.error(`
101
+ `))!==-1){let o=d.slice(0,R).trim();if(d=d.slice(R+1),!o)continue;let s;try{s=JSON.parse(o).eventMessage??""}catch{continue}let i=Pb(s);if(!i)continue;D(i.bundleId,i.pid)}if(d.length>_R)d=""}),N.on("error",()=>{C=!0;try{b.end()}catch{}}),N.on("close",()=>b.end()),T.on("close",()=>{C=!0,N.stdout?.destroy(),N.kill()});return}if(A)A()},{handleUpgrade:vT({path:`${$}/exec-ws`,execToken:e,ssePrefixes:[`${$}/api/events`,`${$}/appstate`,`${$}/ax`],onUiRequest:_})})}var S_,Ob,eR="854a02be78c7ffea104cb523636efa991bef5c5b",te=9222,Mb,_R=1048576,ZH=null,tR,TR,bR,l$,B_,G_=null,hR=1610612736;var yb=DH(()=>{DT();we();XT();VT();Fe();S_=k_(Yc(),"serve-sim"),Mb=IT(),tR=new Set(["host.exp.Exponent","dev.expo.Exponent"]),TR=["Frameworks/React.framework","Frameworks/hermes.framework","Frameworks/Hermes.framework","Frameworks/ExpoModulesCore.framework","main.jsbundle"],bR=/(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;l$={at:0,booted:null};B_={at:0,udid:null}});var lt=Ie(dt(),1),{program:is,createCommand:ns,createArgument:Is,createOption:Ds,CommanderError:fs,InvalidArgumentError:Es,InvalidOptionArgumentError:Cs,Command:pt,Argument:Ns,Option:ds,Help:ls}=lt.default;import{execSync as _H,spawn as W_}from"child_process";import{chmodSync as NR,existsSync as V,mkdirSync as ae,openSync as re,closeSync as Ae,readSync as dR,readFileSync as oH,unlinkSync as T$,writeFileSync as oe}from"fs";import{createHash as F_}from"crypto";import{homedir as lR,networkInterfaces as pR}from"os";import{join as AH,resolve as nH}from"path";import{tmpdir as ta}from"os";import{join as S$}from"path";import{readdirSync as Ta}from"fs";var EH=S$(ta(),"serve-sim"),Gs=S$(EH,"server.json");function k$(H){return S$(EH,`server-${H}.json`)}function m$(){try{return Ta(EH).filter((H)=>H.startsWith("server-")&&H.endsWith(".json")).map((H)=>S$(EH,H))}catch{return[]}}function ba(){let H={};for(let t=0;t<26;t++){let T=4+t;H[String.fromCharCode(97+t)]={usage:T,shift:!1},H[String.fromCharCode(65+t)]={usage:T,shift:!0}}let $="1234567890",e="!@#$%^&*()";for(let t=0;t<10;t++){let T=30+t;H[$[t]]={usage:T,shift:!1},H[e[t]]={usage:T,shift:!0}}let _=[["-","_",45],["=","+",46],["[","{",47],["]","}",48],["\\","|",49],[";",":",51],["'",'"',52],["`","~",53],[",","<",54],[".",">",55],["/","?",56]];for(let[t,T,b]of _)H[t]={usage:b,shift:!1},H[T]={usage:b,shift:!0};return H[" "]={usage:44,shift:!1},H[`
102
+ `]={usage:40,shift:!1},H["\t"]={usage:43,shift:!1},H}var La=ba();class q$ extends Error{char;constructor(H){super(`Unsupported character: ${JSON.stringify(H)}`);this.char=H}}async function Bt(H,$,e=4){return new Promise((_,t)=>{let T=new WebSocket(H);T.binaryType="arraybuffer",T.onopen=async()=>{try{for(let b of $){let A=new TextEncoder().encode(JSON.stringify(b)),a=new Uint8Array(1+A.length);if(a[0]=6,a.set(A,1),T.send(a),e>0)await new Promise((r)=>setTimeout(r,e))}setTimeout(()=>{T.close(),_()},50)}catch(b){T.close(),t(b)}},T.onerror=()=>{t(Error(`WebSocket connection failed: ${H}`))}})}function Ot(H){let $=[];for(let e of H){if(e==="\r")continue;let _=La[e];if(!_)throw new q$(e);if(_.shift)$.push({type:"down",usage:225});if($.push({type:"down",usage:_.usage}),$.push({type:"up",usage:_.usage}),_.shift)$.push({type:"up",usage:225})}return $}x$();x$();import{execSync as ca}from"child_process";function Ra(H){try{let $=ca(`lsof -ti tcp:${H} -sTCP:LISTEN`,{encoding:"utf-8",stdio:"pipe"}).trim();if(!$)return[];let e=process.pid;return $.split(`
103
+ `).map((_)=>parseInt(_,10)).filter((_)=>Number.isFinite(_)&&_!==e)}catch{return[]}}function gt(H){let $=Ra(H);if($.length===0)return;console.log(`\x1B[90mPort ${H} busy, killing listener pid(s): ${$.join(", ")}\x1B[0m`);for(let e of $)try{process.kill(e,"SIGKILL")}catch{}mH(100)}y$();y$();import{execFileSync as QH}from"child_process";import{chmodSync as sa,existsSync as qH,mkdtempSync as ua,rmSync as mt,writeFileSync as qt}from"fs";import{homedir as ha,tmpdir as ia}from"os";import{join as BH}from"path";var ge={camera:"kTCCServiceCamera",microphone:"kTCCServiceMicrophone",photos:"kTCCServicePhotos","photos-add":"kTCCServicePhotosAdd",contacts:"kTCCServiceAddressBook",calendar:"kTCCServiceCalendar",reminders:"kTCCServiceReminders",motion:"kTCCServiceMotion","media-library":"kTCCServiceMediaLibrary",siri:"kTCCServiceSiri",speech:"kTCCServiceSpeechRecognition",faceid:"kTCCServiceFaceID","user-tracking":"kTCCServiceUserTracking",homekit:"kTCCServiceWillow"},na={push:{permission:"notifications"},notification:{permission:"notifications"},"photo-library":{permission:"photos"},photo:{permission:"photos"},"location-always":{permission:"location",value:"always"},"location-in-use":{permission:"location",value:"inuse"},"location-inuse":{permission:"location",value:"inuse"},mic:{permission:"microphone"}};function Pt(H){if(H==="notifications")return{kind:"notifications",values:["critical"]};if(H==="location")return{kind:"location",values:["always","inuse","never"]};let $=ge[H];if($)return{kind:"tcc",tccService:$,tccAuthVersion:H==="photos"?2:1,values:H==="photos"?["limited"]:void 0};return null}function Oe(){return["notifications","location",...Object.keys(ge)]}var Be=/^[A-Za-z0-9][A-Za-z0-9.-]*$/;function Ia(H){let $,e,_=[];for(let L=0;L<H.length;L++){let c=H[L];if(c===void 0)continue;if(c==="-d"||c==="--device"){if($=H[++L],!$)return{error:"Missing value for -d/--device"}}else if(c==="--value"){if(e=H[++L],e===void 0)return{error:"Missing value for --value"}}else if(c.startsWith("--value="))e=c.slice(8);else if(c.startsWith("-"))return{error:`Unknown flag: ${c}`};else _.push(c)}let t=_[0];if(!t)return{error:"Missing subcommand: grant | revoke | reset | list"};let T={grant:"grant",revoke:"revoke",deny:"revoke",reset:"reset",list:"list"}[t];if(!T)return{error:`Unknown subcommand: ${t}`};if(T==="list"){let L=_[1];if(L&&!Be.test(L))return{error:`Invalid bundle id: ${L}`};return{verb:T,bundleId:L,device:$}}let b=_[1];if(!b)return{error:`Missing permission name for "${T}"`};if(T==="reset"&&b==="all"){let L=_[2];if(!L)return{error:"Missing bundle id for `reset all`"};if(!Be.test(L))return{error:`Invalid bundle id: ${L}`};return{verb:T,permission:"all",bundleId:L,device:$}}let A=na[b];if(A){if(b=A.permission,A.value&&!e)e=A.value}let a=Pt(b);if(!a)return{error:`Unknown permission: ${_[1]}
104
+ Supported: ${Oe().join(", ")}`};let r=_[2];if(!r)return{error:`Missing bundle id for "${T} ${b}"`};if(!Be.test(r))return{error:`Invalid bundle id: ${r}`};if(!e&&_[3])e=_[3];if(e!==void 0){if(!a.values||!a.values.includes(e)){let L=a.values?a.values.join(", "):"(none)";return{error:`Invalid --value "${e}" for ${b}. Allowed: ${L}`}}}return{verb:T,permission:b,value:e,bundleId:r,device:$}}function Se(H){return BH(ha(),"Library/Developer/CoreSimulator/Devices",H,"data/Library")}function xt(H){return BH(Se(H),"TCC/TCC.db")}function Da(H){return BH(Se(H),"BulletinBoard")}function fa(H){return BH(Se(H),"Caches/locationd/clients.plist")}function Ea(H){let $=Date.now()+5000;for(;;)try{return H()}catch(e){let _=String(e?.stderr??e?.message??e);if(Date.now()<$&&/database is locked|database is busy/i.test(_)){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,200);continue}throw e}}function Me(H,$){return Ea(()=>QH("sqlite3",[H,$],{encoding:"utf-8"}))}function Ca(H,$,e,_,t){let T=xt(H);if(!qH(T))throw Error(`TCC.db not found for ${H}. Is the simulator booted?
105
+ ${T}`);if(Me(T,`DELETE FROM access WHERE service='${$}' AND client='${_}' AND client_type=0;`),t!=="delete")Me(T,`INSERT INTO access (service, client, client_type, auth_value, auth_reason, auth_version, flags) VALUES ('${$}', '${_}', 0, ${t}, 2, ${e}, 0);`)}var Na=Object.fromEntries(Object.entries(ge).map(([H,$])=>[$,H]));function da(H,$){let e=xt(H);if(!qH(e))return{};let _=$?` WHERE client='${$}'`:"",t=Me(e,`SELECT service, auth_value FROM access${_};`),T={};for(let b of t.split(`
106
+ `)){let[A,a]=b.split("|");if(A)T[Na[A]??A]=Number(a)}return T}function R$(H){return QH("plutil",H,{encoding:"utf-8"})}function Ge(H,$,e={}){let _=[];for(let t of $)_.push("-c",t);_.push(H);try{return QH("/usr/libexec/PlistBuddy",_,{encoding:"utf-8",stdio:["ignore","pipe","pipe"]})}catch(t){if(e.ignoreErrors)return String(t?.stdout??"");throw Error(String(t?.stderr??t?.stdout??t?.message??t).trim())}}function yt(){return ua(BH(ia(),"serve-sim-perm-"))}function la(H,$,e,_){let t="grant",T="location";if(e==="reset")t="reset";else if(e==="revoke"||_==="never")t="revoke";else if(_==="always")T="location-always";try{QH("xcrun",["simctl","privacy",H,t,T,$],{stdio:["ignore","ignore","pipe"]})}catch(b){throw Error(`simctl privacy ${t} ${T} failed: `+String(b?.stderr??b?.message??b).trim())}}function pa(H,$){if(!$)return null;let e=fa(H);if(!qH(e))return null;let _;try{_=R$(["-convert","xml1","-o","-",e])}catch{return null}let t=_.match(new RegExp(`<key>i${$.replace(/[.-]/g,"\\$&")}:</key>\\s*<dict>[\\s\\S]*?<key>Authorization</key>\\s*<integer>(\\d+)</integer>`));return t?{Authorization:Number(t[1])}:null}var Ba="YnBsaXN0MDDUAQIDBAUGTU5YJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3ASAAGGoKgHCDAxQUgfSVUkbnVsbN8QFQkKCwwNDg8QERITFBUWFxgZGhscHR4fHiEiIx4jJicfHygjIh8jIyMjI18QFHN1cHByZXNzRnJvbVNldHRpbmdzXxASc3VwcHJlc3NlZFNldHRpbmdzWmhpZGVXZWVBcHBZc2VjdGlvbklEW2Rpc3BsYXlOYW1lVGljb25fEBlkaXNwbGF5c0NyaXRpY2FsQnVsbGV0aW5zW3N1YnNlY3Rpb25zXxATc2VjdGlvbkluZm9TZXR0aW5nc1YkY2xhc3NfEA9zZWN0aW9uQ2F0ZWdvcnlfEBJzdWJzZWN0aW9uUHJpb3JpdHlXdmVyc2lvbl8QGm1hbmFnZWRTZWN0aW9uSW5mb1NldHRpbmdzV2FwcE5hbWVbc2VjdGlvblR5cGVfEBBmYWN0b3J5U2VjdGlvbklEXxAPZGF0YVByb3ZpZGVySURzXHN1YnNlY3Rpb25JRFdmaWx0ZXJzXxAYcGF0aFRvV2VlQXBwUGx1Z2luQnVuZGxlCBAACIACgAWAAAiAAIADgAeABoAAgAWAAIAAgACAAIAAXxAmY29tLkxlb05hdGFuLkxOUG9wdXBDb250cm9sbGVyRXhhbXBsZS3ZMjM0NTY3Ejg5Ojs7Ox8fPjtAXHB1c2hTZXR0aW5nc18QGXNob3dzSW5Ob3RpZmljYXRpb25DZW50ZXJfEBNhbGxvd3NOb3RpZmljYXRpb25zXxAWc2hvd3NPbkV4dGVybmFsRGV2aWNlc18QFWNvbnRlbnRQcmV2aWV3U2V0dGluZ15jYXJQbGF5U2V0dGluZ18QEXNob3dzSW5Mb2NrU2NyZWVuWWFsZXJ0VHlwZRA/CQkJgAQJEAHSQkNERVokY2xhc3NuYW1lWCRjbGFzc2VzXxAVQkJTZWN0aW9uSW5mb1NldHRpbmdzokZHXxAVQkJTZWN0aW9uSW5mb1NldHRpbmdzWE5TT2JqZWN0V0xOUG9wdXDSQkNKS11CQlNlY3Rpb25JbmZvokxHXUJCU2VjdGlvbkluZm9fEA9OU0tleWVkQXJjaGl2ZXLRT1BUcm9vdIABAAgAEQAaACMALQAyADcAQABGAHMAigCfAKoAtADAAMUA4QDtAQMBCgEcATEBOQFWAV4BagF9AY8BnAGkAb8BwAHCAcMBxQHHAckBygHMAc4B0AHSAdQB1gHYAdoB3AHeAeACCQIcAikCRQJbAnQCjAKbAq8CuQK7ArwCvQK+AsACwQLDAsgC0wLcAvQC9wMPAxgDIAMlAzMDNgNEA1YDWQNeAAAAAAAAAgEAAAAAAAAAUQAAAAAAAAAAAAAAAAAAA2A=";function Wt(H){return BH(Da(H),"VersionedSectionInfo.plist")}function Oa(H,$,e,_){let t=BH(H,"section-info.plist");return qt(t,Buffer.from(Ba,"base64")),Ge(t,[`Set :$objects:2 ${$}`,`Set :$objects:3:allowsNotifications ${e?"true":"false"}`,`Add :$objects:3:criticalAlertSetting integer ${_?2:0}`,`Set :$objects:5 ${$}`,"Save"]),R$(["-convert","binary1",t]),t}function Ma(H,$,e){let _=Wt(H);if(!qH(_)){if(e==="reset")return;let T=Date.now()+5000;while(!qH(_)&&Date.now()<T)Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,250);if(!qH(_))throw Error(`BulletinBoard plist not found for ${H}. The simulator may still `+`be booting — wait for it to finish and retry.
107
+ ${_}`)}try{QH("chflags",["nouchg",_])}catch{}let t=yt();try{if(Ge(_,[`Delete :sectionInfo:${$}`,"Save"],{ignoreErrors:!0}),e!=="reset"){let T=Oa(t,$,e!=="revoke",e==="critical");Ge(_,[`Import :sectionInfo:${$} ${T}`,"Save"])}R$(["-convert","binary1",_])}finally{mt(t,{recursive:!0,force:!0});try{sa(_,420),QH("chflags",["uchg",_])}catch{}}}function Ga(H,$){if(!$)return null;let e=Wt(H);if(!qH(e))return null;let _;try{_=R$(["-extract","sectionInfo","xml1","-o","-",e])}catch{return null}let t=_.match(new RegExp(`<key>${$.replace(/[.-]/g,"\\$&")}</key>\\s*<data>([\\s\\S]*?)</data>`));if(!t?.[1])return null;let T=yt();try{let b=BH(T,"section-info.plist");qt(b,Buffer.from(t[1].replace(/\s/g,""),"base64"));let A=R$(["-convert","xml1","-o","-",b]);return{allowsNotifications:/<key>allowsNotifications<\/key>\s*<true\/>/.test(A),critical:/<key>criticalAlertSetting<\/key>\s*<integer>2<\/integer>/.test(A)}}catch{return null}finally{mt(T,{recursive:!0,force:!0})}}function kt(H,$,e,_,t){let T=Pt(e);if(T.kind==="tcc"){let b=$==="reset"?"delete":$==="revoke"?0:_==="limited"?3:2;Ca(H,T.tccService,T.tccAuthVersion,t,b)}else if(T.kind==="notifications")Ma(H,t,$==="reset"?"reset":$==="revoke"?"revoke":_==="critical"?"critical":"grant");else la(H,t,$,_)}async function Ft(H){let $=H.includes("-q")||H.includes("--quiet"),e=H.filter((b)=>b!=="-q"&&b!=="--quiet"),_=Ia(e);if("error"in _)console.error(_.error),console.error(`
108
108
  Usage:
109
109
  serve-sim permissions grant <permission> <bundle-id> [--value <v>] [-d <udid|name>]
110
110
  serve-sim permissions revoke <permission> <bundle-id> [-d <udid|name>]
111
111
  serve-sim permissions reset <permission|all> <bundle-id> [-d <udid|name>]
112
112
  serve-sim permissions list [bundle-id] [-d <udid|name>]
113
113
 
114
- Permissions: ${Oe().join(", ")}`),process.exit(1);let t=_.device?eH(_.device):aH();if(!t)console.error("No booted simulator. Boot one or pass -d <udid|name>."),process.exit(1);if(_.verb==="list"){let b={udid:t,bundleId:_.bundleId??null,tcc:Na(t,_.bundleId),location:la(t,_.bundleId),notifications:Ma(t,_.bundleId)};console.log(JSON.stringify(b,null,$?0:2)),process.exit(0)}let T=_.bundleId;try{if(_.permission==="all")for(let b of Oe())St(t,"reset",b,void 0,T);else St(t,_.verb,_.permission,_.value,T)}catch(b){console.error(b?.message??String(b)),process.exit(1)}if($)console.log(JSON.stringify({udid:t,verb:_.verb,permission:_.permission,value:_.value??null,bundleId:T}));else{let b=_.value?` (${_.value})`:"";console.log(`\uD83D\uDD10 ${_.verb} ${_.permission}${b} for ${T} on ${t}`)}process.exit(0)}Fe();we();import{spawn as oA}from"child_process";import{randomBytes as cA}from"crypto";var RA=/https:\/\/[a-z0-9-]+\.trycloudflare\.com/,iT=30000,hT="cloudflared not found on PATH. Install it with `brew install cloudflared` (macOS) or see https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/.";function je(H){return`${H.toLowerCase().replace(/[^a-z0-9-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40)||"serve-sim"}-${cA(4).toString("hex")}`}function Qe(H,$){if(($?.provider??"cloudflare")==="ngrok")return uA(H,{timeoutMs:$?.timeoutMs,domain:$?.domain,label:$?.label});return sA(H,{timeoutMs:$?.timeoutMs,protocol:$?.protocol})}function sA(H,$){let e=$?.timeoutMs??iT,_=$?.protocol;return new Promise((t,T)=>{let b=["tunnel","--no-autoupdate",..._?["--protocol",_]:[],"--url",`http://localhost:${H}`],A;try{A=oA("cloudflared",b,{stdio:["ignore","pipe","pipe"]})}catch(I){T(I.code==="ENOENT"?Error(hT):I);return}let a=!1,r="",L=()=>{clearTimeout(h),A.stdout?.off("data",c),A.stderr?.off("data",c),A.off("error",u),A.off("exit",n)},c=(I)=>{if(r+=typeof I==="string"?I:I.toString(),r.length>65536)r=r.slice(-32768);let l=r.match(RA);if(l&&!a)a=!0,L(),t({url:l[0],pid:A.pid,child:A,stop:()=>{try{A.kill("SIGTERM")}catch{}}})},u=(I)=>{if(a)return;a=!0,L();try{A.kill()}catch{}T(I.code==="ENOENT"?Error(hT):I)},n=(I)=>{if(a)return;a=!0,L();let l=r.split(`
114
+ Permissions: ${Oe().join(", ")}`),process.exit(1);let t=_.device?eH(_.device):aH();if(!t)console.error("No booted simulator. Boot one or pass -d <udid|name>."),process.exit(1);if(_.verb==="list"){let b={udid:t,bundleId:_.bundleId??null,tcc:da(t,_.bundleId),location:pa(t,_.bundleId),notifications:Ga(t,_.bundleId)};console.log(JSON.stringify(b,null,$?0:2)),process.exit(0)}let T=_.bundleId;try{if(_.permission==="all")for(let b of Oe())kt(t,"reset",b,void 0,T);else kt(t,_.verb,_.permission,_.value,T)}catch(b){console.error(b?.message??String(b)),process.exit(1)}if($)console.log(JSON.stringify({udid:t,verb:_.verb,permission:_.permission,value:_.value??null,bundleId:T}));else{let b=_.value?` (${_.value})`:"";console.log(`\uD83D\uDD10 ${_.verb} ${_.permission}${b} for ${T} on ${t}`)}process.exit(0)}Fe();we();import{spawn as cA}from"child_process";import{randomBytes as RA}from"crypto";var sA=/https:\/\/[a-z0-9-]+\.trycloudflare\.com/,nT=30000,iT="cloudflared not found on PATH. Install it with `brew install cloudflared` (macOS) or see https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/.";function je(H){return`${H.toLowerCase().replace(/[^a-z0-9-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40)||"serve-sim"}-${RA(4).toString("hex")}`}function Qe(H,$){if(($?.provider??"cloudflare")==="ngrok")return hA(H,{timeoutMs:$?.timeoutMs,domain:$?.domain,label:$?.label});return uA(H,{timeoutMs:$?.timeoutMs,protocol:$?.protocol})}function uA(H,$){let e=$?.timeoutMs??nT,_=$?.protocol;return new Promise((t,T)=>{let b=["tunnel","--no-autoupdate",..._?["--protocol",_]:[],"--url",`http://localhost:${H}`],A;try{A=cA("cloudflared",b,{stdio:["ignore","pipe","pipe"]})}catch(I){T(I.code==="ENOENT"?Error(iT):I);return}let a=!1,r="",L=()=>{clearTimeout(h),A.stdout?.off("data",c),A.stderr?.off("data",c),A.off("error",u),A.off("exit",n)},c=(I)=>{if(r+=typeof I==="string"?I:I.toString(),r.length>65536)r=r.slice(-32768);let l=r.match(sA);if(l&&!a)a=!0,L(),t({url:l[0],pid:A.pid,child:A,stop:()=>{try{A.kill("SIGTERM")}catch{}}})},u=(I)=>{if(a)return;a=!0,L();try{A.kill()}catch{}T(I.code==="ENOENT"?Error(iT):I)},n=(I)=>{if(a)return;a=!0,L();let l=r.split(`
115
115
  `).slice(-5).join(`
116
116
  `).trim();T(Error(`cloudflared exited (code ${I}) before producing a URL`+(l?`:
117
- ${l}`:"")))},h=setTimeout(()=>{if(a)return;a=!0,L();try{A.kill()}catch{}T(Error(`cloudflared did not produce a URL within ${e}ms`))},e);A.stdout?.on("data",c),A.stderr?.on("data",c),A.on("error",u),A.on("exit",n)})}async function uA(H,$){let e=$?.timeoutMs??iT,_=await hA(),t=$?.domain?iA($.domain,$.label):void 0,T={addr:H};if(process.env.NGROK_AUTHTOKEN)T.authtoken=process.env.NGROK_AUTHTOKEN;if(t)T.domain=t;let b=await nA(_(T),e,`ngrok did not produce a URL within ${e}ms`,(a)=>{a.close()}),A=b.url();if(!A)throw await b.close().catch(()=>{}),Error("ngrok started but did not return a URL");return{url:A,stop:()=>{b.close().catch(()=>{})}}}async function hA(){try{let H=await Promise.resolve().then(() => Ie(uT(),1)),$=H.forward??H.default?.forward;if(typeof $!=="function")throw Error("@ngrok/ngrok does not export forward()");return $}catch(H){let $=H instanceof Error?H.message:String(H);throw Error(`Unable to load @ngrok/ngrok: ${$}. Run \`bun install\` or install the package before using --tunnel-provider ngrok.`)}}function iA(H,$){let e=H.replace(/^https?:\/\//i,"").replace(/^\*\./,"").replace(/\/+$/,"");if(!$)return e;return`${$}.${e}`}function nA(H,$,e,_){let t=!1;return new Promise((T,b)=>{let A=setTimeout(()=>{t=!0,b(Error(e))},$);H.then((a)=>{if(clearTimeout(A),t){_?.(a);return}T(a)},(a)=>{clearTimeout(A),b(a)})})}var $$="./serve-sim-bin-cj01ds0s.";var pH=P$(import.meta.url);function pR(){return"0.1.34"}var m_=new Set;function Wb(H){return m_.add(H),H}function BR(){for(let H of m_)try{H.stop()}catch{}m_.clear()}process.on("exit",BR);function Z_(H,$){if($){let e=$.replace(/\/+$/,""),_=e.replace(/^http(s?):/i,(t,T)=>`ws${T}:`);return{url:e,streamUrl:`${e}/stream.avcc`,wsUrl:`${_}/ws`}}return{url:`http://127.0.0.1:${H}`,streamUrl:`http://127.0.0.1:${H}/stream.mjpeg`,wsUrl:`ws://127.0.0.1:${H}/ws`}}function U_(){if(!V(EH))ae(EH,{recursive:!0})}function uH(H){if(H)return q_(k$(H));for(let $ of m$()){let e=q_($);if(e)return e}return null}var be={at:0,booted:null};function OR(){let H=Date.now();if(be.booted&&H-be.at<1000)return be.booted;try{let $=_H("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),e=JSON.parse($),_=new Set;for(let t of Object.values(e.devices))for(let T of t)if(T.state==="Booted")_.add(T.udid);return be={at:H,booted:_},_}catch{return null}}function q_(H){try{if(!V(H))return NH("state file missing %s",H),null;let $=JSON.parse(oH(H,"utf-8"));try{process.kill($.pid,0)}catch{return NH("helper pid %d dead, removing stale state %s",$.pid,H),T$(H),null}let e=OR();if(e&&!e.has($.device)){NH("helper pid %d bound to non-booted device %s — killing stale helper",$.pid,$.device),console.error(`[serve-sim] Helper pid ${$.pid} is bound to device ${$.device} which is no longer booted — killing stale helper.`);try{process.kill($.pid,"SIGTERM")}catch{}try{T$(H)}catch{}return null}return NH("state ok pid=%d device=%s port=%d",$.pid,$.device,$.port),$}catch($){return NH("readStateFile threw for %s: %o",H,$),null}}function ce(){let H=[];for(let $ of m$()){let e=q_($);if(e)H.push(e)}return H}function MR(H){U_(),oe(k$(H.device),JSON.stringify(H,null,2)),NH("wrote state pid=%d device=%s port=%d",H.pid,H.device,H.port)}function O$(H){if(H){NH("clearState device=%s",H);try{T$(k$(H))}catch{}}else{NH("clearState (all)");for(let $ of m$())try{T$($)}catch{}}}function GR(){let H=$$.startsWith("/$bunfs/");if(!H&&V($$))return $$;if(!H){let T=nH(pH,"../bin/serve-sim-bin");if(V(T))return T;throw Error(`serve-sim-bin not found. Run 'bun run build:swift' first.
118
- Checked: ${$$}, ${T}`)}let $=oH($$),e=F_("sha256").update($).digest("hex").slice(0,16),_=nH(dR(),"Library/Caches/serve-sim");ae(_,{recursive:!0});let t=nH(_,`serve-sim-bin-${e}`);if(!V(t)){oe(t,$),CR(t,493);try{_H(`codesign -s - -f ${JSON.stringify(t)}`,{stdio:"ignore"})}catch{}}return t}function J_(){try{let H=_H("xcrun simctl list devices -j",{encoding:"utf-8"}),$=JSON.parse(H),e=Object.keys($.devices).filter((_)=>/SimRuntime\.iOS-/i.test(_)).sort((_,t)=>{let T=(_.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number),b=(t.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number);return(b[0]??0)-(T[0]??0)||(b[1]??0)-(T[1]??0)});for(let _ of e){let T=($.devices[_]??[]).find((b)=>b.isAvailable!==!1&&/^iPhone\b/i.test(b.name));if(T)return{udid:T.udid,name:T.name}}}catch{}return null}function yb(H){try{let $=_H("xcrun simctl list devices -j",{encoding:"utf-8"}),e=JSON.parse($);for(let _ of Object.values(e.devices))for(let t of _)if(t.udid===H)return t.name}catch{}return null}function Fb(H){try{let $=_H("xcrun simctl list devices -j",{encoding:"utf-8"}),e=JSON.parse($);for(let _ of Object.values(e.devices))for(let t of _)if(t.udid===H)return t.state==="Booted"}catch{}return!1}function wH(H){try{return process.kill(H,0),!0}catch{return!1}}function P_(H){try{process.kill(H,"SIGTERM")}catch{return}let $=Date.now()+500;while(Date.now()<$)try{process.kill(H,0),mH(25)}catch{return}try{process.kill(H,"SIGKILL")}catch{}let e=Date.now()+500;while(Date.now()<e)try{process.kill(H,0),mH(25)}catch{return}}function gR(H){if(!Fb(H))try{_H(`xcrun simctl boot ${H}`,{encoding:"utf-8",stdio:"pipe"})}catch($){let e=($.stderr??$.message??"").toLowerCase();if(!e.includes("booted")&&!e.includes("current state"))throw Error(`Failed to boot device ${H}: ${$.stderr||$.message}`)}try{_H("open -ga Simulator",{encoding:"utf-8",stdio:"pipe",timeout:3000})}catch{}}function SR(){let H=lR();for(let $ of Object.values(H))for(let e of $??[])if(e.family==="IPv4"&&!e.internal)return e.address;return null}async function w_(H){let $=new Set(ce().map((e)=>e.port));for(let e=H;e<H+100;e++){if($.has(e))continue;if(await Ot(e))return e}throw Error(`No available port found in range ${H}-${H+99}`)}async function kR(H){gR(H);try{_H(`xcrun simctl bootstatus ${H} -b`,{encoding:"utf-8",stdio:"pipe",timeout:60000})}catch($){if(!Fb(H))console.error(`Device ${H} failed to reach booted state: ${$.stderr||$.message}`),process.exit(1)}}function Zb(H){return[H.udid,"--port",String(H.port),...H.stream?.maxFps?["--max-fps",String(H.stream.maxFps)]:[],...H.stream?.quality?["--quality",String(H.stream.quality)]:[],...H.stream?.maxDimension?["--max-dimension",String(H.stream.maxDimension)]:[],...H.h264Bitrate?["--h264-bitrate",String(H.h264Bitrate)]:[],...H.h264MaxFps?["--h264-max-fps",String(H.h264MaxFps)]:[]]}async function Ub(H,$,e,_){let t=!1,T=Date.now();TH("waitForHelperReady pid=%d url=%s",H,$);for(let A=0;A<30;A++){if(!_()){TH("helper pid=%d died during /health polling (attempt %d)",H,A);break}try{if((await fetch(`${$}/health`)).ok){t=!0,TH("helper pid=%d /health ok after %dms",H,Date.now()-T);break}}catch{}await new Promise((a)=>setTimeout(a,100))}if(!t)TH("helper pid=%d /health never responded (%dms)",H,Date.now()-T);if(t){let A=Date.now(),a=A+8000,r=!1;while(Date.now()<a){if(await new Promise((L)=>setTimeout(L,200)),!_()){TH("helper pid=%d died while awaiting Capture started",H),t=!1;break}try{if(oH(e,"utf-8").includes("Capture started")){r=!0,TH("helper pid=%d saw 'Capture started' after %dms",H,Date.now()-A);break}}catch{}}if(t&&!r)TH("helper pid=%d ready but never logged 'Capture started' within %dms — stream may not produce frames",H,Date.now()-A)}let b="";try{b=oH(e,"utf-8").trim()}catch{}return{ready:t,log:b}}async function mR(H){let{helperPath:$,port:e,host:_,logFile:t}=H,T=`http://${_}:${e}`;U_();let b=re(t,"w"),A=W_($,Zb(H),{detached:!0,stdio:["ignore",b,b]});A.unref(),Ae(b);let a=A.pid,r=!1;A.once("exit",()=>{r=!0});let{ready:L,log:c}=await Ub(a,T,t,()=>!r&&wH(a));return{ready:L,pid:a,exited:r||!wH(a),log:c}}async function qR(H){let{helperPath:$,port:e,host:_,logFile:t}=H,T=`http://${_}:${e}`;U_();let b=re(t,"w"),A=W_($,Zb(H),{detached:!1,stdio:["ignore",b,b]});Ae(b);let a=A.pid,r=!1;A.once("exit",()=>{r=!0});let{ready:L,log:c}=await Ub(a,T,t,()=>!r&&wH(a));return{ready:L,child:A,log:c}}async function X_(H,$,e){TH("startHelper udid=%s port=%d detach=%s",H,$,e.detach),await kR(H);let _="127.0.0.1",t=GR(),T=AH(EH,`server-${H}.log`);TH("helper binary=%s logFile=%s",t,T);let b={helperPath:t,udid:H,port:$,host:_,logFile:T,stream:e.stream,h264Bitrate:e.h264Bitrate,h264MaxFps:e.h264MaxFps},A="",a=2,r=async(c,u)=>{let n;if(e.tunnel)try{n=Wb(await Qe($,{provider:e.tunnelProvider,protocol:e.tunnelProtocol,domain:e.tunnelDomain,label:e.tunnelDomain?je(`sim-${H.replace(/-/g,"").slice(0,8)}`):void 0}))}catch(h){try{process.kill(c,"SIGTERM")}catch{}console.error(`Tunnel failed: ${h.message}`),process.exit(1)}return MR({pid:c,port:$,device:H,...Z_($,n?.url)}),{pid:c,child:u,tunnel:n}};for(let c=1;c<=a;c++){if(TH("spawn attempt %d/%d",c,a),Gt($),e.detach){let u=await mR(b);if(TH("spawnHelperDetached result ready=%s pid=%d exited=%s",u.ready,u.pid,u.exited),u.ready)return r(u.pid);P_(u.pid),A=u.log}else{let u=await qR(b);if(TH("spawnHelperAttached result ready=%s pid=%d",u.ready,u.child.pid),u.ready)return r(u.child.pid,u.child);P_(u.child.pid),A=u.log}if(c<a)await new Promise((u)=>setTimeout(u,500))}let L=A?`Helper failed:
119
- ${A}`:"Helper process failed to start";console.error(L),process.exit(1)}async function PR(H,$,e,_){Je("follow devices=%o startPort=%d",H,$);let t=H.length>0?H.map(eH):(()=>{let L=aH();if(L)return[L];let c=J_();if(!c)console.error("No device specified and no available iOS simulator found."),process.exit(1);if(!e)console.log(`No booted simulator — booting ${c.name}...`);return[c.udid]})(),T=new Map,b=[],A=$;for(let L of t){let c=_?.tunnel?null:uH(L);if(c){if(!e){let l=yb(L)??L;if(t.length>1)console.log(`
120
- ==> ${l} (${L}) <==`);console.log(` Already running on port ${c.port}`),console.log(` Stream: ${c.streamUrl}`),console.log(` WebSocket: ${c.wsUrl}`)}b.push(c);continue}A=await w_(A);let{pid:u,child:n,tunnel:h}=await X_(L,A,{detach:!1,tunnel:_?.tunnel,tunnelProvider:_?.tunnelProvider,tunnelProtocol:_?.tunnelProtocol,tunnelDomain:_?.tunnelDomain,stream:_?.stream,h264Bitrate:_?.h264Bitrate,h264MaxFps:_?.h264MaxFps});if(n)T.set(L,n);let I={pid:u,port:A,device:L,...Z_(A,h?.url)};if(b.push(I),!e){let l=yb(L)??L;if(t.length>1)console.log(`
117
+ ${l}`:"")))},h=setTimeout(()=>{if(a)return;a=!0,L();try{A.kill()}catch{}T(Error(`cloudflared did not produce a URL within ${e}ms`))},e);A.stdout?.on("data",c),A.stderr?.on("data",c),A.on("error",u),A.on("exit",n)})}async function hA(H,$){let e=$?.timeoutMs??nT,_=await iA(),t=$?.domain?nA($.domain,$.label):void 0,T={addr:H};if(process.env.NGROK_AUTHTOKEN)T.authtoken=process.env.NGROK_AUTHTOKEN;if(t)T.domain=t;let b=await IA(_(T),e,`ngrok did not produce a URL within ${e}ms`,(a)=>{a.close()}),A=b.url();if(!A)throw await b.close().catch(()=>{}),Error("ngrok started but did not return a URL");return{url:A,stop:()=>{b.close().catch(()=>{})}}}async function iA(){try{let H=await Promise.resolve().then(() => Ie(hT(),1)),$=H.forward??H.default?.forward;if(typeof $!=="function")throw Error("@ngrok/ngrok does not export forward()");return $}catch(H){let $=H instanceof Error?H.message:String(H);throw Error(`Unable to load @ngrok/ngrok: ${$}. Run \`bun install\` or install the package before using --tunnel-provider ngrok.`)}}function nA(H,$){let e=H.replace(/^https?:\/\//i,"").replace(/^\*\./,"").replace(/\/+$/,"");if(!$)return e;return`${$}.${e}`}function IA(H,$,e,_){let t=!1;return new Promise((T,b)=>{let A=setTimeout(()=>{t=!0,b(Error(e))},$);H.then((a)=>{if(clearTimeout(A),t){_?.(a);return}T(a)},(a)=>{clearTimeout(A),b(a)})})}var $$="./serve-sim-bin-cj01ds0s.";var pH=P$(import.meta.url);function BR(){return"0.1.35"}var m_=new Set;function Fb(H){return m_.add(H),H}function OR(){for(let H of m_)try{H.stop()}catch{}m_.clear()}process.on("exit",OR);function Z_(H,$){if($){let e=$.replace(/\/+$/,""),_=e.replace(/^http(s?):/i,(t,T)=>`ws${T}:`);return{url:e,streamUrl:`${e}/stream.avcc`,wsUrl:`${_}/ws`}}return{url:`http://127.0.0.1:${H}`,streamUrl:`http://127.0.0.1:${H}/stream.mjpeg`,wsUrl:`ws://127.0.0.1:${H}/ws`}}function U_(H){return H?"avcc":"mjpeg"}function MR(H){return Boolean(H?.codec==="webrtc"||H?.webrtcCodec||(H?.stunUrls?.length??0)>0||H?.turn?.url||H?.turn?.username||H?.turn?.credential)}function GR(H){if(!MR(H))return;console.warn("[serve-sim] WebRTC/TURN flags are accepted for compatibility with serve-sim-szdziedzic, but this build streams tunneled sessions over H.264/AVCC. TURN/STUN settings are not used.")}function J_(){if(!V(EH))ae(EH,{recursive:!0})}function uH(H){if(H)return q_(k$(H));for(let $ of m$()){let e=q_($);if(e)return e}return null}var be={at:0,booted:null};function gR(){let H=Date.now();if(be.booted&&H-be.at<1000)return be.booted;try{let $=_H("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),e=JSON.parse($),_=new Set;for(let t of Object.values(e.devices))for(let T of t)if(T.state==="Booted")_.add(T.udid);return be={at:H,booted:_},_}catch{return null}}function q_(H){try{if(!V(H))return NH("state file missing %s",H),null;let $=JSON.parse(oH(H,"utf-8"));try{process.kill($.pid,0)}catch{return NH("helper pid %d dead, removing stale state %s",$.pid,H),T$(H),null}let e=gR();if(e&&!e.has($.device)){NH("helper pid %d bound to non-booted device %s — killing stale helper",$.pid,$.device),console.error(`[serve-sim] Helper pid ${$.pid} is bound to device ${$.device} which is no longer booted — killing stale helper.`);try{process.kill($.pid,"SIGTERM")}catch{}try{T$(H)}catch{}return null}return NH("state ok pid=%d device=%s port=%d",$.pid,$.device,$.port),$}catch($){return NH("readStateFile threw for %s: %o",H,$),null}}function ce(){let H=[];for(let $ of m$()){let e=q_($);if(e)H.push(e)}return H}function SR(H){J_(),oe(k$(H.device),JSON.stringify(H,null,2)),NH("wrote state pid=%d device=%s port=%d",H.pid,H.device,H.port)}function O$(H){if(H){NH("clearState device=%s",H);try{T$(k$(H))}catch{}}else{NH("clearState (all)");for(let $ of m$())try{T$($)}catch{}}}function kR(){let H=$$.startsWith("/$bunfs/");if(!H&&V($$))return $$;if(!H){let T=nH(pH,"../bin/serve-sim-bin");if(V(T))return T;throw Error(`serve-sim-bin not found. Run 'bun run build:swift' first.
118
+ Checked: ${$$}, ${T}`)}let $=oH($$),e=F_("sha256").update($).digest("hex").slice(0,16),_=nH(lR(),"Library/Caches/serve-sim");ae(_,{recursive:!0});let t=nH(_,`serve-sim-bin-${e}`);if(!V(t)){oe(t,$),NR(t,493);try{_H(`codesign -s - -f ${JSON.stringify(t)}`,{stdio:"ignore"})}catch{}}return t}function w_(){try{let H=_H("xcrun simctl list devices -j",{encoding:"utf-8"}),$=JSON.parse(H),e=Object.keys($.devices).filter((_)=>/SimRuntime\.iOS-/i.test(_)).sort((_,t)=>{let T=(_.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number),b=(t.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number);return(b[0]??0)-(T[0]??0)||(b[1]??0)-(T[1]??0)});for(let _ of e){let T=($.devices[_]??[]).find((b)=>b.isAvailable!==!1&&/^iPhone\b/i.test(b.name));if(T)return{udid:T.udid,name:T.name}}}catch{}return null}function Wb(H){try{let $=_H("xcrun simctl list devices -j",{encoding:"utf-8"}),e=JSON.parse($);for(let _ of Object.values(e.devices))for(let t of _)if(t.udid===H)return t.name}catch{}return null}function Zb(H){try{let $=_H("xcrun simctl list devices -j",{encoding:"utf-8"}),e=JSON.parse($);for(let _ of Object.values(e.devices))for(let t of _)if(t.udid===H)return t.state==="Booted"}catch{}return!1}function wH(H){try{return process.kill(H,0),!0}catch{return!1}}function P_(H){try{process.kill(H,"SIGTERM")}catch{return}let $=Date.now()+500;while(Date.now()<$)try{process.kill(H,0),mH(25)}catch{return}try{process.kill(H,"SIGKILL")}catch{}let e=Date.now()+500;while(Date.now()<e)try{process.kill(H,0),mH(25)}catch{return}}function mR(H){if(!Zb(H))try{_H(`xcrun simctl boot ${H}`,{encoding:"utf-8",stdio:"pipe"})}catch($){let e=($.stderr??$.message??"").toLowerCase();if(!e.includes("booted")&&!e.includes("current state"))throw Error(`Failed to boot device ${H}: ${$.stderr||$.message}`)}try{_H("open -ga Simulator",{encoding:"utf-8",stdio:"pipe",timeout:3000})}catch{}}function qR(){let H=pR();for(let $ of Object.values(H))for(let e of $??[])if(e.family==="IPv4"&&!e.internal)return e.address;return null}async function X_(H){let $=new Set(ce().map((e)=>e.port));for(let e=H;e<H+100;e++){if($.has(e))continue;if(await Mt(e))return e}throw Error(`No available port found in range ${H}-${H+99}`)}async function PR(H){mR(H);try{_H(`xcrun simctl bootstatus ${H} -b`,{encoding:"utf-8",stdio:"pipe",timeout:60000})}catch($){if(!Zb(H))console.error(`Device ${H} failed to reach booted state: ${$.stderr||$.message}`),process.exit(1)}}function Ub(H){return[H.udid,"--port",String(H.port),...H.stream?.maxFps?["--max-fps",String(H.stream.maxFps)]:[],...H.stream?.quality?["--quality",String(H.stream.quality)]:[],...H.stream?.maxDimension?["--max-dimension",String(H.stream.maxDimension)]:[],...H.h264Bitrate?["--h264-bitrate",String(H.h264Bitrate)]:[],...H.h264MaxFps?["--h264-max-fps",String(H.h264MaxFps)]:[]]}async function Jb(H,$,e,_){let t=!1,T=Date.now();TH("waitForHelperReady pid=%d url=%s",H,$);for(let A=0;A<30;A++){if(!_()){TH("helper pid=%d died during /health polling (attempt %d)",H,A);break}try{if((await fetch(`${$}/health`)).ok){t=!0,TH("helper pid=%d /health ok after %dms",H,Date.now()-T);break}}catch{}await new Promise((a)=>setTimeout(a,100))}if(!t)TH("helper pid=%d /health never responded (%dms)",H,Date.now()-T);if(t){let A=Date.now(),a=A+8000,r=!1;while(Date.now()<a){if(await new Promise((L)=>setTimeout(L,200)),!_()){TH("helper pid=%d died while awaiting Capture started",H),t=!1;break}try{if(oH(e,"utf-8").includes("Capture started")){r=!0,TH("helper pid=%d saw 'Capture started' after %dms",H,Date.now()-A);break}}catch{}}if(t&&!r)TH("helper pid=%d ready but never logged 'Capture started' within %dms — stream may not produce frames",H,Date.now()-A)}let b="";try{b=oH(e,"utf-8").trim()}catch{}return{ready:t,log:b}}async function xR(H){let{helperPath:$,port:e,host:_,logFile:t}=H,T=`http://${_}:${e}`;J_();let b=re(t,"w"),A=W_($,Ub(H),{detached:!0,stdio:["ignore",b,b]});A.unref(),Ae(b);let a=A.pid,r=!1;A.once("exit",()=>{r=!0});let{ready:L,log:c}=await Jb(a,T,t,()=>!r&&wH(a));return{ready:L,pid:a,exited:r||!wH(a),log:c}}async function yR(H){let{helperPath:$,port:e,host:_,logFile:t}=H,T=`http://${_}:${e}`;J_();let b=re(t,"w"),A=W_($,Ub(H),{detached:!1,stdio:["ignore",b,b]});Ae(b);let a=A.pid,r=!1;A.once("exit",()=>{r=!0});let{ready:L,log:c}=await Jb(a,T,t,()=>!r&&wH(a));return{ready:L,child:A,log:c}}async function K_(H,$,e){TH("startHelper udid=%s port=%d detach=%s",H,$,e.detach),await PR(H);let _="127.0.0.1",t=kR(),T=AH(EH,`server-${H}.log`);TH("helper binary=%s logFile=%s",t,T);let b={helperPath:t,udid:H,port:$,host:_,logFile:T,stream:e.stream,h264Bitrate:e.h264Bitrate,h264MaxFps:e.h264MaxFps},A="",a=2,r=async(c,u)=>{let n;if(e.tunnel)try{n=Fb(await Qe($,{provider:e.tunnelProvider,protocol:e.tunnelProtocol,domain:e.tunnelDomain,label:e.tunnelDomain?je(`sim-${H.replace(/-/g,"").slice(0,8)}`):void 0}))}catch(h){try{process.kill(c,"SIGTERM")}catch{}console.error(`Tunnel failed: ${h.message}`),process.exit(1)}return SR({pid:c,port:$,device:H,codec:U_(n?.url),...Z_($,n?.url)}),{pid:c,child:u,tunnel:n}};for(let c=1;c<=a;c++){if(TH("spawn attempt %d/%d",c,a),gt($),e.detach){let u=await xR(b);if(TH("spawnHelperDetached result ready=%s pid=%d exited=%s",u.ready,u.pid,u.exited),u.ready)return r(u.pid);P_(u.pid),A=u.log}else{let u=await yR(b);if(TH("spawnHelperAttached result ready=%s pid=%d",u.ready,u.child.pid),u.ready)return r(u.child.pid,u.child);P_(u.child.pid),A=u.log}if(c<a)await new Promise((u)=>setTimeout(u,500))}let L=A?`Helper failed:
119
+ ${A}`:"Helper process failed to start";console.error(L),process.exit(1)}async function WR(H,$,e,_){Je("follow devices=%o startPort=%d",H,$);let t=H.length>0?H.map(eH):(()=>{let L=aH();if(L)return[L];let c=w_();if(!c)console.error("No device specified and no available iOS simulator found."),process.exit(1);if(!e)console.log(`No booted simulator — booting ${c.name}...`);return[c.udid]})(),T=new Map,b=[],A=$;for(let L of t){let c=_?.tunnel?null:uH(L);if(c){if(!e){let l=Wb(L)??L;if(t.length>1)console.log(`
120
+ ==> ${l} (${L}) <==`);console.log(` Already running on port ${c.port}`),console.log(` Stream: ${c.streamUrl}`),console.log(` WebSocket: ${c.wsUrl}`)}b.push(c);continue}A=await X_(A);let{pid:u,child:n,tunnel:h}=await K_(L,A,{detach:!1,tunnel:_?.tunnel,tunnelProvider:_?.tunnelProvider,tunnelProtocol:_?.tunnelProtocol,tunnelDomain:_?.tunnelDomain,stream:_?.stream,h264Bitrate:_?.h264Bitrate,h264MaxFps:_?.h264MaxFps});if(n)T.set(L,n);let I={pid:u,port:A,device:L,codec:U_(h?.url),...Z_(A,h?.url)};if(b.push(I),!e){let l=Wb(L)??L;if(t.length>1)console.log(`
121
121
  ==> ${l} (${L}) <==`);console.log(` Stream: ${I.streamUrl}`),console.log(` WebSocket: ${I.wsUrl}`),console.log(` Port: ${A}`)}A++}if(b.length===1){let L=b[0];console.log(JSON.stringify({url:L.url,streamUrl:L.streamUrl,wsUrl:L.wsUrl,port:L.port,device:L.device}))}else console.log(JSON.stringify({devices:b.map((L)=>({url:L.url,streamUrl:L.streamUrl,wsUrl:L.wsUrl,port:L.port,device:L.device}))}));if(T.size===0)return;let a=!1,r=(L)=>{if(a)return;if(a=!0,!e)console.log(`
122
- Shutting down...`);for(let[c,u]of T){let n=u.pid;if(n)P_(n);O$(c)}T.clear(),process.exit(L)};for(let[L,c]of T)c.on("exit",(u)=>{if(TH("child exit udid=%s pid=%d code=%s",L,c.pid,u),a)return;if(!e)console.error(`[${L}] Helper exited (code ${u})`);if(O$(L),T.delete(L),T.size===0)r(u??1)});process.on("SIGINT",()=>r(0)),process.on("SIGTERM",()=>r(0)),process.on("SIGHUP",()=>r(0)),process.on("exit",()=>{for(let[L,c]of T){try{if(c.pid)process.kill(c.pid,"SIGTERM")}catch{}try{O$(L)}catch{}}}),await new Promise(()=>{})}async function x_(H,$,e,_){Je("detach devices=%o startPort=%d",H,$);let t=H.length>0?H.map(eH):(()=>{let A=aH();if(A)return[A];let a=J_();if(!a)console.error("No device specified and no available iOS simulator found."),process.exit(1);return[a.udid]})(),T=[],b=$;for(let A of t){let a=uH(A);if(a){T.push(a);continue}b=await w_(b),await X_(A,b,{detach:!0,stream:e,h264Bitrate:_?.bitrate,h264MaxFps:_?.maxFps}),T.push({pid:uH(A).pid,port:b,device:A,...Z_(b)}),b++}return T}function xR(H){if(H.length===1){let $=H[0];console.log(JSON.stringify({url:$.url,streamUrl:$.streamUrl,wsUrl:$.wsUrl,port:$.port,device:$.device}))}else console.log(JSON.stringify({devices:H.map(($)=>({url:$.url,streamUrl:$.streamUrl,wsUrl:$.wsUrl,port:$.port,device:$.device}))}))}function yR(H){if(H){let e=eH(H),_=uH(e);if(!_)console.log(JSON.stringify({running:!1,device:e}));else console.log(JSON.stringify({running:!0,url:_.url,streamUrl:_.streamUrl,wsUrl:_.wsUrl,port:_.port,device:_.device,pid:_.pid}));return}let $=ce();if($.length===0)console.log(JSON.stringify({running:!1}));else if($.length===1){let e=$[0];console.log(JSON.stringify({running:!0,url:e.url,streamUrl:e.streamUrl,wsUrl:e.wsUrl,port:e.port,device:e.device,pid:e.pid}))}else console.log(JSON.stringify({running:!0,streams:$.map((e)=>({url:e.url,streamUrl:e.streamUrl,wsUrl:e.wsUrl,port:e.port,device:e.device,pid:e.pid}))}))}function WR(H){if(H){let $=eH(H),e=uH($);if(!e){console.log(JSON.stringify({disconnected:!0,device:$}));return}try{process.kill(e.pid,"SIGTERM")}catch{}O$($),console.log(JSON.stringify({disconnected:!0,device:e.device}))}else{let $=ce();if($.length===0){console.log(JSON.stringify({disconnected:!0,devices:[]}));return}let e=[];for(let _ of $){try{process.kill(_.pid,"SIGTERM")}catch{}e.push(_.device)}O$(),console.log(JSON.stringify({disconnected:!0,devices:e}))}}async function FR(H,$){let e=uH($);if(!e)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let _;try{_=JSON.parse(H)}catch{console.error("Invalid JSON:",H),process.exit(1)}return new Promise((t,T)=>{let b=new WebSocket(e.wsUrl);b.binaryType="arraybuffer",b.onopen=()=>{let A=new TextEncoder().encode(JSON.stringify(_)),a=new Uint8Array(1+A.length);a[0]=3,a.set(A,1),b.send(a),setTimeout(()=>{b.close(),t()},50)},b.onerror=()=>{console.error("Failed to connect to serve-sim server at",e.wsUrl),T(Error("WebSocket connection failed"))}})}async function ZR(H,$,e){let _=Number(H),t=Number($);if(!Number.isFinite(_)||!Number.isFinite(t)||_<0||_>1||t<0||t>1)console.error("Usage: serve-sim-sjchmiela tap <x> <y> [-d udid]"),console.error(" x, y are normalized 0..1 of the simulator screen"),console.error(" Example: serve-sim-sjchmiela tap 0.5 0.9 # near bottom-center"),process.exit(1);let T=uH(e);if(!T)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((b,A)=>{let a=new WebSocket(T.wsUrl);a.binaryType="arraybuffer";let r=(L)=>{let c=new TextEncoder().encode(JSON.stringify({type:L,x:_,y:t})),u=new Uint8Array(1+c.length);u[0]=3,u.set(c,1),a.send(u)};a.onopen=()=>{r("begin"),setTimeout(()=>{r("end"),setTimeout(()=>{a.close(),b()},50)},40)},a.onerror=()=>{console.error("Failed to connect to serve-sim server at",T.wsUrl),A(Error("WebSocket connection failed"))}})}async function UR(H,$){let e=$.device,_=$.stdin??!1,t=$.file,T=[H.length>0,_,t!=null].filter(Boolean).length;if(T===0||T>1)console.error("Usage: serve-sim-sjchmiela type <text> [-d udid]"),console.error(" serve-sim type --stdin [-d udid]"),console.error(" serve-sim type --file <path> [-d udid]"),console.error(""),console.error("Only US-keyboard ASCII characters are supported (A-Z, a-z, 0-9,"),console.error("space, newline, tab, and standard punctuation)."),process.exit(1);let b;if(_)b=oH(0,"utf8");else if(t)try{b=oH(t,"utf8")}catch(r){console.error(`Failed to read file '${t}': ${r.message}`),process.exit(1)}else b=H.join(" ");let A;try{A=Bt(b)}catch(r){if(r instanceof q$)console.error(r.message),console.error("Supported: A-Z, a-z, 0-9, space, newline, tab, and standard punctuation."),process.exit(1);throw r}let a=uH(e);if(!a)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);await pt(a.wsUrl,A)}async function JR(H,$){let e=uH($);if(!e)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let _=new Set(["portrait","portrait_upside_down","landscape_left","landscape_right"]);if(!H||!_.has(H))console.error(`Usage: serve-sim-sjchmiela rotate <${[..._].join("|")}> [-d udid]`),process.exit(1);return new Promise((t,T)=>{let b=new WebSocket(e.wsUrl);b.binaryType="arraybuffer",b.onopen=()=>{let A=new TextEncoder().encode(JSON.stringify({orientation:H})),a=new Uint8Array(1+A.length);a[0]=7,a.set(A,1),b.send(a),setTimeout(()=>{b.close(),t()},50)},b.onerror=()=>{console.error("Failed to connect to serve-sim server at",e.wsUrl),T(Error("WebSocket connection failed"))}})}async function wR(H="home",$){let e=uH($);if(!e)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((_,t)=>{let T=new WebSocket(e.wsUrl);T.binaryType="arraybuffer",T.onopen=()=>{let b=new TextEncoder().encode(JSON.stringify({button:H})),A=new Uint8Array(1+b.length);A[0]=4,A.set(b,1),T.send(A),setTimeout(()=>{T.close(),_()},50)},T.onerror=()=>{console.error("Failed to connect to serve-sim server at",e.wsUrl),t(Error("WebSocket connection failed"))}})}async function XR(H,$,e){let _=($??"").toLowerCase(),t=_==="on"||_==="1"||_==="true",T={blended:"debug_color_blended",copies:"debug_color_copies",copied:"debug_color_copies",misaligned:"debug_color_misaligned",offscreen:"debug_color_offscreen","slow-animations":"debug_slow_animations",slow:"debug_slow_animations"},b=H?T[H]??H:void 0;if(!b||!["on","off","1","0","true","false"].includes(_))console.error(`Usage: serve-sim-sjchmiela ca-debug <option> <on|off> [-d udid]
123
- option shortcuts: ${Object.keys(T).join(", ")}`),process.exit(1);let A=uH(e);if(!A)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((a,r)=>{let L=new WebSocket(A.wsUrl);L.binaryType="arraybuffer",L.onopen=()=>{let c=new TextEncoder().encode(JSON.stringify({option:b,enabled:t})),u=new Uint8Array(1+c.length);u[0]=8,u.set(c,1),L.send(u),setTimeout(()=>{L.close(),a()},50)},L.onerror=()=>{console.error("Failed to connect to serve-sim server at",A.wsUrl),r(Error("WebSocket connection failed"))}})}async function KR(H){let $=uH(H);if(!$)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((e,_)=>{let t=new WebSocket($.wsUrl);t.binaryType="arraybuffer",t.onopen=()=>{t.send(new Uint8Array([9])),setTimeout(()=>{t.close(),e()},50)},t.onerror=()=>{console.error("Failed to connect to serve-sim server at",$.wsUrl),_(Error("WebSocket connection failed"))}})}function Jb(){let H=[AH(pH,"..","dist","simcam","libSimCameraInjector.dylib"),AH(pH,"simcam","libSimCameraInjector.dylib"),AH(pH,"..","Sources","SimCameraInjector","build","libSimCameraInjector.dylib")];for(let $ of H)if(V($))return nH($);return null}function vR(){let H=AH(pH,"..","Sources","SimCameraInjector","build.sh");if(!V(H))throw Error("SimCameraInjector source not found — this build of serve-sim does not "+"include camera support sources. Reinstall from a recent release.");console.error("[serve-sim] building libSimCameraInjector.dylib (one-time)…"),_H(`bash "${H}"`,{stdio:"inherit"});let $=Jb();if(!$)throw Error("Build succeeded but dylib not found.");return $}function K_(){let H=[AH(pH,"..","dist","simcam","serve-sim-camera-helper"),AH(pH,"simcam","serve-sim-camera-helper")];for(let $ of H)if(V($))return nH($);return null}function wb(){let H=AH(pH,"..","Sources","SimCameraHelper","build.sh");if(!V(H))throw Error("SimCameraHelper source not found — webcam support requires building "+"from a checkout that includes Sources/SimCameraHelper.");console.error("[serve-sim] building serve-sim-camera-helper (one-time)…"),_H(`bash "${H}"`,{stdio:"inherit"});let $=K_();if(!$)throw Error("Build succeeded but helper binary not found.");return $}var JH=AH(EH,"simcam");function VR(H){return`/serve-sim-cam-${F_("sha1").update(H).digest("hex").slice(0,8)}`}function b$(H){return AH(JH,`${H}.pid`)}function v_(H){return AH(JH,`${H}.bundles.json`)}function V_(H){return`/tmp/serve-sim-cam-${F_("sha1").update(H).digest("hex").slice(0,12)}.sock`}async function B$(H,$){let e=V_(H);if(!V(e))throw Error("camera helper socket not found");let _=await import("net");return await new Promise((t,T)=>{let b=_.createConnection(e),A="",a=!1;b.on("data",(r)=>{A+=r.toString();let L=A.indexOf(`
122
+ Shutting down...`);for(let[c,u]of T){let n=u.pid;if(n)P_(n);O$(c)}T.clear(),process.exit(L)};for(let[L,c]of T)c.on("exit",(u)=>{if(TH("child exit udid=%s pid=%d code=%s",L,c.pid,u),a)return;if(!e)console.error(`[${L}] Helper exited (code ${u})`);if(O$(L),T.delete(L),T.size===0)r(u??1)});process.on("SIGINT",()=>r(0)),process.on("SIGTERM",()=>r(0)),process.on("SIGHUP",()=>r(0)),process.on("exit",()=>{for(let[L,c]of T){try{if(c.pid)process.kill(c.pid,"SIGTERM")}catch{}try{O$(L)}catch{}}}),await new Promise(()=>{})}async function x_(H,$,e,_){Je("detach devices=%o startPort=%d",H,$);let t=H.length>0?H.map(eH):(()=>{let A=aH();if(A)return[A];let a=w_();if(!a)console.error("No device specified and no available iOS simulator found."),process.exit(1);return[a.udid]})(),T=[],b=$;for(let A of t){let a=uH(A);if(a){T.push(a);continue}b=await X_(b),await K_(A,b,{detach:!0,stream:e,h264Bitrate:_?.bitrate,h264MaxFps:_?.maxFps}),T.push({pid:uH(A).pid,port:b,device:A,codec:U_(),...Z_(b)}),b++}return T}function FR(H){if(H.length===1){let $=H[0];console.log(JSON.stringify({url:$.url,streamUrl:$.streamUrl,wsUrl:$.wsUrl,port:$.port,device:$.device}))}else console.log(JSON.stringify({devices:H.map(($)=>({url:$.url,streamUrl:$.streamUrl,wsUrl:$.wsUrl,port:$.port,device:$.device}))}))}function ZR(H){if(H){let e=eH(H),_=uH(e);if(!_)console.log(JSON.stringify({running:!1,device:e}));else console.log(JSON.stringify({running:!0,url:_.url,streamUrl:_.streamUrl,wsUrl:_.wsUrl,port:_.port,device:_.device,pid:_.pid}));return}let $=ce();if($.length===0)console.log(JSON.stringify({running:!1}));else if($.length===1){let e=$[0];console.log(JSON.stringify({running:!0,url:e.url,streamUrl:e.streamUrl,wsUrl:e.wsUrl,port:e.port,device:e.device,pid:e.pid}))}else console.log(JSON.stringify({running:!0,streams:$.map((e)=>({url:e.url,streamUrl:e.streamUrl,wsUrl:e.wsUrl,port:e.port,device:e.device,pid:e.pid}))}))}function UR(H){if(H){let $=eH(H),e=uH($);if(!e){console.log(JSON.stringify({disconnected:!0,device:$}));return}try{process.kill(e.pid,"SIGTERM")}catch{}O$($),console.log(JSON.stringify({disconnected:!0,device:e.device}))}else{let $=ce();if($.length===0){console.log(JSON.stringify({disconnected:!0,devices:[]}));return}let e=[];for(let _ of $){try{process.kill(_.pid,"SIGTERM")}catch{}e.push(_.device)}O$(),console.log(JSON.stringify({disconnected:!0,devices:e}))}}async function JR(H,$){let e=uH($);if(!e)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let _;try{_=JSON.parse(H)}catch{console.error("Invalid JSON:",H),process.exit(1)}return new Promise((t,T)=>{let b=new WebSocket(e.wsUrl);b.binaryType="arraybuffer",b.onopen=()=>{let A=new TextEncoder().encode(JSON.stringify(_)),a=new Uint8Array(1+A.length);a[0]=3,a.set(A,1),b.send(a),setTimeout(()=>{b.close(),t()},50)},b.onerror=()=>{console.error("Failed to connect to serve-sim server at",e.wsUrl),T(Error("WebSocket connection failed"))}})}async function wR(H,$,e){let _=Number(H),t=Number($);if(!Number.isFinite(_)||!Number.isFinite(t)||_<0||_>1||t<0||t>1)console.error("Usage: serve-sim-sjchmiela tap <x> <y> [-d udid]"),console.error(" x, y are normalized 0..1 of the simulator screen"),console.error(" Example: serve-sim-sjchmiela tap 0.5 0.9 # near bottom-center"),process.exit(1);let T=uH(e);if(!T)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((b,A)=>{let a=new WebSocket(T.wsUrl);a.binaryType="arraybuffer";let r=(L)=>{let c=new TextEncoder().encode(JSON.stringify({type:L,x:_,y:t})),u=new Uint8Array(1+c.length);u[0]=3,u.set(c,1),a.send(u)};a.onopen=()=>{r("begin"),setTimeout(()=>{r("end"),setTimeout(()=>{a.close(),b()},50)},40)},a.onerror=()=>{console.error("Failed to connect to serve-sim server at",T.wsUrl),A(Error("WebSocket connection failed"))}})}async function XR(H,$){let e=$.device,_=$.stdin??!1,t=$.file,T=[H.length>0,_,t!=null].filter(Boolean).length;if(T===0||T>1)console.error("Usage: serve-sim-sjchmiela type <text> [-d udid]"),console.error(" serve-sim type --stdin [-d udid]"),console.error(" serve-sim type --file <path> [-d udid]"),console.error(""),console.error("Only US-keyboard ASCII characters are supported (A-Z, a-z, 0-9,"),console.error("space, newline, tab, and standard punctuation)."),process.exit(1);let b;if(_)b=oH(0,"utf8");else if(t)try{b=oH(t,"utf8")}catch(r){console.error(`Failed to read file '${t}': ${r.message}`),process.exit(1)}else b=H.join(" ");let A;try{A=Ot(b)}catch(r){if(r instanceof q$)console.error(r.message),console.error("Supported: A-Z, a-z, 0-9, space, newline, tab, and standard punctuation."),process.exit(1);throw r}let a=uH(e);if(!a)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);await Bt(a.wsUrl,A)}async function KR(H,$){let e=uH($);if(!e)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let _=new Set(["portrait","portrait_upside_down","landscape_left","landscape_right"]);if(!H||!_.has(H))console.error(`Usage: serve-sim-sjchmiela rotate <${[..._].join("|")}> [-d udid]`),process.exit(1);return new Promise((t,T)=>{let b=new WebSocket(e.wsUrl);b.binaryType="arraybuffer",b.onopen=()=>{let A=new TextEncoder().encode(JSON.stringify({orientation:H})),a=new Uint8Array(1+A.length);a[0]=7,a.set(A,1),b.send(a),setTimeout(()=>{b.close(),t()},50)},b.onerror=()=>{console.error("Failed to connect to serve-sim server at",e.wsUrl),T(Error("WebSocket connection failed"))}})}async function vR(H="home",$){let e=uH($);if(!e)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((_,t)=>{let T=new WebSocket(e.wsUrl);T.binaryType="arraybuffer",T.onopen=()=>{let b=new TextEncoder().encode(JSON.stringify({button:H})),A=new Uint8Array(1+b.length);A[0]=4,A.set(b,1),T.send(A),setTimeout(()=>{T.close(),_()},50)},T.onerror=()=>{console.error("Failed to connect to serve-sim server at",e.wsUrl),t(Error("WebSocket connection failed"))}})}async function VR(H,$,e){let _=($??"").toLowerCase(),t=_==="on"||_==="1"||_==="true",T={blended:"debug_color_blended",copies:"debug_color_copies",copied:"debug_color_copies",misaligned:"debug_color_misaligned",offscreen:"debug_color_offscreen","slow-animations":"debug_slow_animations",slow:"debug_slow_animations"},b=H?T[H]??H:void 0;if(!b||!["on","off","1","0","true","false"].includes(_))console.error(`Usage: serve-sim-sjchmiela ca-debug <option> <on|off> [-d udid]
123
+ option shortcuts: ${Object.keys(T).join(", ")}`),process.exit(1);let A=uH(e);if(!A)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((a,r)=>{let L=new WebSocket(A.wsUrl);L.binaryType="arraybuffer",L.onopen=()=>{let c=new TextEncoder().encode(JSON.stringify({option:b,enabled:t})),u=new Uint8Array(1+c.length);u[0]=8,u.set(c,1),L.send(u),setTimeout(()=>{L.close(),a()},50)},L.onerror=()=>{console.error("Failed to connect to serve-sim server at",A.wsUrl),r(Error("WebSocket connection failed"))}})}async function jR(H){let $=uH(H);if(!$)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((e,_)=>{let t=new WebSocket($.wsUrl);t.binaryType="arraybuffer",t.onopen=()=>{t.send(new Uint8Array([9])),setTimeout(()=>{t.close(),e()},50)},t.onerror=()=>{console.error("Failed to connect to serve-sim server at",$.wsUrl),_(Error("WebSocket connection failed"))}})}function wb(){let H=[AH(pH,"..","dist","simcam","libSimCameraInjector.dylib"),AH(pH,"simcam","libSimCameraInjector.dylib"),AH(pH,"..","Sources","SimCameraInjector","build","libSimCameraInjector.dylib")];for(let $ of H)if(V($))return nH($);return null}function QR(){let H=AH(pH,"..","Sources","SimCameraInjector","build.sh");if(!V(H))throw Error("SimCameraInjector source not found — this build of serve-sim does not "+"include camera support sources. Reinstall from a recent release.");console.error("[serve-sim] building libSimCameraInjector.dylib (one-time)…"),_H(`bash "${H}"`,{stdio:"inherit"});let $=wb();if(!$)throw Error("Build succeeded but dylib not found.");return $}function v_(){let H=[AH(pH,"..","dist","simcam","serve-sim-camera-helper"),AH(pH,"simcam","serve-sim-camera-helper")];for(let $ of H)if(V($))return nH($);return null}function Xb(){let H=AH(pH,"..","Sources","SimCameraHelper","build.sh");if(!V(H))throw Error("SimCameraHelper source not found — webcam support requires building "+"from a checkout that includes Sources/SimCameraHelper.");console.error("[serve-sim] building serve-sim-camera-helper (one-time)…"),_H(`bash "${H}"`,{stdio:"inherit"});let $=v_();if(!$)throw Error("Build succeeded but helper binary not found.");return $}var JH=AH(EH,"simcam");function YR(H){return`/serve-sim-cam-${F_("sha1").update(H).digest("hex").slice(0,8)}`}function b$(H){return AH(JH,`${H}.pid`)}function V_(H){return AH(JH,`${H}.bundles.json`)}function j_(H){return`/tmp/serve-sim-cam-${F_("sha1").update(H).digest("hex").slice(0,12)}.sock`}async function B$(H,$){let e=j_(H);if(!V(e))throw Error("camera helper socket not found");let _=await import("net");return await new Promise((t,T)=>{let b=_.createConnection(e),A="",a=!1;b.on("data",(r)=>{A+=r.toString();let L=A.indexOf(`
124
124
  `);if(L>=0&&!a){a=!0;try{t(JSON.parse(A.slice(0,L)))}catch(c){T(c)}b.end()}}),b.on("error",(r)=>{if(!a)a=!0,T(r)}),b.on("close",()=>{if(!a)a=!0,T(Error("socket closed"))}),b.write(JSON.stringify($)+`
125
- `),setTimeout(()=>{if(!a)a=!0,b.destroy(),T(Error("helper timeout"))},3000)})}function Le(H){let $=b$(H);if(!V($))return!1;let e=Number(oH($,"utf-8").trim());return Number.isFinite(e)&&wH(e)&&V(V_(H))}function y_(H){let $=v_(H);if(!V($))return[];let e;try{e=JSON.parse(oH($,"utf-8"))}catch{return[]}let _=null;try{_=Number(oH(b$(H),"utf-8").trim())||null}catch{}if(_==null||e.helperPid!==_)return[];return Array.isArray(e.bundleIds)?e.bundleIds:[]}function jR(H,$,e){let _=y_(H),t=_.includes($)?_:[..._,$],T={helperPid:e,bundleIds:t};if(!V(JH))ae(JH,{recursive:!0});oe(v_(H),JSON.stringify(T))}function Xb(H){try{T$(v_(H))}catch{}}function Kb(H){let $=b$(H);if(!V($))return;let e=Number(oH($,"utf-8").trim());if(Number.isFinite(e)&&wH(e)){try{process.kill(e,"SIGTERM")}catch{}let _=Date.now();while(wH(e)&&Date.now()-_<1500)mH(50)}try{T$($)}catch{}Xb(H)}function QR(H){if(!V(JH))ae(JH,{recursive:!0});let $=AH(JH,`${H.udid}.log`),e=re($,"a"),_=["--shm",H.shmName,"--socket",H.socketPath,"--source",H.source];if(H.arg)_.push("--arg",H.arg);if(H.width)_.push("--width",String(H.width));if(H.height)_.push("--height",String(H.height));let t=W_(H.helperBin,_,{detached:!0,stdio:["ignore",e,e]});if(t.unref(),Ae(e),!t.pid)throw Error("failed to spawn camera helper");oe(b$(H.udid),String(t.pid)),Xb(H.udid);let T=Date.now();while(Date.now()-T<3000){if(!wH(t.pid))throw Error(`camera helper exited early — see log at ${$}`);if(V(H.socketPath))break;mH(50)}return t.pid}var YR=new Set(["mp4","m4v","mov","qt","avi","mkv","webm","mpg","mpeg","3gp","3g2","ts","wmv"]),zR=new Set(["png","jpg","jpeg","gif","heic","heif","webp","bmp","tif","tiff"]);function vb(H){let $=H.toLowerCase().split(".").pop()??"";if(YR.has($))return"video";if(zR.has($))return"image";let e;try{let _=re(H,"r");e=Buffer.alloc(16),NR(_,e,0,e.length,0),Ae(_)}catch{return null}if(e.length>=8&&e.slice(4,8).toString("ascii")==="ftyp")return"video";if(e.slice(0,4).toString("ascii")==="RIFF"&&e.length>=12){let _=e.slice(8,12).toString("ascii");if(_==="AVI ")return"video";if(_==="WEBP")return"image"}if(e[0]===26&&e[1]===69&&e[2]===223&&e[3]===163)return"video";if(e[0]===137&&e[1]===80&&e[2]===78&&e[3]===71)return"image";if(e[0]===255&&e[1]===216&&e[2]===255)return"image";if(e.slice(0,6).toString("ascii").startsWith("GIF8"))return"image";if(e[0]===66&&e[1]===77)return"image";return null}function Hs(H){if(H.file){let $=nH(H.file),e=vb($);if(!e)throw Error(`Could not detect image/video type for: ${$}`);return{kind:e,arg:$}}if(H.webcam)return{kind:"webcam",arg:typeof H.webcam==="string"?H.webcam:void 0};return{kind:"placeholder"}}async function $s(H){let $=VR(H.udid),e=V_(H.udid);if(Le(H.udid)){let T=await B$(H.udid,{action:"switch",source:H.source.kind,arg:H.source.arg});if(!T.ok)throw Error(T.error||"helper rejected switch");return{helperPid:Number(oH(b$(H.udid),"utf-8").trim()),shmName:$,relaunched:!1}}Kb(H.udid);let _=!H.forceBuild&&K_()||wb();return{helperPid:QR({udid:H.udid,helperBin:_,shmName:$,socketPath:e,source:H.source.kind,arg:H.source.arg}),shmName:$,relaunched:!0}}async function es(H){let $,e,_,t=!1,T=!1,b=!1,A=!1,a="auto",r=[];for(let R=0;R<H.length;R++){let o=H[R];if(o==="--device"||o==="-d"){$=H[++R];continue}if(o==="--file"||o==="-f"||o==="--image"||o==="-i"||o==="--video"){e=H[++R];continue}if(o==="--webcam"){let s=H[R+1];if(s&&!s.startsWith("-"))_=s,R++;else _=!0;continue}if(o==="--list-webcams"){T=!0;continue}if(o==="--stop-webcam"){t=!0;continue}if(o==="--build"){b=!0;continue}if(o==="--quiet"||o==="-q"){A=!0;continue}if(o==="--mirror"){let s=H[R+1];if(s==="on"||s==="off"||s==="auto")a=s,R++;else a="on";continue}if(o==="--no-mirror"){a="off";continue}if(o==="--help"||o==="-h"){console.log(`Usage: serve-sim-sjchmiela camera <bundle-id> [-d udid] [source-options] [--build]
125
+ `),setTimeout(()=>{if(!a)a=!0,b.destroy(),T(Error("helper timeout"))},3000)})}function Le(H){let $=b$(H);if(!V($))return!1;let e=Number(oH($,"utf-8").trim());return Number.isFinite(e)&&wH(e)&&V(j_(H))}function y_(H){let $=V_(H);if(!V($))return[];let e;try{e=JSON.parse(oH($,"utf-8"))}catch{return[]}let _=null;try{_=Number(oH(b$(H),"utf-8").trim())||null}catch{}if(_==null||e.helperPid!==_)return[];return Array.isArray(e.bundleIds)?e.bundleIds:[]}function zR(H,$,e){let _=y_(H),t=_.includes($)?_:[..._,$],T={helperPid:e,bundleIds:t};if(!V(JH))ae(JH,{recursive:!0});oe(V_(H),JSON.stringify(T))}function Kb(H){try{T$(V_(H))}catch{}}function vb(H){let $=b$(H);if(!V($))return;let e=Number(oH($,"utf-8").trim());if(Number.isFinite(e)&&wH(e)){try{process.kill(e,"SIGTERM")}catch{}let _=Date.now();while(wH(e)&&Date.now()-_<1500)mH(50)}try{T$($)}catch{}Kb(H)}function Hs(H){if(!V(JH))ae(JH,{recursive:!0});let $=AH(JH,`${H.udid}.log`),e=re($,"a"),_=["--shm",H.shmName,"--socket",H.socketPath,"--source",H.source];if(H.arg)_.push("--arg",H.arg);if(H.width)_.push("--width",String(H.width));if(H.height)_.push("--height",String(H.height));let t=W_(H.helperBin,_,{detached:!0,stdio:["ignore",e,e]});if(t.unref(),Ae(e),!t.pid)throw Error("failed to spawn camera helper");oe(b$(H.udid),String(t.pid)),Kb(H.udid);let T=Date.now();while(Date.now()-T<3000){if(!wH(t.pid))throw Error(`camera helper exited early — see log at ${$}`);if(V(H.socketPath))break;mH(50)}return t.pid}var $s=new Set(["mp4","m4v","mov","qt","avi","mkv","webm","mpg","mpeg","3gp","3g2","ts","wmv"]),es=new Set(["png","jpg","jpeg","gif","heic","heif","webp","bmp","tif","tiff"]);function Vb(H){let $=H.toLowerCase().split(".").pop()??"";if($s.has($))return"video";if(es.has($))return"image";let e;try{let _=re(H,"r");e=Buffer.alloc(16),dR(_,e,0,e.length,0),Ae(_)}catch{return null}if(e.length>=8&&e.slice(4,8).toString("ascii")==="ftyp")return"video";if(e.slice(0,4).toString("ascii")==="RIFF"&&e.length>=12){let _=e.slice(8,12).toString("ascii");if(_==="AVI ")return"video";if(_==="WEBP")return"image"}if(e[0]===26&&e[1]===69&&e[2]===223&&e[3]===163)return"video";if(e[0]===137&&e[1]===80&&e[2]===78&&e[3]===71)return"image";if(e[0]===255&&e[1]===216&&e[2]===255)return"image";if(e.slice(0,6).toString("ascii").startsWith("GIF8"))return"image";if(e[0]===66&&e[1]===77)return"image";return null}function _s(H){if(H.file){let $=nH(H.file),e=Vb($);if(!e)throw Error(`Could not detect image/video type for: ${$}`);return{kind:e,arg:$}}if(H.webcam)return{kind:"webcam",arg:typeof H.webcam==="string"?H.webcam:void 0};return{kind:"placeholder"}}async function ts(H){let $=YR(H.udid),e=j_(H.udid);if(Le(H.udid)){let T=await B$(H.udid,{action:"switch",source:H.source.kind,arg:H.source.arg});if(!T.ok)throw Error(T.error||"helper rejected switch");return{helperPid:Number(oH(b$(H.udid),"utf-8").trim()),shmName:$,relaunched:!1}}vb(H.udid);let _=!H.forceBuild&&v_()||Xb();return{helperPid:Hs({udid:H.udid,helperBin:_,shmName:$,socketPath:e,source:H.source.kind,arg:H.source.arg}),shmName:$,relaunched:!0}}async function Ts(H){let $,e,_,t=!1,T=!1,b=!1,A=!1,a="auto",r=[];for(let R=0;R<H.length;R++){let o=H[R];if(o==="--device"||o==="-d"){$=H[++R];continue}if(o==="--file"||o==="-f"||o==="--image"||o==="-i"||o==="--video"){e=H[++R];continue}if(o==="--webcam"){let s=H[R+1];if(s&&!s.startsWith("-"))_=s,R++;else _=!0;continue}if(o==="--list-webcams"){T=!0;continue}if(o==="--stop-webcam"){t=!0;continue}if(o==="--build"){b=!0;continue}if(o==="--quiet"||o==="-q"){A=!0;continue}if(o==="--mirror"){let s=H[R+1];if(s==="on"||s==="off"||s==="auto")a=s,R++;else a="on";continue}if(o==="--no-mirror"){a="off";continue}if(o==="--help"||o==="-h"){console.log(`Usage: serve-sim-sjchmiela camera <bundle-id> [-d udid] [source-options] [--build]
126
126
  serve-sim-sjchmiela camera switch <placeholder|webcam|file> [arg] [-d udid]
127
127
  serve-sim-sjchmiela camera mirror <auto|on|off> [-d udid]
128
128
  serve-sim-sjchmiela camera --list-webcams
@@ -160,7 +160,7 @@ Examples:
160
160
  serve-sim-sjchmiela camera switch placeholder # back to placeholder
161
161
  serve-sim-sjchmiela camera switch ~/Movies/loop.mp4 # hot-swap to file
162
162
  serve-sim-sjchmiela camera --list-webcams
163
- serve-sim-sjchmiela camera --stop-webcam`);return}r.push(o)}if(T){let R=K_()??wb();_H(`"${R}" --list`,{stdio:"inherit"});return}if(t){let R=$?eH($):aH();if(!R)console.error("No booted simulator."),process.exit(1);let o=y_(R),s=[];for(let i of o)try{_H(`xcrun simctl terminate "${R}" "${i}"`,{stdio:"ignore"}),s.push(i)}catch{}if(Kb(R),A)console.log(JSON.stringify({udid:R,stopped:!0,terminated:s}));else if(console.log(`Stopped camera helper for ${R}`),s.length>0)console.log(`Terminated injected apps: ${s.join(", ")}`);return}if(r[0]==="mirror"){let R=$?eH($):aH();if(!R)console.error("No booted simulator."),process.exit(1);let o=r[1];if(o!=="auto"&&o!=="on"&&o!=="off")console.error("Usage: serve-sim-sjchmiela camera mirror <auto|on|off> [-d udid]"),process.exit(1);if(!Le(R))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let s=await B$(R,{action:"setMirror",mode:o});if(!s.ok)console.error(`mirror failed: ${s.error??"?"}`),process.exit(1);if(A)console.log(JSON.stringify({udid:R,mirror:o,ok:!0}));else console.log(`\uD83D\uDCF7 Mirror → ${o} on ${R}`)}catch(s){console.error(`mirror failed: ${s?.message??s}`),process.exit(1)}return}if(r[0]==="switch"){let R=$?eH($):aH();if(!R)console.error("No booted simulator."),process.exit(1);let o=r[1],s=r[2];if(o&&o!=="placeholder"&&o!=="webcam"&&o!=="image"&&o!=="video"&&o!=="file"){let i=nH(o);if(V(i))s=i,o="file"}if(o==="file"){if(!s)console.error("camera switch file <path>"),process.exit(1);s=nH(s);let i=vb(s);if(!i)console.error(`Could not detect image/video type for: ${s}`),process.exit(1);o=i}if(!o||o!=="placeholder"&&o!=="webcam"&&o!=="image"&&o!=="video")console.error("Usage: serve-sim-sjchmiela camera switch <placeholder|webcam|file> [arg] [-d udid]"),process.exit(1);if((o==="image"||o==="video")&&s)s=nH(s);if(!Le(R))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let i=await B$(R,{action:"switch",source:o,arg:s});if(!i.ok)console.error(`switch failed: ${i.error??"?"}`),process.exit(1);if(A)console.log(JSON.stringify({udid:R,...i}));else console.log(`\uD83D\uDCF7 Switched ${R} → ${i.source}${i.arg?` (${i.arg})`:""}`)}catch(i){console.error(`switch failed: ${i?.message??i}`),process.exit(1)}return}if(r[0]==="status"){let R=$?eH($):aH();if(!R){console.log(JSON.stringify({alive:!1,error:"no booted simulator"}));return}if(!Le(R)){console.log(JSON.stringify({udid:R,alive:!1}));return}let o=null;try{o=Number(oH(b$(R),"utf-8").trim())||null}catch{}let s=y_(R);try{let i=await B$(R,{action:"status"});console.log(JSON.stringify({udid:R,alive:!0,helperPid:o,bundleIds:s,...i}))}catch(i){console.log(JSON.stringify({udid:R,alive:!0,helperPid:o,bundleIds:s,error:i?.message??String(i)}))}return}let L=r[0];if(!L)console.error("Usage: serve-sim-sjchmiela camera <bundle-id> [--image <path>] [-d udid]"),process.exit(1);let c=$?eH($):aH();if(!c)console.error("No booted simulator. Boot one or pass -d <udid|name>."),process.exit(1);let u=b?null:Jb();if(!u)try{u=vR()}catch(R){console.error(`Failed to obtain camera dylib: ${R?.message??R}`),process.exit(1)}if(e&&_)console.error("Pick one source: --file or --webcam, not both."),process.exit(1);if(e){if(e=nH(e),!V(e))console.error(`File not found: ${e}`),process.exit(1)}let n;try{n=Hs({file:e,webcam:_})}catch(R){console.error(R?.message??String(R)),process.exit(1)}let h=await $s({udid:c,source:n,forceBuild:b}),I=h.shmName,l=h.helperPid;if(a!=="auto"||!h.relaunched)try{await B$(c,{action:"setMirror",mode:a})}catch{}try{_H(`xcrun simctl privacy "${c}" grant camera "${L}"`,{stdio:"ignore"})}catch{}try{_H(`xcrun simctl terminate "${c}" "${L}"`,{stdio:"ignore"})}catch{}let N={...process.env,SIMCTL_CHILD_DYLD_INSERT_LIBRARIES:u,SIMCTL_CHILD_SIMCAM_SHM_NAME:I,...a!=="auto"?{SIMCTL_CHILD_SIMCAM_MIRROR_MODE:a}:{}},C="";try{C=_H(`xcrun simctl launch "${c}" "${L}"`,{env:N,encoding:"utf-8"})}catch(R){console.error(`simctl launch failed: ${R?.stderr??R?.message??R}`),process.exit(1)}let D=C.trim().match(/:\s*(\d+)\s*$/),d=D?Number(D[1]):null;if(l)jR(c,L,l);let E={udid:c,bundleId:L,pid:d,dylib:u,source:n.kind,arg:n.arg??null,shm:I,helperPid:l,mirror:a,hotSwapped:!1,helperRelaunched:h.relaunched};if(A)console.log(JSON.stringify(E));else{let R=h.relaunched?"Injected":"Attached";if(console.log(`\uD83D\uDCF7 ${R} camera into ${L} (pid ${d??"?"}) on ${c}`),console.log(` source: ${n.kind}${n.arg?` (${n.arg})`:""}`),l)console.log(` helper pid: ${l} (shm ${I})`);console.log(` dylib: ${u}`)}}async function _s(H,$,e,_,t){let T,b=[];if(t?.tunnel){let N=$.length>0?$.map(eH):(()=>{let D=aH();if(D)return[D];let d=J_();if(!d)console.error("No device specified and no available iOS simulator found."),process.exit(1);return console.log(`No booted simulator — booting ${d.name}...`),[d.udid]})(),C=3100;for(let D of N){C=await w_(C);let{child:d,tunnel:E}=await X_(D,C,{detach:!1,tunnel:!0,tunnelProvider:t.tunnelProvider,tunnelProtocol:t.tunnelProtocol,tunnelDomain:t.tunnelDomain,stream:t.stream,h264Bitrate:t.h264Bitrate,h264MaxFps:t.h264MaxFps});if(d)b.push({child:d,tunnelUrl:E?.url});C++}T=N[0]}else if($.length>0)T=(await x_($,3100,t?.stream,{bitrate:t?.h264Bitrate,maxFps:t?.h264MaxFps}))[0]?.device;else{let N=ce();if(N.length>0)T=N[0]?.device;else console.log("Starting simulator stream..."),T=(await x_($,3100,t?.stream,{bitrate:t?.h264Bitrate,maxFps:t?.h264MaxFps}))[0]?.device}let{simMiddleware:A}=await Promise.resolve().then(() => (xb(),Pb)),a=A({basePath:"/",device:T}),r=e?1:50,L=H,c,u=!1;for(let N=0;N<r;N++){let C=H+N;try{await ts(C,a,_),L=C,u=!0;break}catch(D){if(c=D,D?.code!=="EADDRINUSE")break}}if(!u){if(c?.code==="EADDRINUSE")if(e)console.error(`Port ${H} is already in use. Pass a different --port or stop the other process.`);else console.error(`No available port found in range ${H}-${H+r-1}.`);else console.error(`Failed to start preview server: ${c?.message??c}`);process.exit(1)}let n;if(t?.tunnel)try{n=Wb(await Qe(L,{provider:t.tunnelProvider,protocol:t.tunnelProtocol,domain:t.tunnelDomain,label:t.tunnelDomain?je("preview"):void 0}))}catch(N){console.error(`Failed to start preview tunnel: ${N.message}`);for(let C of b)if(C.child.pid)try{process.kill(C.child.pid,"SIGTERM")}catch{}process.exit(1)}let h=_!=="127.0.0.1"&&_!=="localhost"&&_!=="::1",I=SR();if(console.log(""),console.log(` - Local: http://localhost:${L}`),h&&I)console.log(` - Network: http://${I}:${L}`);else if(I)console.log(` - Network: \x1B[2muse --host 0.0.0.0 to expose on http://${I}:${L}\x1B[0m`);else console.log(" - Network: \x1B[2muse --host 0.0.0.0 to expose on the LAN\x1B[0m");if(n)console.log(` - Tunnel: ${n.url}`);for(let N of b)if(N.tunnelUrl)console.log(` - Stream: ${N.tunnelUrl}`);console.log("");let l=(N)=>{for(let C of b)if(C.child.pid)try{process.kill(C.child.pid,"SIGTERM")}catch{}process.exit(N)};process.on("SIGINT",()=>l(0)),process.on("SIGTERM",()=>l(0)),await new Promise(()=>{})}function ts(H,$,e){return Mt({port:H,middleware:$,host:e})}var hH=new lt;hH.name("serve-sim-sjchmiela").description("Stream iOS Simulator to the browser").version(pR(),"-v, --version","Output the serve-sim version").helpOption("-h, --help","Show this help").argument("[devices...]","Simulator(s) to target (udid or name; default: booted)").option("-p, --port <port>","Starting port (preview default: 3200, stream default: 3100)",(H)=>parseInt(H,10)).option("--host <addr>","Interface to bind the preview server to. Use 0.0.0.0 to expose on the "+"LAN — only on trusted networks: the preview exposes a token-gated "+"shell-exec route.","127.0.0.1").option("--detach","Spawn helper and exit (daemon mode)").option("-q, --quiet","Suppress human-readable output, JSON only").option("--no-preview","Skip the web preview server; stream in foreground only").option("--tunnel","Open public tunnels for the preview and helper ports").option("--tunnel-provider <cloudflare|ngrok>","Tunnel provider","cloudflare").option("--tunnel-protocol <auto|quic|http2>","cloudflared edge protocol (Cloudflare only)","auto").option("--tunnel-domain <domain>","ngrok reserved wildcard domain base, e.g. expo-simulator.ngrok.dev").option("--stream-fps <fps>","Maximum MJPEG stream frame rate (1-60)",(H)=>parseInt(H,10)).option("--stream-quality <quality>","MJPEG quality from 0.1 to 1.0",(H)=>Number(H)).option("--stream-max-dimension <px>","Scale MJPEG stream so the longest edge is at most this many pixels",(H)=>parseInt(H,10)).option("--h264-bitrate <bps>","H.264 bitrate for /stream.avcc",(H)=>parseInt(H,10)).option("--h264-max-fps <fps>","Maximum H.264 frame rate for /stream.avcc",(H)=>parseInt(H,10)).option("-l, --list [device]","List running streams").option("-k, --kill [device]","Kill running stream(s)").addHelpText("after",`
163
+ serve-sim-sjchmiela camera --stop-webcam`);return}r.push(o)}if(T){let R=v_()??Xb();_H(`"${R}" --list`,{stdio:"inherit"});return}if(t){let R=$?eH($):aH();if(!R)console.error("No booted simulator."),process.exit(1);let o=y_(R),s=[];for(let i of o)try{_H(`xcrun simctl terminate "${R}" "${i}"`,{stdio:"ignore"}),s.push(i)}catch{}if(vb(R),A)console.log(JSON.stringify({udid:R,stopped:!0,terminated:s}));else if(console.log(`Stopped camera helper for ${R}`),s.length>0)console.log(`Terminated injected apps: ${s.join(", ")}`);return}if(r[0]==="mirror"){let R=$?eH($):aH();if(!R)console.error("No booted simulator."),process.exit(1);let o=r[1];if(o!=="auto"&&o!=="on"&&o!=="off")console.error("Usage: serve-sim-sjchmiela camera mirror <auto|on|off> [-d udid]"),process.exit(1);if(!Le(R))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let s=await B$(R,{action:"setMirror",mode:o});if(!s.ok)console.error(`mirror failed: ${s.error??"?"}`),process.exit(1);if(A)console.log(JSON.stringify({udid:R,mirror:o,ok:!0}));else console.log(`\uD83D\uDCF7 Mirror → ${o} on ${R}`)}catch(s){console.error(`mirror failed: ${s?.message??s}`),process.exit(1)}return}if(r[0]==="switch"){let R=$?eH($):aH();if(!R)console.error("No booted simulator."),process.exit(1);let o=r[1],s=r[2];if(o&&o!=="placeholder"&&o!=="webcam"&&o!=="image"&&o!=="video"&&o!=="file"){let i=nH(o);if(V(i))s=i,o="file"}if(o==="file"){if(!s)console.error("camera switch file <path>"),process.exit(1);s=nH(s);let i=Vb(s);if(!i)console.error(`Could not detect image/video type for: ${s}`),process.exit(1);o=i}if(!o||o!=="placeholder"&&o!=="webcam"&&o!=="image"&&o!=="video")console.error("Usage: serve-sim-sjchmiela camera switch <placeholder|webcam|file> [arg] [-d udid]"),process.exit(1);if((o==="image"||o==="video")&&s)s=nH(s);if(!Le(R))console.error("camera helper not running for this device — run `serve-sim camera <bundle-id>` first."),process.exit(1);try{let i=await B$(R,{action:"switch",source:o,arg:s});if(!i.ok)console.error(`switch failed: ${i.error??"?"}`),process.exit(1);if(A)console.log(JSON.stringify({udid:R,...i}));else console.log(`\uD83D\uDCF7 Switched ${R} → ${i.source}${i.arg?` (${i.arg})`:""}`)}catch(i){console.error(`switch failed: ${i?.message??i}`),process.exit(1)}return}if(r[0]==="status"){let R=$?eH($):aH();if(!R){console.log(JSON.stringify({alive:!1,error:"no booted simulator"}));return}if(!Le(R)){console.log(JSON.stringify({udid:R,alive:!1}));return}let o=null;try{o=Number(oH(b$(R),"utf-8").trim())||null}catch{}let s=y_(R);try{let i=await B$(R,{action:"status"});console.log(JSON.stringify({udid:R,alive:!0,helperPid:o,bundleIds:s,...i}))}catch(i){console.log(JSON.stringify({udid:R,alive:!0,helperPid:o,bundleIds:s,error:i?.message??String(i)}))}return}let L=r[0];if(!L)console.error("Usage: serve-sim-sjchmiela camera <bundle-id> [--image <path>] [-d udid]"),process.exit(1);let c=$?eH($):aH();if(!c)console.error("No booted simulator. Boot one or pass -d <udid|name>."),process.exit(1);let u=b?null:wb();if(!u)try{u=QR()}catch(R){console.error(`Failed to obtain camera dylib: ${R?.message??R}`),process.exit(1)}if(e&&_)console.error("Pick one source: --file or --webcam, not both."),process.exit(1);if(e){if(e=nH(e),!V(e))console.error(`File not found: ${e}`),process.exit(1)}let n;try{n=_s({file:e,webcam:_})}catch(R){console.error(R?.message??String(R)),process.exit(1)}let h=await ts({udid:c,source:n,forceBuild:b}),I=h.shmName,l=h.helperPid;if(a!=="auto"||!h.relaunched)try{await B$(c,{action:"setMirror",mode:a})}catch{}try{_H(`xcrun simctl privacy "${c}" grant camera "${L}"`,{stdio:"ignore"})}catch{}try{_H(`xcrun simctl terminate "${c}" "${L}"`,{stdio:"ignore"})}catch{}let N={...process.env,SIMCTL_CHILD_DYLD_INSERT_LIBRARIES:u,SIMCTL_CHILD_SIMCAM_SHM_NAME:I,...a!=="auto"?{SIMCTL_CHILD_SIMCAM_MIRROR_MODE:a}:{}},C="";try{C=_H(`xcrun simctl launch "${c}" "${L}"`,{env:N,encoding:"utf-8"})}catch(R){console.error(`simctl launch failed: ${R?.stderr??R?.message??R}`),process.exit(1)}let D=C.trim().match(/:\s*(\d+)\s*$/),d=D?Number(D[1]):null;if(l)zR(c,L,l);let E={udid:c,bundleId:L,pid:d,dylib:u,source:n.kind,arg:n.arg??null,shm:I,helperPid:l,mirror:a,hotSwapped:!1,helperRelaunched:h.relaunched};if(A)console.log(JSON.stringify(E));else{let R=h.relaunched?"Injected":"Attached";if(console.log(`\uD83D\uDCF7 ${R} camera into ${L} (pid ${d??"?"}) on ${c}`),console.log(` source: ${n.kind}${n.arg?` (${n.arg})`:""}`),l)console.log(` helper pid: ${l} (shm ${I})`);console.log(` dylib: ${u}`)}}async function bs(H,$,e,_,t){let T,b=[];if(t?.tunnel){let N=$.length>0?$.map(eH):(()=>{let D=aH();if(D)return[D];let d=w_();if(!d)console.error("No device specified and no available iOS simulator found."),process.exit(1);return console.log(`No booted simulator — booting ${d.name}...`),[d.udid]})(),C=3100;for(let D of N){C=await X_(C);let{child:d,tunnel:E}=await K_(D,C,{detach:!1,tunnel:!0,tunnelProvider:t.tunnelProvider,tunnelProtocol:t.tunnelProtocol,tunnelDomain:t.tunnelDomain,stream:t.stream,h264Bitrate:t.h264Bitrate,h264MaxFps:t.h264MaxFps});if(d)b.push({child:d,tunnelUrl:E?.url});C++}T=N[0]}else if($.length>0)T=(await x_($,3100,t?.stream,{bitrate:t?.h264Bitrate,maxFps:t?.h264MaxFps}))[0]?.device;else{let N=ce();if(N.length>0)T=N[0]?.device;else console.log("Starting simulator stream..."),T=(await x_($,3100,t?.stream,{bitrate:t?.h264Bitrate,maxFps:t?.h264MaxFps}))[0]?.device}let{simMiddleware:A}=await Promise.resolve().then(() => (yb(),xb)),a=A({basePath:"/",device:T}),r=e?1:50,L=H,c,u=!1;for(let N=0;N<r;N++){let C=H+N;try{await Ls(C,a,_),L=C,u=!0;break}catch(D){if(c=D,D?.code!=="EADDRINUSE")break}}if(!u){if(c?.code==="EADDRINUSE")if(e)console.error(`Port ${H} is already in use. Pass a different --port or stop the other process.`);else console.error(`No available port found in range ${H}-${H+r-1}.`);else console.error(`Failed to start preview server: ${c?.message??c}`);process.exit(1)}let n;if(t?.tunnel)try{n=Fb(await Qe(L,{provider:t.tunnelProvider,protocol:t.tunnelProtocol,domain:t.tunnelDomain,label:t.tunnelDomain?je("preview"):void 0}))}catch(N){console.error(`Failed to start preview tunnel: ${N.message}`);for(let C of b)if(C.child.pid)try{process.kill(C.child.pid,"SIGTERM")}catch{}process.exit(1)}let h=_!=="127.0.0.1"&&_!=="localhost"&&_!=="::1",I=qR();if(console.log(""),console.log(` - Local: http://localhost:${L}`),h&&I)console.log(` - Network: http://${I}:${L}`);else if(I)console.log(` - Network: \x1B[2muse --host 0.0.0.0 to expose on http://${I}:${L}\x1B[0m`);else console.log(" - Network: \x1B[2muse --host 0.0.0.0 to expose on the LAN\x1B[0m");if(n)console.log(` - Tunnel: ${n.url}`);for(let N of b)if(N.tunnelUrl)console.log(` - Stream: ${N.tunnelUrl}`);console.log("");let l=(N)=>{for(let C of b)if(C.child.pid)try{process.kill(C.child.pid,"SIGTERM")}catch{}process.exit(N)};process.on("SIGINT",()=>l(0)),process.on("SIGTERM",()=>l(0)),await new Promise(()=>{})}function Ls(H,$,e){return Gt({port:H,middleware:$,host:e})}var hH=new pt;hH.name("serve-sim-sjchmiela").description("Stream iOS Simulator to the browser").version(BR(),"-v, --version","Output the serve-sim version").helpOption("-h, --help","Show this help").argument("[devices...]","Simulator(s) to target (udid or name; default: booted)").option("-p, --port <port>","Starting port (preview default: 3200, stream default: 3100)",(H)=>parseInt(H,10)).option("--host <addr>","Interface to bind the preview server to. Use 0.0.0.0 to expose on the "+"LAN — only on trusted networks: the preview exposes a token-gated "+"shell-exec route.","127.0.0.1").option("--detach","Spawn helper and exit (daemon mode)").option("-q, --quiet","Suppress human-readable output, JSON only").option("--no-preview","Skip the web preview server; stream in foreground only").option("--tunnel","Open public tunnels for the preview and helper ports").option("--tunnel-provider <cloudflare|ngrok>","Tunnel provider","cloudflare").option("--tunnel-protocol <auto|quic|http2>","cloudflared edge protocol (Cloudflare only)","auto").option("--tunnel-domain <domain>","ngrok reserved wildcard domain base, e.g. expo-simulator.ngrok.dev").option("--stream-fps <fps>","Maximum MJPEG stream frame rate (1-60)",(H)=>parseInt(H,10)).option("--stream-quality <quality>","MJPEG quality from 0.1 to 1.0",(H)=>Number(H)).option("--stream-max-dimension <px>","Scale MJPEG stream so the longest edge is at most this many pixels",(H)=>parseInt(H,10)).option("--h264-bitrate <bps>","H.264 bitrate for /stream.avcc",(H)=>parseInt(H,10)).option("--h264-max-fps <fps>","Maximum H.264 frame rate for /stream.avcc",(H)=>parseInt(H,10)).option("--codec <mjpeg|h264|webrtc>","Stream codec compatibility option","h264").option("--webrtc-codec <vp8|h264>","WebRTC codec compatibility option").option("--stun-url <url[,url...]>","STUN URL(s) for WebRTC compatibility").option("--turn-url <url>","TURN URL for WebRTC compatibility").option("--turn-username <user>","TURN username for WebRTC compatibility").option("--turn-credential <secret>","TURN credential for WebRTC compatibility").option("-l, --list [device]","List running streams").option("-k, --kill [device]","Kill running stream(s)").addHelpText("after",`
164
164
  Examples:
165
165
  serve-sim-sjchmiela Open simulator preview at localhost:3200
166
166
  serve-sim-sjchmiela -p 8080 Preview on a custom port
@@ -173,4 +173,4 @@ Examples:
173
173
  Use reserved ngrok wildcard subdomains
174
174
  serve-sim-sjchmiela --detach Start streaming in background (daemon)
175
175
  serve-sim-sjchmiela --list Show all running streams
176
- serve-sim-sjchmiela --kill Stop all streams`).action(async(H,$)=>{if($.list!==void 0){yR(typeof $.list==="string"?$.list:void 0);return}if($.kill!==void 0){WR(typeof $.kill==="string"?$.kill:void 0);return}if($.tunnelProtocol!=="auto"&&$.tunnelProtocol!=="quic"&&$.tunnelProtocol!=="http2")console.error("--tunnel-protocol must be one of: auto, quic, http2."),process.exit(1);if($.tunnelProvider!=="cloudflare"&&$.tunnelProvider!=="ngrok")console.error("--tunnel-provider must be one of: cloudflare, ngrok."),process.exit(1);let e=$.tunnelProvider;if($.tunnelDomain&&e!=="ngrok")console.error("--tunnel-domain is only supported with --tunnel-provider ngrok."),process.exit(1);if($.tunnelDomain&&!$.tunnel)console.error("--tunnel-domain requires --tunnel."),process.exit(1);if($.streamFps!==void 0&&(!Number.isInteger($.streamFps)||$.streamFps<1||$.streamFps>60))console.error("--stream-fps must be an integer from 1 to 60."),process.exit(1);if($.streamQuality!==void 0&&(!Number.isFinite($.streamQuality)||$.streamQuality<0.1||$.streamQuality>1))console.error("--stream-quality must be a number from 0.1 to 1.0."),process.exit(1);if($.streamMaxDimension!==void 0&&(!Number.isInteger($.streamMaxDimension)||$.streamMaxDimension<0))console.error("--stream-max-dimension must be a non-negative integer."),process.exit(1);if($.h264Bitrate!==void 0&&(!Number.isInteger($.h264Bitrate)||$.h264Bitrate<=0))console.error("--h264-bitrate must be a positive integer."),process.exit(1);if($.h264MaxFps!==void 0&&(!Number.isInteger($.h264MaxFps)||$.h264MaxFps<=0))console.error("--h264-max-fps must be a positive integer."),process.exit(1);let _=$.tunnelProtocol==="auto"?void 0:$.tunnelProtocol;if($.tunnel&&$.detach)console.error("--tunnel cannot be combined with --detach yet (the tunnel needs a parent process to clean it up)."),process.exit(1);let t={maxFps:$.streamFps,quality:$.streamQuality,maxDimension:$.streamMaxDimension},T=$.port;if($.detach){let b=await x_(H,T??3100,t,{bitrate:$.h264Bitrate,maxFps:$.h264MaxFps});xR(b)}else if($.preview===!1)await PR(H,T??3100,!!$.quiet,{tunnel:$.tunnel,tunnelProvider:e,tunnelProtocol:_,tunnelDomain:$.tunnelDomain,stream:t,h264Bitrate:$.h264Bitrate,h264MaxFps:$.h264MaxFps});else await _s(T??3200,H,T!==void 0,$.host,{tunnel:$.tunnel,tunnelProvider:e,tunnelProtocol:_,tunnelDomain:$.tunnelDomain,stream:t,h264Bitrate:$.h264Bitrate,h264MaxFps:$.h264MaxFps})});var XH=["-d, --device <udid>","Target a specific simulator (udid or name)"];hH.command("gesture").description("Send a touch gesture").argument("<json>",`Gesture JSON, e.g. '{"type":"begin","x":0.5,"y":0.5}'`).option(...XH).action((H,$)=>FR(H,$.device));hH.command("tap").description("Tap at normalized 0..1 coords").argument("<x>","X coord, normalized 0..1").argument("<y>","Y coord, normalized 0..1").option(...XH).action((H,$,e)=>ZR(H,$,e.device));hH.command("button").description("Send a hardware button press").argument("[name]","Button name","home").option(...XH).action((H,$)=>wR(H,$.device));hH.command("type").description("Type text (US keyboard only)").argument("[text...]","Text to type").option(...XH).option("--stdin","Read text from stdin").option("--file <path>","Read text from a file").action((H,$)=>UR(H,{device:$.device,stdin:$.stdin,file:$.file}));hH.command("rotate").description("Set device orientation (portrait|portrait_upside_down|landscape_left|landscape_right)").argument("<orientation>").option(...XH).action((H,$)=>JR(H,$.device));hH.command("ca-debug").description("Toggle a CoreAnimation debug render flag (blended|copies|misaligned|offscreen|slow-animations)").argument("<option>").argument("<state>","on|off").option(...XH).action((H,$,e)=>XR(H,$,e.device));hH.command("memory-warning").description("Simulate a memory warning on the device").option(...XH).action((H)=>KR(H.device));hH.command("camera").description("Inject a synthetic camera feed and launch an app (see `camera --help`)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action((H)=>es(H));hH.command("permissions").description("Manage app permissions (see `permissions` with no args for usage)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action((H)=>Wt(H));hH.command("ui").description("Get or set simulator-wide UI options (see `ui --help`)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action((H)=>Kt(H));await hH.parseAsync(process.argv);
176
+ serve-sim-sjchmiela --kill Stop all streams`).action(async(H,$)=>{if($.list!==void 0){ZR(typeof $.list==="string"?$.list:void 0);return}if($.kill!==void 0){UR(typeof $.kill==="string"?$.kill:void 0);return}if($.tunnelProtocol!=="auto"&&$.tunnelProtocol!=="quic"&&$.tunnelProtocol!=="http2")console.error("--tunnel-protocol must be one of: auto, quic, http2."),process.exit(1);if($.tunnelProvider!=="cloudflare"&&$.tunnelProvider!=="ngrok")console.error("--tunnel-provider must be one of: cloudflare, ngrok."),process.exit(1);let e=$.tunnelProvider;if($.tunnelDomain&&e!=="ngrok")console.error("--tunnel-domain is only supported with --tunnel-provider ngrok."),process.exit(1);if($.tunnelDomain&&!$.tunnel)console.error("--tunnel-domain requires --tunnel."),process.exit(1);if($.streamFps!==void 0&&(!Number.isInteger($.streamFps)||$.streamFps<1||$.streamFps>60))console.error("--stream-fps must be an integer from 1 to 60."),process.exit(1);if($.streamQuality!==void 0&&(!Number.isFinite($.streamQuality)||$.streamQuality<0.1||$.streamQuality>1))console.error("--stream-quality must be a number from 0.1 to 1.0."),process.exit(1);if($.streamMaxDimension!==void 0&&(!Number.isInteger($.streamMaxDimension)||$.streamMaxDimension<0))console.error("--stream-max-dimension must be a non-negative integer."),process.exit(1);if($.h264Bitrate!==void 0&&(!Number.isInteger($.h264Bitrate)||$.h264Bitrate<=0))console.error("--h264-bitrate must be a positive integer."),process.exit(1);if($.h264MaxFps!==void 0&&(!Number.isInteger($.h264MaxFps)||$.h264MaxFps<=0))console.error("--h264-max-fps must be a positive integer."),process.exit(1);if($.codec!=="mjpeg"&&$.codec!=="h264"&&$.codec!=="webrtc")console.error("--codec must be one of: mjpeg, h264, webrtc."),process.exit(1);if($.webrtcCodec!==void 0&&$.webrtcCodec!=="vp8"&&$.webrtcCodec!=="h264")console.error("--webrtc-codec must be one of: vp8, h264."),process.exit(1);let _=typeof $.stunUrl==="string"?$.stunUrl.split(",").map((r)=>r.trim()).filter(Boolean):void 0,t=$.turnUrl||$.turnUsername||$.turnCredential?{url:$.turnUrl,username:$.turnUsername,credential:$.turnCredential}:void 0,T={codec:$.codec,webrtcCodec:$.webrtcCodec,stunUrls:_,turn:t};GR(T);let b=$.tunnelProtocol==="auto"?void 0:$.tunnelProtocol;if($.tunnel&&$.detach)console.error("--tunnel cannot be combined with --detach yet (the tunnel needs a parent process to clean it up)."),process.exit(1);let A={maxFps:$.streamFps,quality:$.streamQuality,maxDimension:$.streamMaxDimension},a=$.port;if($.detach){let r=await x_(H,a??3100,A,{bitrate:$.h264Bitrate,maxFps:$.h264MaxFps});FR(r)}else if($.preview===!1)await WR(H,a??3100,!!$.quiet,{tunnel:$.tunnel,tunnelProvider:e,tunnelProtocol:b,tunnelDomain:$.tunnelDomain,stream:A,h264Bitrate:$.h264Bitrate,h264MaxFps:$.h264MaxFps});else await bs(a??3200,H,a!==void 0,$.host,{tunnel:$.tunnel,tunnelProvider:e,tunnelProtocol:b,tunnelDomain:$.tunnelDomain,stream:A,h264Bitrate:$.h264Bitrate,h264MaxFps:$.h264MaxFps})});var XH=["-d, --device <udid>","Target a specific simulator (udid or name)"];hH.command("gesture").description("Send a touch gesture").argument("<json>",`Gesture JSON, e.g. '{"type":"begin","x":0.5,"y":0.5}'`).option(...XH).action((H,$)=>JR(H,$.device));hH.command("tap").description("Tap at normalized 0..1 coords").argument("<x>","X coord, normalized 0..1").argument("<y>","Y coord, normalized 0..1").option(...XH).action((H,$,e)=>wR(H,$,e.device));hH.command("button").description("Send a hardware button press").argument("[name]","Button name","home").option(...XH).action((H,$)=>vR(H,$.device));hH.command("type").description("Type text (US keyboard only)").argument("[text...]","Text to type").option(...XH).option("--stdin","Read text from stdin").option("--file <path>","Read text from a file").action((H,$)=>XR(H,{device:$.device,stdin:$.stdin,file:$.file}));hH.command("rotate").description("Set device orientation (portrait|portrait_upside_down|landscape_left|landscape_right)").argument("<orientation>").option(...XH).action((H,$)=>KR(H,$.device));hH.command("ca-debug").description("Toggle a CoreAnimation debug render flag (blended|copies|misaligned|offscreen|slow-animations)").argument("<option>").argument("<state>","on|off").option(...XH).action((H,$,e)=>VR(H,$,e.device));hH.command("memory-warning").description("Simulate a memory warning on the device").option(...XH).action((H)=>jR(H.device));hH.command("camera").description("Inject a synthetic camera feed and launch an app (see `camera --help`)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action((H)=>Ts(H));hH.command("permissions").description("Manage app permissions (see `permissions` with no args for usage)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action((H)=>Ft(H));hH.command("ui").description("Get or set simulator-wide UI options (see `ui --help`)").allowUnknownOption(!0).helpOption(!1).argument("[args...]").action((H)=>vt(H));await hH.parseAsync(process.argv);