From 61d082e4025b0803b3085c794ca5f05f5b5ada66 Mon Sep 17 00:00:00 2001 From: Popov72 Date: Mon, 1 Dec 2025 17:15:35 +0100 Subject: [PATCH 01/18] Fix lighting volume when light direction changes --- .../dev/core/src/Engines/abstractEngine.ts | 4 +- packages/dev/core/src/Engines/webgpuEngine.ts | 20 +- .../PostProcesses/volumetricLightingBlock.ts | 222 ++++++++++++++ .../core/src/FrameGraph/Node/Blocks/index.ts | 2 + .../Node/Blocks/lightingVolumeBlock.ts | 123 ++++++++ .../Tasks/Misc/lightingVolumeTask.ts | 86 ++++++ .../Tasks/PostProcesses/postProcessTask.ts | 4 +- .../volumetricLightingBlendVolumeTask.ts | 84 ++++++ .../PostProcesses/volumetricLightingTask.ts | 270 ++++++++++++++++++ .../Tasks/Rendering/objectRendererTask.ts | 4 +- .../Tasks/Texture/clearTextureTask.ts | 4 +- .../src/FrameGraph/frameGraphRenderContext.ts | 3 +- .../dev/core/src/FrameGraph/frameGraphTask.ts | 4 +- packages/dev/core/src/FrameGraph/index.ts | 2 + .../dev/core/src/Lights/lightingVolume.ts | 75 +++-- .../volumetricLightingBlendVolume.fragment.fx | 28 ++ ...volumetricLightingRenderVolume.fragment.fx | 48 ++++ .../volumetricLightingRenderVolume.vertex.fx | 13 + .../volumetricLightingBlendVolume.fragment.fx | 30 ++ ...volumetricLightingRenderVolume.fragment.fx | 51 ++++ .../volumetricLightingRenderVolume.vertex.fx | 14 + packages/dev/core/src/States/IStencilState.ts | 50 +++- .../nodeRenderGraphEditor/public/index.js | 6 +- .../nodeRenderGraphEditor/src/blockTools.ts | 8 + .../components/nodeList/nodeListComponent.tsx | 15 +- .../nodeRenderGraphEditor/src/graphEditor.tsx | 2 +- .../FrameGraph-nrge-volumetric-lighting.png | Bin 0 -> 163961 bytes .../FrameGraph-volumetric-lighting.png | Bin 0 -> 161221 bytes .../tests/test/visualization/config.json | 8 + 29 files changed, 1126 insertions(+), 54 deletions(-) create mode 100644 packages/dev/core/src/FrameGraph/Node/Blocks/PostProcesses/volumetricLightingBlock.ts create mode 100644 packages/dev/core/src/FrameGraph/Node/Blocks/lightingVolumeBlock.ts create mode 100644 packages/dev/core/src/FrameGraph/Tasks/Misc/lightingVolumeTask.ts create mode 100644 packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.ts create mode 100644 packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts create mode 100644 packages/dev/core/src/Shaders/volumetricLightingBlendVolume.fragment.fx create mode 100644 packages/dev/core/src/Shaders/volumetricLightingRenderVolume.fragment.fx create mode 100644 packages/dev/core/src/Shaders/volumetricLightingRenderVolume.vertex.fx create mode 100644 packages/dev/core/src/ShadersWGSL/volumetricLightingBlendVolume.fragment.fx create mode 100644 packages/dev/core/src/ShadersWGSL/volumetricLightingRenderVolume.fragment.fx create mode 100644 packages/dev/core/src/ShadersWGSL/volumetricLightingRenderVolume.vertex.fx create mode 100644 packages/tools/tests/test/visualization/ReferenceImages/FrameGraph-nrge-volumetric-lighting.png create mode 100644 packages/tools/tests/test/visualization/ReferenceImages/FrameGraph-volumetric-lighting.png diff --git a/packages/dev/core/src/Engines/abstractEngine.ts b/packages/dev/core/src/Engines/abstractEngine.ts index 8c57a7b541e..5696eecd831 100644 --- a/packages/dev/core/src/Engines/abstractEngine.ts +++ b/packages/dev/core/src/Engines/abstractEngine.ts @@ -27,7 +27,7 @@ import type { ThinTexture } from "../Materials/Textures/thinTexture"; import type { InternalTextureCreationOptions, TextureSize } from "../Materials/Textures/textureCreationOptions"; import type { EffectFallbacks } from "../Materials/effectFallbacks"; import type { IMaterialContext } from "./IMaterialContext"; -import type { IStencilState } from "../States/IStencilState"; +import type { IStencilStateProperties, IStencilState } from "../States/IStencilState"; import type { DrawWrapper } from "../Materials/drawWrapper"; import type { IDrawContext } from "./IDrawContext"; import type { VertexBuffer } from "../Meshes/buffer"; @@ -1363,7 +1363,7 @@ export abstract class AbstractEngine { force?: boolean, reverseSide?: boolean, cullBackFaces?: boolean, - stencil?: IStencilState, + stencil?: IStencilState | IStencilStateProperties, zOffsetUnits?: number ): void; diff --git a/packages/dev/core/src/Engines/webgpuEngine.ts b/packages/dev/core/src/Engines/webgpuEngine.ts index e82b97a6e8f..1c325b14a99 100644 --- a/packages/dev/core/src/Engines/webgpuEngine.ts +++ b/packages/dev/core/src/Engines/webgpuEngine.ts @@ -3136,6 +3136,7 @@ export class WebGPUEngine extends ThinWebGPUEngine { // We use the MSAA texture format (if available) to determine if it has a stencil aspect or not because, for MSAA depth textures, // the format of the "resolve" texture (gpuDepthStencilWrapper.format) is a single red channel format, not a depth-stencil format. const depthTextureHasStencil = gpuDepthStencilWrapper ? WebGPUTextureHelper.HasStencilAspect(gpuDepthStencilMSAATexture?.format ?? gpuDepthStencilWrapper.format) : false; + const depthTextureHasDepth = gpuDepthStencilWrapper ? WebGPUTextureHelper.HasDepthAspect(gpuDepthStencilMSAATexture?.format ?? gpuDepthStencilWrapper.format) : false; const colorAttachments: (GPURenderPassColorAttachment | null)[] = []; @@ -3240,18 +3241,17 @@ export class WebGPUEngine extends ThinWebGPUEngine { ? { view: depthMSAATextureView ? depthMSAATextureView : depthTextureView!, depthClearValue: mustClearDepth ? (this.useReverseDepthBuffer ? this._clearReverseDepthValue : this._clearDepthValue) : undefined, - depthLoadOp: rtWrapper.depthReadOnly ? undefined : mustClearDepth ? WebGPUConstants.LoadOp.Clear : WebGPUConstants.LoadOp.Load, - depthStoreOp: rtWrapper.depthReadOnly ? undefined : WebGPUConstants.StoreOp.Store, + depthLoadOp: rtWrapper.depthReadOnly || !depthTextureHasDepth ? undefined : mustClearDepth ? WebGPUConstants.LoadOp.Clear : WebGPUConstants.LoadOp.Load, + depthStoreOp: rtWrapper.depthReadOnly || !depthTextureHasDepth ? undefined : WebGPUConstants.StoreOp.Store, depthReadOnly: rtWrapper.depthReadOnly, stencilClearValue: rtWrapper._depthStencilTextureWithStencil && mustClearStencil ? this._clearStencilValue : undefined, - stencilLoadOp: rtWrapper.stencilReadOnly - ? undefined - : !depthTextureHasStencil - ? undefined - : rtWrapper._depthStencilTextureWithStencil && mustClearStencil - ? WebGPUConstants.LoadOp.Clear - : WebGPUConstants.LoadOp.Load, - stencilStoreOp: rtWrapper.stencilReadOnly ? undefined : !depthTextureHasStencil ? undefined : WebGPUConstants.StoreOp.Store, + stencilLoadOp: + rtWrapper.stencilReadOnly || !depthTextureHasStencil + ? undefined + : rtWrapper._depthStencilTextureWithStencil && mustClearStencil + ? WebGPUConstants.LoadOp.Clear + : WebGPUConstants.LoadOp.Load, + stencilStoreOp: rtWrapper.stencilReadOnly || !depthTextureHasStencil ? undefined : WebGPUConstants.StoreOp.Store, stencilReadOnly: rtWrapper.stencilReadOnly, } : undefined, diff --git a/packages/dev/core/src/FrameGraph/Node/Blocks/PostProcesses/volumetricLightingBlock.ts b/packages/dev/core/src/FrameGraph/Node/Blocks/PostProcesses/volumetricLightingBlock.ts new file mode 100644 index 00000000000..ae198e632ae --- /dev/null +++ b/packages/dev/core/src/FrameGraph/Node/Blocks/PostProcesses/volumetricLightingBlock.ts @@ -0,0 +1,222 @@ +import type { + Camera, + DirectionalLight, + FrameGraph, + FrameGraphObjectList, + FrameGraphTextureHandle, + NodeRenderGraphBuildState, + NodeRenderGraphConnectionPoint, + Scene, +} from "core/index"; +import { RegisterClass } from "../../../../Misc/typeStore"; +import { editableInPropertyPage, PropertyTypeForEdition } from "../../../../Decorators/nodeDecorator"; +import { NodeRenderGraphBlock } from "../../nodeRenderGraphBlock"; +import { FrameGraphVolumetricLightingTask } from "core/FrameGraph/Tasks/PostProcesses/volumetricLightingTask"; +import { NodeRenderGraphBlockConnectionPointTypes } from "../../Types/nodeRenderGraphTypes"; +import { Vector3 } from "core/Maths/math.vector"; +import { Color3 } from "core/Maths/math.color"; + +/** + * Block that implements the volumetric lighting post process + */ +export class NodeRenderGraphVolumetricLightingBlock extends NodeRenderGraphBlock { + protected override _frameGraphTask: FrameGraphVolumetricLightingTask; + + public override _additionalConstructionParameters: [boolean]; + + /** + * Gets the frame graph task associated with this block + */ + public override get task() { + return this._frameGraphTask; + } + + /** + * Create a new NodeRenderGraphVolumetricLightingBlock + * @param name defines the block name + * @param frameGraph defines the hosting frame graph + * @param scene defines the hosting scene + * @param enableExtinction defines whether to enable extinction coefficients + */ + public constructor(name: string, frameGraph: FrameGraph, scene: Scene, enableExtinction = false) { + super(name, frameGraph, scene); + + this._additionalConstructionParameters = [enableExtinction]; + + this.registerInput("target", NodeRenderGraphBlockConnectionPointTypes.AutoDetect); + this.registerInput("depth", NodeRenderGraphBlockConnectionPointTypes.AutoDetect); + this.registerInput("camera", NodeRenderGraphBlockConnectionPointTypes.Camera); + this.registerInput("lightingVolumeMesh", NodeRenderGraphBlockConnectionPointTypes.ObjectList); + this.registerInput("light", NodeRenderGraphBlockConnectionPointTypes.ShadowLight); + this.registerInput("lightingVolumeTexture", NodeRenderGraphBlockConnectionPointTypes.AutoDetect, true); + + this.target.addExcludedConnectionPointFromAllowedTypes(NodeRenderGraphBlockConnectionPointTypes.TextureAllButBackBuffer); + this.lightingVolumeTexture.addExcludedConnectionPointFromAllowedTypes(NodeRenderGraphBlockConnectionPointTypes.TextureAllButBackBuffer); + + this.depth.addExcludedConnectionPointFromAllowedTypes( + NodeRenderGraphBlockConnectionPointTypes.TextureDepthStencilAttachment | NodeRenderGraphBlockConnectionPointTypes.TextureScreenDepth + ); + + this._addDependenciesInput(); + + this.registerOutput("output", NodeRenderGraphBlockConnectionPointTypes.BasedOnInput); + + this.output._typeConnectionSource = () => { + return this.target; + }; + + this._frameGraphTask = new FrameGraphVolumetricLightingTask(name, frameGraph, enableExtinction); + } + + private _createTask(enableExtinction: boolean) { + const sourceSamplingMode = this._frameGraphTask.sourceSamplingMode; + const phaseG = this._frameGraphTask.phaseG; + const extinction = this._frameGraphTask.extinction; + const lightPower = this._frameGraphTask.lightPower; + + this._frameGraphTask.dispose(); + + this._frameGraphTask = new FrameGraphVolumetricLightingTask(this.name, this._frameGraph, enableExtinction); + this._frameGraphTask.sourceSamplingMode = sourceSamplingMode; + this._frameGraphTask.phaseG = phaseG; + this._frameGraphTask.extinction = extinction; + this._frameGraphTask.lightPower = lightPower; + + this._additionalConstructionParameters = [enableExtinction]; + } + + /** Gets or sets the phaseG parameter */ + @editableInPropertyPage("PhaseG", PropertyTypeForEdition.Float, "PROPERTIES", { min: -0.9, max: 0.9 }) + public get phaseG(): number { + return this._frameGraphTask.phaseG; + } + + public set phaseG(value: number) { + this._frameGraphTask.phaseG = value; + } + + /** If extinction coefficients should be used */ + @editableInPropertyPage("Enable extinction", PropertyTypeForEdition.Boolean, "PROPERTIES") + public get enableExtinction(): boolean { + return this._frameGraphTask.enableExtinction; + } + + public set enableExtinction(value: boolean) { + this._createTask(value); + } + + /** Gets or sets the extinction color */ + @editableInPropertyPage("Extinction", PropertyTypeForEdition.Vector3, "PROPERTIES") + public get extinction(): Vector3 { + return this._frameGraphTask.extinction; + } + + public set extinction(value: Vector3) { + this._frameGraphTask.extinction = value; + } + + /** Gets or sets the light power */ + @editableInPropertyPage("Light power", PropertyTypeForEdition.Color3, "PROPERTIES") + public get lightPower(): Color3 { + return this._frameGraphTask.lightPower; + } + + public set lightPower(value: Color3) { + this._frameGraphTask.lightPower = value; + } + + /** + * Gets the current class name + * @returns the class name + */ + public override getClassName() { + return "NodeRenderGraphVolumetricLightingBlock"; + } + + /** + * Gets the target input component + */ + public get target(): NodeRenderGraphConnectionPoint { + return this._inputs[0]; + } + + /** + * Gets the depth texture input component + */ + public get depth(): NodeRenderGraphConnectionPoint { + return this._inputs[1]; + } + + /** + * Gets the camera input component + */ + public get camera(): NodeRenderGraphConnectionPoint { + return this._inputs[2]; + } + + /** + * Gets the lighting volume mesh input component + */ + public get lightingVolumeMesh(): NodeRenderGraphConnectionPoint { + return this._inputs[3]; + } + + /** + * Gets the light input component + */ + public get light(): NodeRenderGraphConnectionPoint { + return this._inputs[4]; + } + + /** + * Gets the lighting volume texture input component + */ + public get lightingVolumeTexture(): NodeRenderGraphConnectionPoint { + return this._inputs[5]; + } + + /** + * Gets the output component + */ + public get output(): NodeRenderGraphConnectionPoint { + return this._outputs[0]; + } + + protected override _buildBlock(state: NodeRenderGraphBuildState) { + super._buildBlock(state); + + this.output.value = this._frameGraphTask.outputTexture; + + this._frameGraphTask.targetTexture = this.target.connectedPoint?.value as FrameGraphTextureHandle; + this._frameGraphTask.depthTexture = this.depth.connectedPoint?.value as FrameGraphTextureHandle; + this._frameGraphTask.camera = this.camera.connectedPoint?.value as Camera; + this._frameGraphTask.lightingVolumeMesh = this.lightingVolumeMesh.connectedPoint?.value as FrameGraphObjectList; + this._frameGraphTask.light = this.light.connectedPoint?.value as DirectionalLight; + this._frameGraphTask.lightingVolumeTexture = this.lightingVolumeTexture.connectedPoint?.value as FrameGraphTextureHandle; + } + + protected override _dumpPropertiesCode() { + const codes: string[] = []; + codes.push(`${this._codeVariableName}.phaseG = ${this.phaseG};`); + codes.push(`${this._codeVariableName}.extinction = new BABYLON.Vector3(${this.extinction.x}, ${this.extinction.y}, ${this.extinction.z});`); + codes.push(`${this._codeVariableName}.lightPower = new Color3(${this.lightPower.r}, ${this.lightPower.g}, ${this.lightPower.b});`); + return super._dumpPropertiesCode() + codes.join("\n"); + } + + public override serialize(): any { + const serializationObject = super.serialize(); + serializationObject.phaseG = this.phaseG; + serializationObject.extinction = this.extinction.asArray(); + serializationObject.lightPower = this.lightPower.asArray(); + return serializationObject; + } + + public override _deserialize(serializationObject: any) { + super._deserialize(serializationObject); + this.phaseG = serializationObject.phaseG; + this.extinction = Vector3.FromArray(serializationObject.extinction); + this.lightPower = Color3.FromArray(serializationObject.lightPower); + } +} + +RegisterClass("BABYLON.NodeRenderGraphVolumetricLightingBlock", NodeRenderGraphVolumetricLightingBlock); diff --git a/packages/dev/core/src/FrameGraph/Node/Blocks/index.ts b/packages/dev/core/src/FrameGraph/Node/Blocks/index.ts index 96fb25fd36c..a623119da4e 100644 --- a/packages/dev/core/src/FrameGraph/Node/Blocks/index.ts +++ b/packages/dev/core/src/FrameGraph/Node/Blocks/index.ts @@ -3,6 +3,7 @@ export * from "./cullObjectsBlock"; export * from "./elbowBlock"; export * from "./executeBlock"; export * from "./inputBlock"; +export * from "./lightingVolumeBlock"; export * from "./outputBlock"; export * from "./resourceContainerBlock"; @@ -33,6 +34,7 @@ export * from "./PostProcesses/ssao2PostProcessBlock"; export * from "./PostProcesses/ssrPostProcessBlock"; export * from "./PostProcesses/taaPostProcessBlock"; export * from "./PostProcesses/tonemapPostProcessBlock"; +export * from "./PostProcesses/volumetricLightingBlock"; export * from "./Rendering/csmShadowGeneratorBlock"; export * from "./Rendering/geometryRendererBlock"; diff --git a/packages/dev/core/src/FrameGraph/Node/Blocks/lightingVolumeBlock.ts b/packages/dev/core/src/FrameGraph/Node/Blocks/lightingVolumeBlock.ts new file mode 100644 index 00000000000..319347bbafa --- /dev/null +++ b/packages/dev/core/src/FrameGraph/Node/Blocks/lightingVolumeBlock.ts @@ -0,0 +1,123 @@ +import type { FrameGraph, FrameGraphShadowGeneratorTask, NodeRenderGraphBuildState, NodeRenderGraphConnectionPoint, Scene } from "core/index"; +import { FrameGraphLightingVolumeTask } from "core/FrameGraph/Tasks/Misc/lightingVolumeTask"; +import { RegisterClass } from "../../../Misc/typeStore"; +import { editableInPropertyPage, PropertyTypeForEdition } from "../../../Decorators/nodeDecorator"; +import { NodeRenderGraphBlock } from "../nodeRenderGraphBlock"; +import { NodeRenderGraphBlockConnectionPointTypes } from "../Types/nodeRenderGraphTypes"; + +/** + * Block that implements the lighting volume + */ +export class NodeRenderGraphLightingVolumeBlock extends NodeRenderGraphBlock { + protected override _frameGraphTask: FrameGraphLightingVolumeTask; + + /** + * Gets the frame graph task associated with this block + */ + public override get task() { + return this._frameGraphTask; + } + + /** + * Create a new NodeRenderGraphLightingVolumeBlock + * @param name defines the block name + * @param frameGraph defines the hosting frame graph + * @param scene defines the hosting scene + */ + public constructor(name: string, frameGraph: FrameGraph, scene: Scene) { + super(name, frameGraph, scene); + + this.registerInput("shadowGenerator", NodeRenderGraphBlockConnectionPointTypes.ShadowGenerator); + + this._addDependenciesInput(); + + this.registerOutput("output", NodeRenderGraphBlockConnectionPointTypes.ObjectList); + + this._frameGraphTask = new FrameGraphLightingVolumeTask(name, frameGraph); + } + + /** Gets or sets the tesselation parameter */ + @editableInPropertyPage("Tesselation", PropertyTypeForEdition.Int, "PROPERTIES", { min: 1, max: 4096 }) + public get tesselation(): number { + return this._frameGraphTask.lightingVolume.tesselation; + } + + public set tesselation(value: number) { + this._frameGraphTask.lightingVolume.tesselation = value; + } + + /** Gets or sets the refresh frequency parameter */ + @editableInPropertyPage("Refresh frequency", PropertyTypeForEdition.Int, "PROPERTIES") + public get frequency(): number { + return this._frameGraphTask.lightingVolume.frequency; + } + + public set frequency(value: number) { + this._frameGraphTask.lightingVolume.frequency = value; + } + + /** Indicates whether to build the full volume (true) or only the far plane (false). Default is false. */ + @editableInPropertyPage("Build full volume", PropertyTypeForEdition.Boolean, "PROPERTIES") + public get buildFullVolume(): boolean { + return this._frameGraphTask.lightingVolume.buildFullVolume; + } + + public set buildFullVolume(value: boolean) { + this._frameGraphTask.lightingVolume.buildFullVolume = value; + } + + /** + * Gets the current class name + * @returns the class name + */ + public override getClassName() { + return "NodeRenderGraphLightingVolumeBlock"; + } + + /** + * Gets the shadow generator input component + */ + public get shadowGenerator(): NodeRenderGraphConnectionPoint { + return this._inputs[0]; + } + + /** + * Gets the output component + */ + public get output(): NodeRenderGraphConnectionPoint { + return this._outputs[0]; + } + + protected override _buildBlock(state: NodeRenderGraphBuildState) { + super._buildBlock(state); + + this.output.value = this._frameGraphTask.outputMeshLightingVolume; + + this._frameGraphTask.shadowGenerator = this.shadowGenerator.connectedPoint?.value as FrameGraphShadowGeneratorTask; + } + + protected override _dumpPropertiesCode() { + const codes: string[] = []; + codes.push(`${this._codeVariableName}.tesselation = ${this.tesselation};`); + codes.push(`${this._codeVariableName}.frequency = ${this.frequency};`); + codes.push(`${this._codeVariableName}.buildFullVolume = ${this.buildFullVolume};`); + return super._dumpPropertiesCode() + codes.join("\n"); + } + + public override serialize(): any { + const serializationObject = super.serialize(); + serializationObject.tesselation = this.tesselation; + serializationObject.frequency = this.frequency; + serializationObject.buildFullVolume = this.buildFullVolume; + return serializationObject; + } + + public override _deserialize(serializationObject: any) { + super._deserialize(serializationObject); + this.tesselation = serializationObject.tesselation; + this.frequency = serializationObject.frequency; + this.buildFullVolume = !!serializationObject.buildFullVolume; + } +} + +RegisterClass("BABYLON.NodeRenderGraphLightingVolumeBlock", NodeRenderGraphLightingVolumeBlock); diff --git a/packages/dev/core/src/FrameGraph/Tasks/Misc/lightingVolumeTask.ts b/packages/dev/core/src/FrameGraph/Tasks/Misc/lightingVolumeTask.ts new file mode 100644 index 00000000000..75b662a4abc --- /dev/null +++ b/packages/dev/core/src/FrameGraph/Tasks/Misc/lightingVolumeTask.ts @@ -0,0 +1,86 @@ +import type { FrameGraph, FrameGraphObjectList, FrameGraphShadowGeneratorTask } from "core/index"; +import { LightingVolume } from "core/Lights/lightingVolume"; +import { DirectionalLight } from "core/Lights/directionalLight"; +import { FrameGraphTask } from "../../frameGraphTask"; + +/** + * Task used to create a lighting volume from a directional light's shadow generator. + */ +export class FrameGraphLightingVolumeTask extends FrameGraphTask { + /** + * The shadow generator used to create the lighting volume. + */ + public shadowGenerator: FrameGraphShadowGeneratorTask; + + /** + * The output object list containing the lighting volume mesh. + */ + public readonly outputMeshLightingVolume: FrameGraphObjectList; + + /** + * The lighting volume created by this task. + */ + public readonly lightingVolume: LightingVolume; + + public override get name() { + return this._name; + } + + public override set name(name: string) { + this._name = name; + if (this.lightingVolume) { + this.lightingVolume.name = name; + } + } + + /** + * Creates a new FrameGraphLightingVolumeTask. + * @param name Name of the task. + * @param frameGraph The frame graph instance. + */ + constructor(name: string, frameGraph: FrameGraph) { + super(name, frameGraph); + + this.lightingVolume = new LightingVolume(name, frameGraph.scene); + + this.outputMeshLightingVolume = { + meshes: [this.lightingVolume.mesh], + particleSystems: [], + }; + } + + public override isReady() { + return this.lightingVolume.isReady(); + } + + public record() { + if (this.shadowGenerator === undefined) { + throw new Error(`FrameGraphLightingVolumeTask ${this.name}: shadowGenerator is required`); + } + + const light = this.shadowGenerator.light; + + if (!(light instanceof DirectionalLight)) { + throw new Error(`FrameGraphLightingVolumeTask ${this.name}: light must be a directional light`); + } + + this.lightingVolume.shadowGenerator = this.shadowGenerator.shadowGenerator; + + const pass = this._frameGraph.addObjectListPass(this.name); + + pass.setObjectList(this.outputMeshLightingVolume); + pass.setExecuteFunc(() => { + this.lightingVolume.update(); + }); + + const passDisabled = this._frameGraph.addObjectListPass(this.name + "_disabled", true); + + passDisabled.setObjectList(this.outputMeshLightingVolume); + passDisabled.setExecuteFunc(() => {}); + } + + public override dispose() { + super.dispose(); + this.lightingVolume.dispose(); + } +} diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/postProcessTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/postProcessTask.ts index ca11b2a7643..ccc993e474e 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/postProcessTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/postProcessTask.ts @@ -5,9 +5,9 @@ import type { FrameGraphRenderPass, FrameGraphRenderContext, EffectWrapper, - IStencilState, IViewportLike, Nullable, + IStencilStateProperties, } from "core/index"; import { Constants } from "core/Engines/constants"; import { FrameGraphTask } from "../../frameGraphTask"; @@ -37,7 +37,7 @@ export class FrameGraphPostProcessTask extends FrameGraphTask { /** * The stencil state to use for the post process (optional). */ - public stencilState?: IStencilState; + public stencilState?: IStencilStateProperties; /** * The depth attachment texture to use for the post process (optional). diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.ts new file mode 100644 index 00000000000..4a9c8da2861 --- /dev/null +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.ts @@ -0,0 +1,84 @@ +import type { AbstractEngine, Camera, EffectWrapperCreationOptions, FrameGraph, FrameGraphRenderPass, FrameGraphTextureHandle, Nullable } from "core/index"; +import { Vector3, Matrix } from "core/Maths/math.vector"; +import { Constants } from "core/Engines/constants"; +import { ThinPassPostProcess } from "core/PostProcesses/thinPassPostProcess"; +import { FrameGraphPostProcessTask } from "./postProcessTask"; + +import "core/Shaders/volumetricLightingBlendVolume.fragment"; +import "core/ShadersWGSL/volumetricLightingBlendVolume.fragment"; + +/** + * @internal + */ +class VolumetricLightingBlendVolumeThinPostProcess extends ThinPassPostProcess { + public camera: Camera; + + public outputTextureWidth = 0; + + public outputTextureHeight = 0; + + public extinction = new Vector3(0, 0, 0); + + public enableExtinction = false; + + private _invProjection: Matrix; + + constructor(name: string, engine: Nullable = null, enableExtinction = false, options?: EffectWrapperCreationOptions) { + super(name, engine, { + ...options, + fragmentShader: "volumetricLightingBlendVolume", + samplers: ["depthSampler"], + uniforms: ["invProjection", "outputTextureSize", "extinction"], + defines: enableExtinction ? ["#define DUAL_SOURCE_BLENDING", "#define USE_EXTINCTION"] : undefined, + }); + + this._invProjection = new Matrix(); + this.alphaMode = enableExtinction ? Constants.ALPHA_DUAL_SRC0_ADD_SRC1xDST : Constants.ALPHA_ADD; + } + + public override bind(noDefaultBindings = false) { + super.bind(noDefaultBindings); + + const effect = this.drawWrapper.effect!; + + this._invProjection.copyFrom(this.camera.getProjectionMatrix()); + this._invProjection.invert(); + + effect.setMatrix("invProjection", this._invProjection); + effect.setFloat2("outputTextureSize", this.outputTextureWidth, this.outputTextureHeight); + effect.setVector3("extinction", this.extinction); + } +} + +/** + * @internal + */ +export class FrameGraphVolumetricLightingBlendVolumeTask extends FrameGraphPostProcessTask { + public override readonly postProcess: VolumetricLightingBlendVolumeThinPostProcess; + + public depthTexture: FrameGraphTextureHandle; + + public camera: Camera; + + constructor(name: string, frameGraph: FrameGraph, enableExtinction = false) { + super(name, frameGraph, new VolumetricLightingBlendVolumeThinPostProcess(name, frameGraph.engine, enableExtinction)); + } + + public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass { + if (this.sourceTexture === undefined || this.depthTexture === undefined || this.camera === undefined) { + throw new Error(`FrameGraphVolumetricLightingBlendVolumeTask "${this.name}": sourceTexture, depthTexture and camera are required`); + } + + const pass = super.record(skipCreationOfDisabledPasses, undefined, (context) => { + this.postProcess.camera = this.camera; + context.bindTextureHandle(this._postProcessDrawWrapper.effect!, "depthSampler", this.depthTexture); + }); + + pass.addDependencies(this.depthTexture); + + this.postProcess.outputTextureWidth = this._outputWidth; + this.postProcess.outputTextureHeight = this._outputHeight; + + return pass; + } +} diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts new file mode 100644 index 00000000000..1ba55769818 --- /dev/null +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts @@ -0,0 +1,270 @@ +import type { Camera, DirectionalLight, FrameGraph, FrameGraphObjectList, FrameGraphTextureHandle } from "core/index"; +import { FrameGraphVolumetricLightingBlendVolumeTask } from "./volumetricLightingBlendVolumeTask"; +import { Matrix, TmpVectors, Vector2, Vector3, Vector4 } from "core/Maths/math.vector"; +import { Color3, Color4 } from "core/Maths/math.color"; +import { FrameGraphTask } from "../../frameGraphTask"; +import { Constants } from "core/Engines/constants"; +import { FrameGraphClearTextureTask } from "../Texture/clearTextureTask"; +import { FrameGraphObjectRendererTask } from "../Rendering/objectRendererTask"; +import { ShaderMaterial } from "core/Materials/shaderMaterial"; +import { ShaderLanguage } from "core/Materials/shaderLanguage"; + +import "core/Shaders/volumetricLightingRenderVolume.vertex"; +import "core/Shaders/volumetricLightingRenderVolume.fragment"; +import "core/ShadersWGSL/volumetricLightingRenderVolume.vertex"; +import "core/ShadersWGSL/volumetricLightingRenderVolume.fragment"; + +const InvViewProjectionMatrix = new Matrix(); + +/** + * A frame graph task that performs volumetric lighting. + */ +export class FrameGraphVolumetricLightingTask extends FrameGraphTask { + /** + * The target texture to which the volumetric lighting will be applied. + */ + public targetTexture: FrameGraphTextureHandle; + + /** + * The sampling mode to use when blending the volumetric lighting texture with targetTexture. + */ + public sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE; + + /** + * The depth texture used for volumetric lighting calculations. + * It must be the depth texture used to generate targetTexture. + */ + public depthTexture: FrameGraphTextureHandle; + + /** + * The camera used for volumetric lighting calculations. + */ + public camera: Camera; + + /** + * The mesh representing the lighting volume. + * This is the mesh that will be rendered to create the volumetric lighting effect. + */ + public lightingVolumeMesh: FrameGraphObjectList; + + /** + * The directional light used for volumetric lighting. + */ + public light: DirectionalLight; + + /** + * The lighting volume texture (optional). + * If not provided, a new texture will be created, which the same size, format and type as targetTexture. + * This is the texture that will store the volumetric lighting information, before being blended to targetTexture. + */ + public lightingVolumeTexture?: FrameGraphTextureHandle; + + private _extinctionPhaseG = new Vector4(0, 0, 0, 0); + + /** + * The phase G parameter for the volumetric lighting effect (default: 0). + * This parameter controls the anisotropy of the scattering. + * A value of 0 means isotropic scattering, while a value of 1 means forward scattering and -1 means backward scattering. + */ + public get phaseG() { + return this._extinctionPhaseG.w; + } + + public set phaseG(value: number) { + this._extinctionPhaseG.w = value; + this._renderLightingVolumeMaterial.setVector4("extinctionPhaseG", this._extinctionPhaseG); + } + + /** + * Whether to enable extinction in the volumetric lighting effect (default: false). + * Read-only property set in the constructor. + */ + public readonly enableExtinction: boolean; + + /** + * The extinction coefficient for the volumetric lighting effect (default: (0, 0, 0) - no extinction). + * This parameter controls how much light is absorbed and scattered as it travels through the medium. + */ + public get extinction() { + return this._blendLightingVolumeTask.postProcess.extinction; + } + + public set extinction(value: Vector3) { + this._extinctionPhaseG.x = Math.max(value.x, 1e-6); + this._extinctionPhaseG.y = Math.max(value.y, 1e-6); + this._extinctionPhaseG.z = Math.max(value.z, 1e-6); + this._renderLightingVolumeMaterial.setVector4("extinctionPhaseG", this._extinctionPhaseG); + this._blendLightingVolumeTask.postProcess.extinction.copyFromFloats(this._extinctionPhaseG.x, this._extinctionPhaseG.y, this._extinctionPhaseG.z); + } + + private _lightPower = new Color3(1, 1, 1); + + /** + * The light power/color for the volumetric lighting effect (default: (1, 1, 1)). + * This parameter controls the intensity and color of the light used for volumetric lighting. + */ + public get lightPower() { + return this._lightPower; + } + + public set lightPower(value: Color3) { + this._lightPower.copyFrom(value); + this._renderLightingVolumeMaterial.setColor3("lightPower", this._lightPower); + } + + public override get name() { + return this._name; + } + + public override set name(name: string) { + this._name = name; + if (this._renderLightingVolumeMaterial) { + this._renderLightingVolumeMaterial.name = `${name} - render lighting volume`; + } + if (this._clearLightingVolumeTextureTask) { + this._clearLightingVolumeTextureTask.name = `${name} - clear lighting volume texture`; + } + if (this._renderLightingVolumeTask) { + this._renderLightingVolumeTask.name = `${name} - render lighting volume`; + } + if (this._blendLightingVolumeTask) { + this._blendLightingVolumeTask.name = `${name} - blend lighting volume`; + } + } + + /** + * The output texture of the task. + */ + public readonly outputTexture: FrameGraphTextureHandle; + + private readonly _clearLightingVolumeTextureTask: FrameGraphClearTextureTask; + private readonly _renderLightingVolumeTask: FrameGraphObjectRendererTask; + private readonly _blendLightingVolumeTask: FrameGraphVolumetricLightingBlendVolumeTask; + private _renderLightingVolumeMaterial: ShaderMaterial; + + /** + * Creates a new FrameGraphVolumetricLightingTask. + * @param name The name of the task. + * @param frameGraph The frame graph to which the task belongs. + * @param enableExtinction Whether to enable extinction in the volumetric lighting effect (default: false). If you don't plan to set extinction to something different than (0, 0, 0), you can disable this to save some performance. + */ + constructor(name: string, frameGraph: FrameGraph, enableExtinction = false) { + super(name, frameGraph); + + this.enableExtinction = enableExtinction; + + const isWebGPU = this._frameGraph.engine.isWebGPU; + + this._renderLightingVolumeMaterial = new ShaderMaterial(`${name} - render lighting volume`, this._frameGraph.scene, "volumetricLightingRenderVolume", { + attributes: ["position"], + uniformBuffers: ["Scene", "Mesh"], + uniforms: ["world", "viewProjection", "vEyePosition", "lightDir", "invViewProjection", "outputTextureSize", "extinctionPhaseG", "lightPower"], + samplers: ["depthTexture"], + defines: enableExtinction ? ["USE_EXTINCTION"] : [], + shaderLanguage: isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL, + needAlphaBlending: true, + }); + this._renderLightingVolumeMaterial.backFaceCulling = false; + this._renderLightingVolumeMaterial.alphaMode = Constants.ALPHA_ADD; + this._renderLightingVolumeMaterial.onBindObservable.add(() => { + this._renderLightingVolumeMaterial.bindEyePosition(this._renderLightingVolumeMaterial.getEffect()); + }); + + this._clearLightingVolumeTextureTask = new FrameGraphClearTextureTask(`${name} - clear lighting volume texture`, frameGraph); + this._renderLightingVolumeTask = new FrameGraphObjectRendererTask(`${name} - render lighting volume`, frameGraph, frameGraph.scene); + this._blendLightingVolumeTask = new FrameGraphVolumetricLightingBlendVolumeTask(`${name} - blend lighting volume`, frameGraph, enableExtinction); + + this.onTexturesAllocatedObservable.add(() => { + this._renderLightingVolumeMaterial.setInternalTexture("depthTexture", frameGraph.textureManager.getTextureFromHandle(this.depthTexture)!); + }); + + this.outputTexture = this._frameGraph.textureManager.createDanglingHandle(); + + // Triggers the setters to set the uniforms + this.phaseG = this._extinctionPhaseG.w; + this.extinction = new Vector3(this.extinction.x, this.extinction.y, this.extinction.z); + this.lightPower = this._lightPower; + } + + public override isReady() { + return ( + this._renderLightingVolumeMaterial.isReady() && + this._clearLightingVolumeTextureTask.isReady() && + this._renderLightingVolumeMaterial.isReady() && + this._blendLightingVolumeTask.isReady() + ); + } + + public override record(skipCreationOfDisabledPasses = false) { + if (this.targetTexture === undefined || this.depthTexture === undefined || this.camera === undefined || this.lightingVolumeMesh === undefined || this.light === undefined) { + throw new Error(`FrameGraphVolumetricLightingTask "${this.name}": targetTexture, depthTexture, camera, lightingVolumeMesh and light are required`); + } + if (!this.lightingVolumeMesh.meshes || this.lightingVolumeMesh.meshes.length === 0) { + throw new Error(`FrameGraphVolumetricLightingTask "${this.name}": lightingVolumeMesh is empty`); + } + + this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture); + + const textureManager = this._frameGraph.textureManager; + + let lightingVolumeTexture = this.lightingVolumeTexture; + if (!lightingVolumeTexture) { + const targetTextureCreationOptions = textureManager.getTextureCreationOptions(this.targetTexture); + + targetTextureCreationOptions.options.labels = ["InScattering"]; + targetTextureCreationOptions.options.samples = 1; + + lightingVolumeTexture = textureManager.createRenderTargetTexture(`${this.name} - lighting volume texture`, targetTextureCreationOptions); + } + + this.lightingVolumeMesh.meshes[0].material = this._renderLightingVolumeMaterial; + + const volumeTextureSize = textureManager.getTextureAbsoluteDimensions(lightingVolumeTexture); + + this._renderLightingVolumeMaterial.setVector2("outputTextureSize", new Vector2(volumeTextureSize.width, volumeTextureSize.height)); + + const pass = this._frameGraph.addPass(this.name); + + pass.setExecuteFunc(() => { + this.camera.getTransformationMatrix().invertToRef(InvViewProjectionMatrix); + + this._renderLightingVolumeMaterial.setMatrix("invViewProjection", InvViewProjectionMatrix); + this._renderLightingVolumeMaterial.setVector3("lightDir", this.light.direction.normalizeToRef(TmpVectors.Vector3[0])); + }); + + this._clearLightingVolumeTextureTask.clearColor = true; + this._clearLightingVolumeTextureTask.clearStencil = this.enableExtinction; + this._clearLightingVolumeTextureTask.color = new Color4(0, 0, 0, 1); + this._clearLightingVolumeTextureTask.stencilValue = 0; + this._clearLightingVolumeTextureTask.targetTexture = lightingVolumeTexture; + this._clearLightingVolumeTextureTask.record(true); + + this._renderLightingVolumeTask.targetTexture = this._clearLightingVolumeTextureTask.outputTexture; + this._renderLightingVolumeTask.objectList = this.lightingVolumeMesh; + this._renderLightingVolumeTask.camera = this.camera; + this._renderLightingVolumeTask.disableImageProcessing = true; + this._renderLightingVolumeTask.depthTest = false; + this._renderLightingVolumeTask.record(true); + + this._blendLightingVolumeTask.sourceTexture = this._renderLightingVolumeTask.outputTexture; + this._blendLightingVolumeTask.sourceSamplingMode = this.sourceSamplingMode; + this._blendLightingVolumeTask.targetTexture = this.targetTexture; + this._blendLightingVolumeTask.depthTexture = this.depthTexture; + this._blendLightingVolumeTask.camera = this.camera; + this._blendLightingVolumeTask.record(true); + + if (!skipCreationOfDisabledPasses) { + const disabledPass = this._frameGraph.addPass(this.name + "_disabled", true); + + disabledPass.setExecuteFunc(() => {}); + } + } + + public override dispose() { + this._renderLightingVolumeMaterial?.dispose(); + this._clearLightingVolumeTextureTask.dispose(); + this._renderLightingVolumeTask.dispose(); + this._blendLightingVolumeTask.dispose(); + super.dispose(); + } +} diff --git a/packages/dev/core/src/FrameGraph/Tasks/Rendering/objectRendererTask.ts b/packages/dev/core/src/FrameGraph/Tasks/Rendering/objectRendererTask.ts index f254e678156..de0e3e5f3f6 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/Rendering/objectRendererTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/Rendering/objectRendererTask.ts @@ -304,7 +304,9 @@ export class FrameGraphObjectRendererTask extends FrameGraphTask { const depthTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.depthTexture); if (depthTextureDescription.options.samples !== outputTextureDescription.options.samples) { - throw new Error(`FrameGraphObjectRendererTask ${this.name}: the depth texture and the output texture must have the same number of samples`); + throw new Error( + `FrameGraphObjectRendererTask ${this.name}: the depth texture "${depthTextureDescription.options.labels?.[0] ?? "noname"}" (${depthTextureDescription.options.samples} samples) and the output texture "${outputTextureDescription.options.labels?.[0] ?? "noname"}" (${outputTextureDescription.options.samples} samples) must have the same number of samples` + ); } depthEnabled = true; diff --git a/packages/dev/core/src/FrameGraph/Tasks/Texture/clearTextureTask.ts b/packages/dev/core/src/FrameGraph/Tasks/Texture/clearTextureTask.ts index 0177f90aca1..4f82a8cc7bb 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/Texture/clearTextureTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/Texture/clearTextureTask.ts @@ -89,7 +89,9 @@ export class FrameGraphClearTextureTask extends FrameGraphTask { } if (textureSamples !== depthSamples && textureSamples !== 0 && depthSamples !== 0) { - throw new Error(`FrameGraphClearTextureTask ${this.name}: the depth texture and the target texture must have the same number of samples.`); + throw new Error( + `FrameGraphClearTextureTask ${this.name}: the depth texture (${depthSamples} samples) and the target texture (${textureSamples} samples) must have the same number of samples.` + ); } const attachments = this._frameGraph.engine.buildTextureLayout( diff --git a/packages/dev/core/src/FrameGraph/frameGraphRenderContext.ts b/packages/dev/core/src/FrameGraph/frameGraphRenderContext.ts index f651265e73d..20fefdbc4cf 100644 --- a/packages/dev/core/src/FrameGraph/frameGraphRenderContext.ts +++ b/packages/dev/core/src/FrameGraph/frameGraphRenderContext.ts @@ -13,6 +13,7 @@ import type { InternalTexture, UtilityLayerRenderer, IStencilState, + IStencilStateProperties, } from "core/index"; import { Constants } from "../Engines/constants"; import { EffectRenderer } from "../Materials/effectRenderer"; @@ -236,7 +237,7 @@ export class FrameGraphRenderContext extends FrameGraphContext { public applyFullScreenEffect( drawWrapper: DrawWrapper, customBindings?: () => void, - stencilState?: IStencilState, + stencilState?: IStencilState | IStencilStateProperties, disableColorWrite?: boolean, drawBackFace?: boolean, depthTest?: boolean, diff --git a/packages/dev/core/src/FrameGraph/frameGraphTask.ts b/packages/dev/core/src/FrameGraph/frameGraphTask.ts index 8381f2b9ce4..655f02eea28 100644 --- a/packages/dev/core/src/FrameGraph/frameGraphTask.ts +++ b/packages/dev/core/src/FrameGraph/frameGraphTask.ts @@ -204,10 +204,10 @@ export abstract class FrameGraphTask { throw new Error(`The output texture of the task "${this.name}" is different when it is enabled or disabled.`); } } - if (outputDepthTexture !== disabledOutputDepthTexture) { + if (outputDepthTexture !== disabledOutputDepthTexture && disabledOutputDepthTexture !== null) { throw new Error(`The output depth texture of the task "${this.name}" is different when it is enabled or disabled.`); } - if (outputObjectList !== disabledOutputObjectList) { + if (outputObjectList !== disabledOutputObjectList && disabledOutputObjectList !== null) { throw new Error(`The output object list of the task "${this.name}" is different when it is enabled or disabled.`); } } diff --git a/packages/dev/core/src/FrameGraph/index.ts b/packages/dev/core/src/FrameGraph/index.ts index d569d5dce12..4018b02b0ca 100644 --- a/packages/dev/core/src/FrameGraph/index.ts +++ b/packages/dev/core/src/FrameGraph/index.ts @@ -16,6 +16,7 @@ export * from "./Tasks/Layers/highlightLayerTask"; export * from "./Tasks/Misc/computeShaderTask"; export * from "./Tasks/Misc/cullObjectsTask"; export * from "./Tasks/Misc/executeTask"; +export * from "./Tasks/Misc/lightingVolumeTask"; export * from "./Tasks/PostProcesses/anaglyphTask"; export * from "./Tasks/PostProcesses/blackAndWhiteTask"; @@ -41,6 +42,7 @@ export * from "./Tasks/PostProcesses/ssao2RenderingPipelineTask"; export * from "./Tasks/PostProcesses/ssrRenderingPipelineTask"; export * from "./Tasks/PostProcesses/taaTask"; export * from "./Tasks/PostProcesses/tonemapTask"; +export * from "./Tasks/PostProcesses/volumetricLightingTask"; export * from "./Tasks/Texture/clearTextureTask"; export * from "./Tasks/Texture/copyToBackbufferColorTask"; diff --git a/packages/dev/core/src/Lights/lightingVolume.ts b/packages/dev/core/src/Lights/lightingVolume.ts index aa013fb8806..549e4487965 100644 --- a/packages/dev/core/src/Lights/lightingVolume.ts +++ b/packages/dev/core/src/Lights/lightingVolume.ts @@ -25,6 +25,7 @@ export class LightingVolume { private readonly _mesh: Mesh; private readonly _copyTexture?: CopyTextureToTexture; private readonly _uBuffer?: UniformBuffer; + private readonly _buildFullVolume = true; private _name: string; private _cs?: ComputeShader; private _light?: DirectionalLight; @@ -35,6 +36,7 @@ export class LightingVolume { private _readPixelAbortController: Nullable = null; private _numFrames = 0; private _firstUpdate = true; + private _currentLightDirection = new Vector3(); private _shadowGenerator?: ShadowGenerator; /** @@ -79,23 +81,6 @@ export class LightingVolume { this._createGeometry(); } - private _buildFullVolume = false; - /** - * Indicates whether to build the full volume (true) or only the far plane (false). Default is false. - */ - public get buildFullVolume() { - return this._buildFullVolume; - } - - public set buildFullVolume(value: boolean) { - if (this._buildFullVolume === value) { - return; - } - this._buildFullVolume = value; - this._createGeometry(); - this._createComputeShader(); - } - /** * The mesh used as a support for the lighting volume. * Note that this mesh is not automatically added to the scene's mesh array. @@ -212,6 +197,8 @@ export class LightingVolume { this._numFrames = 0; if (this._cs && this._uBuffer) { + this._recreateGeometry(); + const dispatchSize = Math.ceil((this._tesselation + 1) / 8); const viewProjMatrix = this._shadowGenerator.getTransformMatrix(); @@ -220,9 +207,9 @@ export class LightingVolume { this._uBuffer.updateMatrix("invViewProjMatrix", InvViewProjMatrix); this._uBuffer.update(); - this._engine._debugPushGroup?.(`Generate lighting volume (${this._name})`); + this._engine._debugPushGroup?.(`Update lighting volume (${this._name})`, 1); this._cs.dispatch(dispatchSize, dispatchSize, 1); - this._engine._debugPopGroup?.(); + this._engine._debugPopGroup?.(1); this._firstUpdate = false; } else { @@ -251,6 +238,13 @@ export class LightingVolume { this._depthCopy?.dispose(); } + private _recreateGeometry() { + if (this._light && !this._currentLightDirection.equals(this._light.direction)) { + this._currentLightDirection.copyFrom(this._light.direction); + this._createGeometry(); + } + } + private _createComputeShader() { this._cs = new ComputeShader("createLightVolume", this._engine, "lightingVolume", { bindingsMapping: { @@ -359,13 +353,21 @@ export class LightingVolume { const factor = 4; + this._recreateGeometry(); + let posIndex = startPos; let stepY = 0; for (let y = 0; y < numTesselation + 1; ++y) { for (let x = 0; x < numTesselation + 1; ++x) { let depth = depthValues[Math.floor(mapSize * Math.floor(stepY) + x * step) * factor]; - if (!this._buildFullVolume && (depth === 1 || y === 0 || x === 0 || y === numTesselation || x === numTesselation)) { - depth = 0; + if (!this._buildFullVolume) { + if (y === 0 || x === 0 || y === numTesselation || x === numTesselation) { + posIndex += 3; + continue; + } + if (depth === 1) { + depth = 0; + } } TmpVec3.set((x - halfTesselation) / halfTesselation, (y - halfTesselation) / halfTesselation, -1 + 2 * depth); @@ -414,6 +416,8 @@ export class LightingVolume { if (this._buildFullVolume) { let startIndices = 0; + const rightFaceStartIndex = startIndices; + // Right faces of the frustum for (let i = 0; i <= numTesselation; ++i) { v.set(max.x, min.y + i * stepY, min.z); @@ -427,12 +431,10 @@ export class LightingVolume { } } - const n0 = 0; - const n1 = positions.length / 3 - 1; - const n2 = n1 + 1; - startIndices = positions.length / 3; + const leftFaceStartIndex = startIndices; + // Left faces of the frustum for (let i = 0; i <= numTesselation; ++i) { v.set(min.x, min.y + i * stepY, min.z); @@ -446,10 +448,10 @@ export class LightingVolume { } } - const n3 = positions.length / 3 - 1; - startIndices = positions.length / 3; + const bottomFaceStartIndex = startIndices; + // Bottom faces of the frustum for (let i = 0; i <= numTesselation; ++i) { v.set(min.x + i * stepX, min.y, min.z); @@ -465,6 +467,8 @@ export class LightingVolume { startIndices = positions.length / 3; + const topFaceStartIndex = startIndices; + // Top faces of the frustum for (let i = 0; i <= numTesselation; ++i) { v.set(min.x + i * stepX, max.y, min.z); @@ -485,8 +489,19 @@ export class LightingVolume { startIndices = positions.length / 3; // Near faces of the frustum - indices.push(n0, n2, n1); - indices.push(n2, n3, n1); + for (let i = 0; i < numTesselation; ++i) { + indices.push(leftFaceStartIndex + i, leftFaceStartIndex + i + 1, topFaceStartIndex + numTesselation - i); + if (i < numTesselation - 1) { + indices.push(leftFaceStartIndex + i + 1, topFaceStartIndex + numTesselation - i - 1, topFaceStartIndex + numTesselation - i); + } + } + + for (let i = 0; i < numTesselation; ++i) { + indices.push(bottomFaceStartIndex + i, rightFaceStartIndex + numTesselation - i, rightFaceStartIndex + numTesselation - i - 1); + if (i < numTesselation - 1) { + indices.push(bottomFaceStartIndex + i, rightFaceStartIndex + numTesselation - i - 1, bottomFaceStartIndex + i + 1); + } + } } else { let p: Vector3; @@ -510,7 +525,7 @@ export class LightingVolume { indices.push(2, 3, 1); } - // Tesselate the far plane + // Tesselate the near plane let y = min.y; for (let iy = 0; iy <= numTesselation; ++iy) { let x = min.x; diff --git a/packages/dev/core/src/Shaders/volumetricLightingBlendVolume.fragment.fx b/packages/dev/core/src/Shaders/volumetricLightingBlendVolume.fragment.fx new file mode 100644 index 00000000000..370fe9fc6e9 --- /dev/null +++ b/packages/dev/core/src/Shaders/volumetricLightingBlendVolume.fragment.fx @@ -0,0 +1,28 @@ +varying vec2 vUV; + +uniform sampler2D textureSampler; +uniform sampler2D depthSampler; + +uniform mat4 invProjection; +uniform vec2 outputTextureSize; +#ifdef USE_EXTINCTION + uniform vec3 extinction; +#endif + +#define CUSTOM_FRAGMENT_DEFINITIONS + +void main(void) { + gl_FragColor = texture2D(textureSampler, vUV); + +#ifdef USE_EXTINCTION + float depth = texelFetch(depthSampler, ivec2(gl_FragCoord.xy), 0).r; + vec4 ndc = vec4((gl_FragCoord.xy / outputTextureSize) * 2. - 1., depth * 2. - 1., 1.0); + + vec4 viewPos = invProjection * ndc; + viewPos = viewPos / viewPos.w; + + float eyeDist = length(viewPos); + + gl_FragColor2 = vec4(exp(-extinction * eyeDist), 1.0); +#endif +} diff --git a/packages/dev/core/src/Shaders/volumetricLightingRenderVolume.fragment.fx b/packages/dev/core/src/Shaders/volumetricLightingRenderVolume.fragment.fx new file mode 100644 index 00000000000..95cc9a61561 --- /dev/null +++ b/packages/dev/core/src/Shaders/volumetricLightingRenderVolume.fragment.fx @@ -0,0 +1,48 @@ +#include<__decl__sceneFragment> + +uniform mat4 invViewProjection; +uniform vec3 lightDir; // must be normalized +uniform vec2 outputTextureSize; +uniform vec4 extinctionPhaseG; +uniform vec3 lightPower; + +uniform sampler2D depthTexture; + +varying vec4 vWorldPos; + +float henyeyGreenstein(float g, float cosTheta) { + float denom = 1.0 + g * g - 2.0 * g * cosTheta; + return 1.0 / (4.0 * 3.14159265) * (1.0 - g * g) / (denom * sqrt(max(denom, 0.0))); +} + +vec3 integrateDirectional(float eyeDist, vec3 viewDir, vec3 lightDir) { + float phaseG = extinctionPhaseG.w; +#ifdef USE_EXTINCTION + vec3 extinction = extinctionPhaseG.xyz; + return henyeyGreenstein(phaseG, dot(viewDir, lightDir)) * (vec3(1.0) - exp(-extinction * eyeDist)) / extinction; +#else + return vec3(henyeyGreenstein(phaseG, dot(viewDir, lightDir))) * vec3(eyeDist); +#endif +} + +void main(void) { + float depth = texelFetch(depthTexture, ivec2(gl_FragCoord.xy), 0).r; + vec4 worldPos = vWorldPos; + + if (gl_FragCoord.z > depth) { + vec4 ndc = vec4((gl_FragCoord.xy / outputTextureSize) * 2.0 - 1.0, depth * 2.0 - 1.0, 1.0); + + worldPos = invViewProjection * ndc; + worldPos = worldPos / worldPos.w; + } + + vec3 viewDir = worldPos.xyz - vEyePosition.xyz; + float eyeDist = length(viewDir); + + viewDir = viewDir / eyeDist; + + float fSign = gl_FrontFacing ? 1.0 : -1.0; + vec3 integral = integrateDirectional(eyeDist, -viewDir, lightDir); + + gl_FragColor = vec4(lightPower * integral * fSign, 1.0); +} diff --git a/packages/dev/core/src/Shaders/volumetricLightingRenderVolume.vertex.fx b/packages/dev/core/src/Shaders/volumetricLightingRenderVolume.vertex.fx new file mode 100644 index 00000000000..e2036137d47 --- /dev/null +++ b/packages/dev/core/src/Shaders/volumetricLightingRenderVolume.vertex.fx @@ -0,0 +1,13 @@ +#include<__decl__sceneVertex> +#include<__decl__meshVertex> + +attribute vec3 position; + +varying vec4 vWorldPos; + +void main(void) { + vec4 worldPos = world * vec4(position, 1.0); + + vWorldPos = worldPos; + gl_Position = viewProjection * worldPos; +} diff --git a/packages/dev/core/src/ShadersWGSL/volumetricLightingBlendVolume.fragment.fx b/packages/dev/core/src/ShadersWGSL/volumetricLightingBlendVolume.fragment.fx new file mode 100644 index 00000000000..bf4bed27f11 --- /dev/null +++ b/packages/dev/core/src/ShadersWGSL/volumetricLightingBlendVolume.fragment.fx @@ -0,0 +1,30 @@ +varying vUV: vec2f; + +var textureSamplerSampler: sampler; +var textureSampler: texture_2d; +var depthSampler: texture_2d; + +uniform invProjection: mat4x4; +uniform outputTextureSize: vec2f; +#ifdef USE_EXTINCTION + uniform extinction: vec3f; +#endif + +#define CUSTOM_FRAGMENT_DEFINITIONS + +@fragment +fn main(input: FragmentInputs) -> FragmentOutputs { + fragmentOutputs.color = textureSample(textureSampler, textureSamplerSampler, input.vUV); + +#ifdef USE_EXTINCTION + let depth = textureLoad(depthSampler, vec2u(fragmentInputs.position.xy), 0).r; + let ndc = vec4f((fragmentInputs.position.xy / uniforms.outputTextureSize) * 2. - 1., depth, 1.0); + + var viewPos = uniforms.invProjection * ndc; + viewPos = viewPos / viewPos.w; + + let eyeDist = length(viewPos); + + fragmentOutputs.color2 = vec4f(exp(-uniforms.extinction * eyeDist), 1.0); +#endif +} diff --git a/packages/dev/core/src/ShadersWGSL/volumetricLightingRenderVolume.fragment.fx b/packages/dev/core/src/ShadersWGSL/volumetricLightingRenderVolume.fragment.fx new file mode 100644 index 00000000000..c3dd913b47e --- /dev/null +++ b/packages/dev/core/src/ShadersWGSL/volumetricLightingRenderVolume.fragment.fx @@ -0,0 +1,51 @@ +#include +#include + +uniform invViewProjection: mat4x4; +uniform lightDir: vec3f; // must be normalized +uniform outputTextureSize: vec2f; +uniform extinctionPhaseG: vec4f; +uniform lightPower: vec3f; + +var depthTexture: texture_2d; + +varying vWorldPos: vec4f; + +fn henyeyGreenstein(g: f32, cosTheta: f32) -> f32 { + let denom = 1 + g * g - 2 * g * cosTheta; + return 1.0 / (4.0 * 3.14159265) * (1.0 - g * g) / (denom * sqrt(max(denom, 0.0))); +} + +fn integrateDirectional(eyeDist: f32, viewDir: vec3f, lightDir: vec3f) -> vec3f { + let phaseG = uniforms.extinctionPhaseG.w; +#ifdef USE_EXTINCTION + let extinction = uniforms.extinctionPhaseG.xyz; + return henyeyGreenstein(phaseG, dot(viewDir, lightDir)) * (vec3f(1.0) - exp(-extinction * eyeDist)) / extinction; +#else + return vec3f(henyeyGreenstein(phaseG, dot(viewDir, lightDir))) * vec3f(eyeDist); +#endif +} + +@fragment +fn main(input: FragmentInputs) -> FragmentOutputs { + var depth = textureLoad(depthTexture, vec2u(fragmentInputs.position.xy), 0).r; + + var worldPos = fragmentInputs.vWorldPos; + + if (fragmentInputs.position.z > depth) { + let ndc = vec4f((fragmentInputs.position.xy / uniforms.outputTextureSize) * 2. - 1., depth, 1.0); + + worldPos = uniforms.invViewProjection * ndc; + worldPos = worldPos / worldPos.w; + } + + var viewDir = worldPos.xyz - scene.vEyePosition.xyz; + let eyeDist = length(viewDir); + + viewDir = viewDir / eyeDist; + + let fSign = select(-1.0, 1.0, fragmentInputs.frontFacing); + let integral = integrateDirectional(eyeDist, -viewDir, uniforms.lightDir); + + fragmentOutputs.color = vec4f(uniforms.lightPower * integral * fSign, 1.0); +} diff --git a/packages/dev/core/src/ShadersWGSL/volumetricLightingRenderVolume.vertex.fx b/packages/dev/core/src/ShadersWGSL/volumetricLightingRenderVolume.vertex.fx new file mode 100644 index 00000000000..ae4916b6b8a --- /dev/null +++ b/packages/dev/core/src/ShadersWGSL/volumetricLightingRenderVolume.vertex.fx @@ -0,0 +1,14 @@ +#include +#include + +attribute position : vec3f; + +varying vWorldPos: vec4f; + +@vertex +fn main(input : VertexInputs) -> FragmentInputs { + let worldPos = mesh.world * vec4f(vertexInputs.position, 1.0); + + vertexOutputs.vWorldPos = worldPos; + vertexOutputs.position = scene.viewProjection * worldPos; +} diff --git a/packages/dev/core/src/States/IStencilState.ts b/packages/dev/core/src/States/IStencilState.ts index ff71cef878f..9a2895b2a81 100644 --- a/packages/dev/core/src/States/IStencilState.ts +++ b/packages/dev/core/src/States/IStencilState.ts @@ -1,23 +1,69 @@ -/** @internal */ -export interface IStencilState { +/** + * Interface defining the properties of the stencil state. + */ +export interface IStencilStateProperties { + /** + * Whether the stencil test is enabled or not. + */ enabled: boolean; + /** + * The stencil mask to use for writing. + */ mask: number; // write mask + /** + * The stencil mask to use for reading. + */ funcMask: number; // read mask + /** + * The reference value to use for the stencil test. + */ funcRef: number; // Front stencil operations + /** + * The stencil comparison function to use for front faces. + */ func: number; + /** + * The operation to perform when both the stencil and depth tests pass for front faces. + */ opStencilDepthPass: number; + /** + * The operation to perform when the stencil test fails for front faces. + */ opStencilFail: number; + /** + * The operation to perform when the stencil test passes but the depth test fails for front faces. + */ opDepthFail: number; // Back stencil operations + /** + * The stencil comparison function to use for back faces. + */ backFunc: number; + /** + * The operation to perform when both the stencil and depth tests pass for back faces. + */ backOpStencilDepthPass: number; + /** + * The operation to perform when the stencil test fails for back faces. + */ backOpStencilFail: number; + /** + * The operation to perform when the stencil test passes but the depth test fails for back faces. + */ backOpDepthFail: number; +} +/** + * Interface defining the stencil state. + */ +export interface IStencilState extends IStencilStateProperties { + /** + * Resets the stencil state to default values. + */ reset(): void; } diff --git a/packages/tools/nodeRenderGraphEditor/public/index.js b/packages/tools/nodeRenderGraphEditor/public/index.js index 6223cde3d68..e3c72513bb9 100644 --- a/packages/tools/nodeRenderGraphEditor/public/index.js +++ b/packages/tools/nodeRenderGraphEditor/public/index.js @@ -218,7 +218,11 @@ checkBabylonVersionAsync().then(() => { let engine; if (useWebGPU && (await BABYLON.WebGPUEngine.IsSupportedAsync)) { - engine = new BABYLON.WebGPUEngine(canvas); + engine = new BABYLON.WebGPUEngine(canvas, { + enableGPUDebugMarkers: true, + enableAllFeatures: true, + setMaximumLimits: true, + }); await engine.initAsync(); } else { localStorage.setItem("Engine", 0); diff --git a/packages/tools/nodeRenderGraphEditor/src/blockTools.ts b/packages/tools/nodeRenderGraphEditor/src/blockTools.ts index a36a01c00b6..a67f16f7eb9 100644 --- a/packages/tools/nodeRenderGraphEditor/src/blockTools.ts +++ b/packages/tools/nodeRenderGraphEditor/src/blockTools.ts @@ -43,6 +43,8 @@ import { NodeRenderGraphFilterPostProcessBlock } from "core/FrameGraph/Node/Bloc import { NodeRenderGraphTonemapPostProcessBlock } from "core/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock"; import { NodeRenderGraphSSAO2PostProcessBlock } from "core/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock"; import { NodeRenderGraphComputeShaderBlock } from "core/FrameGraph/Node/Blocks/computeShaderBlock"; +import { NodeRenderGraphVolumetricLightingBlock } from "core/FrameGraph/Node/Blocks/PostProcesses/volumetricLightingBlock"; +import { NodeRenderGraphLightingVolumeBlock } from "core/FrameGraph/Node/Blocks/lightingVolumeBlock"; /** * Static class for BlockTools @@ -195,6 +197,12 @@ export class BlockTools { case "ComputeShaderBlock": { return new NodeRenderGraphComputeShaderBlock("Compute Shader", frameGraph, scene); } + case "VolumetricLightingBlock": { + return new NodeRenderGraphVolumetricLightingBlock("Volumetric Lighting", frameGraph, scene); + } + case "LightingVolumeBlock": { + return new NodeRenderGraphLightingVolumeBlock("Lighting Volume", frameGraph, scene); + } } return null; diff --git a/packages/tools/nodeRenderGraphEditor/src/components/nodeList/nodeListComponent.tsx b/packages/tools/nodeRenderGraphEditor/src/components/nodeList/nodeListComponent.tsx index 2a8bc088079..5854fe368bd 100644 --- a/packages/tools/nodeRenderGraphEditor/src/components/nodeList/nodeListComponent.tsx +++ b/packages/tools/nodeRenderGraphEditor/src/components/nodeList/nodeListComponent.tsx @@ -71,6 +71,8 @@ export class NodeListComponent extends React.Component>vnY78Mc_f<$7r)E1*^l$KVD8Zm1Vs}U=d)~c2+dsC}R z`)lo@)2O2B>GR_M_P)9=?z!J{&gYv!aIoP6NrG5dSom;Qv=a*pz>S54HIEDM@8q{@ z#xoWcFbfWiB44ij^!r1h(s;2dm$|;-hn0Rs#WafKBdvUgtqZr0Px8@eiV^s$wH&He55@Q@{?z2=#XvfhMHyYCb1f>#-rfgca(G_bzXox}Au37y z?>yL8d0uH;^Y1WRf9z^r6nNZT=e)GV3PVo^(-x?yT4${CS5(8xOJeo<#+k*BLVrIF z+~sPjO?AD==JLzV%Au8ISk`_c4wTY!U$y8z?kC&@cKt@_CBDE5S^LK5sjG`>PWRl2 zh+EGV8)g;PDI7&XGe^m9J(jz=I(4U3NZ_7*8X+?#0{3<_-njS^Q@ObRM(9^#o$nVn z%SN%1CLW3uZ{D6Tks{5MnrW=1MMOhK+N6`^cK2v1Rxku za@6Q(yPN$gaX6%0t{TTK4-?!iOUrooH|7aY=LT)5##`HWDK#heo#yr%)>BrC*PK@= zHZm6wnhU{P`R&e@pT-5=Lu@{t<`|m4a6Yz`OYpzT>Y%->TDBGWZ6y{QDb4|Ub5QuX z#4YR>qpVLxGA0=X%Uz8|SDIC^HgolTLa!5(BPY?ifX~M>McabLTfEyC^ZQL+XBGeY zePx5`xpH_r#GXJzhN5-xkynC+9J%K+r?owa*VGessy-a&S9x1W#_1+?rdkV0unT`l$FGPn}=g=5mo2b|bAeGKC4OmXBk{%?0C>Owzz5<-(b z*PvIV`^BYl`;VxOx2Tl}2xr-Vrp*VnJNz4t-!~fP=d^-C2$7kxtiaAj$0_}IiuyMY z&l3~D&j$hT1u@;4HAg>V6sMdIgF^Baf*)Irz4t?-y10E!%2$Ds>C*#ara@nJBkm0z z{D>FcPx) z6ilO6+nQKv|88!iVAz6GIS_-U9mzh3^C5XE`cVi5{fqDO3GZCQfBNzG)SAAQ*6Hm7x>hZUd0u6gzl+ihXgLeqngmn?oVOD4!if@Abzvm zK=NQ`wu2qtaPWDrM{$lG-O`;lWP@tnw|%@q>YRR-Jne6lT>NILn_kaM-V$RU`@vDG zhNwF?XgrWoUFmsr3=A_$rZkM-tUtkk1+!Act}EI!T|;#`^&sBKDtz3M;{lB*@h>ai z*F(JQpgX$%N&C_ihpE-q=uGvT3FPiNE2i4DPK_0#QfuEcQj05&Ay4l#DaO{ zqe?A4Hyy8T!6=I(T~R7c=GqpQotBesO?qaJF4SZN3^_m_`lSpu^+0$>3$-01O-4AL z?G)ckrst#rtgJAh|KUD^<7!Jf#HQ49z;~s&FS;r-)JJ zv5p<0j^l0F+uWj?O8CLSn&oZqj5+D@mahf_WdBY{=*o#*8$2 z`B&F&&;7nEf;((S*D`auj>w>T|<^ z{p~X;N62HkQs!@j=8Rh9J5c%55eAK+v%remnC|3-=(*%I>? zFZLVLWs%T+YHWV=@>aAK%$7IieRe>($D5V7J6R+h-AN+m1=iF#gYJmOscfeBLFORtG)h|&pz{#q zNi1{z$Y`_4a9<6r0qS;LO!E`pG~y9B9|tK54|YZQE&0Nj50P+|P|yOAfFLG*tE=xT zRIThT1_ycRMtn*EF1|^=YJSeYC?K8*KEtP8Ci4^hA&3*?InNvah zX;>2}aaapO9KXV$bY7@vL@ik-J zA1~Ztu9i+86RewX*e)>++`4-YV>FG~XO97-&{PYTDZ96X%0U9d!m^LWRbR4ZDwxcu z%<}?W2#C=I>TmW!lQ+9|KAz> z5mq1bc@)1aHE=k)qEV2kyYzv#LKF+s8VB!l{mglx56{+~B%f1eC~UuE2i`JpQaZx5 zJ!gw)eF2fG*FVq+eurHohbiin+{zjd?py9v0>g^YdPjM0eS69FKDS5%$#mZ~UbOoB z#j=t^u(p`y8S}8%kjT+As`kA`pzES;|1P*w%qiiFZ5%Qi{re6J$b&d74hV5gS+#Rq zYikmf7ZqcDYWphq?j$c?)Pd9b;aDa4sX64nqeF3)srsI!zz?m=eX*YPx7H}p3^w){ zB_6Qy#wAh9xCw#~(jckq^as^{qMlNdr9Fkiya-xiiLn<@g0r#Vh+*Fs%La0XQQlI} zm&fvVg)F6xWTd|JFWT$7$66EQ1zT1+>GY-7U8^-`%Qd~o^gj=FIQA^a=;hav8Jo!yCiv; z<$6|ii1h8ykfN1l+?yHw*VDLRp1DZ{I#O`Fzs%Na9V zPK!hUAFOPsOo5N)6=t%Tila#X?L3V2G`zpesl-A|Je}{}D-D@M(}I7}<2b4;q2(&^ z%(pKKrQ+1<@7+DC=?k>%7Yrfs=O)L|o3t?s8ZSib!`0=7d*HKa$qG%?+HMak3!0LG za(5fmV#j}ry-{VCK(7>9kKz?f6H;su_C%S+6ev*E-};qw_UYDnSwY!1y1}z;!sNFA()ayn;?bMT=GZdrM1q3pFOzu%ncoqA?yuHTPAEoj zpD*QKYui$VtxnwSvQ%A!{JdVA!E}fV-DXTgz=gobVTp4^{I|U?r8}9HM055$6Q4q> zXTwH5QhhCn^Z4=ua=|37Ogc{e^@F6e>%&dh3-EIP5KQ1F7VC@oZ8jgmDvlT0Nj7I? zfWf%+N13(s`Qzyp_5{`x6L+9O^TPHh%y2gXW1>^;BQ0y=mCp2hVodG1KYFHMwX#uc za5bX?<8rf0w4)DpmZ@(=eQk7x9DD=OaTi|LgI$ehB z(P_b{>q+CFq8bmJt#od460@yCBv4&~RkuAnV6pVhxI^*3K|@Y3R7(>Dq|;ZMkn4Iy ztc%t&=l=SlQ6jI_!6J|0Fv<*nSHXuzHjjOtvRJaM1j}iW+6GqzgO+bruA|kop3O;} zY<(YCa8BfPy8D1juU9z$LcT0=x16|&z26}G-<15)47;-8v~97A-%hwQs9q1oM;eTF zz7RFjWks~#o=r~1++UU71xXIm zz*fUC=p^dU1H8eNAupTPViRGU6I8%D3slx6PC1}(!s5kU2mL=`329YdSm1ZOZ2pej z73sQD_ErC$1>|v?Wferd(Q>~ByYSB=H*wDuPHHDc{JXFLI7mi{a%<)2In)$>D9sP- z&rLn>ZPpBjM3de_WZnhmHOZEfZB=g1zoVifxVnX^$9Hjpw1Nv9<0;OPX)lD-i-kS~ zY=RPNgr>28+^9NDpRq2NfZiK6e{z1Dv%Dsz;KtPxL9s$@yx`@{+--$;drXc>H&`PK zYcXGm1r~Sy3X6c9<8!z38Nkhb&VX=2;HeE0e#D3|2XsjIhqQU*fbTm2Ti}^Gi>K9I z)vNzpRnbke^tBQ>qkFiJv89L^f#DMT-?-;Q1h78tV zVn1$7aaQo2CwQ?c8PT=QZX|z{Z-1>;?NIzD#hDR-7Q+zQpxezBNk||>#WJ^ci1NQK zAdZ9i0uU0n=c6kJRFf;0=@TT*rgfxA2fTAq_Z!fL4=@gjR?Oy;erwnQZySW3GHnu_ zEKFz?HMf&!IzYYFx5c@i10iD8=$Xlu{xk(KSc4MZ^HkNIdZDfAakTOefS(>N)ZrY_;rw%toYO?`o;J4h|X!Qr5eFL?^a2I?KsybnGq+0x?Z}O4dT0n*(E)p z8<<=F>i2`yi0x^kcu&zNS^L7oi7jJm!vg%R1FPLgA5>xOQWy6aLZyAN5%>m zn+g%OYFQ!6QD}mLiuUg%(c`+-Yo0XwzZfg_+7`nlB>He$v?hFrzUxtnKCsooZ$3sN z%PLA%=V}R^O!f0!6u50KfcUwpo{N9Yji;bZl6hvA)JO^3#YJF`e-ugrbE2sDi z)?H3jnecmisw_~c)nt5^>cpn-((qrDhP{DbJa56e2G{lwYPTmqkt-~c&ytbR0#lrO z3c)#Mw%eB_52q57>o)4M4-Az{ZGtFcu3F8Da`>2WzQU}U(Nm&OQ)AR&(Sq>Zqe9KT zDYjFk&v6fw1yGGkb&^xBMi7!!D?8q<=l#`ScWrcbJz(vwPPa2?F6+eysNd zDHn0$%8RsGP%xq?1y>Is33HzeD452oE8utzFTthL?Xw~vCMN00J<^H*5luZtq~i(B zTYkq~!^-SZSNhWiMxd_ph$Tjp8ix`N`mdX$l$C1{c!g)fkykfR1iv`aAqKZ=v4W~q z7sQC>V$LVGi0kZS#ONpxhVH?EgfTbeBAGcCrv^>?2y-AD7sSFdKkHPV5n%#K?qP9h zWO^x$4ZGU==st>WQ}7i)k??kiQDwQp$R ziB~T!*7Z~Oe${26ax1sNZ#s5DUgy&L0ztYyZ*R-a#%Oo3|!d$=A8iyQml?QDXu+14{fZO8XV`jMiGjC9`3Yqj zZugQ1=xQQ4n4;>Oq7^fzNC6_Q$mDd|NV2i{l~m@JtUDM);dP|8<_Vd}-CL?JRrfP! z1~VFWE7(0EEt4cpfozv}$BaN8t~GN}2*=gw)qy689XhxLb)SZ?YQpgLH}aCPUjr_KjC7~4mL2Qz6r)9s<-rR zX5yh9^xQR%D}2whDj$?YlM5AxUEAJnQ21swCI zE+u0PPGVOu9v_F3=I6!ZXw3D-dt%<|AldvP!#l315V=Byda?gFXzJ$U`K(BRr0UdP zUlt$XVU%$9#S!K%U-H=k>BPlOy~i(jc{~X}5AN!_FRj2@qq(?-YB3tse*M|i@Rj^G z@AoW5WaW!)O7WyB%ja0dnQDkvHLaJ3C|hoqwB=b>Y(jvu9v0SUBGj5R?wog#>p1wT za>?9Z z==*_$kq3`wn&d=IaxnyZyQM<6tI|INVHE%b&P7PhtTeFQTwtqv<@gU0T#^LYhSj%p z8IWxmZiS#t2_5~$z~t7FD;$-h4!wSg4cdv{_OZZ+TmzAzEr;2;`OhPZUlY^=kCqel zP$ zG;_W0>}YlEk8y9O&Zm+gNR_D`mkvPT8@H8fwBfA#Fvn- z-H$6Jwf^U{Y&2T5;h}kK4_v11z9u|5U{V_a5Vn~(~ zT9Ch2_Xzn0+oV|MY3ICNyv<=EQp%z0-d%pi&Hs*)m^1bxB|!u`!(TrlrxzxS-yUEY|C)qiT4X}Td{KX`#vjS zDTj`NbD{QX4T6wJhSnz7F(Bb;=2pohv|r#JJUXN%LO5A%rYZ!1uexH@JJ0ECl?RYY z3``uEl*ryIEa6;FwH#oFEF}3R6Yc;NrE`xC&u7dDz2@NFdBfUzVvwjbE&?ahC&yGD zKF8xWM6)SDP4LZHx>vQrP5)OF$*IJs&S3FTZT1wKQhrCNgm-;kw0ExXaSpr*mo4&Nm{b?)Q zN$K_#aP%i35AU}8`A3XA0|@)^?}i4=SzoqSzs5<8Y~PLI+1p+Y&z?FEtGg)M%$q^c z{UfpRV)m0#&xFJtfv`O|0bKeRsy+$-CunJ*`#(j3eBlBwq%7n{UR-Rd_p}R5t-L~!e)PG?vX`w)7*2N z4iC$4z=qIm^ij)J(GV+Mf0p3>!&AxB2_$>hXv~7E1D}%r2v^*()_?;y54> z(~T6m;e*`LlQ(lK;Jvfj%vyTA!pM4Hp;m&wo6~I{`M!&WOl>*iJhtt5if*u?!19*teM|)QFdnx;$kC{H>_OQ z?74Jhao#VLVS)v5j*J~0vqC98O4=-;zl`mi?=${8aQXI!3ZaElXZVGsL?`lvjk;)Q z*8gwzj7|7p27)ukF3d=p z)2!=LgRB2>PkjgEiIM75#1gZuaKRn4eqJ6__%SSnyZa*XrZl6}R^7mkt4Q+(9hvvS z66tWqR_7zNA=h{DLB5p8H46^eB5kHEO8erbOExQmZTl-w(~FSW*z!E7-fENN1yC%| znUv@#j}L(WUr0Y?86efxu7PEZ9rF9H9z<2M%UJSa#y@%9GG`=LPf1M|)s~~J%^{H& z-2+$Ik}FuGSd*FI3|E59x!Zt$REq_)*o5vM*ZMv+!Jhw;RwZ9NxtHtz7}cCwpjKFt zrv8MGr!heI<1PPN0Z-_@2X**98rNynjm0MKafvaGyrg{j zvqEn>hyz&mPF{qVn6eHhjX+|T)3g$0#wjXuk!S5R;#OVj_Nr_RCWqHQ zirDl!EUF&wYMi)Gl7FC`gao7ufj0S_?q#Wa@;A12v_DcbJEsBKQ65)y3ERIl>?vQg z=)UhH+`FrRM$YVCM>(>IBuwk=nWo;CF0GX51{s^gBs~h~Y1&#Ep-{X;bSpk5V>_(| zP}7Ds6*+eH(HZWThbk=w68;WzbsNRLFhsUBt!3sp?q+~U|5*;~$E-sj!#XKE6zqW@ zYLAY0l<=XV->c-^5^)Olf4J@;Z+!EAUBIacZ`2w3d>#1>J+>k_c}WUcc7r@^d4p$h zgapB>_lVvR;OsiB>ujDS{M4w^Q+&7xJc$&V8xjrMExx8v-Fx}!nT)6OwOYXAZ6o1Z3YfvvI35wf*W+4j%SII*pSX7B?{k4Tlu?*O0ymg$kqRjKmvRkox1 z7gFNcMwl~+nZs-n3~2;x7fZ}?Zv^Ng!BZDrWX5)81K8%mkoz;;fDv!WO>pPe22Q)< zVbZRIiph@d^|1wk9Gj1`qXol}b8{w3!Qc?F#=N!2drwf*%Cou5JE^G5WNMzD{P3E< z_>M@CnthRKZUCaYTu|kv@WfR@QBsNRBm}6%^XKg~pfJ0-I@N*VQ0lL0+KxX{*ZeUy zIBDF(MM1*v`1ZCr{QWy;h0y!)Jvp|Cb*{+YJVFsLh~gQgj-A&l1!)6dVbsE z{D*r#_0XL8MK?EZAF>A+c*?u3ghu7b)*?(2P98!2EYdOlqk&sR!FMV}< zq69jp1qg)kvWZI_TzYi2MAkqUlfXJuwzJVG;x^((7jkJ|-Q!^?KLT&kh0ZPOi#*U> z4Lqv*pj9fm&_c;IfRHtm)on9dObY@{V)#`iu4gaE%4=4S+mbX5Qac4lwn)f_7J}>d z9m@iwhj^0RsZaC`HabTZd9&@H(GzA4jvtfKz-oNs_PGsFomwRs?cnSBzw2#U=JDf> zjmHs(T#Id&C!VL$GDrKC|1Mh1pOR3b+7R8qBPm_p8Ep>6(2ToW+Va`xJ?TwuU{YRq zMozI6Xb0LnPqOk})MWDrC=|T_lm`MAM7^PG>T1o-qhdgnBY%s2fQ;fZ!OTso$62KO z6!kx>vm-iQssVcc*tJqP<<&W6h*D9{hKt&bBGGn&Kz4?NOJP%N%@-Bm!~Kzzt5dJ? zVbN7L%PJs0)WHm#a(4F8)Yn}l`tCS2*w5aPe!}ILO?Y_OWE(~}FZ-xKH>`{wyKGOS z*#k+hB<~Qbiu)^-@R#tQ%QQ<{n(_gV&vWm%<`MqAzoG_=3Y+H1d=wGlrC`$r`_sV< zBY-dJS^PV;aJwqrTm5Hq7UDvTJS40s{#9k8-I?)X%soj%LQ4X)q!s|GG+yTYKuy}bF6Ip zb~|W+qg#-a{VU5=dYgid%eBe(HTJ8{48+g8Ogo^S$Jaj!X)Ol{mlt%&Fx?gr@LxE1 zON$VVS~py4q$H+qg>oNH%vSW@cuBhfugzH=Eqb&7n9U@egHdF?&zluJ?`%H(oS7HS zJ_N%{p=?k@^Y1Um&Z5jS8|dm@?zf%H4fq_jaPo;==&?31{ef~i=D};-`UJP2B0uQN z;dkySQL0#}?I_;3>WHTUEK2>>Lm8KtXcD-F5o}oLa?NVQ9GLp~=bRS$EcJc237SGc zvO+GhR;64QnoIOi;UZ527u+j3icF(Rr0c9QO!H}lS<}#ll?gcg6TgVQh{()ALP{6Ty0 zSZ-6rUkemkQ5ae~ZV*9fHib@YTflzW-Lz2EyngH2ac%_G;?8}du53kjkC{Ue?a?2-61R2YP`dh*q zuXnuF*VUC?YHI@rYnzN7huPXg&{7hK;QC-8WxK%atMI&|IQdG3cQxUZwDzah9o{A1 zNRz!>GaI8BHlFa$L_2IaOmr;#I;nD7X#{}N*kF}_*66fe6})y4@khAh85hQ+J~V`Y z^2PdRW{&O(6CFsc!hM7mNBMI5Q_2WeVEzO>F}x@%GufR8e^C4$&iqnKAkqBA7qkNF zO(E=A(>6lMzl36>ff+LMM=UPSI?Lx)zGV=Mwz4z%D*_a~CqU~WL3@6BFoizyyqC;|v2v@tUesqAuWcr|=LAn}u)mgvg7J9ELdIghuUl{nG&Xg zHj8daSd>Jcn;_Y6&aP);U87EkLWk`ePUs?si>C;+?6}?6 z!2nRAn#HVw#aq_S%SHnKSuYq|H4T^Ab(3J6H!bTpl4f~mZFGel zqqPPPcFg?-3qNCWIn2pz`>BFtF(7+`TdceUz-F5s4{J*KTwH8HcU>2|x5?CKfL)MA z`Ur)9XNtNgx@N<@H;ydbk`_7bHWUTRIr>2zb%C!Lv*JJr6zX|FZ6(UmhW)(S!!T|2 z6>Nw=$I`X4ik|VT>(jGm=#FcK(2G2$K=Ub}C+f=}?;q9>s9v)~oe}%FSA(mLZ6>x{hpSOq8`89TJ)}*Sf@?7lz@c!5b<1Ed44XcF{6WYXo4m_%9^03)4!#fX93tSk>)nI^&*% z(Rg3!WebnT)l`-)`aCw_Ra?*f8OR_jd+03P0yQj+_sS3M zxBC+I{@_xuB}vgI$>;^Sqnkb%o)o8$oS9sLkFfwM+Zag>^Evd4+ZMCth|9ESZ^)cCEo8y_yh+RtV4|3_x(X`_r7o(bZjn~%{)HJ%Z(!(k7uID8Yo19) zuIfSdligpVo2Z&)+_loEme(Mz`Q9?6Q`cCd77EBAp~1QO(Hh&Ebl!T^SA)RK;KvS@ z+CU&tm$T5QNQzqr`EdEPu;7;ONRyGl`CZk?D#fB!lch~cyI{RwP3J`af5~Hwv-yd$ z{yQ6EYTpIT=W>p3ahCU34Swp~=`u3Du#cPLP2l)!g>sSN3$0e;a(^{cGoSPyyDQT~ zTSnNnQ>8`d0V6$Y1XwE^2r{)(u}VvZm7cr6F)Uql3wO>XGg2pm<||*fVKZ!m<>RXF za3cHst%qSdNz1Zl*9XuFrg7xVMc+$eVc_n zE+=nXZ@^|w;;P72oIJ!*EO7r!$ePBs-^qj8N8TqEE_ZUuCCZ(Yb#9I-pa->JR;NYp zTi1Sr{imyXJ}GJUxSnKD+ejkOJk(46%*p!@raGm9f1*c5MbBvx;>T*jeq#?ycpu}C z!@QZM4A$>iOM%^#7mzTB6)IT?5?f6+H4!H*PJhz8CMIUxlAj;VNl*m}*1L~SHQ;m{ zQK;k#bE- zAL_BBy2FHaQQ@CDm6A-gsZry6@rH3@6jEXs*91&FsE#hFpg!wNHs6|K$^=u2*UgVz z9Wp)W9-;QJINbUSv<8|G(9x|_oY&QP@@baRFaG(M#oP2)cthTA-4F3{Z`!=dSyHRN zrkdy=EJ9Zcb_~v)MHkE$`L66b%FQ5C_GnW@fLz=3&ucaT;a7%0L&jQ`KU1BuAH|k% z$_CVDgPMM->E@zI(wS0FlZ9CjT3~d zWtT7Y_Z~VuYB^E=QgFEmCj{HNG_1D2SQ3c@#J zSr$I8Y1b?xXG<8t3>5N8m47-Y>jKq{LR5-|^vb|8pMv>R0+-};A;|DN)#fcN;gf%HOX$RIiJ++Vey#6l+t!MXJkL+>C5o@e}*>58|3D8A(_Kw=m~q4LFj zj>gR>X*#8z#9S8KLiY;^eCKj_Kpq~arjCSS8y`$v-AYtyL;EOX(e)e^C3qEm0F1*( z2HCdRNb>@tw4>2!m@9a@bu2Y0EKj1)qF13PzZRWpt`7gTSXA`CE`ZFp!h%%9<(mV9 z{525mKzSVtR^C6c+~3vI*h&%^%?0WWK7#onS!$PLD$$M0a>42=yvGEf;*9ylaJ=rIPMD>5!@e8Kn zAL-UB)ji1$L}!?o7F&#cd(P`_y=z-hsuQXz?_9}{&$x8wfR)zyTpFn$*NI;ydZv5b z2;h0ddx|n?`7w&u|9o~s=3nOyHa;W!oSP%P%zRz}B@ve(U=NG}&-ko|mjGmH$mHaT zV8R&oDQn}J%;RFksmEp}(QhhD><4NsI#7be56#AhM^KXA1g%1;xLp*^B!MEs zrlr~4mv!scB|*(xjir_14H6!+`%|kES7h<;K!W^Rv=F_Qohnff#*7#&Ur=CF%Y}w!`qR8(CcagRJw=6 zl!5FxKjc6p4z&_5k-@LEks;krt#ZlKXL)&K@y)r7!2PmNIyYizPaeTg32A3c6&FjVAva0 zE?sto$f&lk+IXl6*IIoYK+owA7Xwqth{tpi81@tqrXer4VS6}9B3_4`gDLA=sDs#E z$}IM_=${%2So{l@i0(>28;g8n4^!qP5~20& zauayovVLBz*^6)dUJPP{YYUpHgy3}nbUp{;u^mjH%0?-v@hlK?!^l0I<>5e(Tp1xH z?2T$m=FPqSauSOONvrI{;kw!9LEo>3Mz0yttU*JXUC~x{l~;XJ?FPy=*j3^zn*VUD z9gRznv5%;$?7E8%F2V*9_An@63cl2fwAFJ=+`BJ;YA&)^XbD?&x%ye4%P&%;&|wvj1K;gDK4O^K$1cBJ)_h8~0duMSrMuNA?c(1V(XRXjHN7C{!Rs1wZD=2N6WV22}IXJyg{ zzbCGzQnDlNGCHfGuvKu+%XEkRD1(OxOpdj#f$P_Xq2|XX^f4~}K+`Db{em%MAb0cI z^e$5x!{P`Vz%d><0ikJ$v4pWz>VU$KXI}%yD1R62eEl3iEM4aVHZ48}ZXBF%CN+Pe zIX|WQ`e=VkjkGSjZ(T!H}#mZ-@Wwts5>N^!~vU1-7-*K!L zwzRF(F>Mg%ab#kT$y=J8Ev}j5;CO)NRF_>)a~S6MsMu{P|M5Q7kT?{Oms1U%dZ01i zbqNf+%=LyS+Cim2zGOUBE#L|*XrBrf?iot`&`qbpqiQS(T#=Y4od(Hd1#Ul%OR!XH zLOmbb_~s-++kTQl<(;3uQZt0Sq{ZAbvqIM%3OkFO|Ak7nioS1}vaB)-qebFllQ!LO z17{mvH5J*k7i@4vp1BR;9jkU@>3YmnRpeE7(-yI%vGcv9?m$%0O045P^~840ovLDs ztX&%}0PyN0?55r1uC$e?cKU|jRsv6^rK;waRs$7Zn&|9FVJv?u zr8L&aE}{6&RXwr{DFd^<&3-LPgUFVu_JFI|XyK=Y%EtKuh<(MXnw7isWLe%D*MqCk zEoQ0be~koi&-6X|x9O~+Vp7L(fp&$og1@Krm^l^IL67oLlz4R@sYqGdr7D@Glzd2w za1~`$7oAB~o`0b1yGme&O!ZBmC5cRjP>mkBCYXmrwZZx+;1MwuDAovkv%*dmo|=}_ z9I&+%c>Hk0G3GlhiY^OLB3&xetl}h;7Q!q|t7UjojA7rPGGpAx5mD}mk1j(lm+XDS zz~ZO9)%L^Q@pFMdH<>J0iGj{EfWl8%IUX-O-Lj+VIiVx6Cfj{3wl{lvK-$xivww8x!2a{X}2I? z9;G=&hozz&Rm2(vaZ=aSsM*%T2g2crfws2@UEeKt4i{H<#_gAbxK0}&%}rM#hm37Y zjiWAgwyD4B-pd`NY1E{t zGHx-vy8-}xk4)3+-*$XTnZxlo&RU{6rY^E|c&W^o98yPiw{YH2J2yZ{)wn=ZcKp5a=2I>W9Tn?01 zJ4ijfeRzDdkU-yh)L|?>!$0y7Q)`q9gHPwyOYxrzv_SL*QeeX*t)_WKEr&M7TX~bSH zLF@evpo{COX}Yij?Z+GQrpeQqPJa|d;xW5t38#ETt-c0j<2(J@YrWj==lJRz5gZ3}AQ2TK{=&J<*IZ*a^rWH9wP z3R)c-iYk|`E~$l*3&*s*T(+C;+Y0EkA%|_PZO2#4wMEz|eKX7FKTac^g7l zvC}P+*|&p7>R;nuT!GKLYh=;Rim6u}HQ4btfTNAeFB0>@3>L_6rPl#vO104EIYQ1i z*S)>#x0adLA{}QpSZ0`z54}9`-YzOy?_xg5!{o@M&JK{K=oE8+a{{+nrLe_SqR&Ly#XVYP? z%|Q8dxAO-0&3^`6ZLYWr+l5wt$Ji*x;X8t3+83 zdS7?TdJ#pBsOMT}4C$eL^QDGcXyrwQvsWO_p^!5) zQEm%oG1$y_Z+>p{>&Lw5h~i8;Z}pKimd{NWeXcg=Ia$V^p?jAJ!*~>;iO-9g8kEC3 z6H>aJI!yKEDmgvR7S?5r9O1!Pdrhv{(yy+=Q_9}k6I-f{?nqx(X3l!AIyI2X=R-(W zp5}E1e`vQ(IXM5iLntlFB@zD>=Q^Qe_M*9%u_T|zOkiSP!q6?LK65%+?E#|bEZwFu zVK$`zAi1&5CW?n@8=XC=&4FDN+z_yZ!%9C6_S3yQEAgft&Eor1oN53kH@nFI7;jh6 z3K_=dc;ipsrXp?RoTLp%$X7jQKCrhc`^U_Yejq5Iv&o<_fQ@nQ3m^8 z{1B0*uaRJ1_sZ73Gfm|8x!q*RFRT`xb_3Z)`F2>Zq{aBXVMy$h>FvgN)cLpm$u94U;$p7lCb${ZI$9}KZ`QTj?MWyF! zBk_fbjARrPpd}_9X@ewB>6-##^U*poZDtYeMxN>Iqy8qyYXaJH5VOx6$0_JFm^}@s zbsSN63HyM!Nkw%SiAQ^;h^g=-hM=TLFa{R0Pc=$G!seWc=n=9KDxH=*&1A2AY)!{S zImfAFcqyiYrXXp2nv)w*5cI_|m~AM|Hxmu|6v`)bfMKct0Q98|2n9AXpthz4k7JKK z<}Q;-RWk;M$*p+oqXX69IG9r*&c;paX9;nM&;4n}o`*-TG0Cw=mmuOvN-M^>;pLax zKf1%bLErc4jjBH$Ayzc0CzUpCC=CUrb3{d2rXHxB8NTVYkkrX7L5rjYVCX+6zcPc^ zqRmAUGRtBgC30GR1}Z$z5D5iAC8ijHgfr?<#hZ#Ei0DXUW+DukwoM+3ohm*Rt5DJ! zK`&|6T39F-Ms{B?`TJ1XTSHsH@B4cJI zNMp2Ma`AGLWxd(@R4bt_7K_$SX9k}uIu3}+x*C`G%6Elm1kkc$Qx1`_D*n}3#|-0Hx)>?xVo^lJD8!%r!~^EM@cdUEKllKgxl*Y% z-2b@BdaYWm(ZCPhf!E&5_{SbjVQdLVxbrct%s1B0zwB1euu}b#>+cA(Rw{*<0UJd@ z>I-E|MJcVh)eVBQ`V<906GKWn$Fb<~<%;}`|D~zYBued+m(7fCR%a-qAW%^t;8QVn zjbuYLxjabAfZBp&nH5tuKNJBBFrgrMM58L~&{iWFrnU1FAubZ zWH^x$W=9x`fxs`%Rqu7j?BUIQe*#YF;KIchcYA{&wkqzZ-`{oJ>d)V9y!q8Ktsj}X z3tQmUhogmBz>UEGDr0{eS*=`Io=kR0V~R$I1#yCT@uC>zC~a!NK=SFqxMieo9D?Sl z6ZoeLTXLOUD&{!p4AO36ln-`^Uy%58B4ICe8%4FXL{Mdy&=15T@=N1Tq!cA&C{I|D zenqXQ3=V;qS0 z)-Oimi64P)z_>CpS!y*t{doEL7k4u8h(I_%go2VGD6flw)R4_Yf%0-?kYMR5Ax7<8 zut=-4{lWN5D9!Ti6rSW0j7fm#BtoV!b<2SQjf^6C94xX^EQeG!W_p8onyP3SMnXC? z(sDEVK6ge~X-y`pYr2M~@GOEi`D9muA-`<7G0nP>rWvamQt?!_IC1#&4fQq&CPNO& zTj`lCp(zlFUMzl*tUJxrPsk+-sO0wOc!pr`!yqwMrk5?3`BO?oR5U0+93D#HtQNCz zuw_*I#icJDE$%NQ&OMqh$|a$4)|QcUf$2u|nBs#&HQ;1qu_&e@RamHuKxT+!XO_%<3hdm)vy2Y=KjC$^!tzg0wPGxtZ1!nu!EJKgk5S`nzIU>HUF# z3Zw8NG#K5cG3oJ16wS8Fs-VOdafmq_hhq{;6L-WrrJ8z*fta#VppTkgOhI}RsW3p1 zPwCqfAdSRw&qU41RDFzjI;#=Sj4=;|f=UE{Tz4o9FL<&H)%em&;+7yn*?$S;3>C^Swln>A$O|6h>OOj z`U|B=ZxE9j))3dq=%Z?V9jO< zpzP5t2&FR;noPsP;l~rB9N@u2RfVSFFyOk5?I|R0C%&BF^^hTrLIx?PM1o1J5t%~P z-;jt-Lxrh2PtK7EViXI=F`ys~2aIP2g<&dNIf-1n@!8s>cXw-V$ARAR%HzFMuv9Uu(siepEe(|r1te&c@K3=HS=BK2BIT)R6ss?bNJa#0MVm6fl}<&_ zE0ZM5aMCHHeLyk;6njyDKmvG@J5+}}W?u-ZScJ3@XnShNC-pv>RAG{vd;T~#uqvM1 z2tr!lFyomWBLVEILp2ElHagN-qab%OV-Ggs7S$q^3pCi5^f%FDMIWZvmWyzx%sU<* z9HJ(;QBkap%>Rj`Jp_{}F=H$&0Jr8CRDIW*J(WAsstTG`H&du!jir^6ktSKP2$;_2 zi6hFyNnMCQr^k4N@i+uRASQ((l3Mk8cl+IDqjK>~wKaEcYq#wH`s0biy_(#bW2NYL zPsbmR4tj&TcW*_w#X&16!(6@kaIK+yvP_*3Igy(TD_VGNk$o$_kryg&v~MeL#i145sm z*am<$%TEF6)c%tJO~qr{C4>@VfIwpHfeeQk7J|w1sgu?wQiE6!F>mNGY2A(4=F2ID zhA~+bFpLoz(*RmB&f(PfVCqG7hG1(7n=2xYZw5jmLa^CvLWR-BDjmk8e1Hyqibeu5 zfXR|aGWC?agz+lND21hjd@}fDF*MN!^2(R2BQYk)_k0o+R~i$vg)?l*E<*)$C1_Ey z1IS^egHS$)LMSLfn@K&=QP7w~Nd;O*f?PVPMVLc!|ByPX%`DRlM0FfeCds9=rY2)7 zhAY?!b5~g8ROk3;`gk~9Dp($zrbt>j^QNYsT*yg2&BQmPN}Zzg(1wgs;g}4+Si~r< zQL>c~Eu%d_PL$6&5g#_9<{)Gzizc&!3Oob(E_{sBcQzjdlX1D^1{04bnsA?HQZNqS z6K~WVkH;x!#i>FhUS3=s?rx_HacSjJzq7@l#0wa%9ObbbbW7#4XU^Wb`>E?z7~?aA z+(0bH-qFnWnIe{u@A1e2ZEP~_j2O_g3Zr1s#5xF3AYPd;xOJYQ42qHsvSp?tmIxFO zC`u*wu`HpEe3lR@-wKW(W*Td1eRc3N@}HI`+CdI&x8mL9r?sP$p&R5tnr{6oIZj2v ze43^xz%hPRybvi4hlp%tWcFK&tWEn68FKke#XxHJ!tFYp6ctST9XlP4=WMBtt6}1% z7DqqJ-Cb$1>?NZ0a5W=;YpPhZrEggoPbhFvQB(!g(Tw6RNTm1|Qd+637sb+i!Y#P* zB>m7t24HC+!>q;A_`%oy@z-nBTDe?y%au}usbMa`#4WMGpfeurz5SzIkrB827McrV ze-O*~xTfyn!*aP^Dc3QaD`Xg#7I5UTN-3E5-A-rY8{b+?Q81~dIQUH<6Ris|{y=Q8 zplFmT1j(=V36AW*GkGo*=(~=npvPtYRN$z}x;&I$9DGJ6N_|~ltzwz5&`q5v1IvkCF`4CMmI!@@=bik{X*~A|{ zx_|NPg?q7#cziwR4ZHq$$SrNo48q#gO0~s#R`L8jaQxwL!0pCzdFA%QM{j*?ImSP4 zJcy6drV@l6qQ)fmpm2vWrfrZHMlEepy#Xn#f;Jb3$wFKJN&2Ji;S_BM1O+J^iWebU zbqqAGl5G5`+)R%csREe#SZ3-mvbaHH3hKZ?8R|47$s-2Rq9G|4ou;9k0lh3trUIK3 znPyi6G9ef6M4-$z{#R{$N~yx92F4+!KlzhCQlcujBl?yc$ciV?I7r+`57tA}4yxoO zcTQ_Ua={pz!k-Qvav_Z3gJ2vh?kWyP8o!Hc3yXV?N00Az+uPpmPVM85Z|`i^&R-~t zqQ!$hc23fA?swZ?{*6D_x__T*ac;@2xNf6fL-1aI`SspGI|wF^Ht$v4mp;3`$Hpsb z^VN2DFI4zAE8yh_s;$WzU;nS)`QiU}Y3U+oe(~&;`T3PPtjE?P@t@*Ky3q=-VX75Wyusy zmiG7v58I@N!;Hft4dTpkv?P+c8hxRHfng(raTu5ffR+}GQa4R2zTr+Kc!q__SQYXe z(jtjjuE;J7#6Eh#f&YH|&KAeQXv+jQ4_V3OqL;-58}_#58Z`(GzWd!b_d0u|UnMA# zUW6$7XzL;W`})@xK7404fMA04wMMD8uu!g4d;M+Bdu9I2{;(I-BxKJE^U@p3y}^)k zxb^7vSAX|)*DZU)*7yJ7W~p5L!|%QPm;d4CL#&=(S=ipXbN%Bh*Iw)pV9RPMezoa9 zMm?EILeyrt=xb0c03t>cykzpqOq9KsAfsR!0f~B=<%Vcb+?nj!VFdXp+A&oHPi{fR zR4|d!X^G8;InhKgEpVn4SSI$!Em}CwU=F6`gd!+d#KUPvLF2WdpiEw|CVEAD2l59F zk4SEu6HE4&6oSKJMgc1!)dxZHS?MQqGpT?CD6QNP)25~sM?HxV8Yz65h{1HcLCf_i zwQoV1*3~5G#>{?8wDF9)pHpm@)BXU8S1YNi=bR zKl$YQ=gx1etXwX+ZhiUH^UwaKTWL<9pV;Iyi2z6!5>^La1)LSd3Ag_#ruC4Y>lFI~(Tw+UGe8qjm*lvg6!D!z#A zX&`EDOiWsq$(XzlltOiE1?v4k0dg@5D4>xt2V(vzh#NBl%@2{&`4!P2BZOW~C5}<* zVh$@UJCuu~M+RM$q41`R3tKeMkU|85g=Bb>9#L(>^mJAp+N# z6@FiKYyM=+;c2(Ma}6%UmZh#li&II(0BrZiue`bbiywY8@ZPOd=2zBVtJcponoIX@ z{xB>+yz{|v>W$Wo&pg(390Q zw8ezrm%cb5NUQ@Q0yL>9c?2L$87MW%+D(qhly{eoSw>7ckj*&BbR%T*nR#DQFAX?6)j47A@TNGDVP zm94BfX4g2~l9L)XUT|M_P_Le;6BvwV@p^X^xDs^HPCy&)8p`Fv-U@8 zi_Ot!f8zIJ2d?jPhpo4^xOo1;TR?n<;u}nHUMbFHb{^RR7#3SRiu}V!Q4o_=ps{y1 z`Rs=H_y)))qA6w{S(U@6mr@w1Ix#}>Vo^05Bv3R+10xE8VeDr;5am;mNmn%Bgf5pT z%A!Nux@n0c#9m@T9B9K44 z`F{KS+S!9~*@y36e&w}Z zTB*e1;PmQO&%g8cAG@`=QmNV>`IYkALAU*rzx_AfI0(-p4Y)za%0Z{I{dl2O-yNgp z4?q6k-!8P4*$&hBFsQoBwQCS!Zm7qk>tj1 zOOc8tu2fd+d-0Zh?NJNIr2|TPh=w!3S(eI{OWZl4sF`>o(!oYJQyt}m`GIW4E^>(M zRoDgmo+I*zxSTZ!G9U~1%Qqd{t!bqHZLJEjX;};#X6&7J^6234qj>elX~SQPYz;Y!ZvJAxrCUvX$gaWUTi;mzUD8x6Mr8bZ7ZBdM`) zspNddV7$HGb?fV$&Q=hxa=99oAuKkJGI2_!bI*M3&h2+w<%u8o^EoA^b8)Gr#AIX#mF zZ@kwYjhQzI@oRJEAu)_VT#IEUX^!Cy=T>z_XD+<;%;lGV`gUfx2;u(O&3F9(`ePV) zeycJWdI7iPnsa9_UwD45UR_>Vsd0a+i<^6oUwi8hfA{xaDVLl%x3{-@bE7>dv&r(( zS#Ru@+)BARhv;>ByU|J8qJbHt2M)wwPZt4UvS~6%&(J~n%_f?G?+= zjKoorNRA6jG^KxA`O6WcKw}bc*>dfo)nNypfb=T;u?c4{v8 z>b;|RwS?6$Xp^4_JDmmh3zb8zH_BZJajZ!}jcv2xQb1>gG4 z)&8(c`>;T0ByLaf3WSZwOwtZfnlhvWR z377fz|nzeVkWa?o+kihS}@kbzSV%*v)?GssOe4GURry>ddd7??%V zlnl_qjo5~E&iXAXkJMG8>}YaTMnRTbyPZlaq?0lqmrS*G*_>Ok(NlBtJZbTQQ12Tc|_&Q$w z5nTjipC3l&reZwB*f={{n_Kwk{o&@$1Ce!V1t!K*TAn1M_Qv@J?44c0es5>Oha{`8 zQsvy*%JolzmtN^&I)BM81|z>-Ti!o7;6N~$@QRe6H1C#6<+AHAtW@jXh?_-NYp!o> zmbdQw`TEk?-EOah{=(YjV1G04y7i_znM@vUKTZ)ub%Y}Qq#kL{II;*NX%pKP2>d{X zObQTY?~F++LRGCdg3|1C8wEJQs;63&Y4J{ty@ly|8XD5ZuRBhG+A4cZNfe89CF! z|GUHSfBuWNfA1f^)a%EKT#~00W&}en=N?P*!lG{i;K&9 zdw1h{-~Tk|)$cUjaoZ^&H%Ymb7Yxp=FLp-dxw!>@)Y;wsY;oz_(){A~eePPFzj*#t zfADbP_x*s4unIVVa^tP9t!?e^#}$mRnSM{0G-xJ9QwWqAH$56OsR> zW$-B85qUA$38VR3000mGNklsJuiHf`W-CgBHygC^d+3O|vTi z2~#l77^1x+0}3i7p~Os|=Ouy6IF$11Qn03aWbGPr5`ql91=50E7bfq-R{-8kALNly zcxg719%*U>i7@>DJ!CVkM>H3UQcf)9?`_}M zJJ@E)r!zoUsCu(Q+Tl5J@7#t9=UzNB+HE%G+XtJ%mIZ=CEF-X?p!gO1nR<|^!TvMZ zd2s}=V_());tDC2pN543)Foh(T@K8Ipa}NK2#QZSp5>sR@exdeAx1X;KqjUXEX*e~ zfmTs6CNUM-h=MwN;?y`(iD@6evJ@cv{}{eUD7wfIQOc&$#s6SBQxd;iWe~7g@}4QK zEp6O_rhFOs&3SKAUn$BA3lbg^pTp%`aZFE9FhGO*E~|Aa6p%)X zzW{~Vibqg{2uQLlj+uODKJ|+R(OE7G$yfB!UK;!E;PIW-d~0cAd+Wl>e_WdUk9Y50 z?zA@-8kOfR&5yi(r{CY)-F}|W4MuA%gTV2*`525Hj)lldp_p~XUT?Vf(f&@=A9Kg6 zTdKI5?alq+-lcOFgTZ#)4XX8)H=gwR{kcZ#xodBI_~}QFJG(d;yKZPs55}WO_4zlx zT6ws8Pn1y1R<19f`^*3Ew_~W5+**0=+6ynV1!lzF(ba|JyPaRQy9Z0lSO4bwAHVYE zBBX9f#rR8iyGw>$`hqeTV}_4EfJn;SJY%>SZjBHaUrRt(&^#(mh2yhg zOw>LHWPOSqlZ>p6N-`^9NieMd`B<1!Ad&WDd-kl_Uy=A&n5m`HXHPlm#Bx?CgOF~i zzfnn=NY5ChqJ=P$5Om#A5O~7k6RuGr@Dkt@@+jUs;QJvQdftRZyYk~XLXSBAiyR(0r^B+xONajcgK7U6J`rgPX z1uh2M={olMo7r@ucGfSIKlz}0;hAc0FhH{YlhgnFr+<5Psl`gwz4q>v#_r$!^@HF1&SgmU znS@n&=Leq-J;o~4k3agW^XI?B{i%!?f7)lybXc(6-n-xH?hN`n zlW})A++SW^jbuFd$iXe#ZZV0@&W_!d6Wf`+g7}W*QyO9qs(%jpR-I<<@)!Mzvav`&+;C^0(W2cXl3s2ot<>bA8bL`d|Om zf!GTeLOulb=J{@Ce`)dT-qxdk_|1RV-FddZ_u{bq^8K63k8aewQFl0I{eE}t%yV1^ z_~7U56wI=%3+Z+8QWya@vFCyRAAJp&?t)0ckoZAKaw!7s3|jx8oriV}%tV4Il@emh zLgs1BT}Q#RCr?E|l`Ilc0&J~hU@Nl{0nwT^Ck`0q;S6|F90ftHOAZ7O=2DLF`vvkg z>AS{kg)Nc@YC>AU(x3dv_dwk>A~m{r4RWBO`a%Ai({#F=$U;5TZ>f)kGGt1isDL;%Fp#=k$n?H5S=kSs-O%Cu_&%H4h=} z{k=Q4_Sod|gN^y6CFRR}VZM>)Gx0Z!Ljw$d{=?z=+GQBtZL}FW7`n|1qcJmaC1q^PPi-yLeI&{PQO)2&?AQDwV41*2@)# zO&)CRpIuz&blRga?zi{G-XQS37hd=pI(I}JfAgE)SXv%ly|xa+`qI)mch5E&imC7K1b$AsBQV{;V=BXQ;eY@*TzVg+VA8*}TJ=6d)pT;g<8e_!A^JJEiPSYKYUnr%MUj0Zg1V&+k3db z`+&KPiMLyyJJTCq}`rF$N9;{th=Gb=qvxSwF5k)dyy%@$c2#mqcNt>S$ z0t$i5;8~617wJfH4riy&iz|t5;jSxQt z3#y5(X#zqsE`qc`W-8Hv!Az-gI`~W(rD^g;mo!S*ER1IrPmpWI+1w^HLi9O%b>U3B zP}3Nnl7fT$>E>2{dHKq%+aCo%iKFb<`SNGC$7j|{jAe3-rF;J3dBL0Syc4+dZi!FS z%{|<>|DE5vI2>{BD8#!XBKw2+fq(Jp{2Omxd~|1@$AehPmrB*vCEq(>C5-%^u-D#v zX0^Gwb<^|qIn)h1w_BBZ=(ofm@&vPT+2vN~!C>%D|L7|ZH*axV;k0#Y*XKS;Za5-` zo$}tncB5Y9#l#2;d4xu_3ar6ljC(al9BjwD(aQ*~v;nRMwc!=H-Xp6igxqfTpc^$7h@%xQh{pB~mcm319>5gF7-Maex*Y4c<#iaYmE3f~P(f(&1 z`|9nFKd3o_-Tj5tGXb^sj8-6%>_5p66i3G71C?ymF;M3nko1bMPm@K*LmGyu!%cUnm?D@_kdjt#rj=wmq#3g)41r)nK`jtrI(CMa84xmq zz9Pb(7!X>bO$9<@1S!x4jV#Y1GytSX3&&=_vBR;Fdo3d-5f)03igHstn3}ou0cO8B z5kMY4DH_QUG4>oXB{`yvKhv(WkY}G=d-!0$ZL{&%_r~aXy-IMH3TYLMFIT)nzF~$Rqh3#JVt6zC`>wd=%#@r7Yev%M8 zx6)+cv1k+S8?D#syex~0%bWZC*T1q3wc*tlo_*!jXCB_(@p+VSpIg6Js(kN{-*~ij zPhiH*gH8b4!V5PVhWjfVSYCd;h0(u zyM$AkOeUk@0ggM~F0QSe|LHsJS6^y8y1O?Vb--=0@lJ0vxPAAdQf-MtrcOA0Zdw;K7t&fL~Uw`GBZ2k+Xo{1Ed3qmJK#r7JK|aH69FzR!({xA?xf>G8 z?^5Ze%59NBHPchDkGg_nb6?02LIl!Fg4tppCTdDY0!hM15)n-u)MMXYUM}tLvQ~4x zT$-!6Y{KEe>n|++jyG6(@4d%g{mKg;{o-JudTC{G!I_M?cXn&@kw2N#YIFbWzy7b@ zdG9}Ca#U$DO|Lix+x_lyFP`aajv(A7AI|z=FvegM`U#!T;B(xvkIt9hoZr~lJwZY-lz4pRCD3zNN ze^_$o8*X*3>bCbEau?`$JRXg?6E_(96Nolrgy7^VI<&%JOGaQv0J(q@!xBA zR#w(PIR%?gZ238ish|8+20q$1LfHDG210tUQBvh|QqoERAjv?MBS!M6xN0bc$wM#S z?2|D@M~p&iB86eQRfFZLKfXmzF|u=-k-A z8=kv7*WU?BYyzw_SLYB0W!DWs&<*{B+k3roeH0p<@7G473oeYx&2zop#<-& zOKYz-=P&KQZLdKdksx4{*a(8{f}c(qs7oYWDTw6HiVTUq%c4?so) z6a%sX5Up!LRY)@mA^;V`=p!vqCu1~5#|{x7P>if&O{=5DI5G#C(a~gSC8P;E6yN-wh6-_bE=LzH`i$3Byd?!X`Ed- z^TPb%#X+yT+;rBKmTugxEiUcxtjpyX1!E^+wn)+sCapE+jW1vE`(s{4w_K{%tIc|i z=W);-aC`2pH{LpURK2t|KkD4*dH#e|uf5`~pZl%N+wXaPXw;S1_{>ske}Ccrtt}V& z%&AnX4Q`c&bqsJgX!99J9Bj_F7G1YK7P#P%q?83)mPTfeTmN(4u>6J48`dI z6K~=VM#Ft>IEIJC1>>!>9^~M)m zJa9%*dv<|n$KMgbuNCRs#=e0#l7vsqET8>duF7=qC?M(1A##Ly3ImoxKjuiqbY3(Ki< zjEOeTPjE6?;Zud9F8b|~w>j`SqaimRC;gF&tUo#ER_jZ(*7@$i_JuQx z@%dN2yaz;eqp#rB{u&_ydzheqzykNuxfeRyyWL)W9B^#)dAdY`AgI*&B=o ztBV(xT1)7-n>&xW_15V=D!Wwf4a4g=32@+-Fo0^f*TUhb=JAP3*B=fx%jNZY zb*DGQ&XiGh)XxBK zMr@YUfeVU(KZLM4=h2lr7VXj%As~*Qfhvr5Ux-1NektuCnOhPAv z3FJ-30YdtVqGE!`W~T&XmM&tp4uw9=sjXogrsCu9^)-nJB)^il1gWXBl)au;tCeN8 zQWsYgg$M;5CtG&P&aOYZcm3zw7UZ^^TPar>OW@9x%B_{<^-tgbQ*MpbU6^m38-`0p zhl61-3V{&0E0X&g%hkCFlmlhP?tQ3&gTtk!x4*HiW$vb}@R>~BvnE5BbnCS$u(@)Defh0Ru3LFJ< z5);H9wL_?N$`!ZbgY#(fPPi1)Z5(XA&#gjkIJM^1hokOb&>eY`{(w)pRl;v2g~z|Z zWCFFuk{>kQ{n=l1``ydWy+V6hDzf7y4sSMg9`Ssyzt=gl{#*ARJ!EcW!YZuXT385O zli|t~htGX-<{X#zU~mwE1LM{fuCKq?Y2WYm_eUN##kf7lCX>*H3zxvanEANWT7j|4 z%fmxBNcD#UKk)cPZ{#`QiEOnX{93R0jz{>}4XzF}8Vv{rb&kHJlFxm_fDX^j33|hW z?|k*ut=;g0g?pXwD4D(8O>SZafnTnl84mZVRTskT8rWEP#%0xWtL_9UFucWBD{gc8 z{bBOfkeKEy)o(-`@qR@#o6|z-NKE>+juaPE;lpH6APr>1nM9niU}_k>u)&g25k|fg zVamk_pHiTLTR9L2W{^{ugAReVRGAQ#?pQBci>$zNX7H7ez-Q3bSA zQ8yKJ;%p8FX}P&fdCF$!yo_EHhDlbuFeHgI7>=7%L8HhHigs}b1qnzRjnRP=+nOn? z3eH-_@<^E4_?DiHwm396EqOrRS2j@n$VVu?4j(@w0wpdUiWM}`2Ob>p(o3bP>vCOi z%x#^m_5lYHp2>L9t@6~|Mw$%D<;vdv;~|Hj5st$z9^ufNa7%~-7N1Y#m^e4TGVr{$ zwS_mn!g@m?aG9_t$f#tGf4Sp~yLTU4Us_z|hUsL|c0<$3tvC@RgyrPs7Wah?!hH?_ zM>RaN`pnqt^at&5PhhxGlY2z@yknSkSlVzsD&sKbh8ya6Bb36E!NW(G%)W7a^Z6W} zn|g+mcHmX0l-=L^$6sPj-Jc9w^9z6XA3quSBR?2(b8mZZgRFC5uYKdixBu=Vgwn9v zK6i#=q31g6+LvGH9^9Ine`Dj`TzmJ^E3ZCx(A}3Uzxaw}Z#d~K$rWRageXS8Xg$z7 zw%lzPu_i&1Va$wqa;b7CPt`-oJVm9BI$}wACtsK|j0**^AX`JE;+f3c;O8s|TE+dP zc5V_wx%{@VZ-cQsThJmRLSm}#hk@4gEcavvSLTIacgoWqMnY8V)CddW;#6Z)PXW_d z8nY-2exQ$pLuiX8QeFr%1==E8iCQ69m@2k(VP( z<&YmaqZkX7BJr#}&xh!v^B`lPAlk7xltn(hBs*@UaWIWmNb=g3IB1mltQeL#+&FI2 z#ZJG!$L%iecjOi!cRczN@J5poA2dG4i!c-JSA6-EuaA4z+uZ~D#VAY<`%W7lmgbsw zyvLJLYpDTMx69p{!;v%JD2JaB467C};D*|;Ty9MK&cqupEM4gL51Q3-ueT)!Od!|xzQ<%p(Q14d51<~|^f{{Qd~u5RsZ zIZkNvb@~U_-fGO%SLYh_t^GafGvtNe+26nV>baH0wP348huanW-)a zD)K=Nh>DPc5U6Bv6quBAGDcS8Ls4%hYH`#y)Xg|$T$?_-ZOTt8EogZubAC40kQc{FV~=P& z%+l?^j-BSR9fG1y=>jz}Vzz_9xY?{m1xWIU01sp>Esh+UYfc&nFTQ^DgP+~$4!q&8 zT`HApC8(C2pfp#lHLK1+c(B?y1llp58sp~RkTWiG-W-$4m5@bg;I`&h9OvT23o9F& zpTt&_XmTP7zg}r?{c5!q?%d}Xj+5xC!$EZVOn9<(R0a$U*>F1}RLa~1 z3OnuXQppi!A1B@h{7-vdNnN&fH&I&Tne?9r8xQn1r9i1-^C24SLR~`XnzsnoCtTpD zWR`5weWE);ag2ll#vEF0HWW19!tCE8#A(pTL{28PO9B|v(&wqfrp7ltD$HFg^U;XGj3B3VG$tlg(g;PF z%e_-El9=K>hz47bJ`~ZCT+$JO0QvKRnft47@oaI>6gl~d5CyrI4h{ybR*lwiGC|Om z1wwfE3rpcDynnd6Q*tXMH<+(iO7-PS=dV7z_W`&4s^GVp&2E3hQ}R5c?+-%w0gBKR zi$}1>fzuz4e1EvT+kNnGvs`u{^FOob+fPZe@Y_;#@i)HhG#icW_AW=Dv&$FW{qbkq ziy6<8anPD@>ozp?{9&id9M|nn%5K%EH$89UjVBxe$KiJnAzCTJ@hz;H6K>iAr^H$d z7yRKq$GOP(OTaJW8nEc(HRMq1y5TnevRkT@*?0cYOFMgy7&9Oi$ej?SPkE>vi4xVL z5b2k+F?BWoWYaT3P#{STp!P5^u_uWRC1~$pTEE3w^@6XLe2XCgMKb2@%fgxNnGhy-v z4xjnbx$EyeXf^612Adn7F}K+$bF*sD_JeY`#)O5N=0XsPK46468i%uzlW^^*H}Ok> zKMVpdZpaiZpHhB+000mGNkl^2+n6+}TJ&w}Aaq^058-#MM;m}I?~NWS!yWGZ1Y{2lt8Ge$oL zLyKpr{8Z)fa0Nb0Y70*^WsyLX`1+l|tAb_FS|dqDKBtEuFSLuFPA2hZ*^|5&@k+%X z;iJ+-)5|2z1z35L%Kkb7p&Lwg5)z0;a^<%^e?GPIMwG*#Ao^V-}e62mw)T4 z<#L&0+ZY{h;ssnmAFei#~f4vg7^w`L`|w0iQ&4qA5U!NoTcS zWSWLRxUswajeq(z*R8nG5o*=1LTPy+MvW8x zaj^Hi$!O&BKYrnbGox`^CCwOrb`dkVo-m%QpDoq*=DW6RLpr6L1e83KGU}!W%1T9mrG$V_f zL2naHQBhh+0XCE)fTjHn<;Z!_#UI&k4J{zrXI9tf>5yW0O^>gelFXnM=B3Sj#Bw=I zDI3h@9Zk$HFcd}?HwtRn%4aTs(tW8=OIfkBqh||BgMw=h>vs zoa*l0W;KMCaxjU%xXZ=4Ga5~zO%35lX3-x)`OU9mx8G%nwU!vo9PK#f#SoaDJHz5> zxj5H1zjfu)w{Mh6t`lwzjKu?nZ64z~u))y3dGozec$yjaYjTh01Sa8Lk|ZWZ1&Dm4 zgW>Sry$>3VIUd*Z!%Y^^2Y#cbj1PQaj86@6$Lxg{O0i=9pZ|RO_kMpBH2hZNYTQ0z zOhxYz#kwlt|I}o3B2r^7f;Nr}ZkrsUPD^Gu*bG5hgM+g3NEIg31cXe7!<0XxPlcdo zrmq{KKpQe1Ntg8Wfo&6do7g7lFC#psB})6vOTfC57Z6eBV|{wj7B36ZXQLUK7Ph;uqkWA5VF zW1@g#;d9ZF!d;5hipS|?*E8YIC7dW+rYopOVi#}lFhab*$;`oUG zjjb^Ue*X_%-fOp0`#3WM%b`KZ|6KkXf1E+-H#a`mzjEcxTD4Jf!nLEJU=1Mljk4(E z(l@_;fv0-?ThF*|Il{8=qZ7g)bfP&zx8!hy`~5$-7RLOo3%~Wq0_HwWQ{Ki#KagP zUWzP&4m`?aWD!zaM9exbAYpB$r)6n{;guvOMoIPvQ5i%MrG^@fY(zm3EmJSZFJPu^ z7{>}lK?C54`ik0W)u*i|>76=i>Zmpg3L37DLKZ$~$_|aG6c|olN+uF%2S{H-!hdFq z@c0n%Q0CRKf(|275oG*G_9cn=WQpk`N7v}$U@|!4XgaqXxKgfBto~5=2>4;yS>&;9 zZbQSwzKl_dvdb9*@`WL0^zny)aKm12)M!-VSwKwo8fNxroFrC;K#g0bR_l7T zHow(y%ajj#XFz1zQZnTxD~?tE=-WozT+!OjhiG2j1B*WdX1zxwb0 z`~UkNey<)uBlm@tI0l7oNp4Rj2au|E38zcz=kGuGwAEblxuq8jJRFBojU%Y*)~b~^ zzII`A_W^frmbo2QYmNPOI3pMYsofcRTsh}jjT@WejhzQPWT(A(w)#@7x#9#Pj%EJD zi}el;p4Dn?x7{9%gG-nGkAMEBf7;&rvD-Lz<(aR2^nv^E;q`ERDRaN`+hw8}CasrR zevnQf0~s$##{j)^9D$~BQe=HXm@UkaBBi&ASdYg@;@Hr2O3Gz9elg68SK3?miG zFHTCBpj}%3#P%E}Mw~tbC{!4*O?glR1xIG7_~HLExk@z%S(}rb7)poNljOwLB2#NjiD`>AH4Xz6-i%L;F_RERLYe(@_M#0e z*OYR4kOcwEUCP)AjN!WOhO)NKv>`p)I5FzxjBL?MwXj5L6GfPck7Vfq(WdEdb|EHR zsFoeiS4CD@Xx_yyE4F61iL<&o7n^;Np)-kJoaltLnj3pi<#!r-3tqT-4V*Cq;~)S1 z!_i>kPO1(xdOhq9hJ)b*oC+)P#LaqZb=cqU?%f!5+pYN}WYtPzdGY)w^?Es+qKkIw zb3~-yVIbcsg5~+8$$sO#Pu{Cn=W6BV&>M}s5jRMy_rEhY#P6%XIsly=Hx` zHyHFs;US;VN1sBx_3wTCfUQ%r+3ylrajLH~>tWml5RzJJit-IZzpBdMX-WN-8Z}jRq2m%rwCB z1c)VxQEK7ggcTH$az_4U4hnPqX`V%xujS?Uwo{}-D5GrlM+oL6qfAc4z+lJFKs`Im z4`U()`RhE|x}SVFV%%xeR;sME zxv}5t4LhCjBya*4GH2jcNB+cb&YxLXz1p7qayaNY#t>VpxMO4o-4F#A7ykL%fBXODR<2ta`OK}9CY4I-(fvS$Xr?3mffjJ2pggxewV6Fx${G zLYMkfPOiig8kD#KAYZ9edaIbT1Zlj;xuz9K)i0Y2m4*y0p6E-;?t7LTMiEnPKDRImLMG+sYn0{&(D{2URi&OXZH@?8;%B|1>#rq z@!K0?f7l-ke*2IAZ~gYc+S=9D{MypWm1gVQ%G&dqLzZ z@PfYgLHpeKu`G*|UL!`s)X_v^#_h?N1b(KjtMtTZD6J+0lDNFvH}z~1gB;S zX0<@kzmr(;Ujl?id72M|dI)H^W#nc=I1&zaykt4(I29?24_(lZPZ|Gl7TRxoQLqc< zz$DNM#C(LaaA#8kZ9<3QqVisJN_6lTdxX<6eTnhX42)+JdDDpnBdNw6Po6P(uo)FS zkUMeKgXtQC2;ssNADG&RUU)QUnB%4OD}VK8KkN6;d*f>#ytlKq?#B`i<;CvJW;GSo z?7@fI8;|ZCbb6hx$LH6)=&KXavK!8M9GwjspW(vMtM54D3s;^&=K)!V#nNNX#4XgT zmHmwYbD&ml9dsZ0{*Ze(xjxz-j%tk_c^64X+q}2;%5VH%&>wWR?go?a_?ywF=XpKf z8+fDs_I}4No$K#^c=h6ocW(Y@_kdfjog1J0XXGyPgIGES=`QQAQl==rw= zE>yTx!t+BQ4>G}snp!c6Vy8Wc+6SmWATmMe22v^|_op2QEtoe22o*fc0m8zMRL)=k zLNiv#R4@+Hh>lV!H4x06D8riq6P{V#V~lO#HC+(MEZ>~dho!QE5R=uL(XlAWs$ECO zH8G2p>S(A)0mvi>Qaz3=&jT@i$a4vgfQcNg@BX0olb>xq_k8Q-$F=qIuewgNR;iTz zopFEJZGF4!-i)UhdI{$=!wzrR=JF3xh@DOX3sgR)y)S~%0`4xV|w%9GQ67{keA zxCY)9!|`a;@y4SFi-YL9^OF$qeZO9t`<;LCU%mIEKkf7eW1kJZfQ3iL`2FtIaM<;c zRjRF8WB$+o?$7?#?dLJ80jhwMtzSr?VY=& zGwVY-7HB7=6$E*dX+50D-9rUD3UzU_Cc3);%re!`B+eAHPWmd@WSmq5K#EVUlNfRY zW1R5EgkDHxt9&t)D5$8ZbYudPIjBI03{(ba(E%(U(u^QyLCt*r%KN3uaZy1v?Uu@i z9I%vf0T~WK6ItpUAuA%NNpv|ao62oQ{?@z>6~RDw$ZZD3G+3Yv#RrC-W0*EYLlp~C zoQQ9gUT9*ME=$XK#P>XAy8r+X07*naROA(FX)g>&Ovaeh1vNg9O1DhW8IAn7+2al7 zjAaL>MQbdRjr_vYbfB(b3{?@n0RL|gvKmDlr!pl8=`TQ%*AOG-eET4VuH~!@(@BB^A zyTMIDWSlKWqo7Al{e0IdONA6lBryuz3ZJ@srI@XA>u{H%1puo-okG!aU+i-K1AOq{L!EP4|@lD z%&EsGiVuea-W~e=gMd|7$t$__XD>Z>?cxigL3^|92fzG_F_xR*;c(u>A9E`++{Mp) zR)UGkO3{nrdGpBRL-P`5q`H@Ac?Q{LJ0=?eOk1vrdM8PlB-fM=W~aU}#%TYi9Oylg zqiukGc!aT}>>@rUvwZ+$8zO3F$C%;(+0<)O+Ek1LjVKzSrb>beSC|_JkY}#tqgqi& zQ(`I>F`7}0fnwDCLy z#h54OR;jot90ni!{BZy~jjCH?9{1aUp|2Y*E}pq~^Znt=mw3LN-R&SYdIEHz)aiB) zYK?`fS6^(mf6ONZW7~_<=JlYy+KoP22#x6qh zxJQ&5wG#)zQ_yg4|8c;sbqAaAq@&^<5aN~p{^+l7HS5)KxyHea&o=_{_~B>hyTbvb z*0#W&oty6Z0`@wa+|ldD#x%G=_@Sjz5TC*Z;fbRY4rN?Mmln8f7p^4*XKB8*vw6c0 zcufPxb=FtU_jW#7Yq7nZJIgEA<{ECr<5Pp-bSF0{F`OL?zih}RP6-o>kh7U<)*gSn zyExa}+;4Zr^;h32%ij)^t})whZtguvOPE|NslbW*1|w)>8%>E?McbA!3Ae;9{FtsVe$vj9l;e|^sCyH5ixw!2;s86I+}4@9aG$YecC+kbR7a|9|zFbKLsvjcR_-3(=-jY1Yf#gM%n`d5e4jyom`|`72?)7$g+^q*Yyo8bM9r}Hp@C%61cM&02o~tdC z8~kZ6Jav40VTP9wSU}0vY2|k!@t&xm5fp#DRC&f1X zse*+dJ8u-j-9ni-jC*nps_7VGj0`dYnUcUXm^9*+r2c}6Mnw%i8vy6TG)C5*0_2)* z+9P8)+VD>SKU;Dori-e*&lE0lA40|R0C^qmWRY|hD-&iahhm=MaahR_AsmtpozP57 z{jyggvm%k5fgH*%`*;f*Vq!`%@=fg&^P;jw48#c?LZ@Nb{w++!nOLh5#C;{Q0>}M+ z5E+G~bL$uH!2yiD`Brr_8cnd;XjJ0ELOF28Pzr{I!i9S6OE0{(xp8yA{eKhgQFORD z6@F{iDMM)egwns{I&c5S>t$!$?N8Ph%6r={EH&TV>hcM{dbH?3{jtpY^+= zDs%e#_bXM0;~z_WumQi|VEN|PYyF`INe9b(ZYcx`OC|ij>V|fe$1oVN=v#uY-|a1r zn_A~&AOGy3KkAJ+mT}W8*tBj+C9?^I~X`Gx3 z+jOf#l2N?4CSGF7pALuk!B2O)T~@1leILpd_uTmx2mSiu(%tyfwD@4?(J0y&K>(Zo z?e~ZM_D;9g8;p3CZou3KH(2bhsRU9>}$XI-P@nN{b(}$+COgb zSwLRGJ0I898k63^$gNZ+;OrfAxp~Us&JYhm2EKRDY`)MR9tg8oe0L%?1Tj5fHQJa6 zL4=EA&x>&kBwYk3qEsAj$Y=2QfALw^;V0=a@{4l2FSeuOS08>>DVU5_md-ZUC++Rq zdwX3!aCk%Yds|)49S?nO3l2LEt7Z3K?|!sju*4ydF_-^xwZL)8&%N@!hxb3;-M;07 zE?Abn z-VQk=y9Llas9Bjcxycxr{1&z;5YPnzHX1C6u83*J$O6*~B?%NkP%RL2^vXd;jSpzZ zq=L{?urwyO^H2U&asllXC^5B11`fG=tog>|g6f?I)5n^vM6t5~aGJkTrripL5R~8#%K0IQ;g^7md0n-7gv{`Y0j?= zIy?1Ry+2&Pb^X%g?R(F!b;f($pT7M;pEUwj;j@>qu;)d0B4ZHZP18>E(Z)><{OMQV zoye^!jQrZovR%%2Uw}(;-laBc99A5@P0Wx(QL7J=FCQ%8;oB z7A+(d?2_zsX`w}Iu_nr7`NgAJ!3b`*re)2v3SG#bqb5Yv9b;f=#WIH46Sgo%@|_`6OReI_Z!OO9cKfj2*2 zPd8VvgM0q^Qf=(@o6WV+pv?t3l*+ws+xLT7!`*G4TRZbG?#MiHwOX#%E0Mp{9}LC^ z2ZR0n!Gnzhr&Q)x5q{^7XUx$MeK#x(2La}moJ;E$hyCz#fc@^STbXYxTr5@lz1@wA zYv-_hzPLvDB_W*qM`;ns|Bif?Y={A98P(by}O9dWE^^f^G)c|e?r zh-teIJ#KxLm6#hl_k-93L^es5&a(JBg&4UoAv#+%M%c0ggI>2>YxqIcb5@_b`s%Rv zn7OS+xz?;!ouJ?D?1rEA^#eb|)X*H{Z3f||>LVa5`EEHVh3kkWFFf}f?Ssv|-Mcjy zV!64~?zQHslTx+WSi0BiA9N35@DtqzC6_p(Afce0Wmu_C`NgeIdRJd+5+731$%#Z0 zTC?E7hH6g*R>??+#z7(4{%8^lKSk(m-MQS~M=}-RTkFrvT z4xsh`MxIKK#Z#HgM>*JTfnar7Zs+llv^duqce!iO!=OJJ9t`?HrCNp% z!uUJm$cnAz!Z>&se?$VJ146~(RnFmHd!b%ge&v-bwO05^+`)jmPci&{Lu3<{T~@EV zUwZzvokySaxa*UxitOiGoeTWRo%VSm8ws?|%czw+{{6*k`5+lgit!{Roo+}Svs zctdcii>vEr&R$$t-sd@{`#{vagY=Zqg=RAtINP00wDTcq2LxV&mDNhznEM;6ICPtp zt8B8~s8o0NHzPwZ-Y>yIr)#)Zk_EBYjZCt#>n^p<-@o(r!KgGEbs0=vdhU()Klnj= zzq_(}Y23ZPwfWhg-wh8k9s5HsTqPQB8}yUe$K<2H7*01jH8yf5oyj<;x(<)Bc`z=s zfSZG?R2f6#%=$2WgGp~^OdW2<0kyUDTC=$+I*xXcU4Q(3dud^Ddt)%aTq5#85c;u?a$@CnHj*f6CmUx9N9EZH#+X#`NA%M6W>c#;7msVlXu-0~tk zxrJ%ML68wUr3s7XYe$q$o`+C%zI{fhe7c zqL)GD2FXKH`>z74Ov{?tMzZNP9}9Il7HG`r)Uzs3c1E)#(mJI<$&w>a;V0Pe*4??? zMI42A5gk@iZMb}bu-R(5Znaz~H5-)x{WIs5hr@mTF5Y|ZJ~t(!PfUd1aOabK4t|r# zXfPhN>Xo_q=E8D)VX4ls${z=1*Qr+A`Br1te$?yk4o9BnMbHrKP(M^3z+ODli|SVo7J`62iF_(?zzBQIlJ=p&p!H3_ik;hUtCnW1R2HQ)rarw zt#C(ffF;Mhd2?rFtvX3R11UbXC2qy{f#ca>@f|3-C7+ZBHM2v~N<5H62go=F z8uF>vqC8>2RuuUp)>;9ym;i-QP^L_)&=_Vs zT`at^6OU=}B%0UD#APyOfCY??oKz@Qd4V>KfzlQzs#qnD=wt?xO$F2{ma`MN=a;QW z`KQIOzJ69L3maRQo!C?jQM*O*D^b0|2BRSU7GmVK@q=LOd!t%&zE)odf*$ulKDY<1 zg|PR2^{dbDUp`;h?GEF805I{wWici0Os&54=IUp$A)jBAhYb35$CSHAOK z{GaE3{GZ+)3?EnAext$hhC_${8*jY%(TAI_z20T=@hjpw)wEzV9?|wXzkcb?gB!0r z`{Ml%{_N`O-@E?y|Iis#9&Y`Z1J&J0(B0p6-Fo=hjPMWujJ8gM4S4y&i_JzOTt|bI zLBEImDR-{2*51Z;=i$!>zRSVEV}8HaVZm@P;MOgU#yAe*Z}?*LnS1W6o^ap`Q739; zCn{bLjP?$?8~fd`*~f!sW3}Yg27`VroZuBUw=^ginPQj>U)g&6%ZdxF+R}XK(e~qw zq3=Gt`~E1jx4HY*;W~#HUvW=}$JO0Wy~X+Yg}KFOZ)F(1I5%H*E2Hp$f((1)nGpb0 zx=B5dWrtse8bdqXg6+u!Xl>YU<{+`j*nQQ;$S%e_lRWOVBX!K`- ztc%Hpqwd%=2IeKPdv%yrDyH)nl}<0v{D6lWT5Vxv{Y&0(7lZMc^P`bB5DCMjAW_M$J$vTC{q4zQ z{N*>!`K7@@uR9ody9b^5wVK~Q6I8DJ*?;)pH{NJ{{O)Iwk;Gkv;n&>56`K6d>vA(| zclS|$Qs>UtDs~_2w7C(vxN@Pry-}{fD{s8eWB0%E*3~(#l1|WJ#V;o&<|_wBgenN2su=< z@YC6)TD9f?yLj>S<Uq%y!_dMDot=T}mTRpGdpq|g;kqDauIg0kXKE|2 z)Eleq{S6L;;ZDkMn*_wxRBAj$W#*cN!@8ZljlE9%3izYpu)n^#_W1D~ZY7^RbN*m& zsdunE?4AF?-#@%|E&R;=2S1u@-Pzwhc=617d%5m@{NCTc`0TTMs?zm$_7ArGu{R1z zfzu2oIpyiF>?l4PBKY)OC^T_ z9@HX!SCq~fNd81}EoR06bI(-M#g5<=0wLsL6`0VGO~E$ELA#Rx!l~$JM>`N5!j6$F z7a+xNrm<>d2M|=BqBI2}OcypxKm5hz zt1osAI*n$t-`Tr(?(%2v-I-e*9}Gq>y>j`p53lAl?gfKtc+}-%NKj=a*SiAgN+naZWF{Z^!ZCSMZ z)M4}U%gbxeoyJa>ivvIA=zVY?n z-GAt{?>tzZb0?EQ;O*bPSNYEGe&f#dTU&eGmF8lvv)LbxII<4M5U_HkI^Ss4_j*5; zdrJ5ZN5S=#wKya;%U*hIVZXZ<7a*N*1qx;$`!f}ZLBavlEzyQsM13qUJ&q_I)pto+ zA;*ml((G5HC4C-qVbYL`NF@erdQd0b$OJ~YA|L(Jvmt9ByCSqeCsVu7*pwA{j2YSy0%5?B0%~Os$i?iR#RjH^OOo*6B(<685|Dw zU`8MWJ1)YZ){NMmN*!hfEJ3;3Wt?eerHca6>+IXM%9;Z5mpqCmX~+OWGWL{O;QhOm zPN&wI_h|Rf6(FVVakTEP@08q0I7!H7^;pGq4@NkFXww7w-f*YcoF7g$QPMF{u4Xp2 zy}K6Icz;>-R_A3txKn+O_8M&o5)8+u<%sg#FF4PH?{FJ|Fm( z+S`r6@X`k#Y<%U-*Z%6?{jJx1)IRWcyYnNj)jTWBqH``GUf%P{I5Y;cEXuiqVUJ9HFIZie3+jwa6#((jr>FdFuF zYjBIOJ1$kLRgT4-UT@-inT8+tpp96=X0Z8dbHDBJyW8iY^k-tIbV5Zb$fG&@k&_47hY@a9qfa7iChlmNziE2v*}a$ zR)-lR-3b#g%7i`=gph_q{;zzS4MxJp2rw%6kun>BlMDzsru`{s(nE(L9mb5;m>&*y z6r|x`fUy}Ma4I*wRGdox@?U;Wj?H8U1R!fwq6;STm6RrtDh)A%q6t2&w`j0qP>(}& zE1D`tSwo$Jr6h)qB0|_y9L$(AnBu6kf}f>7*qU3+)%2F=Ea0bcK2_d1K&Th(3p(&1E-4K?kFgG(J|K1p<<3d z!TTHAFFp5clfwa&8nwB;hyJ)X^04N3qlxqKZ4++0F`IP7|(0drh#Xsxb3^A~^lqsg$#tYereL@z!n~q z!+op$j$gU7xO9yR$U$$vUM{tobI-o`2Yb6)yk-lv%4E1X7<322&}Zm{Glb#CrosAokAB91zFx0!M{s{QespiNa;78}YW9c29{(Hk z&tF{Fc))F3Z~d9@2y&`;8PP%uLD@}`^j1sPReB3iv6;b|B-oj0-kN_1WCdFFJqmMH z4ph`@i9d}a=TamZ*i-?zu1b(}2ikKjL`NnA>QE75L$9Mipq5?UQ@yA(4z~!uM_a+9 zL+Lsf7~9$&KQA&^Z9#y{n#{8uDd;LNMxa+bWm6GUN5l*lqzjaTs31n!KbajQCZ3YT z+(BSi+l|pTV6$7rZX=J3(Sq0#N+Tqz1f#%!CL!RIMW&C^4?#!^(?tbqWoI&KjQw-K zHXh&FUuxF4d>f6p6K^yL7wG#A_-EFx_~W(R-JqU+a?eN)K0UzkTC-jcSj7*ZQd{=M zV}H0m7_(pkON&dMht=vbpUN8c_s(B_uHD`oM^;ggeugmmFmI3+H7s@<;hBribnb7u z;P*Pae6G=F^>%x|Ja=|?XA>e6OvGEM+U<1Co_qH0y}ORT-x+c~eyhxDQhw&S*M9l_ z;L@|<;Q-No369F#|LHC+)}Ouna@7wZt=rw--#<7w=x%Sfy|FhKjOyIj;&X5N4>@b@ zBE53uOCvbhkvE{cv)wln684XpM!-3(HqHJZ){=>+Wyt?>)Ns?6(5n ztN4%m{r$lxL^qD3PKbM8uw8@Su;opHN4=|36_yRPe2D^-r`qtS42 zjbd)Fp#O zm?+{x4HR;N3ViL>j0CzsCzXYQB3DOxkWrSl0Ks4pA&bMZS7it!s87>MxK5HYrcGYz zOyu}9)1pslX=B$Y82b}QUBS?rhkH5|IQ1T!+xwX*VO}a@Na06HxM<=yYf0IO$*$CZ zW^00xiAmwg_kI9%s)(Uw)RE&`WmZ7a*U_HfM29c~|V$6n8$3|+U< z?d^dRLQb#CVS_ar<&ifUjymVhbDv=+t}JohhK2OJ5d20XpZ`T$^~ZPL-rL>Y>~-6V zOJ^QFxG`}X=dOPJU~i*YpX+q?V{6F)tdwx#)G+8ibM@-E^~>7_gR^I!VK6zfcA+u1 zdg0Qw#}6x4p5eediT2JX`yku*hZu|o!|-U(usd)-s)XN2D&vONy;mts=4;L#_py4V zrPV9Fy_+}gw%pprez$w^^77_`HZL$oto;E8w(-He9%nzJI~$v(*OVv07*naREd?6M9PP2Xx-5s^Sh(&_T1bV?!w(`Ke&4S znG5HhansIN2V)LG-k|Rf54!C~lYpBfOBJ{7 zbsE9&&c+rtnj`Uk`Ky2Q*)Dgo@d>$7xTQYaFEN=6xsk-3W|c~LsWrzRJb&$t+xI?O zT)MJ$0eby|sI8GUFKMelRCBR8|L`+z*>G3f;ImtI`1F;}%7H)WboiWBxz$=6_1nO) zE&RM-ePyZP`Q>wGEyA8l?|%Vow&L0Gu3vEA_4ZPw)u%++V#_|Bg^zJEXZ1ce)5 zV{!iM?v1}Fmli6{c+lsQmlGBqLQ@$G1}m#qIWP};?QVB(!2QBw|Hh|3bHlHNRHFq! z&c^+lXBX?cJNwP~OIvMc(07KD<=w51+xuI50`mU-((1aSNhRLs<8*9Fnq>-3%%YW= z)nYNy70nn_v@i-UMf#cf5Xq*8P^FnMV*R9rXH=sm713|iGUx)5nMK<1prDzf1qH=J zIZj?7P00c5E=|Z?X_1eDIqAd|2f}}Nt#Q6L@U^vKEs6L8v4Gr6W+ zT#lb}F(sP9QvqOcOM8_JjR0iP3INE0+lZ7D4k_R%07*?ZFx^tDMPqiNlPfwbxe$d% zQh4dQH}t;tjqkqy&JVe-i%Ur45;sK8&}yl$9%BIq3@`j#U$x#`sWs*rb7w}QZmrRy z%K{(X+dFsug@sDr2UaPEr-B9(FBtc)Jo{F~9Xci82tFF_m#Yn)YW2+GaMS~$l%Tdo zMtFBuTdf-(-Wl@wCv?J(PdTj%&%FHc$M17&!|-!Um4(IS5_s(!9<82r`kr^~#j`s*ezh8Y?;$!fEp*@YyL$)w zx6fXDjn6eMG)iYy&+Y9#@ce)qj^U?)A^tEgLl90MZnTA`+x*UN|Fidg_8;rDIga`) z820@VmgX|$2T87 zxZUe)aX@C{gXQJt<`!Sv-@V&D*g1b?LGCvZ4s%-srQJwmqqT1C7V=0?DMyD8g|VrMO1O-CP#6UfB?!+1j*vc^n;%1W)M`|R z-jG3f5@z_J2kuZSIj%E_$I*DOG4Thr)_Gp6h56NAesptntrVZn$*0_2dG)2`RcNlv zU%I$-?%CJRtg~t>xNv#p?8WAT+mC8h#|tWFmRI-pHeYyoe!sIvr4mZ($TL$o_TtV} zt2aKp&u7>AqwpA#p*Q)L|J{H0H-GV$+|Y$^17di@8i(#mZSLB$&(c3o(WrNI38bn?#$zdT^5~06K=PN&Y9z8aliX;?d*&0WVc!= z_XpwZpdWpTF#M!qn75P4JDv*oRG(Xdw}0~Q1Ajcm^0U|8*xtA`4607KUJ9o(t33YF zd?Ub7rBeF#?_KI0jJPr1?)IDI?wRNQuspoWm4p$uCAs^!@3m^~cs%4LW}~sd9hTmB zw6uJFG~6Bg1MavET?65ltOD)=?v8i``#iK%hJ~fGwYhU#CphSEXD6R$46WFm-L1`? z&9i6Ez4FcftM9!BpmyD~17}0&@r~f_#?qNJ57O^NFk%QQ!%!a4c^a*agBC#o6(C>` zUt6TAA|e#*L`w+0kZ?56b~2zvbuMsQgo6azC}Xx4B;W3Fh8l7$%f=Zz1xaqgu!{6cF&Lk+II7>I0LE}Qd z%xwkmqy2OaPC6J2tMz4o$>mEge*DR;wY5_0SQ~o1;h0Ymj)vpWV6fr&e1eeA!XcN= z7cQ+XueH`Mo~gGcr5eXGkG6m^k^^ZuYxvu&)^2?Gh?`TRF_g=-)#as+K6$XayB);q zm$>2SjrgqN;!^Fx>S~wI%#HefNZ}$JK0tT`2p3p7W!IgXTU=hh+G#)f_A90(^<2pfqg`DF+?BZ?#c@5ciRtqf6!>IG#Ag!wHEq=HgD3X$)Y(g1h*U>8dtAzgRDBn z`ZxcjSKYricG++ejJPGrVX{#^xbVt9 zpNuz#!*0Mza9O~df~fdKq)!-nIBpXPD{7UFif zQf)1s=eN8}2c2#H9(W14d0VcOE?ivo1MmLbkI!EWHJ(`S0b+R2G5)h3-skQE7e|Y$ zZu;R4VDio-nnYh*6CY>*0OA5vF`^6Be8pN(h^-?Cz&ynCIBC9Mlw(<4GqJ;H6_i^| z*eXS}T9&jtIK`4fz4}TfG`=6!BrDjA^{K<%$gd#WZ^qG}~E#sn}UkOA8DghqzOmt-L{DprL%v5Iz( zHv*^Fg7U4Tti*>K#a%;AlBvnhfBE?j-nn0^)>-sXJ1Dv3O1V+5w&vynuQMKYAu_A_ z-TU3)L9@Bc1@SZI*ZqEpgWvA{*0aymsR|Nj7h_v@(2Fh(^2dhwl}9Pw{kZIuYW$wh z*Y!Mb`eT3l`juy2ymRvd7JZ#5Ja!s_v#ZMoJNHM!?gX9C5R6un;)L6U+}!fO?@v7E zllQ-0s;!iq$@ypBVC)mlf4|$g^5TWI<7{o-*_1}8sXMcBdp;2SC zwOX^f=)vCJBVLzsWNq_U91yt!v(cD4=;4Kn&jj%1_U8Y5y}dbCpJ(G92HijY-+#p$ zk1t>Q$8W#=KZZ+!fO~tp4)ZH+=xz2#2ef{;&WLG|J%;b;t z#Nk2o(Go~MQjy9cB)u3-<5xmTDo>0Gw~}d&ET%mWAP*@)8|=1`uFHfRp1H)dj|(v{ ze+$A;HF2j0Vqw9jL^R!EPQLc!ScD-Ms)^hp{HHM8;R!Is!UM1`qA|tKQD>|PnVdii z%>)vm8^m&sPoVwqY_RNkU=6vR;o!gbh&m+M2HhXqPMb0e#JU| zX^j5suf1^l?t?SSOMDuOyXvada%--+w6MV4q?f;Rv9qm3+2bRxGOOFlpiualgIIC*xN0;PH1z6b8}E~*oEc! zVSg`P?-~fp5;@X96b&}_2VPL(Gi2Na+Uss!xmM#PzxLeO_U0G_;2BUUo?dL!FsJ$`de{-#8!VhGWmiwatpKSA^9rFC| z?4_^$)ek;;{>pP(JDVI{IR|ccg@6wJVyoV)H>#CNqdCti=MVND@J4paT(9Ns+yh>T z!Fck`-@b6+nT2ri(rEbT(TCg)i;eH+p1-)axz8=m-R<7K#|_=eOXtr%-g(5Q8Ru%% z_QnU@5!B`{cv$0p<8H5W{>;T;f1lSZJghr3`NPv_!t-b_>5z`SZCC^ z&DDzak6=~(d+Jwygn0)6tQ;;8UI1Q~^O3C4_AXdLwxwHvh2t?Hdn00na>C$e3J zz*MngBMl&g9LNH-cadCzp?&lgfSK?Q3P7OpG=~g8n2%~;2R0}MoJ@)Yxj<;c%Oe6I z31+smnYafN5JH9`S;1yOL5XyoMT@V3qA8B~mZ>{(vg@?;Os;Ph2MFec^L~+ED_mGn z=6|mE0#Wo=>J7WAXXn??&5sUt{BUN93)#~0x--A}-TnQaEw9gyx+5$%8WnWP&5{$W zUs`G{ICBeZuH~D0IqEef;Q|7MNR?L7ifxp8-QEkYT)Ot++T9!bA;Li#GrHi|z-4x8 zuGZi-%Q!j-G@gfx{8O8rcmMzp07*naRHhJFKh<(+>tO6n+(~4rjYb0w;a6X5@mfFs z;(zn@5B|-iXMeZVI^&jW?ftv8Y9m^?5`Ou%{=YHzXVI2q>3JBocg%6-`P_NVxw0y& zvZ}hP2lRmMMxy~VU@X!i36qj2(Ue5V(y|}?;NiuxU+lH~VlCO0we-Lx+FaCP(LD9g$}momQn<20X77R$Gmy7EBsE4E9dUrVPUpuxlD) zpq0ejNsdUwWDh?%6^j@)C!j)fA7703B`*=K~zJHJu~#cJ3I zJ#X$`h zWFUMJzYF0hIT)7#7($D?F*0`x+c0U=IIA6_Z&|9C)% zs9s3pU-E4N`F;r?oLtHJUU+{Ay^Fq{6&fwSlAVdlJdJrYB8G*Oy0H%`7)mXX434O4z=FD9 z0COBOR-B_3a<9h}itfU~hEfcn7!b~-*B$DbLk>g)iJ!}+IZ;wZqy7-MV5ir3bZzf7S8ssz zY=74n_W^at%9RNMfjP}3y9+Sc>VE6mT}e(uMJhVkZI4-r_2Fqatggsocbtku9o2k5~gnNRlzO~ZvMl_pruIgSB*5TMG?mHk`n z>SlUW%8~q3!t@2Ti@n;qVH_ib6;!M+KQVcB4UVnD%|%~wj*O@UQxP4zsR6Ek2H6Xc@f z*qZ5Z$Q~K2hee2Ddwaw21W*w6x)&K?_~p0XDP(g*k%=WNl2d9T@9sDLcs*4g`Ol`?j9p0O;`vs{cE6?Cu+CkH5meS0(-FxdYa|IYvN@BE$b zk!772)8Z^>_!sxt3@+x=40e@)1rSZVjSEt0b^T7EP)(zurgddGts9Ev*rYXulqBaw zMk6lWTr=R)gb1=^?N4wLanNA^{E3t9l{>}qj$^b-`TTjOtDC0lnAKdqIq1E3`k|qX z9VSyKsUM|87%@rvo-&Dxx<4fv)K)kPpi;9NWU!tCrUuJUlO#rxknp{Jc=ws;}Hq`j1-;S2eHZ z^Mlv~JbA%W+je!`ww+-rGg{e5Z66fhczxyhXHP^?z+7s5wc2W_#q~F`wHvjyn_Jg^ z6)8)RzW{5TW|+g#Ky!pjdEIx-e!s1n`nzBGoB#6n|IaLP=Xn20>#@lC4e*oij;%HQzoS5MiQerk;1X2hwgQ=AV%be*z)qUgF_WtI- z`K=iXWG15wPe_cvR@)yuHznQ!4XSUeM`tJ1`WBe`(y3f3T@$5LKAYDD&kS>Hn5rmd zOk(9U5Mjak(aF<#x$2Q!_dZz$g_*#_hVay@0OTMg3Cegl9JU!&Nac2v{iXp44+>#PizNf zPOh9KARNFRz(&})!yX&zBp7D8VLu2kQN6}+aWOhBd4d+oBC1m%6fw8Y$67E3W0TZy zSfjb@3Lzmt%}}2)N7JM?eCkzXOK}u~{aKteq#_Da=btPp7osGPzxGJB8CYST;Y?0RMtvmxo)cmF?Kp`p~(2N&C!9M8eMPc?H2K6YNBwx;#6+11hDh1x%A_p7y{!tRK@>P=FnZqZgPb2B3>wq?;q!4WZv<0~QW=># zZ`y|AiD|dRu_;Bzu0s%UXV#%=RaiIY@l6djUtaU zTb+w{zpy4rfS^}$#kJ$-KdIKPSgz3SWGWRstel{XFP=)Bqi!|}HYcN2E=rjp;4 za2}9NrH2=)YI9gfw_kjuyTsEss6zqpK%;8{{W6qPeswf#17rYkbgc2#_I1zEM~Xtc ziXx2@48wHEnYI||+Bjd_D&)&YM@lBELHwge-Sfp!e^f}PEqyRj6~}{?<3Nb57p3RV ze$nW*)o~L*h-{+ByZy26+UBVHEK}HV;m%O8*@DWJi&sa3Ga%Ov5p38YX_G>bqY5)= z0_2m+M|``}-r3KDeXVs|>$O>3t#NpZv(8LYfr>{yz=h3mU?O$N!M^Yxp9MP~5c5&* zT-8+5^2Um-8eqxv4a++_f4X<&uA%jyX$4VY$qHI#V&P*aYl4`REQq2wQh+`pm@bIf zwVQA7S8r^X?H+@jv2IVt4Z}-P3Nophjx~C`d-c7OBfU_z;H&kW+FNgK>s=jM4kiTc zZbxL?bbdvF8guRHD%dX(rLKrT2j!e79EUiNbd$A3p-;gO6{fO290lPR2~@A)bKm#r zp-F=fdZlekv7fZuU8*LcP&Oz?m^3YXC~>mro{|SqfJKqKArwKlnOmPEtxQtSORg}^ z7>J@|urMRu)SUGH59Ork#k=s z`E-mf@nA|;VZeN!7?6M)dFH@S8&8iuUt7Dfvc(WbEsk5t4?cPS!)sT+y1srxVyt3@ z_pQ>X?PGsuG+s$dH^u|IBxel6?e?MXd%!WDKO3y9vmgGcZ7P*N{qxq1n-ajVGZqk^ zPi5<%`5cW$h~@AEg(-VpW_fIo!WzzG zd;x-UlAJFVDzw)tlu=pFC>Al zuWf2-4{9Cgoo(AZFT3i{)&?9h#=VC^?m!uxPrYpW7%CN-2pG8UxukexH!!)fnan32 zHvkLIpYRVqJJgMVV|6v<(6<|}k6Qo$5CBO;K~%;v&k}UEf{QG7A^1zsl;uT9PUW&P zuPL3$(om>-s09Ypkij;RPOoV= z{Tb_;cJf(-h}LJ$Zi0ujB+}v4|1TWE4%7ChD#SBA6liK;qrSfCPEDSSYM?hgvpo2ZQRNuWnJxc zJIAU9@YEXh4vq2oU^LDZ)@{ejr0XY-f7%-&#{)SpbbGB*G241!XVQ{ybyo_UuJ3*0 zSN_)hhmSm=3baPox`om@&w|!bWyn5t7`QeV|IBf7G&oJk5+H<4;KP?#^|$}c|BEtE z(lXlIev{$S%CKQsgw`5bmlxBbls!IHeXe!uKx~{0H@DxC)3wo{rCP+k#bSSRZ3{~6 zArb1qFhN}kX3NTG%w+SsmT^X`atNe6Gj4un*#?{5k7m>Dt-^p8%z>X}b^^ z@d@g?&?Fw7Vqq?uwZ^$jZlhk?DijY^SKlaAUR&RM%R*&M)oi;T%tIz591+e#T-3;d zTxF2u=tJU3fVkP_;JH89V@aePCeCYicV7Seqd(~MJDomgy!rlUq=V|(@%w!hlj*~x z6A=%wdjIsS**=qa_R%N*1k}K`$5^)KPH_tX==MezK%FyLP^G4My#5zId%V6W?(Ei( zU4$;LIli1(ZJa&C_6TMc&!6?`YjW6Qg9EUr{y)9KMZ%sJ6OGd`6>!QKyrJ1Rir>%! z)TcP#OnK;s{ALzlx{E&w0Mid+YPwfLN0eliXo=3yzYHtUf)Ao~5=xj*3{pQsX&A~S z91V=aYD6!$8v1C))E5%65Cx;iw@jTIUW);87UyEnr4pTof7R_1e+eL57$=P`=zlaI zLQweoa; zK$PGF7ShZwq=VEXnq<~iCLTe4RvYdnm{-LVl)zwV9MHYxUj+ISk%2hdV z@(I_tt$9eWJ$`D^uyuCk&XUQaO&}cMm`jsX?%Eesz4&R<)6;DvE9@ zsy6$itF*1r`X1CKg@)oM&cYX!Ta!@$6|NLja zcwb6a1je?6%vRWJ!K|(_jFTHG>cp{_Z(Berad+4m z56*MN9d&%p@lq;X|Kw-?Fq_Z8s07=ajDTyZ&;o|q8jQN>d|k@amB9sk=*|9-J$;z? zm%(Io5CshMfy)aV%gi95+SfQp24#_4#OuV_lr!w&b#QC06 zsqL%%6XJK(Cg&a6PGAni0+=Et9`v7T=e}wJ?FE43EwZtm&1dudeurg=e3Lk+E)ym~ zH}`LT{_M0UF6gH2lU*WYO%QRsho|;zN|PVci!iYPIioE8bXz`(3`R5; z=qQE|IAY&IDB*6+pTT63poCnFdWC1>Xzr&sY2Nmi=vNm(pq~sMi)4|u@Dkl@{0WXO z!J`BqEsG-0Py|6SEh?$skz|t@K?u|Gd`S-H3SNJS8kSxi-YYv%_U=xl)fj{L0&$$q z;UG@acC@Z;IlhPGu*-rrlKA!H1u$X}o(D&tw_7cIopIv2;9HZIk#N-XFXTZe~_in%n9o^k)!&{ZzCnab2ay9R}|v<^(@ zpFH~u*9uD7~Y1-h8vyIu`^UjB`M{#)=DME0xY8-_q5-ZR?}a@c8L{$2@mk zLy~jw1SpPaXkw}iL>5S4Hc!l!rfvP~2S>%UAf__JD(4|d;Lf`WC>~YA0T}zvZ|ppJ zsHd~V{VQ)do@wcQo&l8T1Wn~44vPiPb9~3VvVVsVP-Wp)# zIu)1MET@M$;DF`L>}?!}%K5Z_$c~!Ij??U3=;p|>t)Rb+)ZvY5o7xay*pgG(R_p0m z<4j1~;g%jzWJ42guv0VG97#_i!)_cH|AKA}_nVs~MKLIwBA(6g=8)!7N<3P;%tksB zj@+m)iN-j+me~%2JD-Yno(+HE6CemSS^F~=StwxnAO84J`nt%b;#~_{)HB zSxCGH@M6!Y`^dxPh6z3CPD@9<+^q4>a z@KutFuH9#aw7~O|6*I(okBNV2)^e~Q8vy{fj{86yZ3j(^SnR}OCkN_K%kpIG4OOmC zy>fo~G?U3`N^8{kOjo+;bUu~NZS1}E;NFkF{hNRLvrm7T&le>r1C%J8tqSQXh)U49 znJ(fv9_Y)JYd1dmi$4L|6%ZiMW)AwA?*db@HrMKB7p>t~`SsuU>mPsep{6PqCl|Ie z9E^HAag9dSc-oe;y1JLUMp9A>vwNly#LHM)uH9^_kAk_qZG{2xQjc=%5OIetdNGwQo6==6Qi}%L|UJ z0D`o?cgr@1y4D9Q1@I=+j$olnuE~LtlV&0dZNSXQI)m|8KW*un$*is(NFG@#d(j)_ zaushfslmi`3|SOIOsOpQ{-6Cmm`s6Xdc-*^2J&4k77YuOvx4I}dD&$Uai3#)0-q|$ z0!Q{acy=+DQ7o_~dK3TY7*IbY3GcjH@4~DIdSI5capyR9ai*8+Y|tND{dT&*h+YwR z{#eyE4*1w`3;AELS0`N3Jh2)Q{iiqaJ36Cx^Dz!6NRJe1ni%L#=&>^&zG%+;FpZQb zB1-9%H4CQT7%vd8G?Mw0{xb+1-ryNFAQWl~Lw4)?b8muk4umLlk6y1rAD2O396>LM zA*ilI$awTP!8IuXI~RkoV2F~6v9MHt>06Ynf+eW_|Bpa;3E(Bd&?TqwCieNupTu4z ze#W0i$7iJW5PAvbC8=Jt@?VacG|okThHvNcVj+Bn$%QaRbH1qkkNy`bd_o!F(@$`8 z0yvA`H%!a0ET7sk46?a(I)psBOcoO$f-jxz-FGFa07_BAn7G*XCvLGBkzvw;q`d#* z3s(_*+ZK2kxDjSkpuw{UDM1jos{0%xx7&l&?bkEe0?RRwL`oEt!5JiITiV%+PZ7g6 z&YsD_y*6B+6~9iZbd6y#JkF-~afNvz7V=>l@0rZIH#Tn(a(%n&dDHas}8n@fb(i zC6%r98~1>#c?=-5e|=}W-#xi#58Gp=RKH>kPed^z3dHs6*2dPw#hGinpuBzS_7`BT z01}vNa+f5T=i1$dAo3-daV&MxRy-r*d}jofUdLw&DOOdxs|R08Wp?wqbp}frLG7vz zpS8*>sZqyZb4>Rnx3;p*u)_1_{o2a(xCzrXJ#oCXUCdW_pqmr4AYS4K>QDPEriUam z+YS*}0Yh&`0XkAWb8Z5R3S2}FB6{rL$WV>QJ(O5D8tz_Lgp{o zB+5R$e19(b{rNJJh4eXQo7_ymYQyqP%a3v=uaBzBEj(@BEvbzaFYDtsHGjvY>NJTvGsIh zPR_U|OKGxl-X57CXB;eYybx?c0F`K=c0&?zr*$|9Pdr;<qA$OqnjzE^Hx|vF4FpI{cUOpo}J8ErjuCYRjV|+s! zr9l0Me9g4#mE8UN_iFVm0b8||ox>NODHaO^tG;@b#SpRwmdL}?=Y&#B6v&!kZR}(Q zXN)9>rbm{Eo}8L;Rs|ihqHDkZ4}T_!Tu{$0mj!&DRJ=GEUR<>MoBQwWZ|!5x;;>h( zZI>&%zxY`D%Gdvm{@LfY*)uJ&EEK>a&{z^W=+S!yrtK$6naajH9QI9*zj>v8anWdZ zz=|u@SGGp|rl~ZC!$EH_8jh`tR=-x;1xD!L46sv2?{$YGh;?giT{CStT>=4ODi_l} z#bw8usgD}#2Va9$ySh=je)l(Wd=LNt5CBO;K~!%T;~qwkD-(!*Dzp9kq_erj08z#6 z%4*@3@97uK!*r%tDio`A7Vtalz@LB8OBV?1ohj`J;6V{Ykt6!$iI<{a^!fgLJkn!7 z_(|=BovK3wfpEtee3HLVQ8TwS5s5@wBIzN8BLkn7gFf{$f|R~bFXutjD}?cUa)}et zla|H{FMoRAMi@z?2IgV_%_FCb7s#J)5Jc33IKE|KNz(D0EPuO zwFEoEc8|RMS6VESggO)j9{TMPT#QHiuZDsPW57{tL$82~5x@(7(htKYlhG0bGrAcf z7hXj5q687)=~@6L87%rUiMJ>Ud%?e0@AN4Ji=QNX9_6Al_92=Lp+)#jE*e?s8;{yb zZ%=keoImwJSH*IY@7svsFe?W6ACCJB(ty2nIv1L*uGMxtM|CZixSBD^x9}G%eVR^o zxmhk49YKSa?sdDm28J-N)9Xm0fLzTQJvV)6WA|;f{XkbnW8KjV$Fx1e0(wKhSnHjy zZ|t*< z-YWNpozQ5VmPKo193S=S>p;o`j>79(}=2X13PjvMWLLe9CIz&tmX>KPH(GmHhlC9WDJJ#?PYp zB!vq3bO;Recn>4-qYE#+#oP0dA6>T@^bPdOL*S*fGMT|&?xG_PrSz-rBU~6@3AUk2 zP;()e&F*49E3WOyGYSJ8UczoG5#*%f~?{{pnB!{@nhRX9M3fG%^8^BQz zBOyir5yY}$d1ZgtJLPy;OcmU5%fq})mi%MgBtAAR#{+igBQOL4AUKuknv`8>o_r4A zdUJ1U+&|Zp?x5GXy0?GYY9NN}LD<{B<6}_;JRi3XKl%q31gG>;dE@+)uho9VGfoW~ z%R*YUh)@=I(Y4A({|TNgUo>%nCF?=l*RJk^A=A?urqQ2}J!_)wB&I)?Z1eCX#u{`V zPkh2Spe1%(hHzhiLqa_mQtDtMgzuFI>idjuwU7U7XaNE<>iE3dQ=pu=G?Jur`}6@( zsR9r}8T??1N3e+ltPoQ9!pf-M87M|NyQ+=*+VIq!9MMZQGVTpULqy_cPFgQ9)<|2!hGt{E%@HwWXS?r238;qjHJb$WvMKrTaA^}dUE{UbJ1U>wi zxDInpR}Pi$nLvr;aKS(CGLJSsC1K|Id>I5TfYn5>#X8$%@dp=&7R+20S0eS0MyX`O z;^io~IOfF9g(yge#L3Su|4Yr$l9ROv?1fkuy}#^j0xG6AfdxH$MFqncFRtEX#$NU+ z*{ESZ@F^XL?^9Zu`HQ7JZ=Ts%5vGBuF6+}25XH@n-pr}TbXx`d1=~_q(6_g5!tgpd ze_zuTGVSI(P-A+;d08q~SO+@Q8J@KIKg~;m4&>09NPK7R(SPIMZnN`8#N{-yj$b_K zt1l#So&*R9ytcAcD%CI}G>(3;QdvQc3Gf6N@q>+z@E@{=+>=;W5_#Kmu?yBg*F&~t zjBFS5W5UG9kJqofdv|k)gbD$MHc(4ZM+6T`r_qV~F=!}%Xn>WAIJbO4+#xD+krsx3L){}ex z_~5nQ9(0~Lmcl@b$~o6xWzog0w^s+M)>qWYAi@)gj30i|tmHB%5bK~x*2g&N=Y^Vn zAzGf!P;eSJpmcb4-cvYYgVP~G;Q&wWW?t z6Q)QDoM;YlOn}71P87!Ca_^<0lBSrK!lb|CdBVk72wf-vMX>-eAjDC=b$Q5GwDgD3 zukgZe>Dk<(hmimapM(>@$=_i5hNxK~rUS%AAXVNu9wsk(UKSRCjxBh$9MM4hJwf%89WjGXtHaN6$II5f%zSkH8Yn#BUpT^n2%cV?oSYn$ z$rgJ9l%BHS0#&RO3mf$sv=^8TL5qro954jLN=E;=W|)?PCZ`ONY%<6LQCZAofHnd3 zQEmS4@H1?W)A^O!#pR`{3CjtR zD6g+=H%E@|j9ubBjj=oo1Q5#3cpX#k8oDi}viW==ovy$fAfI0aC8w$mjvxO>(NS&l zi?)w#TSJq{zGt2r+8B{FGK??eK_CK6l-PAs>i|wWmP*X2#NRap#wj^xJH|-Se4iCK z#x@3~X+iZ*&I<(gOFX}jg|IA}%a!)`-cXt!b_S!7?#TjKmam(D7+`&5>g!i>qH%We z>D#wn>vqnG+a3>1b}KTTKOHIzajVVdQ_S-?pbbFF3V>k~aZ;L^!fi zhMqT1={qw$93#-C`oa5PDA6-vG>>{NH|U3f!@^Lggu&3IU=S1iu}L;f-J+b59_--(Wtg`J>gGK@24HxObCHKQj(Ip*()lO~mt|9(82>B$L(89E za{00Qa3V&lP5i``hH%;#)_mAo!szha-ieZ#31WV5Pg$#PeRlt7Z4GAb)4dSU{q<8u z7;dx(Ykqg9_Ta%uE}LeMVp{rSaQH0QtR{$J24haw4ORe(|OohC!hVu z_7UeRmeDXr9)nVfkvbKmUj{%ghfr)0)nL;j~&*gjV=be!?*8OsxR}G{oJxLOJ zgApL>!S$QD%F*6I^|Mc&$P)1;mY{MR$6+nLm7jy z6QE---U9>VY=bPG4zR^@&;a)QP((!0krsWy8lQPNg0Y#9axoN)Kub(YBNW5PrH~Q= zPYhH2i0U;WK<34xAr4)J%9mbKPPwols8){Tc9ugr!&BBs-AwOk(dQ+6=K0GP{wxMU zdIq%cZS37k1JjLn3G!VU;X)v!bBhyIj4)2pyLlL@dm)@yGD8KP{tZ{Jg%)P?63}`@ zEPVCLr*A_1o2ethp9_=~^E~0$bZMH;SxFc4a-UMGo;}CeOaX2Rxzdy8YNdihMJSDb z;qj!i+MCKO-S(~=)b{s^Kl$-rhyrN;{6IG)^M1a3Rg}x?8`@wr3^vK_?HA6E4GoB- z=ZR!D9d;ekxr;^V3*Y*WKKuBG63=ebYCa-Q0PTEOA-8_V9=QX>Rv> zzTO5bwDeK6RPGGN0Jx)JOI1h1K?~p+30a@Zuk5@-Fi751RCQ(ZHOQ*KOPNe&G#-nh z-08L_4%&z#aaoki(HS|X&>S#aW;E!R%Qd7vHS`X=WrYkU$`fuOrBlT`9w9C($OSRC zWsJ`Qil5H!oHvg-UOyD>*-s!4?2x8v>`cynVlYLPf(C&?|gYh(R9tS7(qE`)^xkmTb$u?F9yJ@% z{mG9eia zOB6EEP^Qsrk`{*H^pq|OXwd`ZYKT_om9KD?OkWr$XTVbl;LV-PEd~|*N=BarUs0bY zuL$=D{?bA%HpLG~FkYnl_2X`6$UpY){@vfCavwu`{I3NC6M}Jj0X#{_sf9XzX~YE@Gpjf5$y-vL&9E8_s+@S47D_ofAk=v zV+-O>N$JLs0DUH0Wm77w+<(}vRKtDuQy>i6j_SR^BO;DW+w2ayw{PxVoDa!q24v4X zSE=kAJ^u^e7tUG*L1+iPQ#I}Gxi#5PJ~`Ca@zS|H+mpZZoxi1{oFHWLxFtwAUdmVY zzRnBjy=!*|?W1O=_2Q(tzq_OB<8HrKFGIy&c27&UpmqU= zQovuqV#mwGEx_@4%N`$Y?|uQSsxIP`{^>x~IU?MB4)99MaJ~yNDxFHXWM?&Dy&!A_ z79C%lwMR}W#Wp)5&(?Lz?++TKVnH)(W!S9mq=P;XtS%X81Cc_ zoG*X-Mz`M$8gXlgKx zJe$LY>9E;cVbWDxAi;(*xU#dC_PT?9n?Y=MI5KRn(>>-r{mPXun9MMk=HuBimRQYW z3KTKrdNh3Q`w?&oM>i97rGzOuLM`D&q2Jx$n#4n54o!OD2$|UVraHQq6E|8SV_Jwz zVwiwpL`@ZzV1mI+3=6|yOAFZGn8q;LSc#&-6QNg~d|#$WjH2Cq&Q0ksQFQV>ZyLM+ zCu5q|xCo-Zpv#357ospCkw)Yfit5JZKp3rMv=FYS`^$mwm%>Q25b$WAieg^ap{L*! z+5@OM!pUe8aUvYw1%Yu~Wg7b#azPrp@T>iMl`9s^kKHUW@-4!^Xl=(BAwqQ5i3PxP zRI_gFrv(1#Ck@4L7)F>b26KJO)Jnw_P8J@yoEyciz15mP0W)N_ zucTgk`)_I5&sOT*;bA3}9tNrGA5_kc$B@=|thXAiz5TbbW1cqJ-PSoU6Kr;LwI}h+ zv->|fJ9*-cPx2dgzw(7I0v}3eD{p`CyI^zt;882LvgJ4iOPr-l}mH41M5Py|d#_pFjGGQTHiODvoCg*&Gl{)pXFyu7ENQ2E$h4 zsMkIXma$-lEYc^-emrs#lHsD1%so4Nl1_<+-tP6fnqsJs0A?opAH2!&7ej4uIvgu0 z&LH*cddFvnnq`l5(<9zNuQpp}x~Ufn)#2b2w8Z(8jBqfq0L`f2xIS1wc>(a--`#ty z(>xX=d23@0>~^3I{O<2wH!W?}G}8teXzJQl@y3m{#`!3f60*6>8}IFR2aWLfEyXZ| z94f8IPe1FZU;=dx_E>y3dYovBQmngr=i zjp=Sid)Y;y(lRXUOiTwM(R5@p3p91~FbPBrnyF+lC2a#oKZqiT6Le%|n$@X_l^UnP z=YFU%31w1tiA z(z*op!fuhckHi-KrJsbAb1A$9&tJLq;(-_7A6lg3jKU#8OMO7Zlc047(T9Fa2NK*6 z$7WB*hKC(~Go4@&;?|=BgpCGdZ`ZtD^&bq3Nq`c_z zXt;j$+vD!D^A}Hhwpd@OzkB!Xr%xV^hkZ@g-C*^Ok0*{;E z_OI^(5d@{+(Y?WVJk}J~XGD+76ib=yTKdO-anJTS^h;i%08#q9n1YDOE)W;2d!V!w z)@p2DRVCu0#SvLcX1xB$0Ha|hpUvj80GZgg%lW*cUYO)`3yhRT@w{;w~5j_0)na7oLx#CbYuihji*qa^n`Y-jv{6u(3fxQ1Hnr5=I7=J=ws3r>nJ5xRHsjaC&H?h(HLw@@GuZpGAV`3EV7_ zX{V)?E*OVCvi;Z-y2FQm1AlMya0^NljyQjIaz&7Akd4`VH)-bZXJJruxBFs)2#SpK z)UBhr3acGq%G`^hQlHGDH@o^E}k_E zo7F62dn~Btz;5W9ifxWO*FHKsM?yXY8bBc@yet!;{uAn=@JTP|Dpy?^`f zojm*0wa7WKKu6#&H`z%|d{1-uul$WWa^79tk^m?FU;mFM*KVa(w=y?w?lezLhL>P4 zzWz>rbZR!bJrBhdbT7ROb!=E3fGr}+?g^m;eQ+k7zIgU|xmZG6?!7nfv|CM}Zcqn? z>BBz)#vBMHp^z!K)|ePrF=$HNY^H=^8X`))ZVL>e`D{iK+0E6h{p~A*k;(~quxyH{ zVzHP7eJ?M_nN-TOHD37E`IQ@m(+8~JUEF?e&2=p%a`pmlo%PbW z3YZ9Q-${`*O%uP>fXW~Lq*=_#3_D+_nagHZRyNy>^L(N18Rv%H*VQga`oW-Ux{QZ; ziN|C|9|Fa2YG?QLjorJBW17YQ$oJ~XW=h~rpa0zF3(!cS0E%88bLq8R%P>va(j4?m zGK+A74(U(Me8#gr6QII$n*=lWtR0F}T0X>uOmM}}G?ZX7pp9511Coj7)CbQVhJhz& zPc7#Ox_Gdx4C4?5F`5|{X($ap3SypZ+rSAyM=yP6W_h0eg(^y@lNZS3u+gD%si{Lm z%+B)3&@n8#Ld(md%YT*Uc#-NAQRH$~OL%!6;;)h@NIzl!y?^gF(aY&z{2@ZIsS}C< zAw8(*pP@{Q>{y82pyUlTxkIt8KtD`;xZr2Bfn&pB8irn08q?jQxKi{lcU^{mC_b}8 z%O-ay-eV9#bfwV`lj#P9n#SzU7g>?9I^D2M9k)bwk*}mX7b*nRwK2jX5UOBVGDASc zJ$&9@SrfYF70J)JX1h5`J#uor3MMzfX@GSOf`Y(x5zkK6-ALK0>*GPcl`j+|IV*6U2|}KeKmYu}oA2Dt zm-BbOP<;BZDM=F8{6vxe+OO|cH&X3E+pq{2{NTTN^6uStU%X(CkC^}WfAjvY{>Iwv z*H*W7<^S^k`Lml>QZD108d;P|>J7hY>woXN|IJz>4#GfZeMDMlh2lnVt*GE7_$&n!B zM6A(p*v?5z&q{%cm@I~x%)S5!9ouN0KR!Rcrwq@Fl^tkAiS=6-&)Fv8!WVy6>| zJxrn_U5Rvf8h&sTZxB^+aiBu;naDf`%P@})MqMa+L&t+-(741XIA3^14;8e4?V(p| zZ-2?pg;*E?xu`~De$6UB*=y$yVtI>UXBaQ7!$~4D< zRG^1PQ z$@2cr_Mn&k6|m1Th5gSqXC3iTd6*J^5E9Nj_-21 z(y$zRtm=wp>ZW06EkP`fHR4Y+l}@)hU5ohGwlD&&Np@L)PSv!at;}+r8)@pDHxG{P z-*+s+yj{%t44+Hkocy|H)lue(=4EO%gOa3pe1S44p;E4oRmE}aRNmq^cB@{!I39<6 z6`CWH$y~d(xl-S5HlEpzYm!q8J+Oa*`IGEKv@NJc>}f=51MoApEX$&l(m}I~Js|Uv zEc_dP{aa7({cNRL`QYO}_pned*5%yBwW~KdzT_H3W5{;KoB3RqVQ_T#lhnf=GNW1k zDa?$TVlLGBZ?9zxU7Brm)-l9 zd_|++k{*d-Scs$ggy?{r2lo9q1kN@*%wdmq!{*OVL?b??w{}YHbA>0S4wDlyu50uL zjckS--y?c$-Oxb}GJN{x&2NlHolg6x)p~Y%{NeW6{s65&Qor-Z7uYEd`%iW@4-8{V z!0Y4oz*c$qSIA~Ny^NezX6Q>~-1&ZmfZ79aXXW#9i1NM zQXC*I{L5y`W6gkpwz0Wq8Y4qDZr*;&v2*~!8wb}wvpQ6iuf6m74}bVy6)IO8bWTJG zg8^3XY(50mk;BjI&6S#|D&2vO837cKL3IU)2>&F%A4y!GAw>Cf|pbv{*o@2h1w&vZ_@ovy0tzK1#D9L)!1qkL_5@6plm zaI6RGJ%ROh`u&uY<~a~I7KlgHFmK+;1_ORD?hTrz51{OG9u`yStSF^dR(A%yGblze zU-;y+;l_q%jki~G`<|i`rKMPwGu3LPk}Iq?nvP&GCOf|Q+REY69%28y_~mcyrppNF zlA({Z@kn*O*KfYn9*}*36Zbs~CkTc)KnO@S5BxPPr+5r=79l0DwrzrTcYR~a=ezBO z&SGw3`;O101fD6Ds;)VJJWEnKlgd7R@>#Ls1{SqIg3nZQ^i(z6%rG@!qM4>N&?N*K zju00^)0a1Oz&e*pe$?+;5IMC3kJg<|pM;1N{Gmi^d?6?$LNUg1(SaAR#^5ccM{%eU z45o%bwEonrI1dm8#*xJ}bNV=YfDna_0gzMGi)QE;!2%S`Qy5z;t9T}>!&SI}13cND|BeSZ>h*Lj9MR z?2&`%onn5~_gNk^YkWFa+EWI{leAdP#;LRt$gf8q<+FGV+oOyON;o9K#k1v7{o2(x zB!L%r9>A%*y4yd04D717dPf(ce2`eAo|7dHy zCU9u1ujcaO$)>USIt#GIy?$%u(ZlmzU+E1MRq3co%hVy5!-zRAKGVUzkGJ0c!<{&Af3L8!9WN`J1v_@ z23Tdp*K*@w5X68vB{H6UU62;V76f zHZN471`ri$R)Z(80Y%|r2tspQOe*DY0^Sg!p)u6X;m~r4F}?p7`H}Uam>TTUpFsv!K!iAAgv7s0^MNu$l zwm9s?;z^<)POwQT@<`8%)>`c6w9c3ROtwb+i68HwkzdgYOvJSa{K6_ib6MceWP~3T z3K9Pc^kUI4+S&ATYT+{-oAAO5h4nR7UUkUH04&FezS$wZT`avlR5>9ni*iOzf#JN< zZw7T~l0A1OBECyNLK9zLf|%2kw(oPB+qVttIVAeQ56zW4I~p`pr3d&*{Hc(Y6RN5V zblb_+Uk7twr`I|=Io#U4VY5XSi=13s-MZaw9RdIFC%dmQ**u8N{-7uF_Gr)_jLrSM znl@~B?zmLQrHb!id`$1g0Y*61wX0WG&KeqMFQt^AD<;4^AR=VXg8wR`YThO;Pl5CZ zbwF}kSGkFknqI&A=2tU-)lB5{N3!p*aXR!pvs^BEo+S$M%F5bb`MvLa_V`n%-r!JK zXYARQ^7!PeP+AqR(iz$3=dH0iK0Ll(s=S>_4=d%(d!If6^Wm+VcUtF%rp*Weli|jeWOcNGV%Px0FfoyU zz=Fxpu-)K1EHhK6v#vkvJ{l>b$?+9FsI@`XiE_CP+EteO{K-(&3Ym;@aAT#_^M#Zi zK#^e^n_EQy(X;38uN-`@+kQqiMey7=zP&$cjR)PQqj9T{FOdW2JqHkYe`js1^q~i( z@>{GtJpAB+%%@r3LVSMKv7tYtTJ00tcA!~2wlUiXKkdrF7!N2>0E!4Dw;0aHweLsf zdEs#IsN*(+CqbJfc@-^}Ly!xHFeT_PEvCYU^w9Godj68@ePR= zXTncRWei$Rbu=C|n`aLmKRmeg4MS~1E;rY5zAt^{*Z%frAO6YpTW_769UbiNma26i zIq+6B2M1TMVQI7^0w9FHx@BCyzVh%v-|?7CUe4sDVo_GdCK%n``qI~YTk~ucSdYz= z7+!+x0IvJiAjRm1FSwun_^8{!d)Lz8YKX_5HZvI!u+y}N=V?~TDLQJ6KMMqRfK|2Z z-bL#uU)X@6*_QUT-}>LY@y2^lSF)7ez2e%AuIR&!z0&@*a;b{?eM#gPnZufHg2^)_ zGEk$SbM+9LmeJK4UskQNNzcLOPqCi6aL&|&OC>c49vBuXg0$@iEBBYMS^1- zm`G#QIIoTH$)c$IB?&AD0L7WE8V%uuN(04`oK->$KM;)>3D`pvAVqq{GMuAoI}!{< z8=j7bhOvdw#?TJM`{-q08I&V&gV0MD;j)Jdf<9pclhv!>Czs+5)dpy zAJ#XoH!e;f4zNjO1kW`t6ist1v)^hu$ZwzBYcv{P`Q~45o__wV@BQ_D@AQqk)yBm* z4W_iT!$dr60T={l;bP4&u3fD?eKLfHX^F**!*X7|UST+iL$+rRT@O1ev8`IR^`Qq=GS`X3^ffuJzDUs#9%5bE}{KRzRX+EDPCrVAgOqNp+ zt)}(bomPDn(dtBm;$Rb8voN8n+qqdW@nP_00WSs+3{KT2rNW;**nw1%`MBMdjN1C!d~Qy_SOkdHk@;Oiug>Do&Jg zsf=v-J*X36v^y^iA3yQDi;MH8E+&qTT<~Q801yC4L_t(NH|i^(G%l~)^cm4K+CYFo z0X#XuBRGea%(kI16+>4I1KBCXw2Ju*iJid*+t(kTHGb{eSD&9egNij8kXXv(re0%) z!=nZS0?(UpU@m!J+Sir4uF_#aspfTZHTp7pdIMTi+ULwlZiO9zT<% zLN;4lTfK6yeXUris)m&>m~^iTD$sHq;?eDBFgg2zsTDzwY?D@oHumxP#k2D2?bEYI z94OF5X*g)OcDvm^PNfS1)DUc&5M)mmm96pYIFQr-%}0ly!WL@o45rAXKF!2cw^GDmDYTS*YpFT%64W z%X}6dW+TQjY1Jk5Z452wI8j36GD&ERW?(K1XVy)Grn{TM+{`6)kfn(SxOi1iS(>Ke z&s3&i9`S5#4h_$K)ca2?s_+&qxNr=QVih9Gd{}8=xryvDY_b4hc1?jW7KrL1C<(<2 zfiMbMD0(w*=`e`|I4yXx@D=@e1jyn6B7lbzeDU&6=;ojrCUz72eMJjGb14um)R^PMg=Rn-j*U=Fs+rc+EA_^ia&S987=sp6+}_Ex&xQur0)bkv zz6Tmbt?BYr-~>*9&8{B^7EHF5`zy5#!(`e+1CN^8#Ci4v2z}c{@NaTjy62E%%!fcH zMyhe^jrT0Q>$w&lpC}Hw2>@sMN*}Ke+%U>zBXrH#+Ty7*81?-1J^3-S!y>X;9sgy?Tt#kOOW#PRx5o z3lp!T9xGQobJXj+fQld<(*PqeBZ%2_X6@S5z2*gSjVgzkI> z>@+71%1E0slLLE;+-Rs7l_FAiRHde;n-sz+>h?UANX?LF-p`6K<0oS0e z#=|{P8idl|XMg&lx}L3-?_69wtrtt6?F6GBao__DjED+X88&zJ?$%4y7pI4rOpYw4 z#hfUKnUoBX0Nb{qK{*)*`fB9Jf}r#tU0ghVanXJ2y_9YmGnZq5cWg|J?kRmqaL4(m zhl-e}Pp2ml(#soM`OoOIAeg53esrx6 zLpeqd+a!o8Q95+_&m6-D%m_1A);==246vVF#hm*JxQ?1$a`6x{&Kj$};dS^av zqYxO5G@QK9e3BUW`0#@T3kcybp0TcH$^tQ%`Mz%IieXe&GdsI^r8OolMR3Ytgj_nW zDm{P7CW%;uctioqf;jB=S-vD?*7WYNrh|zQxZw08AaY2o4`P&Hp<#LDd)K*$hWxE8urG|Pnr@-&dIY~ z)?o=9%oR5|j(7*p<sw>6 zhGLg2zHxk}H*B{$7f@NEm<4EDTe~UrN6p;)=Fe7;qS+oh zhM^@MPJkk!>)~FWk{cfmY=5BJR*IJ+6~xh*{F1U__Lhq(5A&iKRzw_%QgB zh-!X7M|jOPQOq+E9950ynnD!zG@tVG67H}HqK!@tW+nC`1*akmGv+7q6HxhZ1uyoO z*#6L~T^J{8jNA}L7=4Xnut#^nutvh#jzSlT!6X$)ByjQup#=zv(B-%|Pmbz9%fJsU zihMzAbS1=64_;A!7hW&df6ii99Era?f^ZD@(TxyEkc%QBtu^&y@%wXIedHgS&x^hA zD{9g`k0^{kT)$^Ib~RsZoik#MHgb`>NIg`%qjR##x-a$Us zJ^je@xyfos02oY;heeE!12TlT3AYeGzUFpJhnI%01Ohw zU;+esYS<3TXMC<`*_txeVK}nL212DepgAQO=(WyuT?ay(&B~5z3fXaeJ-5AGX`BxW zrFGTN2`T9n&CIwZhndX(N)sw>uNM6joxOsDvW4C|=@9i8s zf2L&fTCg4@T+|N2yt-cY1WVDiN#!$vs^?(8-nvkr<_xXxAzRZ&Le?DV=H0jUpFizj zW?~KXk!HDfUi(u0;9FN-)7Ll3ordB7|8`;W!F~DNZ@)Ns2%wnG6xZt8!BIqT=};9m z@wR??_VM?A{qFI_IW+sTPr56mylUDo<9X}7gJ;jqbERvnuZ~S*BU~!hq0aBVyWP4N z+`hYlu%PMvcK5_~oslwvILErm7$Rf|Ovx|>VtJXFYSht3AD^d-=1>_2{VF(R5YHxO z6SSKzVx$=%4FsV`o&7{K`1#ZZL|UxPK8;B8*`yOu$TuHBo)_7Y6cWnh5S|$q!u-Ss zBbo~_jOQjjOi8&gmpGQa=!L0^4veFsGR#C|WlH$rj5RWp$c@!ArVA3DZA2Scli_AZ zT*c{QtP*@b0+#f$)o_PCj(R1<3ABs;j0ZqTAdFQIg$J0Dl5?0zA`OnuJMc1`dj+7v zmqHiDzXaz)D5BAgKVO()G9L7DQi!R4{~E3klMs3d)X_gflYaOLp~Vw4oVXA|QHUkO zBkXg2R2>uq2tK5C7vX_2IzQ_AI0fLvOx#$%_GbRAcfQm;>q@DDEN6Q|6~NC_N8Pit z=TAOvoIFUSau5~4K_8?%IY*b|j(FW<(pczX&@wy)Y2to z+`o47iwrC6t(Q%`myzUV|Kj#LzdPu>VEDYD_kiF{z}f@FXFj{i@~3#p2uTrkcdJkD zpBuU@3oLL3$7h2x)?qk;eJ&?~g^y&6XB^+LEKuHJnLHsYfIy$CspGb;tFAX*+mb=L zYL=BPOT~)lvxDHESE!;wA!S+4-MhCpxB0VHFVJ}g)ee@nt=&Sl?2N|!dp|$sg%nuP zpcP8Rsyfbm^x^U9I)SmPSHF4x!x!3EaQ&T5%gE-eu)6{l7PI-I7afpA6MLk$cPnez zHesTQa`(;M&+ifRk_2{VrT*aYhi|;)4U~au8aHojHyf%yIWMo#KHFH?>h#;yQazQ* zPdW>NMzOt#-!IQ;cXZV`19_JvTQNj1-VQWV)r?dT-?(|LR+qD^Q+Z`zNl@%}8Y67_?M>}=MbOZzKN4&0$ObccOD$lxGyG7eE!rm2J zGdHL7utoINH)ej6Qe@a-oWw|k=b%V08^JTp$7L6-FO5wx!>D3<)a1Ah9ReUq4*ULs zK^h7q6cK3CS7`P+_HFc{_iWJRn@jkZ?7|Vu3xnZAERhPQ|59~@g1QQntC*6-3ug?$ zf6)T^7-`C|d(cHgQ*;b9tCut-3Bvvd|G{t3(V-}$MPVieCz#IGB792X%Hn(UGH9gI z!oMVx(!b(xh?gU1vMSKhO%#`0mxo!z<%OMa^_6!>QqW23^!O@nABW^gGqdPY> znEf!TGpQ6QY^_i_de(4o3Lp@AqhSNX>YO)UfIcl(X3Ck@#{G7>c)eEHxcA{t$kI?3 z4HWIxwbw>tkb@54f`mm9A|Q%9&vQI4PR?y-Roxm6dbXuySc3*a;_f9FZP?GJWu^1L zF!cVg$MOt0ZV+>ht=YEe`@{hzny5S>_Tjje$+RH;pnx2gIeFT$4XaeyZ1smeWLcA48O9hGNWMzod~)=}6b7Pz$1qXv zwLx#4Jx7!`6GV?<97V)%jL#+{)BbX^i6LbH(=QKHU<%+$ExMVwcJ6G|M)AD^BqjqNzq|kCI>! z?ikj|lFMJFCY|MQ+8J=fW=B)Z`6t0*8CoV{TJR-cV*&g`KcNF8L2fZbU5;U~{KPtR zERrP&U6$4*PZnkDmjc394~C+-MGINoa>5tK%kUmWM{hzAI&Zu%+Q1x$P~ z*q(K@co`vnyJP} zo1kRnE43{FsLDjfu`B?X1AmmMBWip~g+l4HkG_ zmgHJxtJyk1lM{M@()pOjEZIfROlG%RBK45~01yC4L_t)7Kn@F%BwiBb^UmnTYehU` z8)0qFq#g>$P%zC1+Lgw_`yZTDia9W<0jydku-`MVGo~{I)ATB(>hSy|n_J1GidU|E zwOrkmrIgI?bS}=o|uNf9(qg0jhWxz4KUf)qKj+*_xl&T7z=J7xl@pn#>1$*gvC+)A=y>BOa?UZHt>A1=-Vj$dKAVb4P-f|Oz2g6Zuvi9|1tKsfwc zU%B$fe{@tW=!(&?+joOxj z@})|?wlfzH7?Gm~Gc`?Zqlu@^TBRn)?YWK6aGKq2b)$Iiqo-G{-WrUR;HaizS{!uF zbQ4UBUN)T@tIA|^Hx8_mjF*CEa&V}{s zx7N>2M^M4QfhR`}xyrbqs!FM{MogSqYh(L$4?wGbrfWkme7a>-NmtUD>ozXmp$f zTp%<;!9sI8e=emlTH+`_YEi5mSX9JbRV&wPIY4Mj8I6T?M1l7)U zUGJJmHx|i40H($MT)|6=7`g?M8Nhg9LUaM=6D%+85McgE7!og%%E2g`*+Hj+A}j>~ z!X+q3!yXM1^H(%7CHqq>swj-1SPLZ}?XnmUN@8C8)gs8m3Cvpvig*za;xH<-U=zin zihs!!MJj3lB_S~O{8AO@QryKj{trwafBDZpS*vf_ zuBYn5i;KtA($^Y|6n3}9y;LzRwNHMo*eN-kWgXMClx#Nh#uvX|t#4ns`r69IYn%YU zS67@z@7^sR-#-y}xl&#)t=yE-Z)SK~9kqyaG0(1-@-z@ia$eVmnKYM|MNr?VfT)%$ zh`fVXNlFuvF=-|cqktLE^KHlC7!S0rTRTlg-rkKd&*!DzChzjapZ3ezlSj z9zT1k>q;t>1qqx@rHRKI0~DK#?U23)kocS^)2z306KRoQ$ zS4Ci%lY`>O3LT&Lm%)GX&z^4|6wyq{tQgjfYa175ecvMsb|!w^5CC7}>}jFAS}v|N z4u7KSqp{N0G*GWv4%x8>*>GI4|G_O3R{#t11%1*kWJ85N-S>&zQRd<24@+q-ldTKP zT3H-d3%Qf0{{ncY(nt9UAGUtGbNcl0gKvEE-+%G+19!F{kSsOA0zmRwF$Hh{)oHt2 zb!Gp>p;9QB0nkoBVvc{|9M0+Ms;-!}O?HTS9FW(^J8xsV3}p!>=#4YgcHFOiWAEDa zm9?$R_HNdTtYM+KUC0sH=o*;_|D#WY2)ZbJ=;>_f4gGb{nQ^pB&qpX7fQF^8ym-M` zvJrp@X9*M?3`Z!Y2jeA+Zh{4|esrx|7)KBdia-TjLQF|ToP@@CzI~KLM@-S~P)N`M zJc<_x#Se^|yJy1@SL2vUVLC^lzd}*1X_&)M;DolJm`JCt1yVYUll^;t@B4J*co9#c zsw~V3N}?S~fKaSUEdm=95vL2#>k^1X=$GMtvG|w24Z97ZZs?AZ>@>dw?TcOh5$D890_4URQF|K-OQiaHiC3dk9z`NC>F{$uimL- zh{u_%oJplCa=PlVSwmAmZ&t1!AfpeEhKT!WnU_mGnxFsv$;X3C#klj<=1>3Wk5GPN zaPcwc49`wKcWkox8_aXHLfZC4u+RnJ*EVl#)$6R?8}-f=0uVlEDH(wSparoDREF?3 zu=w$ib+QJP=R`2qah%^DR@3~NuCH}RRo^>;s0!J)b%*n8wcC2KeT69$9CJjDTiRUN zz@B0Q8?{Ww@yS9>vJQyl<)UXB0E%$m?)A2=WP^H^Brd4(LZ%?HYb&+&VW0c_{^`bM zD(G5*z&-p$XKSS@7N-3$U^c3uj|ZwO0pi*mV4(}xf_C@s4hDVRZfa_;*=m`#WxFmQ zuw_los|6|wR!jKjTDjtm=O2Y&F!5`O_jlhLw;II7nr~HPH?yHU;X;`Jnu<;Gj)2@1EDO4!aHBy9<}>l{o0im&sw^n8n)LP_R`sE zxwLk8sN{=Ai2AYRA@Fz9P#ISCJ}yD}w1!;Tt}w!tSjY8MEFJDv~z=@6hgI4z6k zQ%0))lPg#?<9V@ZE?RQUrgX}?)? z(YO^67Rvx{*+aBk1&X4B1jpCH#98316mfL-=jOn9A5D%EKd~@pZL?6W+B;jRPk;79 zRnvgRS=zYK>Giq|+cs6hm_U-2EmW*=55l|FP|R{tq@^;j_JfypuOa5nir zGg+!%s%){W0|HlM;fsrZ_K%;a!|ts&zO5-eUp=kwZGZN&N1(<3HzzCO1Wrm$Ha&s?Uv}$!}&`beZl1vIxy}CXca1S1y zudU0^KIvWAsDnKRcrW6)vd8&P0nve z0LhcpMiUw6+8~Xgl&wxGmFj=~8C$FSgQM=|#y6eb3&ZvSx3c;AN`3Di{G)#$r;533 zw%uvox&3;(-y;sV)A?%sJF+}B&2e{dF;qst;dT$I``2oSRVLUjY2&Du&Er&6k4HTz6u?)ZD^5ZMv zr;!9Ca>@u}*n^hi8H(d#teWs85S0MDNGFQ|;pO>33vn(6rON_DON6P0LDXo8fMS>* z>L!jEuXe>%po#m14}Drc6PpSlv~Yk;yHVIc{#-eO5)ep_A4H`%O*d*>Nfaq=)(-A{ z*TZQ6pFVH*hT34Djz@!B?X_O}xeLrmkQr|9c`n1JSRoT+-L^H?wVyxv z^soJmztd}~Vqwo4Kl|DHA2`~%;j&DsD)GE)suoUV@-;wY&-%zjDX6TtMHo>&oU{&ILH?S3p%ONz&%}#;9kC zLW*I<=^`Ycy_~qdve7;5uU9gVhje~Rv)4Jk6Wa483R07IxRuHl6d)yXf|OM>74932 zC&<#tCQBcIMbjdC8YUWDCp@SYlCf^x_=3?L+xmrJZr*;4fA-+RXBSPE;i_wQS>O1< zAO3gW`HjE*^zd;`w2LcMAYYcDgRU5?p{CZ;?32$w?)SQOwNCapLUG8t8|44-KmKWb z?FQ(X(>%-O4s4?n_#RWo%~YmRtFHOX8A5p0wQ#t}0iJ*r@Xnq6M-Tf)=jX#whiBMI zX*DAfXL-eZzFJw|T-huYO65W+U##<~UeJ?3q|StR0DIHjgaPk-@hG!ae9N(wXD{wK zo>$D5>KkH+d=M;LHHy%D8b_;A83xC&AsLK@%7=Ni zhZHbKaMIzXB7?36y35j|D9m2)T;}=v_s$23ubCin_~YaIn&nvLpi*7|onkgu%@wK# zw+wRnJVMRJ$?hALlxd}NoosQ4_>)_=i$DGSpPoGXF=hl{Vh3-2tJ_x*E2M$)IkwHD z8D0jprzmIAX%MRJ`T6s2eDTZYXU}cK=L@y1y&I4!pjS9n9BV*MV35-E=z@XZ*haJQ zyxTj|bReI;X}aC!p`0#yIQ8bOlCC3;5jjsY4RxdpM*38i5#X7~ozoW|^#|>f#~(a= z%5LomYtZ$Ob?x%kb06G6#9dCL#t3-n|&~M^m#^;s8k&H^75puD_q+7l=27;QcP01yC4L_t*55DnN^Eg!QC&}DaWM!fGi z+Z$IqhySeEexch$W;WWXYp<2YeWQ@8Bkf}M&ENXz&woDbG&x_D%ddNGPgi?_m|L%| z10aD8*>To$nf$G*Z$Eo{mdX(aI>By)yKnC*+M3dPG#vF*rT_Z7tKAkk+!(4%8@JM# zDq>rh+N&PUqWo4RbiO=U3J%oKf{%;n4T+QQ8m9%rd7z%_aLerFSF=!wPeo#dI zV?-JJP-Lsdf)dTpF;d~Qd<)AJdM>;c52Jr^h77<$ zbzE#u2;$1-YpGP;^GufG`<DIO4FaUfzEG$w#f8 zQ7P3L?ao;DZ9@ZnCvps879*@^k~%MzGFc{ zfglFUpKa@)6+}~S#H3K3J?Qtzx>jOtb3Afzg6Fpz&#qp-`{1eWx!w2P`CjwnbKOvi z<-Jy~Kdrur2TM@NGF;j*jchu5adv#`tu?!oKW#iwbpQzg405X0gbD=1qNa3oUEw%c z@HN&QLIHtYbIfz16k7bUH7{g~s7W zzEpRRfWcVkn%+#N8@i&5+qTb*RCR4VSc1XOeL1l96?1iM2w?f+u|g&dL}kh{U-{;4 zX+?BrPH-@#+n&>o$QYHS)tK* zn$3u!aa`WG$uQ!Jlhbn5xpu1#q_Evrc5hZfH(D?z^J%$zI)3u#@mbfzd`ee`Waba= z9L4cj;)xVto;Zjp=t>XrAqX;9$%6bbQ}4{6hvemS-nPg#172h&xMzXD736Gi^gJX7 z91)}`IS1I9GD0FUd}M0mNfiDa=%T|m0bkxUw<+31gf0FfL4yfHYNuK*CsDaD^` zwCJ6vwqbx8wx^IS`DwBYRRo!a?NKJbf;*(pHj;$Md-!v7+Gku~KRt?i)1<}@8y51v4J%Yj)ETQCbpb8kz zYIlHds}Q(zzAJK9Ss}Z6^*bz|Jv{bvh0(!&{o;J|^>5tF3oDLQ*;=W}xL?WN(R&{V zJX0^f2LNQ6K&BOP-Y@1bE53O0#~xP%^D6S4Zu_X&I66Cfc;0x?Y@PRpJw@%8D%-`f zI&;D7%uM-G_nNHwwX4=Q&7Yd~<#!QqWP6x%zv>8g$`I3!9 z=cnI>V=6AJsWBBBXc6f*dxd;I35qz3WQe4##%m04IlSMIH5)3E6FY;mRZLE=A`uuVrT;4}%QWd9q3w5Dr0USogPb~gLkcQEsbuLL1 zq&_5KB%FNB@-y!=u|05f@_y7Pn3hC)=#yRNoKq`gYx!(#W%pnF(Pz7R8L(ZAHSO-* z{qv*V#2F?o=5wG^)GSxd*1quNl|pf3SjI>*fD}GI>)&{@KI{D?dfb!jY%G65v71iJzd+_d8x3{*7owgFlpnN(7a@e%2i~b1As34S0lL+xj^(w~; z#X=Qx?Le>Ps0#HZ$FgsySyN4N*{RmgGWlGt`{nzB&N=vKOOW=dcAXw&sK6$ zcWjkP2OM%VZ2&0f5K`hGS) z^kHaO`5%?QeD z6hv^&r*_lQ;|@hcB@Sg0JqV*ic>ZnplU{2R4onnfOG&aw-G>7|pm(%h5&QE+mGkW` zlnruT;bENqQmrgP@ilswlAM^5uJh_ei?wKxD=bK~1*c`Bg4oBfFhJxrav|A7uMOr!*09^vB_)_#u03o8A86{whjwGxp{I3BB7wA7@ zAe7W?`b&r)6*3y>qV67EI8FrVzf`1?2N=hikA}do!-Y#@m_%yR{ukZYOWSjX&Q_E|qJ8#r`EeFs8Kt__Kx4)Qsarz8UFsRaNudRIi z!RfWvYjj!ui~svQRu#|A8{{w}h8!h3;XkhLm>%K)2!ow>V9Wz^T(nv+FVG7Gk*bZ! zQ4-{gTYHLyVBE4*)6zvL&-2V%@1_L~fA+~45z4j~03l=za00;c@e41F29lgR@3g(S z6eA1yRMpI-)5W}eaP_@>S^}P@8^+GTo1gvc9}4MmZS8Fbzc3wpeKWtYQEZ%#(xM2s z-yW$GH*$ni0&}g@uClB!9<_l~ZtZRuMh`049s}^%-LV68kxxO@A;*Qu0hFJ$F`G$M zPCKnEZ{}s+a79+k8Y<8!FvembyRN8EUKX^q@7}pb%=; zfpT|cbz?m2x&Z^9iGESa6)R?}r-y1uJaI&~wOiCJ6M&r_q_Y-BA=KfyD2`u~rwpw% z4Z0$2_X+_L(c@-*7b4|6iP)H-WfTo&etaD%1&L8$n=!cvH;X0`gT}a|h|)xqye5M> zLP>+4$+Y}A(js~bBfa#7zM*PnUIQrF91U>qkUl>{5S`le}@*??Ws6%qIX6Un9nh%sR!fA986q_Ob!RfOxpEC z(0?JvOr_;}pLRBP_*s^%UO!u^?f>d;dn1bIc)MmCRS-Y&jR>?{%|mCna03(HP1IW z9^^DRPH8%D;m!qaW`I1+mGz^ir?pz~^mH^KL-X1FpnH69^{s4vt=D`!(CjH44C;g& zZ|m7UDp$Ae-}`Y!7F?fqe9js?AE~C8E#?cwC(oE_O@SEztG}C)= z_={Yw>UraC`!U1HreUk<2ofSE3NsTz2{uMkf9svU^695Px^?4SfC&>!kDiq&?fce1 zWZlz8{{!|^LLgCUbLYCNcO^m0Rp6#I9yNjg5wAgx1EmEV?T*H*kbxNuSX)z>D)vp+ zR$%5pb_xQ#O%@+PmCEUIsb)vXM<{A>usT052gbG)(j6dpLN9m@pC`Wxx8YOnN$ChN z#)#I1hFV8TMofFeER&e--Y71?=7TXw@-U9ULS!(`Xk2i9#R8U@fG!kGYca#4C!jvH zqK9IozVD-jf+6@z?bh&uff zJe!xHAVNzR;j#c|0a#vwaA;xb3xN=+#r-tgrWr0EoXiU zP|&Azm2{l5ydi36#ac83Dii}|gyP+I(FAHPFOn$hNB12fibtkIv3;ttT!vxOESCd% z15yQ8j%k_NAt& zMKfW?q_f5CgM(hXIkO14U;XwP@Kny>RKuy(a;L{b*O~08LX?l&8uG#<>JNp zBP!?U&YfR*{f)1FeEnF4rMGWqfaC zE!*uHLHxuqnrVX8*L5|KWqpPRSVkOB7ertH01yC4L_t)cg8=01L2qNL)@zPk*Kr); zk&SGc#DqF|u7N#kFldPB+V;j~DkZdrRJ?_abK60sEI&|Hj$zdPxvC6wLxZeC9r7HLNo7X{%vwB2 zN>x^G7;0Y-(z>RD;&jppCm=N0eF4VW&AoJt7zO_g#Z*8LeQJj*o?FTTX&B7dFx|I< zz4_s23Z2x1G8E%*A7pIn1)9YdpNZnQ#0&$^GeeIiTEZYo=7eHl@^kUXja{=d5$6Ll zoS{aq1+(mkR)+$}SfRohbGSXji#mZzrs&75l?%#(Bb*F{m5-vbmj=#Q_UWjS7q!0v zO=~y4FEa=>ZTBeD*ehxThEc^5qPqx=RygvbyB#PQ5%V8U7u@&fu7P8vMj!wA zc}h$%d=4h)K%_d|o~mhQ%`H01I=@m|UF|eZ0Gz(~tsUDX`qFYW(`{+vK><{j!_jzNMPN`g zHOtUfw(cB1`*~OeufO&M-W|2iAF{TJfRZ|frgjWnE7tc@h3&J`CoCsVtWaL7)vB+W zP=UO^+iLl5T)QrdWl+pQT?KL?C8si3$+nc;s~N+z1c3#T2Y*MJw!Tqw4GvVej-_0^ z@og!U(zV{k=9~SonP!bXXl6|dR6E^4UzTOSR9=*LL2w)$Bd+n{V>Yv?SeW&RH=My} z2tY8>?R+-dAFG98)iQ=F>$e)sC$HaK+1slE=pwQa9vNi05OGHb)EK))yYY}E9&QGO z;zq06Vmx&`Xd1XQ95#t3FhWxOzM=^nV|!X((NnBoTSK6U6PGvuO7=>9ztwu8x^ktI zZg#r1){*3*s&qvut0`SDFn|BAyuN)0$~*s4rs|@nHbvn zlm?ZqpI_<4!ADEd|0v$T*rVK`(^RU+xKtR`+7mjD(=dH2F)%!N_#93<|jX{x%V=+5!! zX`|Ir$SOoV2nO_JZHo^Mj16Ykw(F|8GMu2`tY|27Fu%5UEUBNMQ^ zjGP1U3t|`SSiG1KDE|8 z{zM-Qi=}#3^{T7WgLyyySSZSM3n0|F_ybUeve>rtp~%aH zY`Rvd_j+9rgF6+*aMR@ADFmFET`gC7omM_Wws@Shx&;m_c>>Tqk>h2V2bKnEPbn>2 zzg--R$5|0|J2uQofU7bbOI(*~<8p?aewE4Ab)^BeL&MOBrv#7e);K(R0B?w^bO!@Y zL$<;6n9gkF@^v0G<3^8cYn+@DDFQeP^23vsC}t3o&1Lh3scHJCR$Vnm$3k{Ho2&oq z!`|w;Yk+>(B`SfS!_fWN_miT3fnY%qVT!1c6KMA49@m(tqf1)UG7;YqVfZ;BhTqcN zIGU@NUI)T!9|bP80+#Qr$HflCJ|=xrE#LA05+Yi((U3?O4OLR zpfiahj?icjjmua(!@RIjVj?>BJeE`pyb_o-uje3|P&FC@9)uR~zxgd%ifzfLV)5XG z2$zfp9&R})WLafBFQ$MBI9B+c{ z$w4+K05N2cuN2GUaUTP+xQ6FiMadi}O1FJF95qwC)xY3b=`QbYqy$eLwGDk_8YYYR z!FY1=`wXF>dU~BBpmCO|e(7s}4Y-bwS@#h;=$$H>4eCUgi-Q;k;?-+kXoI8j#+zV| z)W$;}**x#xzu&FZEugJ;?%ut3?@>xh`?dyVv8^lL>~)`g;S1}>FS??feg5Qlb+Z_F z6bp(2Sh%xU@ho6_N~3*vbn;l&22dNOHXBDx)Ak3dUdw_W8g&(g`0)k|c9?8oC6~?Q^Tl+!aAjvVo!cVL%@Of401&1O z8-Ui9V_UZF0Au!1dt`t@6|9D%amOL&BoCY6cFM?P#1d} zTuBxmenPcboCu-_IlH|7CEteGh(KE8Q=g819^tG`=5;m8WMsmKDMbyHL}a-6iKQ{2 zIy7*NpOZ7a3(c~~N$p^-lQ_0eUd!dnlAPu^emEKyD%uPM!vj>q(oO$PG>7vZOw&R5 zr|8N^)#*CwtLAU~`qw}G;E8Q%n&q#QiKOEmw&Rh-6o`l|l7r^> zyj0oy!k36vwpel3H&ex`^X$2i63L<))9AQXtJgne5O6F7BC)_whXjTLa0OZJ1@$yh zVDc-~wOqFF@YxebKjoYY1$3t4p=u#jgEWy#&Y6M;!0u&&0T1Bj?DYBFcfLLzb#z@T zRc)ZEmBQ-o_17QXd*He@pt3f)NR{vY{G*e*Zx{L(oj1O)s~Ohh$cV{78Iv|G6xWqb zdoXCXHGJ(>;mPA>AtM)3kSFK*TN@546v}vgGxy-(MYGqxvc1#j4$6g6v(D)@C9w5OQ33<#ko*-+ZG0_R*j#Xod>Oq>B7I@7y_VoM?u!v6VhL z?B9H|Twlv}F2-ZSt7Q2?X}{BNBQ{lAxe91^<#x8blI^wqStrEhV!6{k01SNz+`kV?JrZS6&{yRs+aDxt-?%zNts_LM>islVdgKb{SS;k@? z(0`|+n=X4o-bNCop2WSC(uttx(uC-%_~ldDugl&7#a!)WldnjxrF(o#1sX&ai#FEYeq5Uo7X_HEj_4c;DG zw!FJu8x4B!kz<)Q{BuAVhgpFSw%x-AlY@G2rMM!9DJ=FBT?bh_))mmd9bC=cy1jbz z_!Qt|Z)44IQ~(y>bFOWH9u^9Epc#-)n2(GoHPv6v^h zzW2SK{P@pVF>PBes6Vl1I6jm1dqCqDu_TIFu=@;<6!^^Q+MRV zM(B0=tw5cv+iqz^0?p^f%E2H1$@@G5&22t-@w8ms@jW-4&Vdo}`3rA*-R^g%&;?nO zGgZs+PR?bD7Ud=IZ#B77bM#;MaE)P_Q~V!o3DSVkSpB3 ze^y`PW8*q%W1~k$_%||iV?CUnTw;p4`3ax$JRjdXbSWZE&kPB=Yba7?KWR{$=a!0f zj(@X$j-$y%vJl1}o1R85f06W$Kcu%R&QeZha>37dya}?ni~{pk@~!g#|R&ang*j8j>JZT2ac$B<{q?B{PJgU zFYIk$_w@osc=3FQeFk(~h-~v_uv7%8hncC(Ps;Y0`RU=)D$eIte*PCueZ|3Zw>4oW z4wRx{=23D?=F-`RztI2a$Kwj$w=t8i-)uek^GX?HE>N+_k`2WA*Xx_C zYw)S+AOF!$4zA@P*bo2tBZ)(TNEErGqS9pnteD&gax97**@7}D`D_If3QT3We63Ug z8>R1#?Vxf@msL!E)ORZ@X=oV;eeW-hTQ80kn=7SdAX&rS1rJnx&`RYqw%$dU6Emx# zlpl?UqFls$W_{zvv*&6yr-W0Ja0_YB)}h~Oc+wpz?+{Q8@}_0b3a_@eQs+wU@*tD?Qz000mGNklPU0 zI2|H0?7?#ZIip0A!XiY8g;3(52nb>NdGK&H;hP7h@obh2`a_?dr_TOHB;+h_h{`}r z2xI!IWjJy9HDh4j%oO6k%2(mHkzdh<@aNkza3Y*POAaLug^0zEDgEja#Es8*&>R?P z2n+*Y`t8yU^;B*!owH~g#J`H+)}pryAq^q)ilDVPhF1pE#nCRT%|zL8bS(La*(mb; zmoPrMEn`U}+CIWB=~R-j#U3tDw$84ok$;|n@Iz{PIDhERmQ4qzki*|U`KKpWZhQkw zK#nS6$4uE_j7x)8!u|p6VGv&&9 zCch~QJYtS9Ii#K(KoOjEr)Z;`oIZMbLj0uxq`6>6v(r-k@aTA``Kk^aPVg~rTE_bN zwyG(XF?#XrBc3tN&!6T}MXhq2RYwKjI@P?ceGPtLFRCu{wuV|c8N3ElO)gM*dRGsW`7 z>u;>)$`Y5E%mI9~Ua2@vu0L!8@LPtybE|m!_EtgOZ1mgGgd!79G=?JP)=Q<0T)vvg zlypN)Ns`aB!&X2P9Ae^4o8apY|M+zON&#+w{NK1T zTJ!uNBC&AQrYe_A7*lOFdq|dcr2%AMyXKG@V04=ZCeG-qysC&To&wv zGT-cL)p8Crx?qG91U^%6&|K>n8N!%Sd~%5Ze}&&OS`H!*M`5mllf8WHJe zV;~p)Wf;Un4zGxTUpU?)BQc5rm_oQPhWSWIUNk~ephyQva7I7&`Sjaxy!-xwqYcr5 zS@_~OqfbK2^JCN8@S076!*t`bgfK#k!@r@PY|a`JG92N^k|;c@q6nrCAViVE;3$Tn zWk48xxD*IuG0@<&=wakO25$&m0;Q1;E{zJs${4&|p8v?J*q4{|2`WtF*P@V^ZoCBA z#dV=n|Dcne4iaia(bv2;BnnRx!TJ0vmWKccf$)6%<<|sJwzSD^Jcbw2 z#b7%i{F9j0{8vcLcDD8(KN{3m0@KtS1(P$9pl5&Z zXZ@=?8*mHo;8S!5b}(qXs&KLk}UUBM_}DzA#ahL^zaG4vv)&N zn=H$DrpEE2H^Gj{)_!20j4X-Hc);;2)DQ0sfkbZY+=LA2TEEwR+&KN%bN!&q*+LPr zXKU8M^>*pMoevTpcV3%QeDJG2cARP zTv~)NClL`-2pXbSST2glhPe%ajpT@lo=+Pq9atA)f zr_-Zh%nC2af#5C`tDQFg{`)U>cI9AUTbORxF5&aH-`Z>(0}J7Z!xvD1@(jm#AH09^ z`kjN1e)_)4r1|VxvvHUffW)YtqfOjUlid`c4b0|Bxk6zyIQ3oa&O2#MHzjGhpCizb z4%%f?>5=uJ4CnbA;Ly>@F~>@t&kV*Rfw2k%zUyFeW5_8N9Al68%m&XPNv@rqy(s2O z9)TmsDsyH3TBF&JMe(TFf9s7q#_$X=;_=h_t&^V{hN*TRP7Vno1Dli5>1jaGgl?DwVNkC6+vNDr0m<5icU5`nZ zurC>!Zh(ficbX~kr5iWieDdPSul)Lde17<2-6XHv2fQDN?>6WP0^)tDLHirlE8jq0RdI&AP>t(XM6@v z{fuGWQn2$EY+jsaGYl2`83o1gt8gMUhmXsE5G{s;dD@H6EAk)#iulrpXbJZGQb2e~ zNi~`r>!`J{06%Nt2IC(8hY0=av#8ls>HYC~P za3t&Dr+s3M1MEv>GU>FbHhr+lWh%h3SdKu8X(=oROew>1qNepMqu*$ze*UL_p>(YA zxX1EhDxGI0T~Lxz8*94{9t^5=2PGFv{KC9|E%HJ#(Af& z>8fS>UwHeywS)IqU!R;iLBjB2UX-(I^}?0C?b^0CR!8mg)y9QcUq!(l|G}BTOC@sD zt%t}z7otvq?X#NAcE`FTiLxk_YdeBikmM|oPGG(lPk+P^W1yUon6tAp({@yH&JpjyXi0 zDzZTGcE0}I|Jm~gf7Wh1EY%dx5077%c0!H|4y^EkwUp2_lrGK>FkWpHcUQ8#-Wi{} zQeQbZdG@1Bc2!rp5XN;heROW)jIMNEJp8lkxBgn|@bun8V|9&8luqs`McEX=(#a7| z<&u;ejeDj(?zCUDo6p*<$L;1rLu(_XS6BI;{rKL&_WpnVpZy>I=HLEqy6CKKrB^o7 zrOLO*!%l`%H)@sDa#dtpk+B8V<5>@y1?ahHj7+i~$tNqDc$s7xGcu!|G@HOuSw>>4 zTDMnFm6de1o9wnUYR~Raw4Y;yDBqWfStk7>G*qL=0E+#d541^OhJs|YNTh^cO;Ig; zvdEWxJS3W0F{6c!>Ip+|qVkL|UI?FIu4qw)(GoI8r%MZ>Me_`wo}3-M@%+onNoCN68@rXk-sz$qD9~l1411A>=H0T39NecZCF(6Og zzhcwUDh@;?MNR8w|BX&v>8Hy8H;BYvz9@#04)c$w$PuFEVv$VGdP%S-CNQA`3Yw;) z>h|eV1%iMvjB!RB0{a{&#tI_YGC@$#0p*+8$fSh9;EWSfEXx9II(+((Eb_qTVE$m} z9oyCcPT1f?R)mU$O1mli>}Q92`!aQK45p`VilOgcshvOTnx-kr@^s82B#A<{w7Xdr zU%Pg-Rw;h;(N9iK9}Grg(8M{eYrEJ(o~d?Jt+RCn4aWWE=}M_sD3?lNYJewZ!fvBq z%2i$*-iNQonlVz8@p!DLhGVLVsyR4St>$|}ATFw^^vDK2&wTjw+1J1JbujF?3{N%! zFrdU!b6Mf5-`slop{l7s;Cy(_VGq=Us?rBFWGYk27gsa6HFbE3IX;yu*_P!IZKp@r zEhoSD^uMTXf7`K4Id^Sk{q|=c{7_fVEigJ}f>pTF&KD5Da8ZUs)~YhW)_Y88;m)6# zJ5{mOI=ko&oqe0LpyIXJG`|3&5fMk@oJ*pZbfW0{^gZ=zVewHk{PaE+Y~jp46jW%z6`PAApK`!PeT&gwa_6)k zBXbDF>H#G(Fei%`$0pV>vWVzh5hqHo2!tr!KhQETTLO4XfeJ4I!WdR90YZe(OP-^6 z(c+&ZlSVU8L5tS!ydn_B`XPQvaB|TTA{6hJNkBz0T_}}v`a)ElpjdoiB02IZKEn{dW}hpM)BrP6#cb{(A) zQlvzaOaj()Mq2CQtkD^Y+2YRT9&j^3;6bFqOp)iAYPERp^C!<9H#q|rYx{WOkNerv zeti|EWkDP0j;ZwqpzY-d>vcTS!j9$k6!*nhBb$!VR$)x9*M6tWT# zAHn>3qW2?p%t)e?LDN~+6gfQN{v5BYaS*LP!)eF~1o-%e4|%z0IgUfz)b)5|8=wWX z98iQpO+p?yR)p?hy2zUBb%9SxDRg+z()EsyMEF@qGpcF%9?ZPP-}tp(KPS#z@vNI- zs#o}tj*lb5f70`rm?%I9FB@FpMXjb@AVWf++~w9}000mGNklfk3JSbr(n$rw zkzdil8uW8Y@+`hbk&RV8RdyW1zfc-PY2pIu6#Lx&C6SAcaHeF6oFPS@j7VLtqEwsz z^cPwFl34CX?3(mM|1v2&1wyoV9&`y1#!)H;cnO%nQHi_^2p508Fw7;XB(9}^7ke9n zy+j6ZVraeU6{em*FIv^UOv#QBrPoGt6hw)!GzCBU2^}9ou}RiE(NIk~>qB1fcY=Z- z*t{SEASpD{*u7eM{m$muk;V(6@97{HLC*=2$52`rIXpIzSOF3#@aWHe{HRp(cMgiT zURymr?9bBjG^K4C8bBIZmPur*pUV`oh2abZ=QW3BzzkTpwwoO`AVa!O)M>n70{obO zd|&9L8ob)#{f9osWxqLG(ka_qX5!F)8L8KD&ULv??2e6 z)=rN&HL;$v}0mXL*ywLU84> z#Y}!(Q@en6px<_}EC>?D5h;l$ThK0=LT!cYhJ5g`x4OYivg#ikt}W(MfB*T2^99$PR+@Ci^!oL9-0Oe|X3sMYKIjlc2k{ZEeoUm-T&(>`~M zrj!DsB?3AeP&l$UaN2p8s0ZEI%~H7>YWNc3A})3)k1!NPoXH7jj^r$p0%hJP;s!iAka?82JQ)ey6o^ue(*bZ?7m6`nn!~U^#1x{`tNAvGfC~mQJ3Qa~hi%sxY3j9`wQDzO zdsj<@;1J3oRiRMX4K z+!uaj^U2YJ-h~?YxUr0Zn99m>8t$Jy9T=lFIhD}y1W_)O%j!sRefhITpQl7wQA{8) zkb_)C_H6CRv(IgxZ+3dGz5b0}`xKr_5?9J(6cc%RL2%M3R7#82mELp1vOqeD0uQ+P z(O>+NMqf{*GPb4GDkX+X@q*NA9g|)Dz$bl2V9ivzK+dqj>29x~n-)ww-oE?I?r>bG zL;dT4{V$jt1gFK){ZkNFK*5Ov8Z!9>+hI;laTY$icrK9Pk;LKTi@HQtRP=aE5v;PvA;r50Mn08 zUwrp}^1olN7M>qIK)zi_5uJH^Y(NQr^LKAwbecDAZQQz5fBf*`>%X>ZPY5wWaj6j% z{U|Bi6M`Z#DCkd?X`zG@HD}B-^Ms%Wt?X+w$_wR zE)+{B0n)Tci2)m3T|p#N@o}Pzk&xl@#3Y`69`4sgd_Vb|21S2SJahEIi&nUWV=_5_!}zIff)Na+CvHI)kg%W&1r(&GyE8{HQ$#c@ zQ!&)BuI=sT&d%I!>jm&61R7Eh+zekVu3f#wbO(bFK26Ks+AUnavGV+BcXARdS@EHa zTA*;0tKNU#>PLxKk~ZwDBX;=f{d; zXvW_5YL+wmDuJ1|?|v;)++VBL-~IAmDHd1K*-CZg%GTyh84oke*wc-mdjx0Dr! zW2KnkktgbdjxW4zT2(=4BEtW02!w&0oh;cPr!|rDnPv_-E!SCHD>xd;6*fH^@Q)t> zBXgKyA>$AW9hO9Kt-AK?#d#%n{nnkY_j*}Qe%E%KyYGIlRM{4!yqMd~b zBc5?;w%Rz5i_WinW39Hz6*9MSX)w=jUz~otvVN;~_7lz6%@#(GNzF93_w$-TeB-_S zg}0tPJoU*jzwnO%mFjz6`0juEkN!_%qfcDeiK$=v{+*xy{E?g~{l@RyX!UxK0_jw` zzP6PyZ5!kH^eZ``oQcsHiJLvA2L&|>s6m3}9Sr06a0q5;iJ2mb$sB}|128hyD5%2= zd;p+GFcd|#*;vL2M2v)qeHeyG%%^em^SPA6%Y<1}l4Bf~naeoba@vPuRS;86(UW_$ zK(UN2zryJV&0-fdVlu-d4*-PUM+;^I3lL(_&sPP)S47q%5Td2In%<)5wdliGt`=l0 zncGG9M*|_v>d>M*&==h|md&SPT_MtGXb{D5D?;B9Xk|fp&VrO7rQOal1=Z)h` zCU06sF`v)N`A+kL^47O*-h6$~K9rWtUDMPCR{uU?so_y*^SXGtIXxIYM+3pVzBYB=a7;hAd z!(f|cFoS7yF0S3)yLw~w^hJ;1xV@blzxed0xqO*(w0FO;C6zg7$Nd|tg&H#kg)_zc zXfOyKF!K{3@Jv~X6N*8E5+qt?iHbFtK z@X_p(+Kd?a7koY*rLnJn;j617jTp>&!wzWLnw|4t04Mi&f&Q@9aKOk%PHkoJ*S@p2 zxsy{3EtHoirYM&2C5G@7=oBYzb6sstGKnYz}hbn*y6xJ!F@%r8! z2rz1Y%=&DpSeFF$w0V&!uXQ@zdVLivnv%%sYUlMgfBXFGzGo=|Wz=prI*rdAbEu4( zqCCWtBmy0;@1yXqAdqD~cw(YM6G05tK_SPzb@%Om@z4HIN|t0XzkTJatLt4PnEfMG z7RB@CX&+RU%3wTfE8`wn;A(4RnJqaYo~&gBEL>UJ{jEGr7w}hTxUo7OYs%YiU-b>q_brdj ztrTmw-^&hEE9g{~?J$)8_psYD)VUDRiyj(t)R_$voDdl(gbG9n2WEcmN*HX~yZng# zX)Zt~!)KNWgf16Hv@{4|BFukOR`|)>(xYIObBuAgp+1s4m7hq>gx?`Vr$tNPNDaiQ zD0(GfVlH#y6|vxo%=N<*!5`I?V^xPJVHjoxUxR@Y{&FnvB*qlf@M zf@p&*!TsI0_MSf(u5I0Jc7Ftz2aNFK*~!k{JF=9{r1{Zklu8S}=dhrcOMzh$E8|wD zc_01``lpsJ4+f(bFFpZo*S*kF+-9@CTH<<86i&?WVww|VmJ=CsQyWUA@M01;fT3;xWsmGS$~^zXz~_gwlA};(5XHPQ`3iA2izC0hZFh|8&Dp zG?nE9Q7rCW`{v2BpF-V$g4D3>av{6D&wqaZX-aa}HrEVeJfVPr>$Q3B^@&S1QnBS+ z;o^~J4A|pyzEX2KgRVJH1jd65=$huTJqTam>Ja$(*;%kwg>012m1d`7*_OnE>XNJo z^`|>$ysfqMo!y&-e9161b9}bCdT{XiEq&Y=HdWJ7p{HQqIyyfwT}~9zo@+3f?d_t^ zVart0!$H1K)`PhV#FkHGPY!!$-LC8CiaspVgpgMS+wy!r?A3@a9ggp9pwAHuyEKk< zd$dHFCzD{PGau+GrAAPU8u~Gog_giTkO68LDs3G^RDn=XMR@K&U>-8s?J*^$=En$A zg~jyEELUMN;oAi?I#vW6H6<>*qJlb7x6A3;(#X&f85pIB{*nc#i?1Z^&N4~2FS&_r zpTHD8p#&zO%OMjb;0?VD2p0xU;MqL>=#$0YBLb)}000mGNkl^WKj zgwe+HFYN*Jhko=qj&%hZEU5sP%0^_$97~Cs!1`gv`~~{bP#rq)UN%8Nmz;8q=>lHiP*JpwqB)I`d5Y9PmiSva;N|m@EL{FeuVQL4?P}isMtRZGQSk&(O%pNoZx` z4UT)Q-_52otyyjOp>yisPv9FGF5PyjRjXLmMq}c}8lHdiSASI$FVcCtwwihIq)85b zB5uqS(EbGt0w4lLGB8qhd*_Pov5b_-R`;)dc{m&t(xCb4TQDuaVEg1D9n5fqH4*v@ z%0{0Pa{!Q#%3HU$v6ufRfAG&+y>r$l4pWGu8c@tOI-nT^%Ur8@4hGaW-`h|-LpddU z{rmr6skRH;SmI4pF+nvf^H6qQADssbQyd!z;jeFQQA zrVx-r4mkk|1|~hyH+&`~r=f4ilC-|M_5NoM()nKNG4`FYZm6KgCdUn$V?oTe2Y`F) z+Tif;^qhEB-~>-^+L;CCkk$F<3m@V+ zx+6bo)`}`uF&!V8P74;UtfAo+Q(`a%is3|jE_{Nwv7Do*u%+M5ZcsGcmrKQ00ZW{i z;?PVnsGC>@UV0^T#Z%SjZ^z1jE`_UPU=&4*MNwUbnsoSBVUnFVnTpx5auA9iz~s}fqLhF722o4$Xqt$ZEDc4`x{0Mlqa8Izp1%#Qsq-@z z?1JuOfv6W|3`e;j#yH6ZnW@K4OpTu@iY{Ea9^~Zy&-)BZ_5uC}mUBF$jQy zTlIoB*~rN91u0WWr_-g1V;CcU;&F6Vx@q{?>AvKrs#~V51v||rKL@5`n*e>fw!2?x zosWXEDL`Dysr&?t#a8R74!nlNmHL~4RB#=eVTIS;`pU)Q_f@55TBbvm`}+*>OvaMh za-B&S7QW>L85rM(@BjF(|K7jVJU{20K9D>BLe?{zW1?xqzWeX|FaGYs2PeJmMXo&F zslP6Wnenh|>Pn`tnJ#P=B}40(A}eKv;{n-)$Y9gIAkNr0)}5}h3+aVF!Tw3N z9H%!|uQ_bLQYf+}aaPwH3~UE+EVs6@BJpK`A44Rj<)l*?tB*4&`S{{ow;cF9P^C`9 zGs?@r4h<-#8=T`B%$z*0arzK5Laws);QfE{mGACqx^8r_158s_EyqKi^~USJ)*6ob z-6Kd*Q@Xa^2N?Doop-yeAf8=hSJ$8jjOAFB^0#$j5-rN!pw~qCIve(mfQ`+Z#znkr z(?cFp7j3Z)``-IM8aiW{HS(o=9-b8H^PW#Li3C{0I($SIN)4;H?hZvQh%>3`qa|{g zLR^IA%#}tgOiM^QDteZHDXb049>$yqfIAkarkp>e6OrD$R}w?KcnYYv1M$FK@T;RKORQ(m8 zAgCDwE;w7(yja#S)R{_nMoGi-<*7W(PxFbk+B`QGXN*9O?qfK9;%$xP$GTZ8+hNaP z6nD0T!w2D>Lm5)C;LXK_QMxjs<<@cW5KglswL+ic%#qa*XfB&E5d8<&|`st5<-ag0Hfazb@ zGPC=$zc}39PvM!Sbk?%u<_CYI9X_`YpV^1cEyq~zb<(|dy4#xkZKrv3)zVf>ZB^}w z^&%nP{eE+->#fe|z0ZaRSMvzbqCY1;UY?}FCo3vwK{P1U8lO!rKHiB`|CG(k+S)YmX>Q;i;u;V|3eZ-C8F*bauV50=7w zP8_RNP=(6ySeCQnaqo?rcP^S2pFQ~)xtWZVHcc1sOy+z|?aJv|F~6rdOn0mjC8}*s z<_;E790H@|L0^ii<(lgBS>O4>ude^$f2$in7ZJZ&D}M5(=12+;m57-AYp$z~D)#!Mf>+>RDHtTzK^XySNlS6DR=pmLb7$(_Z%8S11u$}&} zHExJf>g&I{a?$BP7yzN~eDAf@Qt2Q4*MHFKp858lZdKEudG=iU^S}82y!rYaiFMD< zpY3m4FO_PRr9fL4>iO2z!H@ps@z=hUBV?VKj5OaE0c9HQVs9tF+{@B-pO-UgOe+LtChl)`y0#&JPJ z1Kup%xC97EFq&-;LQ$7*esrxPJ^4eF&MC|}^&}W>cp@SF=#D9j=FY}^Oxf)HsZ|0~ zs;M~BnpIF(781d1n9pH}E@SMTZoxn}P{mnr`Tk{KN#}evEcJMqA55f-~ z{Fl*45kkpsLC-9fJ&A>n#TI#(kn;;>YH0B?nV04&F22!xvJ|_=u>pXoAEDew)Ep{& zOT&!6NQHu^XJKGJ0ZcTEEo<>aE7Ga>bOtC2I3K$7Pd~axB0#~((iku1_aRoXL8(K7 zUl1_lg0b?V=nC>M^+1eHRwR0l-Y2d;d7gM>1O8F0>>S(@`h!LovXoB!;*Xy>6L^N$ zid$dJlr~9?asP5+#q_BOpg&unIGqPfcxs@+B`Yc?jBtL=oN;c9G?(Rx%2F1kM!UDM z{f2965|6Xx>x1)0=NE^XW)})|Ls5^Lds!~Ug2EFlf*dFLu0@oIkOIr4(o#B| zD#(0yWTlJitn>?+my5ad5B~Ynv1+QSc6Gl#P~FX~>)1Ed?tNfRU?5~U3Gmf)B-6p1 zD9h>0xOcRD;MFR%qsH;^6Z7r&e$V!Pp^Q(%N(25p>xu|yt~ZbinM`Li8W{={el@pB zl%o9}&_Q6Tq*h(;i(gsk^vPL+0fR*C8hrcNvxk<81J_eF*(3_6$O#NL5n7p%+a*A}sJC zg!bta>4((04Sq6LF#!^*f#4UF7K)W3mS>cJu|!ViF+|@k#lNMG{bgb16_vySI{f^E z`UFZ{4tooLGnN1iX3M1c95KU07UNKxnlZ+qU2s0y!y?e8 z!LW5Es6U-wrv#ySrU7MP$oUT>NTINjFCpDfgB*jH9&5(nObMKa5#=K<%ehqu`Pscu zxuS-37-V}!Os6$EIg*gLS>Yz9EfKh#K{)73SGVdZabFZtm6h9_?hBsbM{3Wf}fvg3CNt%F2*FBiA51roJKy z`zo(!v1h@4lIo4*xIHw825U^ zK4f%vr-=L~BXTm-l$6XW7U0}3s_C`Tq+hE{Mbjkp=b4A^A-$q~mssY$_g%(b-*P^A{D zmSIkfxWM_|e)sBw`wa+^%ZRG!=c?h5!MRNS;xV6+K<_QVL&s8-!Lj3uqjApw>#b#o zsglD;=}aCuhN6rO!>~a|z{wEzr=PTT_N1V(9)I%Cwfef&QO7NHOpcSZY_Rs)L{UxF zHIx4ai9)2QEWkVl^XjnqvE$f^Htuzv4Z&P&4AsuPT9#kiyt%!3MOD{Nk5Q>I4u@pW zZD_u-aERdripu!7_apl*=0B++kEkEIZr)d0$eQgsj+}(52iOkcbi8zcRiyo#;vnakr^lriG)0hmLKAfd>DG)Bi zo*3SsCG((YA!ET7guEp15;(+^2!3@Sj6aFJis2%4GY_Af!q8nMF`q)qFP|DGIQB0@ zBYGrU+OHxB2O;S}8^C3#4xON&7wTI=+>PQN!Z@;J5XVh}bj{Bpb6GxThZ=INb8T`K z;Iv4k>aOJ<&GL)`e){ZwTjV*032NWYl&`|uw0ggb000mGNklj5RU9A(2 zdH4_@FsuhrIu8z$LKGTG4#+DbGz5uThgfDmw&O(Fdh77_rVA%9W|PO8KGpvlkxz^ z)eX(EHR4Xs_8lJ++aJs%h-uZ)bc^9cQ7)7!dN5N7z8$D)G5_VE*6$p@pU$k-Hl?r= z9DWEoWD|gGJ{LoRZrQ`J0{HqL%%AutO-$smNHLJU#)nZq6>WagiQl7T|R zI9H=WPKO4fFftt7k$ljyZ~iH!auvxwT_}{mzwrKYu|*e+`YH|w%LM7mp2uWVBmgyQ z@k1cQ6p*0U6SN#}qMx88SOBv?OusmPm3+7;@Ip95Xo)5^_Uc~?5GI~uDxn2+Pb&)O z=ga$me<=|RU(H6|0?TDgr;*GFLX-#5@L0ha3c3^jhtt{!(@HFmK~YN^c@?N45kkpv zLZjg9Za#kw%oU)E>otwwIKXMnSt*^gI2n{SC$Dfqs$8mL_HbUi z(+&Icrp42hG9;56k>vz#dyQ3z+wr>$PIh$1I3uWX~)v-^~vvk2k=%N%6TWimd)5sz_>>Dgec(!jK4 z8b%?Pcf145e6YQplMN%CE!&o<>bl4BVD(cSt|W77e6Dk_5E|qP$SM$~z;T;|`BG7~9Ch<`L3qR7Cfi-nWYFA9p`&-oZnFhv{%h}eVpmBd0s2|$z(q`#!@ z^zx7-vMCTQLbaCwVLZf=4-)|vfZP%|MCjG5l1U&;1X%h6#}RSya|$LGT>hoizo4vZ!@TdPTZGZY~S#sP7V(xdpZ{PRaGb^*QDr*M{1V8{>nvG_&DNgrv zo1~V>MrLECX@1p*`9t(YCL1#?CbKqercsOC#v!Lc5+nd(D-;T-J-3&c@8#Ryz3=YZ z3B@^a!oxk{+?xqfI!L@a_nbHp9v&Y43-|DdXq{{>S2m`~TGjUT<3dhNP0g0(uC!W> zZtQb=-fs7_d$Uw5Yh9_0yynG4y`_rNS56KeeeuZ`mo8n=^KPT$WCraKZTF-2AY6be zTichnwyKpfBy*)IUjfX=d$MTXUGJ#h>*~aP?erY>wL$uHPb2ur;^zFx?z1RY>I@=1 zHK@%T4Xm|RbGoG7et+|#86(!&`Mu+lsfGEPIlot5pZxUr%ZI(oSEdp*7em*T>q}pL z{_N;<|M}r@v0Ry-U(2h`lcVFrpP5Xj0d8$9RVs5E>sKq)d!tqXyMscmuy^>hJ51bj-ZXV?sxr0kdtZM3^UFKeOLOhmcudbH!Ha{@?9^1RcabYpnyqH9-#I!vil-_2 zLrlj)@#>J@`|h>Fvy)futncmCIZj>vf>D@1$Gl63IIGI^Y z2Bmg5n4i^Cr}y5CPs}P0^mLO%1$c>ze;{Q=jo0#-Fb*c#6Tlm4(JU3nR|?W4 zx8igAL_uI>nkg(VB_RRd9`o#@BpLqM# z+JFCl`;R-@cUD?oZf}2kfB)C%26+8Wv)zm%Z!3kflZP8iix=(YV5pl$nFDjD;`JG| zMl|epYUSzGnVH#PrP^vY>uv4ejdz$!Vr1fwy_u=mM-LWHS0CSed+z4e-9P((f7~Aq zrpmGT-Foz&7B;@|{U7|_*Dl={boKmZr&OvI%hj73<-hsM&hPxwDa@4@=l=Hh|8S?> z)x@9~AtgSBc-A>tU^3i2-PN;@WFS(`<1`=v(I!9rBeQPzkBQO^i(%hqtnKC zLf0Hrc@{;}g?vRjNHu}y%?oYa=JH8n=8M$m-~E%?@xh9)zP!D= zdz>$nbdH4r#=Asl=3p|}oR24_m#cG#T^4&HHVYh$`0$rpXK0mx=z}DLtV>cKbZNK- zqgqe`jyz<~VHTF5h$dD1tAt19Ig*Qr>j3}{N7L^N+0^UphnR9l29YKSFo_iP!%b}_ zX*c(*WTw-Q>~AVpRy9M}Sxx0W39vw>jfj`2ud?g+%JI0_lrUK6U-Q#2gm>$zt|D0V7O`YRQvZEW1yJD90f4@@V#^ZLf~$LDDjd%uaLm11RfeRaclN6GAC z?Gh_`v^$l++0de%PHWoA@ z50im{MzMacJ-4{My7J1|(P!F?r|pbn$Cdb6U0hmQSxYLGD2YM|ic_Y(`;ULBeU|ZR z`(eCG&LEEH81{QTU0i?v;isSdxP7s|u(-5w>DJ0l_qE$=j~<+yo*rupa%FX+kQ>$- zwPJO#*K3ak-RDoVHrIC6@kmu>SBrx|7m{hpR<~C>=^5S*`u+Kpo2RGGG#Apfe;WQ5 zwK3iAcH>2g@g51ahW3;m9`7}~@$g62PUBD%`$3^nY_%?qPEYbnYuZ-Iee|ot)v0_u zC6^x*AezeezWSa2#gor}XoM|3x4z%)4|94{aOqk_Prm8tJ#%m%bs6L9KHt->(X#d@ z*P2OiO(HPb6Ti5bzj=G(+O3u8Wo&jjMoE42tL5oZM`xtd@X zt}ky~GyfJht}Sd_)qfY8-9fXbr!v-yCflk<`aE^ax_5G-(G`_pCgQlF?JKU;ohHXgs?*npuK28E zkZnR_UW$M)EXD^g{@i;-WCc$Iaao^azVeXId*Vag7$9`a9rt#^=e+qPc8b=`oTHYM z`^j+9q#(b1`~$WxKFd{wB2ME$S}9?+PaE08S8YWwDA8THoRBdKIS9TN8quCn&KT|p z25XfP&xfPI```GTN1uM8JM!A(V7I0} zY;=Zie(NfhpI^RIx^Z(=E8$M}0?}J07}vTOJNM!h6l;siy+(H!AE90zMmW%SgI+PO zXRb#1sB!xIQ?2?d@sYE!Rbj9+@omOar}1_+2*c?jp=8W;J*{??Z-M#&He|x92P~5&$+1Q#r zs~vy&!F~iK?N%+Q*4pak{^6;fXdFelZt?!w?M`!0|8jfl&gC~&8_jdWI-T48eOO;v zsW;+-8{=8U{M6js^040+B^+K|05xpHYcJzn#^b=sg-TU__3ZdiTRvtiqNysE^+-X_ zsI~h2NOS1;q`bC1Iz8wnA&JH`;m4cSFXSM zTXXZLBp!{^cfa?&k8izV*22d#dFOjWZA0s!K&{y_!izBg4{zLF><#+uZpXCO_U2uv zZ>`K0q5VZa9(yDQYrs(B@b;A{1N^oN0*$!1n2~^*`=_7e_rLh!X#dm2#f?t;LJxl8 z0MmG|qTzX1fZi*&zZn%*dYxLg+rDzWOkXGR3G#Aro7~n35HZx+sgSdAs&A=C2t=>j z+H8?4&!A^H4tQJPus%yY+CxMi9Bc(qYGeB8VolN4y&mtv|a>t6L3zT-Gt9E12W?) zbD)7^nD3!r@D&3h|3mSWaa>bia#|BKqSgF5C*t;TU;@Fm-QVHt<*hhO}pki%|o zYij09kMtWy?e~7?T4klw?Z=+di^l1};g_9m-4sY$j8ciTy7BZuFB-P;rD~xxr_o{% z8%KlLsY)SlDjXXsF-Maf#d66aJr$*l>U266&6ajHUVi1PH{YzDU!48uuRqil<>tzg zR&hJqR}1kv#Q5rJxKjCIWh&A2y-ssK*?=uR!9$laH@jFn+h3Tjw7bKrccXrMz#g`{ zU5$d*)>ro*>_Tb2P?~A9+E1Q*8dFrLYP60wc7hb+T zZI*bNN6$XKcyRywdQ|c8lk0Www+122N1BL;RJ&lSVsWEWI4*d-b`91`n-A{01fh`czCb13E!g`#FH zg`uM63YJ$vzT!DM$~h0mT>&K+l;#Qzv&ygtDLeCD7^C97PrNkaGlVht>OJHj2bq}n zA|RafWc(}OaLFLhk;grLkiipx7u)9O;Rj07Q0C@4Jj0yjWFf7+b&5Ci%Z5$pS zmWvt(jpY&39gV<@ANtxm*=u)u-IKHPgX6>6MWfwq7t56=&vzG>9nKdFr%f4#h4tHS{ZIO*zv%Ub?SV#vT(Vh!HlKRO&wg_2?WNVJ z>)MprURhX~DK5<~Kw_y}G#mQD#A7@f4rb;yPLB5~Q#1FUd~tR28&h*vbGh=|(ktEG zMXS?k4f~~Xu2zqcQYD+AN6C=rz4yPlvb-@py*#&cxmaFkj%Htdt$XwK($YFyd1Y;3 zrFVV|Yb(zA(HTC6PL)tgHPPqg2(*N?XwhZqYZ)Lwz!2zuJf z-8xYHvrcpK_~Op;(gBnCI8*979>UQhPYHnE$3vx;f{N_9p(hD4T{|{U%<6#Pl_iym zGozV;rJ7QXDfWByVi|F5Ntu9DUmkF}47_~!tKd@L+*G`R;zQ0K@A6nQu`C~t`8q;? z@mLs^1Oc{XCBX5t;zTUW;05^F7GDwwe-n%Z1`J$WyrL&xZuE!J-{?sy13!c@vyW^9 zO3yRkkosyArSPLQszE{S5#>CQw7H+$DT-`UV~=w4H*3{k+W#yn^OR^N{D$>bNo%ZJ zaipiv^c-5Z*=n30?ft5Gwj1wPJ;a6OEd@6#)q_#;Jv)9@pg5x~k>(rG}!B~X)-}LOJo;y4~-9N3Jw7RXHo)zqBQ?M5sg~=j` zX0x+>?Q7NQu`aRGSNZ&%$6x$tsyaOy4SxK=Pp{mX?$rl{@@h0_bq2YqsoBS0{5W1X zkT5!F z_ZL^!H0HN&+^in%>KuAH6Nt|ViJR^4S)&9P}Jt=azez$KUU6CzUr_rS6&EZ`yDb(wRV^xFgI7q#NeML_Y0_%|a zwU=AQEht%B+M`K(a4pAG96cp%!*J9&av*S-vZf4lWVRB2ZR}4_+P?!z?=LQ$K@7cVJ64{ zBn#7XwS$HR9<5$`{cgL{*7(zGHZEH2ljEc1h52T0RGpcB(Gzd|VeagFFG|8K zF&EDf#+wYpGi-6OWeq0FiIUf%rUCl7x5^>6>1$B%xkJ&Tpm%-+*4 zW~QbwKU0~SKRMb}@lK~P4Z6}pRX#d;91WUJpME|CXJ@DTt=i*f`;TTk7XAVn6ZBxaDttLJXtybf?=EUmqj<$w%-8-H0cE3~2!%Vr5tF&94_N#YS8@2ZO z%JOUlHNu$<#QS|cS=gJOu731!eQRrU@Mxy~;KA(Na<|jaa5fkXv}rX+_7oT;11yY> z2p&emcCCIs&~~TBvHIC>eS3B|j92R~&deU}b`oUj8FYzHByM$Hdt((?KU&_N`|Cgd z;OyiT-V-F#)W*KO#Ao+_90h-7smO=iM?Z73GmI8q;r{uQTebXvFW?%aFx((a>r zvNbyDvBe+!(d~^(Q=MK{`>31U&S0dhY^M|0B^&Jxi7|MN0kg8imYKG9AeOX!4oc#JXtmnh6yGjnaEtG zpO84d3EUvQ3x%qa`44QED1nf?kY$ycm0mxj=U$1*MaM+s5jDYYE_dcUk@$xwurU2+ z+>DH+PF~Sjkb-P#1d0@;a;^0S(4z&YI+ee+=pxqhuqhh&Q?eu#$ zu3kQEtQQKqU>A7goL?-ZiXnHZSmm+=jVqS0*lFUxH!DPXt;gz8;AR!A&fM-ZEW38P^{JK zCkMaOMr8A1zcjVlX`jcH)h|lL^`%u94K$B)Nj&>h6^Ffs*?ypaQN1&|^Lp{h<#|oy z+;nv?%5PlS>h~L3Cazpvym@`&Xz!#y&?a$TvnLKPjfQ%-u(q-}HT9P2?B+@(?O)Xs zkiEX1S{+33G@EuCYIf%#SJXyZAzv5`nopiQ&<&^A_s{<1cB9=g^4TABPY$};9Bp)C zpLT4f=kXig`d5JWe)h9RJ3HxYn;r(8JUzL7^;M10^=3=seYdNv&)&h&Ub}g?b9Ip^ zUK)_0FK6sVc4z4JyBF=&Yj0e+d1v*`>z8MiBklVpX|!%bAO|d=j#RryvkX$mxpf%! zL_sDN*#Eh>XIG9%?0+@`5IQ~P(0!#FW@E$TwfrnK%9td9q zb(wjJOkS7+zd;|pvYLf0iU5IpnK|$)yH_wDDS!)G<@O>i78EEbCkYI>jua`5B$esE zL_y>*kWCamRp8G#<(Vj$03@u=&F|jd*Y397VALO|-XQAtqrp)BRa4VtER;*->Ha7e zZ;CyAZfeNPLB~VdLX;ZFfF;_Hob$80Q!}g0+GB0Q6pE$2XCEINJ-TR~X#3OTFiOrS zs8km>FTJA%7gt~TZnIYzL{B=szV__xKCI=7m9yIO)s3nNmeB6Y>vz{L-&$yP;?T#- zmlyXQJnQzO*WbVW$*(>ibdSzXp5MH*z4!Fv{-Akuyf=b)Q)#W@m)Gxh2iWh{FFL)c zYBgOIr(j`uNBdN7Uc1#kf1u4N?Q(3?pMe@~?cB;0XLS{(;*)T{OqwFMwD!tH{rTeZ z)!2s9ZrLbWnq4mC3+;Y)s#?7L+Wf}lh1Kn)>hjc`yH_84zI*-dyZeU^UcJ3__`F_g zwu{xaMTq|L(%iw5!*;v?aoA1PlV}*!%!?-{yREacz2UGmH@npDHZ+{XOG-v@ylEVM z3HfrlTG5lcQwyhuUwr4E?!5N;>f&ZebBsjd`+xqpr;2*IPs7^Oj80stRI3-Yrx#~W zuUx*}A6)zJmj^pLF$2E#&EJJ;=km3={ry3=dofH7TP~p5o>PDIqrKaAR=M<2U=&kL zLU)I{LSLO^>bKo(2I4BdwJ58&jlw_RdtN6piCok{fJd5OoT&$(f+~dLUGRDn5kA4& z#D8UG%R4OxeqaV1w-L$M4NFnV!yZI7*0)(X9&%iymO|u2@mG#gPh0ZAho#;XAv1g# zMx~#mKsYWDr5m3Yj?WzcGKDWYfv41X>Hi2I^xuMLhKyDT^GD=8EgUFi2quolPGm!{ zklWnN!ph>Js90x9|I*>Qgo3OrCmhW96S9WVDTGM-vqN7adjJ3s07*naRB*CGMCbB{ z#EJy%QlFAZ%6*tBS&sMo@v)ws(eqG)5e$a$%+qiP@v(%(QnE$Muv98)bJNoc z!+!gs)hm_bNkLtrww$JCdfG-JW0cn&lfa7V;@qeT({ukCvHITYZ|y((xYgIRYLHT$ zZl_RQGW&rK2few4jeL2j)i~>o;^QOo#o4Lc^V00qqk|_Ub*4S2+Lu^6KVIH=b$$C@ zzBr9ZP)YslQLBDrs#++`E-vpN3|@a@VPj``|G}59y??EBuHN{{8dT%80@}FK_F18j zTb^C~{L?RY_eKj#@fM#VdLl7dcN2%4XjiQEj%x8L6^jeYS8l!5scC<9x2Nm@@y3B!JC0W@=!{F1 zihdK%5ylXMks6$z?bXj7Z>;TXZI`v-cwRr$RJVGA*Y57r4%-@`hojyf{qdcLpC8N? zyQ`PixPU1I+`+C?sD(tQR_tg%l+yuHYq@X9=p=g)nZg0*vCMEDW`@$JiOVfapJKHT z&Ym;_;rsE?muJhAWSBW}XBDp+Fldpyq6Cg(4E0kEn+#Awp!+7Ff#T9p>U>TiZyL^R z`T#>+>DZW=z&$ff3gBnUbIAYcpZ+ljfpG7YaVsmJ*{Fv1EE%w@%em%*xgr%Ppn66 zf#h>hv9eIE9@7+~jbBgm;bAhST(+l797?+Xc^wLKn6H+qb30eRy0QKG!Tx9K%WIW# zX=8PBsybIL&tk5W&zH2Lvfn+cPA{JB|Kj?c-+%O|SDiZ1XrUEz?L)`GZ8R6Pb(zb({$_Pyxv+I*`RdK}%hy+*Jv`AOX4as_d#>t9Q0UK2PZe?W(WkJ! zk#56Hs54b5?>+5844LVUClD`ZSB3@?Dy63s7gk5Wx_PVDUEHi}U!B{!Jm2W(*~K|M z@3?+>iOHVpgKXB2OQ7pkqPsE?&E@!*EYvp03KCOvo@P@@ScgpVg>?wvC&;=i z(t!HTt5=^sIPJxUK*4Aj&&=g=aga!&<}`>7%H{m@%yMPw%$!Nf8{L#k4~cj^*#@lD zPWPJC+4VT$vD+AR4twXHt}K+JVMk{lpFletYFk8Kny6xVw$<3z$oKZw{^jZOC!1Th zzW=wMZ*GnZ`00WM^;t#-3Fh$BzuXQuk?lU|%N z96N8Hv^ zm{(p=8{2a@TzdBWexu#J_s-I3t%ephov4>9WS-uSLV|!T#{U zqx!~X{>u*zdQnt6`J&ZcpI_{^Iv2ynC_ayQ7;ir?9BJ2arBa#Ks64=P4PmWLx7m&< zzVq6pr;pAw3J&ALgf*h$t?kA6g>7wH9-N$PUrHkq6B$T?Xrj@^rOLINbFaU?_UL|1 zzs$$WHk4VjVdUYPzq75~m99luk1^BIx9{GVUcoV{25o(rEc%08Cnx&)+rQ~vxmuvy z_@p@hR+i-?mXs_?Ex_OqAS0B<>k*lT2xk2x5C!jM0s`@}cqX1E%v54rGf*kSJzzS} zi>y&&eZN!|{RgZ{NsIf9yr%41u(|Oj%l64p_VOW8Swt|R1VT<$@We|q77qCvME_w> zdB4yQyumDQYYkFY4d%w zxg3y`lMrA4Y$RcXTT+tThdgG%@PsP@OIuo2vM}FmfktH4nypuEZ#{W%rXeXB4K-w} zZQSbh&b3#um{-65Pp@uXsw}TUtCKDRmrX`4P~^I!P{=_Vy%y`!txGeXe)>$Q++fgY z*B*`rEj=C9>&2(XYfr3J%kd6m@rHByHtM#u37FTo&~BWy8|T{_JM;7JJU^T+7WXf0 zTrJPMySy;>cz=3n;gr~Q{p!25hfg}4R)l4;KF(%OyM+2L>ypYk*4weywb z)O_rAE?>S~%)|M~p0=z?#n`;tSYN5+PkO!DYj@w*X4TJr{-c@M)nc(6p9~1Nb>+O> zZRnZ9!t`);YiaA!yoN5@i0<^`r24Tfc=Bv*WhOT_U5OXe_v1~=s+Fnb#kHxa_m0jF z${NL>&}|*8Z_Vm&Zr{1F|MW;(6rJt};|&F{Sg6h|T`pJ8R2+7cOZFCsI{n^P-n;$u zaa~gsLGISgw`Qu-y?#quY;S*kI*#^CwpBB25$~Fv@L$VgtJ^V%c=ztw+5NoY41 zx^jJ1k4035!DUn=wmNliYKyzbc#lSD;jt`|_n-f=ys{D7orHoP{4}?)i{+0tn!d;6YDZ3Qse8 z#U)QuG^K0-GIVb^C_$lb!FveK;uo7OfQUbWpzcCQqz$e$+&ABLZYd9t@0JiwEWfE6BJ#J?9_%-SPg=(tHi4uN1oW6WRf zPiIn_jeo%O2(MIDU>HcFzlieAL&lR@ZZT8nl!e%+JlwP2FwoJ>Gl%=+dokm7@B=etxQS z8{pQjKdsM2HEnXWTlIQ9cIL%?)MTrgl}hLMq7z5vM;f$Le~>GdcmH7N=AGq}{XG>mv{_s!O+9<|Nli~5c00B6qviE$I(@BvRw(VE4VN7yvHl?4 zcTYd>x9hp{i=Fv}#@_vzD;x8j&c)o)HI4P!T-5xWn%mN|r0vsR7b~+GuoafI?Y*&C z(%;rw7kBU8e7bw0CuX~?_Dm%|JvDoD-dI@b8*DS1Xvgt8oz}Hm>#x1G{rt(vbg9s5 zpZ5Em-GkHBt(4i;b(|WhY`_Et5!ZLh*Kf_g_WH)dFU~HS?e(2Pk~lqti|Iiitz{%f zi8Ba2c>@{{@JU>Avp72+)w<=y)R;3Pv(0VphfH_AMKN2Z#@KCMH%2OueW*Nds#0NJ zHi<(IiqpuliX`MdS)Li1Ji#D=Ad;DSt_WLhIJD<%G0%ZR5h4a$&j4x_%=1}wlsJ|MBOly7|rD-7-hCQ)o=Q z=O=?VrX_*(miUE{Q`8QwNIov(c=3?wS)pkIxpp74e`8e()or+Wa z-bG0pV&!7({Jh)KxH*7$UThFGo;-W@p`PLD)t{6KxuwPBVzE#uSGG2`bGe!J#TV^v zr(SRNwJkVA4XZ1QOU;YD_NW|Z8)+vewpz`~%!-*CTV0%AS-mv7Q*U;f&330(8x^Zt zy?!IUA1DnxI!(VDpB%ifw7GfdwAXLu+>ugf7Vw!mYPRhD`nc1N2BT50vAeza_G~#? z-FYt>#1v^mP5WlGX!P3W#qxBnw9snowOSXe)6ppL@xYwEB5?$I~@$u=L05EPl3qVPB1 z-~Ui;ZjIXA_Qs|1xs-oPrVNzST+uJ07rWanJ2p+4QFTO=2x}r*iA;x z&8`h%OWozE6nHZ43$)FUgeq{B^7K9;BGNGqp3~BIa&kCib%e=;0c2pRm#3E@LpA=~ zuL!9@Vie`zX3=xyU@1S+Zogi;-f5k6yAAy> zUQU;@7-^n?8kvBd5pTlLb;-63Spp1>(`qa z56liYw{KrQeEj*;{Iy=MT`raMv}K`~)4p46Wxo2xOuc!C4E7)ij3NtWzFORU7H=e- zE6%=g{px7gD-;*njU#PR_T%l%v>!O$v8UB+0QB>v>BZ%p`uYBJ5!Sa}t)E2u&${s{ z#8K4lwpN$6j-EX04*JKnMs==lth!t-9gdi`&{&v+F=2nu>kZY_n+vRU&|)Flhc-+m zX^JabHyg*D`IV6sGcAGA;^Al7G*;5IRB0eqVV_(KvxNt#=RpZo{;C;h9!k^le@07*naRQ$sbFhbjr z(+L@fD1L!Ei7-&&X?m2UXKQ1dn=5?`^ML^mQpaS8l{x7Nf(w0p z@!UKLL*gNr-Xb7$Pa#9)0TIFOT{iL|;us+GevSht5BxH}<$M7FOX*KUk9{7U=;gz> z59|if2ST*}+&#Ns+!ctpn(#JErNm-E#ZZuHL>wUci8d#8JZjE9_vZx}!vO^L;27~p zrwQ4@K|atPhk|AwxM+KA=i^VFuWS_!JRALMPDEpKfx!99Yz5N_VD@t{&rQyWfu%~N z!v6mKrwrspnUd9B&1tK{T4{ZXkbb*Se-xjmI~*1BqkQ-9 z`SDq~2&F>2k#?`Ar!%`78`spZtIZ=l8Yx%j8mFIY=+Xq-ed7y6j0ot+o!^`l|DYv@Q*s{!?m_qWd* zXCzVFDAa&tu;Isl^ZD!de*5(FV10SBT7cQbtNm__)16Ljs3}d(oQmU&v_&`U7faK* z;tY27M#a@~WqK-}pR7#JwT<3vwCdNc&Hnud55D@1D}!MYJd=dCuw|Js>6#~I;~qIu zagq~YVJZpdk8+3g&dP=&sU!1I*@N^D`SxjEH$*uYa#&@B4SCM`KZ~;q?eqB2T($UT zfBDg;A0K`4@!{^niw9qxe)Q3kS8lH;#kGOEp+b`cVoHMbFA{9UdY@wgbyy?n^b_fg zq9+KxTM|4Er|4!#w1tSM#(kxNW%z3B45HAGkYU47Cho1LY?;m(uMNGzQM86cJ46;) z!+SmYaOlK?H$+$lWN<*`|J}c%z0$qROf5FaMSeHwRe`acsKBRJOH92jVMY#iV*RKPw z00u)U*|Lgm2l92=tsp$Lo1Y#U6&dw~(O;1d z%6trA=txeU^MMyICY$!9^@yClknPAkx;!^C+ZG52TyC4t}P(C5L1&Ij~6AX z;Qp^Mm)9T= z1L0t#t**;k*K|?6QLf*79=lJArNN+AE>>{V>X%ow=M>YUsc?1e>g?Rw#o6-wB#13SuafL1%AY>2IGV+W-V^^P zNM;4kQL-Mro2;Mc0hq@Q@S6u1X9eKNpPb#UIQEajM#kmIZfNi+H<6Gn!JY|aAw*>r zgb+X%CshJo%8g)NTKr?&K(8)TvT{>{WFLsN4csqk;m}NTDr0$Q(UmP$MiPC;GAW9U!e(%!mlh)??%I1~+=}B&+ifcRP-5O{UN?U>E$Ovr|>iakE zeY0`?q^_s(x}9F@T+bHi0#+6`n)Snmn$z}TDm>bYn*%-Zc7DE>&rdg6&2p*o;b#wf zt%k}+vn#L9&nLT}ZO<)k&&;nvr`s@f><#pcBy{`Q5gMCCT2n8smNX`DSFqU_L7QI| zbr7wsZ1}mi+qi!D>hkK%rKOGf*+V@W*y%P$@v4bwDR>FKhrGBD9GCmU1y#$KbucugpbAL&v|Gg%)g`NQLf zm#^IY;)5SmrWVhh|Dro8ZeM#Rj=U*UE?>HtE9^2MbRdLjM2Xngg^~bpY2-mMX%3#> z@|Qn4U7DZQS@indqxxxzwsHRWt$%WLO$hU_v4G!XuakSH!{AcOldJmIeB34ZXJej%cOJT~a%tM}fH$r@gef%#7 zgNdUBczp(>dy}4dZ$m$ZX9$|PH(E7M<4WEG0U#g-IkkwMT%xR(qd;cJtBG03oV7=# zBwjBh)j)p}`e}|3lBEl&T}9-XA;0PK6#v3{kw9(|i5!b}H6FG^tEQA1^16fJ`u6nj zBA=hnEi82Ro;GLad!72QQeA-DRI;p4+ft~f3CpToYb$N6b-Ndxb~~vJG&}9Ss>TZt z<6TnX%=5Xtp3-Zzj#uZW&g)I>EY;T7Xb{aW%-z2Im6=MV-P@>EPYe%joJ)G`Ke^C) zIi7M$D17>)wXsz-#2fshQG#*#qJ@7`)8ogBcdu+}Jk!KzORdvBZM84rWs%98v1V+w zTs=6wX!qM1PRo^ffI{3TgIaGmC>PY;-lO5Lzi}y!B1w$$bV4iH04TRKzw_h2-(TM- zakXpOMH5EDvSigJ7pgSbPyX_w=}JZQ&W5G6i;H80+!gGEb2YJ%p@_*^7b|S+<}GzQyri=|M$iDT-T=Oc>Au2x1PYBewk1 zr`CE+-EaZr7+2nt2q8%CsF$8etN%$%j{(AfcEJvh5nh4`Z#~8_viIjS-;9X-3!A!rX{jW2gfCb2ep)tH_zy_SMSeagFHqJV|UbB7e z=s=xcY^<)B^_uZg#U~G{)zbF*%1)zRE>B(9saCL>D-A(1EKLHG(ne4C9J72D7pkS= zMYGvyo}SjuA}lu=r|}V!!`{sF^z1?l?NWrCSRIkxl1o;<_r#9NIdhW=6{G8a`_--5 z;XpswKYbph9W8G9Z~v2<-F{C>b1I)ZJL`=`dUOU!AZ5t<3X*~z<66W(8>GO%{_=j| zvZDS%U52unfK|LW*)K5o+#iBx{tQEP5Iqyn{q+b4X#j}@q*Yi$dkqLMX0-!XGANWk zdRm%P1WOMdCEk}n79r&;tK`>~(uCjy5|$<;_Lw*!&&&)1c*DsbGEFKzLD`Sk4SM&~ zVCW0Uq)TzZV{#w91vbYJxDX?i?jss0wsjLD#fJ%a%GS^-`rW8p2y|Y{Iwgai!0IY<8Cx)_F~oF&*giid~bT* zIgQO#$iv=~mS#n<6hnBiSXteOr(L1S+Xhr}Y}-(EZ`p=uA}qmgv}m9>pmPLJ;= zY?gDK ziaI=PTwY$*8AeYYPF>x(sp2r#T%}Tl;o2`ge6X=uN|>4M)@?XREIXx&TGTa2Y`1_K0PK z-Z~-CHsKj|dfoHZ1)+<6ynSU(8~sv6q~Bg#w7_-&^7L}iBWEU8^j!F5??4aLxU5n# z+dGsT79(@9fczxGI#ep7lcL{mU>pis3|1jXv!6ma8}^7!$wnczEYcy!6qIwfqEOuK zCsQ3T;ZkmKj;JYnNE#dEbC4gBa%>?Mm}T}XT$ z{B+Mz`a=0`oDNyo1sProX54u%61nFcj1NBvGt98tSULt1Zc=>#(sugsz-TeC3f4j1vu3f3_ ze*S5%@x0rv_0?Rb-|hEXUq1Nst+#i&Cnuv(yId-+ukWa+-|lrbSJ#eCPyXpY|LW=a z0oW5pXBq!)#dfiKl|Ig!zZ=c!A0Xjhy=5el#3(UVHsU<7{JjaV-&X+b`5eQ#!ja zGy@A|PlZgp)(#8J&URqePWZV!WoK31#|MxzNgV*BB{?7|0)qk7!+z zDG;d1JEY5ovgTj$SHNm2t7cTBurigL9b|4^F!Ae&7R!U%9aNZuWaLqeEW!cE_5iIw zQol85T7UZR*^}D-;q-cPvia%W(x|`QiEdZR`zF*jM-erU2Cr(P%~&CaC;QsR*zESc z^{wBzfaawemtVQHu(XQ#YGdnCyz1^`?{J`v#M)USR;{IKd46$ut2(z)Z+}9NFdQZa z_5ob9J9loc?_8O`eyy6H#>fVnkV5>=f4;X;xwLcrTSHZ9H4ck~c${@~I9gpV(wM;f zO}0W+6fYC|MOUv}9My*-4f*Qf!>9M3@2g>bYIY|VHLl-$|BEM2Ay6wzr=@`Q_~VO1Ib0(Aw_~a)qMKe06oZfE$H;u~5v7hN-0W`t4?8 z@9Hh=B_Xng3^TT{4-2zm8^7l9VP8<&#jJ2544 zp`Tnz_#tlq#w`A!NM?T`y8*w`1lRaR@;wp~CaGgMCy7!#G)9ftM;jPmp@a%x>2dr+ zWO9IEHN&r{Twq=uP7R;(@x}oZVL{$ew9`B!?m4!FmHp{t8o(1}CyK_#x^iRd{IJ#U zoHgo|jg{YCSl-eZ^e-MfJ6@idu34-_a2990Lv%tatyREh2fO-bQ_t@;8hYOD{zv`g zje<4}JEs~lVXslXb@|4#=T9J4?)966@SAgBmIW*&BB_zPSS%zXhSXDPh@Y-j>xXCB`!MPSY4xn5mTJ7B5GUX2mFxMb&PdblL~naGYJ#D3%H#-|o(|fsIQd z&vX2;-5>%L=oP>3=j2`uTw9T4W*(_vA-s7@ zvS*%*qS5B%x#i8u#?JKm&UCxmOV*QQbsnjdxZGMCQW$6|rF=EQF5zYbpk*(eHWcez|+Hc+msjV zWyM-5&Coje2pAIAXox`Yj|RdQrObF0$QyV7HX*mLbYw5+HoOV&FMNVt*PU>^q&XTAvVoAFFUNqP)sr<%M}d6sYGM8>Quk@+oOf4!NIf9%2v5hcza{(*3R<6hoAmpW~zF0F}$>M^U}`U zFCPt;moH2pj9K1i>PQWsX)BcqNh}X+EN>os{`2@0+ z^wMe(K#V6KSx52duNU|BqG5EiezCMNdwV$Sc009b*lDzz?Z$yF?()u^`RS>{W^2&z zzk2iDgQriT?oqX(QKxtP@~y@B)nEMbZ$`uJa5U(3nlp1duYKiTM;E&|s#VIfvkN=x zm)_Sd&_?~~MeSf|{cinyx6?k>+1`GAK^I^HM1{4)!`4Z9ZBP$vY)#$&^l>lBcY7@j zwE7x#PNUMw%mPitQC|ZZ&45!?B)z7YfTc%z^`VJyybS#wm3!IyjyNHmzf|t4Y7&Rord+zC|mnh-|$}mf- zpr->ZC778W0#Xq%F~C$&L(>GrxC8#mkC&YjoP#`g5`T2ZTS6ECXlZUFkjx9Fx-pRY!7ixkS0naa#+z4k1hAGTYKyKgO?oS%SQK1eN2LS+`o zn7^dBO~cii7wcD-wl2?Jy0&!t&e|JqUiq6Je0+0lCO(kLZI}n1gyy8bk{aEDpVMMo zssTh_rV$kv7=DEVL9_f3f=l^($_PwCI|%TwjB-lS``Koa#CjZf_@sh`7T}MtIVF@1 zA;2?PE-%r~IedutLUeTcT>6PT1@05Z+BBOa#$0#9B|*ImZVM!Jcl^0IeL|E9V}K9@ zoVWsDJP?N8LN*YJCz8r>v~kJ9aUb%^dp{`|*R$-ocnHoW3#Es*L}sf@Xex7Pk?#)m zaMa@x2zY=nSuQ6q1Ci?m5-HAh1c#|qmMD%@SMf?CTib_XFDPZ5y#$A}87Y~A4lsZ@ zEv2M75*&SwA*uP8Q-hQJ^Ek?+G*hYQ87XaD!En&&)E_^4^tYYfus?$H+VSdoS`am} z4bDVEy#DvIzkWVHr4kb-elk-jc52$b%AM6~i_4dXy^HVslh=<9J7;G{oqkWLPNTLv zzm$vY0U*+@jiExjPtB^SX19Oq)k}{*f7oZ zFP`tjyO9|i3-eL?!=L`@;-b}!H=j9gx9k0Wt5TioHlDTmuspZ$VE?FG9CbUR?x5Qr z4%e2~HF)Q8MZi+AQ2PAo(|jDR8E>?rU8cGCSg66PSGKi5+3oe>(*yHGJq*xqwO>>> zN@Z%L+j@5SR-xXkliD)yY*5&AI$u0lHCEx-~7x>P_njev?sq`in9K`k# zm(!U{#^PVuQKOy$Vh=?E90N`~@e7fR)iz8vHp9$hB#Y=HqN^|l<{)P@j&+K@fY;m% zG7lijM)aPThZGlMN7l-*L_(dUmLnW`b&(fKVV`itfznKTQ8k4|z+mAHC9n$z6|)E< zBf(@20`Se)42oy_MY)7fqnJPveX}w*xA*vP6vL68n!-VR^}79bv(>IO8pVRv_xSvS}0$ypFUJE<=V9xqnA$H=nSfJ>#NIKH($l+rF^YXzjb|a z_tELX-1JPL^UgP4X*BDK9mJ^Y9x(}Xw0AUb;6Yz{`tbJM%U^u5cX|8P`sVEzfrgE0 zQPrRSpft7AYWHqmyHYLPdF72iJb04t4X;m?AMbv7+|n4Qxd+i`q>a(muz%6(cUM-g z*IK=`wVS$%gMI@>{nhoW7w3DL_Wmf>A4SV6>o@Ps|IT;5{`tp`M@n74`MzpCx_#?T ze2hl>BC!y4CG!wZSmxprIJ)QgV&$aXot~{HY<4ycnd~&T3UE^CZU(=pG#N<}5 zzqxw;w?F#w+KqWnN^KehHsdRLBvXUj?aZXoQwwN)o@vhL#~!=M`|Dgr<`=8AQX-m$=cOj9ER=8)Fy2aM;r%RQ+-Glxh8VqBFG#Ex& z(Q9|%aMZ7s^Y4A*>eXwDYuj@gKd3t9PqLyh1+77&y!+_q=1dQjE)sy+g<4!$?)BR{ zuRy!oH5#zdZvWQ%Z_h4{<~L?*jdMsR7b8QP0ot713r1UnX34*PReP3O-~OYurAzgT z(|Y}&GPO88y@2`3?CR}jPe0aGUtZeWJJ_x5f1%ZWrBq&+yLWQ3r&>qtp@!2qPYsFl zrFMN#e(T;hzkKu|jt<+cZlzkf`}V(@TDU&wp4Dong<@rXezC{(fpP!<5CBO;K~&Ld zFRkT{&yVlDe)-A6(|`WQZx1^K4S}O!XVCBV2Sc4*ryJ!9c@?3yoy(1IWJ2(){klc2(BqjU3>MGpo5{2rRs!3At%mZbB?ht_kePs7q%(A>r+k!fmMZT#qYxk~ z>eT~FsZ|8c^o9KP1y@!Y*GkHri;I#B%*p|A?64k~XgL<~;kf;19MR~JsISRD$TI~T zgG^&yjZF-!cZDfK8oV65=fo?X+n85enTo&kmi^5T#K~8tCm}QkLlpD^M1jGTe1g=U zy)=lBDK}h?jJr^dm&3%YCo8EDoPK2Do+hAe!DX;0SaUG_#Pf?HvoEu%4<4O_sq0JI z55IWa?hXf0PP+m%mT6$hK~yal@}=4Jot2Z?Nlwp{jTFb8Xd!xeq;!?ZYd-dJfT#m;9sk8cNPtUmx2WHJ5K)PvMQsv0jA>Fas{F|SeIo;bU zK);O9!-u~v&t96EUW$50^^1!r>R-9>-t^S$Y3+PrVg0NXHEVl|D_75J2lMmG&ky%? z3B_W$Qqgdj`}*(RxpsZ|M?d;G`Lx%sVn<5U+~Dd*pKcRATh z1)JT@`laa~|J_NsvN-4+#Xvah$6KBbHJ1{LDj7I*^gR>$Mc(;L%ZZZ$2Bq?Nx{Q4nbXp=VfK6;x^*%}GW}qBE(2Uy z0aGI=qDh^i_vFgRo09XOwp^h}sTW&7O-(~!(n~pj&_6r}|MC)Z{s3gEAm?S_Ie9q*rcskQ|0II~at?AXh-#a^+Q)QsJ7_ zu82??=h|m|4TQtQAklTwvykPI*4m}vuvwapcM&5~kJs0r*GGSUI9JuW4MxK#O%|yk z7H8)cnyt>=ugsbC{z)xdmo~Pnw)PDDv~MS=7_;14Crgb&HL4%C2JPHwz1i!X_6JZc z^dah(7Ou8ydk4>cQLCTMOwZ~srYn`Z_kRD^KltBP7w`24$2$v!;b7PqR*I#vhVrRJ zJtNqE`;E&-yQh`Hpio(ksT%d#{b;&UTv*uH+PbxI^;;i(a<;VCFec6i|M@|wjLnPv zVZU9>Me*^&!%?rV8zcZXKk&&(BVWo72BTu3*lC|NPQF-N|D#;)v2ll*h8vAi zqi1n;q4xY_x&r$Lvuo=^nlEGuIus8hGdW{B(Q-*9``JQDkL+J(?nnbph%Tk)lSxc( zBBDcxP~vl9Ya8UffOl4|0|NF(6|c0`V1o;AW8)Dc0=Df#PG7!ME(h-9GA0~ zd01u68O0o)5@Jo!V!A>pQEMA43djz7Wi{c%AlDtXQm(x~>KF6V6nFEToxE1$xp?7Q zEKu*UU;m-ng9p55E6=uHpzc4cLzgvvZ4`UeBN)}}Btim-H z-xSTHF&v0vS=Ed-{sz5^*S`8+)#`_Fq)vVchP`sJu(GnVw6Hknw_A;qR`dM9{h!@= z|9{=A9bLKdmGg_QLo>J+_2ed4Ts(8bV*aA zt<0}~=gxFxTG!%dKltw`2vdKMoWYbb?Z^N5=Yyf1u~j+yl2b;z-;)xmD)LoH`^PDpmKQG9Y5AT`SAb1roh zo<=>0?0zDf_X+zISQn*pSDMxaht^Io=pShzOC;|vVi^+ekJQmnTF)jDo7Gxyk4`<~ zT1&Yzp*WW^^sT2z$6ek~K>o|TgreYe^vlPP9z=iFbs*QYWfTwJgD|}k8+fHeW>|zF zO89TAgmNx&tk*;79-C z(}ig;+D;{#plY4c8|G)`mwNr)-S_6~D#O$wq!PhGowW$bxvfC#DQwc@;xi=_JbPH1 zomtqv`fjWCbgDXYc<|utqEm!cuiG3Bd+}k2!(oh4qk*7&n^ zqZv))bhY&R-@X0#e!NCd8+aOnwFNsEX*V)xN$hrd#bP{4dGG7%=Z%Yn_42hFD>q+R zPZs0}VMzAc##?tbo;|L`GqO>CruuGGotKLFQUQzk-1g>9t-ki?1=#3WkRnZ< z0Phv`VoGU8PGF@U*(d(_O_{0&Sg{@H%^@@^Q*3B*S)3#kiWndGa@t{-8dr-XICeh5X2>jj|r%!kg#UA2s^48TqfHCmshKW;;{5j7md=dg72KYyEhWO$% zR6mfHXAWk1Dm-)0LqTtF1Wx1ga!8T#N20Uw1c=_hj1TFa<)2YU#LOx?ZwnuDdHsP< z&>Fr5ArO()ih+e{WSJw)7lLaJV9n&UFOVfcTc7B8ul1eTOINhl?i^IVI)8O)`rM>p zPS+f;jk4Z(bL-K4J$-0u61zq_gZ#|gLc7y_{r&iqL}La)qPxk#YgAayZVrbQ9jQwb zWG2;w1PJ5UQPr$AYEOUh$*=d1o)-&h&}--OgQ(x?_hU0nL((udyyA#X?Q<=aD&PCt z{}>PURaDLQx+CrGEzB+rF*P!BiMul2?sgYumrtKOYPVaZxf`9KCSIha(NiLptl2 z`l(^&($dB!A3Z1*@(WYt3bwUDIUM#!QC~y&Fh0b%u)4DTcR$>{a)mZkPg{XTA+)t@ zDCJzFfh{qlZjP+KD?fZj=rOKvFxbf*k?3&{Laixr1;LMV@dmz>3xf2HhLDdQ8VcY9 zuEBVXz*mx@lad?8`~ne5<3Sb%@Z|N>OG#Bp z{*E&TGcQV@m?iEmG6z|Ec>H%gnL~n1mMxREc41shRn9xBvS4^Y)W;-x;&Woq7(WAeT$(g#`I%kN2}grr+wDr(aa& zimiG_lUvjXH0*cdIYJd_WQxIQq)pkJO7>KXG$1FlkAv>H8VxURY@W57g~D{b(OTOq zXg2C%k3Tz~Ep7~>+n?WWEe_fvEGsCtS{LoMHZD8ykx?oRSY24!eD%%ZMKeDCsNHMr zTw8nnjmw{Zx>qQaH1)c;QYl{M_`Bb|R+-Zyi5{dzOgsWG8^{^%F=&tL)oQoy-MjkW z)7{0HYHUVp2#j%4|BdZheWRkm_SV&-v-P>z11^(XylH}v#G9cJmjQ7aGZ$Z$QiPJC znE&IF3lvStHIG?lNA5C93^_R{95h4fDVfRN^QMrzD(f^QGFcr#WjiN@1|!2RpdT~+ zlax7oo}n*1B<3V#>T|A^DG$g(!QT`Y!8V+DfkI|nduL52NksvqKw*O1372aY>oryKPmNUQpF)kz8kp&U&DN^jDW}EFV6t z>vDRde06%h+3MbVf1bFk(xn3FD(s`@x1T(2udMY=HkcZGdBcDtUdHf^fG};l`yZTZ zqv`FtZ|^?+{GuIiZar0qFy0nhCI28wLVFKA$U1HHZVf zLBHN=u3w(NdUNHKI~#XiUAuZ?;mXaGvw96N-B8r1YTFkj zL@MF1LFx1=d~6( zMIq8-ATbb%5m8RPmy0s#6l75${3}Q!2;8^U6`X!WhpjWUNW)}gy2;}^(lNgPyvpeu zA&n}m-x9im{@KCVAN}j^p4X4*L|o7MG+~esZ|14A=Dz*v#={5o_}th|@3r^l07%`t zqhj^_SHJqFfAMGkU9Wk(`^9k=zq+(|W>}#uCsXSrs1nJHrb*DtYil3=`q}1ue%Noe z+l_ud-U)NA8t>;aj00VD4P)FY*fBv)oz5xB{a{1wYtyqL!Z;((O zZ}f?IoLlSz(BkpbbRLXG?QW;j?{#|mU)P+qWD;2WFJ(L1LB{+{d7^Lh=dZr|?(vhu ze!r_dwAzUq9}t|LqX}_14yfHHu)NY`!t6AWZ5pwd4>NQSDFi1%R*ZS<6@jb!gqu53 z`H)B`$Qu7~+mwNvHR~W-QIgL9#H=9(rlGI3SPo7~72Dp-V?{`F*dM|7iwd5w-i@}) z17ro45T4(ge=U17XcxA z&Jim^wPBY0$i!oF$b>zRxQG%CCqQG65*T+l*koUJ*ySF`SLxdc>*dFw5rNs*_V$S6 zX>z#?k~yE54nh(LS-Pkth@mbamR~wE{=^DGt4~G996bSWV|Kod9xMxF!%hyA<(q6r0z z>(f7a^6)s9FaF?1|F5031%T4w+4-Hf{?*apeVuHSoFHE)>d$kFD?={-kYb^c6@Q3e zGB?LdO-+@|X5!$sSW8>S3_ElYjmBB$bkOZJ^&DrX7avBIoE{ak&`5r})7sc_cE8sX zji}hz8N_TKsSpfWV#vjV9&q@fN`c>H92TOT@#Vq{Vjzef0C*2&DFVslC%|Sy=pLE= zakP=2Llz-<0bakLuFXpnG!T>dTaU8z4KZ2FE`E>NbRDw&wmlPlFk*Hk@28znGl| z($63sT9e3khpKFYFykTb6=Pn7&m9kCZ$y~1<&px?B?$Z!i|}^Jg{{g0hV--)#O)6d zJIJh+MzeJ0Lwhoj;_C|`V|XFdB4aq6`vb{lp~@Wg%UPilXyb$j+|!7}5u-e z(}m*F=Jf$CZp^m({bqS?XMJhv=-FpSN5{kbf+{Y)a`#))aQgQ@{VOO`s-R~FmdhOt>K6Cttx1ZPZpQ5v1ztguYxBXh-~Suq*&oc0Yc0|o6Ce)_BC zuzyi+G?{KsaUM!@@4(x)@!jSm<@Mm(;4O?NrjLak$Wk@bz}gbjq6Yd zgcMzKv84!nD2Cx83S-Kf?bkEK-c**a)}WGQ_?u4#>x|R^mDks(yD7QsK~01Xp3Lht zG$iGDFx&-(4FE0(1Go|%uaW2{dYq?wulZm+3i2UHsMf+^fXpX5e-bAM%FW_cdiM`^ zjRp_B;mKIk%mTtp6ohd==wX$Ib6NLeU%_t(gr3_|yl^P!0g3YZMv$w=YC{mhSQJFe z$^x0Shr;*+F7D`CqFzA=S%8hsDGFARaardTchx5{3~q59B&&=C0lT&iUaNmp4~iFtfFF9Sc+EwF^|ER@#0#pY5-e7ofaCXud%#@1z zM^7M$jMcRq4tsOUF)^A0GAmN5V%E3aSOdl=73 z4u(qqi_Ky*V8b7}v64ZRrh#Oqrd|vn_A(X1 zEQO8Is4%gWv6O#7zrYM7;eDD;VJeW_--=xP$0LT?NRDW|a$RQxsYLkmfF@u{%<+oj zsHGVoV|s6FZ8>R>tvo|YCS(FHe@U)R%G9#O*YM^TCc(i>QaD?^h6M1H6l)s@vvdEI z=_LY*G_3mxtl~O?KlJWh7eT))%z{0yxN(;q_yCMuuj)fjCZdPW?<%%AIA^uFDHhZDNVFChjb@bMu7I zp@m}6q$~}GN#JY=FPlKIqMbBaG7yCRN#PLuI2!W=Jx$08@|7$niYYFUC+o#1X@>Dv zM*binC;UcD%n`=gqZmBNrp?o$yjZSFIlt*VLXVFC89)e-Kr5`(NfQiiHV>66{YW7CkI zP0vjVWsj#fUl`c4sw%Y<4H6i0Gf4pV?p=BIsJ{F3L9f@Y&a9SI@TZhrb zMQwXyeW*$|Z@sg;UTL;!p5(395 z9&TS<#uW8U6eum-qpGDj(-HHg1@+ItU}Rw!s@0O&d5)80sJj2rs5E%2zbRE_bjAhk zDbD3agFeD&ai&-)VkOt;wbv?hZPOOE)wo5-yT20;#EiGR7bibxuUkY0au{@M%8AJU zG9jn*T)xqlbj3-AkTA-S_dWtkk~*0wNW##POhq{9r9$OTPPVUJJXXl+C{{0`jdzyG zx+1(Nz48c{e5r}29%kvo7v#x#!qvOSMv|PDb&bLp#PW(6mv}<@F;K+s#apj4kb0$u z6YsgU6-9a_LWXc>AOst%kw~Q|s6zLm!zUc`oG7BsjO>Y*jHSkLS%FgmQm0HHz#=+u z1V4_x$*Ua#NRgO7%aGkLTo88{u|Lj>MH|hY5BJFCHLWqz^KZr6ED zi3WpMe4V0Bv$c8ewY&f9>a|xlcJ36*uhv_;_ujb&+6>)@_s20gXo5lqDUAcn!U^-n zXhSo4(4Xj6iKjGvYkae`vhcH?*DH9eXHi?-=2@dT!s0i6@6POsdh^X|2aooqtJA%1 zBMvC-G;h6jz1_JWTa7~s@2b=^+$BiO$EDHS#~xs}0bbf=a$*M=?vtdixV(kk$Lk^E zFviCxV5)<_)i1zayn@U$6lS7SQ|?2h!k!}ZB>T&$!cg-lF`uU(BWTEFLvO%2PBT>jy?8~Qt)YLy_`2>!8#UIl1pokE4gs|HuVM=6DA|7Vl zi}a8Mav=e-dr*@L2J#yvCIvyFU`CU8%%KiUdI20goD~?b6j&&xXgPL476IW4R2f?i zx=FsA+;7vR2zCxk(8cl4bH4GS%`Fe2@o8tQ;I+0Yn>(VN#snMKV%A-t-Tc$MVjEzR zXO*BjXCfw8)8x1vU}7ot^SiIE96o%0*2bx+Vt*L*hl4A(zE!Lo0*hkR*Olu_hfkXd zOWW7pt3CVvgGZl~rdQT3e`RU=z0;%n{a#x|gF?QzytMJb&%WR7wz~ZRz^G6tVsRf+ zGc?_TfV(0S5K1FE4EO%}|MRos=bt`#@bmMtU)gJ5i`|$6Rij=_N~f z8LFggi07uD2|x%Q!59DrOOIgzFcCN{Z3T~(%Lj%H?F=Jp3A_pO2tT}vu zXP&tp1Dpu)S83&F3eXGy*`~?qTTHh`%PEyHB}v?fMjT(#^mB z@btU?;^w3K7tyf$?pwd}WcNp#m!=b{z|P;OMyGfE`fP5n)O!ARho>hO-P|zhwp%Ct z-bHn0>+Ixl0Y}r*%k569plw4e>0TL6v_<`A&vM(Ba+3e9`xFWk3KT!lKcDYjB*yBX z(>}haAI>br>j+QJk4f92MbqSDM9~>2TnN~qZq`8>+kZ6dAY#mbAX!H^ym4#u$-^Vf zyuOreLg*p21SgnCC-=Lo#jP z!$E&gEdEWnOuwUg+v+>#72i5CBO;K~&5` zL^1Rc701+}f79q3)DW2ub=!~-Mn93x&cm20Ao9HA=H0A-TmU-Z!FAI zXQFsota^0x#n--d+2mcZh^Jzu?2Eg{&#-=@_87o5^(WjFo_%mY2k$OS4X%7 zzHG@a*?buIGk}RRIV3;|x$8Y=b@RZt~$VuX4h<^ZFbzqhnbi)Mi zp<*kbBChGO;vOyw=;_IE3+e&HbfEY- zCcU3~@C3u>JZF|byhYy%Bn`zMBBGyw<&&9n=5x$!1IS)%$Ga0j=1YtSvR(XOdoKy7 zFC{3j%_kKzh6V1Wmxe#glo%$azPu{s-_X1oEgUqT&0pQ z?M|*VH8s6F>bL&sAHP1gqPqPq+9f5lwt;sRW0P6Juzk{vH!97?s8+5_&n@$H4k_Lc z-{@!|s*4qdRO%R`ToahO18{FV7+v4$_BJmsb$eZ9*Q?~xz1h+U8)aR%V12U&eUa@5 zY7g>75^qyn;!#i}7*s9@{Q#aCq18Aj&0j>myQw=1lU*3}xKJl>Hz}89jzj6&tQ@G{ znO;NMOd3Zrq9>FAx>r)cTgED>6*&_?{v`qxFWqAce+9vTw-^Kg0Z_y7WZ+$#B*;2P zH+V8myYhU(5;6RiCoY8fDSxxt7hGP0d6d~AG4nZ$u>$3HqJ}|F@JXFWwi;6qc-@k~ z57?-a{ZwoW0^DSTmutCnoaaM}Gt0*F1OT}H^51xMWJO>o2NKd$P>MsrF;y@(VwAvD z60)d)FdwJYPz8en2aq(vCAAXf!;HL?v#nNlZmtSeaq|^;D7XK(b7}qKzu(JGto@+N|L4DY<;t4j(2XlM7kAEPrz^ks z;V0$N<%5$^FDjL=Uzsh9^5tRgbU2DC)0@%7c|IQ-XPRcWk4!2LZm63alN*^~`|thX zZG|~=0`Q;zr!OzvUNr`ySvWx;ly0sz7?sNfiv%WCD8}`CJ}tt4naLmQz(U^}m#l$# zlZnx`@d;C-RAMzT=JO;UO!CZ`0SATo7#DOB{u+_|SW_~U3$q5%@XZ_u3}d$91lD;? zdKR1oG$boc9VKi2cxus!jeD+`+J}B9!su+(Hdv6@ga_x9YgXpm+jK zgSp5Y1P4wuV5eTBIKVKR6P4wfh>bN7Y?L6=eW_stu1m-LZDytd5`8TsDz<0iR z>BApAQ~7wimif6^(-j#3$ey@Pn^>7(aF>{aY?r&A|MlM0&E6|l)~R++o;*}@x#hW; zQB<5NHHxK@#)3{e%0Z#qI>US!^OZrr<1v%L=J+6B8}1wZSBVAPE+_I9Q|dG=P~^90n}yK~yPVCkA>x zK|wTYFp^p*yPavOZ4xt4i*md#fuYmTrmWp*dsh5;at2n!^>U!K6*Z_0g-zSbqNA%I zu|mHz>8SfMb?*Su$bi{$H6a5nSCQ!lWu+zVp?W;vjigNuc4Wg>!Hg zW>}Z7E5$hr$!Ny`^kE8h=B*hJfInfWATTlYuVloatmR6?Ah?!<5I(|6Nxk8zsdVg^ ze25w5fUs@Q zPs0WQ=_{{}!2l(VG~u){8_OXL%fr=$Oh$uqN#|7PHkL$}D9wqMRL_1S4KFAi!Q}e&|?RlM7t23xpX216rr+@H=t46Qcv!Bw!AAJ(d>p8&6 zAd32CCeOs^CUesa5HK|;^}XG6jo`s?Cg--*)(>+GKb)d8 zD5AT9jYu-8pVWP152!MLYWCn(w8a56leN`=u#gTFF%>cUcLM-b7FY*oA-cj{X~l*T zr!$(SrxIiuA*MDZZlIjHrk-Vn7dAAQpe}_3Gp1DOaxywRB z?36+Y692$7xsqG_O|}ImT*UCK=O9@t-i9y2tTMkfS6D~IYQQuI5}1W32;dOKc7D=O z?nAz`!-hYIig@k9|Apd5t!DJ2u@92&5_#-OJZv<&M;0}Tvh;M1>~6n*an$Sgdxdfw z_PMrI84L%uP$wl+HB+vMBiR44^!&+L7v7qmI~}!Ool?ug_E8x-e3)V|`=Z@HtToqH zmcIDn{CED~l{fC)c>L&0yEFBx{&28&pb@Zn<i46F%Y?BDIC$JK^k{~Km2lvT*4I>b+20? zmkOD{rIf>5o`c`Fm7Iji?6!nYhyp3WA~)BQS%kTqmEvXb9^q6d1eNu&3Ronnll8Ma~32T$D|AO7V^@)EtU9AjqmCBEwfZDFtk67^lItF_dWe_<_L^YYjNl z4P87WUcb3|`1B&e(pz6$u3gkfY%JNS#^Eb53<52!tBd{9=K1}to&TbL`eD0y(CeJh z8VtkF^NZHOd8->A%%H((I8`b9>f@*DJ5!@}zCWtG_0@%q?Ww7`wod=(m&e^DdVq~G(|8|2^%2fg#kA2i;*a_{cm?g_T{ zlp5voDQ!_=Yt|a=?l3xQ4y-zl|Nq;+e|huL^n+hDs+DpvufBLNs?K!{m8Va3hq%=5 zcZ$VwG`ezrTAnK2n8~kCRc99#Rw}bwh4Spo+}8Tm(?+{VT%uN>*!l!T(oM;!pAZz8 zN*R-p8HH&TZHpi}3z9DZOwDKpW^sMZ6r+jOv1TPX*bl}b_q0~M3NRUgghJjn@4!63o7E-Zl4({kR>mV+O# z4x)T#6;f8rP!33wxdnu!A7v4Xt z4D*BrW}3qMM~!J97$a&K{$5iFisvRAiz7=Vu?ur7=)(=7%{HXW8|FSYX^0`*scWK97>-7^Q{dX-+ViJp z+7;UB4_m!xNDf;Ci%T2j>6OaNg-*D#u(q}EYPWMS7k`^RS| zfBN74Z$AF<-%pkE3Wkvy3`YY!-WZG`eV5qaBTZDHbVv-L$v<6qyyH_vIKqKHQ^-3Af0Z^L z2J@y=L6~Uf`g+!~A>?ZM!s-(CGqb)Zs|Ml4TMS@a0%&a`j>9m*0E9q3h;Xjyq%?q6!QhFKuhIwH5CkzPIA)~bKUSW+!Wisi)Otvq zzRxVeDhiR!_$qr=ukwJ9dkEPlNL0&lK)MGN-%hpcB(jAEK0!&;)&w^KO{9=E*l zf%R1ia|GSu3YXq!f#GmOTb`;hEBCzsgFt-0foN^^7q}h-}}SE$3M`Brn4Fj2D*qL#Gt3JWniQ-!zBmp;&cPg6uPMl zkej(c6E9;nQL}7Jxo6BT$_?c49fkpBg#%yCp^ZYGRX!i@-)1*1NY4=F0zfMcjkM>| zon6gC0eg1Qeflu6M+b9~3>nGd5P*!Ov0$s?q!C&?a|*?yf4_4x4D=8)!` z%W;Q|Vq~I3WlyakjjKr`d6>dF;8>90JZDOYlgf&;xs6lK0OQ}-OIU;;p*TPt4n-)D zkN*_+-Y4FGBfO!342Uru$f1g$AS589ljslm;$fkpfsNcgZJgpZpN6l(#>O%2jyQJI z6TXra8JnjdPF6O=Lh}UE%P*9(f<7h`WNuNgV>GW_kTPKnm!d3W3|TSXCvWZeVAv?=_fHrA8}u30y)@fo<4o}q*Tn8^0>8mZD;!$K%;gHV z@BUt)P|+?>HR?yhE|k}%S6;17&7^r3G%YGxF|`qe4q=5l5oIpB)YnS+@HLD4${eQxQ+*cTARvr5FZ3kHeob;N z)fZsKrV|cLv&5V40+F(p>(QV(Age=ZT>32i<608rz+H~)ks~6!w8wSK<$X?>xVC=z zOVd-3<37)V5x5u@9R3WNmi-dQBZ2^qm)8HlL-nJ}*FUp%r< z%2Tp@BMd*Wr;hCcZ6`G<%Rj?*Gx0k{ScD2}O^#=3;?AfZL!yW?!~r2d$m*0B>X0U5E*o?&^}0O=;p$&5kOmOEZ^lSQCL2 zQEdg%4&BM>dzZfrjY+$(nQEo|Xp|x|1$bi9Q_O^--Teg6S^vh5O52sCSV#sjafS&t z&m?_qX6TrZ&pIqh0Z|t z)ea|^N_?5iBrDiVk!1wleJ0NFg2Q|Bz@@(}!`E~X7dM)XQaJ4sn* z;5eRgOl1!-1O~5ZZG)K`<&h^!P`odR&djm`CWT=IA+v(OAW9M}=;5OQ4+WEy%B!;S z{h~_w`_2fGAj81TtU}5Pnw~T;oTz4|E$nF8G8PRAT3?f`l2ZW+oZpGo8dANu(n$$= z?;DpZ{h?c4-r*_hTaAwub6>snM`4gCbG;@xND{(Q902$-!znII{v)0OPV&V7e&ZvnTz z32oD5xMx=G8_jDmIHp5`JF2An&TvG)U>{KcA(MOz zPM=wb6#yBzld4j6KS8+zbCWXe`BfZz9c#F249rJ_LK8b~*bm;=59*tSgZKMKZ+tv*?o( zXr>SOKlw`8hl;1?S*akNGsrxxAWvo;n<^xXzGAB*#6`T~wDEB>NB58sjC+(=u#r`P zr%az%R(KEL=FR_#yrxR|1W=`bb$!JmW<4HCK093O_Pe#l`QhpD;pySQ$-%vMXQ|># zGjp}`{ozQpj(%JzmrpO^)qeY5R92UkKm6q9{UI6ps@3k^ezVfL*i)T@e(QOsTW_~( zjYe(It3~~@OB-wd;XnNEDzjVp;@st%-x$Vc#1FMTDdb0Y?oFpykWfX|twsX7=ckhy zY1gJJNerUcGbj`>XD}F8yLXtQjEa#t>l(7)VlM2PKgc8~uklj!(@KlF)aX@m6Lgab! z(H?a`%;hq)oXIMe!(6bQ(jvMKfvi%lap{$;&dhmop<#*aLXu0A5iUykYz%VdmC5K8JUM+uq$uSBKv;+zu`1T{ z9U`*zl&)x2DGYihfbjQb%WjfD*?RGsrn#99t;XaXA^qh3{r@9}y<83@dntWtXGnQ) z<`D>uX-40v`_AmBY1@L>ndVu{t3FhxtEEx7cyj*yDy;8+S$XZ&tuG$@Y7hr|Cgti0 ziG2R+f3Q<)bvAEK-~Zs3t1CN$LAO5`^oIze;p)Q5_x|obt!>>MM!5Uv6YbjFx$@q# z-5>q-cP>Y&a8f(rhg&%&DP*TKq{dTZcVtFq6dF@6r8w2vn~b~oVGATA0I6(~w&k79P-va`)Gthz7d{MIBAJHH z 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 bK~w_((g!)nq)W@e00000NkvXXu0mjfg_%nP literal 0 HcmV?d00001 diff --git a/packages/tools/tests/test/visualization/ReferenceImages/FrameGraph-volumetric-lighting.png b/packages/tools/tests/test/visualization/ReferenceImages/FrameGraph-volumetric-lighting.png new file mode 100644 index 0000000000000000000000000000000000000000..70d214ca12ab4fc435430bac686ee43ea94e711d GIT binary patch literal 161221 zcmV(`K-0g8P)ss@~rD1oJ`m3(PsY z|LvLHot>H9RwcSbR#sI?iX<5f1|t~aMa0wMYH15sa06g~`@QeIAhU|b;C*m7U@*V| z`@sxwc<|#N|6B-&DEyO#jY~n}*)WM^BeSsZGIa&wA3cy=dLnag<^Ec+>@Drm4ya2K z0f^uw%u8@edCq`hG3X;c6`qvb$-*BRn1)VQ;b8{epf&d5+iAuInwVau`wrZGkltYB0|zW_6I8oeWDe~e!u26Kt}0|e_KIubCq z9PzGPo^XDmB3yg|@#6yQF~TNb0|ES+kbf|cyU74%Q@L-QGAVgHVxKMw&ZZwvg}j(_ zYH(Pjf`-bNwVboYLZ%2u?M?>;Jq2+}0ZHi^awMSwjYBn&N*{-dJjN)oNNX)<-eTyj5%;>{C^$PAC`jx})a#|>`!BY9P0$ctyGf686G&U@B~2 zy`Xvk()K}J@ZA2B!C_&uSh&C-w>ZNPRM7zbQ7{F0W?-jFw6fF;$U{nJpg1BHK|z3D zAJ?dhSbWL@t*1aIDHrqR{%6x$&%TH=G7XEPAnp1pE{eB>qC-WkiGiPa@s%y2wb8m| zkAG?bK!M8UsBA+iSgJwEW@l#I8<^fgs|t3xCnrNxiZ`|f@G((|Ed}a%;z@^zlbxUx z<`;C!4;+S|!PzJ=*Z#8tr%AaIvf_DH1d+>VJTEOl0r1m?68;*k5k5sKh+$|e8axFX z^l2J(q;b(}P173L3S^g%Izv%Wx$oOC=fR9lgv*=dbiBD~z%G04Q7)CcY=z z`od5aB$qw8G^{tq=JTQ;y(O%>V_0u)` ziqL78hUnl7Mn{KYtj=_sj0^j16-C@-=9qVIP6FO7$}EuEC}?J+FZ_UG2sqS@T3@so z@}==2r0C!RgLGXmiR2atwau%ltO7f3;w+k{)LjK0q^;-6XO7!he-;89&Q-lcAI&u5 z)yfrx_WIgo`HJLhK4*YM#KPdm>H)K_26j!(Qqg}&2n$<&xhW9}FP`U?brv9{Z!0*1 z0!~Z@9MVg#z#oIU*=cT}q@-fkf7+V?`(27sr0&Ih`eUI_G zPE~}C;vR%H=D}tI0vNhDX((>8q9LNOF^8Ac)Vy|r6yAm45U${gAd8MF-YyODQZmJP zfec*J7fH9TP%91?j%E&r{SCH8R&4Ve0;;A$vEmLZFsB_lTZOv{3nAALYKu{To`w=&p9?#D z)6P}|1sVSK1oz}9sJIn$jZ*!NXX-whhARr=qbU88w$GBpIAh9qeFXUOnEeX`@{i8J3lbux@M`@S>Z ziKkHMOUkwwg@&#JPFyCGpt(+K>O-wA`xY02M5KabcRUrZfq_S#7Mwxq23Gi+){cb- z8=-A5hSc8TCsn}X3ggd==S)KIRv@Cw0HrB~$4IrafMYPS+0#WqEW&mgLdOU_p_X9v zl?L{9q>Z|vhw%CYo+<=R#m%)GG97Y#;iev$qMpiFI(?4o^?B_tYadqGSKpr=y6&Y4~}|ST_`wJDTbnn!U8Pst7~fL zD$NQQ(i)blFyiBIjAV8*>e|@l2}hC!4EvR93SEC|JhLNa(#3DZAJi5$WfZbc+dn1Z zvY>tUloScWnH46j3F?<@fZ@;GEr^0R6$;`P@*W}n8ZJrVjOHe~mJFvU8c&#D1|q#g zoIwe(H~4fqfuZP)n|c~ovW%5?Hz0ud;x^UGxou<{LrI~)bqQv>8fsBmBv^UGN*J z(cm_hSWH2jE`6~gu&~jI0O0k7g6o!}gE5KyD9A=qwz}AOa*Hrm^gVja zULVAnH-DZko$1mb*Grx|J6i@9bJFFAbH(3}uLema5OaC?*`!~HWY}sN@ zp2aQG-7aY1;su!_vXq^vttT_*NKOln~+iXSL_!gVD-S|jX zmb4&vilZ34Kx_ABExs`L8G)0cpq;>A`PC6?iYOcwP5kRcUjpP~2~T$)azVY|FovEc z7Mj}GtqP~Z@-(1vAbikBV3Wcv>%lN6XwUUQA4kOo6aeoY%+Ol*xMZJ21Um(AJ}%|7oKKBT#T=y81$=qwR7}GuMzTIO1dD}=PHi<4g~QFL$~AY& zOo@U3<|$>0GXQT3<`AN9V+dg-Ea=VhI_4ZX<+_CAu-U{vddZEHY`TNacP`P26x^bq zR%?d^DafyiDfkGcg2Pi8<9W!Xm&LZZKeN|BbfKUpuS!evey<9 z@rv!20mB+*Hwq9FP&r5~cF0QZyv55j%P5~Z55XZLVB(B%S;Q&o^?ZUmhQH;O!guKb zLOfmj=GT_Yc0lJI8AtxYh*%r~^NdB9p|78u^s&Ltd2=m4ED+-jcv ze-@AyZEXwSTo<%t(7cyAX8_aN#&}r`M<`@HUU=s>X#Cn8Nj*R=;|x?VBN~Azou59o z#n%6d1k5l8d#0pnf_T;z;olo5#exo1bZ?GD_Eoj%x=ubl9TY5rdA{7I@cM*SsB0r7 zaI<)~RQ|8_2>lXBB<6_DF$=kG=tEyWcIhQL6nGxx)^3rl(}jOPn+0N z7JUMT#@m5L6}aQJjZ5TivFVEs@KYbWhA&Z%)tlXsU&~@#0`naG0W-|Po-VUpg)I2h z>l4XTXiR-`QBU^+)A7JZcN<#Fm%x~|D`8F%6j6JZ zz;0)>20YTdT>4CRi*yaz$Oz`t*en|PonLVtVI@YkUQpC$t}ZF+peok@X)9nDUZx)8 zghAsKKsQm@oXtfNQ?@1++5&5t(fpk@!A!)!o|<)7g9TX`42#N=P0#E^K|UFm9^9jw z2iF2vXi6IgzOo2y!h-u^o+e?T0g(%n_@zNUn-HhpK_jf)2L{M-#Q;0Hj4h)|ffA%C zM93fAhs00Flx}EVMArkipPke5hG@@}a~`*A->j~i7?EfzVbOCtHJ@r);V?3LRbFJj zT7FU&!|Utbss_fOc3ZA?5k~rCPXKv4LbzDb^JVl7K!1(W+osfd000mGNkll26!=vs+I$_mJY z!)F!{m51KP?Y|{B=17D=2Tl}fXl{lsfH5q<69bG3T2rhl8XU`nV2(b`2+;2uHTCod z(_XY8){sG^Cyr3&D77ph$Jro5DW5JCXUO8T4vJtwCLeHJg2UnI!YfB&D1e15Gdn&B ze`OJ#7HPPMCvy%@1%colW2p>Z7;#lel&NbA{XkhydH z9IX1P(Jd@@C;)MaqW111QmjRUya_84o{b7~Ks~_p84mUwyb9n_5fs$hp9Meg zVj&F_3I{Ngrv3*;r_e;0Z#$l(@1v*Or$ESjvrs?|0DF9)d}FxkBHU*-lJSf#hSYR8 z^+n=h&m9fb;E|Sw?QK4kt37d!ZZXn0e2*C`hdfkO8Q=%{rO??TT(@5c}k?rKvL6rV#=}9T^ zT^{&pE)JfN70Ggk+RPEG*9ZM{veBQz#PifR4{MhcpEc;*`^?zjuVdY@)%Ljl~nVu?<*anr<3T=JHT(zp^$C{p?7O^=Xct@&jLnVHgTS0|GHpQ?LOeCX zSzn)E!ip#GCE0h)$qh9lPO#U>UN8o?lFG(z;irIxQ4SmmTG+wzC_osc7wkq9KmSYnZS~0AUQ<2fOtTgnl z2me@nqI~jE(3q?sgH9%M7Yedi2n^t{kw)0O7617P2%k2c3JRk3-qnfts33g7ggE`{ z6AnhXw~#BHHH?Iz9M$DikI~XES$u2}vdK6OnlM}%e##!_vvO#rssTB!-sOn*Xmi2p zsi<^w!a;z?D3t0!Gz10$$*$*O!#|kHI+K>gLf3Mjl~|L?yZ&k<*0>fKk`_MYB&WY# z{L?NCT=b$KSeHyPJtgSR!easg6h%S3+D;VA?tTS?QxH18JAuG$8O1YjxLN(clM-{8 zeA#GPHz{jg3&Gdj12bvi&V$g1jflE$&C`s+V4{k#`GcX`75h$^^_~^%$ACW}n@Gv-DiNcIzu3oQ)8sSsFYc zB03)GN$9lroCV>OZc<^xiO!CXS9e*%!cNGA{msa5Gkk*tvcOhAIx9-%LKGDV(TS<< zRz(Z3(4)T$wy8{7N-{^xcoq}JEDKY+*%}C%y{=D8!T)p&P0H>LrH)V)smfJhU0{E$ z(E6Q)T%FlWWnrG)TaYF*E3>0!?Rs?HP4!Bij&7OA^m0pXbvl2x3k zk=E&kekRG&0=nlp{Aj&AHiw|<59Y>jT0sVRI(i=13&%C zx~3x+*b+$BE$kO%_*jA2$cA2zQDxd9_T}G0WRo|n6kCQ4iuz$?Ob00 z;q-+0TVrqr*i+02lNl)w1y4A%Ookq`i(Q?NKR0)MsByYQLvO#gZ_(SC7CyVzCu|c< z8H6eZ+-58C=ZC3`kV0ULf=E~yHcd7;Lvv{mTqx-7IhuYXVL|~6OOf_)jRRMy;t;6vCPM(+Ry9ZHx3tKF$#dz*24E*3 zmzo56j42#D#W6199JY8mPgjEJnmbTT&uCKo_nr#iVj(6ehc7ib&@TDw$^=Ci^YDZE zdtix%)h~f4i$V=(>p`?$B~%yFBC&TTiy?p}vkqNmE~T)jVW+3TluQ)#cTruiOeAZH zgSoY{wuNO#D%&vKgm!!=P!3c=qvfeE*6Hmq?PShT z9fkz6JPa<((?_lWR8Ekyrf!}{0CUm z-bTn0C=`U$H3~$(Qw}<3K{$Y?x$G9U3C*1~W|b}XEWgsmsz^g-DnK468oE-$$c#r~ zD{GrWxu!E_X2RM`q~-D$uhS5dmwN=}lcF;l0~)PJ9-WFr5^ezC%%%SVsurzlV30geP!I8WTXKh4ZEz=zoI(oDd~| zbI>`=BRa&jG4B|=!7DRAo=yW-S~$Y3g%78NxLwY!+X zy2iwTC?+UUQXWxOpHh=lfu9?mGoCu3+cgR&=+dO&d;`%nX|TfvXC_idO{M@>q$^PD z7r=pnx@<-X08^r%@V@f&G=Z?-$o#b=7QSl&GacRpz0fTr0yydxQiMIh*R_&uP-cUs5DLI<~au7IopH7qu3QP3>LIx^JtHocgs15Zbm4)FsGn~cv(VxX86XbYw# z^CKWI;HULBH#CAhz-QB7U%5t4nb7+owA7_G)3b7vH9e-DPU&Y)aXZbtYm~pV+n$W> zv(Q}V*(;&LmHMTZOcs50P(wlG7me9s-YG2>e`LFpJJQ9ODoSM27%oSw%Gbt~5hl{w91GsVF{iRm-oDKK5u? zr-qBHcFu01HsN*SH0U!b)Ln>>qM!jGIif|`sP*RRRA>Va&rw@Ir68TK-s&W!$Hf1P4RSZdovB^-`N@FTL zrCByq9%}H}Y;BRK*sk=Hh#SpRhnlda85Dx| z(eo+2a049vf%S_X{G&O!xm6L&OP?qL@E%Uu{~7ReCkRRGj?`s~}Z4P8ghvb%R_W60D-u-NdGULJF1qGd*2kjhknySp`z`&s(7*+Dt zICp(SC4|%$Y9#o|A}mC<+oT{BM?_Z-I1NH?iPJDb_nlJ^96eZw%xeRtBg+9iR6=He zMo3>0J+1sx+Dz30W?iKo||aYgSIvBAK`ubd1_j{=un z=0!dOWeq;y>L+=s&)GO`5+36Z$WpGN(*#01nHltJO~uyIt$SK8KV_O3nedBzn<7@_ z!irQ&M4CJ*M(C$+JBAhyHbt-yrXd5d08D^E?ep=#Ne+hU=k~cII?mvxlMTtnfiKA6 zO0G&0wlJVIyNxdVN*kRMP)Upi)JxZRt6P==7sT_Ky(Z|9N13WtgB$xs`Ln_eCKi9; z??`0OQG7z~G5L_s%9U}`k{j+x;XPiV*;lC6AR3N5X{&9RHQ8f?^#t<(8U1T@}m`rBZ;+V>T0_zk?jt( z4^E@Wv}qRU2L9fl9l-6j8UZX9uA$0p)o;NNxQ74*MJGa8DVan7;I;z&_-8|%R?Xag z#i_3_TmbgixqAk9+z``D!>@p_5aB5pyO{3jI8DMCU#0l6Q#7ci2Bg?7%ti6s>4MU> zvyuS@h6Y4kWuTqXC4i;$Q2|LDWq1NG96Bq*fWgctC@@ip`eDgXWe;R%6?j9%wmI~t~=B2Tm!BhtNadahpJ zJT)OtOw$@?!lBjy80!$-WhIJFHLPKafVa){^*p1{q$D8P%6=Bc44OLSXnd-nG8FU^ zCqsf;Xq4|3-ek!t(zF2`Sg0vjnwhjeWo459r+bZJAT7tRU^xdd*)7 z(@-)gal>9tb{3F0`~!=x)reZ}GBHnG0r>EY7FPiLSjg1K@*CUzHUT_G5uR1UkiN1A z&xB5FKAPn3C8u4=mxrdnLVKtvCWIZEAiK-yVxdEb&DNN-!(!HI000mGNklM0X@%fcI4RwgrP2Unv}FQ^Kb zfMFM;HpQeyVZthvR>2q%4S~ok>_u4$c`AV1hY9t}!oVTQ6LfH*kH7(DIlttZFT%n< zLnPHpv+hce&%|1PKo!J3CP$yQZ9Ad&Orh9vvr-Qn+MF}-z5>E8HJt_ixpc=_6qIW} zaRQj{Y!!QhLis)fFkU_uz_Li?>qGv8pj?@K@rXu=8TcVOC&(#jDw`@h)L)`!)ifsz zl}Kx`l)2`Oq>6)hL_ycQ;8+_I>0LpJHjE9$7SgRxrVIdJz=KthtZ3p36=aVLkcV4n z@ehlAIymFyn}vW<+_n}bFlj&_m?bG6kw>91=#VN=O6Qg0cQd4NN!`WHPEtLtUm2W#D4cAcinn710RT6hjcEsH1=% ziGpP~TLHUlQ--*>v{2Ar69jN>U{N4VWu}s7(+F~pwHgf*&?doF$}$ACOY)0WCfbX9 zzm%-B)4+y76rfKuKrg(f` zKZ!gsohkU`O~+=)9>*7&$IVJpV_`Z%GRrW&WQV0So~hPD@=6Ar1{o^M&|faWXdXyU zR!g!>CJ6)*WtSiU0MCI40QBi8MVuA{tQ|>V!xG*oR3VT;L9i68$+id?MJp!M?MZDx zC5$7092PnYrvW;#VDoz7$*)ln_R{xj^(FtW+0HiXS#Sto`dX3l;ihpkfpEkZB9{rs zE)7Bsl;+dl4~y`0G}b8*7MLDJ>C%pM%EixweBKUp`a%{U9t%AgB1^y+^ZNA9eM>J6 zse-mOny0M{v(ivNnH85QGFw4tAfZc0{-lb_XeQnILBhv`K%28A0Br%)CK&{#cQG}o zGb0QcGt|(urlXaJY6znm6KxDuHXktr1%*a~j2;Ex*(`(X;AQPgo2|N&#sCSR7yNu3 zj6xNFjfLRGKkcz$o)u^mp*V1GXaPGpCWNp975OhN0m&k1 zg4qJ0!6C7Pbg(fMs3on2{l1#%y3s-f)0kFh9izT$mWF7EnlOorqqZPgN5-U9EJZ=< z9rsi&blQKhPAu;A5st7{dL*ied0z0Nk>)RHLlz5-Fl9&+C{|AVt>%J3HvM*7g{)KdtMa&*^7d_eTh?i*D$G=9kd&nyOr6p+FxL?&_KkD zGeIT>Ac^qyuK|#>9St~4{;Fa@134{TPoN14766l`K=&oMu`v2$?gGtBLlTL$Fg7{B zSOjQpP5w0^F=hOz7c>hY!nB0u=9KAK65uh=V;F z7cI%M>{*qq1OO+~8@iJ-gEs)i+T-GZ6;&~}604b_ITiv)9;#9Ycm_c7>q}o)Q&=}%->L2l&GR9h=s9Dz@nfPPJ-!ghK2D;>tt zV*c!3i7i}AXwk@=3TtAX0g5_w0lB5XPl2M{Cg!6_Wd_pCc-Z4}`ryzxs_ETy0J0Vy zy%bg!6%QQj3E;i@KJqwY4Ocu}Bg_UKnb`h%gQB~a&s?wRGEU`$u@v+fl8#tKiz|X~ z+?W(rpa>r^0~QuwO9jiKZ50_)@l`|Hyda4)472nP1se|^Ns|-;k(Gh!4l?aU152o~ zqlT1{Bw?n(7KKvtbWLlyEa2Mlf&p~GLQ z8l9PrfCh>*p4L=DD67L5Sm=RIBmoZ`8adUa9go&6fE;h9K^Zir*|T|`3-*NblQK-l z5N@|B@EuR61mtof`dzaWnmusYT$lU+38bj8`ayJ${*X<>>2Pk@Eq z_C!6I+2^A>f+p~klLqYc+Vt9(j_a~H9|cu^lxT^pEodk#OUD^VtjR&myR0;8QAe3# zdbt|pQ-;N#K2_*??My?^=nq^|pv|1?MZ#jDt@i0zGWgW}rA$93^B8(dLqs&cA3|Xd zY%JsuRBJSnfrmpXr*&z^Q(`A3zG1>zf%Lv&D}0A*W068#?ojX{VwfO+{529K$FD6O zo(;`}uzY_xbriH7_6(Tk9|or>txu4tu~4M{3}xh0Qb3d=GN-HwJ0mM9X#PwiOQwZ@ zs6Q^H&_zP3Ns$~z<1$tVlS~QP@v0P0b!^S4Yky(j2cibps!*J^_aVguRjA7ljOX=0 zh0z7pL5#;v8$^BmOeIFIbCt|{zyLoT#t?Y4;<3<#vn(4Adu+D!60A$~R!3_F@EL_H z!fAFP;c1(IR6GPLD!5#oJ?^eSWEh-6F9mV0Z25;rLqxaXJfX|r9z`^ zv!DQDVJvcHW-=0E4s{hNz&9Oak=uko!=sy^B54UFBwLCdpQqMn$6&VDkYr%BAx&c< zqQWK~qh9e(+1dN zS0+X;7-Ns zb>xkzzQRHaEo?#^45%RpIttR-szpKVqfy{&9~RP>7{}AM_n{nBlt(2W%dhtBqO{V8u@ul)CUCRAOwZIED{`JHZ4~Z!(C`0z;k1*c{h8H z5Oa2r+a8-Q#fF++D?H}=mKPxH1bL}XOn3$*C?(|zxQJ*{|J)0U+(I-*8quC+m!^u< z3#fddItrqxi}+`1n0J{{Q$$hJu0@CgKXAhqoh^a!6v!_{K@$;4z!ZSAFY|O^ z#(^(5n;L-7c4=&P(Kwh`r=EAM!zO7=>bRtw=3z3r5T2e zt%ZwB0t#bcNU;L7nLDPvE;bq76i5SXiL?|%LxpL{DB^-X>4Z#8Ccm~zP_dv#lIjM5 zpz0O)Rm@CP*+L=$S(&q?N5d9$@JBRXzhhuKg)wte41KbSr(x>Z)+&)-Ny4&sO*+4C};v@m7?>Q7~#Iuh*ph@ zw=p%pGtgyhf>S2u(dyHdXMe3;WTPORRq*&nJDU+O>Q3R!z7OUygocGFXPW~$!oE^0 z*z=fxQ{2+;I@Sm=e-mk%Fj5@&CG(elDJl2CpGp>viv#n#bHjqdp!e=+5zdN*RQWnl z&|qunR`g1i6o>k%8)yzLs`3!bNpTz!Hd{20l3^-pabVP-5yMSl)GajfrdDQV4q|rx zMndT}8E{P10UWa{3$QihqwY{7$Eq2is2+jM-|}q=HA!;eoSs3jVgs1IeXDd0@jwSG z1N+JJg)J+|>jFaHkkb%=JW)>ofbnyxuyM=8LLf`au4JTAPSOEPo6T^Dh*lPw(dR5R zDBmLFKoQ+v$-$>=9iFV98FNl)cREuO1$_#H{HZSd7%N_`yW^gkMkRyyOhX6-r-DJzXzc*{UAN~f$Ptt@~HgONXwOle!qY&E53+_s>b zfC@qc8uF#WD05TfECZu1YF4%AUx~Ow4M_}B54iEgb`Hh`%Jw2ssOmpviy5;D&vETq z^CV9JDZ-I>pq+#up9y|${4-Xs1fKraC-BSXFLe{njDzbX9lL2V?NW5<@hs@f3oYUcr9}J6G&Dn&S!gPhMcylWYDATt z{smoMCY6Qcwei4aOR0F3%tq#7Y9GX=RA_k^+ti8@nZ`-vAsM|0-Q zqL<#b=rX8`Oi{W7t&usoSCD5;0}N;69HA5ljrjvbK7+3@`zb~mD7wMV05+D8Wh?Ui zpW2Mmlir5IJYoi>c00N}1=lDRFcVJ>f#OV1?Bq;~a46m*qtwV}IdzyR#tNvDZB&6aqaHS}5V*JF1@Km&rz{N%!2x4J zF!3HMkanRs-i^)vv6j)vfsn;EJ5nKH{31?)oqtb-{PW6bm^>XS@JNjezPXzqzq1#5 zrVvOUvHGDmy!plSLz>nb5qnMyaoo3TbLZ zhgqPoDs%rL_sU?Yq)GvTZK3>1E|T8NZWGCZh+r)Ss$Z2u5bReRZNm;pVxi|{y9XLJ zVr>1S+T1q~{2%9X%mDOP&bVi1;N$J8x&2nIV72J;MEi%2yhE5ro)ub{V{ zl9b5In}DhMHq(Qzk!j)#^E^Q4`DM#OoN+uFSg33jlE4HKFSl422KmTxKI)vcc+!PD z@rD>4{Q0&kFMjGqCr~^Q<+S2P}NBvGK!&6pqlk&JuFO-AQ3}H zN)*Z4d$yxk17=l8A##+Cp~#g5$f95hV}?D4h7G4z1i->Sn-ERMsc;?`t(3U71jwbd z`Ew;_4UmBzIvk;pwxOQO{Pjoz?meGb3Ue>0ns6`~^&SEoH*nZ|+MXH~$)>UbJ>*eJ zLbxyz4S>(i8ii9OEWB`tr}hEXv%*o#`+!+qC){(2>-v{_^dISK4I#sU(v4+zStO%0fudV(Sr z@x%b9B?bAHfJcJNkxVgLYLpZFK(vfPtJbl{ReMhYtrr*+TQ|Z9BVceaa#?)P{XkI< zs2(D$1bQ}tEZi;B$pk_LnP6z>?8!1hlGzyV@XTb&2R}%$pFTctlZjgZ=E-xmbCpeL zS%F!+O8^7IXxO+_00k3<0iO9zPNefJ_7=L`q$e;Fr_Jb0KaB`R9bFSefG-}s7{cj= z;_QI)_5S(5bg?qH}k6^Ytsl0em$wrZ-NC)TwmXh!EKL02+lQwBh~7fv%VFHA)^YU+&4Wa*;K8R4`^ zQ?-B%+;9SN^+Ip&EHp%Mme(5)3iu`Lg20?sL*C^SMQ{h9IkT&$L#EqW7>H|>nuCOG zp%&1U2{i&Ttp_?z5DhM4ODaPII}=M`#kQ1LqK;2&45q*-s46r7QbCl>%C-f`R3^!7 z%K)a%jq$IPmO@8#>I@YWo3&*^9rh?!0CSHFO(}Ghoe2m|D)_HH z);tt@NYAk+E?Q)+%_oF2u?>exT<{VBIiPq(=8I^hq%m#SzgAc{*Gi;?9$kU&V-cXR=DWy3@LiYjL z8WEjqPNh@bosA0Azi|P;qpUrItTf3WRPUQx*p#WfQYm2rI_fBMFh&j_)-6F$rAg6X zg5F6oO%Sm~VybD04O`HqL#-y#vJfkPsrFTgJ8Nbu{ivkIw5hHo)Y9ZkS!kqi)PHdYxJR+$@_p$f&Z77vd)>ipe({K zrvsSQrwxrJw<6;Q%{S9+J*dGIow24}8Wk$X*kb@sTnWWL%bx*ZHsjV&5Q#0AMH!e( z?6Ztg_w0lLa4W1gh=#H@3X-%&1g4SkABH)BH=##@Z5KM8BUNh|4+9ao%9(1=u>T-? z`an7WML#5uPyJF{v`aLI0*0^?Ol$nH&rlRTP#eHJfX!hD`T&xqpGGmdz!LOu5pIci z%&t+iJ|*G(ro@@RByu}w@M*k*_(h^VoQ+@f?8rZWQ$?&MG@1wgBr_XyuMz5GOx3A` zXpC*z#q8`frNLk4taM_m2OajHslgNAiB6N5IC^*j6-srY1>;6pdfn01iWIAW%sW$I zCMp?#6Z~lDDwzufQ)4bGQB^IiawduOa1{sF%r%2U_h>@kU`!d=o+{GPEaS{T7y2|% z2RsUZwrD^m5~?k;IgKr1Y}Ts;8ZVNC%ScU3_B{&7Lp2vbYB7dsXoYF5%`lh7gMv6E z3Z^pVewY{YUw*)+3m#9WIN=Bv%<{#M(J9ZmtW;HLk!(ui*S?&J(hiyLA=Q;5fHf;8 z8iXd|{h~Ah;g4!kiR4Vtbe&Hjlc|VMbH?U=Zb{85G6*DU5|rkpRW+uP24{jysuqy? zW_erCEgKrP2th%iPg$rTsG5$Naj0XV!p< z#zO)U=qkd-EXc9{%(;pO|6D|-CO%XHr?V9GDhM45nG(sgAc-*UgEdaQ2x{CC;IOJ$ zc?!Nqh+sLR@Kl$_u-K|0YR=MAbeR^UoRWwnXDice5Hcm7OizK+RLw5|PMho=7>yDS z7HY#=<3we3>4lVOtDU>M0vmc@Px>ScOOoLDLo- zkH@w>!B?BAcHIz+t-$ElER*JiWQ7t8@BHxM#YPJN?9GJ4YksWlYjjg<7oLHp=3QiVj|SP3c!QJOHe z;XrF00R3eZHFpFZUKCMVkhZT!c*p=aY(N_YNew6nf^CplwFVpitV=;Eq2U>;4Xr{E ziuKY|#o1ZV*7b1?s>f+(qrapc>aiFBEs*iO|=7uLT&P@bT zS{OmI1(V1WUnk?Sb9W3=$wUy9rlg}FZ5g59oGy3ihM>`yG&2~eEd0;4y4h**RK z_hN>{#}r$=N2ofYvq!RIL7*qQF}Y)8oxa>GLe0>>OlNwZ2~F8ErtC*&KvM}U$T286 zTnjlQ=y0Z(WM0zESV|Je7hVncM9t9;^`+mf1y)U^CgVieVR5klhN90fU)M?@+3R^i zTS{PUK@C`94$>nE`uqYQ-w=evx0!5+F?NUQn5$YrxCUpgJ5-O)voI@^=rl@0 z?T~bsm5Ss{rZTErUsBB>;omRAN`e%klxvhE5UfQ+dDAu_V>;r_)J#lg<%TFaLly;-px&f*<6kl`A|^lf4+=z7w4J0P$CGEG6q&AE^{+2M;c4W}wJx9b$= zl%HY>eoDC{2M}Z7%(LPplHc4SlBE$cXxV4Y+8?TF+2q>l?P%*(V@{wCHpNP90AK3)nl&G>~%N7K?){uEzGB8ekp&1HhEuIvlO(xWR z+L$U{At-33As9BI(Fm#P=Yav7)&@fqvn^$fv@9bZiDy-uD6k4hjY2R?Kw7$85o-Mi z?|bx7OjfRic7Cwby1K#H)x3_`6;17VFsylpd1=^W^ilE@kfg!}MWP)r55|}T$S)2*)TS@~w{i*qlKjE6R838vrVUj)(4;wG?B?$-z77OzwG$vI3 zU85!zPVenh5JWhrsDr3$DIrjg;iqjeoSMokgVur2qgB07*na zRBBY=4UyMO0{o(*){Gnq(!`L;;F|Q)cmc`Mlv3zwrAp}QwyNkXCHb`h)doCe>!Z4K zS$nqer&m+xU5g*K29VG?fCK!BlQCe0x#q_ppFS8pmjImb+M(OzMz)C*HLnqR))D=R z4E0Y;7?-C@4y}qOG!0o>&~fXegj08(FNWvz#LhQez{3-1Z6wB=GdbvAa@R^uK~Z() zIE}JtNK#gSBl`lXMbbXQb*ZyP0BY zhJslE>9-7tASyHZ|EP>O|i z^&HQTaPWhga4-IOj6Z88WHgrvZ+aw)g8saAt$=GTP{=2QAIypqtA8ROq>sD+D4JMk zV4I87E#&;AXM~90H2zMlz!Ng@4&70bt#PL6cU(4OObphDQsD4A}P>3^~g zs+)tJ_BSw+;$LQ#Q5`{rv&}(?EP4gAw+0QRs9v;y%v=yQXdqd}qeUCGAONcYl^BVz zX+b6OraYYmQbRClAHBX{C3j(@(+UK4cNM|~9Z4PaBIv_ab0gIbsF$vk73G7#OoGks zr|WK!dfF9g8Z#vThZ~TfW)VslG%`+0;J;S+riLu zLiguH<;J^X6n-EpDiuJGO`+sF61?H2Bdv(Qm6QIATn^p=`)m=LI!t7RdxJte2n*uuJHz+v`G9DR6-F#{U005G#gB!9q|VHD)4=3=w52uXM^L1{q!x6mA@ zSSy_pmQG1-vC*Gw>IR;ktPzq8A^YEqC0Gy9W^2qY(bW93>#AHx{@HSBEaLQ;r&B4{ zlx%Y_I>{_vO+-VzvDxD^;}|@XBG7IK$lff>u*XZr+HZ;T&7#OiiauGIJ0Km>IR45F$5)%N$gs z-j^T(i`dGUkVCs6fv%9@@?7Q9_kXg~7~i>dH%7r&Gzxec3?{Y9zQ-%bVKH=3Q2nLl zs#})+b*Vx@(lf}1s5P>MbEf#@d1Yx-GBQ(9p^23%>i~wR0EY8c2+i35DeM7(G1D8N zvlXNrSj@9=4s;t-YsTzCm_?u)?QGSW_TDT&Z>DKXHo!BtFNKxZqlIv)lm%hW8eW*a zN9f>Q1QY?iJ8RI~X2XmJi=la}Hs-r8jamqI8drT$dB*7Z%emF}mgu9I01pdCPRaKR zz{IJFq()WtOZo=7M`Jwp=mry{(={bbyupvCAzcTcVrUGi7(BAc6q1RR>dBJgZKbhc z7vGOp2SxT`qPaR4cl$UOYRIX^nl_1}dNdGNsnmMC?p$pl$_{iw5TzHY?uPJ!>cVMPM;OuEu#6=gk+`b{qFQFra(kK^@T?}+S2f6a3>LW2S)JD*BplTvb z^zR%gg9)|QHd2@(yGe;l6M(2dLr3T+g-c7TVa73z#?6CUy&Eq+qf8$}s=p|NCxw{ESAiFiSFK& zh3R{Q2-Z9G)1!+Ga@p{<6&C9IWpc>@sD(%rPD|#Pv`5a)@JmRuqS0v;hfqw0B8`mN zQ7>ArAm)f5;6!CW(2+02LZer!f|6csXbSQkeYTlJ2IAwVQ*$sm$z`H_^H%A>%mor# z5>bK@BBo1&@b1sv4XTT8zWqGtLQq>!5TDHLhflXFysV;nq(h^DrCY&a5NLxmj!-R6o5wP7=vgocL!#@l!A@*J%?41NibHy! z(;%%?7&A^Y@ARxlye2;s9BFLeSO` zHFHopI4yI~oFhv5=!4tx_N%Xa?eXJVP@XG^a_``?da1iKSDS0#om=;wfB9KN)5@VJ zD1W!_-QQTQUAlUsQePKA{pP11+B(|Mp)xly1WR-pK{=<*E(ik9nhMrAO@UHS8kEgvxnk!j>h^U{71egj`S{?XVVB)*N{S!T$t@eOnjbH1uIEXb1-~mB6^b@ zM7EQ{>|K&B*B^I=r6-^NIOHdS>(`#!Z}<8*UnvjTo#S%3a`VGmFTeI8WCL2n)|*n6 z+jnoTG{(KoU;@E#yf4bNYJE9f#YEC>NfjUgHtG%qK~@Ld5D09%VFFU~EBR~bIBNtU zcWeNt2MU}A%ux5B>oiVgO+0d$4eInsfn6OSR;JY?!ffaKtWKMO6r!@T1?n(>a70|8;ja%nO0339Jncn(h1s} zi9(%j{0Y6LKuti2$F85Vn}R!r+ge2JLW4d(o2xa=%dTvvsi0E*rsRN8pzd8Tc!Lg~~5c7&@mT+b&cU z2d}@BPJ-;4a0cWpab|`g3C$6G>Vz<*Q&d=vakQ2RsZACmP0Tq}6Rf5XR?$>7fIS*H zzi0w%abHZ$!Eu^Esb*T=M2}xsTOB+JMo^aa&;%zq9F}Su<8gm5gynkmTi^L7cOHH! zQ7{%hvfE0=B>mH0`~{2$gTZJx#?hoa5hEy#%E54Laq-=EZ@vBY3vpf4>--7@$)aE> zwOPqDK?s)vNr4}2ZQZ4miKjxSsCc7q$FmStX z`Vc`+oTM?713i8O+@_(zLIAxg1xB>P>@(ZC;Fz+*o|0|O7B;J}C-KzCH)S~IRxS`y zqM%5_8JKatQ z10i#b2L0h=I4Mh{h7y)WWBK1gy`q$6s=iAp3R22s0|E&4l$TbMfQMlAYy~E7_@xVk8at7#4#r2xK-2=X+b8|`@n&<}-rU|l3`)a|bC-LQK90s>GL-h@ z7)vp}^!uHql}p#Jz4-aPPb8CaIeE!la*mj!j#+8yA&f?o!Eii`-`W=_$`Xesi}SV3 zJNE~}(K9dJ5YZAKML~szN;Ytl(4Y?}il~XKLt%k+IiWGOe$bIG3EE9fb0PBfADzmR z;%IG@%m((GuxDc-K|a#DbrW&}=055wSQ58uMmH zt$ip6U|u4g00=43j%!WCY-nT=(bjs%>WkSB5w%b4oZNY;I=USX>G+wwx0y__Xyobf zNA{8q;OU!C8@KK>Y7UWKM;q`wokH0(bXZ#YG@HT$CxA8P>3-2<4=P6Mf*8I#5u#MO zM`j$COAoA0XM3q8Z9QrzOvbwy`ZHwV}yt=a5 zYB$rpFi!lV@oZ#@f^m#t2xgpEyUn4YgrV#V%^x?r>WW}4-(>vbUnQ7ItRz?RQ|pj$ z&Qy?&fkFr^90veA$fpI;YEo6Mm}oPw!uUt4g*MRo@y~IK1sS$nmu*ZYnE(I~07*na zR4^>~vB<|pf*aC`gn_LYJ0Uwc5Yi4PSVSb+&3H#baD2>wrPX2(vfsf#&gQTwNj4Q4 z+N!|jNwMKHu=XhvPLUK5n1!^Wl-Do?`DQwc<`p8tLZi@FS?g8>D&;~<88Gq^wJYc- zjbl@DFk_Y!m`($uqs>O@+)mxjNILUDtNZ+0-;%KO+@+0=fBAPf9-`!0l8#YnD@oDA zvk+w=qv2pY9!AxS*98*}+n?Q9oS$2opSyA~ZtQ;T32W$Kb_m~v@S3B*pj zS*_JSc<;mKUVJvO1BqKy)yo5cg8D#Hq)F$RW~0Rcos$6Pj!-Z3T&(iDV!jof$yhU}53Umjx~Su?#yE zU=rw&$feXk&KpUk0HewUQ4maWCO937&`V6G)d4I{q*B`fecEq&P%(YpLg?>c%p@Zoy!?dS~4Aw(-Mnb0L*wGd4xv{gNd4zQ>CK{Rh|j0Abp~pz@gxG z3S{^irziVG#|j8jhziS#76<9-pb(bBp90V4Tl+F~H7HAiFns%7f?;S5%IqO9_WSMO zU=*QXDK0+J5UZnl2z@}thaEKS}TN2h7Z$e>(4e{SQ>=XZi~HEeIY#}M7~wGTND)H63!s^OpktfO4P00V z+3GT#ilLzj!092>L%(ob7!B(6?3I%Dch=(w10v+>A5Jc+;Z}o)- z2N_ykHEY5ro;@g1hpZye^fVwCLr=2;Q-QNHQ&szuI?}ue2Xe-$syT2rr4Z&3+gam) z)}44;RtJ4>;2%rER?D-hQ&Su3QyB+hX8{|=ii4aQxnLt7O$<(n7y*qK&*f9F2o=$( znXn=eH20~UQpKbhye?DSOyn&-)SQ{1?{5}Haa=86CYl|VPLHSp(r@J8w3AOnv-?Zk zl*`e4`8~y(=pK1SmLCl4Fn|V=x)?%7$Iz@%+hi~S)Wjf=iEqCDUZ>lAg>E1MQLh|;^1lFJMX~`^K|i71 zi#)$Ech`^DDLyNgclQ>I^ZI{t#q;`ZVv`bu$z2ggO^S#5Jy(f>_ z`#VQRy-#m_e0115cYZy!ITAA{eT_XU`k>kR_V>THb?=_U3kh1)N@=cM9Z%rvuf5)G z9!q!Uqpe2^bLa2gyH8rNsIr6&`qPFKKF&oLV5Ih)b0U(~t zSY#m#l>}s@3zpbnPIv-QAmAVATs5=$8knaylAzkvh@o@$_%Gqf7gtO+1XD;F;NcB; zTm%>3vB(EjU92!GFe|<@um4GX>44C~!u|!bbJN7md>&AYGuq?9LcaV81?kYj9z0VRc?qQ0zXsI~n2!AAE4>%9Z#P2D|9TkGIS7 zOV^%#{*_l>|KL|Q%ag7ws}9|T3vc#XyR~ZR{OaQQwWXECg+Z^?>UCoYr4XIoV18xe z;ln3yzWL2tAO56VZ5-@uLQs_s+T(U>d2LlD`~2e%@85rX;nD@PRs;zoFj!$UORCC= zMmH1Wc1RNfvnNRuf<0V0u|d5Cq6@2mx1LuRgPq{LFu+d}OPg;297=`pn9~4G6_;f86Y`wO{dJJ)qNZXdpgg)HQ@yi z?flZ@H)4*cofU`l1!$gAvh+Pm#R@=Fk$LlMc6$B)dLD}GEWta8PH zP|r#1)5jjBogkNaa#yVjlCPY{{F4sy`OWti8?^{!6Md?_YTN7VFV59q(){5Mf3SPh zijGFZbW5S2`b+YEw7s*rwf*+nuin1-VN_IOW4_d0UOHE+wp#~KDlb&mc6+@rqey_{ z#w%~Odm%i3`tb3q-~K^R2?pKPU;pT@OF`{-|KRt2{HOn^JE>ebx46Ci@X>=Sm#(hI z?oc%VgoTKagleb&H32>DC&NK%KTV`SswFn3!W;_H_)J*HdWhy57Y?V6HQxnr`a%KB zS77Naqk2f%fL1j71)hYp3&u6g08#{HsQM2SCj%NeV54kL3k5Y1z(T&lB#NZ>V`mU6 zDZzhw>BMMOm^}Dm&BYATdL&6h=W9T;j3D3#X@?VP`~dj0cIrn0U_Q!`Ul#|%*|Hbx zD^qo;VjQthd|DACzf%`Q`9a?BRx_J8uhMQR7csmLQo~LW;gc|O#l-2y<5BEujdRCP z8Y|pD;9xi$4Z{RM5XeP2Rfm|x7)v{c$K^Dh^vp!>q#oCh;d3v(b9jW?_ung3s*g5r z^+%%HZ^`l}qj9g-?e=>j`VN%j(dzc+yK=EG`AYEC{$ac#_{KNCBl-OJPyWNw#)Z;x z^Pt&#_TuWb=PpShQ9m3UGzg3_GE)mN+k(1T4Mz3q2t@{JO@d}=G5E(~mkx`nboHPO z9;y_ZSysBPY>c63oz!3+YMMm)0Zdrmrl82DLz0WkyXw-N%jD|@znqkMK;<$6M%X1% z0cFA@6M4tK;gtHOM6zY7K{XEL3{%hGxB% zdMdg8urYlEwq`ynDqe(tSb{d=L(-RW{uL>gJQ3GFBXQDtT&}qPWEw|P$vVy%VO@#G zKsZ(>h^mbqu?76X8{a6EBm&kTJkUkRmBe1ZFOfw$QA^=API1&3rQm9Ej=otKovSuU zzEkn@_kX#vT3z3`R1V5>>#tmX?l&s6ITXQgH0lp}2+_9EFexmoTqAF5V2pzG;QW(& zo0VRFX=SYpVyP~cYWV!uf4e^zsK+OCqHpWRLQX6~i*(;67L`2bJ1zJSvOQ-r?aDp}l;q#E2Ii)7_*=A3N-f zUU>DjkAD86PXAWDKEHAC<;Fr~eqrUoXFo;qncsS2?(xHY(Rnb!(Zad6&RwYN-G6v- z8o5ZHpD?<1!gT{%nX2U>Uf@xb_|+x2x^*>QL1B+ z8~=b9`q~nSor~iEp!+|kAGSirEkSxa-#kKJnjtCOJ+A1bbJ$wYWk10};HTr97O*0j zuwE7vAcZ@STStxxB{diZUTL&!)Pz4>Fe^g2oz+T!>~S*%;Lxrt5LV7i3Jw8g7+P7; zEamc}U31zpr@1W3Dr&y`Mks=pYEXG+B<9m6{1ub%BK}+vfSSyvx*4?d7y(S3u6U*k zgw!vJ>Ycne*Ly$vNwYhC>z%jHuP#bW`|$9g3|?K6r=agQGlHa5cJ zNn>zA;+Fj6y`T4GnNXf!Y4gFy<8i-IU-`}7`)_{yr~gY(3eS;|i8`&L=g!yfe6oYp zjdAC}x%Gb`ntT0TGboGDbt+&u97t31{MypB>n}gJ|49mgV4N}vy7u(y?5vR`BGZX! z6qDg#c-ouhhs++3&`dWL&oul~ZNlY9Ku$20A1yo!p#E0A9$+t#{3eY6WD01l_zH?2 z9^^Y2{`p|fjcqwl$AX_*28Ifx5z|0sfg-1;S>7Xb-~^v|Rz#SQ3@b1uv<{jfaF}l+ zf_9KR&(O|BOM|J&)8S@sP&~~pRHU=!m*=(fOjgB>LXwhp&A7`N`(+X=w5>q{7XdW$ zD1C8aq(D@m=abJqzIO54(V+6~FF$Zd)w zx_o@+Pwsqn@!1>aiP@1@Eib;EjR$H6f4GlplY zP1?shyNe5r-M;Ae`yapepOzO_#Q3l=zt-wXCu(W++;jKu{$e!lH;=aBdfDfz34JjS zfLGq6p|Wti2^WCcf0!bKYDOT4n7CnqpqXlRihnwB0BAxdE!2gApck0c3CyiAs;0uq zn6a|XQA_h78)HHpm)Ld5;+z6h_HHgH0+==;ICPNM<*U{ZKL^K298@ z(KHDkb`@z1pQr>Z=1qM{AW6^*=^jxQHCe*!AbFVHCO%F4Db5W~x7cZlo<;!P&a>47 z9e!LE!RZvR9~0I1RNa%pgrN=q%nf|8_cC27ORP+h?mNA4Y5izWlF5GSyT7@;w->W$ zb>$kNIBxf1`5PCWQ4>m~yl(&UN4;LZ8=j7KKE~I$m&P)$u3iYra>;MJdvp{u*4piT zAo0K(I7y)w6Y0P7pkQI}Gck`HN5v2^q13A>PFwY{giQIu zt_U9qsSoy~C(GFVBOSmAC>Df7oAInEJssA#i`3z%PZ<4#s?*20&}|^PHK^9Dkj>@GA19|4V|Sy z5X3hh-ww^e!8j~pYj-y;FdA>A*iR_*gP4^TlgL^X{l&{~Hb#|?KD__h>(2mWs$Ygb zxP4nX7Y9S=4aQg3Cijm;HNg4#jk#)lZ|_M^Tj=!KC4o=&cHVmD59;;dU;ou#%m=-_ z-G|a_U8qdvH!eJRvNbnfm+O?$pgnG>Pfw`%tNOxlT-W>uL(`yT1IB=twtxnEI@*~5 zAd^=hsHXCzP-?&@y#gKlP)S0KLgYXF2B6K)1Z3Sw15|>7U?GmiHaCq6FDXWP0dFc4 zr0`}406O@wb)h$eOXicHprP&zNrbk1n1Pug741R}Q8VV{Km5ag1E9IcbHjE&(8Fxv zBp@`v5w2uLdQX78Bwf}3IX==cAGO7xgAjlKn~GHV)vf6X3rA+(c%&M1BbKI9l5Yne{h1Y4wf1u%k4nOIs{L+KhFhVLFEXR^dELdXQ? z>)0HY#}jzw`5Wy{JI)v5%_P~?qB>88f)Z1=?>#(!={e~stOmjPjrB*54i=Xi>7g?s z_UOL!;wzuuxwX8svUAj}mBNqE?>_$IxOLnc45TG_;nFjc@t_p$#M$qmc>ePF2iphr zY9%xlMftEjSg1>5a852LzVjR3X|{W`ZzFlJo$P>hJqa~+0F^i1tr~xnk&cm+N-h+n zF`$oV5!tNKNj*uBWu-F_mLke-fz>M4oc5!MDU3~J2qHHD)oyWsmk)bJB(USh z!n|B_km|i6mUEd%)s(%W2EPeJIOZu(5H*(E99wtrkr@p_!Rng?PIiv50p`-(ntlJshg$qmlsz)zkT<~&JH9W zqZbj>#YU1cmf~0a!i!O}-@yHgtCddcU<_pt6;ZBUI=}Yl!QS;7=TvoM;_h&~u&{jC z>d4Ha$vFHjZ*3`jO`{wLm{cnDlJt85)ECYlH-pbU|Iww5_5D_-jN_H{%ag-hiJWr_ zfkg1l?ftZNBKGd4?ZM3MsgbQuq%fTsBv}=}K{`9+fJ&P+swbpBpe(sCF%|5YD=-RL zlO*jM!kQbQy|0){Mk{U0n{^voxm(!8Pjl^LHq@cp_+zm!FJM-|qC^o1vi50Jp^yUc zCPTYWI(XwWwt2@b>U-FNu7u14KG&!=h@BPm2wmKal6xb-{2`Z~iB|G=-UR|sAhy8Fj zCsd$Rh3HK~6s0Q{H`doK>>upJJ?e1tVd?PhLS=LyWf%>^icE%=&MzJHf`z$-VZXJv zb8lt!-1^G$&i(hxF#pW87f0Q#$*4b?Ko6_o7cheQt8c!&wck_#pB@OF)n13a@KT8i z*~}m^8z&id+76O<=`n6v&60t6fV)ub zz)?OhI52N2Ec8VdCKeHM5}$+|1;x(`L7xy?F*vO}c5%Y=sj7)-1caxeH@%owh)_H3 z1^h_&)RaAHpV>@IL&tBHCH|{oib#vums(Fq{BXco7-NC3C(`V@tYK%g4F{9jR1}c` zKQ@Yb_w&I>T6jYK2PG&;-=&1Y(BvCEy!W^yps^G@zWvcs zt-rlHJ~-~JtzUr2a3U(Ji>uN`9F50=$zW0n$~atDT%U}gGb{~8?W0!fl^0)cb>ClF zJHNYg?+5?&|9R5i|MdQ2q3?)Eu}n?ofJ`02TX$~WJZiPS_Kk1EmuYj+rw}7tau}Pw z4K;~m@lSgmI_Qxw*g&X1P8x4^Lh3TXY@H7&@>%AcfqV$e4pQSo+(7yOOoMY%W1$h5 zi8ZwqNDV&VsHn=YH6ERzreo8z^K7USdFRD&g{D_Ium>!fssw?Z`7CHAn9QUUvv0b| zm8TF-+T+#MQ#FJ*Zh23MD?;gd5;;YcIhdKT&1OPPyL50svIb5rXQL={Fv^&)A_63xBtGXwbrqRp@4@FUJ#%IC z>ZOB&or)Ny-|iLR$LKMbh*2N{QIfXW_}s>Y_QB)&xHcCInq3@@%Qv2Retv1a+uf^_ zYR9dn#F=vo^O8e%GLR0^qrK1P%d&Rmpd5bH{>kIJm3m_|82{#XzrVBnVDIoas>KA7 zGuY7TnP}9$yZzw$m1hRM!-e_9!=nR*oC=u~1d^pY8{4ucL!OavKp=p_1cY?H=m15u z%)#t|D3qcjH%%kRQv(j_u%M!_=#;S#EYvBcTd0AN$;JxIMDe4TDTitv#m&G%(7_LQ zLa-E?x1z%Gl=@)LXf}BfkZe;E^%eLNp5SgsXdSn0;o?b)aOQMFW;)Z%j6$O9goTBm z#|X|6LaPYJREz5d2O?;rhicX!fi?kzVeFI>Ca?RJja z-6wkoFJD^jhI~U{9Y?3il*47hLHJQ63`WCF@9_5iZe=i#PRx=h2T%5oDy{alOBY6+ z{aP@oHx~NCajVl`oS%R3rPn{ad3&pMD809G-LNX4I~4uVvpK0H2J+qnLdAN|F1ufCSH9>uNniw`9e z*i<`^Ul0CeS7{`G?y;ni^nn_RD1C6QWT3jAjeKBszbuWF#Xw510PIxokMg(SFq0JA zY|&HPHOxePwhN9|YZYPMlq%s2#mqaKn-w$Br@=Ydi`*($w8t(~WN4o_ zF1|AId9oAy12weLjVxN*r60vjRE~rPiHwo?C{oKK9>5~CoWi*H^+8F}D2#5!Z%rUE zD3je%ci;cz;zE64`P`t>KeyZvTR&Q4!T=Adp(%HcKLj(-IeZ7Y3x-i(5RO8k3&=QxY-;_N2(|_JH7j# z-4dg2P@C^|QJ^$1M_12n3`^yEw?AFIupz-RHRmvHod59e{@2Uv^P*gpPV`J#c@R#+x1@?4vyZ+WA>A zD+BEqNw^6#>hT8D*~n+H#F@jU_K=q)C_rA&I%zIDnHMaLl$p*_^IXu|-NVFj%Qp}3 zlRgzh%0W24bqASt%CXqcP-I0UBL7H!eVCEN(~=F_IcbbrXw%xy-PBp zkx_duAY~<;hmbZtq*$mZ4#y`#r`acQ%wW)ebnBxBpWJRf-u&R*Tj~UAb?&I7b1Td1 z>l;I?93CA$e!RI5bV`$hqr)fd)ofl*+2iMebKmf?MAs=saDFD)>n@Ywk1GID zzW&;`4)z}IKKVr2nLAH9Wmx^`PdnbuiUAsk*c;xn4^XWNdW>fWYCO7X{67-7qknUa~p6BQt%aPe+97 zR>pmooV{xwVOg4uE023 zn6T%UTpO1j((Zb}&oQ&jve0JFCwrt7&wIwCB+H#AnKmLK(oV?c#dKT0ky3g%AKdzA z^WlS9sjB;br-6W_5ehw5`GOvh-$4GuJDBv ztSxT@qFZ0Te(mzb&u)KQt5!Ca8+%(1M`CV*<;bB55(~q{MJUy))ml)lS1KhjzQ1*J zX?3C5Jd%#nqvONTpgS22UU}u~{ZR{26#1>+{H?{M#`R}!R7QifwT;PS*qB?Ae$qx` zzAjn~JlH+%j6^k@GzeT>T6pf&H^$LMSp{!`Sam9pf}9%wQ-hL>N;A9Cyj1O4J=Ta9 z#-n#618eLUqgLc)H*VP|2rLT5iRrIpndsc77@@Wi<^ds%vjK8Mse&8u&@|6u3xpSi^S4UjqWINR7C@;_Pb1 zQ#@^~;=8N^ynO>{hO+E|sn6D(NEQddSCBuiHpNkN=e?hltF?FDc-O^bXC#O{dU&+F(oo&ri+!vK2vupvzyJUc07*na zR6wSi@vnkL&_=ZONa?d?)wJDV42<+#y7QWa76j<-YRVVt zW}f`DFVirKaK$5y3qQ_HcUj0a$`adl?n%=uC0NW0vGQooRP!o=Y5P)MtqWEb^}IsA zL^5m)VoE^-D*+U#l=2agx7>>4MJ^3m0X~6?Iak#zXf*-?J z*Viw;|MACik*r#)pR0F1y?HxMo4y`^skbxX@$mM~!Y=^!n^>wHcSm3U*4JaFXnO8w zxRs{a?O%EA>)-!_A1u{M)pERmCgeI>Y5tnTB$;9`8cG)1JDUsQXm9IQ`}pCbz5V0e zk1ww;FEr{B2S>w!{7+^aj`~O4@%MlK2Y2t^k5S}sdsCEaqlrWh=_IW^+I|=w(iS(u z1iORqq?=N?TCUEAUe*3+AXgj9RT)#Q*30Ff*KPOO+i$+|qJT>>!<{?fF3<{gj*j;C z_IJ9Y>ToouSA#d-`NvyZ_Z}Tjc6T4Y{L_jSTxz?}322 zua$N=_uZ@ya`;zhBpPFcio_;x%_%97HaEhMBZQ_y80jq=U4YMUL^?$T)%d0XM1NnioYa39`xJQNvl1W zn_q0CiZ#q4!?!=Vx6oLxiC{P!bbIYeP#KNI*S`7Y_I@h`&O{H!U?3f!2d(bc-hSg? zYg0m`#H{c|i^;HDnUk}QQFz8oxzVUg=~h-&whnu*z4i8_y724^ue|co3y&Y%8-@Z6 zq<3@-l^^`0-+%CUN5RJN_CvWYDE~=EDn>6HuC8AzR~85Tmh@g;ICrfUh<5w1-9G9` z92^cOq4g>A1)>ywc~mlyXx;A}PlhdM?Vme$@%@kPz5Lw8?MDw}y`Zuv21l)4|MUB| zgT{)OjLOyerOQ{ZZOj7>whs;~wfeBL`?WXU=?_Os3-#Uop0uGu53t~Ez-Vi3HmFkM zqdrxDDJ;C?p}3y16$ao;J>!xq%e-qDrdqro>RfpXkaKd$YC=xC7A=CUg7rj%!?Z9b z9D1a7*9vHn08VUk+jE{|CBJ!%RD$Vx{v}nCj>$v zAS{F;NVc?bL)uKNge1RgiBn;7a+OzTaaQI{HcTd=Qy{KBb!G1w!%myY4MyXYm8I5k zb76kIQEOBJF&?%D{m!`yZ^95h{P@$azxC$bPi~%Dm_N6=SP`SqXt4D}0^6|BnEUVk z)&J>lfAU^zGOEwPhelCEF%lfMdN-bbu5+*(ZV4>~;R!X;T{;=ZNKgp^X{(JOc>T>+ zb`F}7!{Kpr^X9wKI9pk}C=u?rzW@85-F@`lukKvFay~|mYZotW-uXb9gDAoxq#yP9 zSAH|7%#TOCa%Fy@T3)P`j}D)7yDf?B{Se>B!{InQeSF7{Q=DvjUMy*z_mIqirZXFLt zlX3S+yH{RbT{7?wvS~+(d)lrTV3mv_4&J-8kQ3_5Ui4@^jgU>E2Hp}c} zG?HrJnA+Xm%G!$bH&#pI<)!u2wW~`j7o^s%)oPc{t&T@xZDqZA@L(Vp^!j~iV|5Q6 zHQTNF!o|*U=`a84C&x`(UaqD^iy%lKFor@20qy>9KTzz!!{YP7m2IKPTg_jqWFYWI?9)+)ZME0jB zN8KWR#YdWxScY-u=uxMA(CfCOfhhf@QmD0aH}($O)nMEmOk@=*C4BMPg-LmFcmMHX zO{^@h$mPu5aMEn;OSiFv$)L6%ZByBRI{s1QE0J#vf-xTH;}YZp?rA)WSPaO4rV5OB zje*6Dxy8m8(SbHm2dQ~S*U?sSv^i-EOruN;VsMV1w!5(__4&d~5D3#7f<8oq!m!6_ z1~VoD!kGXMiesJ^>ctxTeGzD6I$N)@*vV|ySsE-(6v5<;{bUnvRnJ6UV2}&A|$D5yiywV8ohF~`g zm((IVFFH^g2O!t>Dhmtqb1)ePVp5ym*tqcg^2+5-r@6LJI=8m`@NuUx7rv4h9()}F zVEivLkECm~wzB@_>#t6FO<9bDz(&0`*Qh}V!-HCV{*Bka*4x{}WIP%Ud!0^ed+%UrWxZY* zRf7`XP`1=wdsv3S7)z^*i>;%b$A_ItV?o-QlW1LeaiO}nuoTqm7XB#$(i@X5q-!WM z5Rr{oqIj6ZFx))1TsjRjC1XU+MpW;C1Mp0;`!!5clFrrxY(^j_0Te|(ErBEK%A1o6 z%ueNoL^dLdIqCNZ35mjyGjVtJyZix=J1WSpAjyOklM(3(@)p`d(MqO8!*rCa4AV9c zLO8l$9HR|3{qT7DF(80EFjEs-R~_?2pW$vc2&oK4AFv%M3iCkkFe=92AQkt8<#M|t zJ)%QVuEnR#gxgNW!;RIIZm)x*X1Tx9>9u;pakn?@4WtmYi8!t`R_cqF+Rfc7=a);R z>h`Ta9WK54%ySz;7|$q?^Y-TMXPy5CMIJP7uJ_o8qz|nE{Ixfe(hL1kN_HCJdXR_xzd_GBV;G6 zn9gs^X9r|>T9JbE2LZ|KhYy3k0WE&uXrHY z`_e8#0JnBXxr1Y9aPeRaIwM|>0mxYwgaXj$2~Tkg%oa0Y4~%Q8A>)|9t=h~^z;y^0 z2yyI05k6*M8XL>tFe6cD%uPl~Js(|Wc900j!$KAz5c%0Nm^@ei;y1rJekl0 zMt$gX55SxTo-Q0Bmp~hqDH9XnjJw?E$&!;ZvJ<*`;o|Mh4|;<^xdhc}r8>6)!F;*8 zu(5XT>L&;C-|Gu=NDz$|%R3?M&+Dha3SH5|ByASDZ z0t$yIgv0lK@1Iu!+}t_5^~vA8`Hg?}aPz^r#$0pfqrK))xm>ALinpG zEM2LU@Qd?+a}{yr@{RVh6QP-R@EN?W(XXhteJtq17wG)4=PMd$(`Ol}G84efiZFbzckW#(g$EtOsY9 zTyYnL^ibxk-_pJT zJFj7wWD4F?VU7t$Li)#VflLU(!>_5oPSRk|nP4e=g}qW5VQKTpW@wjHYRB6*N0acB zvc<)XUccRu3u%L4r`sD%q-iyj%Y2jQB$xW!%4pJf@8^HqY`3qy@OJzNQU|OM`gac= z@9xT|N1uLt`Rd!7TU!%Rk}Gi%cbAu7I2uYg5)rgW1F+va!frc!M_!Z#OfFu$(L8+I zY9IHd-5P$R0!9-tj$F6li}d5k+VTpF%Ht5nWI?4)uQ!T5W6|mjN+HbECODK1+hpDo zovA88ac-^wlTssm1-}%2ra1cGluXdb???2hym(uPXb%f|1>~3Nyn2g8O##*o2 ztXC^>>&-7;sg$c%O2HVa(0v%UEK$DZI7lB!@_=ZhGVjpwc_Rz+gaZQ2TVzmZF*KKl zSWAF(JQvz|$e0#b1)4^kmEVVUn41RNSg7BEsZh`hfnY156QiKP1d8Zg(n+$om{nk> zBU%-JaSpK1q6svu88@}nH#MCO99nq=cp1{paq47rf<*u8lL_5Mgcw$mo5b*qlNqo| znUk=v2Nd-|LSf1Mz1E(}+4$#*F|;sM(9)8MJ$11*l%|*j3Q>}VQEB_AEiFcbv2=pg z<=;|uGVV*i;{L&QS6YMpkz7QSs5uxysXQ)6=9h%Sg{AfGU~vBY%8M^Q+v*OiDyYT} z%RB!3-O{*w@4?;Gl@&PyDfgQ}NiN4pJ5VBE^hN|ma5fxBpc;p-N#KQZR|fr-T#^h? za5xUnBb7in7UQr!;U}h~nKv2@gXo2d=sOz{?jc;m3kwbp9L1qDE@Pybq|=~KoO-4F zo4@@}M5!jTZ!9nT_|N~eCyS7|OTpIO0bS^O{hjap{O^7&&CYJCb>-ql4@N;*y!DOm z-rIci%=PPcZ_gd>-o5zJZyYsSRN->V*hu`P2#G@y2^IqApcv;%v#3_}Q1);Ezz#UF z=+|j)qVqzk8!3+Zj}+DcNO8~%M2DrQ4HMm})=ceU5C{NM2XsCF(;J1VDn{6ie4sUe z-X4%cqQD0zz?fvK@KkGrRPSr+$u4iF7vW|>zk(};X<~5mF)|8&%GuykaHr7HewL)l z2Hq)<>iYUrM(ckHR>-IpMEg*$slpgrNTg%cXl*Q18}wvBi@@sa6q)BL{Qv+E07*na zROD2yiJBCc>E+cV{d`iG_VMnXtZTU(!jV+;5(O*L^oH4g`ao-BJ59{G*2MHt$v zA>*)+t=;X*3nG58T{U zp~O$Y01zAY(r%DFN0EJxOxWE+`CUnIU`5x_w0!ci8)91;;niycD$Um$^R+=M`VKvglaKL^`~C3!`0%5-IIL8|b}4s*#iey2u3o=>HJ zYl8{u-|{ua0V?e2()yNK55^%i5F zAKzu{yXmOO;5IE3NN1hs#TxTj!)q$I(i2d(r|o%!R)8nN+M{7(Oh(^SvQq&CLK)cH zI|`(Ov^-gwtCs7_*RNjRy!Xj)f;Aj1&Cj*E{Yd>`e2Cg8JgcP~F4Kts#6WshN5lST z)Z5)}RUUjETZEBG8h`sK`zElAF4q>{_{O*A=NsDx?Q*&N%KFmHU;b^l&KD{J5gh>& z9vdn#w|m@?&{*w^E1}bLZZI5#SSVKq$0(%;_ql{8BVuIaK`A<=b8+R;uzM7~xe;2I z;acM)2IEO|5gm0Fz1=8Luv7`)H-7tv+k1PeDQxhg;Dm%!jFE}P{sE{1&HWWa31p4OQ{2j=(Hl12u8B_ z&q(FqDsCIGU7$QuMC+ zU_6qz*pq>{h#03!F$^Yf7&fnrd9t@B@vj}es~#fK&QWJ^VX@uqgdbaqzFZMvVfbaG zP^yv$&A3vjItahj3*n0j<4J_Yg3e`PAd~R6vbw(CZ$}27ToIHwIf-7Oj}{J-Zy|+v zS*?_7waRb)_U}L1-nUUu>COJbD1x8L)wr zHiCMH0G=UWZU;61%*3+-5NIG7dSGt`@bjV|kO0*cV1ykY$9$4E6(02V0Vo7@=*U~- z(k3PW7ZXNJcj$Ius6$RDn1LuXiuChlf`5D0g^ng-k%2LVnr3qurMR)7NI^y#Q~!+#M3(zFe#m6)P8 z{N?gzSavCdK>4p4;6!Y0?a?-+O(DU47|}p3iiVbGcs9)>YuCwy9<8c9k>t6k2bA{J z$;3GFJdLMZT(+qq9jM4OAUW4tUAj1+#w;^5RTg1@pIt!`gDhFK%*c&`XkPG@ZAAUks#aL#LO0aS2onVf-P~h~&^Ec?WWKR$78O;9S)Qd}PMi{8t~v;XRp|^a(fE$pt49tr!m7(A1qxa&rrjNc?plm* zMIf4_=L<^=3sy;~IiNX)Eha`F++hja6rQwCcy^3!8IX?wC0X9T_32yR`Nys1&Zi&$ z>f*I4IP90o!T!N+y;6;Ua1^S!=!>?);aHS|7^vdo$`C3qz5e`hyC)eE$89MHAO=54 zl}dc>ObCjq;IDt<8@Jy7sk{-cL1w@pQh38|Z}^Lww<8|aaP1GGeLIu5)#EM_I!GlD zcDnr!Zr`cb=Oj$_heI(A-}4B<&-+63Rz|pord|ye<{QgbUXCBzkN@hY-}&A*A(^kB zLT=LJiF-pqRB8fZ>M)O+I!=HF7J>uS{D7CHF%#PlQ3ay@uL6{Vp&4ilsKJ8fOZuRr zyD{iAVzJGGcmTdTdID2xb7-ez&;mwVrt&9iv2lZ_;cUC6bnDO#XtHpTW*D4=C%CkD znf13J7Cl*J{|wWYfjnj(=#xkF$(Zz)egy`2mkdGH+@cFi9ZmuDU3b&D*d$eISRlKT zFf$V~>x$e;j4wzXqzY7&sp=ZSsp;u29qdl;Ldw)COl(6Hh+UMiW*=K5EuP4+smzry zbn~-Y54R7Ved&!CzV?mqrM+=bUwXFRYeqOymR4kBVvZG9h#0O)@ZI0}gT2G1Zux}1 z&=~*Xf65S~mHPD7XE$!VTCX*tuMoy>yUPbTk$5VxO`379zWt8O^71>s6`7LhC!HX1 z>y|^WCrVtE*!rE{{=U5T!aLvj?H~Npdc85%Xf*2ea9>WP9Jxb-`FeGEaiKqqTWr$X z-g@V)cW&K$+zY=_(U0uEkzpuDm6@cCpQ-8enWD1mCKD?kAzEe2ZKDla;@r_b;S}Eo z$COk}+G4{_=!X%i{$p!%AX7_auszX&B{Z=;lW>L^6r65^YRrJ#8SsoNL`yqXPkhVj%M(9%IVn%hEGg~FITrm-3m2XkZmv-34!JwK7xjhOkVuwK%LE;AKI)kog2Qk2aE z<36JXn;N}QPf}atllg?w2-XwJU@XN;=QHI7fT1Q7PfXF;cxvi0`8ovk9899mtV`pJ zq)+}xH|gp^qgG$oKirvHIKO?|U7ug7Rcr5j=fAms_rq#gpr~T7R9{%%*}8MQ_gS?P z{P-{b>g(VBum7k2>Hq${-}$-_lgJhN<2hsQLEMV50Cr9$?w1M+Q0js|L3EFhn2bWH=ciI^Zxe3&AUh`M^Zh63QUGf z775znO-TZU5CATCW0f^peONKf0>XaH(EX;pftm#JjY}||Aa^U1s<5ueAsvIVu$c;7 zmzrSiWVx62?Mw{u*MI#}y9ZAb7KR_A_+4)P!UwEN0Qd5^Co=bz@kP+B$1Xi`Cxo zyEi|cuh;9`r)mq3FSYRRPo#vC|Ce345F-5%C;BAF|qb1aG0GclD^oGT)7NHf~GDp zG>JyhNzjleU!eLlx=XPz3`Ecbw)TF!vlIKzN5k%1eSSVD?d|Tg+O2lGH;#@j6QyoY z>yO5x`K9yg8_yk$KkD~75KPLW&hyW{C07>HohqeN60M6iYQdlW@t^+id%xA0$YsA$ zcQ~A1URyu++}g%stKF1d)~)^UU!3#e#`@NWM{OLJf?7}xCgBSd@fm61eaUKowHO7j zU48i{fARkd%2=B8Ls+XoqdNC^^G<&_l7`?Y-0U+R_FLySt_Djlz}BN$sSLxWboCBf zd$Lj}WC6jYjpYmLZ=Jt9e|X#i(58UVW$YUOx<;so0-iZxw8#&Q?6ZzBp)`@Fq$eCPOu;;}*3!NA|VU@m<3`hWO zZtcirgbTsj46v7nYO@=HDnaqrC#F!B9u$FTaLbj_GrkI>0iv6-L9TwSnCVDlFQije z#sH=mDLlQ+;><+bxJYktc&Pzrx@d=(|Khw669%HiIPInTxM~sG#QKSrq7@=S`szZq zn=~EcIqi_D3{xlTxz%5b1UdTKdKa1YJ2;IZ7UYE{Y+~2x2Zhj`CO0XzbKrwo4Biwo;s^O_};fDsRKl|CI&%byn zZDa(^{1QOSJc^Vo_PH!Y{jt(l?33rEU=OrC`dOqgaOljKz+S?Zf*eIS$WW649&dNj z$TZ*@9SnH6kS-VefKmNcsr-Ew5fL~rutl}|qTY;|oR_En~S*W~Zq+?=ZN<4@k--M-gsHJcKMTAjgg9DnFGK4=C* z)hTUInX^9`59HOQYtQ#bgLq%4(43(q6(eo9_WqU(*XI@vjt|D8p7fqdR^9F(sFqa= zr*k!N@c8pLzy06gxO?5JE{-~H^D`^_Wi zzy0i!Up#m1ij=K+d=OOTyPcy*wU;(lmM@)KKW??|-@n%$2Ny41>a>o+S0Q7V49{#! z%%jzn)lvnC@X0D?`sR`#AL0cy3J8^GX9f!bxd0el7dcWrGu2;wKk>sDEh`%)XjgguP`xBi;M$~KAeaFUK0AwH==Y(M6n19 zn*_^>4ZB5R0Z;2rj$|er#=q&h-Xu*kiMMpdW?8rgG7&4((s3PufHBg3ot2_`HW1v^ z0+SG>#uBJvAl$rl^P`VHyLkEHg7tc+wD|?%G&B$v)Q|J{d!-TdZZ&I`6neY*aIAOd#&ijzOV(O@AXEt z9F681^Z)F>{paug_)l8l$1#NTf{JobDUI5#y!eq^vV-(X7*754vyn4^X=$5K;3Ttntf^Z<$f>Rve zL_4ay476h=h{mWF8n!91p)knNu$_|1V1SC!}j3}C}Xu^U_a#X)@2hN7XSuy5I1IRpk^eIC6j8U5` z$DkrevY11hn8s)DBg~JV39FQeDk~NSonK{BBB|v=5%Z0{rZa(x@ zK-!9b^S6Kc`diPY`#EEsUV3sPn*!Cs!tk9ckUoDSb+u$0n? zZoz2)VK&rRR8W!VeChkC(TU16Ft~_KM#(V%lAADlUR?n$z+Q5EejNdEsO^XCJ*kmaB2~avl1J z=V`st%0W6;#1tU$+J%j+JGWlBx-#kR?zJY-+1YYEEP!&e)jF=vEkF0%%dOUatyW8g zFEt;2R^NDbJYJKMZ|)t7!STIEpWglalk=BeUD+5N>^~Z|!}kRx&Po(4%T+cUmjud1 z#2ey`2CqG(fRHF|B3h8K#T#+a%e%u*QODk^f-qyp5E0uP0cNBf{ zX((GF{62=nzfxqqO(FwM8rh?v6e3uZ_F;_XYm2qrt@}f1N|x)Tpmg!vh0gA+^Go7j z_rco6GYfO&>Yx`Ig3(Fd;rVXiC!8cd5nyQ&?MDp{FP*Ek9^71AY-}GkkB5!tUU?D8 z4jI&T%OrEAkvFhSw+jVP9l{k*Es5ExVa8d9J*0C)5(Z&?$R73mFNmfGg}x?X zJVYoo1J(>deK2an(2I6FjO1co9^lylXPN2swAjW1TTY}NE{K98Ljkml|FV}sdZDcq zBc8Kp^88CrKiE47d)F!sMjDXVL`OI;j0B z%P;0Hm1$ZKgRkUO{qQ5P@k8#~6R!uN-X*DVMr3y1Tq~;mWn=|MdU;|7_xIs@zx(Z4Fp$pA z=&kv%QcoT|3MPZSokw?Xzx(1#->B89t!5wM(?BOO%}B~3mk%#L|N73}z7$)b7-T!7 zkj^1)T)!rpsymdnQm#cI2#_FZ3(wYRl|6f>J+kA4f-RXu97($jraao0MFH3j~ zTe$hC6is}>J*?r&52e~942Oa*)F#Kx5Z}hb-rDM7d3dn-`0nERbMxn4DIGs5m&(sP z_gcGkAZ6OwJb>s-)Jgbt`tZy1m8hSL1g2 z(K}gYJ7Q+f83-p7stNB4b3l+U4FCb%%r(Ldfea4mC+SHfxQSK`b#oIG+#0_+Y%myC z9QN|CFc$*Rh-3@Vvv?S@ft?II89i4x`f3O7^WT;z|rV|mGx1Pgwr?ojIV#i%o!sg&J}(iHq{OZ2qTh=8O6u7 zB;`f#ImB5imCE&t=XM_kqrqrlp&?h{2BW!py*^4wqNh>!*esO)R^}>8FTK9Kb*DQR zN1w4RNm~$0RVYbSAAY_;+E?YEwEGu-Qz;Ewo$>jl>abT{5W}O^k>p$|g_Zr*_kZwL z|LK3}cKbC^>Ks0-)=CopL;?Vl@NAcI>BTo*ZFPG391asfFmBsyfY-v007GBKP5N<` zgI0HLIJPH&_dfjjXwZ@V(0Ela{3LyN#G8mbmqDzSAzXo!Yp~%-G(lMm`jc9{dTu$` z+dGsvd*k`HCBDwpYrBu$z46))cen4!X+>@6$|U;ieRX*qO69fn%d)bcy#Jpt`nqB0 zvKG>nS`Ob)EQR)a*m~h7pGK|L(ehj+@@YdlsY-edXgEh&A$=2{LpVqqr_gKTG^`^W z>P}H0VrUJD=$U7u0hYE(R0SF8KKfG#@MZ%)J=#Pya?gl#UFODv7t(kL1fpRyWOHDi z3ki#b0d(y#Gx$-i5L<*S7Sfl5ya{N^3_-o$U=bGFIyrjCa93K9Cnc7@ok~wx$bdT` z+59Q&u?gbnBCPBLvD;96%$DQ|yJ)(S2kCR9s0iwko_VJ9sNKb56pYhIwfpf0ANBf! zYDIKAL8%;Ex%$F*RGXWN_lk_7v!UYyqQ^>8#5i=&9+r&a24R;kqk@f+X$uRj0ur`=)uweP+%luLi5@$UV{;|1upTcz;4?9#z; zt5S)+d7I8I!WFtfb75gw0-dZVR{ z7kbUd^=hSg_&D-{mL-%%FM*WhZ>d~)`K^Dl`S8~M?tQs9E1_OK1PSqTLAalEx7nYJ z<8L&BtY$jd%>-8u-M+L2f{J&ZkfOJV0DESwIYog6+(gw&oF(q1YSaLbiV6f2N;8l7y_5LH7yMg0-o|I-oOB3^0vW9j}ayUbpQj|i; zg~2w`@a2R78G-Si_*Dk5)E_-8CfY#?#(0qlcJJT0abdYzt_l&fTZgsAVl^l?=ISG; z0qjd?sZ;`KAV%NI4bRK$MHE*=@@h7ZyFH1krO{*@qhR<&J{X5*dPW~_2uh<1=U30I zhi8&?n|qCVqXWUtlm6z`lNZnRv32l^ci-!l<|j}I7yn|Tb`pI{UPO9PcDB;|=Ho~5 zZd@Y~zKjtT6$C)PGNCH9Jm1(lY|_@NR;r|76S{ov{AUl|i@(PkoyV=V$%OVFM1Wd? z&}5ULY9*-FgHkYm+&(yL%Z10_>ec5bHUb<)Sr(Vp8c>%e>(T!GuYK!VtxgBr9m8Hl z))UwmhhRaSF$2aT6KWr<@&i`npK))%p0G7(ifXyYm;L(D&VzXl48uG~Gg2~vJQ!oc zIe2M=ty`csCiB#+&XYZk_%fYj(@Q2sWZ&hs(*T|N1aXfd1#2jRoPkJKW40WS_Ud%n z2p+(rt-$tg+PPV1WWmpZVeMC+vCf8tTJ@o*)%bJ>T{k!*)tNZA6mBp$DL!a3RT)V( zHO`~2{ES0uhfuubWW4|2;%ap`>@6&;_dCtCmtk!DMNhsF^LocmFLmY)?SBIvM2+E~v7q9d>EeVsI)_zc3 znp?hFu64SHo6lZ6F9D*{{H#4Gg`Wc~K_Cq;=`f5x1}_^k+_w^Lmswo76n)(ye#<5L z>QOm4)gAba{;Ktpw(AatDFDO?!at99cVqz}_(_jw{DvRKKp1BWy`fkRYf%}E-KGEl z5CBO;K~ye@Y8eL7UT!odqBg0ny?Ep0etQQhiwo7-e63o7&R+XqFbL0P8;0CUkwq9z z3Ln?c98cB*q0hibtMN6s(@3I0%u7#X@n1WVT&qhXKB*HFAhu)KkywaX(SoSXI!m(q z98;o*w!*?~SlW`(xhlc9T%8Z9b28BD zc1BoUyZqMcuf9TBrz=5KinIIa2U?u(wF?ggqXNR z!%0T1T3%be_~`zxS_3f{c1mLW>Wi;`@T;F59ktdsE{|H9JKJ}<-Ig?$ql4B$6Eik6 zqjwO8A~Eky66YvOKJbf^oCs|I>$K^q=ydQl8r^ZFK3ZNioP&4cuwXsBAhvm%Ph!? zMD?3Hb80>M3~>N z+Gdlh|IhXHQ4Iw{n5k7t!|q|bmmJ^{DbpHsj}Du^_5JVceg64EZ6t6!zjW#NcyDoO{b2u* zG~>co>fVV?!PpcFZR>DbOs6*-Zti!Ex*-5xzIb_mf45R!XtvvH z>r0Mt$te88N820o_41^2{o?bVeE46UJos$w!WGYmkaXvhPtL6_%jYSL>ihQ}EU&E* ztTLd>zS2GujfB)CmDNSGdX_n;X-K2ae*A+O;c$uoWDmm#cNHqcU-{g&`NNXYM zR<%k2YcW!QW014R=h6$V$L7}~r$}i*g6&KWP2zD_c`9hcCpRS0b^6guic#x^`z6OC zn2f>?#?LK|$33|ix3j(1Xw=EEGO1D&<SB-yL$2R-~9XkM~Dy7^NB;5qdXYY!cVb}78{j$F?{&=p#7tNTM8;qZvX98b69`! zP|EW1>)(Ipo3Fk9=l}bpyI&~}=H}|*fuyDJZ+!jj2cPfWc;TYZzjaQ0gURHvA8(UM zJHyqB7w>I8c~4U^V^R; ztyaWxV}2<(+l83_fmdfmO;WPVKf5C8Drc#S`B*?hSPikOM+fSK4xU|lLP zgc0e^UGP`Cv`b`L7Wpp3YNeH)%b?LvA!VCw;E9>j&ft-wARMLf&#a{F9xEFsn zIs9*7Zhrmz3&YO#!BO+0ci$h4`UlPUMAPWoxr1@9-;ch-D;jdOPr$WnudFXEmP;tX zsn>1E1<_%=${Kx;I0!2B#Y+c!o8!-EwnAO6)V&s`Z!D#2*);OIaa>HTqORBFiPS)Z?d_aFV>^Uoi~AGuWz zOVaI+KVDgym$it$fGhud=7kqW@#Ssu3WgxoANtvimJkHfbGAbPF76ry0Y6101xR;RtcyLtKQEB)?4tuf#2 z^$dpcx6>QUFR#xnuD7~!&Vu3ff&{+rQiJa?{sz_bsxRIvJi|%-EseLd+Yf7-~ZivcW!R)w>K8%TFw1d zPeM3$1~|rY`0d6<_5PDX^|Tdyefr^t7uHuG!rk~lhG$=VY41pFtTl9kOB3))NAFZX zMi%DwMykpY*(oX7=_w@B7%md?A{q9scxzg~jDDpykfDk7#ZNOk;R&=PD_jWeid}*W z;igGor^zB|O!;5^tN$wtfxw|4H#KnLrICkZ_Q9b$7ZXo;0*_$e0YCe<7##BG2nB4l z8DKIuivy^TSeX<@=>`E6j_m~0mte-~>kV-@{=!504=Eoj06SX;ozAE+SFt2yln&~h zwBI}|mCNJMBE(8r)GEPI7e)}h^dMLN`iJxL^T*x3)@BI$cr~lD)TsXIS05~|T%4~r zN|Rpe@cwWtM&WTSB0jfFE<`?e{rda2AC+s18!Oc-mv8Jf2d!489Fzvq^u)=H>(?*8 z@O(L_OGB;QAKrNBt?SQRx^d(BK-7-gec1(utVJ9w6Hkrw`KDVdaV~;c>Df?JL$JGLPQKoxU#g==}tP` zUKRT7Hpa0pP&sF*m)T-46j0ZCD+Uka!C=A9pUoSn{ZLh4aQeazO znwOlfUB7m?x0fhtfa@>5DE-*FDzJggB(H{Hp%JJyx7EBWfDVvRZh7OE46%tl1_^O<1OPoFV>)7aJSo+aiPmj!V#3`vXdU$YqI#x^t3gO{E@ z>WR@OfH|h2+d!mZn}Z?cZ2q!D5(pzwF^@0(&zMBoG2nmpLYPmE>mN*C$qjqQ0}_=% z0d=CjuOul5E)R!?@wuSAqt@D7H2_$etF0_8H)_iWb5FMRYc-*=sE;JkPbR6zCy$OV ztgp>4Um1iSZ6DPGJnrErdi$+Xsg}zy9P}2~ZVbnLLt3IoCaJoaD2wo5yCcTK3(IwB z!Awdu9PIZel|gu7OZ536C`p^?;nwaeFWi`KNH=78uD&1*n$a-)?nJ#bkY2uPue{Ri zNn;Bdjat24YjwKa{`j~Z9xGFwls6isd1)?55RgXOpcj5Es6G4A@9ynvN#Pf3 zCFwzJw~yPMPWUbR{vgD`(KtfEQGA{OhR2pxhJ$9mb1Y!g4^J5o(k2}ZJBNoM*hJsE z!g#4m#Jgj{Z`_Bwc;*__=;OnkAN-Sl_SvT&|L#Bf;Tx~Lw)5!WTzN2VKN<}>5-ID| zKstJ*Jt{4{+T7YRFaE|+4} zDZjMlcb{x8udS-i)9&`A?cVD2E?l~}zq2i$_0oka?QRb<6j2Z|F*b9?Pg%`=$fW`* ziBG5Iu=C%|&CelyLZl#)Ybfj!B#1H$}0-);`1w8V1t}05CF~Iz2(mmMx zY<02P?X`Q|u3S7Dh8y&UB^+Hie+A`o-NA8C6_krXd-raZLF&%h7=qy#tM%ocgu?Do zdk~)fwZ6L0?~NPvrFQdhFgUt&?WLom{phH*MOf*Ni)@n8{Ub=Dr!Tr+cu-TL4jutC& zt*i3v3vb@O_3+%K^>XsIU|C|Jq-wSH+%wNr2fGsgTJ58~{oSL(eaXDlYPQ<#S_vyK zJlwf2(F!Nyt5;QaPZ`r z7rqUXL3Oaz?i@*1aI}&s7d53|Fp54sfuXlE+{RLlP8b-p9vvPxuUvi(hh4eOTB}MR z><$OrN>HvwC*wrLC5pNn`kYHk^K-TN3-hbb9`?&aFEJ;|fjcj5HSEz3v&|yUbKMpJ>Y{1&1o)LA8QcF(RbG^a%VCSK<)u6O|VSRmP z>vO5EBXEj8V>{{Y-x8v-Al;42tAqYzIPO*&&ky^%MnNlc)y)U@q^9rny1jn8*OOLM zuUxLQ+Q*_?Y1FFSPNz}}78YvZD{;N{`3sk%1!KVKBz%=(EHN>(CPR{l-0O6@&Ch;z zu=l9bI#^jf|7i2GaWHr3xo;mIY|S?on$1Iuwn3Hvt7ROQ>NsgVd*k^_7q0CdcQ0Oi zR>1iDxhr!E8&|G9zqfOA>C)18f+a$|od+cev0W+fD12SLB<^FY%pZ?@W|NG(L!M%Go@7=%s?2F&N`*7#w=U=Icft)8a z=4w$-7@b=`zt<9za-c>|HkksH^Pa<2PhGOpO(?qFZ(fQ_5d#nvnCd|xbWLrL;^@*s z;G01Mfb-Iu4E#`65Du+KHl;JHPgz{)jT@lrK+i3hQd{~Gcw>BgXk__c{>y(IhYF)0 z&@cyhSt_tlP#4G~&n?Pxri=i*U5Hcu0y}5{G$Su1-t@_ZD`cPxSr~Ie8tPzXdLYLn zHraQW{>G-2`c+m}Ov9mCe8pTKb3C5Cy(wNAIn9ob~i$^p7h}LTI1ev`{>DJ zB7)jdwNjh(hR}Vuv)8QDDzU)vzuh~(8cjka9iDa)o<$;?RJ#6#(yWoTmox{Zukoc9 zU%T`9{nfQAiyIdt3esmlTU0eiT($MZ#@_u8Lp!zC{q*j=k{FLfMOszO=021wi;FAL zEeVrxIsCj}V|{gQFsfWSf9>&SKO0szRu<+L=jX~nEo_P5U~X>l!hOFIPx`N+PIADOMNfW%&Y!$L)4dU6@}wSFO)iYx6j6?(O&G>gmdSeRuQo zR&U%Lhr3H76dxWRKI(Pb=P$o3(N==@e5GHJjnR9(J41! z3rynI`b%eB8jg-4P?xJNX6l_4lWr?tDZe*K-_{U4re z-i?|{&IM}cH_q?h{$pwX)yl(Ow;7&SAhEq%>GeA6=bjyO54)YCcI!YsT>0E@-+EWB zV#+yCDcsN`wl?ovTCK@KmzFQ?9*=vy$p9Djwmy@HUKWEVTgS_5E0c7qsv1FqVR8ar zJi2vk%P!NIJ9ww6Hcl1M6_(m6JRRpmQPOhN(C>2bS|Gjji{Pmvx&VxeL>4M6P zaIf20ve~zDHFzNvPm0LTMTL|=_(v4Xz>SDBjS929%7RHP!88vtvmMnPC_s*9p8e() z?M|$rpk5-P?i5v6NW&aP`i-{Yk=jzdT5C}+PEROKIu`lWU*nP@YsxUWXmEHhK1VMsdxX(l4Msz%86*?mNNPWM(3la+FR%>->hOJBF2&&1e=kc**TaP!dUVna7 z+IuLZL$6Yn*fhdX|JmnWuapLI$xT{9{a&+DZWq1NyB`E#g@BJU%|M`Dz)E9bv+3fx9uskW% z%aux3R$w$ZIy#zSNG2~F1^bS6KytOHjax&_N z@3u>)Xf1rbuRgyfCWGeDZl`lBA-@wYRZ82vQvwOVRp}s>3yso6KELtO-qxK*k3N^n zgu_8wjE*>V0pZp!PGOd_+pAA z3xN>KJs@I+Fl!EGT!kl+u^Q7rHhDDIq65&3c-kWgAFZ3FzjRb+zq&bS6vu|m9&CkC z4{J}?>iVD$N%Jmh7Ah4L?M5j0YiJ5G+U;;i_wGFmx_gUr6=`;1xMT>?ch5y7G(INr zaVx{#!DQ5%Te>74^YY5Z$2UJ-U0seoQXhV&{J zg{99|dgovKy`cMGQmROS4_d9m_HeOL8BYdMoVmFrDRO@}SY5f)?}mroh2O#o*Cd0` zd@og7;X5szj;x`;wT(;l#mn7J`{=kSX9m)vD_2Q(_ja~+w=Z6}^tJE*%XV`!?%}Le zq_pkvqk9i`VQsacnM~wmc6~f%2m}OmT>aY253~yzLqH#9gd8IafcJ$m@ni&%QKa=` z_Lh0q9IV>rgREw0O{w5)7--n2J#wm*CF72=<{^9Z^b(>=VP67)23J{bEG~kSS!DUY z|L^}umzXKO2qLQVUPQDj#@2(I>X7VYCc>w5T>`U}OUWz>{DSVO5ah`L_%>~Vx90#! zl;yQD<_FLXeozSilE2_YK^w@E1{@x3jwj)F{E~yGOOZkk!nf+mFpl0WFO7$t$+%aY zTb0>wJoCb*w{LBnTa912lj~po=sWDa;duYxSfZ0$mqJl$b_bU(U0qr`fBo9kO1(Y` z<~qG0SYw({W(UWsm`jby{ZBuX=2U+Ol}deMZS~_%Hl+t|625|m;j0UBJ+aqcT&!I? zf39`3-S2l|A8_P#EKfpQ58q|11agIPW$nUq&7&uG?>;(rep$wEe)5Y+ZK>1T?hX1< zu<>Xpmjjm;=0^Q?X)+Wr=}KEnF6_yc0TCLg!(I(Wjg?E~AeLXqT-ENAe)Lt0#3dGy z6iwRGt)nO7k@Tak%`IJ+UtDT;THz-nWZMde-`tmNT(6cJb%}(H!KC{3x4zw&yDUAM z2m6mYqiVeozKLJ01k#6k@x{01*DfrqU+V2V48qgA$CYYDa;u5X)wllJQU6dbtwO0< zsV_9D)o%BAaeiTbex);*%q^a)h>^4fLllfYjyMcohAf3&7cPfic?=E5dVOK#aw+`W z6&^SD!mn4B!jC-#)yl<-7i7EKyZh) zHi1z`cMQOkW}i;%lT9up5dL9d*vlBOkZFa5D}jACH(=f16R;3SigW!!F(4G&FcbO+ z0gliJb70BzZ2w(Xzc&V?9qIZ7w~s>TYZyX1J0<+Ra_z>}lgDy-sS+b$Pzk>XG2d8P zSq&-`=^&NSausVhlIv+li2YV;>)iTk86;i|c6WDI)>hTw+wn&nqHj2a)E|x{oE)_} z(g*9RPJ)5l+a3RZ+WsrrmLyFN!y?je?~nJ_`||DGv>QiYFrcsqg3u6_;KGAM>QQ>+ zqx3+nCG()Q^dM@ehf6hIAdz;?skIcPuN1A=ksU9%u)V`UK zk&$8lFTVc|V|F^jLEE%E02|9ce!;UxwbdKrVas1m9)xtZ*H>MwPYh!&p@~FQ=aJpr z$Vs>$;2CoM`|;uD?dFj>Zm(|MlCp%$w$G0CZajp~f;JQErdf#x9b;A!Brxm&!ji47 zT{GO(#dQc(8g~c1^KxS)$VfFWb zp!wS4F8lxq28?uc^`t#`wf|u@SAh`#C|%b#Zf~w{F?@bw=h0Br0QFhWM~lE0bpSV; zOj5-@F(qd?k>!^FgFKhb=2%Yh!OfbCI?zrakx-G6#8>NUgF#>9++N=*mUGcYHFdsX zfVf+?zkFk@#^yI(?4Qf)-LgN)NFZLE)@W%iE z5CBO;K~()Khn)J)8R265yX5*}{JY}QFOG=m0C@o%qQ5i*QsGm-hSJ(4LYFH%QEEF* zeVPiEX%8*}#lby?|A>-{Z~ha%hfVGV>ls`5sQUOYCry0 zXGfowR_>Q2@A$Nz$qAtWFw#tM*bZs5nqE_nf+p=z;$j*uZ0(l`mbjduy9tVdP4X6{ zDMe#V7)4+*_7pAZ?@^Zwk1h~3slJQ-=PoM$BV9FdONUGX2c2|u8Dt`KRlbN&Tn~3i zgrU!01_&=j$AzB11|r7V<;6gVu7Had10kCBBy=$}($QZ91rbVyi3f;{k1j^RD*{}s z@g*}53KSf5v%qsWoLREiaR0FI3?;=dD~*+<)ipFB6LE+fWsB?nXJG%=ske7z~bX^ep6cE*a1&uK|-B+yTOY2|?1of$I7{%&tp|rHIzJ;05$De$d%a_RKbBrsEDAxe1gq}$0c6h-s_wLuN@j(2}5i=)9m&twT5jw z%hhVHdkjg2s6frj@EI7Rh}bp_+26^=1}^Bc+h98$?As{GR;4h+2?k2t^CKX^P^ray z9$?e7$T7y{9E14WgSWrrZyk=4y(qYDKK;4PmTV;S&p&e+A)m|Yc2*Ev6sc``o=i9| zY)Yh~GsUJ;Y3PO@{9f2=JPNl^Qpk95I+%iQi7p%wHL(jsbx*pVh9lYwv2ziirgWCr zZ43n$l}Qv%5lTnmR91KKi!pQvhu0ydhPQJcgckZNa7kQD`Vf!*P>k?m%tQa-fG~M+ z(FpER2t+C1mhO)hLnEH=d>y%G!FRP7a0#t5SD3)__8pW-R-y^TBAO7K&0L zQ(m$sM*+|ar{D(D41-sOvf3FbB`GhDTRbQDFJf|TJtF2VDN_atRV(ByL-r5C1?{OA z@Iv5+d5PvIg8rgHHfEKJ6)rtY;a?8$IsQ*v^qq2mUBPIyqT zHziyCmat$UB#Sr6D^g~?Q9JJq;iKEDOS+A3J@^*3yvNVaYV}-z$00I@7oIjOm8*_1 z)Y-C6=iR|@SS;tGO&TY<;iBF;mkDT2$h=tFnKdC4ZCWTkxSAoH7oQ_a&tVNidY(rk z7(xjX+NGo0RDl=52IU#%5y$Xg5gab?UliuTaA_cS1yDo@T)Zg2Vy2jMF=)hLgNc^j z+%pK40)z?ZLRSDnMAr?v5)h`p@@pgFRc(f z9dy%Af?Ui4ku}#inv1zh!d~d`)Pxf!7lHVq5i$68rJC1G#0x?uTL7FRRErJH=R-Ex zTg#L+VTpFcae_wXT` z$?xv&o*W$-rZXDLx~76*()Rf7>8Fl^<>A?AA|uyc z{6e(vQvAC(K$6C#xn$srUcZ1EUIK))Ke`MEFAQ*1$i$Z-;X*`A_x}$Bfry3>l<05C zlKu5uvQb8hE5KcZB7+)C-_jTtxtWEGv4p9?e5m??=oCwB2NUTHwG~DM8txz%F-rX+hc0gIsgV{rR}{p zfyIyo1CxoECtK&VdgrF?0$a>gmhNt@DU&7`)(|V*yYuG3iw}XcshT+&k5q@R*Va7O z9Q3=2p?&#V|H&WykN;;DxtUy%A*xrE3?uTj@t}48?(1hS{tW6t(-g8igPfS*RB~b= zUmgtFz~mrP0*4L5f?>v&zVYqT_8_b&f9eeir0>Scn$>(Jabzo0&ry%gnvLZ(Xt23l zK3Ay2*Gk2rHaye~Rn=8d%&PD&S$T;egZr-z8kHJUCn!dVa+GL#S`z+-4xE() zc`_Lex-8FUOIwrvVSl1R`+-45p;8zQCnPGz(8uSw{QA=;PnT92LHo=K<-^Z@YxpzEbPq+exR^m5LQyX0&DKBAy5E@x4Ve)Md`S0$c+WuTBlQ?O zPSYP=r#_0rdm%?$O!&~%fbA~}eyN`SOH7tQ=rTnpx)2>xhiqs8m|g0B1t3IMfIvh8 zVe%20IUH{l^DNWXi*PPlAW7K6N#vt$VhoJ-0WA;kD zQZD54#X_rj4#^n|#`!`a?8(6*_u+7C4PKGe1Xv1Awjc+^8+{FoV`R@7+h4|R+LjJr zy0)^_>5h28>$GIhzvYW7syrx`8l%Cf+&>-4xKhc-Iz95+`qtX!XCHo!a<_l>Xa8n% zYh99nTQC;c7S2`;3m7aKA6o?Ea-MR0+B{PY17LVG8TUHJmSfjf$jnj$QsJ?@AX=cr zb&x3XlE_YEmCOxc-QJ+t8H|SG5s*tMTR1*C^G%?nC;_}3(;&<25tnz{94Af4p4k=@ zmB@3o`g);QWB43Eey?*_E;m@LPvrjQ-dmvH)U*j8T(wjTHWW4W5t#h|gG}27vmBI+ zrfWPej8z>>aUS9sFiNuc*~|0#a(&hmrh}fKjwUDj7~8s`5h_gf!2vjQz=}y$L6Cjg zT!G{C@u}f&bZ(edxm1S|0OEQ3=9l`-7Ys+vmhytu2`K2FVn{ZWA&PMr`ruqP&x_T3 zp*-#%8S)vjG)UV@tthd!tf6cso6VPPmT={xr+=}!zBla4nS2J4*Y38=NnbXYPhTFa z)^lTB&QX(g4ulCGd@*F=%OUWK!eP2+m^>75bT*^; zNO^>Dx(XXFMnRMe5bgOm*8dZ*$3(%53Bi(OBV3U(>M#lXn`0{Sn-o|C;h*<^^}Z;G z(D#7Vot>T*%cXGkO7QQf)8c^udQ!M)2*lx^w1>zVH?Yrv3ewU&8*EPOT4UvG|Ch~9 z`?c2}vMgXpwOC#`eEI(J@|NlFqmflAiBTzrTBq&N`F^ob0WISCN?pol09xqME94}t zccNGv7IK|eA83wXyNGNdM<#x%hOQX8oGq=6M;)U26b0LyY;E6mL4PXCWC@*TkW6_v zkT1F}m#gcQa^>u_DQ3vwQ_e&K?lc|^%Q*>{@kmh|muy%DMYK^7Uq1ivyxUPGZ5uM| zxy3v)1Z=X5QSYEo*>vGbSFq8A+Q?R~jRsB2(*2D^F>o@nG{LXIQa)pQ!b}myw>q8m zt<71JLP}4TM-$5gn__{t&U9U|gO9lo1DHs?U_V$80#GNQq#gIq6h#5xhe63mmMt4b zC*H}~!L=I?8cM-<3Nf}PrfeRU|$W z(g$;rm~j!W=(ai9-@EyC^R$^MWZ>!2+Rmc~x9o8nz^zuPH#jk&5F&PqQYHHpwMSGoaTFut zo^<&nLPi8o6854H>Umc_=yVa3hI(Bua^h(!!XZkX8^=)`HSZ;aXG$br2m%8~))At) zzVKcE01yC4L_t(viwL62pbn)W=oRqqf@k_vs0~CKl|nTuI~K&m!Iuj+YliyhK%@9wy+GE&+%l8SPql*egMHH01p76B9GQ~ zUI*$~$nk(-lgUUo9M46!Zr-rCMpgim*;Fy>SSAFJG6hhaf*Evkss8HZ%+LVH#-R5Zb^}2P`rtz2`z{ zm#nNOLjpnUfYBlmRVoBrmI89G7KrQ zSuvXtAO*d_L^WVszy$Mf8}*g3F28(wTyJbN_P*0T`4rIGBBuuj$1F3sTp=fls@&Vz zy`#dIi9QRfkEsA!iNXHBc zk0MnB3}(?rdn^j0@D_nz;+9Tkiq91;zOW1B9$o;L(d&5;(Pb6Ao)<-ugn20^hsWm) z(Fl4WBaKHG4rLNJx(G@UiV#p5l_K&m)%}M7LWC{>MSKMyOg_a6fbe2}ycqe=J^$q6wR%}s2Hnnys>qXZ8#HqIq&XN*fGGmYDHN)w&))?) zWVu|vkRMG(<#MTi@+y}VJhQ)4WL&rSgYW(>q{kH+9Ls2G5BMC4&U zN1MA3eQRG=HXVOE7__~<=6GcG4ZH*_O;ty^LT#crrOGBiJ~_XFtXjl!`!mzh`P_z- zUpqc|!7zetX@I04t6j3mfCB>vNHF8s1dQ=?K2a&3L#9L% z00H`=u?A*b%T-jJ>Zh^dUbGEZ7gGIKG(E~Gm+L9;zue{ zA_^o>)ZB$5o6*DuwiwOGQwV_xmp#KoZ0y&@x}fRn~f`e|yhB!Lj21hGSL%=<#1cnSXf zC4ewJ7``0&&=&nufKIJ# zKd?-#UL&M%q*|GBBa_d9(Nw_hc%l*@#83_;J-U#hr1w?`RKf7V#ELUMSPLykCvNLWGO z;V&zRYWLZMoN^CQ^9GnJ5mPP|2ZKH)X+aX}3fO=$x_kZRv%|A$7Ii0jIpc|?9oyD1 zOU_jWDFiJ_;MsZxgYr|c@XFRY!=w6A4aP1*Sy@|O2lFE+U^RWHYTEaI_aBrB-1^QA zATDVzl#GpbOyoD^>GbBXN8tFHKQD@sNk9D#%^zi56ieTHw4zn2_d8Nuf)Da9&Q)kjcPkHq@AZ99>DVnHnq|7_Ww) zQ$~nTI+;TYaPEH*APgINv|XYFpoU^Vh||y!Uj&C&!@$^G`~uA?IEH`di{Kya0$(P2 z8*_71i>fyxPccsMp~)ZhVvO_Qu(Quvl1rZh;CU(Fm+0HmTY$rj^|f}Z2_ZmJD&-0@ zm~`xMiyS9JRwj_sW#KC0lGhxJ5JQVAm??(Fe@kHuqE{o>tf9w0Uc>Qew1NnlQUVEw|f;qV;(`nSGw zuz!{-l&{}>1ZrGE9SAIFiM#%+OvXi=M^1r<9BQ|3+{b)ImdF0Gbl|NB2plFmn}f(F z8=~%Q?E+M5+L(+dh)t2~m}<|CvL}ld87W)dYM*?@VE{t1pH6?G4=3tUwQf(2;2Zv_ zzfLd^37P>5ASZJF@gMxXU;Xr_!0m`Ol@)^3qo4&Po6XpS=@vvV@w$v>zB)S4RaxK= z%V)Rh*^!0;WqmqGngmp3rH~OAptDSFX|37qO%w&#cF>mq3vb`JrYnkn-bKFE+&?~T zA|dB*smf8Rd4H#ImYJa=o^^Q??d)OSj5q#JG{u2({u`p&v@=8`RN9a_8Yfyn{$dgx zQ)xyhF3VG9x1f~SnCJ>{7{80Y5KGtv02!lnvD+{s5!rRYZA`RA1JGeGj%qc3EwD^x zeeT%5{kQ*4w1N@(Vj9u^;6R8k#=pelh(Epz`Owt>FY1XeKtY7?1yF|&qChcL&2yJJ zpCuMx`fmjDrk>F-IEs8YigpY=ZVrQ?SsMwBB_Za8C>ZaO(>D+edoef+B35)`d3m{1 zDYH_RMpk>=cEKQpbFQ!bkg`Q!FRYN``Khv$6pEj6uv!5+20%DGe+4p~9K}E^Pnf9k z5JQB$X=NF6thv?YJy5LW^F>qd%iU)N=pOS$(8w)s-2d#OpM2*B|JkP>zgsF*Bqe#G)+`7NvK3PuGt+HW5omUKL4?;i2k>REe{^*F z!M6Zz-QY_unC?jR0bE_*yJH(;RUH~8Ig;KYJE9rnB+2O!lR&Bv*+86O4bx`r0TAle zK%c1g#>Q?2kH_QQX>U|6)m`6uNY>MnJ$D#MB-3Jk@hAUY(+w~vI)v1by;zs3WrM8f z=Yc?$GDPJI)oyu$kgH?_4$u_277RXQlN^f?pcts2vl9RM8*dET=TK>mNRBwxx`S4; zS*}%sM%fySvV~HfWhcP%Rin1POLs;*AIFg&jsnN9kyCvfrvep@Sj9q^4D=sKIWdPu z6bCBgMS1G%wYZc(X*#x;^X9r-l#n*_>kzG}4Rq37fa0;pledem(IsGs(1jC6ujpcV z#BuRR*VMeq5~4EZGmSf0+TLPd3^(1rD)>>K`2qp142_ZYN(aCf;@=mAL;M9$5G9*6 zeM=R6q%>&oyVTJYNuv~=>oaK=!MQXbjPO3%C;CxD;TCQA^O7ANr5QH7sJdz9gThJ- zJ%Ja(U$_v;pD$w%nkN87HYfsdAi~_8z1M+Vfwm3MC5Vh{TEcJ)mjNpB+57LYrtH~< zAP6k+$pBIrKuR1JepJH}IlkNLt!_Wa7s|Xqrfz0MQJJ(b*{fPTIrvC7tmf&<4DYGR z0GJN|B&1w3El|Mnf&@vnZ4-Qk#~&$^HYa4s2~vo;e&bqqG`xFb``urDy1l)-wt1`7 zJO;%k#L%de%eC!|o%_A+@%8KX&B;0AD5Kul;o)<}(F;YOXn9XNAIK{3Kggp-4rRi7 z_um2_N0Yv1=(YOF*tEBIZ%Fyl%G&zvJNNdVejL<}?J}$cDMYTR?QQL;O0SqJymc`Z~VH!*+Qd# z_Ss0sHsXP*-QHOrbdSzD!>){~%RBbuIFrqZKrNBCy}5aI29(zZFn;sl8)W$)avQZu zUKF!D*Xpz+iL2#U%TP$0U<5`gI{L&kOc=LRvWz_GuiyB3p|n}4EQ5|a#~Zzg>j?Q` zeMKAf+)PF7^w(EcA@ZZcqe{IRv`VNB4dJzoja;b;RXgiV3?)^PopBCk;j*8QJNiw_ zi}ib|v(s`3M=z!@8C*oE-n=i+-DEKu(Q=X&Q79_MJc`fFKNMwP7^i~d6u0N^ESd-! zO<{_=0{Kh7MG44E23X)|xsiM&l#ns7L}@5E7jFrHmlS|guK)-sL7qS?bOrFc@I|}; z^R9G(FTuZG6Zz0WEW{Wug2u285Cwr4B@Bd=W2gvIT(n|h@OJ5=I2_WmV3NU5ba0(_m|i=i82B;jY&T!3%E+`-uu~#usPzxQETw2hHk$|2 z+hp7?<;9nW?d{DqR>*RUr>o;EXe5!R8s<{1@bu}&OG{fEG8)TUuU+ef>LseQ^4jtq=X} z>d356__c^u)Ny8Y>iN5*1}#w#bB)b6AO^$b@7-vepSL=lj_C<2E1TnC$C$K+!@*!k zcEveu^;TCmd4aQV7AnuyhTY)=qTbn9gJDOeP(dDR$gQAdczk{=8``+Dar3KyU$-_Z zci;XSx;*e;lwz5zkk1#^pC7eW*Xo8121Q}JvFf?{Y4b?Rma64)wO)ZVhcldCK7JzP z3bRf)$GMqe6Gz2Myf0Ioj-eOPPR|IN_K{SXgQGARkpL(nsZ$hmvD*|H=|!wrLHyKP z7$>1}b{WH9x;uxSbJ2nlS2!*KVhKwH%W%XS1I+~xh*0{Bm@B=45b`cUOz*M)C{}%8 zzLO{zD+h0F_rU50=7VqC<32^7RQiGnGiP!s}j6ur zZ$G#L_+eY>$?=Qhb|2(zF3+uRzus-_BhW8q>y^ri$T7K0#>LY8H{K}16((o;xr~$% zv$=dpo+v^_`1IXBD`f+P8(8B2EOKxm@ru-H?*qe+e15oEe1+A~F9-j0BM=#}sqr*@7!vO-Nv#DRZd#^tn zg)}ao5j?GbdU{%2T84xd@;SgrG;eD29vZXxq3J9^jB!kc;HWfYqW1M*MbOlU;J0kN zK&IiCbfR&Q?kcoqa_%?1LTNqAOTD17oC1y1mA6>O8F4eQfN9Yb`ctgeqjWr8n9eIK zD@17pGQW)aBvBJx0ZJpDu}`IWrf#!7uN@pP!Y>GZmm=a-p)v93Qv8eD;yAE<0TiTu zFO4sbLuoTmBG7{uP{YNrcWE$s{tL4xK-f2;nvDqbQFs>mBb3JcqHiM#DZ|zi)LqyQ zy|ghVaRmCNDCnHMI&QX=96R3Hz6(qXWUl2gWSN9(k}cW5syFJbZEwEw&R0MF@IwX@ z%b#HwreOpS3Q=+lGn$N5-J0m`*2ZqFv0JR~ogRLUgE2nXv0SDi*+{5ax*}QUgJDlM zZBUB(_C_-05}485y$vu%B1QtdLFBANv9@w;)IZ@k0H(4tX}cJ#UxdMFh5@gbwhQdg zLwulytvA-B!bd?@94aRumkmf?b<^Z3AzEcz0Ru-{)dyU zqNtPl(t59}uC3j5^cLt!b5d5Z0B?}Ui(pDKhR=~-$55&!Q((x>-R|A%H*$rVqqYof z1T+uqqog4GwV1(lC5bVI-Is=C`pQrj6snF(dcN&X{hZAiW*~5_x&$1Nbzyu_CNTS-~QHrJm?%1DyzTzqyI;*b5L7<-82-(*1%v{E|xN4rU^9N z4JriRc<>O2rr%|zjr;7y=K{w99FDu4)y*AM(?hJn36ow_uwZ(&GsY;=U~!5JnRZ%4 zPpFPeCBsv_{d~+v#};1W8M?%V(e&3nkJg=_n7aT%Xpo6rQt{)oYdWfQc#QhvsO)0s zBBEoZWCDr-Al3aBqULPKGXHMyDi!%WzEn?Ny>cm7BD7E|8}aARl^hLtiDwidroI)0 z#*|2CL_`S?#fec^(vyB6`Mbb*lpM!t_!l$VFh(36XZ|#-mpEM}Uqjqa7bU9jVVn z!I#D!UR&9!)|Po8(>eKIxwgzWraTzhWXEXTKTU$190X7(u@0yuE!P2@Wmv+XOtOT| zVOhbSdV|+*ymNZ+31BKwGulozS16a4#)=jevaD$3TE5)a>9kKkk!$FLgh7&i{)@j@ zUB3m`D@i%i#lvBf<5)x0GE28zRU=T;xXyD-^K8FXtd=FReKr&+(efhHI)3J7ki>5x zFoOzE*Eb)&Y3Vi~f~gsZ9EM@~ZH}z@Cp%vQX>&b8RxNT;AbFcipurwu8L|^NQLlRb zAL4m2!)WJ6pBS#NzOtfOOu1SUv&*j1yMFT_d~q^v3);xi4S)X8EFqr1q!Ngw=U~rn zoj((#tOGjZahn{k;qZlAuGjB+Vm8ZKlU8rsJRFS1Z`^ycb@FsFkq`ENC95#_v7UeY zKVN_F+r#dGZOV*kIGLiymasFr{@~5NZ1g7vo>~D(-d;WVv{B0Xs$9q-Rx~ZpH3V4Y zZ|*kl8o?@iN(9YY@{BUZyHa$R804Ia(bagfAN zw@C&^k3=sQ9Q3L4=f}qkW2w| zu-K~<^NxQ`uVV2B2cKeVk}It&ZQL4k4p%mAn-*>?uVY&V1gI3UtYd&S7IR{`RE7N2 zmUnucW3moi%&f0%x5l<-PyFrE7{f-oGIDH$?Vhf7b-=J}p;#>Ca@B06P%1BjVsktm z9DMdCnuV6P-Xw(BGDx)&)nnICM^Kcu!+2tm16bz8f>boLKH#)XjvMqB_hGWmGMg=! zCZtNmppj$|1OTfiDSVG1Q%NDMlEkqL&oZS_<@&V;a{I&1a6H!Bj7SbhR1Fv2gYLh) zezPc;$A^#KzJIshIrk?Xfx;OiCix5KDKIgfV~ZL5?8OO!JEF`4nr=dVWktR9=zF74 z6F#m_+T}vNnqx#EJLwO{lM~RYLLpmV2Q}n=XTP#^P1hy>w5|tgVei_#JAi^XI+o3f zJY$S!-Gf=XanBAAeHJV_x07B(H2p;pgW|lKQ=?lHbUoy=UAp}v6qj!}BJmK__YqE5 zC}w(E4<&}MvEeHvh3HSwGHRNt1V*A6OnOx3y#zy2N2{saG$^q}(S)%ry2VkENGZ=4 zdUiUx5GfaC;v#n?9G%6J;=5?C(Nq*nxn7KUVKgZ|UkC-mmVwhT@)97#3#@dp$(fWx zVO_=`lYSe|7xTr|-{H&LLj5N*-#b4Z6^d6TLX>WkMn05A{!m)Wn@5%cnP}GMW8WqH zXaCvDjg{rcPoDW$7*ar*2+npCb%F&L^PFsNZ9jYdtW?M{SOt?E5$yi?P@=#KVh+jx zjB_3X%2KjT<+!;|kkbDInd#!#l0Z(lefrsxT)ECz6U)VodSkVkCkxemTI2?MrXaMj z^Drmie)BmPv~x8 zLjY*xf)bPy8RNX&)Ra-Fx}nQ`hRcrnFOb^T)FFJ6=Y&SJD4V?Qu!VBter98j19GPH&st~8_kM45_NhnqMRWZ_8*Kly;e4rBDiuoo z&Ovuo_z${-^N{lNq<_u7pIY?j&F*?aQoN0P`wY5P0-5F268xcxn~0o$16 zy$25;-qYn?uy7NTwT*<29UVTY*SChvCz(QB0v7Apg+i@Zsh*y^0L7`p)yk!!?ef~B zHy(9z#Rf0rO+zJ1Wf)qRph;KGa62jd7&2$LEWO4Br? zk-zjr#`=3SfJaA2gC$DL+l;0;C6WbSL?I2OWZHZr5kpE!>|C716z5&;(qEhc;iZ6w zE5poxES$D=@OViyF`4`J?ukU3q$Sg8N5hC*JY&e0%PH{ zJi~TC4-Bb`IMk)xru)-wkwOJ8wEs{0M(^yrm?tMIRf?s9!)B#g2vwkt6WM4jh;%l9 zn9gWWO>cL1``Y%}Pv8BiB=EkVB8kiLs9fIx`&^@*AB-jelx}TrbZqfbBl6NzUxmXz~t_`q`j zgAMuI&=pPYd5omW!$z&)DX(;O00B6$Acz?lQ!p$j9Lp7Egt@FB6~)qqHf{x7Ia}I1 zX`X^E*<(bqLZ9bGt*4?O`t#+Xid@JhhfRsc*-WlK=yXS#Ao1CZ=y|M^YuJ{O$>xCP zed$}@>Q4q>{)B--p|N)R&ci{cN%oB4gz2FbEW@!_6xkaOzdTV5#jrt}D~TcxfXA=_ zD z!hsq901yC4L_t)&*nfGn)mY8h9S$jsXLG#Ba5+r_V`G~wtRNKW;^B3Sictb5E+KG) zu`#hu$}r(X8>++4Ui5ow7$ZaJS`ytRj*j6kri2MYV`Pw)FoqZ+CLE?xLem3`qtYs- zC8E-niU5}eprLL`yh4nmg+?sziFfJSg+587q$TIH_U3{*l1J*JR{%^3_yczl5GF<| zmxABr7Yjh`q6?gcfA|vc3rdc@3xg-eS+PerigrvCy~29H^xV!bjQ*k2N=-vJ zbY%#P)cvBT7)ROw{fal!eC9IJu+=8pE6+Ast5s@GpC8V!&>qV{-J|pF&gQx@8MWK3<*KBQOwgA473Q0mFq6%f zn%xQ5*?^(}e?p!KoR4KK)3BaB`RMtRcX>eqDEP)-`9Em7HtIfyREj)j+4fkoVnqbF z2!H+FsZ6l33*Lop&ZSSn!%1*|Bs;`=H;hR!XX7Dx)r-H`Q4fi1YsK+oR!t18pnE zaXgoic!u#_|LXU;gg%lQT-yLV9*BaFktD}I;*sNdP!R*kQ&dGPRSRS@1TgL@!%^3B zY`{*<<`q=~Qp;n*uvt(P`-!wOnT)9oZ|rR5Js^u+sG8n*Vp?9Sb;7&qty{0j&U8cb zSZ~F6-giQ77qcm#C@@mkHV+x{ON0;&mf;KGE3?TmI40#Wj_gen>$A}TIV5asqq&9E{4T88nc=8wLXD?mlq_p9$V9OlE6i)pns2 zxUc`O`v2H&}L_frTWtGizkY% z!^i+~l`9l^_zcIt`>RiW;|ISp>YQ1II*|tx16P->jb-KczIXTi&kl2f$L3aut{b@w z83<$)WwcZPTWh|t@tSOBd)=0-Y91DriwISB!RqOACVJ%VYkt$GXhu7Cnyr1-ylIh& z=)g0AICo5RvJH+vY)o*4y(YMy_sST7q{D{^qy9w{Yh=RYMTt%V8&f1Iib-;eV=$SN zKa0Q;g?P3IBNvIXFtA7Mg6(-R6pSI|A~}}S_r}K>k>Z?|UBrNe=9P%(*YO|!@t+$jB?H?it_v!& zVa4NU%`N2e7r+}z_NPcUOKF{{k)(x*d?Jj~n{WC~$e4Wc)bLO5VWbL(JbL6ep2*9a z>t3vp#?ywQX$VI8xKS>$tb5*_%qG;3pN-|ptJ6-f;sSn`%DI)*+yDN*`#)JOn=P(; z$T~S|{q7I`%KN|iF*4eqe`C2!b7a^!QxaVskJqpN#-zW0vj423vCAvV@4Wfei|0=! zqk*bv)2TZiA%=+T(ZvYlpj`=ECYS&8+40xE{Vk3x6=XXvKOKz*mZ5|C(dEcip=+h= zXV0Em-W4ZW&mB-n7zhYb4#<;lN+pLD0of|&xbxmv;+WyY;5@x35xp@M@|k=oUnr36 z&^)_Z$eEKSK`a0ej{!1*DbNSLpHa2$F z5keu?|H&W!+tpg0rvCZzTE$=f$kyH{@mek;YW){4_MeP3S2Y|kzJe|x#~Ey4%|nDj z1`9Hv$cMuoHV3P<(&6d3;j)Fw3NS?usjt8F^^RgeEzs*3g8gD*V=Rn=#ZP>%8a^>;oJqcR|zn67{^~s9rUNZo*I<)XaC?2{$BVQgcjl)N<%?( zAtItU{>5MkC7=kS$Y^X1NEf0YT8w$q;a>1d8TL}ALP#Q7ly+Z3;As4=y17ShLOcrUVGH(v>;tj;F>{pz9y++JV_GDg`#Jv z&;~)28m3jqmq3pU47%U%z!;&J&q*S;wZ3sgap+} zg=ZiBqEgI20fsEHSj?}iY<8QcrE=ZX&J1m&DgzLrqwxp^4N!U+5fB`RFeq^|dwUNy z_TIEjUDJjDUTe!6S%Ep({{V|6!+~mr8u1vYiIsKTu!4PV!zstXo`pGC#4&s@ zkBR;;jtKC%cd7u7ek;suY}}8c>8CRo$!`oM>6g#~*h_}-;sfbOpy)^w4uvE+c>t2l-b!JU%a%CF;ZBC_cbl7g2*{H)e12=a`V$gX1&RVm($Q z;?Pn!UJ~pkSm&S~OpkLB+3^hIvzV{jF6wuig;G(<6a>ySOwi_LKL7mj{ny?oR%>@2 zJ~-Te3KS5Cnke#bedBxOrLB|p&;*Sk!~E*s{oy-ry>os(Xf+4_-5>tZm%jCl+qZA7 ztgrrm|3CkHy&;Sh4VsdF_(R+Tbb!30+_i^v0GBg*msh=4h+h?tzb?xrG-D`Wscp?cR*zj_qpvVf(c#3X)@3+2dSdJ(^dD*sWD{FM$ zfzHzFnTFf}3JZl)Yt#b`>bpPsW3_+oBeGA=II`~L#?5=y_)ya(kP=xQs+yuGlkvD$ z%;15MHNi6LAHC%N$GeWzJbQ6^`003fR&8wCmMXDs>+Imox4wOH@+x1*P81VRzEWFt zS)LLjIBcU-+nDZH8*Zpc^QuL-h$#$1Q4tVkKIW4;TBW)_3d7J6DQp^1(T8Y(6JkTy z@{{s<5wA;1&x>0FOIbbYmP7@))Nn$ruBxV2kNx532=h}Gl zjY+4T-IIOH7k6&F1yL*Qk5?-hkL=uLd6+TC+IZ1&kYRh4sf;HRT~oHNy$&R-)j2O0 zs=Qd>SvON$lP4X`WySJJV{L2q#%-ps1SCl}El}7&D>{4n$#x@SGsO&9%aFOYv#rU- z=TBe#;lKP5#Js&C6^QE9&5L|NWHr;4q`bc?4H5B+a1j9P$&1G<9uG&dt{W^_jR0Cf zUSu4Qy0>n-_w{bUf37=HWpVz@P15$FvNTXFSb+0}HH8w9iu3a2SCFwE~;T2*3B&|I?SB{>5^= z{@(jPbunM7ESSW%CCLqY8QtT;aa*vPDncH;dM9{J_o>-g4Ra); zFJkeh$rBU`qPbpj`is*7Pc^Q1j*GP93_B@K@Pv7o5Z$AsihdfuPJ$wJF%^}u+$GQ> z1t94lv%KKMHIBhNRc|TrFUU%Y&t)LH(0QqvQ)+}nyEqV{I2Oi1G0c4If^G*3+7SH| zB@hmWwV1rc3ovidIt2O?sfnR4l8`Dhi%=-Gau8kE%zI*=-+tdIE?_9q%mer9gfBWs%e)OY%QmWt3Z4H`@?Rv6i`1nWK z5nOZ*UT&=|+1jW#RuGxDDFme!AR_z$$wA}@KsKkN8-H+P+E&9MH%d7v*K&-d~NLTx9>f)y03oq-oHCN{K(Xu z`)~d3t=E4zJo!bjvc`y&*WZ2uQ_3F8@X6@d(8%WaLc%t@NP)e4|fxR=E19Zu+tnLnaXHe(WQt7j& zN6X74#$vbYRaWmB`dE-EnS8BLs~5_vz1}$I$`hBpdHeS1t9=;v@VxNoE8pe|b>1f1 z$7#w)F}(-(9=7{Ke?~DB4+CmYMS*dT4T@aQHiHJ2$Clv=836-LL=3mFxoLW6)EfZz z-P(EN@j0Gj%H@V*jG+}ufbiMe(`TRNin(A@A>{A3fbm=e(~^NclL$rVtX**kxnRXpPFZdB04F8CFPEiSh3uNb4fyR zns^f>oR@q=Nuh8ojuRz`!hBsAfBbVX(JUm0Z1An-{#i|6urjM}b@r{FUhs z-~QTJcMRIa(L@=wPjt&#U)^*t`{MCWtkID}Ch`EQ&H?uXcD1>)b9`{%Vb(Tm7rUTD z1>A-26!RIPd*&ErJo*R!=np>n_~kdg`L+F*FM9*|zx=QNtFdART0S2{Tzzm(&fUNw zyqw8E!g*!XF~|`WCTJ{+qP4kpO>#Sf-VvxbZ42^2<^zugJwUSSYYjJ(C8uav&fpvr zn1!$Y#`lM^4zRScx~h&xxm@9N>^VenO;mCKfr23H?cMt7Td%J+8sqWMayOuFCvhU>TqP{L?rzg>py(y?f_gzjbK2tiy1?uO6pJnDtbso9$@K9DE5IIiXG7T5V zW3IeXuX8N-c>m0VafZZh-?-K3>sXNdHpVE1xxTT!xwd!q^8KBA-)}ZwF=Sgf?#ti! zrrK)`x`(4tw^FJC@WGG?Oq{!0E2GgEno+*8;c`Oj@t+sSW;PZUiljV!&Lm3NZugw5 z6~S018>>bDFK_`Uk{Qgt!8JNFp6=b#zDBojL}^MrFW4+J6&EA)&WlrFSOryhW<13tSBH zaRUBv5*jhS1Pi?diqJGqgyNevd+dMypZ`6S0K7#PN&iKdmon6dpdgOrHn>hMiH$W2 zoN&pgV)3H{UM9d4#hM>ZLB812l!{pldzW9&98Qe^McWO!lJh7n5em(3Gm~2c^1Rup z^auqLvgg=|W^E(pfETW9taqEuR_j<0G8nS~XH-?yv{7CX8jY=NCV$>(%c@K!R*+#i z+2<2RmUeI?p+hi^mrB{vy65O%Oms5$x}W^3O3ovgrz#+|kIC@Jv2|G) z0YwAe3C1wspc55LN#l0={OR+jd$+%-PRQKL%{4GLN?-rs-~IIcAK$+B#_8$dwQIYj z>MEGY0P;qvytc8VYC0zP#|GJf3jhvK{NB8N?Zt}&7qM9|f)&UPWtuEIw(;nlA9|MJ z*(w1Kwv0F;!fn^~%wd+%nyu0M@4Ywa_cnHRL%DqP^y91~L4oW3VTf#|1g!V4)d}zt z$`*iXty(#4os`SVwqpPl`{wWb?;bvU2TCiS&o8epTedZp<>k$5JJ)XHO2t8cB62t< zVNJ7uC}$?k@giG~IK}Q0F_zDn+7hqvD z4buQ=D2UQf4C6V5EySfncsfkvI{CT9k5F2^E(o*m7hSC-T{r{_N-7q~)H@nr;fKOz z;H7PZ9q2!)rGe=#O!Ea0h^Av|SJADt^$lgvbxhfDLCEqR7C>T>Gkr=+w&S$A?O>xW z($6tSAToE~ar_;%iR21K^_H%yrqb5rfjf9%sZC`9@_eF!rv;iu%OvLt5rI_}-Ge88 zlB@0kEP=|-(8kLfw_42;hz)FfIo`3Jj>-t}NcLRRFANsnMZ%R)vuF;l56)z>$D0G_Vo z$*{#zF|Ur!WRuN+g{->LJb(4+2mki;biY_A7Hi9+@z_Ub(2=@;cQEqU-n+K6wxy3+ z0A`xQL%IPnA+Ggm4m8c6w^UTER>(SXm&uia#!xL)4xfLbS`21+DAlD>b}&&a|J-`A zj)a9cz5EY)Zg95`7w zw{~~8cdtGF{8NE-^I!hzZ))m*%ybp_OePBup5p|_oyZbC=Q%18 zir#c43kFR)#H^~LcBfORm1oNbabl6c^!tI&4CJPJzI(wDjLbq%oVWDZ#&m&q8ZJiq zX$XqJTU5V`APquvI_DgK#zh*^VmK9qp{Bbdv_Ppyr!5+PT%yI_OfX$EC8l#pLgjjX zN#6z;p)))4X8cX*=JXNGrdrXdO}$QaG%m)FlFm^~QYE7e=yB2$fbj2M27xGcF)x9O zE^xx3#5JN?a~h6C11$)Ht`G_(fDPjmc9`@@{>H;32Z>aPUqJqn)e}KAoNj}RxoOLz z$sdJ(-VFaj+81IVN<~3x0GL*PbG4Ei&YjuV*zC8?kpoIK=lb2dd%N4`CnpfWSk-)( zA@g5A(+I3_GU|cJ%AOz0| zG9%4!j?YfZ)dtUbmNDE~+Zyy+f|vuN)W+6z!374XgYeA)lgnqp0(a}q+d#AK-MVpl zdMXIg=T8r%Oo8R|Qa%^t2(+NV#Z1~Vds})zUj1XX+ z6ADFE)qtyxAgAQWB!;XJM8(SHXP>{=-P?wk+6Rv@S!(HGpJZpUMOKhB$Cvv6g+M9!I!?k|p(ud=jTIf+&RDnV)x7Po zAaJg4Uwd)h`PMhS^7816)ZnOF%1H|1gL>?bhW*o5y2FSfS1n3gTYD#GO~+q(0Mw7? z85nDn3ptN$89E7o@b0~@k2PB!HV;paazI5(wYAlq8#{Z|N=?>`TwV&XXVzL6vQUyk zXQ!wB4(rTvr35~31qBFLcyjitwtDCIWS8xxz38Qj*C000mGNkl=g8E}wTs=~SW1PH;D z1)OCh3YoED+<)z>mewaL7UUDf<`}Z(jFDyKr|*Ao|MoS@wEBZCB#*%^9=yM__wB~& zjZ7w=%hlG`cQ>|fHM^s1o;`T{i9Q*8>-)doZk=GF-kH)4t+_w!pLM%UpsN5sJmZn$ z0$q<23$ET_kV6gtcM=quL$=RmD~+|v z@@lZ^?b^oX$@8DsoTOQ-;ga(jZoToP$4{Q9nx@L*mG$eU>GGcZR zUZ}01dum$$MWIkllOD8WoC~)_o{3>S3N))YzS~QR)QW14=NS*KX^Ug%E*SL3vJmr0 zVCNOl5r>QrrJ-QNGY$MAB_7_=zbJwzmVdCjBp;!|K~3YY}E>Ay)7Or#;D3Stl#Q<8uisfJjr8N|HgX{IIX zR&{x8Yja&6oU<4dml>Pki}}1F4~TRKR(fFoDkO@aeiSC7Ay^7C`6adULYBuS;ev=9 zlJ1hd#K7+3k`rlN-E?cEJm6w|sezq|C*9)BbJ=7N!v(0nw^o;m)xn@wt(G^|ulIW0 zrN;K*(etJC>yyE$Nwl&ys9`IW8soC7o3AnYD@Yhwl8>iHA(9Qj$t0cra4f^8IgV^S z1NnC>!}fSEQi67u%d8?tdGYEv!;#Z;T}H6kDIFxrVb3d+pOKHe6eoWF_(F)r)$mCfZ8B*WA8! ztJ(4tVN*v;~QW7{r~xY`hS%q zW<1eWYUT5@L&Rs`(=dVup-kr4SO(Bmj2yAJeROhGC`g!MgyyKD0XU3_wT$=AcYu@t zJ=HCn<#R4yHci6Z9NS_&vfqm4Nnm?}i+=k|*ENopz)(k)w+jM{1~xZ0x~*opwydZ+ zE0W2UJZN=cxL|pJve%G5O64v zKZ@bJ{@^Q1*T1vAyRx!M<^bFNT6ie)uYc(q`>$SF9?s`VYbzVhbT4%T`c-0)^_=tb zC*S+tZycU=pybb=eY{dFz~~2boA=-R^1;DDskY0y>cl`cVnCY;&QWhY2)$FW!;OS+Zc$Ugn_8K2J&CaT{&ryC{Gf@V6qCPEYE zYsO=3J8?H{;lVoE*{PW*8WN!tds5IT=D0Wu7TE$K+VAMjGPl#uaB=z&&9$8<9gOD5 zisXn&8=_;2b?0P(P#2Nsk^ECJU^Ui(A+Vt|m#S?@gFtr?_{CUY_>T^Ya6Q2m>iSN@EpE=_s-jIe{0Y_mNI1Pmf=`oFl%e0{@II{Pk(iG^jS7rgy;wkl4I7% zIl3e!U%{Ho3Z-JUSS}VT%bIRa#)C|*gtar!r~0QE5Jxsr%T?vc;MUzQ17hy2*9@&+ z$YjpD-3Rad-mv?M6^i7{KhVnhS&<~EQmQ!~L6N}t1Q%OdTc@vpmdTO;NP}&cwOz(? z$>#sErWZ40wkH{Ldj_a{O$Xa-7BCd_y|!)HmZ~XzRh?M2QD0t#av=x!73-igHOOS5 z>7hS>g;21sz4q4fYW=)Brj1^p6JA;06!Q6rJbCf)FUYFDY!MP$E!RxL`TX(ITD<}} zy?ggdFFtwCP&9_G4Z0mEE20@N02tJY`ID1Zq(DG1?cufS_jHr6-u^^;{lUGbPoBWA zA;Yt~tBuc}e0<~fR)4I3>GAfhTVS>GH|S)G*D#2@oV3+ zdjoZ-l4UUEoLIyffZ0$n$OZ+u@~zwVYPG65R{DyT$z;lTLC7r+G*ie|fBK_;`|{c6 z+ITq8#d^IMa=7)4O?A{KCEyx{C#b5d69cUZ<+{4LWtc|Lz>*D>p>{+IIbvu^#B)%j z`yIw{j10PGaOBf;Po?P72$H3B%veteA$IP9V6+xyrb>JVYW5Jt^eCi@=XUCi-O*gR3-jx#Si{a1N(FM2jIU_6S`9ekd)q z^V-Gnwh}Af6h;_rqbVU{6+^@1jDC4h{EID6Y)$!em4*=17UB z;)bOrBai?qmE!5qOB+c*t3a?A4rh7jxOrZx)$^6gT769!b@G+#joQk`AN(n(Re_ES zW%b^z`{T(NZV4Ae!HnM|&I{L<9qYJI&mn7Ej8JkY+f z`MmU{FMoU3Id#bN7obg?1JDPl^ry)XdF%#iUk6}c5VQ5wRey7DB87uh;hw*CFc2t^ zpYC7)6fh8lVMuu7`pYVweEdOH#y6)q5;2X@-6M zwJ*K?=If{JejrK)vc9^$wRdf2Wo@l>e%kI0x7W+p?)`AwI~tC<%4E}2S<@6Uv9?H7+54+pn4mRMQjZB` z@oWSZipA-A@BkFiZ12r**G)9FZ^gw?*t5O)iX+cgcm^#$DbP`@Q_o(UcG|GxhcmYq zO-7x)9(M3)5Ih~2qFJ)1@*yT>Q9?-KbnD%`|Dp(p;+Q~7K3bIPsCcB`o4-v7ZImYW zXpI`35tJ;V=xuCVju55Dq=j4X4;?<1U-s|*-G4y6NvC+8rD$$ZGC*1p#9=QLY)}GM z@FH}gS}KayI!c0ES{QTz>@EH>9Sq}y#gTU5S7QDbt38v>i*mrEi%~-g^O6@Rk;p|5 zjuH@v!}L(5k$H~|q|0pYt9c1PfU&A??_EDRKHRzfCNjI5*RE?iIm7@+4@l4b&we$T z5G1hG=JThY0-lh$_8vYuJK5d71`14jI=P<_1eQRHzzIBAgYLQd=~>gzKwajRGkC1S z2yl8XlCCR3Vj*0{9gIgU-2gf#uCDE|Vksa7V8$bnTRNJK9KBw@S1M-$B^%r;ns)8R zoud~|0e4#?jU&qo7=av7D=jxR+O1RgfGBW)+rSqwC-OwiO7L1B(;qoe;IkR&yeseC zxE2zWu-8z`W;(?7&zVC(Nrt`l;Ij|vl_JQ0s0dw~j0WeJklm7HIkjqCZ9Og5mh!pc zt=nH-TG`G>nL@TQYPZ+69zhPyPR}?=RH2k%@Zm2C#FW|)BE0|RxAOIsFMsuG=bip= zqEd|?Lv0LYZKUYiyEiu0mRnu<)zhCIo*WN`0Br-Z7dXoSL+y2r_Vyl`j^5t?Tv1Vd zYp1cY!sjb9%|~E7b0G~dWGU5Z*x_@rkc= zN)Q!)SOpQ8N&DkD&`i@7Ek-z3>(B1i>n=vh~LQcxoifMg(b@s zw{PEj^1%m)EV=+aq|qp4$7Ju3DG-7Vjm#)vFrX%5O~&JnX`@1^QK)TuRM#c@fESiz zx#us@W0vX-k8wjFv@EOL9~J9sPd@wL#?9NHzxCJEF_oM+?3`-`*-5;ZD^3)dNVJ*p zOvqLpOAAT^3{J0q^8meEvdF}d z!E&ii%GFidwvpD^*t+LA=6G-TTndHn2YPRxRmHf#kJ*}gSvng%jjIae+h zGS#JP$EO`oetTYcGP5^>!+9HqNZZdowk;WGt|*8j;Co;twe&(x;>f;wgsN_AZNad~ z!P9dGp&X$4meukCGZh7n%}bntA`@E)p6I-(9eF-M#+#}% z5l&NPra8JZPeoABHN%;1;R?mnp|clV1e}b2mUo;ct7FiJsj@=UHI8}C0>>gjF+5AW zm{g2K0^>~y*vLj=^cOf@BYI@n6(J}5-^4r#BdSLUEqJA zCt3t%v%n~=;!|#upNeK@{)-b3i07gWrCRWTK7OLcjpgkdH}9`(+~))!Jj-2q_{M`9=Py4Jg>0j~UR}9cC~fC? zOBuJx?qasNR4GnOCImt$Q_{2%Xwk}9VbFT4XaKG*FG!ZhNts+&vzW}zHzE0sV}rZ} zCbzn=rE2mF2+4_e`v)TinYER>%D8j${@3aS{^^SYO_y`oJP6=?E^GL^-auXfILTZR z7w*XXenc#D5|ah}Br8cGEoa-O?W3cUdZQKu!~QBp&*y@__>&*6Zf*IYh;*Ll_N|-O zTjys`s{mg9ToupI<@Wi0xw=xTEw^6%T-C;kI@WZsrRk87*`Eb9R4&)g&sy0Wz%ZEv zxpHOJz?su_XaD)9-~Imo`ryU; zjyr99pjCDeFDvqTHA8kmBMT~6sI`-m^BkFTg#A|HhAYi6#$mf<s zjYz?S(x4?UG!YNU`mDd8S&q=6o;4j6x}m~z`l1&hb>UUgXWq+ZANFROAiB{t{ZrvU zSkermtAUaViZ0Ke5kPAOqk+uUJOq3 z1aG>36}fJmABs}3R;k^)d9Pj&0qu&pEXZHbjM*ro%0opn>MMKL=pxrbWc%t2pQ(Z+ zFO2QU=g-+f;r_$d-v8r2M8%EK`G=f6Iy?OwND+v1+hdl>Im;7?4bOLLn|HRBmpQvX z?w^6l$}l}i%z*aNF%>{3QOeS#!TKw^U9wmZO%$;xWgI6v)>w|wp+uIdTe{7o0HZ1z!P_4WwEjQ!R_koOO3QIsGn8>Zmyv+^5?<&F*_~^T#-jmmc2uR` z?R9{j+72Kv*gcKusaa&L9NDIzRNXYpQ7B@9AM$_HA|cy-dQ)xm;@G{ef2 z>*e|~D9k6SZu$EOvC}Po*jdHR8*{kZ4E(=bYrOjxKi}9|qo4v)q%i0j;ajwu?ta3| zF)^Y$jdmrvqr^syXx5uzCP17P9z|pGJZc}{S>jPlEfnL6Y4Y9kD9V^dDCr(By+8@6 zhZo>nBAz6YA^IgcK3ejmIUEg-e=TU7wvZ$`q6@PVxPTGjGz|JRFK`qE(bWJCEkwR# zFoZ5qgf4{4F9?CD$QNlYi$)uZe4?YmIRM5W@ap(S^S~I<#1R)s3EjaWsf>2uS;D3< zGn7N|xj)`)T0!t>w7j}is^mA;>QCPPce_prDIb9;^A{vZZw3 z6~`QjrR^|6_{7Tc%Bxew8O!89kP)nV1D-U#VEz5~Z9VW-LP~m2&y|S~-_d z$GX69het=%T2&v7IG!w@0Mp}YV_B8e=g(g@mg~*upWfJP$f_!o8o_*)Pz>MN+tG*T z9_CETE`oNLar+YuU>j#vjL|DuH&soy$)3^VpkTmevRxf0*&GX~A?TBbW6;eyFQ1=R zYen_!`L(@A&hQ1;Obf+YzSvk^-uh?%!#~XzD!^_#-Oi)?vJ6EVR>MO@bXBl558#)>i zcCXz!Ki;ow0vL(0t8MQ*XrH&vUp?91KZdUkz;fB`mg}{!4F>}+Vo01% zOU5)Jc27Ejqq|n`(@&r5T)RFSr6H;<;gBYJ9xZUg={5{AKc{}q5~*!aP^>#s{Ws=` zsQ%@K3eTWZED#r=n|~%YJjF9pmODRLV~)8q;V`F+o)@8vVYl`LK_uCs(7r$#;yEUT zuh7zXE^z3onY|LDn8^Ut<3;Eee+8#OBTCXg&+~9v*46;BV z^4YTGZ&U`Pkm0kekoRN2rl~=&{gI1gVn& zfDOplUhCj&|5JEpH0-mSw6T5v>8k_8qF$#}tv3piV3{i5*=eh7k|qDZCoM&uXzKXd z&DY5$;x3b4TVGn=A~QcVEt4yXqOiHPu8jwhC^0PWPRA6Uzzb`ut8(jbqn;yYWt7)d zyTGtym+D!^W@O#YVq<-I4Z;^BAh3B^RiO0G&-Rh6+Ac6EL=>{bwo0&&Y~pG=euWVo z=7W20y5lojYdK!-=FN?Rr$2vr*0T}YSbM-B?a%)GfB*g8`A=US?3Xicsj+TCS?e0a z#j~uT4#t}N^2y`za9FO^{GCoci!e>*C;#SOtgK(lW~96ThQ(b&8@NPm>P$wRTpqA+ zS+`_L%AnZ+1;mXM{r>&?2M32o&GvXa;8|R+Efquh(joxeVQ_$ zqyTT)0jSOrLAx*jZ32w-uQZk!r<=1t9xZmf$YvTL6GdJc9SnTv1&%0z&9wLnFHuy6 zM}*_-J(T8Xh{fr+7{)orxnvAfLC}L38VFJ1Vt(UYHu?x00O5au;-G>OKtg+BycjC! zBBL+xg>ZP;MVO2vBF^uUAyaQJ_@!zq#S^DNWzr>zJ<0(i5SWT>mm;6H;ESO@4*#gG zyO0RRAaItid9VwJAewW*@b!5d1PDd$;Kj4S1e9H%|3t42K37fKG{*J%GG_REsa`5K zR=3ytrw0(e)jY24?l8Q=ik_I`ENtDpwfE7F|L}PKU7`y$Cwq^+(;LVh0Zaox$YOE~ zp8->mNOn-mi>z~Yw*Q?kf9>pa-$Hz;ytK7@4^jf?6*duF9g^@O*=sbIf{1;aif!u6 z^ZjnONv5m1uBjW{_CY3Fc5(LM&2@r*jKI5!Zm8qQXrxU^GYqvM6_EL(m%kd0y5}$7 zKR6z)Y_6}?fvtLmJzZA<&@vcyEK`GA_`A>e166BS6rEti+U&M9WthLZs}45|%Y zy?*_+sg4}Wz{ol6k0IrNa00`KoM#56NrVBy2^NBi50s7MTnR7}I=frf+b{m;?EFY~ z$j$|wzOi%TmO36(N>xTXyY}W+fBwr4CxbSR^i1uJW2>e%;l=C*aK5EgLCkt6S1RNm z-hFtu|4blTU{4|KwbvdPmNe<_4@U!_%QqgpIqY|#{Gcu-qjsU#ust&zgNMxQ7gxK87wr!7E)XdT^B}t`aN_`Q{HVzP${a;f+?Ys6l39GVZ*#7`>C1 zimF+rZ2&hBn3c`DnQRd>c%bYWboQ(D)#h;I49T*DSErro#RSgZ{9Gf+4f(83vhv+G+0Jy8Zg|!>(hEzxvJ(TF0O2x>Bj{bozs! z3|)U(J;-xL$OEG)l}hKQN7wH?6g2th?3JRbAmu?@sVD;|Jqy&PlRm@%s$Bu;tUZQu z0+r@TJD&ra000mGNkl~EtTK!lw70c-ecU_2p3{>J-6DEVV&L;! zmd^l+fR;AMK43SP3ukT8Yg8&q>*MZdVmLh6uN5qpJm2dM-@JP(TU?cgy}|K|<;H5h zv{tNaO4-ut%I@|`qns6$NmHH-A%%=*fqB)myh3T|=CXK+?Dv?HXRnXzcp zTd+h5Q5~6%e+t2XXJ>sK@mWnCO;c^lw#Sm4ND(mumI`G}?n8(M6~yeh)@0nvjOTqx8=Y z!E)9c0&Zct2#iT@W#cA52#0Og(Q4IOH*UUubkelV(Qwe#v=IaZeQfXsBtt}6mLo8) z8|GPm;<$ch$#Q!xSE!nf$MJy{h*8={jv<33t|OBZ=kpRseSye&Yf>mRJlC)ta(EH; z=aRUt%`&Lo*v`1UZoe-Zm`qFYy!z@*AiDyG-+b$vubzEi17d3g?QDl^TcD}3VVgj# zEv>6-Bd9U}Y@%@mo@o=Z%Xr3UY>5)t$4(o$`D`83*Q>X_!tv$fvw@i5_jY$Wt>#z1 z{>@re!bsd&sb=wTV|iQaegyn)YwZ@mkYT6*a+amLm;!jIk4Ti&sJg7A`gK4OEy4obt^;BIe*NV;46XdJ7-}v&^iuDz;1p_r)!znHt z*v%0!=-t69lrGe#>=fFC-6~DaUVwaN=b9cDx0?^+MoUV zfBzpwUx?vKEINECw&9ClFOsZSV#AMKCAMe^Fe#W2&VcZUFwstL0}Y%C>;gURWLIaNTVQ2ZN?FXoMGThSmZMTqYov4&+_(i zCBIV5t*&nU*}3#{(XWfNKm+ z_fH4Acka_20L)*drA^Z`EUdhtdNW4h%6HfIG-OK z&``)zpeFTmhb>cqfB9f*7|cjg_Df%V>-p1XL^W!d2 zet5_qP*Tdc2q*@4Ne{KBNu(Pv{p_+n7#l-RXP@~C7Q;Dc_yQcI(-{RtkILHojc|Tx zoGzxzhX`K`KSif}mT{bhix|hPdZ{jnizzQAQix;0&=uSq6M_~sn=FHVEoj3rU`uTQ zi@d+!mk^3`zWHZkw~0si0tmbS?b2$I?hJF}3opC{kf+o0Ost!K+C7@u~Qyh=6JZ`yBKX}zGlrj(rh^j(k?f%^x z<3S%{2azXbGIt-`+dn=96bz!;yLsocPd?ebeQ(y@N%8)(fAY^IQ$9Oy0W7g#iUN25 zI~(J8w&5ZUrd`DG{(RAJTNg!@!NY;n0mAuf_~1py1hb!!$&r08?>xLK za?FdTpM%QPv`p7=gCbETJ)Y0LJQ?TEP|6n0I$g(|*MUd28Pju_OtqZ3ar>*4e8vFq z)b*X~uYdBh|6a&dm)9T4rmPzF(&`#GAWwOT2hraisRY8wY4Bt@KcFDP@#9e!l*Su7 z*Hv{)%2uB^$m`1{WTPMwWF$v3l0!LI6LE!H<+$A`2v$k*bXNqTrmG{+LbKT8@~es> z3p`uQXTSXVBg4(_U4Prw+6I7;rGt#m=E~jf@t}8FTfU}hL%>3Y6~tV9(0c06iy>QY zyS^!_QOOO5gGQ~^YM*kR4!NH6kGtouq+B_l&24Y(Rjb>NfAuHksA)5KQ6!}*GInPu z*BhG|0V|V^rpW|VEfX;Q*{4713@4!17Bhuzzh^pVWp!;l?2|+4z3JH`Z~^65$sUFR`GT`c^3*33*Vg76$5gJwS$KA}{JCKBO7ME>q>OPN`W4!R^KL>x5{*CQm9!+`G|4%w5UPA|0y-i| zOU6pQh$(2KYloJN7{wL5IQcPpvJ9P?7_>y5C6kVmz=#&Tdm)@AJYzVw;Nl`6yzJ=$ z-^&9`T>|;Mur*%@hpE2^rOzCr%M?W`5hF?kN)bvg7D?Fs!t}=)Fvch*6wo}U^hO~r zt(7GSQ2Xv|cSJB>IW9wHJeZm!2~VFqUs_$BHCSgdajHvuU;Wbx?@n%ww7;xAF5^4KP={p zFJC<$X|86v`!7E#m1?%FbzA!k=D~WZDHA|J$i2VGCkIFaip{sb^jALq=qLB@z6Rvk zaCy%&^VJ>C9Epr`^5oxO57G{VG`q2L$JP3xAQT(dU9ByT+p0Q&Q3YsOp_*A&?~P4#W*v-JxN(X@ zbYM)$=l}x!x9D*p-IWk6B_bUo5)Vp*N!Oju+7()WSSV`sLyH8(EE1d=Ve&Rinn&#h zPIdXYe4~>bV)@0mNDFP8f{XNROvGX;hIAL!Acb)8Bt+{vEP=TrK$rwSlm?AS*urT@ zwgA^IjOfCr)CEFU(1Ozb^b@oI4)J0LOa`N`qm3g5YqZBA|M@SXTv$V?!z_ftW;6@s zAv$L2Lnsmg%|Apn);XrdATa8@7#ExsCg?@^5pV?|2egUf^ZtRmo?}~@reQvF=fPdW zw1Tm@gV@&jsU!-=$0ymGM8_UzsleRjA50G@h=Y#)=YRT(^=xlAvcLa(zkl%j1q3Q) zITkpW%>^eki2^H$Ou4*b+bEa>D9aNYc!DtjOBnJr$JQC_+vLLz!!r4NWqs$)sNeJt z{~?;z*T3==AQ_@(f<&*?8|SB|{vj29+Wcc|HD$1I^Q&T}e17_TS`WT^{k3mAeDw8? zKL2ce`_c09PGRX@W%;(4DfZ4jl68+2^PX$hYPE^VWintXeF`n7)_rzRvXJajs5!xfe zUr9)`X@Zo2eCD%xz4LirF}eV}j@xZM13H}-yz};n>2e;M;RVUFG)~~F)y4#pWRAcj z2^?JqrbecrlJ)-CY+-fh_0F>&$+|uOZaX+~a0WYL_)4Brj}Cq{0Y+>(nd(ifwQSp| z6fy%v17fI-P8DScR#gCL#y^6jkjsyB7`1pADbrZHrO87<$O1X`CqPYGpkMV4s8W~K zx2Udx@qBtk4E$z~r~l4vilGnPwu5bbBF|_U8SMz6T_E-?j3YL9gfKn6jGh9(tI(M8h>=vy!O6sIie_vn?2p>RWS%H>@R7xC3_aW25qzJ+6X zoObhBnTN7Ek%ov1f$(DRL(#UC^t{S7z6vPPd5%3z1;Q`*i!KDhl<d*o@h@x1CuH=FNDZ(Qe=UI%t(udAPa#U?3ZL zR_jkR(C#vb=?+JdC;_JOqQvn+u=i>6@DrR{Q%uZb8_a`)5!r%ntlD5=?2ol-tq$7M zwauI7r-!#5Jlfve8h2Yjy8$&}_~P?Uvi}R?7{C`?=z=Tp< ztZM|jml0mxlM{!ju1FC>5S zf~EdKH*IzaNJeSN2){D-Pn8iVSw%E`#Nn@B0v?bUW7yIRFtwRSCr9V4^NBoG$k7la zi0v}=pF@MS;`uU+>_;@ z>2a#u*TER(xXPqEY`?VB{_^%C8_20P5d@*pXsm7SXxgMvk(x)JS;pwR({``~mQLF? z3wcSg#N$`{0xw{x6tv8s2%zZ3sv#n`R?Kd1-n5PJt@~eV9sC3cB``u$A4`G=#=7N3 zqucGn_+h)o=x&B5@|jF0U8|Rey;dP7iUM=i8J0QKMm(sLMaYRn?4+il^I~@Q*6ra$ zElPMe7(hV~N{$&|rItRf=S7Ya^2LU(bb+wyni|MIP%ytZc*%)b;LMhT$i_Vk&gLtH z(n_IF)9o#7GPEJTE31Lm`k5GTyAcg^T5HP z%V$bZqwrCzA})4R`w87NI{^^l%fRnS*O!LCzb5`6v~VIQN<+K!u!urUx;0bRsV^>c z-i6xEu)(F>A`~C9OrOR+f#XCl{4`1eaQKk&@lw+~i~J&WXso4%i4006@O|;Y&v=gY z9P6~z)pgBr>~dvU%H+${R|C84FUTME*`x8<>j60 z-N7Wt=~&hFcGsVO{=p|tUrK_m$jYGCt>v*YY$H|z>t7JL-x(RuFj@|aFwd}jy;2#= zBZqAGth=sNk<5{*_1foyVK>X$N@pPEwhCf4%e$J~HMB7hFoENS6D266KmdYF?st#C zre*5N*S`I~f`zNwW=9!u{nQRICY}jk6qr=+9>o5cW1t6%3K_U12`C+M& z(=G4K*Wdc&^T!e|*hG2j?A-iXw|n&Z>km(lPkr0+X=o;u^Ez6jwD#v(2rlc8`kS)OH#+tPb#QXa7ala!;{QWoHT-&(bJ$nhp$$?@l z6$F99K>J8-BGa&NvC=3Pa;0)9mn+=d-71vU0q4lZHZEB2+{vh8SvDjRuoe`*;NKbR zpyAcj$#~qi36V6Oy*iPyQbsJ4mT#Xu|H=C9HM->^YI_$-3Zq4x2t_d_0WdVQgxH2L zzVuN0d6Mw_yx&l6py&`e1c`WRDcL?ytVj2jLJ zE{!2I)>)Q<#4I9zG+*>6NkxyRlW)zX&0@+J!9}{RaeNs*PAQUw@|-N6_(urQs=RCA;8 zBvZ%-i=BNGWa)N`W@3frfwSkss%0vMOwEYQ|gCIZ7XHU!n;2fB$XDvSoqi87((>vxFlw$} zyHl#Ij)&v0S=XwyZu{7F5wJTbVaH=l2ZNbVH_2A0#T@6sh(sHRJe$eYMWPiJws-DZ zo?fd|fAx#^JFV{0N(0YvVY-5Xg2QpQ&ne5%?{@vnyTWG*HAzNKAka zz8dnOg+Q2&ZRis43lk7D&C~*!hra^sq08z!)rBB|Vu(Ato_8v`?WR(|82_VtHHCun z?}ncX+aO(u!NYLP(MRw81<#Q2K9~kEasf8@Tn#voKbMoacIPIH`h#^^6xPxuA2~NX zcXjfZ{Ezu7=h;EyQd$l5>@P|sl385TFHE1(P1 zJv3Gf)v!mP$#uN#o$Xt9?wq}P;yLEEjaAD(t=A?K{SDhP9NXTx`PH4>0MyFZ; z1R>c2h1|%^Xu2{|4aifuzVv&)^*cX*_s6W1H4TRoM8-9253H9%LM(-nDCUu8cKgFx zHKUAW-DPjxxj7h5iSO)uC;|hW{vfdHYL=I;E-9M6v%dakKlzEk5b*x|;JC500c|0d z%R%yvPX=qtS$V9_+6c-PYQO~#Pmc&kL@a249kQkogOWBYajI%y+YuNjYqHi6EU8fJ zB4cLl@!_le*B^eVS}Hzy`n1-lM>_?MPTib0a?eW@a1m&s8XlrV zp9m8cirwg#FZ7{1Z%j{zP}*#o#08FKM+hq##O26ziWaFN)&&=55W) zFpPo8B0_>#WTQ?8zwyr3cK2@dn#Ta7AWq3f+NNQfnhe&z_Tjj9Y-kfu-mR=|RT?`0 zmTTLuy?F6H#{5^l{B1Nj?Dx9Bru?;iB-s$ND6oRSG;%J=u7CMke{*?xlXWy9TmRD^ z{n6Im4utvTpZ;+%M~=k^G9?u%*=$L3rm{F3d@$4wI{-G7N+Vw?dVH2Mha?Qbmd8$X zR~e5g^`&4%%fYAbbq}8^HdD)qxx6^+wE?&AsGBY3Os$VFC*_w!sR(vl!Cy+hv3cv& zVN1+#VN3AU)FdT=%z`vPK?MnG_WHMPUOzrQlXyOpE!Ym&L%m`Fa^fAo_^`OV{rt&? zgF)xDH-GC_zx-F{=g)g!Ze%&Aj;tj58)h?woJ3~NczAbXyOd>kP8yAeU`U3ix{b3u zjHb+q2|8fZA2dDJDOAchv4%awsj!2@nlVnSI!_`EqNK#^Q4A5MuY^xyFGepA4Tn^M zX;~VPGG0P)Is>*;4K1d{R7_q)L2=$+t^$fwnS}V{QaeU@7lPsiaUw+NqEKX6%RIsa zE_xT>;xs4o7tv+77(!zVBV(vJE!bdZ8Jx^RDz<&W>x(_ZWTisg#kUAuPW~?TO!~+2 zPWz`Mo(4aZK*2?hZc?$*#u3#@tS?8@L22qxFN`V-pBQrD3sBHYI22DgeIlCk-k<*X z`t7d}I;f9>FZ20jGW){c-JU8Y*BQ%Vz*P2#*4c<9Wd2;fqTqsx;+42+xsOxzG&xit3EM#BqpJnm|OC1y&*8z2arGEW4 z{<;AeH95A8A?t6B3JK(;Jh0HgaJ;&?V;Dv_An?hVM@eKnmKDoiWw*1l-E4LYkKeiV zAYW;CV&31A1#LFSseavlTNF4@5pUgo?arN>m3*-^?20^C4>4e&Whhc{wN_gzmg>2D z#W0k7Rs!QDp3c`rzU-Sf50_Z`@GpM)i|t)-0H{Mn>(YnewK{!dN3yZ*26M&-2B)?vPV_0aYieQL8ixyrb)~X=xyDHQ?rm zEo6j3hHDPgrFyZ|>2N%mUn695VPl@*0YY)$NpzK|nla&rFrI@SLXoNI`=hr$=nRjfFca+Hu=$-a!{Vrt%My;_N{ll-~a#+07*naR5yRi|D8875UDRee*fsj6U)>yg=Iky^+}5aWkKs! z^FfdRkBIs=ZhuX5x{amH{m1W@8;zi)8k&>M`yUvUK1sg#Q*SxFDtPkwjr z)?_k-7?3&Pc#+Uyzg&3^XfPv*f;}FBD9=^a1$P7mwY75>Qm!e(e*5|P$)`TL5ZK8V z%K+P^YTdm1dS?WnY#^Tq23riBEV*WHJB1$rN-bLaTQP}Cl8V?1`@hY9GMlS%lC~{nWjZ*+8f`5tI zMYxDlBg6?1jCrDz_Ki@S_@;)u;IomBE+S`9moh|(-OlP}5x-20%8P;`rhSuYA!>O- zWL`{gk)~vb)a$G#kWL`+%+t?4(Nq;oX!&A;=U4zjGLb>73R1@3=9)Eh*)YuUxa}d% zvd!yvzM|^=VEqs%>Ubd&B%@ZXkB7=fAAhpGu}Xd3qd9Kq|JuX5z4IforBDWwbeTh?wFPn0%5Sx znm*PIxlKTh90|mN(eC*4gkw0MD#P(uV6Ac~n=32<#Q_u~szOs1@~gn;GTG|!>0zZ* z0TA_f(_wDjxOsMZo{^-3v;Ny}yk?Bf5F;MF_`H4m3sX0g-ZQdEoImFlG?TePQOq^E z!%<`H{#r#u`cM$-y^)!b(CNW*NAKLd|20LmJY)p*7VtAbFWs~~UvC+-ictRyyh|*U zO;!wyky^LERuu2tdGK`q<+pzOADUIq{5TWk0qf} z5X80By|vwUwywQX%&pwGe)s0}dpEA%nP^O{v0W(EOh@ncN3N;-z5mUB_2I7|au3S1 z)$QaYp*NE6Kl;|IS5JnMF<4B4<{PxMNtA6!mFNNq7Lt?++0xodeQ#^Ku)H<`o;1)}&31jM>N7%4X&s80B5*rEYT$N+L$VT! zQKOXYja5k!0o7_t+k#jYGX-AA31YVS^3Q<*b9^QzvS()}hGi*+19nQ=bzgh)&6CH! zXb$v3PPCK`hfEi762T0lkcD$?LYY|xtaZh5+4XoSTP&59D%BMiOO7dHR~N9(^Of)Z z?hl@S`eC>AB45k`9?yVqDw6>VgYB5Zy`jU3_DEpj>5eDY){5QUnOM2Lw6c5r;?Hx% zWnJzESg22$7L(IuFe(1@{-f^?k3W0zvR!Xf;Kly_XVt7J@vOk%Os*(pisNxl)8$V4 zRlB|4ZoOSa{AYZwTwPwTuWqcZJsJ)z^6sl7Fm~P;E%~kyrECX2^Y3Uj*Q?XhD^0$vy6JwY(tf>te8QZEW5VFae{{< za5!xjvs}+R7mm*7yljLz?NfM$qqFE}a6+^|n5_hu7Bz)=sW>nfbe=6MblD^e!U`ZG{$OE=|CJ}V3dEnWoj$4S}x!HW;GA~`IA92B7p zEK3JC0U;NBrBbdAeXHU6#tN0qNaiP+xxIU>cXHs^CU8p6Kdu2DgC4S2+u5v%_ix=? zs#iYv;N8Q+r=y9iTdw86ADNn|D}6;7)z{X5rpSG@R4g^>b%tkxqwI#=X1!c|x&QfK zEX%4fo+#rnFht!_N3x>YOt#S|0!uRuun!J&ZRk11;}C zgBk}F0@)_cLs=eT}$x^V;ov{idc3GucA7H_2vL%Q9eyv$D3T=^E8A zF)e2=CWt87^=KD%hp?qlE8-E3?gARq-Gvh@gZ_mmf{5nib>7jal*~bHrf!{g%-QSl z9L3yxL_AAXtZU=M!gDIhg>pMF&c+GhlXTNehuW#wxOo;&?47tr;wzEX9OgPErecnU zM0)XJ5*IN}k=x)C2SOA@3;K3Zu-HWc)$kX^KeP~n&=ru6P8&jtjRA{1Q{k4%0*&`5 z;nJ&$>cf%#Ne{{rEHD=AQq&Dg+wWlvj_lTwmdNmUm!yj}EH^+waBy2+-+u7me*5@< z!K|h!w&Q|zP?R!(vQbw@lgXHfJOr$e0~WHkS1VP@XUB(-K-T9&mZ45YZBR@Cd5kR*`DwE^7P6Jy?LEh} z1wjB~q)WD#Vaw(6r=LB4`RrNN9aWb1K=^2hx{wq3ICv*S7h zK5e%*F<+gY6JiI9%mdWY97lH@1IWSmHRzcAb8&RbAdv z4IA4NDOlu@3+s+1yMqd3Hn4)%EA}5NsmDek4>-|+NLcE=%+vX zAYU%8Z|&T=ee3l2XqFyVk;!rG09c?$4N_Cc7sM=^q=RTWmByQBMs;;l?VbZQAt_-v z!?YCL0OSK*sG|*etnrM!b^p6BpM3%;2Etb^7r+0Tf9-7lQ-Cy^=o0x%wg{HKO1aF5 ztSIoxup=w7kjd#fnHnQ_${P<~J8lmkzI-kZ0SwJhb?dE1ccB~r2uHH6DGK&yngG%d zN3zZGif#sTaV4{(=_(W&qz4G+U;EGh+s-3CDl@Qj$XZy9~MxZO(-rhJld=*eV!)0nYR@DqL zRmK6;F}5A_;Ne#X-4j4TA3;%ua~tK7jzm+PwEF$u|NY;4_W38KZNW3!wqcwV_P0=| zQfPq@q8F`4g!`;7q)d=bHh7AAOmAZ{DcUR}Na9h-$vKo!*Ws5@nzWgHE<{8eLp2;h zxER!>sE%ge#j~dv<4ZshMWkOWXNz2VLB>MFK#?wCl!B}&@-y-{TB*(JdG?kVxCxYY$xpP{x8{=d8Fvq zZr^F07*naRO9`_N#``Mp_$rP$P_YUD{$uM@I)V-vt$vyCGbM2 zwxr2p2Z^6Nd7RIR6VS#2H^iuz&p4L$?8Rft6I$KD{fFP`cTXX0yvWxIxrvTA+s$LU zB%n%hWzyXT`hx*Ncoxv^SMUCd_DIiV3zn%Y)vFAbbzwrn(6=qPES(AN2iCs_1FLF^`-Lu!86aZD_IU?6?j>lS7lpmW^%x<7kpia|NCXL{zcL#H1)vgZfAiSGm8}k#RDdR3sL%_oGRO|5&}?0~J$ z(ffvJBF}m7mA{>_JZ&)n} zV_7R@SU^&9e9GlO%_||KBC5|rCD0ntV7W!G9Sqz;jjXJ$d!}5jthm;g=eV(A>K3Y& zG61p=KoX^u`tr+H=PT9K2d{l|JaICmTR`{Uc>6c2^(|2oq{!pgd$nJzgQ zk(m}f5vR`EUwNm}Xw)m~rF>;~W8?hflhutoy_5HBw;<)nBqdN7tZeS6I$8Yi`deRq z_3{}ExXH0udbS#QEKX^gMc`(V?dbR*&Fl4 zGYJ`plj8#%-EIcYwZ4chz^G)KCJ-eBUnJM@q6@!xb@ZZRn4Lrs(V!-4C$+j_@-d8= z{zMREENwWUM4gUce)`k*P&(knuHzSr>Ms@p{!1Vtx-2PZRt*WXyBq>z;ENVOV6>1U zACG}q4C+t{`SZdK9P?QeGK_O}l@5?$I%n6B_(KSswG1!uy{Uh=WFE9q0SW?32v1H4 zS=zLN&g@q3^yvpbZ!E91yZ!He_uCMlTCE)%pWNKL{^94Jqxk~0dH*bCh4+5)XNYW& z?P9<1K|y-w^>;ve&d!mUrx-|2m}dVP1u0!FW`6nZUp#o{t7q*2@^?jn-~Er@`^vZf z`p576(SP(e|I7D(^``(%{lh1P+DiXypX_wQGJ+sBHtv=x4T0xDExEF^qN`)ekZrBq zYQE|#U^wLgGfcyHaC_5Zav%Nl-y*Q~c|5}x7*4`0&vF9CXYv`Lgqx?$Q&qP$6FZE^ z3BpR&VWnC=SCr)u7zNGI;o~z)0^nR)TUoz78XOlTUg;ewy3WC;OYB)^$P`vKRvZ1% zFqf-ZmQu{;HRaQ=3y^G1(2`=1(8mb17B_GoxZ37cs zP|mBB-1+_!T^;V+`Qdx-{}@cLsw!h5cAb0oU(?%7O_L9r{Y<{rSiKIgiyc+hCS=Ux zF<=ygYyxlo_~ZBPKGmHRP%I2W3)OUVpGtJpgcdGzp}6$hL`$_zQ}0((nqo6`ECx+sWr9e6R96f)=un0 zK^ov9*s$LV*h2~!FGi^FTgeu)IQ>_3q0IH7Dzea%{u-KQW~wj=hgxJKs@d6KvvE+E zQ_p`I;;6Tv-Q%n0C5k}vtWbH1Ke}>5@}lXPw%sIV$HLPMefF0!hzn6L=m)?LEGs}k zcQ&Xb11UVE#ds!Mm|!UzJk6JvEmMEzYhP;*$;OrKp$xtsJ$@YBbSf-=Zz$`a)&n2I z&;e%N`sz2}!EmC5*$gW#R0D>x&%Y+W$KCPuhi^B#;{c2U-B+)7yu7kjF4uHz6zuV4 zd(PU*GPbp0uN}lb>YtR#b@+&78y=g>x;;{{d#AQZtMTC1&KXVPwVW!=$C4lz7@+yxGevsK<14^LH1*EMaTAd$nmI^pbo zrCI|M#a_AYh#TAizVxVs`&aF-#>csa|U_G2k*C9N2BgR zu~ZxMjy#r>KU9q%@Z_{$!VB48{<^=2g3Kcgum^%QhbmLse*2wo{EPqopXBqUj3{nj zd)u;3o83wC<;zMj*Xeg;)to3tRI{J&`18xu5Nw(LDf=DdJ~c7Bv$_DgQNBBNA;==$%Ek()Y?h2 z1=nBy&JT~CJ+>Tod1b4T6_<9_hO!xOO<6OjMnd=dz|*4y7M^Z7Fl(*hmX+Y?7fY~g zW*P-Nf(8(nP?`CG9x*vPmzI=-K`3g{i}fr@yrfLi2;=u=+twpACuG5H*C8g(G8-fy z3^|RT?yccYI$rdAP((=w8p&d^i$)zfnJ8tArZ?+@@mZZgv~=K0aWR%g6jhsr*_@@y z4Wq$nbY$^|Fj_cQ5mWKc3TPgUKM-H68l8J4VGyNJwF{rleJ()P#hwTyti%YVycLaM z9wvqsS73o?0T-k*GW{3DL6jb3rHpzKZEN=L;)WD$({n%y9ZJFM5CX%|qDRFLemxW@ zq;~}GQ3f zhZ!lG%Sq$$kgWN~AUC;et^{$8M_`+KHXe6|U?)SF$z<~KAz2%A%f|SqHy9xyUoMrwrZ|xm4%n$!-o5pWqy1k(d5vVyO4_w@c6ojM$>Yzk zXRL4S>ADK}A)CTXcLZf-13u3O2UIWR$HxbtYd&i!rE0!AoVaou^upv=L|s*F(g2oo z0#wQV>AC9>?6fUI)s$AZV_2rdGi0ARGCP#0tw1-vwZ6W+bGuxs!0V>mTwB}Qx$~wv z>8bsuVQ7|PGoJbC>{JIjEM#0;X9}Bp6^~97m5HBHgS6PM50Sf)36Btyc88lfP#UulPDO$KsMZtl6)6# zfgEUt8J4X#o!S>}=a0hl2Qe43;-EJ~)5TbUQNVs?i45W)^g=bAN?FR~IayT$&u@P72N>(X@fyo3$NMjQ1t|-Hx>Daj z{*pR~(lD(|w$SglbaE;z2PEv;t#>AqVL8LNTF)?TgbD2fO(ejZ-zUk`66Eh(Bap2F z@S{7|IVAp@AOE{nx5;`s-~`#%hGh=VJ06?KWW-MU3@moHU;mQcJC`!qZ~g8+t~B;Q zi70|$QP(FEB_oi6(&NHqQf;YNE-9KeYk`ap{A>XKARLZfJS*2~ za6LIatd)zpp)0!DI%~ezKU*&GV4U?&ig)@0Yjlh7>kS~aL5jJ z6+qr}Dkk7!Hj{&ZU|C#W-FWY_r>w{;C$BskSe!27n!;7drXIMDxP*30g zRrma?wz?KZmnK6a5}f{Un)U|G$CFgwL6J_1Qjs9UCzL?z)O8m$B8CY>2_d-v5tAZ! z{vMi(CQRMN2M`pdM!ueUixx`qh(wwx>hMg-bVZn)zCDX1;?PA9n8H9}4$mjk;wcbb z6{NnfXR=lnc`m%ZG(hwkr2<~`A_;^j744|HkKiIob0PSJ9;r`hbtSq`af(tLMsb;d z6X}^MdC+W9jOV2{JGw~$u1qm-IzbdKK*7k&1z#59fE~`#7NTG{Y!3@C%rZXu{6iLW zjQ-I-!F&QKljkL2rv5^o{PaiLEBPSVtWXrQ)l4>5C`qcSpqU~X&%KANC$b&@;GyJ2s z-#mZ*K3V1gLZ2L);4yp_x{SZ;xb1??jNw>b;(-i#{0Hy<^l$y`ztuiJXRRSwIcI1b z($9w^nHV|$;D7s%o_v1X2M8?WZ)|P?c8-TV%TV&AwQPC4B%0>rOym$JRTv>ZnvBWv z431GO*CFc&aZo4J(GbCY+@#Di=6G*wPqCd^F()CysgHU@pYuX4Ux+k9X#Az#|JHpdn{Sxbniacp7@JmUhMY57ZF0K-$s`~U=j`^&`5O~yZ{Je6&wM-#gInxu=vIN2{mM+8#az_ z)D&&@@h?slI25;wf5xL03kE0{=o_OQ22&6?pO`R94CCA37&PxHXj-6nDye6W@GNgc z?)ExEk>|3?da>ZO2K4bN~*}MRd&iUF7_<#KIXXQ%9PjF-_fZ#w0x^;x7 z-ZTC|LLqi9mvhI52SH|RQ)Pq<==3IoQ&1k}vf_G0vedq#bzP&+7~LQJyFbkHrXr6) zdkICfw*Al`>&M~iP*9f72q97ca;8=gxLo6Bzj)8mMv5Xk9;h6FE2#!9s+!vGo+^V$ zW2K}SqTuKvYipXKs$+{B~3Gz^pWo7viVFfK{VtI!Ou)V z%816eT*!^ay~oe@8Eu@A#0eNCH9H7E_WRztM#cod;B@cJx8CG!OVic!Uf(|r!kc2D zhky)nE`X_Hk^OE04b-%PK|z|y6-R^9yKlbL?hWAc*RSuL9y|usEt%EnIT_ZOI3hKA`9 zfe7`n+HaSn+z0Q!ze4CEre|6PKR^HJN2kZFljGLuNt5x!$;gmLx;)b4p*|UDd9jKd zV6(iVOjcmLB#DE5YpiI^_Sxg7``f#_VLPF_beh183x`;TygD4F_sJ-I#0i+hbCoH^ z(UpJbazu;(IVBomLFS-EMMz6dloVokriYj(eJ%#+2V_4RS`X2|Q z`y!%d$6S&lD&_b>Px6rktZt!O40~5}7~?pcr+j4EPZ0%yv{E$2Q0FiMFaUBpM8TjS zz1egHG;7>ZH58s9O;F~M+M)XJ^bsuwpruNTIUK2#a@Dk4ffv9b-3byI#DDXRZ#@3R zkEbe7wFTq}42mnuYY1uc67i!=d=78|g_u1<#ObJl=frZUpa4SoTG4U;G$ZAPqrq$U z?wq$eA3b@T0aW5SD2wrEC~=-D4>Gw*VQEvf+1^A2Go?kg*8%x&k;4|SO}0N}m`1H3 z+XK$CAHM$1&wuot zT^Fl{+dX{VSY93*R=N5XZ#}V?z$`kg0)SpHaC)VlLy4Kd|BQCX5Iy6NVTNL2o!}k2<0#efeu|pR`Aiwy|b>>$^W( zs}=v{KmULCduPbewt<>vi;iu6^cVlry*qdFg4;abzrMLssnjh?XUO`_?#}M@4}S6C z8((@Ip?OC>KN>u`|N8IzV25tRp@4;JLmR?Bx@io@eN~lVAkyiyTtcKBs2?)k;9t*L z@B6JH>^sxw$uXLEzVa`4n&cKJ3V!o$774P*VH&zZeI6Y@rsmWHlFHvRmJOsjRJAwT z=O+|$bk`2rKBbPr)VIhSB5I;(O7dm_!;H_>xpYRO(~RaNfv5F=>92e9rJ2#t)9;~0 zGIRE=n4I)3E!!xU4bzO#{NE6~(__Q$zWb|Lq==>hREFbYiUppS9x_C}k@i~Z?Pc#G zbRh*yrY2ehh!U8wVN2vU=7*^<8dc?VC;?X}mLY`bF+?m{FRC$^ zM@x6(kP5oKzz7tg(an&;mV_u=!}NZPD6-e$G$XSi%Y0NAes?yz4+S4ReewZ#23!sB zx7yfP+r8Es^g{ezDvF=~{NMWmjhNy}>tD%NH{m-I?Z~#Lm>oojX6N>Wg+QA#$s$5F zFdt6kh1c7ks1^q8C|SoQb_c_i^_u{+S%E1p-&8x#kB(o0oG%xvjwzp<_Z&83+h!rl zl08|3BF{;H4P={W42oA?1k++RQ_Av#iIJ_Wsn)QP&y@1wyMOlM@dV72^6uu^KykLV zZv!nehA%});>eCPf{>|LE^pX~<-rVB823&Z>r2ax>a)XE@9gkPU;i5u^?Wk!2E_=p zEXYD2VmOY?m=oZF{fXR{$tew6)gly2vp*WCR!}KWI1k@^qthP-RR_`Je9ZXx`7_JG z!73StETRX6FekF0Q0%#m>45x2oQDO>3W7+q(c@7Menly}zIUzDZDL=Wy}ev{@5ldA zH9c0yFdQ#R!dJiZ{dQjtsy%30r~9WBK^3wkF~71@E~;`{o^-*|>3H1v*?zT{vrxX8 z7yN@nIEcu=dDn5vE482*LPW=pAD8petP_$}rpZmqG7;4wOq1M-g;g=%fV!0@{b~-( zwqSNu_`*nk+X_ufe`k=h`2}#=_PR}nPqBl@5OWDp=36rAB)6B zg+b_Q95Gc|qGZx%ccEOOBzYuQ>Uo5h10fX=PJ_uWfQ3o#i@`D#4wImm1i~a7hQO8t zzbFL8W1t)jX7r;)C>VV?r8+V7M<-zJP*gD+C4ydRl0sMtyEBb~;ahkvo#It!TbDvpJ;GhrZMXuL6^L47h)KgrpHnK&~BI>g=cw^Plx<>#2o_}r; z%K@Vx+mJqcc2FpaD6*a;G!RaqE<98{)Qg7ubinn}`cA3P5Cv&<<6f(CBJu2CG;k4H zEAh?4kJ`PyteH?c03iceE@Zh#x7@{Mj=YOq2?eVt8V)7B-twK0i4>&WU840D&D#k%z~&CyXZpjcik7O4+iB zq--|tIXY;Pb)C$-WmpNS=joH@tLv*lJAC!|&uwF*%6&!dDwCe74E#-wtYDF1u#0!l z{=h$5Y``m{@nqP10!1OKTEF{hq^KsSUb~+z7rFJ#+dG@PmL;^#`-PH-sD>W)qZ#(3 z$l|CJN_J@)C@*kv!4)Nl(-cuLA{?0T5)*?ALoa8d<$O{A&NE2iLYU@x zIpFx-leBb2l+;RoV-6y8;_0kKB_yVa9e50T}b>Uj|dGnohJcio2dpb)rd=z3&m>f)*FsX{bv#%5HfGYqP4BF?x z@^(NdNPB&0Yoe=Rr36FZ^Mhw1hi5sk^R*lBu+=&*l_je5@XSCMRvc|049*>#S}OxV zpc$q$?&Nb>koCh+*D&p@BpCjI2$~99k>@KTv< z_z4IHYE6O-{#$$oaIi9KG2Yp`^j(aG1m`6i39lP>T5{9TgAxHxvsrBBqHuItHAEVHjf?nUYybW|Nkg^oL@Z z!i#PZn!_skf-aRK(o%>HNz;a)zAj~i>G&5B$E1CEnr-Jo}ygVZ5lt({(XdCPamTmzqKpMZo|FgB@E?d>nwNO*)v_ zxd#lDJnYZipC$&!yB0$y6;nGrc{4jU$Fk#I+XqvY0E$PBspT_bkN|JCamxeZ$mUpBx9X zS7y6wPF*nO2O+yZ*A{9DAzVV{p5pUIUhEa zyog^s{g`9;T2a_}{X2j+;UikBbWg|jy?H|?K&=*9+;7t@o zJ`_XBgnWn~M=Wh93N1+?Np)MaSd`91BBk94lNZT7jS;l)q*TAQ+RPX5V9otHvj+-07*naR7NT*{rciZC=L8Bjv;=FFH8+yfPB>L)j<(oAz0ic zRNjli#Gm5%xlrlvavjDxEmku4R_EIf~=R zUc=MAN9%_JOUL&5=Gl|?0E0mC2kaUiZ{E0JTF$Je1qXhT64 z`t+b&$%bEH<_q?xpAIIn`blM6#at;!pr!+9==*v(uy~a=6jj#Mfjnxfy21G;DuLw= zq=7OXk5os@Z**D*`_DgHU*8!G`zG0502GI|W|D*J00p<#*0$HzG7eJkVj1 znMbCj_H4@}yUbXoZ5ceroHr+ka|?~l(b?xN7BtHvb7Y8#k?T*CoZ#Jk^xBBb!~wQi z91hKFcA789$l>Q79K33+ZLEbgyS}-x|KeGz+v*MmEGLvoHOAEs+r4n3A;6in<+>#0 z*H^c4g-vW~oHYR)IBlM4HlocY;2ymB)}#A(TBpYj*{}_?$}9|y1f*Si@SEoF<@Rzz zwb{dGe=+L4%JNv5xF3A7zqP##Un*sV^73m>pS-udvFnOiOf7rR`yH^G>W0j45>P=e_aXjT`OLV|a@!M}dJkFG2c0|Ln>7=2}L~G!LHz zEiGW+bKU&Bu}$T#$K_!_uy^|!G^7GHL5V#XokCsBMsglGH5vvvV&2~!A&)Lvo;2@Y z0Ion$zX^VbX-#Gn2k46_J4EOzaEPdWH0_TIRHk8mX+)fFSP=pb_2N8jlt4jIT*S$! z{{O7~=aVH#k|&6%`s49}z2G!C&#Erk)x4*N?O=BYa@gGi1mr&K4Q}xPAMq7`3BEx< z1R^KE9qtaY1hc(Edb+1sb#+x2uSyb`85x|sc%0gqySb^U5r2_Ab1qp?{>+W2sj2DD zRE=@;vg3d~0zgxbfR++y@4Em`)qV+g(F;rDrjS-YY9 z*J!>tw*{m{svvR~nwAFgKWG2sKh!%fh6W}R>BPw~*^>n~S+TWShUxl@Cuk!&g$YOg zCWEf9r^LZ6UD%O@ayAkQ(ish?k541!I{-}LD$@0A&M_RsY9qn+(NIb`nl;VO_g~8y$gc2-U8?oLabnb`MHQiFmE$ zv>?Iw>Ou`$r@d}tFdWD3IPByK6={`>$HVn2H)f)#zxnZFNuxB;O7Vq?MOn9%m96=H z|9JPK^^JRCtvfq2)A{H(u|Kmvl28|=%MHe*Qb}_-xl&ISniM}fw|G$BkyPa4O$aE> zMC`OTS8K=hb{%`S-uu@lyT7YqWq0?>+_-o9)*HP}ee>$;Uw``Rvu7W75x@I~|GSyF zJLmN?IqP=o>eOHU+yB?r=B<_HlZ}mQdwWl1w&VDkzJ9aamS8L$s>g><*A{CR?f7~J zIfPIPALYE}sNZN^jQhQ2d3tHOItz_*yWKo*_od%drXo?PPE8-|HIM79^}BEWXlwb$ zfB7He1fFyhN5g#U$-kdl`}W`b^#8kh<=UXrk+XxvVx?HB+*~Ps@QdHR{q46RY0<&K zcYpLFXdo%I{FndYC;##PFQ@p5rTn-5;1BnX z6Pjk6KA`HPeC64+GNWn+6Nf(Q>ttprnG#)PI)H+iUsg=gG?nV(PNO5qIO~*l9 zsQj7J8bc8MR3ptC>gJ@2%z)l1%43vpG>!>@tfMZ45NMw{2Tad^H43>52Ek!<`utw5 z(ZJ78)B1sKh!?{Oz)%5xU}!)=e*wV#nf(_pi{O?S@P)WfCNyG(6$oY;obZSKO~_w( zeGeG?TPUbJqN@8d76HLn#3m%^6f5E+O%+lg7__v;n<@gsT0w=%Pun-{KK|^3*2T-0 zr_qhOH!D+HySv9F%$1?Oxq0L0w3pBK)w;Orx9%Lje4?OkJZNHRu~4e6tgH=27n~$u z!XQ;0g-`WjucNf*;)6eXz0pV=Djpvdy|K0O>tFm*)@FWoZfRk$S}9AfTB%qVsnepR zV(qo(7B*K`ubmuzmB&b`Z#}AxmTC(t%PT-!&y^rQrCMV5$p>Pb9ORPNw1Z^WG3a+! z*S7HJgU>$uWv6j4KfkcNd2?!E_0G+$7dtyACr8qWy1cTQj|S%#^?YT%*K14TbN|`n z7$HXWAr#B=OS0kAK%~{_UnGa7O8q0$Hsi|1R&qwcSWYYQZkP^Pj`yW&RI=c#*(6kvW0C6O+O?Z^Hm}_*%q%t9 zJtZt(Kdx5`5}^l}93U>mv{ae7_xgQlPs>7Un>Q9VZ!T=!THL%*+mP?_@AXD!*zArP z-BGhUXmkdxUi{wf_En#%46)ldxu_p@y78^i@j*H9#IBq=9ZLtYoUN30wv@Nk^(94{ zR`;s=q({~XhDh{@hllz#vc3$VUJ1gr4*8g#XBBw25iw=9onhKB?K_|_gGf_BQU!cC z3(59e_V5hczZ%bgjTqdb9oB_1byT{^nRE^#6})%%c{NN-9|MHhXm|Nn2zfriZP7{K z=froU${C~ac7Rs`LhGX+;{Oe%wJEkuu!+#f@Cm_n-_t*Se4;AO%f?uE5Htj-+k)Hbcs5S2^C)Syfa0UX9h z#*8HCITR-s7r*$c|L6JH*?0cQzo;J_NN=YsB%h1#l&{UzsQpLz8H@@tb*pu8c>FSt zBH7*%pH(LRKa#d+yr-@A_}R+`?|fHOS60`SR@PQe&(C*1dtZ7=MO4m<*2>cAOX=Q> z3ZwC$+iu8g+nr|b?D3T=w-;`_(P+j;nI`}y&i8g#7HjoJBMFhHRi2rx4g0O+i~+GS zUlGIjUC#Km=JHPhPzD_P6$SpGvg2XvNzl@`dvCyWc65Nf)E&&-~p_{_g7aO&a5OPY)}_ zf@H#3t1a|4Qd!XU^_#uHAi16?X7={RwdrAhc_xqT#}Z%1phRdS>$J4C-s=yzWRp5Z zra(zUs_@gDCnrzdKY01<#nfZb&OOIUgXtuTsc)Q|RBj_uja$(Cu7wdtJ32N5KX# zI25cW`}UI%J|H4j1&(ThkjIFj7nxkXVzHFI{wY|7=qM#d6NOXn20J&WQjC>uEvTKX z<)&P9uvS1Yrh=;n(N$-HLp3iN!zc*oc}*QGbn55;F-&}d7NP$Wd@S@LT$(EM+YYcr z+^%a} zkMhNQaRzghL1GP8N^+Vgr?4B76{$jz7mp$0koaJg(MT%FdZU#q;P&lrZrr+kcv^q| zXFu)^$LmWAQuA+ZUd!jwl^~r?b0G4?Qar6U8uU8NgZTWlWC4z3+wAnr*~#8qwb1Pj z7q_qW68ovy=}Q#6u{M9S^BELpbERst)!vblVUn19c`)e32fPfrYa92^&W{I!iGs0h;{2Q#4UW&wl?EOT+A}k?{J1U6K3U|Q2lvj852X1u7{wRi<|C|@ z3f*4&sNPDJ`$XE4C05t2)oQDvcU&r$rYhBq#r2(MPo&>B1Ziky&z%4nZ^#STEuo9324D9XNo9Oq(Hq-7W3p&ZppCba!z; zh5|+>&!BM-beuZP$^%Ik;VYSmj{X#riv|XS0G>w_U@|lYqXlE4pU`8z`y=ax6fOW} ze|6#TRsQlMoW*Fb9ZeqMB_Hcu!fy1OqR6%!pto+=wlWO_g7-KvY2-R03`|cD6*dH> zRnquGrx-^x@rLPXqSj^!#vkP3OWlB?(PRVKChyUskEKO2Rh=o9<4fCfQ9hS1&Cack zJI8x_UyEpJG|rW)(pqQ|Ppmy#4Nv78jPLXXa-Yw)4f=wwT_&zIOHc_37H;#`T-k+3AbZ z`f{y0=yxQJ$~n|}vs0@r6^qruU{IT%?{=b-y}iwa0$@JI$O1;?7#f%6Yegu@Ny_+s z-A*@k!YAiN^A;5rhok9;uPO zLjd@I^+!PkG1N$zrUM-+E%b>m_Hx^Pv5c}0IY!mLI@I^$LZHBD>no!q~t6j zW$U03Fk;fj1wyzS{NOTRd&LmUz(RByKGYtW;r3rYI2`UJ!3kjb3J(`&^!_PoT`W+`?MEFdxN7f2pIVghoLl6*NIefoi?z z@)Uga*{>U&R)5fbw)4sP(WCRzXS)Z-GDWEnI|Ws}r)O8Yz23p`!O`h)v)%3v2HhAA zyYVf02@Bh;_Qthu=JTkr?RHmPN z`K#oxZ#9e%(i6M3{kqhuE6bZ#x31&hRJtu^%X0Ry6;D@CVSeDZjA1b$)obw78gy)%{44EayAVE*ei?Jill*B|9bCqU07njF(*YM#KK% z{7k8sd;0aSE}D(<^nxT{H15Zn82yf%Gb`UAZTD+iun4qjn-Z zI1zL6W-mc_ivlk!xlAI5Q2S;Z&@7yI7DJfs9;O#fw?RSRlcD>y^FUj!= z$|>HWl#1c7J6oGm(!%A%*xT;LGpUVE@7CQ1d(WTB;oo2s9}|#lzsO-O z>U0J__$U8-d1LF^)zxaH+Z&iEH!e%*07X!Z-oE zf)qJy5wb(KL1ztq2+Pr;(#|cA7PH|nqdhst11}SPdW~UW8-yAOUKs)zXSt_7^Fe0( zdHh7LBO`by>v&-N&J#2lRUaO)hrBz)D#kJEv9}CDf?i~DaWOz!93fZ*<6{Dqx#}~p zFjH-wyp%?mRIkbu>qwtstJ!R|PEHT!r>7g;_@L)o4_?2hA5m6%*L;9-9i~>wKzEc| z-njDZciwsN=wmqsNPMCakmKUZogpFI9}Y3s&JG=A~?tLf@gl&_Yi=8g}Zfk@7R ziD%;^+LsQGo=e;4*|RUJ;`H=%uW|bH#mlF&%XjO?Uw1kUIa~R~=kMp^E%st#B-4zO@YISyP<3_J}G=x(9d|%|I&)WT?qdisM<(aCqJ0&|MvPa3hn*14w zuAHWnl&>zY7fRDoUANm8?Owl<8_iVmqg+AG8s55dt64u=Us;|hfke32TOeU=(2>KD z+I0DoFP<$e%`^^8PLFrw7(fm}a^;0yry==V zl~#4PGqff2G(SxpCNjVR-}qJ zWGH#p-G}#L2mdSrf?82$<(yiV72nd{*=2li5T=Y>15xj;-fRN?lehwm{ zAJYl(D#a_{)WwhE@G6Xa6EV;I6wbg6#EizXzCz|>hGSqEe^d+p54j+63Mn@S{5&j7 z^EAa9L(o`)<8=RbTBuhe>!AgqXcovsOxHMY=#h>@XZ+1}iUPS_AzrMQJ3DwH^^nv@ z-N8`3$SJ^XZ`2(|g;GW8?wi-PFS->utwYte%TfeKPP-%rlBMCN7tL$eZyxXO#uuqW zw6T8k*3H+;m1@1wkofxO@hA0*le4oUjJLLpP*W#y@ZlS8)s|Op-MU^s-ixoyg{DaE zf|oX2DcAn|laF?uJ^J&1^`A@4ezf~&ZEdqI=PeID?}^gAZ~Woe*+F4&_^t2!Id&WO z-}+OTwVb3}s1_P$FHY;t!;9hKT`-9#^{h%~elfaf#Gm>DrTC2e*J|$M7pls$!DH?Q}s_w;TeBK^i zzkOwUd*krMllj>xY5J^eUhj0;81F>fzJ25R@&1nV9rlvNwDIMN<9Ir4ZFOaSZhO>z zk&~unR2cMI{eFB+bL{LDm`tVSFe*gS!5pu&Y3}SiY0IoJ_rpK=(~DMD>0IeyzBoRV z_NcVX67wi-k?;KQUlmJhAAb1J%IdsoL)qx(drxlOxLwXi=gsy&6gr)jG|Kl5_S(&p zwXJKsPilxlyPKq90H&KGSzyxBEz$1o{fAd?+`4t|VPR&m-5YvcIF)?rL`tXIa7gD? z^Qk@;4oUtkGz<)tEs5n3f__m-1sM-7U3Ud1)9m*|^q;As-3DAQMV z7Kc?|52dUZpHqlg^);1oe8M(w5igrf)Ia0@nTvV7;xU6J3fX-wpc<&(3MxrL=<)hkMszjgEB+LarPwsiX8=H~j* zv(G#I(XBVX|HWq?47*1s$NRUo*LI(OG3Ym?^#=K3k}AKjdRMwn2NL_*z3NmMqaq}n zoLktOs?6NFezScRFI17XYoq=WV6d@uCs&BitdW-S`OyH+U+~{b{>6p?cTSZzkGS;=CzZ<{p0f{Ca1ee zFzXG5bJfc6-qW`99uG%7b#HG{L22hn&+W;{Ucc9#on7d68xqyzr{r!X7(*nD&|+z- zGBs0{7V!R8-~9d$Zr{CKU09c%WhK?Jh!1}D*F7jya?tGdWXxizTqsxTXS>qgy>|5$ z;Or-#e3`%@zW2R9>F1_4wzduqPP)l&_q zhdqgia^e#XQx|KlD)Eea}^ls)1I0OgqR9vvVH9o@GVhcPzc<4yeB9u1h+zTQi zcr%E0A`Xe5TafERi(s&AS*|XqM!X@MbEYzMw#y5D;Op>*Q$_jnpH9mX0chhQ&q)EH zow?a1Z2|#a2_qdo+rM!F{;_Wu1VYTlKgfnd=jW?HAb4#?%msHG=SnTfBHHU>*gI;O z0|>c8)9mf5bZxm8UgY#q`{dLzQJ$RF3j+@zBHt*F_GSqaPk%*gr$@K~LSIIK+HGRA zn1G|*$Nhom4TYS=k%q`Hp&Vl*E2wSbrBZ2Q^ICt{0qqy%4XO#Sb`bJyj`G=DS-Lpf z!F+js@k-Rh~gaBF4b?)v8a(J=e2L_z4)xzmzsPay{&QrQcl#Vs1mv6=2s;x zjrxhSEc4Q#S)8fhL2>5l$?DqEKFd8fVE!XBx_MdiR_w;a(@E>B3ll%wi%iTZNACCt0W^-<;BF*)9#YwW{ zB)O~y#duUK6y_JNu3y_YyJ*Q09jR!YoyvgzNaTz01(W)E!`MfCezt#p@@#EwV`X(o znz^TEXA*^*z0tk9cN@nCoqkV_2L9yF{&eT-FK3Irx%Jyx;!JO33#QQ4)UK!0j%Jcf%eJop4rN>}*X09f)Y7X6`Tk;{U+w>}2W( z`T*$%I;ke$Ul#27FPHxGn9EB?@2A^Z86{Yq5NtQS{h;@c>I_bwvPDsKFpADiz@Ry3 z@tWoZ6BJaN1;>sp29_ugC3H(4UjfF|4Pr@wtjZaHn#7c9Xyhp$VH+z&Xr12vI>LINIDaX<(Xn- z{^H_D0*{;(Tby6%kD!p3(^r+FR?^N77jhd81y?va zhGk0H4{}Ydvoo&{dPMfgZ9X=5SR#PwC6kT;CAf+U(E>lg)u~+*L~W3(K7(A z0E%FbBfzyrAY>-;pU7!oakvb47U4wX!%#GUki8fJKVCP^rb#c8!*LRV0bF8|gWU{) zPwclPtTv;~Kl?$jFwcmS9g|wo3^Vx{)9z`&yBtjlssmG!mG@)2V-qESmN}TJ61HEE z>JqWJH?aEv`n|%cFsAgW2idYx6`x#5x9{BFfBvK&pL`~gJ5<$~kmWJmdlUcw5CBO;K~(pz%D?Ti{nFH8x7Qi;TBG(s@9c~DY5_$r zLJ30gq}N~=&yh(k7E9BO`kqYw?sxy>WdG&H=FMOH;#W&cv#JV`s^T#Jn-9NSTVG(E zDt@kRT^k)e7Nb^tRZzPTUpdk5%uZMP?c?N<2PhOPxx$ocwN~q*-EI_%rL)t$wm9-7&V14#{r_mnVdHCS) ztf5s&T+?1skkA*;P8F7q_V;JXGuzkS84bF}hbK>Wc9)lHFFt)=8g3V-JKdgSY^Bj| zVf$Rli^TG=G}=URt6*hXGNCh$_qMmY{flP2(&qNv`v)&}q~WgiAq+-%XLEjbeqDm% z-qFd*T1_7wmfj8_^ITlr*t~M(?!8+tcAkw>fJ|1MBu2md_s(~|Bd3IU*P|YyMl-kW zJj^AxN$@_R`U?|lOC3>$oI;yo`(zpL9kw6-=^n{BqF zYt&pwL=~Z>H@p+7l`^O?a%FA(%P&8Z?{d1Ueg1qjX!rZw!Jr@StRE{&H07Mc-FE9V zK7VouoyMs|we5|KrN!&VXZkc6==P0!-IpJAJFRBptlep} z+nwHUB#T&Fxp97aFzm+*CM7NwtEqRi*X>-ndZ&;Rr$@W8QpLQ)LRep2%0s)|Za%p8 zwrsHvKKylcW-*^H#-7*+Ys=HEc3axb$RJ$=AAcQmnJ1Q*3~JO7~AyYW~aZfy1sSw z>g_wXo

?BxfwKzDs}J2}Ukq=@UvxcQpW0v1a6sk0d5AQj;)C`CSZ_44uV?82P< zxw*BX;(zh!W?8KRDzf|iRj`JFjb@JVfsOM84x1A3i25y+ApsNgp(p5x`lddasHWbCOzm2nePtu{yNd< zXWAtU2qsFMcw+O1*O4y`bzMxDY9VW{EYAvU^Ns>(j3!wBcGL~kQ$>-~UbOpn@7~$l zc`Sy#0``*Kg8grP?+3Z5`DSO>>5b%^nbz`=*9jx1kAUqOO&puU`*&`B^6_uw6qmHr za?(9Hj?ayWXC>o}0P$qxFg2h>r*)ps=ftqvYF>1^F=PrcoST_lsjYVpK7H}>>GrMf z6~)Er@x|QqaT8(PB&9uZ3r9~M4?B%kZ)&QVJKH_Hx;oSCH0BnsCP#OQVZS{+zk#`8`}nhbx!P(q zMN}L@esO6@(sR~q-M#zp;N=U5^5a3bQpBms)WKP!Iz6Qd$;E4B$HU>U-tKN+zj^2G z-J_Q~)5Tn`6QAJv}KD{GtESMJ@r`(o#5z0sauR`!`A zrIac?$;gpm5;HF2=ndTz4GS~XeET4pUSNU>ODi?7b+9keT!AuM(ERkZc_Po&05GF3 zTi|0uCVf=^EF9T}z#^sZ`or+sNlj?Tcs9n!9K;;)6_wiC3^zYt{GK!%~uK zyq#S7X3NuyipZt;>E)HJsJ0{x;zqkaZk`vaE8T8OzV`;>_~aJ>gML>c@oa5%Zn4tq z_mp+3?&eh&vJ+E}9(~jv#Opcxjolk-TQeoGa^=lYztinp#QQTPO%e~g^?Ye6SDJ6u z_a$JjOv3(2e9)#dqep;DTXptXMedau__- zE^jWZZA{l{fA@$ks5gtzanP(#UB8S8KS25x@k0sqjD9NM@C-m4ivHBBQ5xeccX5(;DpY`9?pfL^{v| zGE_YiEvLjFE7GwA*pJ|xVD%guL+`K3j$vSYRR&dL#PRDDur>(Mm$e~ zKmcI3--z>z#>>N_gQs7=_oF{OKC7cQz*l}z)@M@s9VTn{DO#b)%i9mW@#66Zm}FI* znktm%hw-IFIducAoU4m%r(Sb*cJbu!r38@pWUk>ra(Zq3#_kvY{;Y+C+*q1+y-vN; zI_q|u-A)stoQTR%ey(x0)9H2x!^B5D>epsxn$7bL%)Iv24^CcwDND#>d_z#NRF>5r z2nl>E?QU1W_O08uPo95RoxdVIsHH+)+FlY1hjIe5*SvQ7*3s#)zWPx`kCf4`4n0_? z=AZAM6`+rW>YF#WN5h`AlM|&Sh3(i0JQzp=QKF%or(9UtsGsglmvC+KcDsIl zbZ|61H!B;W)#)tOmd^IS?hi)?XU#%oN{u1dF=mlEpFxc@dhymz*t~iT>;_y{PwrMU0BbCh+>vT#wehZCLRhCTX`KU0DJT6SIPw+F3!;xnE>(eFzuzNjE6nQ;c4Kn%bk zuwHLfisfl#?13WM00{t&GIun!MGKY7S~Z}rSdB3EU;dZ>#%_JIY2`H!{shhn9_=6V zf;K?<91p&@%(4H1#n4GHoxhHtGe*%r;98ivw#vRo=i6KQ&W3(L#WHWGc;!;$^{98@zVcZuQwj{*VnH~52~CJ6k=4Gnynvw-Rn#9Q9O9#kESan>Cf!+ zdQoY1(67J!t#9u>`AQN{ELC#Fs#1l&{qWQE&Gm#o(Rs7`+Wos1&EEO>ag5E<`I%T? z58it3=&vT^yqI0Q(ree-t+Q6^EWR&k&`Wmy z37M%x@It8?6{fJeKg!oio;$38qw0@mbw=i>pUr<4Tk_09IEahnE10` zgXN$ArqNkQ^WOWgQ$o3lD zswwg|CN5ZU(8+{?y{SaB={GcxMQB(6+16pkPyB}h;Ux%{9ZqEh;@jMW3&@b;r7=R^tLH3@G0p7sZCgaRM5PHM?+jgDF)ut2 z&FE@Lyn4bFW_(iQ&bE-ps)kZ_b1ePTIdgJ=_y=RX{ z|{#xz%aGuq)>dWe)Kn zIQ_xwRPn{m7maaQ`c0)ykhoB;E;UYH6!N*-mP}8uax_v&pywW%l95W+}PZhU0hw?+&nls%~fX9*958~ ze(C{jXMDNy<;%m9Vm^0sYqeCK>UUf1)@i35Uog~*m%?I&f`ic zK0Tm6lqC%pW-GOs%2c^9Jyra{AN}!YoGzMe>j|E})c)kCk+4qC?`|O4%7-%aV9DrYT{^O+ zbhh)@tLK3jr?ukZjE6l9qM;_#m#BHikQ zwoCvGhm|2B)EYt%%}(!Re`js$x=l=M(y6&IuQNDDYQ^u`gPKk-NcPYQ4*6WP2QQyL zj&h|DG@6RDm*!Sl!sn1pa1&H&qRDyXMBg>Aby6|wyw!k-C;EB9LQ|*`C@88!6Zcj)hIW9q>ev-f00!Zbn_KS0l%<(+{+@y>1xqI_& z=jpS4Yk#INIyv}qsWxAnSzB6K{otdoHZ~S@bqp59yh_jWOqmj(a#s>Y3s;4j#YX*j^Ce8FAx}ie~wf z>qtPzp_MZ2`SEd#UzLf_M%^6k$gc>Boa07ObBmDY zYeG24IX@==p^tX24uo0ZSrK?;ok08L)qxOg<%`5cr)lbidqEMc#4jbq3M#K0#={Osi zNW$P--*~Ta{-WOMH9MU_S9;ju-33dv4y!J2R~EObwFNmfsHpAqhS;t5`omm4FGJ*frS2B4#GqV7>@}tL}?j7#S z*+*H$nc0OG`!CC-e6d(K+UxiK6!eUU@6=rr9d!9@(cZpqGGXJ-|$$X|c- z;nLg;#3#x156;hkLCZVe{ew|@?x0HpSdRd^V<$f$qo1Z3=)T~l)i3FE0PnfMVKEix zmEuIO9J66PANXly<&?;E4pmI+Y8ME2z+NRoaN~7tMz9a2#iLI#aU{qUKkGid1VPZQQ!nkxkQXcz-ITyYnN-KlaZ9xI$4 zb^Ak|xhNEh(+jIyEYaKK3f{03!yUi}3=S2*4P~_TI|D+V$pmL9gq*7ui!u};WT2o` zh07k1?J@-?f6geyW?-rbE&Xi813EC=e|V8VF$`_<@Tn z;9(4-7Q%tvH$QS#%s_Tof9)6G>e7xJNX?nWA<%9%P6%RPz7PPo4+J3W2+j0e5LgCL z&>m6xoI&RSufqdVD1NP29G*FP)#M$UYZf!(=;##Xg;Rs##K$|vbfY2AG8x?~1R8Ir zDcx(1^sjQ(QG202ESKn4Q(v;ImGuodKQ|bTOH<`axwy8v_T{I)sg?`ZZ+~lU>H5*Z zlf}82!;|A-tn&xesmj#!(%awq?#t&p(%%>#xE8knCSJ!_8%x~###`_F$DjOEdQThu z@pusL-kY77sW;?|UA>$i%vEbI4;$5Lfgnv0ef8S4{g=B*U`~=LqpxjjM(J5OGy)LB zMmAH3+v}TCqSdOu9E}DN{0haX=EX^TMZ_pMx&>p{o}XJhyy(cEv*l5DAQl!@+nvUZ z>vwvCVR>qy**tG|``zK}`Dwk?EzZvsl$9yDbhvvwTbbEh-{`h`Q6Zfy6lP`)GgRR;7|wlp~OW8o|)5Fc5?cJr0O%`W|iXh{m{<<95^kAma32c zN+A5NULE|nF7+Y=V_yD(wzds^3f9W2q)&{CdCt!ah9ZW{L2%un#0Rt^(36h)LZE2k zc;h?X9}EiGOJjH`cB`OU6ZX?e!mFma4NiS+@Iyi=hk7B5K@hRy(6Y?I4 zI_+gLX!}J|_G){AheIxxo+-mcgA5uugb@0`(sD79o=G`Hw{>N^*Xy@>qg!`h|KgL6 zj`ltugV?_D#_9eS3ya&M;l=iqZwRbFR4C0Z6vd#B&o$fKn55)#yL=v}D%D)E(i+0b z+GepjJ3GH{<=WNh+1VGn2gxZmy<`u@sF)j;s?)?DMUtGoJKEoqJV;jJV7XkDQ-e(K zVrY@>Oj$3XcT(z!Ivk!JMx*v%*q6{EU9zj|w~qE7j}oRneCK~YGrzUCaX%XOA3u94 zEmYYU_0Fh}8_i75Ep2`K;^fKn^vwDBNo{s|Cf_V#w+yEj-RkUISr&A-dvtyKDkNO4 zl*)N1eE7THNz;(IZR1B#rG%3WL6rRs+gGk$9PNL-yB`%Q)3Y?Dpua|`7)#r?QE&IUXN{&wj<~$BEiHCGH!{;9 z@E{2!?^gPgaC(E2HwB`lh^(@_p{*HKPIi{s-c%~fC`LwuL!K!}aXtuyc5(r(-DbE! z)p0W7pS*U&pbDpQ*&qX{bUq;Pls3;cKpQJ2kOY5UAms1<%jB<@g51PZVeIng#8>#q zg%UEjiD=;gGLT5)uyA0HgK|!|2u4feT9H$miK8Ho?Q|zbr+L5*3Ps?Yr=OhlJdRtm zJ!&RJ7V)p(nuEs5MZMrc=|oyyqjFW}j@oU6s1>Nwm=c+elbaTFFEYylMZ6?ur13K9 z_G4AJef3JYm@gHJQZq_x>^tB6!>BrcWovo&(QkUqgKqn5fV16RuiI-qdh*qShj)kP z&qu>kIq?sihs&{W*JvrQyrC&4~#ZuwM zojd)ZnsPITrb^4QeRd>EPmndP^xWbK)ls>HsSy&_r8zfeHj1xkkpH4wadq=vqt!au z|4M#cUR?U}^IyK$dvShtD2tXPmC9wAMJe7lBC16=J=ux!mHn4blT$xOtxivl3EI8! zaMZtd??JCISXx-r;uq5u&jsSBT%8i>h6>R92Ze=6rN_*Wjd}k5-~H84dS`nV1Dv_2 zpQ|3C)_2A4g&db6WNv)sCr4!}*}WVf(D4H+Xr$Sf?|1f2j(UTEiU4uoU}0s0cMYDU zWBF;h1=|$~LhyyAs1=LI#uBId7!AqE;6UiSkb%hcJAJpUN#S)>q7VQeWBi@@OpG7^ zf;R{n0v)dvRXHII84ZshFTG7-Wvh$EgNA zynw7PXloOv6eqH=@0bQbYa1V{5Bp0nsOqkd$>!S!K`Y#_Uz8D({#7<*_u%9G-RFm= zgQew~%%gSE$caL0yjaS2l@Av6Uc*G4f%J~{lEt6$=l)TA9Ymuu_|Xsl z_3fG3{4iHoUR$pg3m1paq*wIp{G{2J`4lRZncCudd1m!6-t!)j?XK#0(eB>9bz^yb zY=!nTwfX%tEht*vj@Rv%v3 zTz|Rq@$}r{`Po@f4gv;!%oU_>a&={+oS!Nb3Ti98YOHRr-D)1LZO4a#CR%T-aL$&V zv_aJztpcWp_iumt(fjk$Q(aMv<0q(DDphj%!eAiLXqB2kXOjNaOG!-w3*nzMhGJn^1VO!!{zm@!@zqcQb>=@y+3nZ7n!n^VX#2d3qC zu^_zFp|(Q>Aaf_aV9BkVRRC3&mt~clX%RXh2-y>Oyam8kO_X8qla>Ln^*`4+VO7hN zuweOHN`upbXlIJZ#p(A0LNAcl%MUbFCZX{{z{9UVko}ia8$dqi=VgC`FIFI$2kiDn z2s)|3U*aA@k!r;h@zXvGxJ_YN{qu4CqLdNL~fLxFaCxX(hHV~?~+%FnY zL0NuL)&!ipbt=huQIBq4x%PZ-7o&Wy*D93eCFtaGd6k3O>JBLu z_8aYfvlp)@DHQVZQREIUI#a{5`*$8laFlE)6z7hQo~UJz=NFCjO>+i{Ho}Yvl7!@D zrb?~jXQT0GW&P%h-LGbrZtXmKd~$xixO8Rb%U=!)GqqBDs`cvT?bC|}jN%iq$HV@u z``)kZEO~marY`j& zlAN~IgEm1ohe&Vp+js7M@#xF`IJO#crG>;1X0YVXh$w(Hy~le8 zK*%)oI*m16Ak_UIs?=S4#MfLfBTEsvYd}QnOk0)s$N~+xW2hC z^P5jTnyHo!8-pub*SEIsKYejJGovQV(t|)D(ZX~FrUbcsJ_W+f<;Am|pUTO+_%P3? zATgp?nkrY9FV0`e`c^7avkQxe?ivu8?f&k?-pdma)jHiss&?si?6fb`={BwUff&QJ zD>vt+EBp1%px=LR``*{jUkrqBo zURiqj)u(b8(Cv2O8z%F)QRhq)7YkGB@d=K7O=lRLY&t`fhSRC) z!mB+_)94Uk$FWov%iQhYwgOLIE@LoV3GS#7fPh+w1OKN4!dG|+1!cn|{~M0y#w3#5 zK>P0{FKDpPdBA%dF9SgKzKF178q^fp5ET4!UH16E_9_pL?7A+|ULeCb#tXGtfe0f4 zeFiaok-pG@GJ21ivrL9Glse6X@1qB_T%&G-s>s*3uGC-rDz>z+(C@|STWVm5G>a=Y zYsL2Y&M(f6pUkhlGag;2B8a!Ni%vbt1pn$cznGtjbIw8k^G`p&d3W=(&p$pqIg$xS zBT*2&PIu6$Kd%l~E`Fvp`J0v$|-tH?Q0}eDUS5-<9K>Zm+wx zezVo-T)Vlsu(CF{us9kErxj%R@4o$`qep+eI6pmC7PBSM>o&14d(o`tMDM)S8;``T zn-9Oj!;;b|Sy#zBQoifIJ%dbtWv`>It-=goF)=Zuqq5V)94417gI3@ z{Z6Ga-EHi(`qA=y_3M|1<>I*89(Cg*Mu*EwODINpIr)bYe~Vx2>=#g)syU@~bCHm7 z9$Z@;$0w)u9t4Xmf5rGKb`!p<k$@(;LRY~wFU@J?l_tJqaF-_ z9E3f$Mr-kytUXPZTp>Uh!mV~g1Wzc8nEYdb(Eo}ys(BQl7mX9dKj8%U^sAB`2p%hu z6rcSGef&cMjaFsBV!eRhXE24f#A*ms29pZ0azneTJ9V&01zihpk}&#RG7y6*!wu11 zUlGbVjqDF#!8%Z8tg>W&QJ{4(dJJxM$Adu>)0(YTcu&JanbsK~4udq-K`R}aPLm**I7idfl8sLP=IsZMzxr%@ z>-y^Y?U?jot5O)B@BXq-nQyoIcW-RZRaajB=9|ZR9T6?$;o{|!FT4HtHbwbQqE~;= z9rc@?UVnM@O1;xxUcM$VQu;h`JX~4duAl75XhV_f4o6GN%Nw^J{=xVE;PF?V$|ksZ z_ifR5e(%ohUhAUMxrpy?8jK_mLJYc6M-O}LvwU&t_`Fvvt5ronyi%5y9z(djNEw1O zJfi)e`p6iRBY>6p(NBN*!S>awOi*1ZOWq^i6NS5!R4^F;@Z6-ppbnWfVDib!bu|Lm z562!7Zw5=C!PxPXnp~ZZ;5v3-0XaFN1PHssXm);HPIt|1 zTyJ&yO5e9wZy{TGFO)i4=%c(jfSIkEFd_j2y`=|R`*T1v6xKgj5 z$~n36)O@u%CtaG;OLv|>`&?qp;^OM={OU0#y?UU1&&^{hU6)7w-%l=Tz zm3s9-@$J{&`||PUFgWbAJLO98;oE;+tz8>*&d$#zo|We3=cOq&Grw?ndj9ai{TI)k z{>eZ2r_r#}ZZ$^3o^*c7v4Zr)#{WgRaXiP_lTaFs`=eg{>GPA-wM8=fsfo2y)F3^5 zRihcj24EgYwbx$09$oaVUcW}N5ioPB@%?>-?)$5u+T^dnm_F+f@s;q;Pn-2~0tA{j8y7M3 zfcG%`vv83|fzZQHFx^+qQIJK%kOY`_r;}%qs`@+FbJ5^VH>Tpnk97di}Ao_E-hg zT1TYHCf-r`Cs&)UTpT{mL%$sLzyA8O(#%G+S{rwd&Mz)Tqrvr?Z%BzKa!@^&wufE(sg=TZ_2vJvj*Y=r@p#znORupUGsxk>I9^(U$^QLz z>+IxozuP{a%C&~WQZ#ilAGMfI(m)F)KGKhW`{`MIw7fjSz8ae;ii}-If`@3_gPsf< zQS?O`nafn9zIRvj(Chw@bu_c3A_&;nR3(5n$;aebC2^67M%c2t1!QWqg@Qb-AOrUNkXX;ez z4MbsfZm!+wU3>VBB1$cJrIu9{k$z8A-(kE#9+(F&eR9bou~2^O)DOj=FK6I--P8U6 z%K1KseyMh~b^da9=cDub*>trkv#eIi58wEM-~H|XWoqeOw{v=>R+RSb04q_hAkn-q zJtv{;jfeNn_MVkBYXONm{ZeNipvYqiyljq7XIzxU~v&t_-x2_@0jzx>-$3F~Js z#i*A<=@gC6WRw5KB9ebpJ9m0LiQt3bsE{wTn`h0Fot5qP#^VcK9m2wend$cNlc^FM zoet(}(^OO4=zzu#0jTe(Kz%*{7|gR|mD`|%oeq?uIn3SFkDe&1ey*a(Gz9lX`5B3V-QM=SH;Fb)cEq`=zUn2E5kGAe^{O1QI|~qv$Ae+N z`PzH`+w=O7gl!Q`!LU~@=2liV7U$;&{Z6ZKEOF@3m%qLLoxf=i|;|mxs8g=RWl_W}8ly2NNzWLqi)Ko4Hzy9feEnz;= zcLJ+&Rb@Z?*}sz(cE8uJ7UHdey$1BoTcdU^H=h6Ei+xOd&g1m<#PnVf@`vZ+qgn%v zPV-@EvK-hV_#`=MD5V>zM(X@L>Op*dfu3Z*l+y$t+FnzNZ+eUUqGJlH9|*36`N$8r z&}-Q+hbY+@3f(nKo&fGnB*rM`M0=p+b;+ePLf3_+T6nfjhfMjL_3%PHO(^`qf%DId zfzzge;Ny^I_h|I;7Y-k|*wC1XFEY>yCqmmj;6GuD(0}m)-S=Q%FoJr~zYT4iO6MzP z0vNkT%8u01yC4L_t&$h#<5xKf#iIioom6AEE6)cT&)K z>^5@=)9>i^R+GSm8LqeiAT$Wza41+RtFmBo4LzR*)relkdQ-OQ%b^BA+i!&#ug`t~NV8A=1l?wC4)6_Yyz;`A_Dn zF)b?FSfh+a{R9Q2^YF^Ox4L>)W6C;g4(_l&oOPf$ynn$}kb2GCW z*WPTMJ)bI1?e9N1z3Akj-S0MHBQ3qbLOug2B=JevEAapO5C2VVVPR`y>&cT(i^Xzn zX=xbWO%eNCkIozO%j=ul*VZ<-qVC1G^*oxrbGY}_u-}%ZZIsLJ?VmNC{kl1tD&%w3 zsls=E@T1+G#}ZQP5%$s4~COsMxYBl8F^xmF&J7?!&Hii&l;Kmp@&}n%cS=JidpaY3iuZY z#1Pa4fBH}dfT0)QT?yF}l2`LLgmwVT3iPGTnGz8C7!EylbGJ$0#Ln!;L1tR%miAE! z7+2{ZfuEHh7_c-Q-0Nd5)0j`jj12gwaGdULj^pdmF>Rt(#Rz1Z{dpg-o7GaL>}tBW zIEfy;!DxPEb8~yUb+`j!I5odjC>k_k{%1Pn3*LPF?(?UQ6szQKi9($LNEGaJ`_~@6 zt&2-Xlx){L9TFBL?pbA^r1pohYDl8gG@*J5{Z8}Z8RN8st*a}QMm*ZR{ z-uv$Nj?bHF^G3W*bvRb0m?M?4(Cw9_Pe1ucns&A6Vi~%_q5L<9FT{v(yk9KjSC*E4 z@v9Hl*K26zeMx#rXay5vt_Kh-3AZ|}?RYkxSiHRZM0}bP0N8m(sl3{hSUCxOl!@K< zO&q7cJMXp(BPHSLIOLwS-qF%{rcml`;A$i@D&;vjRm>QTJH)s&gld}RrqzNoO311l zuxOm803rVzgI;8^WFqMN(UuD200Fk12>@X>BEn^m>EvMEc?WRf1Y&2xXBY_4g*X7a z`}pCe8+o9}^Rwv*qur}Kga?A19TW5zINi{r4SeFkv-!|62i@++F-Eg@0_6}i2#^sf z>|ILwotuNSYr>*jFRw_mjo8fxyr4+$e~61yK&T;KRl#iHPRxC7GAhbd>G5;6yFXiK zUv#DY8E@2j1`ee`5+6%Phb1S~Y07wvX)IOvVy!4}Aw$@zu#YjR|G|r=U(QbzlPkgo zau!osvvJWe7RrBv?aeFat$e9C000MpbW51~o46!%X(vAGwCa=K9U+8;K5V2B92Xg) zW#^H-2=0R#1)WZ70SpZR!P6CjqoG?-=dlXGkkVtiF_>JiLcznrOP*lqAsUSLE0{Lp zaqz14M$L+ zIc=dMllu85?~e=BcfR???l1qg(}}Yy7DmbJjxBl?3WYrOVha%uPcLNcq-R#$IG9ZD<7&5HPtXG4+He zCy9@BU@jgAu-);>Q^IPhhK$Brkc3Cv#8EJUsRmVUyN=&N)rwE5tT$31dODGqN zf#BRw&uOxUO_#j$gy6w1PEJdK9+Cw{P)<0HzK{_KD8zd1fVrBDikqFn<7eD^&^UeAEpxbJ9n$m$NKg^b;E|%aDFWro{?_(rEXl{OSdU~!P)Ru^fHB_NKcAheq!M7y7m`E~P;sqIJyBDR{4^p&-XoBM8BTJO zlK7!M%M?N~46IOpv=@+kVhd3&EN_Yccj$>+HTeYKWt-M*PNu!yF-Qm(A!Hr;xEmbt zXTS`wR3VfRnLg0iRFc9TI5n=txBm}U8 z718<^dQf<$+W;8sA*wuv2=;$fb7S@L(`3*-=8CTY^B8V10Zh9%syV)6Pah(RbE{X+ zFB*wUHX_O?L&`Tv7!Q8i{n6t3cD1%Vx3o?-9)K-l@g{_?pWeK6t8;z~#rge5|LHqF z_}3+gql41Z=ZCdgS+Kp5kXjNdAN=T-KU<&6FRtF)TwOgnIo{lUaR2TbXD26H_y4SZ z{78C7mls!BgWQ|%{bws1_lm`GrMi$SO`jisS(#fTO4OXFvT|blZZ=-*Jc{zApZxSc zY%b44QQ_#kare!Cez^Z+81DcP$${5-nRse;mJ1K(IhS#v?;Rv7ijLdXt70Qtv&SjV z8qHDjq}y%v`UCk-nzr!@#?%uMN0P|DxLg~L{acVC-loi5p&|&Tvq%&y6~S7^WXoM6 zju?R_SA>P+5%ujt$WmKivBF`Cj}871nb$X4&A1Nr*uT{hmHKP_reoXgs?AHa^90A-D=JW7zCQ_gF3odSSUh+3#Q;q*Cl1Go?)^P z9%Fx3YH%k$y^%WZOJ+d#s;gWiZA#0_ID##akeR3u3M3V&<_O~mr)NcIR;%;p!aF{)H#=Rm6Q8%b?gfi*OPUhENS&0l6lb}MptU>*taN}R1WH|;)&v$%JBaE`v<$v2cy`@tgb*(ax(@6cca?!3dsgq?hPZ=$vdr` zA&GUwIQ_(u@OP`%kno`+?w%vWjxymPRlu+FO~uC15=!`~mXrlU0t{rW$$?jX?AnB|Y=h4-JB%r3Sgp%xlEk&d=f19;?@9JvITBW@D}F13CKb5(6OzJQmwgm%K>R zmohNRO%i$!#LW7JVF+}70?CjTcLdhysFQd}oxfRu#?=5B0>KA~dL$@lXvSCoA%46zL8m>2HwbkA01yC4L_t)lOji^o4_|v&t<tF243BRS)&3e5qzb>uaS=`uEnMfw6YZ0jlbjwDhHwizqM>Jil zNflRE=*$<&_mjge4C=#pOCpYwRj={tA8AMCi`Q?w-t3NM=Bi}HD)CT1y`AHnFp^H&(ki~8Mp$Ol`LDQ6ka2+0Y-Q%=2W@mhv*4B9?$SHk|+@UcdsBLGN|SV zGn6tq0LgzkfRUBTN4RXT3kDfczz}Nr;Ah7Tyz8z4p}(#G@lOsbd7vG^prA4bA!9nw zXFJos2GWQjntuNubxx}YKPD?3(X$;VKgdo2#q8LgIcPwdst{S1E-CuW#tHsOSDYAP zn#5TIuPj2;WAkJ-Ys`YGqnb0*!>J=5Q|}QhvSv;NiiGXFD&R^t$cJ^im0$ zUq1SDoS(V2z4_aZKiRx;MJ4a_hF|>dH)R>2kQ=m)>dof;hwnxCVmUYL^*WtiFJCAu z&Prz^9G})@$@Po+*80jo6mQ*mbEdZ3YBkV)6bR8yhR7Uy9Xl}J|Lsn$Seu($zH;l@ z>kscg{`7;ry`7b<>(mFdt1#t46q%LYnBMuI*sD~$x(CXXOEN$-sC@PwJt_`fNKII* zOv|77DPi|*KMCTh=s)K~eNM%5{ zn2J>7KsrRT)FrYNr!+d`X`RBsdsq^Sh%6_et|$Gvq-P3mVG%EjD>OeR8lc<5`V{qv zqO5W=e!85otMGeyN`rX@O36rq&btqsq+9Y}Sef;Rtdd?mRj3Gxkd=Qxdc3j;!0ceR zkB}Tp(BPAp;E!26i%{5(elz*uV5k0x0DSQ=@;DAg0!$*FiyH5Bkd9j~=}0Ulu)o&0 zkE^Up^P&N!iZ9GEZltW(@D?=!Az5jZlh%)l1`{Vk@`$CFlxuXo&PU}*1rq_n?kW@_ zoKz~G-P7jpc8(V-qB+VnpZu;ioy%7@&Ku{eSFe13x+bRyK|}S{;&dOxNgHO0v)9+I zEG%E$d-+uf3d2!+ChBN7kmOY>h0V34i*9LYr7#r3h56Y+p)B2rkg6n3l`_{NY1_$} zLdHy3Tf6q~{<|8;;l=K=Kl{)B_n-aUe_Niav^!mu!*DoAW=x~xQVlg+ph_uLs}n&* z;(Cq0sL4X*jFm5X8zmG9>28XhPd}Q9E?Q9P^qTEKu28AI_q{(pJU(8VpZ?9?{`bWk zHqQ4(0tU_Q>vwJ)pPcAZcu<`Ure`A4dZ?pZllC%uDs;;NSbliL9%HtG1}*KAw0^2B zAADYU9Gk3TS{X|MnVgUihp2f_VeOp&=KJ76C^VF&hLJX{TsH~96Gafdb)@rG%_Pz- z7Upv(4LBlAlr#FN{|e2zI99?3GZs|QoV3}hK4_*2KQ^W-fd$|5kdb3J7*Y*D6-+}i zlDl>-XOT|>PF^)?mlPU%xi6XTEHn`4y`VFwL1#=jF%UhcXm)hJa4Rs>{=tSK6m*ux zz{G(SahnANrT~o|_sP)}LzWy^S}WX6j^K@|7@|{`OPNS2!)JoyWMSr@qB)||WK>RE z08kr<9G{R`x`=`5Ywuht(4%-(N^t8<&wiPWYhXH(>gp=DOD)25r#vm(S6}bmzIpci zv*Q*_SBt%2e1`Sa+us>stg&bphsebV|U4ey-Yj2&u`01l3U*@M4*RH)&+j#xt z;OTJC5#xb0p%xdGfBV~CwA;;YKR#J4pD*;s19D4pJ}5V@R!>GgfBED8_GoWs=j)G8 zj?Yeyk4sazXS*-%zwz$N!xLLb)PZndi#PQXT0x`uL%kppY_d?9gUT+vaeeFH#Z!su z!!hOxC4u?r`FTmCtjX$?JKI;cAAR{rz14s4-Ve^}7m$t*=r9*nwlzqiUclwV2!P*j zy?4QX>V`JCf%OD>G*|LV{b z49`TpiCBcM1b*hD>hNCYqHwDUmlYd$xV-|dE$D2M@Ea1f&IN~EXl6uQ=%SvWiRUlK zk{~d*r=0^hp8(($Do8O6Km9)GpVonic~G7xp#H*S06w5;UE9ei)YVAgWfxD{cz{$`wOd^VC%d_ zyLV-Kql8i8#n1MSP8z-3V9;+hPy4<0)a>f%@rz*r50!Vn^{xJ3q_{m8j_U2f^zxOZ&Fjep zSc2M);fHV}gf~!>UIlF0i}zf52Xm3VC1dQ}QbSy>e2a!l8rnMu(S<`NSiD0263iV9 zVEfFxsJvXi>rkQL2QSxh76DqJ2?w93U)xk+sA$1bnD`FajyC2oy{rP61VJ}Tn?ZP# z0Ddz?m!)(b41N_N4DS=O@=c{nP>_@ELmH`jTYb3#msJJ7MpQ4y=jlJ{{C8S6uhz&A zMtYCc+Z_P2d#~x#&OhoKc2q&zCSx72>T}k`e}DJ*`Mo#anVFiB z2pr|hhlgK%{)_LAOUGG7>Hy*P@SGj)|cj# z(WV#BrXn4mVro|{GFQ(N=0!{b&2%6wh*ftND{MP!58wU4pLKeJZ-4LG=Z%&cl<30a zd{ks)dtK06MuDKmG3wE&(zJA-Ig^dZ!6Wb-hG-wZhwK>Jv3EU%bM`&+g#f415&|t+ zDg#y`i(*Iyy8}`YJO;Ar2wQ7#>z1Zy({w6#;cfX9_H?G*&(IzxAYc3>tV=wcEm7&! z7WywRhC8L3hyAk1Fn-~h zRFO@tQRUU7gGL>YQ#-)E_~dujZr+qXKmYJI8=D)w{(uRFtA(}WG@d_`djG%p*Z;-I zMK@oaAC81xs%kc1D8BrsfBWBUtuL4JqARK>hVpx|(HuLi<7Q_lr`9f-9n6@LPSq7`wRa*ZOYMe?dC@=LOZLIXH7%8^mDza!%TukDsIvSbT1LdU znwBKky%}I8y;SW|15S$vC_inhJ6PJd*6#L&*?r+2ci`Clq{~S`M&Yv>kT2>XIw90u z(R=*BkaQtrjaapJ0kR)Ep|9mKdT*N6>G+oIr3aM3+c4bfz$DWUIOJq#S^kyRjQ>Ec5*LK*l`_doO1TP76frqM z(_*8Dqdr|RZ~lBYuCyPwdtwyr|jQY#7#eO8M!!wDH; z09V{1H7@BgdKnnS`yljqf?g6N&c)X}MFmL!9Yab|!J$_LsvYZUI6|70z9#Ep%;rdv zlVm&*H*Rt^skPT01IM0OIjE4xoD~i{XPvp#iG*;ai%L*p-Ghmmr4 z3ldB@XqqEE5{1xUI_(HqDq1tv>Z)9EG2J5AY8a6*2MVB<((q`Qt{CD8)p%5769qQ1 z1mdGvO=BqMjpOADep#d;?VKS*mJ@(^$bK$`F)`_&?aY|L%qOJf3JA?mJ^i1f7_C_U zz=t|QHmLY&g4$Z;#xULjRCNoWE;I#Br9-`}OrK|!!u#)j=d<_!9`bQB z&&^JQr38^3&Wltu+U6`TNEt&i&gZ}SyZ%P)?$u;3xg;KNXXnXcuDCc`m7p+HY!-@z zq7c2VB(>0O*K>tJu2|{!(?y=7B5lUR=(4xhjq>@;^-?~co}RON(!yjzp#;MFZ@rtO zlGdTZ22AeL1udd+p2_^8IdESsPz0lo6r$7M0}>rA`J+yEQ<8uZ{EEe*%qo|h<)%)Y z5&9e=5Rh-uNY<=c>qyZ(?pg5Rh$CA3kOX?vso&g70Spcu zfyBg3nyi}@#4D-_b$kq4cQAcPCC zwki`ErA$ZWA-n_#JuDN4Dkr`I$iQ*l8IPk&iBT#q&T69}!BTzclP5xn5jIDx^em=; z%WcQY<8XzT^%q=okg$+TyA#tbS2Y`?w`2qfvj!t}EqI`kd$UvivKhfixJZ=vaG15! z*dC2q`S4QMfQw_8BZ4LYABqASVQ^t^M8{6+5@~}+05&L`lo!iJ*r;jDK>&A{!}=n1 z9<)`JMVPKTX%nFwV9Icuot`47W0aDDOUc$Ys0-vWV5WNI=Rf|x-`J?#zOpoqcQ@i# z?dOmvTOR(Wzx?aMKl{@{p>+6icNAakAZG@lI5qqFyYESP>J3IyI9Q19ayA01yC4L_t&>U-mm115=>1f+pESAD=`c&6p@k zDbx@SiGf8&ouxdagVTtsGPw-X*F=~GBE*u#DF~#?5mhD%coY_@cN#C+cz|TKQo@KW z+R;w$SiBQr#xyF@NRaj~HpmksQPeu>z6&OJsD}jxBdHM`(-4?CQq`m>QYJ`g(!_)^ zg%fU3-=X7MJ&hr_P%#{$7(8m)DH5Iw|BPFLE{e~{pc)Z!2xQwEY}+Pm9jfG198ZXo zR6dysjw*2Dp=BW2>X@;?$sCNH=P@1S08CXH-I%$3!V3X#ov@ho?!EYdmQD*opngez zIiGkeQn+3w<`ukpIbR)yLWtu^B?t7jdgF~xINBxuK)K9M9&L6cZ| z2SVhpu;A*r-5YdH4+i~yzC0x}SX^En#4bkwcNB?qx)|z9eCjXvj$iJKirZ7=aY z3oz;&mZJ{!-(=JjtJ->JuzTECTdD0leg5qq{K0DvUw{7mc|4~VL4PTBK zv81$^&|4{x_aMCnC&EC7vD#6`RO&dQpZsqE9>%Z}W)jgfF8MRrk+x`eb}J@(GSvtd z6|nS)C41C&!Fyh&Bh_FmUP99Ha73eGH z5E)?W5Dx0Xx4?Y8Xb;)Jq98yX1`|%m(|LW<#CzRlnf`+LMDlIJChKd_%k%-NQR7b0Q)-vSE z^=oJQFUDB7_l-Bt>P-L+$;dM1eKLM#YqQ;>C(YBR*KU4qaPncRdDLy6E9ppB7PIyA zqP2e(A4sjjr>n(}Klx%|Z5{iq{G0g`>e&&3NiZyCW-RMJelYrq!~N(e z`aqZT&{TNCZim`1fkN=39w=uBQ)eZF4CTx<41ag>6vDo9k+Ss$%B~*cnXvbCIl4~5 zKG^%p{IoV_tUMv)gAFQ7I%3U24)D};7A}Uu(PMF#*AqZ-a-b*Mh_3*I06_@EEECY- zuV71Kgqat-#1IUA^!h4MVl{yi$Cn1Djlgaiq9Ln}9Q+6iA!Vz@L&0pm#7QD}a(Z|L zG1N|QnF@0f@+3|wW$qx-5={hi{)<{Hinby~r;}iMPksEO-5bU`-LGyRoi&&$CqWUQ z&m1R~Dk+fW=&c8D9lY4dcb<)5Ob28uZk#tH{*6yt{UjGu?0@&WKU`Yh+Wq>osdBlL zA3u41mMd43t$FeCcjH2>+iB(V#e8nAb^*0hD41XzZCi9CXUfEo$t z4Njp~kW(*5LjwDYzN*n~B*7^1hRJCuS)}nUN%l99WJk5gxcm`pkz**8t1~Sir1HR1 zvYxVb-$RPa!M_j;Dh&~WJ%Cq)Ko{Y>T43-iVt6Rw;h*{+ZIVd;&j&=88h^nj)IBmK zhE>x9216!3yp9%<5zHam#m_aD7as(34YOeZfW5(4QSaD){1aqV7}3{O&US3I;fX~| z;|O7G26tqVEF?NaM*Zyc1}bAx0mw$~>~I+sA>Df4Xtm#Zy(cRstkD^q zwfddGNTi+vT%Mo0`NsE}?e3Sq{mt6)yxPN1EsB$ay^ntP>DJY&#b~*kxuTB?4dKRcM3P)`7UrelR6!MAKbbmcDm<9?? zyCepmwdX<6^K!fz5e8Lh!2}nAP?nbT^L!&{EoMr2p+1BH(v#DHs0NY^D9uE8cethfgU^p0!hO$Dn+QM+$QYM9hF*O=c9$+*^ zA?gFH`Cc^6rKEOofu3a8aLBdos{*7KChTxz9nDXGEES@CJ{bgb7dH)sjc15x z@kDDa2tBFaD5QFM#lVLmmV@w$2#hX#hWQ$pKQ^)mtx~{a$ON@J;ZvGE2!sF=4aCqp zcp{f2h`-0*(2ElQkd1!;nE>hV$RAb^)Cms;xyFY}9wDrqi(w`M1iBNlHO-DFXX772 zHYLES8N@S2337^PaOb3A$4-oCf{-@r6X=(|Rt8tfWbJteZ zdfnDw(2ehD(7V(n3#;W)x3PbCa{7P#KmDIS{^j3R%eirKS+2xC$=$(l+#imT(>_KL zQpPycMW@^3X}zfF+bP1Kmc3NX3ELk-f6*h zHE_(v&{hXN+F(*4ID%#i13DoXQX~2&5-a@Nw1k5vh62J}75zZ2a7fB9Fni|{OhsCy zXJ~&;hKY}^?gcN^1hWz}*dV9N`RY@`%>!Xk51fH28=e+1n-&WNt(fTU#79O7aj zB9|u?h*_U}`n^x-s~<=WEW)1NFc2b=BN2HLKPGdE3PM2@D~imWKJ?gF3owaG?q^?H z@u3OWcUDCD5Hd{dLVntoF9Wo297vnl79o&PMK!v0?QX9(dv@0Db)v_QpB*1JmX>E1 zXQ%gHJUwj<$1=V?TxMf!W9$0c+t=Ue4`ntz36`aP|KQ-o@@arxjaTW34}u-2IHLC-mV%aDnxX8js}>RNM;m9QRI3@9S<0N zRa{~%VD)fk-4la7(A-0AV=1GMPK2?o0ku1jrgaUPvL-eYiV4MB6(G}|hBh5y35ov~ ztd3@d^E`!pf*_9;G!0$K*cVnPABh@CvsIJ8aNj_$IPet$AOA7v&FX9>nxiy$1Powd zSOfcy?zWQ=F`S$Y*&#@|{nOI?erE6r4*?;-D|tlmvIs8k9GrXgzg(c{|6a5pZEggQ zO+NAg1U40rwiOO?z{JOo;ESVAu>WL9yb~BgLtGsCQ&z23efQ}n z#X`KUb93X$_SV(@uyNjO-@1MK<+CRca`?1y{-S>R{QC8q<-tIr z;Af8?Ns@ZQ@nASAr4Pb{1+(Hhgv5X!xo1HLfCCJUga|*rQx;*&MD6TTj+8&sU8Yb? zl3?wNJRC9}GzuBRU%U<&iiW&X1hJ6kZ>vg|I_~AsWkB{57(nYng&hK3vrN|2=4)PL zp9m8Iyh|UBf?)r3nHMV2(xKp0kN@=^VauHPDcE5O>?_b$^J*DPV{Q%xh3!&Mwobq)l7YGU1I5KJNU>SnIZfN5;r1vS%R({Ns_%*N(xBhSSLUzWxqourXzU+|slpdep9np)>JA3; z%eUs|mshs$?0xnhJKgRWap5$=YGd=@Mk1`+gj*uYb zn1r2=>I54s`xvZz-Lg(pGX|^3cZjPaesl)`b|!`*gU2_O0J}#Z26~gQOheOBLYOn> z*jxrFJ>Xl>NeM7^A|h#|w2wG@@Pot%vsK>_Eku14B6Gtyj|gU~KcR z*~sV)lA!^;W*suhjPuFo+H+k&Q= zU=*29OL-Cb4kQcn92gd+iwGNPN!6-?Oj~g6Kumu4&bP|NLaC4+CWngsGhQ- z@TlI|T%37+T+h$lIlFlJ?)QFpaN0b(XjS_CYB~SmrynYVB&K{kUZ~ZkOHwfnPoKWu zY#esGz4*4?u_zR$qGD}fzWm{@{_BmK?~ZfjZoiH>X=+M*fCxtm8`p^no1FY8!mPNc{H01yC4L_t&?gQAp?N=SKvYnK>9gaInjkb^;B zj*eIZP=~7-hk?RKbpn7yXf?0NPn_Y+t?+fsF35Gxo#D&Y_}MX_2h*M`39WEV1wjKC z@9D~RRg`Oi5!y)(z&bDIl13meK6 zL}(c?7gnA*E5)Scfx@~nSJ?1iB%8hSx~FgUEi_i=acHxT6n7so2Z_lv2DNM9Fvlu7 zi!*lG0K06e(!skfow(%c1zs{^3kO%h(wcOfjh$})wBFo1KHob!dwFu`;0i?i>J_2OMq#gw6Rlw+@m$sic;L#8y{YRHcAv^yJnB9i# zp&OH^MpP~Z*n(t^l;ia1gtR=$#1~#CAlb7Y(DcxG1&XnJWUOR3Z97dWVqnLxj}uf2 z!w|GB3h;Eb9s~e}9zKZm{#g&Q?Nz)?Qrav}hgu~V)N@J6jP)W6!73#tU|8_+Xy$_I z=HUExEkec%6xm)=J2J3R!NxHEZx9-Th9Ij-Xnf!SCHfK4HzE814%kBst^W8SqLeJ0 z975kLf&w;H5ZyU3ko{GJq?`t8lamujq?O_o^hFk23on=%IXCy(3C0c^Dt?&NewAowV*xLQ@UsN{^L&okU($0{&H>W?qGyFPd?A(ird%U+9U}l zI{HmPk5;wHC`5gDsZ1NYbD4!tEtRHq8Vi`h6UIR*6b7Ik{^*zVyf;#J|bQ0 z14t$#oxT>OCuRzLB7tdtl{UEwLm7^y;;M9h>NMG-nrr}jA`O`VqE`Pp_<`1nS>=3A zD@bRq@>ojXZ6Glc>ln3Q{O!hA(OnzBo%rxgLj(wFBvV=84mwSGWQVRXHR~*P3uNx8 z7bNv7jN4N%pCkeVJxtb5VVztdL|`{dP*wU=BG{%OL$TD5O* zLE+=*<@=GivI{2hSTuG7E7*d<9t8MUj_3@<5JC*+{fcN1-U<4OSXwE=q)`alq+oRd zFmpMMq7j^hcGp%bX89BsT(tY|ee2t~%JkyO>a?8vtJOB<=OqdroSxHUo{V|-&G!;- zYBa2OOO=`9vyiwmLn~8#(Ot zy+VhiH%=(k4D6mi-oC1Kw6K$H#uv#AO^9A6NBeX%#DD}w?79g^kwE1cF;aP(np4?O zAOGzy1a-CyYSd8#BNr+}y1y`>LxTNC*k{58g%&K35H2m513L`X+EH9!obbM`pr69e zfz=?G1nfb8m7cnuN};=nqyL4Sl?{eQjRUyr6M>1FB}mT0yCe}7>ifXz64rY>4#B+} z1v7KV0zx;L_l_Y1x&-a`NBn z5stpMD+mk)ZHRK?(|fi#Xm(A|3&rAPWoV5+9i6nGM~;a>!#6LwEvt5RqqU1M9g;J} zCxqqywEmvwWPZ*}gf9(Ad3ZeuUNHE(6!JBMznv%#-?3q2(q(EJeS-2y^b2<|`xJcjsB0HndKZ%Uz)p?ci=2!#m8 z3zk7YZTPYN+Pny(pi=_;BOWpfC;+_CkZtLilQa2#dAoZE_&pz6jhaB}>V6U@rXSAo zgo#`d-sn$+fY8mysj?j(h*v2ZvL!^kC^iJ)KFL%*S4s=w@6Av+Q^bN>%vs*2bfq$3o8XCA7Txt?!&( zv{Z`K=~1g$mjrjZ?Lxi){h=I~Cf>$K;^A0GS81-_YZdav@u>g7Z$8<&Qj4N|lK)tP zpW>UU-B{ntlP;l5I)bt9Q9n_7HIh>0k)EbfZ6T5ybZOT-x$KbGLN;8o;KEw!BJ|aR z#Es+vKUqw=aE2DkD8ev3&Q$(iUG;8g_3EEd@q zV^hd0k_tJpEB%PKj4+{2|E{5Yom4y)}DQt=!Z{;>;0>A}#TC2Lsp4~X!J z53ftwckOpbM}o*XFYI9&Pe{khsTUm|K=1KV0swYXf@KcEM3v$67T_^;<|#>|k$<@z zsAEvTXf$3mLO5$vhtP{_obiTc5qFuAN(J(q+e-~mcSY0^C5^)V)vH(bU+&5Xuf6l$ zd9$PX_U7_(`{YHh+v*MaLphO_FLe9e!8nrDf*3U8tLO6(bfpIshSTL@qaV%ARfqs| z-Ds&lPzBOC0}g;?$e3Xiam#n8>Q=TKq+pM6L1Uq64!z4h^}(veELurXWTiAB^j6}t z;=oZA6orK%i63a>0sG-KdNp`(Mm(s8R^}6t!Q(U9oYH}h6j`mN;<>EJvoo2o3G3B1X?Xa=yjMaThPK&CZn zYT=<^m~kEp5Il}dZd76Iy335CDK{^Uc>CDkKXz_To>{cHr66W5H4^_Ia}ey|p87xk zq5^~U4FaK3ZCoYsRCZ)555X=XW*k89nu&`vuLpnwawIvzU+&D4do3ljVPSBK3KeX# zpvs3sJXroHp;6O`V~x{=_KwmfDu>Sw_w+lSHafRnd#hB)oz$CZ#eQ_PLpgJ?J&t=Fo}!>=0Wold_d#6n`O<&v>TZ13{fG<|eg zPN|^e81A%2>Qk~5g{bA~3H1;M^-pU*gMLw_p1V3mXGr0o*Swf3>61;0sE8+9O+86u z1$9x(vSq9G<0D@n zgw%S_BMNrI1j-1@oF*KdVoazAtch~9iQW8GaW*2F+IfLN!EymDR5UvAofm%^70o?` z$n(>q&Qw408u32NX$OO*BBPGh+7^+bpi&Kj*IoZ0m;@gtbuXga3=K>Sz-t#_FFy+k zjLLJ&E^LawcKd@)uMg~oCK+KMO~7G)ForkY{`2v$zkY50qScvS-2CK&zv_y@+S2S0 z%enI6`T6_#?l?DHWdM|CFZuJ#mKhr?k$ zpC_YAgf@>8(&(Lq$^hTU1UnU z1g2ZG?4@)jTlxfeU5Uhrw;TkXfR7YXfE0XqqzN!GCKyJlGKqkMDq4}J&_dCWa*oTt zZPu6trMyNW0}FY3fro{P`5bGV`1C6z?S}ajLXlA)2%yuVoysc0BVK5(x=sS|dpk=f z>2qGiJgb9K^FVCRg!BIbWZ1&ts2NzuD*~B@pgTU&fxJas#VSHu=E37v5Ns}cjAQ}? zAY2G>S$gvdkZC4@J+_66p1}2{)=GpQphtpM{#-ja$r-m)py{rpEy46;LK;ppK)@UX z-E+|AImJ{MN%W9n65gPdYU9A92v~&lE*#EtXhc2J#>jU1w%a<%CIn!dCoKkQ=2GTa zsm_gK2k&TQ{a*WgH(#E=Xm?wkcCUA_xU@RPl2qZ-W3wTA*ZGSPs!d^L#5mob{lI>t0<2bP4S&7t-l2+ML3 z#0Rx&0&GM~-Z6p3_*j{QV3V;vaYk*HP>Vmu+FmpR8r17TWmUAS3L|2v{w2jNk|TAH z+n`_+C>blZ1PIgnP*1ke1fdoH>YgN)yhD+r!eBEi9ntKp5c&WeQyds8O0Z7`uE_6_ zr2&GfhA9o?deY7W9DWkVZ1^<#)F0l1QDw-tRp@r4cLAO%vog|6Gueb73bT=dYZ9>C zPHB>SR?3OyATmG>CJZAaxQk^Vi|9$nXwMLsL^hBCfD3IN1o}{s^?175CCMh3bf}R$ zr$$a4d7pF!O2Gyee%-uqyK-suZB-87ozTX>hWeqI9n@ci13$v`W`I^wCM27O#I67Y z@(>!@i`1Y8-ic)LFz@$F%OJ0&3i;~E zSMi3v@wj{OtlM~T+QDjVyVp5iUs>9@$j2qdg^u!tN-vte^YHbPdMiGI8&PA7Y6ZTi zFM%(8O|eqk%qScu`{9(o6v>{`Cq{s7=&|t=( zkueS!x`X#*WFoTS5I+^=7`VFCK;}fnY2_n?u-{#c=M$z{M6gi>|3n~yuIDo?83GUv zK|~C0pD-_>pF}ri2l8)Un09ee0n=*$90kX0)X%}5vP!!R>iv8~A?o$n3_;V66vxp) z9Bb)v18TcO?;uz%0m2(Yk~$WP*Z>CjQCAAM1{apg7g*%9&#HgKAIGoGn~4r0QQXid zZcyan@CCxCH!d`~FdU1Ssi@KF*Bc#4R4(4lCmol#IKR5E_Fy==0N}R_qCJ|l8j-%! zL1>z>f~OVsaEBUQ$4|rfnd5@3QzgjP4FN)c!wDJ$*z8R=dr&Me3nEgyL48}3Qz<4( zrYb69Qi!_secgqA8v%nUEkc`>IRCGfbOhNLU+<>!dLS9+9XVA$tS{Mky zYZ3K-9v5tLP<I#aUBk<3!PIg1@w%??KN2xxeGQ?o4}wvTIy_958~LLh zm7%Vqu!}Rg+u^SDLx1M0MgbgkFEkJ$4ImW#Ni=cq?!BXzPkO!HAhwmFPH#+uh9=mbJBnPAVUeui)wF%#)b zq~Od+UO;~`g#yDQO#GjT`!s-sq)CF2}3~dGBk^mHMd=QfN57DCa<7DUvzEC(;TQm)F!@8Bke7$ z1C6Z-e#I!K)_y+1S`K5i08@jmdS_!MgXnx9MFW%|uY7t`w7fI60C2!RsNXU8GYIvU zj=}6lu<@N;hMSF;0DkF^-)cs}aIReziSUZRhnJRiX(2<;w4HWC%Cb`Yv^oC!|B(yFhP@&#*- zFx97EIkos#r=~%{a5xD%Ti_)+4AC{g{pW|H@o+GTwX<@#N(?CErBf8^jb08$hs}1Q zCtiR1#(A@wXh}7Pm*WkgmXl~cE9*1eN1?!yW(pHFrZa^aLgFL}FEy`#E_qZ)Bh#u` zNi=5{kdTmw8c!wx6(I*rTe960>13f^L1Ss*Brv^LSe<%LBC26Bt+>8V5orXVl``6f zg;}EkfV^C4H4HB|a~oIFNlQsV_h^yy1*2Q^L8jCx(kjqCOt21QNNLcshQQ&_+chB= z)ue8~-nnEXA1^zIST&wmj!~j5w>}4_`KnmAR2utGxRk_GS z6u*=#dIaYi3+7lDP71%jIe2NNpowQyTWuMn(J1Y-i{38x=?&|z^f z0}HJz3D`*5ZM>%*#7RR$hcgxyI@PhOkn&m&cdSod*T_H@S~Y4%auLf0GH(At2=D;H zunLf2F^LSOW<0*q^oMdT?9s&^03s`umq|F7SAs{=q2by%P{feHX=wxqFBgVPI<4+1 zT>KL(0=;dP>4o8)8CjfvglCBc@yYT%)nWOO=Br9S{JSMlij1K#oDvObBPD@o44m@ zDho5^U;gZ85*J30yZ^?+vx_bjB+?UBNBT%{qHwHDbJGL~myA)Em?klo6h| zkN+Oh&9th&#McvQ@KX-bykl?(dkY8^zNUjnD+kK~YhDhJ3 z276MA%11h;B|Nl*l?*Q}eyBE1Fnz@pyc#0Jh%2)CxoOjsC-hDkf>}yx!q|3uBZ~S+ z9RO<$q}9_E`xR|kX>oWX#+s^-xZ1juN6J&Kf9Y<&obrmR>z9&f5h2R`BIVY!#67gWODAh+gp?Md!MQD?1 z=wTtQcA$K~jCQTgs{EOZ7>EY-`g#BHUhC$)YX_$-0{Dwox7q36d-IzTu#V1K^=6L| zph}4|6Xr@F!1Tx%i@E8(K~#Gdk<*asSJx;cB}kQ}XsQbFtxDvUB#BDMHi}GHt7H^{ zIg~E-i>g{MFa~{9Q>0-)P#nEmpD&!DX)q+>1)HJN(wN$XduIg^M(Q;EkXXs)5FQ3^;2?!2i4zann`#zqQA0abW0fT0 z4TjkdX%h7M7gc#|$0tq26(ECXpEoz!j(QGBJh=?i@mO5EK(FLPrWi5iA`Ye8AFNCOTw4tha-%g-ONP2yCo05z~?943=>Tx_etB zcrWfxPaO*mhzgdx(gj%SBi#5t5DFXKz_nQgShl9sL+t(#c$j?_Y#IzzD%Gv5P-g%u zSkdHg6GE6}2%OrWY>=X1ZRB##W`a{M$^mR{!}Q|JU;g+f58nCq;aLa3Y_w1b&KhkI z9!HDh)akL_froPDPNni(K!H zph=~(v1-P4{(&_p6ukEn&-FxUkYg4z2`qd{&~}H~nYdrIsQ3|ugMGj}I#vyJn%rOf z#lLavzmPeH9QnXA`7px}bkk?QhhEbEd+ZWH9RZ{%nHJ|;Zn>oT4+EzOPZnO|MEo-` zg7GpETYR{Tc)$9DYJ%EGJsAlzQP5c+rzJA7+d0i!Fx7$R4pc*RH#JqUoS1quHAI~veY$;7; zpV@h7H4h}5!iF&et6+``FrU~Xz&NE8I=YA@+;OS^qsK#PC1oaLl!#m(s!Fp@z%$nj zvD*RoCvdvFT?DTnc#4`LI7wW!lch%ds`GRVw|H5|RFjp8y@(7DnDktV8a(8(Ox-4f zjE2r}FI3g=vah8*Vgq>+%4CEvU z4ZW!Jq>+Qy-X0@17+OEf^Bk8o9V$Q zZO#BrjL@qg(3b(N_|lj>2cA!c@Nm=wrwK?~G5Um^tw8G_O#nU4RoqsFoSjN=WvXqp zvAP1uS(2kAHU)K=n>rmP0gP@rH%}WS_SQpf{<$8*l^@_Au&@?9kL4% z?HQ?{80e@fE9CbyQ6_vK%R~;ro$pAq(vgv*MW64c4xmX*PejK}DtO;v&_(l+=n#&! zYs9V{&&n9P-mns!2)yXziC8qD7sc=rgG$qtWL=T)#3v1Xf;x({funLAl(mjnv+ID) zaLb%oTV{ANU-yC1H7;3k0l}1<3tGtGqF>Oj6AKLrDF!h zTp`*_#ldBTA^<{!S#&7Vy`0`t@bm8hRYo(I!H@ zgWl=k^jA2f5(mg;!;IzTiXlqcg&8zx3LqUB5EIoU3>1Nyl1VHea!Ldh!Ky$CNa!Yx z)IJKd7mKskl=EsHQRww7LYV6ygq|ss;K9xxNX;o>pTtdAD^ng;vcM^4H`y7C@ER`f=E^t26=F60mwxJfk@oN-?!SxBcl_FZk zpPnxSulpNe)07B;Tg^$K7vuuhFi9rrNIB4xa0Cga2XXe>;~^uKjDZwRjg_e(Jy=CY z_?i93650Fwcw|Kjbs~l!!lp`RG;!jP+DH7H000mGNklyQmZ-)p5RjN0o?UT0w zj;d|QuwNW3blw3x#L(0PrUrwLxCHs!Fs{y>$KwJ|pZgCm@sg(6u*Dr_@Huxl=WtrXSA3vjzIMG{>pS7x+b2>xSlleb`u z4P+`vh6wkkl6F&yzYTVSo6UE1`)w80kbC#DKg2h2(L&G6LqP#q2BP{H3un>W1$V9 z9{unSeLSiI)er&v0};9{k3mj=K@ecQQN%$*FiGN?YxYm!B=@D$4m9Hlmz2ySb-=?v zpgu;r%+HUC=0M2VsV}JzYT=&;9>yF5W)uo8mDXySAcqwngl$G!eGk%mEliDwL_PxL zida_%5NYtp`9^<{)!jis*Rm1Tf>;xcy%ubMDEL!sj<6D?g1suJ>L zc*Fs{l`vh;lAIUAx3n7v;8>q|tu9@H6p$2K75K(RAzh`Lq(;V>IGAr&fMkVBp}+?^ z>3T?}+yMhCNR6RG#{vL5#YXL&Pi~(Wqvr&pMWhL+N9tw_iong*;6oUx&-hkEf-~qL zp!Fp|zdKrmcYiYP)NVpD4b!sp@)?21rB0P%bruSzMxlz3n^aF`Q#S-!De6=l7#!-x zb?}{6&>@5JG0|+W5q41!(zM7stp19@zIN&3n1+-UF9{$77=dt8zS&UEKid`HW*=sO zdT#JvUX~mL!$k=H z_>0p_p$=jJ456S_?(7RAPr3UzhUsfOMHZ2igZ-rWgoqS84kKyIH6xmd1ZTyH&|_*L z%u#Ce6*;(qH;Co}MlTK)5?a`l3r!E|bVfFOR%n?wIVV&pY>TqwN>e^|cGe5qjY*N2 zQ5fTgLN(hcOsDh|)wFz6_4H)tA|yL8$U!=$vu3y&Qji3bR*(V>qtyyhRW-Fo9@ttK zwb2l?q7nxF(~bRlp($N_0o<)BQa`Gt7VXv~4!94;R~AOi=L3LYwUZAapPf049@3^H z&Vy%}ksxthp|DU*d@8Rm6C}Z84;Y>3VPU}7Wfe!ruo-}1A%|YxfjI1;wWbt(rZKya z=RfH|*G&p&o8ZE}^2sX{GzSFf<~-Odkti=-E@7Ps2LpOH?6f&Az!-uw?z6m? z;K>qXVmu%7W=0kom4T7P?vyat#*-`ksa2R;F0ko05wZxuMM30HiuU$lD%YbNz#1=` zX+i)uH&(m!IzvbS9$e~^oYYDdI>uAj(!fPZsmsLjL#Mv#6YWpXgLHx);%C4pq_bv( z!w5FGAWwj%j7)+VfAyX^gnr?o?}jMzb@^b^fFbAcSVBI5j~x)3T08^b6H z$12L3VxhG>m3l|&UDVs{fwNb**lff`w;ET@0@FinKp(Au!kWDXl5n0OMX*5;nD_vA zVC=Pm#XQ!VOhHT!SUE7w-~z1(BVt%NgNud0{Bs(0*`|K5)*)Mkl9Hr-gobn*u+XO7 z`5Smd#&n?H0Di&=KLMN$Oln&22V4adq|o}65r<=*6B)BB#L`%d<*D9`DioL31Dzu5&%goCzQe&mFM^XX zXELt^K@X`jVFm#fAo-lKp~Z560-NV&4TsDc5ImKgxzQs|GdMIj3ANIX*N&1VbrLF? zwRbeGpxT*k8;!RTM^MG)pDMerXEOTJZMD`>x^khg$7bj@T!mj~0$Aus8QOaXA;UVPF-^#wM?aD0fb8^CJ98JY z;4jSC~mt9y92(mk#hl9XXsGqGTUJ40FWDGFaEEVALFi5eF0i0%& z3FAzb?}A50j@G&uRY9AZ)==8GO4t}qX!U0r5p0W)^rLUHn;NEl$$=bK_NXi+018ml zdKs{}#+Bn(c_B6SsK^*z2$w2-W%lSLGXSX(#(i8VY9`=;bOwt3Rj7>zw84OkLR}V8 zCPYKx&!kH#1Zf#!o2_wBwWpeXrh&XVdQDBHj@gmiBC!aSw^P_!mg>$I$S{5iWapv^ zy*h@NtYt|kud)I>2tE4DPvK})$WT*!6y;#CI{kpBOY(`>-SoWYa^yh2TWM{cj%<=V z(`_5XSa6q>rnG5IZeby-7laVet)ur?=9!m+Uy(G44Iird!nWQnnN9OE6d`CQ^cC4B zd*p3%(8oLn|5%Wx+-)@nul|TvfJ0#^d(w$!Wd{}QC-t&|$xp}%1OUeX!cZLWpn?;I zObb&WgwjqTQTKh$5(5(8@!wWVf&-!bb4*!r{Q_2R5e(;yZ<9x6BJQ@Nhk58|c|Sf8 zX%i*vtj#ZuXF7AYHacerW)hS}rbDfYgXa`dUnr?&8VC`PYvJ0O=Ak9xVB3qVb~Gs{ z^iA}b=vH&Lk+y6UjOCE+qeym5n0G!?D1>zzJ2A?cgH)?#Z1O=XBi=z2vXYxuF+!C^ zCLIEhnG3X`Lb$F=!|<_v?6@8f7&z24E2Ge%5@~iVxM72H4+1(DLUJqo3|Ja}z7U+{ zGbHD_SZ9zZNCE3Aq&cZ+Q?<>6n}#}PB|^fZQ&+~4TXZ@X+U@sFl3^E^d#zZWMg@sNLzKw|Jgs0kJ!YC*6gD?>|{*i99#n%C8aiJ&osJp*4?Bkp)9kQqAB=sa*=s zfvRliVa<`|kj(b+IKrk%*!4$8s=)?ShaNR=rw$rbK2na3XfL@Wz)<@r2rYD0WE7g2 zLY29qRKdBkm4a5yFtkoB0Mb6mJ2K^N;E*b!Pbo5_s;m?ev&ll#CX^6*Lj_ukNYirF zN*wgM8HMl_w%jg6&u`}MwWm&P!?X3M5Lzpw<(bY76}mb?lMUcG2Epie2z4UC>X*7n zlf8yxv<@0gV+Ok$GYthBbs0|j-G73P(tTENf3_l3XT=Bl#BhU8x?Bq;#AO)akzpnX zg>amuXmf))vVHr6|5qobH~`iR85cH73HrL;kxN^%K=2d)X{!jnxDg=Jz%qH*84^iu zOWTnVj7$fTdt^JPN%|3;%toNpj8f=6P6pYmfZ10`2bCNCj=~3Onoa#wNp=xV& zhpk`(Dd8OOZLgX!+#=0Rl_SYXGN(O-DHPESy+R+?kQ|Q?=_9#wf_eNjC1y3Oy@)h! zeKqN*TP zcO8H|15DAtt}>OA1Y#%*P#$V?8BG-4e|Be(5190KJJ3=8#QVBxt*!Fhy> zh=QO;TZ%>kgE`psrOX7wLO+ff$U4BnN0uBooaS~ANi)Q03C?z*(cLObXKtT0$}!Ih zvIupH4=^TUoMnp_K*-AG;UV}l3Ne(4@XB#MO?ZSYj_E`AC+z8;P&Dv9xvk~L=R9=Y zd4^!P0S=f64TKD;-LyP8#iySZ42~@=!=6w}vwS>7uVOEc#K&GGRldub-a?!yy z&I)4QrCSfvF zM(R~*m{hOP4hlvXCI{aD-zmY2ImJ(*E16olw9P{#H*6@+D)E`njAOYIJpen{pDSjiSxRI7ixC&y7Ml zs)p`bQeU0f+4Mjfy(@wNV7Q}d~E1<`|g zc2hY;Nml~fXz!?g%&-e5oKV9-l%+BjS||1L000mGNklYoi-&Vx>5 zkNYYxNUak;n2*)lGZ-s^IrC38i~)ed6F#U6WE(<3lLJ$}CPV%Z?0NPKF9q%5TpD4!GU6Rck&kFW5!KZ0-oUU*unsT4(`}B(iA+ZbdlimCA;V7Ctq71I z_Rb;>=Tad`Mes(Ai>dcap(AQ;pgxQSg9=?QxSZM{=4Ik7<0NAj?+$ zA2raMwovfK6t~bi$Db@rD+noarweB=w2pM_o;YfFJ7#wRr)1fh)L%OT8IOG)DcZs> z?7D*&l3I17<@J0aa8M!HBW10JGJ^Co?>@rXXvnb^8NtAp`+#L8^1dK=T4BwxnHGeM zhvg5pP$Qa+#SU-^M~m7hm{yq|jK>LMSzL};wk?ayZye{4&qh89oNV54BOs8E-N^yM zhLIB}xVE;RKzy)-k0M|&8rjR>8fs1-c0G+EQvi6O^!Q6lR3?`-mzxh29fmPtu!Dsn ztTs7g`A>fDlC92Jm(Z*;=AhHOHYP#VgMq`A0`Y~h0%?;Ba2EK99cKuyI2aZY>wJV0 z!W}JIDw`EZNXcQB6XhdkIP(w}fsY2K%L8%lfds`_YyHbWoUPpB@s;0*}Cy(KfvhC8%A(BX8b{6JX zuN2gpY!PX^YLpLa0L-1hkd76Q$toiA{!uW727Qp)g=Du;WNITo*RSs6!84|VW(181 zI7X5lBgxb-W~73fPykj(Q1NNX(7`{>dB69Cun@H5TfB1W2;m1=w=%XUCE=X$Ml7h# z@gOF8D2{gfm`ofzLbjBT#)zsSd52a%F@TtWg_q(mQP18X2voj;R?V+Fq3|?spqz{{ zd8qr&O*j1*#RSYQ^r8VwS|Ed=#+XEX2A#waupWb+x0fw}olt=PjWP1tlfrz#O(|p)f9+x}`*~VAIRWQ@24bZ`A8c1i|&7U*!pS$tVHchkZ;1-Wy4g34N1;FgH$^x;o2rO>IT0 z88N)D$W)6pU+U*kkV8vmxPwdRixLSZ#`d)pLZc}mC5DVb70o_$ZG`FJXT0f2nVMP% zp$Krd*n>uEP}(+91DRh;3BdaJcHBsLp1Q(C5vTjHF_xuI*-T(PD_uw-@HJk zluW;-?#)$d25h+H0!)bGbIKa?h73Wc2n+?9teCvI;o%%Jx#Z%X2a3EbCm~pA7<3UR zY9<3$C;%oQmor|L_=hf&5gEHJ{b;=PgS3GW2H}MBOc)c=$h@*V0)(h1$z%bjjUf@F zTz@h~IoOH)B5bS6dTik|4M)`KU4Uwm57^4dbjb`b2MpgHPB<~PFYKiihe4yz;Uo`N zSjdM;z|LJGg8*%RJ72pK9M)RMeJmkj&CjO4-@rh%RT(tDYKYh)%l)=y2d5aA^)0w8mkPdSqw z%t)2?0O4+T5w@mFqmomX)r)emRGSLn^R>FK2}fBt)Q-IycPVGImfE{ZX0%Z#$OKFU z!aj#HQPY?l0xA@PsdI9pkgb|AlAv@QRUDcBP>;g-Se~@On2ZlKk(pSB{20<4Fn25Q zUu|30^V7yZqoeKUK@bg73ozl6uLsi?#}Le# z$8ws0f<^W;;j2Avhq3`ognoiks0cG#2-h~UVK8&=Ab`||f4U+&q*k_h3 z>~p|@4VZYjA*mB~7bRW^Fzz(UEiFq|7O1Ne89V~Xh7hC_Trl?JM-YE(@_GKo_;4yN zoU%cHHNF;hWJMJ%nMsdc)4*ev%+RI+;u&Sf4w?bbt~R|w1i?0No%$q3VPwk;u(6sD z?s{6o88mAd(t|^ZC3I(@q+v7yK3Pb#sK08rqCR! z=`a_;T%aOw*Dmrn;A$Sq&+wKPZKIU%yG*bz_)1%2p$P4XOh-aC_B$O8bbBGX_Z*Q} zTG{|yy<~|Hnh8k3#!U1GM!Z2#Vg&;^9}A6Wnd~yo-40x&@{f49?g-+R@P7(NFIhiz zTmi3AE&xo9X&Zmm7cihAAmGMy01tyS2zS?DW?31Zz-lt#{}sYoBNH~)I2u_gb-vC6 zuB@m`)G|bH+z~Jl;4f_|nB+oH4{{>)yG2;AEae`whXsBo48pK0KZq{UptUeWOz@6U zX6(fnCA=X3+@@suS8#Y^7|Hd%X*g$JgkTnuvt&jgfeO&^Q!`PUN+8VkM0F)aN|@Sx zDD3G^=XxfYH@~)*+kYxPnj=xvWF(^JIn<_VyzNqHNd?fFOX*~xMn}O+VU+`|eN{)N zj%i?|;%E~yC5juzibWc1tcg-$zGtH#A0V=DRVk##asueuqWRf6y+ed14xK9a zkF{#l`6j~7CAWrl5?{?_BBG_}^x&N>lo#1bH7HdR9^qpfTCOeORX&9+4EHWY^2nXbp(YC+yF$9!rrp&jOCqz#6-G+#Swaeg?gM(lXKI*La7*+InM*?mCvsrTI$=0&&=pcX>(*O z9ACHx=@|+|sFF4@?hHJ~2Cx=Z0L$F;7Oql(Q7-Hy+LJ*Y&9Z{PXRqI;87Asp5i{1h zUS#r=EtAucY0V2H`vujNMuJ^%OM`c_SXAFf;oOyxE;=2vTi|W8i3kwBvoW-4h7WO& zkJfd}F%O|acZ5m=ZK^^F^0@D?#=xWkX1mMuh9>8^zdM-!dU?EtDh>j-}&2A9h z^Hk#sX88K@OgS3h)C2&y;}VDY803%5T0?+v2R&(Z@{sw6EL`+@a+Z>^zOq0eyfuOR zC#A~N0Fae)=EDpEE11%T#uVaJzB+K2Q4lZAB^zI9jSTOWT*T3%C(V|n6*jo~Y&WR@ zvIH(ric_K&%@Gn5W;H}81HF5R(P<%;(+a}EW*}v4(-24-EL{(SgiWNOme2XA?gyUv z&R7k)2ZGJxv=tmmc;hBEqHyLi0VW7xs@Rj|Bm#z0^?PAMAYEwp9|bx7(9)yJ(x z?8Rgus8AJ5(2EX!lOWG+I}#Y7 zszbNgD^RC%Z4~9SXJ43$08!V=Py)>Th@KabDwwgq(D9KHE1X8;Qfk1+wsg~PEE9`k zDlO%S0f!{fBiK9I=X5(*2uyffvNi6Rk)L2Y)*&5j2kfvcb*;h7V4D!m;vK&)7@Gv` zouIdT^1@qfff?|}3UKrhfM@MNpxUO*SO+)Sm`N~XJWeUU$K%I$tT!Q? z=_S8t^bAMJ2f#R;oNy`V_pVxO^fxTel&;8$8Wy@1w zOq%BJqdLH}BBAys<42lAV*2eTi=e2zPLSCj;ganZ5N&aQhkY*$`>8$)B76$*3kew7 z#HzT4oR}AONA^gn5Er@a!$DYGnhTwtGpY#iDzMA~mR#2*y^!S1#uL#6m=xS7_9q zrplC8<%5Z}0*^*6EyBJ9a;5l@_#}nPHNWtV==LtbScG537fI8*7if2CC-IX3AO9)} zVq(6Kd7_hc`RAvHaip73vHB!{4^RfNE%(|Ut7>oQy(voCh(4x{Nu%FOR>~+!712%p zq92;522dbgHO*t^-$tF)WEDq~^6T#x>-gvAI#z8}*2?4= zVx=oLV|b|aCd@Av)@B(rwc=Bzt~Py-71|kWq^Yiw&~If~(iRs-G*IzI1zYP7co`3O zxraNoOX4YgJh*&9!P1&BR^ezkC9e-P@iD3x727KWLmGCIVk0(%MB<{EoxQj(qFMhp zkML?-4=zb|LXXlg$vRC^+^D%r%Fp&x8F*`X*HzIAC=pQ-JWb^Js+1^h!L6W=*elNp z@Ku;8kUPxH#OB;dEV$l`(d@JI5e3-#cmG{;WQIwKXp6dG!osn7V*i5j;=_Tt)CHG zB9IvWuCdT-Lmn8M&Qu-8q!#vCKtV-7QP=E`=F zR$2F9R}ed@9TY%BktZF(<%t@4EtO7yx0FqpTgT%I{cK*TOd^4KSuy0z^fZ3>(#yvd z+Ds4ek0bYWEu8y`4=(+>k7i|Y!8(St#thXeZ3KNC=Hhxp@_+vG_xHEa%7<7ouMAFz z&>Q&}0c0?n&vQdyn?)ebjGvoWfsM7x{^zy7a6u#0enoDvxO&yp<$%+jCJvq154an} z`aP|osmW^0bA%bYlxQ-+(3`n!0YK5c-+9Q^?LDh@eUO_`7LqC1S z%;u^|TQ@9(aPHOnI=i+VmS$&@7x63H)%RpQKMnws1u|rGXlB*2KEDx`td z{h9^Lv6LUX36b+XLp7K23XoVo{|a$!Ee)q_FOVT+LgsQG#nD7NXa+B*=g%adD5{53 zxMmrR{7kE6ddGj2l}CYlSwLUZPf;Y+(ICEt@z)B*@-R|1H1cCcgs9~rZ>YmQbcUaK zN*fyMcvty9$eqMQQ>_JCbAj$xd||^Sjp-9yhTwrEh4>n;R2yrOzd2NbJJR_oMi&ckpL`NrYsT&}rDC0c(1 zlP`$);!n-=p=fRz)5_hqweF)cX9IzL3{NB5eM)pVd~;3AXLt2CK~Wq$AA%R;Xl zo>Z1b`VY|66UdYC8Uv4LIuJuPt$u=>vWzZCr@Q0VIHZ=kvS{hna@0<%46KJb^1X32 z)H8nh$We?9h53pbDzFL-C$a!= z+&j`YI!D0!ZquIVjbDH0{f8e>$ zt7ZLDZu8d(Z#Uxp7##M?+M<8RVHcz5ZU-|pH_F3NqBk_<6J*fOg)9JnuI6c)d2b~y z`lcN(1G1q|c9P(83q-~rJEgR#9xLNGf}gEO9{_LPR>p?JNDpymCd7&uz~j}nEc|i>6=^LWt>5HI>l`LE_g$=_ zU&~E@vGDu*FGL_w+Kwpb;zS~_svSaY43IL{s#FN@$NOQ^P59a<9xiOD#fq;6C%(2@ zSlv#r=Fe~(Luxi!l0D^C$AU%&-G^>`{>*l7u%`;chc)|66%&4@yos-0^4(`a#Kc0e zGg+*Zh_>cNMd31QD0$lq9S5D=rPcw8)_QaSSy`7T$TBkDc;^ltW@0d)YB-Qxy4Ypf zH4#BCiWQ#Twv^-bRF}i1vA6wc>u5j%(_`a=BCd zl!3{-X(Y2XKeuA5Ykx%@f6zIg9ZdV{5_}8nT&4VQ)o8%d*K!K~{CvUKPwXr#t>Ch7 zh6Y_X7p}DRo{V0HG?CrNl3D=iwEtvnk`s!IwYOe3Y_C7M3xv1bG@$p~Dcqb!k4 z;JK|nox(_iaPoemsRkJNWLnoIHaE=+ZvC^0s=Vhrg( zVx(M0sjTqKr4V;HlQRiSQBcq!dZI3#07K{&{6w^+2h38Prg|jF1htF6j+-4P88dh^yHF^*Nj*t|JCyR!}Uh%Kq<7O-BL!TbLxem~x!LpO` znFV4KN4)eBptBp12L?yE33MfZmET$Ptx$g^Mfvj{?~%JiCt8-NZ|G00GA6z98(v6) zjT!a%NWWno-I}wQv>I)!0R81BGlVFMCtU`Zs;5>-Gx#u!*h3b&&Wcj6xz7aS!`ASA zc{z-xuGKf|l(kjt{z9R)EK_2yf+6_j7-khz&*t`J-?h3gI?j#xWHmrE*QYf2RFkcc zV^e^XN-T7~!U6qVoDxTJTi8c!6MBKZW(r@=*CL}ubCKT!vAyaXHxQNCSceH#Y(rFv zF;a;0#OyoFQ0WviNVQbO;Zjmacu>b!%{XfU@0deiOI-@)hyE)l-W|T9hguZthhKPh zzy#y7r`xcC2I}gy3O|g(t*sh8YS>|8f~dlM}VKCjjezMPer%j>Yollzmet^65RML5yg#RzG_M#)^F)Q2%%;Q52>@ zREOlSs>%ijo-@PIbrW1C1uj~BX#(P6t~zFq?0@rF==rE(2Ae!mR zUi(ufnzuEvX`fvJSz9&iveVJ4^V;6uK%!Q`fiX-90pAk~UD)POz9q{L1CD`_P1CNG zg(3>19qTD<>Ypa7M$gMDP!9%0Qu0a1Kk1E?WptYFY-zFD%@Bx-23+UQPQS48FaB1C zOuOuk(D6MUxPOBn6c?Hd!{B0a(~E|^MZqxNshtf2wAVD9c>t9gSEm~^b~b&e!+c>r znXKb8oOXmZg0U-M-uxI3iNw?lsksEo2*xV!)|ff_-odacs!u(l)Rg9)*apzDKby!G zcuI6M=1rGId9Cu6HW$b+<`ywSlU$}w;kNCjww}6J_ED^>q6^Jy5s?L$DF3V=QrDp} zv}0%CYcGUq@@&(jxW@kmS1~xb!DDL2t-@>QU^Zjhxz}E?1jo4z=jAmnoBMnWUMF9 zRXM)rAWat2S$q(Us~BETuzj_xdjN?wjb-zxaKb6HDkzn5lQa}MD^Z+BDFv0KN7yn7hthHLlAr(7RPNmQ0jhM#~p7iQi$WCz7 zrPRF{rM{0)m9kn)?dq8Z*`=EW+bU8^zg@+~eRj<<((H#@gNK5e)6d5({RxNfm^^ui zUq1ZxYKc3!vYs;&N-jTYng)>xPkwkB$l=R9wVZ$4TDQca!O%V#}l`{XOL zGqMlMZbEp@+m+7WtZ=Z$Q?k-3VbAsv3pWz1ue17gIw4@NK_}|6vj6adO{vQ5{fUYed~MK#Kh>-?dcLWZ}#fkytZdr?9e!V{@VD z=E9KwcA9P2$7T{Eg$&oq6>jvpcTqxgGIIBHDV8Oo% zicq_J5PZ|LH{;TJzSL7w*+J9fzCqnB*DmGe0zR9+%ax@o<~1a%im9BOg*vIJUEq^w zj!ZDN$XT^!mGo`1-M7{x-ki4no<%G1b0llJ;kXQCG(C-{JaoalOr|EXO39_ymGy_? zEQn^1x^r>LUMqp@u_px%vs~j{uZ!FJ#@1A*NF5+5M3`}b8#Fqq=>vlp@9HkE$99eo z{;Fvi7I@uXkKz>mynr*!kk-Xr-PL_q+F^*dA+r*E^Kja7m;IWRTu2{8bVTK`a3&X# zVxOC8+8hfD)j%W1A`I)1Y#Dh}c+1MhI?~o7T!i04i%4r$Kte^N=t700mya|i)=adz zP>pTT3bgLVFIKQ1!9tQMSSU~m)kEQ=%{ywNBgJpsI-#I``DvFJ>3a384Rbct^n@hD zy3USZYr@<0VX`Tw_nR1ZTYY#fLao3Eic~dx8V=2@jY$5g<`PYm@5wd`;?-oU1#G_t zmJTPIid&MMJbb{aQf|F{Oqoj6^hXB-DC3D8*NT%WahQ)SgjLtZMpN=jH@V)QeFWK{ zYl=1 zmfG@B%L&e6A5p&0lq_qXb?=^*SotA9`akDn(An=FIG`hwE(X zFHyF=(Ox;E-@I5`O)B(%ISEg6)O@1LD#dO~KTyVeK6MJ!(P3yJ2v;Pm9@1H^uEbnQ zMY+{Rk&hW3Q=}&rGC?brLWsOOO>1+gh%esurAEni>(bxand`WtF{)_>>s^7c6?9&H z5Py@HwRn?s!mXpA6m)fcqKr8r>XN>xW|H+|U2A91=f8L>vV7Y_>^?0PZTC1FdSqB1 zfM2}cj~c1<%=%=gR)Y|;T*h)R?wEGd1KO7uoY@^um5`iFs=gCgS*qulJW;0Se==|$ zQl9sf6T21Uxi>?7JEnK91AHN_BW_~nkLL#*{5-)4$A+xLRX=5G+4DA4#7XQ z=y%g_Qtoen(){N&4Xo@=&2SK}q~^S|Be+IHZzfOE;7p_A2H^S^qHVY9j)LsoF0Iq5 z@A6kiUMc@lNL(#JL&~Y*cIUi3T%^dV*JP!XH3Ai>X5VasR^H1<6IIfxb*}dDY_+30 zV^vCXpiHrNt(P;wK_I!c;oF4HVVoZ5tkPRHh*@Z3Je|uDdZKd^MbNwYrTYSazqmMP z#S(dVTd=*MYI$QGVX-K8rO4+C3n>{9brT({Q#yq|S@z$Iaj4BNORujdf=6;o)hM_8 z%+q2oATYz5>%kvMY^aQhKr3g1u~~I+;5VBVVxdC?KvlwyC*vgwnj@IsTx)sfsivoE zcnX%OypBDpI@cO+P&w${+Y0p4h~F>qP^M85wR4{LR_YQ zTdvpj@M`4qikc@`%78pqBS<2wCaQVe37WJaz+h!kp^5zI=ZxL;Q{yd716p}#(MIq- zyoDf{wZfKsmT-tM$5q_Bg;lx>o*?(~6#t45x|Z_u5+;ux?M@hpoAKlIQFaN(5e)V> zkK}x{_5VJA)P{*tmIzrol!@%Jf)vFWavnp9R4-e89@3%TT}c>2Ocp})5TTrF;S9X2 zcr?}3sCb%OO7DUo8Y49^29C7g7?GojGzDcjf7zu<8L9vY-cl|!ZNN{u$e0i@u#jEY z>++d~g#~3uGy1i=Oc*P(5G9->GssF&{4}=TRRes?iHdxv_E$_T4r?-AMd$vTi#mrx z!|wDQ!#Y4sZI@Sep>v8HGqc|Qc41yQzL;U8{PUq$%=OPN2722IT)_U0TXU_??CN8k zZ&k2sTNTNQGWEY=Ue9>xTFc-f-no;kSK1udcFn^wwmi*Nl837%AJRLsY%5&-)XeL7 zsCOEyutAP%tflnB>f}M9qwpFX4LC^!S|;W-^S2n{niuLGUWa?7S7-ZDYr9KXBmsqo zwQA-be@HFL1QuNKr&LyF2Y30)c_mE738e_NZ#udJ`x|VKiuaz*ulS<3zK$c+@&aY? z%P{o8j*+&rxebYhK=Dtmx+mGQbQR!;g(yyEfejI`>QzS+QhQK89I&B9ZKL2H#YLNZ9_s%Q zzN)d7T4*wF@d@{RP6`TCtOQ?jUobTaIygG|Qj=9}AH_mDbw)EnO^C1&2DcO^9o5gy zETS>5ho7;EOPmm&(o4+7C~BoC))wd=W&$$Yw`ewwOaXG`ijXX%$}F~>HS_Bfz8tJ; z*H(~QPv}~?W3=fn_4tx3&cd)yoblJ^DSjevYx@25-B?`nLmi_QO<(afiDpCQbk*p) z3_Weqf!z(2ZC=$iw0qa{P&3oK`L0tfxkMCX-s+&X6n&#iICRy=@D2fmBGk@K0>umT z+^tWgYOFHnY?en~a6QZ;)=opI*48H=M7QBMoA&wgA<=25_%QWs{ePycIOm`6Pzzf0 zeI)*nWu&JG&Ot-R!_V35?V?t)-ewzN>Q|JQDZ+W#S66Zb2LS$wWZ&hI>ZfX9aX7DYG{pNUaYI+ycC2m5RTXaU|TCd>QqZ zhjgwTeZAUIKGp(NmzH~HaT;|yhITw+cgZVA1OMuj? z<6=B1&3`|F;fU||zP3Yn!%H?n*xcW`#NnkXrG4m(patu`+a<)9f>D9k1^UhM+!ld7 zMZpmQU56|X^$Y05>3j$Cs9{og*X872J@63@TV0gHW8r9zCm%H;5pR==>MyQTF6+4- zM+t>J>e%-U|3nHM|GYvY^L}Q`KTmllA%z|d;2#pN#>+0R4FBM2Mih-DpP&oxIMzNR zy?*~kb@yS(B^$^mt{?^_dr=tTXHEL7rK^pouUJ+w8I^x1(rD4%ciek*XI=24C-5@m zqw+~#>eNz|^I1&}CfXZKqY@6&*1xOJvS_TSwy6(ui&;=-AWqQUCXdlkR;NZsb&1U` zo$gmuB$u$-o+(5O?IS!27l3iZK{N63zlMe1IGlJBM^dl0#lA`G<;MM}NG;Dt^>BHA z)-L;SF3SvAvHejS5jy#_g{IM_+Kzc6ker@k*zsgi+iS}&q7L=#u8|K$!$(8Xkj5_I z(D8Y-v_LA%4n;_?*U?Kje(WsG3gr~w&0>fOG=Ft zevku6_z@Six(xkNUmu%E=#N?SMu+6dyvl)zPYNzmx#Ai&9cE&}JWkE`bklK+o_qUx zE`OMU=94xo%xJA93fx<&&V_7i>w8*}wYUyhq+Yw{(%iT>g=^Z(`q{0SDhAqXAH`4o z81kwOH`lLPn8^(80s^8%pk}i7I%_7seP2Du9joAqz@zfbuK6q%Q2+u$h5Uk z$YT*H+RT%eaexXx)zwVD=%n_9fB_u)WEdk2$>baA?eavI7!Ks%&sJqjmqR`sRlF+T zKnwNx3II18rM+r&2#`#B+FofvxEEZv?){gV2=ZOAkVW9Liz&ZrmaMZPU;A0j_q7OI z+lC2xLpEhX87#jg)gK;JyAtuq(DT*5x|$^Ue@>1=v@sV3MtDqW&?+6j@gA9Ql9KoL!iYKrDe;O z%s$>bYG7GWDkQZi7nr06fS3-HfdVb{@+^(}DJy$8){YVtG@*tBR*USTM+s~J54wbp zpWbzjI>25Td)CxU-)DMMIo15%bT#N=)XK{anS4pix|M-Ib`z?D;@&U(E zk>*8dFSZiO_SkMne$W_}`#m7AGGB;VUl!WVoiQ9vVeP8(C9s_xa!r4_x3x1X{i*q3)R%P*crRXph0fEs1~N0-X3k@fZ$P!zmMP3^T(t^`3Htw2&5 ztJ>BK$Ta+Dminlgoh&_Gj>|@Pl->?e`cye#<0N9?JuC{e-Ru7A)G_Y?nPya7LCED> z6Kcn$2(-F{X)eT@@R|7Vy-G@#MLinfq3K+B#-X%Qiks2AdMw}QegMDF#3l~Ub;BOE z6;p#)21D-LN5O_*mUhq#h07*naRP-VujybGoOl`rF zD}S9V;|FuJM<)<=6Y|+rY|6jBltPnp)7tZ5da_T&ZFH)g;xJjC45o1A_kgZLwk)(T zS@IuG*c5!||73R1`>u(0^JzOhG^q5kG1nmBT7{jqvPb5h)t}&JLx9vm!cKWjxKp!&AzG*?%G{)To}*^RN(Ze-mRBd$6eQGJanAs$?axyzg#MB5H|Z|>(#w2r z*ZGRKtEO$Pl$#3?n$v+9>7u2{=3Ez*4IaQ;j$jzxF#54Ckw|!beR}hNsY~jSHeC%*XhlI3o2EygxZa8L&yjhS41d{AFu5^?cxHp$TNcY2-K*=tv z5>H0vEu@F3Gi0Y_6RW~{u6lKKASAo9A2#GZQ94SjcDA4`CgSx;Ne5 zT)e|pFRSHt54&aa!^hy;Z?Vm6p#p@hr$2PLcKL_tJ|eZ4o}WKl#|SHX`$*@lt^cG> z1@1(46s;z+5=(k0^a%yC1Zg!qaqAbzcZE!U7d^gl8@a|TiE~l+jaV2ecmuGOrWI5Y zFUz~0#M>lDlvV4=ERE;-yqKi3kCBt(@`1MWXK^e)bh#mdjb8%f`(^BN|7t?hx`&xlG~IB1dH@!yH`}x*r79NB)~A4xo=_Gd$YlJ4 zuT&?QBo;7{q=1vh5QC*1exGL!08;mi*TX6&=;G@6TA zNr3B0ng9M8&13#|`#Z4;Ixb2LVmJ90+ip4=jXEUsi{)jbds(FFfX3F&25QFflgr(& zxwLk4!WtNyc-%-;L;p0I2@{_`eGh|F<@=yMRM97ybZ9xo(S?Uf!KR9|Rzn*{H-+&X z1u9U4$$_X@NNUx0C!M0B#w?cMQG_37nMvReQ-A+$-`_S# zfRb@90aDzo$9nz(57zydfRb+(^2x$29K#n@lL#tGxUG$+*UpS9m(g)W=5KT0S-wDpI+}#zlr$% zx0q&e%Ld}ivbr&IMMrYIM{$Fgk_A~MY!wmTR=?9+m(``)XZj;o+O?<=|9XAW7;YrF zlpi>@ITlpP&a+<;cWa6=jHrNml5Mr~!=q{_SRQhSO|sQX$QwZ>3k|drw{V{v(z?X4 znLs*o>DMwtvlpH#RE@7RFN&hB4?K|#3%@W;KbwSBPqFZI)QoPWuv4*B=3b`>E!N0L z7Gw2g$+0m&YVys(7oD#VZ*TG7(nR?yl}#$Ak!H#=B;=W&vF#& zjY%0C3=X2zAdpr{A5P8ciiINELdMEI#g$j#5D!?pp0A_2`O3=lYRAH(f*`o+nBzpm zR{ZzU#npad2)y;l&#!-x<$q8_!_L>E`6z8_7DNS$WuGkgm8lyR(k8|OYaQc(=!k-G zbPx3MVRb$<11l|1x z&pvV0c-AM`zmcZl`BG&t9sK~^LSc^i!;fh~F1QFRv8lw9c_Z?LU0zdtw3r3e^gcc) zSgil6^qdid2&v5!M(nEvBsXHMRWsF-fSxsTQzwCBDBy(=bg4_mJl38+&!ttFkyuz) znJ(hJTd5ZXoFA`WS-uEqt?tcydkIuJGC-P`p+b0-zUK>lUM4desos=SHmYXI|@qIPW*`bmZo!v>vU=Uy>l`W z91@O05FD;geeSHQwx`-|$zDv7Hh6qsfgV!Jmu6Gh8v)OYt8tS|x6a2XyWMQw0?fLz zYX_c8#nGfP*a+@vv;1KFzN(>8XvpJTjtMO^H%kzgZcTeIh{07Qo8K(H z@_>cP)fC><gGK?lMH9sBHf2)aVq4KiEWN5FcDeDpmTz?(I4?`&RTbWFq^dzXhSk z>%^Pns`c#)3Qnx~IQY%71X-c5;kibp8w>3W?230^@MO;<&70=-VdF%})qsJcGnXYl zC&3PaljKqArOAkVX_0H6*@1r-B?8JuN} z)Z``+HcH7hBxO8me=BWxbny1!;OC?>z3LN$O${qx4@FBy1@_X0qJau0H4fHb5;xPY zWlhNzpSrYRnMi0Un66gNYC)-sYb`|wRyFk@BR?%;&^kQYaGgEy!^4&=dIbx|>Nm;w z_P0{13nKqGoyEZrEX=xPxytRX$ojU!EkG&;&V)_qxIx;&Yy99x_R%Mkz?v*{t|3x$ zR2$UR5>uCjk?6?a7<}#!SndPa$QLL<^X>EzPYEE=WxcXf->l3R7P#;l{jOwPDVz_z zpkd0t37mBSApNF0h1$LX1nH7SNArIaDb+ezjg-0wZe8DT#(b;i+*}47v9s;gztufREk`n#H?;nLa%2aa~~5bwm6N2$q69DJazBHtk7WnlGTG|Z0{*V^}tN45Oa_T4|ED!bEw=D z%-Gk&{qmNJ4ji37NxTb+&r^IUs*)O;Lusy=MM0ec3G3TW$5_o!CMl^0Iz~^VJQ@_j zb2&F0G6-m%9IwHRx?HMSLem)@VE0GgasLd5TG`gbY!1BCZ`ZeCVJmKH)1^|zc`>#T zL<7J5)14CilIHwhT>bzUwP>?DvZw{Y1zo}8Qb>vj zb?UA{p!T=-TwRJ7)Auyeb;&R*GSs0qw2K|VJ62oK94!{Rc}t8si*O_u%hF!0q!e+} zy1Adm-AC7FU1GK@_KX+rYUMSVCajuM+TCSR*>-gFOG8*dnIN-Z;hl{q?GZz#KNCDIC^)o{U$zfQ`j*R{2~Nb_ z-<+&AWZeI6^YL{3)TJP_GNIY+<=9y1OFLfi{w|kx6Nc5fQzP zVX5L!K1YYW{hZ|x4iTUzRp@N1AD}BC9{i71OJVHob()Fsl_{d{ zg!QII8qc!Rh%JIQJ5`J%W?SIh8}mN0=&*zkzE0p3S6kX*-^384u+dn>#Qo~n@@$WP zE07ly$)wh1MtA@Bz3H3LQE$jccu@1I2bHZMh#uOqM(!?iT`|e0?AVE~@r37>8oTNX z3s-=YKwHG6l@giRF+|w*Wc32e#XdZ4W+nKEq1D!bKN$R?_M`A$n^l9uX_u!B6$-8e zL2;mqfHznW@D#Kc9WDVt3LleeI9=M0HY2qND191LHmvn{tgFpuM<|MxjjrPxt!y(1 zcDj|~5!$$d206?sa`>t}od4WqTLmt*((_;i{rBPJ^{?Me!-H+TkoGIX04tca<1cEz z`TCaz23M!Z;Usiv0O8pZFbk`Ke!K!sBzQU`gpf<<$b?f4Qe zJGBb7i8!AGsNvv&$@XI=V-|8wW2E-P%eJoHIW}Rq3l=FoeMkv6MD#F-`yppQp|&7i zz2*yB%kFW2>MFTaoRWS0DU_d|9~CK!Gnu%OxA4QZ;BHS|;@!A@4)?{u8oh<14drDo zB%>F}8{f4OdkI}n^eyUpZ#~!YDwU`=`c}sxf8??N000I_L_t&o Y0Is@-(?6f@vj6}907*qoM6N<$f;W|@sQ>@~ literal 0 HcmV?d00001 diff --git a/packages/tools/tests/test/visualization/config.json b/packages/tools/tests/test/visualization/config.json index 0de3a21f22d..54286578da3 100644 --- a/packages/tools/tests/test/visualization/config.json +++ b/packages/tools/tests/test/visualization/config.json @@ -2693,6 +2693,10 @@ "playgroundId": "#SYQW69#1364", "excludedEngines": ["webgl1", "webgpu"] }, + { + "title": "FrameGraph nrge volumetric lighting", + "playgroundId": "#3VH0AC#2" + }, { "title": "FrameGraph nrg gui bloom", "playgroundId": "#3LB017#3", @@ -2759,6 +2763,10 @@ "renderCount": 40, "excludeFromAutomaticTesting": true }, + { + "title": "FrameGraph volumetric lighting", + "playgroundId": "#3VH0AC" + }, { "title": "Render target texture with clustered lights", "playgroundId": "#1QCA2M#11" From c91cb091cee6e7dc1df6784efff65faa02a2e937 Mon Sep 17 00:00:00 2001 From: Popov72 Date: Mon, 1 Dec 2025 19:39:38 +0100 Subject: [PATCH 02/18] Fix ts --- .../dev/core/src/Lights/lightingVolume.ts | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/packages/dev/core/src/Lights/lightingVolume.ts b/packages/dev/core/src/Lights/lightingVolume.ts index 549e4487965..7d141aa88c5 100644 --- a/packages/dev/core/src/Lights/lightingVolume.ts +++ b/packages/dev/core/src/Lights/lightingVolume.ts @@ -31,12 +31,15 @@ export class LightingVolume { private _light?: DirectionalLight; private _fallbackTexture?: BaseTexture; private _storageBuffer?: StorageBuffer; + private _vertexBuffer?: VertexBuffer; private _depthCopy?: RenderTargetWrapper; private _readPixelPromise: Nullable> = null; private _readPixelAbortController: Nullable = null; private _numFrames = 0; private _firstUpdate = true; private _currentLightDirection = new Vector3(); + private _positions: Float32Array; + private _indices: Uint32Array; private _shadowGenerator?: ShadowGenerator; /** @@ -78,7 +81,7 @@ export class LightingVolume { public set tesselation(n: number) { this._tesselation = n; - this._createGeometry(); + this._createGeometry(true); } /** @@ -166,7 +169,7 @@ export class LightingVolume { } this._tesselation = tesselation; - this._createGeometry(); + this._createGeometry(true); } /** @@ -253,6 +256,7 @@ export class LightingVolume { positions: { group: 0, binding: 2 }, }, defines: !this._buildFullVolume ? ["#define KEEP_EDGES", "#define MOVE_FAR_DEPTH_TO_NEAR"] : undefined, + entryPoint: "updateFromShadowmap", }); if (this._shadowGenerator) { @@ -388,7 +392,7 @@ export class LightingVolume { this._firstUpdate = false; } - private _createGeometry() { + private _createGeometry(recreateAll = false) { if (!this._light) { return; } @@ -413,6 +417,11 @@ export class LightingVolume { const startFarIndices = this._buildFullVolume ? (numTesselation + 1) * 4 : 4; + if (recreateAll || !this._positions || !this._indices) { + this._positions = new Float32Array(((numTesselation + 1) * (numTesselation + 1) + startFarIndices) * 3); + this._indices = new Uint32Array(3 * (this._tesselation * this._tesselation * 2 + (this._buildFullVolume ? 12 * this._tesselation - 2 : 2))); + } + if (this._buildFullVolume) { let startIndices = 0; @@ -560,7 +569,7 @@ export class LightingVolume { this._storageBuffer.update(positions); - const vertexBuffer = new VertexBuffer(webGPUEngine, this._storageBuffer.getBuffer(), "position"); + const vertexBuffer = new VertexBuffer(webGPUEngine, this._storageBuffer.getBuffer(), "position", { takeBufferOwnership: false }); this._mesh.setVerticesBuffer(vertexBuffer); @@ -574,5 +583,7 @@ export class LightingVolume { } this._mesh.setIndices(indices, positions.length / 3); + console.log("Ok: ", indices.length, positions.length); + console.log("Calc: ", this._indices.length, this._positions.length); } } From ac096ba8681e7982f25c2e4aa7a1562403421013 Mon Sep 17 00:00:00 2001 From: Popov72 Date: Mon, 1 Dec 2025 19:49:10 +0100 Subject: [PATCH 03/18] Fix ts (2) --- .../FrameGraph/Node/Blocks/lightingVolumeBlock.ts | 13 ------------- packages/dev/core/src/Lights/lightingVolume.ts | 13 +------------ 2 files changed, 1 insertion(+), 25 deletions(-) diff --git a/packages/dev/core/src/FrameGraph/Node/Blocks/lightingVolumeBlock.ts b/packages/dev/core/src/FrameGraph/Node/Blocks/lightingVolumeBlock.ts index 319347bbafa..9f7a13a0083 100644 --- a/packages/dev/core/src/FrameGraph/Node/Blocks/lightingVolumeBlock.ts +++ b/packages/dev/core/src/FrameGraph/Node/Blocks/lightingVolumeBlock.ts @@ -56,16 +56,6 @@ export class NodeRenderGraphLightingVolumeBlock extends NodeRenderGraphBlock { this._frameGraphTask.lightingVolume.frequency = value; } - /** Indicates whether to build the full volume (true) or only the far plane (false). Default is false. */ - @editableInPropertyPage("Build full volume", PropertyTypeForEdition.Boolean, "PROPERTIES") - public get buildFullVolume(): boolean { - return this._frameGraphTask.lightingVolume.buildFullVolume; - } - - public set buildFullVolume(value: boolean) { - this._frameGraphTask.lightingVolume.buildFullVolume = value; - } - /** * Gets the current class name * @returns the class name @@ -100,7 +90,6 @@ export class NodeRenderGraphLightingVolumeBlock extends NodeRenderGraphBlock { const codes: string[] = []; codes.push(`${this._codeVariableName}.tesselation = ${this.tesselation};`); codes.push(`${this._codeVariableName}.frequency = ${this.frequency};`); - codes.push(`${this._codeVariableName}.buildFullVolume = ${this.buildFullVolume};`); return super._dumpPropertiesCode() + codes.join("\n"); } @@ -108,7 +97,6 @@ export class NodeRenderGraphLightingVolumeBlock extends NodeRenderGraphBlock { const serializationObject = super.serialize(); serializationObject.tesselation = this.tesselation; serializationObject.frequency = this.frequency; - serializationObject.buildFullVolume = this.buildFullVolume; return serializationObject; } @@ -116,7 +104,6 @@ export class NodeRenderGraphLightingVolumeBlock extends NodeRenderGraphBlock { super._deserialize(serializationObject); this.tesselation = serializationObject.tesselation; this.frequency = serializationObject.frequency; - this.buildFullVolume = !!serializationObject.buildFullVolume; } } diff --git a/packages/dev/core/src/Lights/lightingVolume.ts b/packages/dev/core/src/Lights/lightingVolume.ts index 7d141aa88c5..583fb3af1a3 100644 --- a/packages/dev/core/src/Lights/lightingVolume.ts +++ b/packages/dev/core/src/Lights/lightingVolume.ts @@ -31,15 +31,12 @@ export class LightingVolume { private _light?: DirectionalLight; private _fallbackTexture?: BaseTexture; private _storageBuffer?: StorageBuffer; - private _vertexBuffer?: VertexBuffer; private _depthCopy?: RenderTargetWrapper; private _readPixelPromise: Nullable> = null; private _readPixelAbortController: Nullable = null; private _numFrames = 0; private _firstUpdate = true; private _currentLightDirection = new Vector3(); - private _positions: Float32Array; - private _indices: Uint32Array; private _shadowGenerator?: ShadowGenerator; /** @@ -256,7 +253,6 @@ export class LightingVolume { positions: { group: 0, binding: 2 }, }, defines: !this._buildFullVolume ? ["#define KEEP_EDGES", "#define MOVE_FAR_DEPTH_TO_NEAR"] : undefined, - entryPoint: "updateFromShadowmap", }); if (this._shadowGenerator) { @@ -392,7 +388,7 @@ export class LightingVolume { this._firstUpdate = false; } - private _createGeometry(recreateAll = false) { + private _createGeometry(_recreateAll = false) { if (!this._light) { return; } @@ -417,11 +413,6 @@ export class LightingVolume { const startFarIndices = this._buildFullVolume ? (numTesselation + 1) * 4 : 4; - if (recreateAll || !this._positions || !this._indices) { - this._positions = new Float32Array(((numTesselation + 1) * (numTesselation + 1) + startFarIndices) * 3); - this._indices = new Uint32Array(3 * (this._tesselation * this._tesselation * 2 + (this._buildFullVolume ? 12 * this._tesselation - 2 : 2))); - } - if (this._buildFullVolume) { let startIndices = 0; @@ -583,7 +574,5 @@ export class LightingVolume { } this._mesh.setIndices(indices, positions.length / 3); - console.log("Ok: ", indices.length, positions.length); - console.log("Calc: ", this._indices.length, this._positions.length); } } From d189cfd45d03f0c284901e1cc6627d255c81a097 Mon Sep 17 00:00:00 2001 From: Popov72 Date: Mon, 1 Dec 2025 21:18:55 +0100 Subject: [PATCH 04/18] Fix visu test --- .../ReferenceImages/Lighting-Volume.png | Bin 89515 -> 75562 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/packages/tools/tests/test/visualization/ReferenceImages/Lighting-Volume.png b/packages/tools/tests/test/visualization/ReferenceImages/Lighting-Volume.png index 79449abd9aaacd830727d43fae45c2963f2e6d4b..4f995aea7825a8a6bde4269f520673bee1dd0696 100644 GIT binary patch literal 75562 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�E1rsyOZoQtO%l2t2gEt#TTB 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%0DuXUGHd96oP;a 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%0A028qri9qT5VgfB#1&v*xSVP~nepvXa&iu0 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

5p=I=jZkF$i9S+oxM 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 Date: Thu, 4 Dec 2025 15:57:57 +0100 Subject: [PATCH 05/18] Fix wrong compute shader being used when having multiple entry points in a single file --- packages/dev/core/src/Compute/computeShader.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/dev/core/src/Compute/computeShader.ts b/packages/dev/core/src/Compute/computeShader.ts index 6c0a8d20afe..c836ecb9f99 100644 --- a/packages/dev/core/src/Compute/computeShader.ts +++ b/packages/dev/core/src/Compute/computeShader.ts @@ -147,6 +147,7 @@ export class ComputeShader { this._options = { bindingsMapping: {}, defines: [], + entryPoint: "main", ...options, }; } @@ -327,7 +328,7 @@ export class ComputeShader { } } - const defines = []; + const defines = ["#define " + this._options.entryPoint]; const shaderName = this._shaderPath; From 66d8ac1661f363499028b07d680e36d97d768d87 Mon Sep 17 00:00:00 2001 From: Popov72 Date: Thu, 4 Dec 2025 16:10:35 +0100 Subject: [PATCH 06/18] Switch compute shaders to fast mode to optimize performance --- .../src/FrameGraph/Tasks/Misc/lightingVolumeTask.ts | 6 +++++- packages/dev/core/src/Lights/lightingVolume.ts | 12 ++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/dev/core/src/FrameGraph/Tasks/Misc/lightingVolumeTask.ts b/packages/dev/core/src/FrameGraph/Tasks/Misc/lightingVolumeTask.ts index 75b662a4abc..42a1150c7ba 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/Misc/lightingVolumeTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/Misc/lightingVolumeTask.ts @@ -50,7 +50,11 @@ export class FrameGraphLightingVolumeTask extends FrameGraphTask { } public override isReady() { - return this.lightingVolume.isReady(); + const isReady = this.lightingVolume.isReady(); + if (isReady) { + this.lightingVolume._setComputeShaderFastMode(true); + } + return isReady; } public record() { diff --git a/packages/dev/core/src/Lights/lightingVolume.ts b/packages/dev/core/src/Lights/lightingVolume.ts index 583fb3af1a3..002ef801c5f 100644 --- a/packages/dev/core/src/Lights/lightingVolume.ts +++ b/packages/dev/core/src/Lights/lightingVolume.ts @@ -126,6 +126,18 @@ export class LightingVolume { return this._firstUpdate; } + /** @internal */ + public _setComputeShaderFastMode(enabled: boolean) { + if (this._cs) { + this._cs.fastMode = enabled; + this._cs.triggerContextRebuild = enabled; + } + if (this._cs2) { + this._cs2.fastMode = enabled; + this._cs2.triggerContextRebuild = enabled; + } + } + /** * Creates a new LightingVolume. * @param name The name of the lighting volume. From 79fbe92eac98f975373abf90fa69cb6c08d25a8f Mon Sep 17 00:00:00 2001 From: Popov72 Date: Thu, 4 Dec 2025 17:11:41 +0100 Subject: [PATCH 07/18] Allow smaller texture sizes for the lighting volume texture --- .../PostProcesses/volumetricLightingTask.ts | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts index 1ba55769818..09b1cb26d6a 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts @@ -158,7 +158,7 @@ export class FrameGraphVolumetricLightingTask extends FrameGraphTask { this._renderLightingVolumeMaterial = new ShaderMaterial(`${name} - render lighting volume`, this._frameGraph.scene, "volumetricLightingRenderVolume", { attributes: ["position"], uniformBuffers: ["Scene", "Mesh"], - uniforms: ["world", "viewProjection", "vEyePosition", "lightDir", "invViewProjection", "outputTextureSize", "extinctionPhaseG", "lightPower"], + uniforms: ["world", "viewProjection", "vEyePosition", "lightDir", "invViewProjection", "outputTextureSize", "extinctionPhaseG", "lightPower", "textureRatio"], samplers: ["depthTexture"], defines: enableExtinction ? ["USE_EXTINCTION"] : [], shaderLanguage: isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL, @@ -170,9 +170,9 @@ export class FrameGraphVolumetricLightingTask extends FrameGraphTask { this._renderLightingVolumeMaterial.bindEyePosition(this._renderLightingVolumeMaterial.getEffect()); }); - this._clearLightingVolumeTextureTask = new FrameGraphClearTextureTask(`${name} - clear lighting volume texture`, frameGraph); - this._renderLightingVolumeTask = new FrameGraphObjectRendererTask(`${name} - render lighting volume`, frameGraph, frameGraph.scene); - this._blendLightingVolumeTask = new FrameGraphVolumetricLightingBlendVolumeTask(`${name} - blend lighting volume`, frameGraph, enableExtinction); + this._clearLightingVolumeTextureTask = new FrameGraphClearTextureTask(`clear lighting volume texture`, frameGraph); + this._renderLightingVolumeTask = new FrameGraphObjectRendererTask(`render lighting volume`, frameGraph, frameGraph.scene); + this._blendLightingVolumeTask = new FrameGraphVolumetricLightingBlendVolumeTask(`blend lighting volume texture`, frameGraph, enableExtinction); this.onTexturesAllocatedObservable.add(() => { this._renderLightingVolumeMaterial.setInternalTexture("depthTexture", frameGraph.textureManager.getTextureFromHandle(this.depthTexture)!); @@ -195,6 +195,10 @@ export class FrameGraphVolumetricLightingTask extends FrameGraphTask { ); } + public override getClassName(): string { + return "FrameGraphVolumetricLightingTask"; + } + public override record(skipCreationOfDisabledPasses = false) { if (this.targetTexture === undefined || this.depthTexture === undefined || this.camera === undefined || this.lightingVolumeMesh === undefined || this.light === undefined) { throw new Error(`FrameGraphVolumetricLightingTask "${this.name}": targetTexture, depthTexture, camera, lightingVolumeMesh and light are required`); @@ -219,13 +223,18 @@ export class FrameGraphVolumetricLightingTask extends FrameGraphTask { this.lightingVolumeMesh.meshes[0].material = this._renderLightingVolumeMaterial; + const targetTextureSize = textureManager.getTextureAbsoluteDimensions(this.targetTexture); const volumeTextureSize = textureManager.getTextureAbsoluteDimensions(lightingVolumeTexture); + this._renderLightingVolumeMaterial.setVector2( + "textureRatio", + new Vector2(targetTextureSize.width / volumeTextureSize.width, targetTextureSize.height / volumeTextureSize.height) + ); this._renderLightingVolumeMaterial.setVector2("outputTextureSize", new Vector2(volumeTextureSize.width, volumeTextureSize.height)); - const pass = this._frameGraph.addPass(this.name); + const passUpdateMaterial = this._frameGraph.addPass(this.name); - pass.setExecuteFunc(() => { + passUpdateMaterial.setExecuteFunc(() => { this.camera.getTransformationMatrix().invertToRef(InvViewProjectionMatrix); this._renderLightingVolumeMaterial.setMatrix("invViewProjection", InvViewProjectionMatrix); From ffb1f04a2f00c1214119d38109a20186b997dffb Mon Sep 17 00:00:00 2001 From: Popov72 Date: Thu, 4 Dec 2025 17:15:16 +0100 Subject: [PATCH 08/18] Add getClassName to FrameGraphTask and improve WebGPU debug groups --- packages/dev/core/src/FrameGraph/Passes/renderPass.ts | 4 ++-- .../dev/core/src/FrameGraph/Tasks/Layers/baseLayerTask.ts | 8 ++++++++ .../dev/core/src/FrameGraph/Tasks/Layers/glowLayerTask.ts | 4 ++++ .../src/FrameGraph/Tasks/Layers/highlightLayerTask.ts | 4 ++++ .../core/src/FrameGraph/Tasks/Misc/computeShaderTask.ts | 4 ++++ .../dev/core/src/FrameGraph/Tasks/Misc/cullObjectsTask.ts | 4 ++++ .../dev/core/src/FrameGraph/Tasks/Misc/executeTask.ts | 4 ++++ .../core/src/FrameGraph/Tasks/Misc/lightingVolumeTask.ts | 4 ++++ .../src/FrameGraph/Tasks/PostProcesses/anaglyphTask.ts | 4 ++++ .../FrameGraph/Tasks/PostProcesses/blackAndWhiteTask.ts | 4 ++++ .../src/FrameGraph/Tasks/PostProcesses/bloomMergeTask.ts | 4 ++++ .../core/src/FrameGraph/Tasks/PostProcesses/bloomTask.ts | 4 ++++ .../core/src/FrameGraph/Tasks/PostProcesses/blurTask.ts | 4 ++++ .../Tasks/PostProcesses/chromaticAberrationTask.ts | 4 ++++ .../Tasks/PostProcesses/circleOfConfusionTask.ts | 4 ++++ .../FrameGraph/Tasks/PostProcesses/colorCorrectionTask.ts | 4 ++++ .../src/FrameGraph/Tasks/PostProcesses/convolutionTask.ts | 4 ++++ .../Tasks/PostProcesses/customPostProcessTask.ts | 4 ++++ .../Tasks/PostProcesses/depthOfFieldBlurTask.ts | 4 ++++ .../Tasks/PostProcesses/depthOfFieldMergeTask.ts | 4 ++++ .../FrameGraph/Tasks/PostProcesses/depthOfFieldTask.ts | 4 ++++ .../Tasks/PostProcesses/extractHighlightsTask.ts | 4 ++++ .../core/src/FrameGraph/Tasks/PostProcesses/filterTask.ts | 4 ++++ .../core/src/FrameGraph/Tasks/PostProcesses/fxaaTask.ts | 4 ++++ .../core/src/FrameGraph/Tasks/PostProcesses/grainTask.ts | 4 ++++ .../FrameGraph/Tasks/PostProcesses/imageProcessingTask.ts | 4 ++++ .../src/FrameGraph/Tasks/PostProcesses/motionBlurTask.ts | 4 ++++ .../core/src/FrameGraph/Tasks/PostProcesses/passTask.ts | 8 ++++++++ .../src/FrameGraph/Tasks/PostProcesses/postProcessTask.ts | 4 ++++ .../Tasks/PostProcesses/screenSpaceCurvatureTask.ts | 4 ++++ .../src/FrameGraph/Tasks/PostProcesses/sharpenTask.ts | 4 ++++ .../src/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.ts | 4 ++++ .../Tasks/PostProcesses/ssao2RenderingPipelineTask.ts | 4 ++++ .../core/src/FrameGraph/Tasks/PostProcesses/ssao2Task.ts | 4 ++++ .../src/FrameGraph/Tasks/PostProcesses/ssrBlurTask.ts | 4 ++++ .../Tasks/PostProcesses/ssrRenderingPipelineTask.ts | 4 ++++ .../core/src/FrameGraph/Tasks/PostProcesses/ssrTask.ts | 4 ++++ .../core/src/FrameGraph/Tasks/PostProcesses/taaTask.ts | 4 ++++ .../src/FrameGraph/Tasks/PostProcesses/tonemapTask.ts | 4 ++++ .../PostProcesses/volumetricLightingBlendVolumeTask.ts | 4 ++++ .../FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.ts | 4 ++++ .../FrameGraph/Tasks/Rendering/geometryRendererTask.ts | 4 ++++ .../src/FrameGraph/Tasks/Rendering/objectRendererTask.ts | 4 ++++ .../src/FrameGraph/Tasks/Rendering/shadowGeneratorTask.ts | 4 ++++ .../Tasks/Rendering/utilityLayerRendererTask.ts | 4 ++++ .../core/src/FrameGraph/Tasks/Texture/clearTextureTask.ts | 4 ++++ .../FrameGraph/Tasks/Texture/copyToBackbufferColorTask.ts | 4 ++++ .../src/FrameGraph/Tasks/Texture/copyToTextureTask.ts | 4 ++++ .../src/FrameGraph/Tasks/Texture/generateMipMapsTask.ts | 4 ++++ packages/dev/core/src/FrameGraph/frameGraphTask.ts | 8 ++++++++ packages/dev/gui/src/2D/FrameGraph/guiTask.ts | 4 ++++ 51 files changed, 214 insertions(+), 2 deletions(-) diff --git a/packages/dev/core/src/FrameGraph/Passes/renderPass.ts b/packages/dev/core/src/FrameGraph/Passes/renderPass.ts index 7b7def5c22f..4e74242bf44 100644 --- a/packages/dev/core/src/FrameGraph/Passes/renderPass.ts +++ b/packages/dev/core/src/FrameGraph/Passes/renderPass.ts @@ -123,7 +123,7 @@ export class FrameGraphRenderPass extends FrameGraphPass void, @@ -194,6 +198,10 @@ export class FrameGraphBaseLayerTask extends FrameGraphTask { return this._objectRendererForLayer.isReady() && this.layer.isLayerReady(); } + public override getClassName(): string { + return "FrameGraphBaseLayerTask"; + } + public record() { if (this.targetTexture === undefined || this.objectRendererTask === undefined) { throw new Error(`${this.constructor.name} "${this.name}": targetTexture and objectRendererTask are required`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/Layers/glowLayerTask.ts b/packages/dev/core/src/FrameGraph/Tasks/Layers/glowLayerTask.ts index a08647fa2ef..7cbd4ae2be9 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/Layers/glowLayerTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/Layers/glowLayerTask.ts @@ -23,4 +23,8 @@ export class FrameGraphGlowLayerTask extends FrameGraphBaseLayerTask { this.layer._renderPassId = this._objectRendererForLayer.objectRenderer.renderPassId; } + + public override getClassName(): string { + return "FrameGraphGlowLayerTask"; + } } diff --git a/packages/dev/core/src/FrameGraph/Tasks/Layers/highlightLayerTask.ts b/packages/dev/core/src/FrameGraph/Tasks/Layers/highlightLayerTask.ts index 0411f89cc6e..5ae6c900df3 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/Layers/highlightLayerTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/Layers/highlightLayerTask.ts @@ -26,6 +26,10 @@ export class FrameGraphHighlightLayerTask extends FrameGraphBaseLayerTask { super(name, frameGraph, scene, new ThinHighlightLayer(name, scene, options, true), 1, alphaBlendingMode === Constants.ALPHA_COMBINE, true, true); } + public override getClassName(): string { + return "FrameGraphHighlightLayerTask"; + } + public override record() { if (!this.objectRendererTask.depthTexture) { throw new Error(`FrameGraphHighlightLayerTask "${this.name}": objectRendererTask must have a depthTexture input`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/Misc/computeShaderTask.ts b/packages/dev/core/src/FrameGraph/Tasks/Misc/computeShaderTask.ts index 117789d4034..f5040171172 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/Misc/computeShaderTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/Misc/computeShaderTask.ts @@ -183,6 +183,10 @@ export class FrameGraphComputeShaderTask extends FrameGraphTask { this._cs.setTextureSampler(name, sampler); } + public override getClassName(): string { + return "FrameGraphComputeShaderTask"; + } + public record(skipCreationOfDisabledPasses?: boolean): FrameGraphPass { const pass = this._frameGraph.addPass(this.name); diff --git a/packages/dev/core/src/FrameGraph/Tasks/Misc/cullObjectsTask.ts b/packages/dev/core/src/FrameGraph/Tasks/Misc/cullObjectsTask.ts index ba36d68a62f..7bf02ecfd01 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/Misc/cullObjectsTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/Misc/cullObjectsTask.ts @@ -37,6 +37,10 @@ export class FrameGraphCullObjectsTask extends FrameGraphTask { }; } + public override getClassName(): string { + return "FrameGraphCullObjectsTask"; + } + public record() { if (this.objectList === undefined || this.camera === undefined) { throw new Error(`FrameGraphCullObjectsTask ${this.name}: objectList and camera are required`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/Misc/executeTask.ts b/packages/dev/core/src/FrameGraph/Tasks/Misc/executeTask.ts index eaa083cbcc7..1ae07440001 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/Misc/executeTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/Misc/executeTask.ts @@ -33,6 +33,10 @@ export class FrameGraphExecuteTask extends FrameGraphTask { super(name, frameGraph); } + public override getClassName(): string { + return "FrameGraphExecuteTask"; + } + public record(): FrameGraphPass { if (!this.func) { throw new Error("FrameGraphExecuteTask: Execute task must have a function."); diff --git a/packages/dev/core/src/FrameGraph/Tasks/Misc/lightingVolumeTask.ts b/packages/dev/core/src/FrameGraph/Tasks/Misc/lightingVolumeTask.ts index 42a1150c7ba..369a818bea5 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/Misc/lightingVolumeTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/Misc/lightingVolumeTask.ts @@ -57,6 +57,10 @@ export class FrameGraphLightingVolumeTask extends FrameGraphTask { return isReady; } + public override getClassName(): string { + return "FrameGraphLightingVolumeTask"; + } + public record() { if (this.shadowGenerator === undefined) { throw new Error(`FrameGraphLightingVolumeTask ${this.name}: shadowGenerator is required`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/anaglyphTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/anaglyphTask.ts index e008fae03fb..ea1da9b38b5 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/anaglyphTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/anaglyphTask.ts @@ -23,6 +23,10 @@ export class FrameGraphAnaglyphTask extends FrameGraphPostProcessTask { super(name, frameGraph, thinPostProcess || new ThinAnaglyphPostProcess(name, frameGraph.engine)); } + public override getClassName(): string { + return "FrameGraphAnaglyphTask"; + } + public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass { if (this.sourceTexture === undefined || this.leftTexture === undefined) { throw new Error(`FrameGraphAnaglyphTask "${this.name}": sourceTexture and leftTexture are required`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/blackAndWhiteTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/blackAndWhiteTask.ts index 5705fdb50d0..e0bf34e9220 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/blackAndWhiteTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/blackAndWhiteTask.ts @@ -17,4 +17,8 @@ export class FrameGraphBlackAndWhiteTask extends FrameGraphPostProcessTask { constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinBlackAndWhitePostProcess) { super(name, frameGraph, thinPostProcess || new ThinBlackAndWhitePostProcess(name, frameGraph.engine)); } + + public override getClassName(): string { + return "FrameGraphBlackAndWhiteTask"; + } } diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/bloomMergeTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/bloomMergeTask.ts index ce65e412aca..27995d13d57 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/bloomMergeTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/bloomMergeTask.ts @@ -14,6 +14,10 @@ export class FrameGraphBloomMergeTask extends FrameGraphPostProcessTask { super(name, frameGraph, thinPostProcess || new ThinBloomMergePostProcess(name, frameGraph.engine)); } + public override getClassName(): string { + return "FrameGraphBloomMergeTask"; + } + public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass { if (this.sourceTexture === undefined || this.blurTexture === undefined) { throw new Error(`FrameGraphBloomMergeTask "${this.name}": sourceTexture and blurTexture are required`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/bloomTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/bloomTask.ts index 48dc79f1d37..68e3b4650d9 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/bloomTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/bloomTask.ts @@ -116,6 +116,10 @@ export class FrameGraphBloomTask extends FrameGraphTask { return this.bloom.isReady(); } + public override getClassName(): string { + return "FrameGraphBloomTask"; + } + public record(): void { if (this.sourceTexture === undefined) { throw new Error("FrameGraphBloomTask: sourceTexture is required"); diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/blurTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/blurTask.ts index d8e5bef43f2..18206515d46 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/blurTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/blurTask.ts @@ -19,6 +19,10 @@ export class FrameGraphBlurTask extends FrameGraphPostProcessTask { super(name, frameGraph, thinPostProcess || new ThinBlurPostProcess(name, frameGraph.engine, new Vector2(1, 0), 10)); } + public override getClassName(): string { + return "FrameGraphBlurTask"; + } + public override record( skipCreationOfDisabledPasses = false, additionalExecute?: (context: FrameGraphRenderContext) => void, diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/chromaticAberrationTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/chromaticAberrationTask.ts index 0035f3da96e..bd4f3bd2892 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/chromaticAberrationTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/chromaticAberrationTask.ts @@ -18,6 +18,10 @@ export class FrameGraphChromaticAberrationTask extends FrameGraphPostProcessTask super(name, frameGraph, thinPostProcess || new ThinChromaticAberrationPostProcess(name, frameGraph.engine)); } + public override getClassName(): string { + return "FrameGraphChromaticAberrationTask"; + } + public override record( skipCreationOfDisabledPasses = false, additionalExecute?: (context: FrameGraphRenderContext) => void, diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.ts index 0bf1966b131..b36f2fbfb40 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.ts @@ -35,6 +35,10 @@ export class FrameGraphCircleOfConfusionTask extends FrameGraphPostProcessTask { super(name, frameGraph, thinPostProcess || new ThinCircleOfConfusionPostProcess(name, frameGraph.engine)); } + public override getClassName(): string { + return "FrameGraphCircleOfConfusionTask"; + } + public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass { if (this.sourceTexture === undefined || this.depthTexture === undefined || this.camera === undefined) { throw new Error(`FrameGraphCircleOfConfusionTask "${this.name}": sourceTexture, depthTexture and camera are required`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.ts index 21d70d1f6c0..a5f9eb4a16a 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.ts @@ -18,4 +18,8 @@ export class FrameGraphColorCorrectionTask extends FrameGraphPostProcessTask { constructor(name: string, frameGraph: FrameGraph, colorTableUrl: string, thinPostProcess?: ThinColorCorrectionPostProcess) { super(name, frameGraph, thinPostProcess || new ThinColorCorrectionPostProcess(name, frameGraph.scene, colorTableUrl)); } + + public override getClassName(): string { + return "FrameGraphColorCorrectionTask"; + } } diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/convolutionTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/convolutionTask.ts index 7d2640edce0..97831afae4e 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/convolutionTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/convolutionTask.ts @@ -18,6 +18,10 @@ export class FrameGraphConvolutionTask extends FrameGraphPostProcessTask { super(name, frameGraph, thinPostProcess || new ThinConvolutionPostProcess(name, frameGraph.engine, ThinConvolutionPostProcess.EmbossKernel)); } + public override getClassName(): string { + return "FrameGraphConvolutionTask"; + } + public override record( skipCreationOfDisabledPasses = false, additionalExecute?: (context: FrameGraphRenderContext) => void, diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/customPostProcessTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/customPostProcessTask.ts index 4ed3b9d49f7..a7e9f5dbbfb 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/customPostProcessTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/customPostProcessTask.ts @@ -25,4 +25,8 @@ export class FrameGraphCustomPostProcessTask extends FrameGraphPostProcessTask { this.onApplyObservable = this.postProcess.onBindObservable; } + + public override getClassName(): string { + return "FrameGraphCustomPostProcessTask"; + } } diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.ts index e397a1ad1c6..083f026ebdc 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.ts @@ -16,6 +16,10 @@ export class FrameGraphDepthOfFieldBlurTask extends FrameGraphBlurTask { super(name, frameGraph, thinPostProcess || new ThinDepthOfFieldBlurPostProcess(name, frameGraph.engine, new Vector2(1, 0), 10)); } + public override getClassName(): string { + return "FrameGraphDepthOfFieldBlurTask"; + } + public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass { if (this.sourceTexture === undefined || this.circleOfConfusionTexture === undefined) { throw new Error(`FrameGraphDepthOfFieldBlurTask "${this.name}": sourceTexture and circleOfConfusionTexture are required`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.ts index d66029701ea..9c6444cf95b 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.ts @@ -15,6 +15,10 @@ export class FrameGraphDepthOfFieldMergeTask extends FrameGraphPostProcessTask { super(name, frameGraph, thinPostProcess || new ThinDepthOfFieldMergePostProcess(name, frameGraph.engine)); } + public override getClassName(): string { + return "FrameGraphDepthOfFieldMergeTask"; + } + public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass { if (this.sourceTexture === undefined || this.circleOfConfusionTexture === undefined || this.blurSteps.length === 0) { throw new Error(`FrameGraphBloomMergeTask "${this.name}": sourceTexture, circleOfConfusionTexture and blurSteps are required`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.ts index ed65ead69ad..5b93ba68c8a 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.ts @@ -133,6 +133,10 @@ export class FrameGraphDepthOfFieldTask extends FrameGraphTask { return this.depthOfField.isReady(); } + public override getClassName(): string { + return "FrameGraphDepthOfFieldTask"; + } + public record(): void { if (this.sourceTexture === undefined || this.depthTexture === undefined || this.camera === undefined) { throw new Error("FrameGraphDepthOfFieldTask: sourceTexture, depthTexture and camera are required"); diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/extractHighlightsTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/extractHighlightsTask.ts index 291cc455e92..722fa135cf7 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/extractHighlightsTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/extractHighlightsTask.ts @@ -17,4 +17,8 @@ export class FrameGraphExtractHighlightsTask extends FrameGraphPostProcessTask { constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinExtractHighlightsPostProcess) { super(name, frameGraph, thinPostProcess || new ThinExtractHighlightsPostProcess(name, frameGraph.engine)); } + + public override getClassName(): string { + return "FrameGraphExtractHighlightsTask"; + } } diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/filterTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/filterTask.ts index 1bfd9f919dc..ec13e89b7f0 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/filterTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/filterTask.ts @@ -17,4 +17,8 @@ export class FrameGraphFilterTask extends FrameGraphPostProcessTask { constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinFilterPostProcess) { super(name, frameGraph, thinPostProcess || new ThinFilterPostProcess(name, frameGraph.engine)); } + + public override getClassName(): string { + return "FrameGraphFilterTask"; + } } diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/fxaaTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/fxaaTask.ts index 3bc925e6152..609d2e50645 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/fxaaTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/fxaaTask.ts @@ -18,6 +18,10 @@ export class FrameGraphFXAATask extends FrameGraphPostProcessTask { super(name, frameGraph, thinPostProcess || new ThinFXAAPostProcess(name, frameGraph.engine)); } + public override getClassName(): string { + return "FrameGraphFXAATask"; + } + public override record( skipCreationOfDisabledPasses = false, additionalExecute?: (context: FrameGraphRenderContext) => void, diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/grainTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/grainTask.ts index 123b037711e..e21e34b8573 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/grainTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/grainTask.ts @@ -17,4 +17,8 @@ export class FrameGraphGrainTask extends FrameGraphPostProcessTask { constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinGrainPostProcess) { super(name, frameGraph, thinPostProcess || new ThinGrainPostProcess(name, frameGraph.engine)); } + + public override getClassName(): string { + return "FrameGraphGrainTask"; + } } diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/imageProcessingTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/imageProcessingTask.ts index 247c846e25a..27ea8d10111 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/imageProcessingTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/imageProcessingTask.ts @@ -18,6 +18,10 @@ export class FrameGraphImageProcessingTask extends FrameGraphPostProcessTask { super(name, frameGraph, thinPostProcess || new ThinImageProcessingPostProcess(name, frameGraph.engine)); } + public override getClassName(): string { + return "FrameGraphImageProcessingTask"; + } + public override record( skipCreationOfDisabledPasses = false, additionalExecute?: (context: FrameGraphRenderContext) => void, diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/motionBlurTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/motionBlurTask.ts index 4b49d41a38c..6e733fab38e 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/motionBlurTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/motionBlurTask.ts @@ -30,6 +30,10 @@ export class FrameGraphMotionBlurTask extends FrameGraphPostProcessTask { super(name, frameGraph, thinPostProcess || new ThinMotionBlurPostProcess(name, frameGraph.scene)); } + public override getClassName(): string { + return "FrameGraphMotionBlurTask"; + } + public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass { if (this.sourceTexture === undefined) { throw new Error(`FrameGraphMotionBlurTask "${this.name}": sourceTexture is required`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/passTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/passTask.ts index dc712f2ea98..c0076b1b4a2 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/passTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/passTask.ts @@ -18,6 +18,10 @@ export class FrameGraphPassTask extends FrameGraphPostProcessTask { constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinPassPostProcess) { super(name, frameGraph, thinPostProcess || new ThinPassPostProcess(name, frameGraph.engine)); } + + public override getClassName(): string { + return "FrameGraphPassTask"; + } } /** @@ -35,4 +39,8 @@ export class FrameGraphPassCubeTask extends FrameGraphPostProcessTask { constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinPassCubePostProcess) { super(name, frameGraph, thinPostProcess || new ThinPassCubePostProcess(name, frameGraph.engine)); } + + public override getClassName(): string { + return "FrameGraphPassCubeTask"; + } } diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/postProcessTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/postProcessTask.ts index ccc993e474e..b75f12948f2 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/postProcessTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/postProcessTask.ts @@ -134,6 +134,10 @@ export class FrameGraphPostProcessTask extends FrameGraphTask { return this.postProcess.isReady(); } + public override getClassName(): string { + return "FrameGraphPostProcessTask"; + } + public record( skipCreationOfDisabledPasses = false, additionalExecute?: (context: FrameGraphRenderContext) => void, diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/screenSpaceCurvatureTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/screenSpaceCurvatureTask.ts index 56f9a347dfe..7eb4c49ba90 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/screenSpaceCurvatureTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/screenSpaceCurvatureTask.ts @@ -24,6 +24,10 @@ export class FrameGraphScreenSpaceCurvatureTask extends FrameGraphPostProcessTas super(name, frameGraph, thinPostProcess || new ThinScreenSpaceCurvaturePostProcess(name, frameGraph.engine)); } + public override getClassName(): string { + return "FrameGraphScreenSpaceCurvatureTask"; + } + public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass { if (this.sourceTexture === undefined || this.normalTexture === undefined) { throw new Error(`FrameGraphScreenSpaceCurvatureTask "${this.name}": sourceTexture and normalTexture are required`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/sharpenTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/sharpenTask.ts index 55c91f65748..ad335ff9160 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/sharpenTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/sharpenTask.ts @@ -18,6 +18,10 @@ export class FrameGraphSharpenTask extends FrameGraphPostProcessTask { super(name, frameGraph, thinPostProcess || new ThinSharpenPostProcess(name, frameGraph.engine)); } + public override getClassName(): string { + return "FrameGraphSharpenTask"; + } + public override record( skipCreationOfDisabledPasses = false, additionalExecute?: (context: FrameGraphRenderContext) => void, diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.ts index 479fdf38cee..295374db198 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.ts @@ -20,6 +20,10 @@ export class FrameGraphSSAO2BlurTask extends FrameGraphPostProcessTask { super(name, frameGraph, thinPostProcess || new ThinSSAO2BlurPostProcess(name, frameGraph.engine, _isHorizontal)); } + public override getClassName(): string { + return "FrameGraphSSAO2BlurTask"; + } + public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass { if (this.sourceTexture === undefined || this.depthTexture === undefined) { throw new Error(`FrameGraphSSAO2BlurTask "${this.name}": sourceTexture and depthTexture are required`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.ts index e3f8423ea80..9d81d4a96cb 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.ts @@ -137,6 +137,10 @@ export class FrameGraphSSAO2RenderingPipelineTask extends FrameGraphTask { return this.ssao.isReady(); } + public override getClassName(): string { + return "FrameGraphSSAO2RenderingPipelineTask"; + } + public record(): void { if (this.sourceTexture === undefined || this.depthTexture === undefined || this.normalTexture === undefined || this.camera === undefined) { throw new Error(`FrameGraphSSAO2RenderingPipelineTask "${this.name}": sourceTexture, depthTexture, normalTexture and camera are required`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssao2Task.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssao2Task.ts index 0b4e63352a3..b4f49795482 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssao2Task.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssao2Task.ts @@ -21,6 +21,10 @@ export class FrameGraphSSAO2Task extends FrameGraphPostProcessTask { super(name, frameGraph, thinPostProcess || new ThinSSAO2PostProcess(name, frameGraph.scene)); } + public override getClassName(): string { + return "FrameGraphSSAO2Task"; + } + public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass { if (this.sourceTexture === undefined || this.depthTexture === undefined || this.normalTexture === undefined || this.camera === undefined) { throw new Error(`FrameGraphSSAO2Task "${this.name}": sourceTexture, depthTexture, normalTexture and camera are required`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssrBlurTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssrBlurTask.ts index 94aa1f5f407..65b8e0615f1 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssrBlurTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssrBlurTask.ts @@ -13,6 +13,10 @@ export class FrameGraphSSRBlurTask extends FrameGraphPostProcessTask { super(name, frameGraph, thinPostProcess || new ThinSSRBlurPostProcess(name, frameGraph.engine, new Vector2(1, 0), 0.03)); } + public override getClassName(): string { + return "FrameGraphSSRBlurTask"; + } + public override record( skipCreationOfDisabledPasses = false, additionalExecute?: (context: FrameGraphRenderContext) => void, diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.ts index 53d13d0e9a3..f4445ac19e9 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.ts @@ -135,6 +135,10 @@ export class FrameGraphSSRRenderingPipelineTask extends FrameGraphTask { return this.ssr.isReady(); } + public override getClassName(): string { + return "FrameGraphSSRRenderingPipelineTask"; + } + public record(): void { if ( this.sourceTexture === undefined || diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssrTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssrTask.ts index e78a50d5f95..2f1e6c65005 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssrTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/ssrTask.ts @@ -23,6 +23,10 @@ export class FrameGraphSSRTask extends FrameGraphPostProcessTask { super(name, frameGraph, thinPostProcess || new ThinSSRPostProcess(name, frameGraph.scene)); } + public override getClassName(): string { + return "FrameGraphSSRTask"; + } + public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass { if ( this.sourceTexture === undefined || diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/taaTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/taaTask.ts index d404090c2cf..296d93023bb 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/taaTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/taaTask.ts @@ -42,6 +42,10 @@ export class FrameGraphTAATask extends FrameGraphPostProcessTask { super(name, frameGraph, thinPostProcess || new ThinTAAPostProcess(name, frameGraph.scene)); } + public override getClassName(): string { + return "FrameGraphTAATask"; + } + public override record(): FrameGraphRenderPass { if (this.sourceTexture === undefined || this.objectRendererTask === undefined) { throw new Error(`FrameGraphPostProcessTask "${this.name}": sourceTexture and objectRendererTask are required`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/tonemapTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/tonemapTask.ts index 48bf8748adb..e4628b6a791 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/tonemapTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/tonemapTask.ts @@ -17,4 +17,8 @@ export class FrameGraphTonemapTask extends FrameGraphPostProcessTask { constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinTonemapPostProcess) { super(name, frameGraph, thinPostProcess || new ThinTonemapPostProcess(name, frameGraph.engine)); } + + public override getClassName(): string { + return "FrameGraphTonemapTask"; + } } diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.ts index 4a9c8da2861..cd48ea49233 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.ts @@ -64,6 +64,10 @@ export class FrameGraphVolumetricLightingBlendVolumeTask extends FrameGraphPostP super(name, frameGraph, new VolumetricLightingBlendVolumeThinPostProcess(name, frameGraph.engine, enableExtinction)); } + public override getClassName(): string { + return "FrameGraphVolumetricLightingBlendVolumeTask"; + } + public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass { if (this.sourceTexture === undefined || this.depthTexture === undefined || this.camera === undefined) { throw new Error(`FrameGraphVolumetricLightingBlendVolumeTask "${this.name}": sourceTexture, depthTexture and camera are required`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.ts b/packages/dev/core/src/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.ts index 21efad9a0e5..158ff95477f 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.ts @@ -289,6 +289,10 @@ export class FrameGraphCascadedShadowGeneratorTask extends FrameGraphShadowGener shadowGenerator.shadowMaxZ = this._shadowMaxZ; } + public override getClassName(): string { + return "FrameGraphCascadedShadowGeneratorTask"; + } + public override record() { if (this.light === undefined || this.objectList === undefined || this.camera === undefined) { throw new Error(`FrameGraphCascadedShadowGeneratorTask ${this.name}: light, objectList and camera are required`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/Rendering/geometryRendererTask.ts b/packages/dev/core/src/FrameGraph/Tasks/Rendering/geometryRendererTask.ts index 2cd8fe30caf..cd36a922140 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/Rendering/geometryRendererTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/Rendering/geometryRendererTask.ts @@ -329,6 +329,10 @@ export class FrameGraphGeometryRendererTask extends FrameGraphTask { return this._renderer.isReadyForRendering(this._textureWidth, this._textureHeight); } + public override getClassName(): string { + return "FrameGraphGeometryRendererTask"; + } + public record() { if (this.objectList === undefined) { throw new Error(`FrameGraphGeometryRendererTask ${this.name}: object list must be provided`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/Rendering/objectRendererTask.ts b/packages/dev/core/src/FrameGraph/Tasks/Rendering/objectRendererTask.ts index de0e3e5f3f6..c4af77f9a12 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/Rendering/objectRendererTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/Rendering/objectRendererTask.ts @@ -275,6 +275,10 @@ export class FrameGraphObjectRendererTask extends FrameGraphTask { return this._renderer.isReadyForRendering(this._textureWidth, this._textureHeight); } + public override getClassName(): string { + return "FrameGraphObjectRendererTask"; + } + public record(skipCreationOfDisabledPasses = false, additionalExecute?: (context: FrameGraphRenderContext) => void): FrameGraphRenderPass { if (this.targetTexture === undefined || this.objectList === undefined) { throw new Error(`FrameGraphObjectRendererTask ${this.name}: targetTexture and objectList are required`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/Rendering/shadowGeneratorTask.ts b/packages/dev/core/src/FrameGraph/Tasks/Rendering/shadowGeneratorTask.ts index ea15fa1de55..8875ee47eea 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/Rendering/shadowGeneratorTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/Rendering/shadowGeneratorTask.ts @@ -301,6 +301,10 @@ export class FrameGraphShadowGeneratorTask extends FrameGraphTask { this.outputTexture = this._frameGraph.textureManager.createDanglingHandle(); } + public override getClassName(): string { + return "FrameGraphShadowGeneratorTask"; + } + public record() { if (this.light === undefined || this.objectList === undefined || this.camera === undefined) { throw new Error(`FrameGraphShadowGeneratorTask ${this.name}: light, objectList and camera are required`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.ts b/packages/dev/core/src/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.ts index ee2a06f4e0b..cecc35f457d 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.ts @@ -53,6 +53,10 @@ export class FrameGraphUtilityLayerRendererTask extends FrameGraphTask { this.outputTexture = this._frameGraph.textureManager.createDanglingHandle(); } + public override getClassName(): string { + return "FrameGraphUtilityLayerRendererTask"; + } + public record(): void { if (!this.targetTexture || !this.camera) { throw new Error(`FrameGraphUtilityLayerRendererTask "${this.name}": targetTexture and camera are required`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/Texture/clearTextureTask.ts b/packages/dev/core/src/FrameGraph/Tasks/Texture/clearTextureTask.ts index 4f82a8cc7bb..29a20603168 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/Texture/clearTextureTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/Texture/clearTextureTask.ts @@ -69,6 +69,10 @@ export class FrameGraphClearTextureTask extends FrameGraphTask { this.outputDepthTexture = this._frameGraph.textureManager.createDanglingHandle(); } + public override getClassName(): string { + return "FrameGraphClearTextureTask"; + } + public record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass { if (this.targetTexture === undefined && this.depthTexture === undefined) { throw new Error(`FrameGraphClearTextureTask ${this.name}: targetTexture and depthTexture can't both be undefined.`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/Texture/copyToBackbufferColorTask.ts b/packages/dev/core/src/FrameGraph/Tasks/Texture/copyToBackbufferColorTask.ts index a69acc9c79d..80c847f6cda 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/Texture/copyToBackbufferColorTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/Texture/copyToBackbufferColorTask.ts @@ -11,6 +11,10 @@ export class FrameGraphCopyToBackbufferColorTask extends FrameGraphTask { */ public sourceTexture: FrameGraphTextureHandle; + public override getClassName(): string { + return "FrameGraphCopyToBackbufferColorTask"; + } + public record() { if (this.sourceTexture === undefined) { throw new Error(`FrameGraphCopyToBackbufferColorTask "${this.name}": sourceTexture is required`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/Texture/copyToTextureTask.ts b/packages/dev/core/src/FrameGraph/Tasks/Texture/copyToTextureTask.ts index 476e9824b06..d8829d7caa0 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/Texture/copyToTextureTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/Texture/copyToTextureTask.ts @@ -44,6 +44,10 @@ export class FrameGraphCopyToTextureTask extends FrameGraphTask { this.outputTexture = this._frameGraph.textureManager.createDanglingHandle(); } + public override getClassName(): string { + return "FrameGraphCopyToTextureTask"; + } + public record() { if (this.sourceTexture === undefined || this.targetTexture === undefined) { throw new Error(`FrameGraphCopyToTextureTask "${this.name}": sourceTexture and targetTexture are required`); diff --git a/packages/dev/core/src/FrameGraph/Tasks/Texture/generateMipMapsTask.ts b/packages/dev/core/src/FrameGraph/Tasks/Texture/generateMipMapsTask.ts index c530d8dde8e..b1cd9573839 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/Texture/generateMipMapsTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/Texture/generateMipMapsTask.ts @@ -26,6 +26,10 @@ export class FrameGraphGenerateMipMapsTask extends FrameGraphTask { this.outputTexture = this._frameGraph.textureManager.createDanglingHandle(); } + public override getClassName(): string { + return "FrameGraphGenerateMipMapsTask"; + } + public record() { if (this.targetTexture === undefined) { throw new Error(`FrameGraphGenerateMipMapsTask ${this.name}: targetTexture is required`); diff --git a/packages/dev/core/src/FrameGraph/frameGraphTask.ts b/packages/dev/core/src/FrameGraph/frameGraphTask.ts index 655f02eea28..43563858d24 100644 --- a/packages/dev/core/src/FrameGraph/frameGraphTask.ts +++ b/packages/dev/core/src/FrameGraph/frameGraphTask.ts @@ -66,6 +66,14 @@ export abstract class FrameGraphTask { */ public abstract record(skipCreationOfDisabledPasses?: boolean): void; + /** + * Gets the current class name + * @returns the class name + */ + public getClassName(): string { + return "FrameGraphTask"; + } + /** * This function is called once after the task has been added to the frame graph and before the frame graph is built for the first time. * This allows you to initialize asynchronous resources, which is not possible in the constructor. diff --git a/packages/dev/gui/src/2D/FrameGraph/guiTask.ts b/packages/dev/gui/src/2D/FrameGraph/guiTask.ts index 5698f6fea2a..04e29363534 100644 --- a/packages/dev/gui/src/2D/FrameGraph/guiTask.ts +++ b/packages/dev/gui/src/2D/FrameGraph/guiTask.ts @@ -60,6 +60,10 @@ export class FrameGraphGUITask extends FrameGraphTask { return this._adt.guiIsReady() && this._adt._layerToDispose!.isReady(); } + public override getClassName(): string { + return "FrameGraphGUITask"; + } + public record(): void { if (this.targetTexture === undefined) { throw new Error("FrameGraphGUITask: targetTexture is required"); From ec44284931a2a146cd221988e4be3cf67da05c8f Mon Sep 17 00:00:00 2001 From: Popov72 Date: Thu, 4 Dec 2025 17:17:47 +0100 Subject: [PATCH 09/18] Support depth texture copy --- .../Tasks/Texture/copyToTextureTask.ts | 26 +++++++++++++++---- .../src/FrameGraph/frameGraphRenderContext.ts | 18 ++++++++++--- .../dev/core/src/FrameGraph/frameGraphTask.ts | 4 +++ 3 files changed, 39 insertions(+), 9 deletions(-) diff --git a/packages/dev/core/src/FrameGraph/Tasks/Texture/copyToTextureTask.ts b/packages/dev/core/src/FrameGraph/Tasks/Texture/copyToTextureTask.ts index d8829d7caa0..6891dc5f451 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/Texture/copyToTextureTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/Texture/copyToTextureTask.ts @@ -1,6 +1,7 @@ import type { FrameGraph, FrameGraphTextureHandle, IViewportLike, Nullable } from "core/index"; import { FrameGraphTask } from "../../frameGraphTask"; import { Constants } from "core/Engines/constants"; +import { IsDepthTexture } from "../../../Materials/Textures/textureHelper.functions"; /** * Task used to copy a texture to another texture. @@ -56,21 +57,36 @@ export class FrameGraphCopyToTextureTask extends FrameGraphTask { this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture); const pass = this._frameGraph.addRenderPass(this.name); + const passDisabled = this._frameGraph.addRenderPass(this.name + "_disabled", true); pass.addDependencies(this.sourceTexture); + passDisabled.addDependencies(this.sourceTexture); + + const textureDescription = this._frameGraph.textureManager.getTextureDescription(this.targetTexture); + const targetIsDepthTexture = IsDepthTexture(textureDescription.options.formats![0]); - pass.setRenderTarget(this.outputTexture); + if (targetIsDepthTexture) { + pass.setRenderTargetDepth(this.outputTexture); + passDisabled.setRenderTargetDepth(this.outputTexture); + } else { + pass.setRenderTarget(this.outputTexture); + passDisabled.setRenderTarget(this.outputTexture); + } pass.setExecuteFunc((context) => { if (this.viewport) { context.setViewport(this.viewport); } - context.setTextureSamplingMode(this.sourceTexture, this.lodLevel > 0 ? Constants.TEXTURE_TRILINEAR_SAMPLINGMODE : Constants.TEXTURE_BILINEAR_SAMPLINGMODE); + context.setTextureSamplingMode( + this.sourceTexture, + targetIsDepthTexture + ? Constants.TEXTURE_NEAREST_SAMPLINGMODE + : this.lodLevel > 0 + ? Constants.TEXTURE_TRILINEAR_SAMPLINGMODE + : Constants.TEXTURE_BILINEAR_SAMPLINGMODE + ); context.copyTexture(this.sourceTexture, undefined, this.viewport !== undefined, this.lodLevel); }); - const passDisabled = this._frameGraph.addRenderPass(this.name + "_disabled", true); - - passDisabled.setRenderTarget(this.outputTexture); passDisabled.setExecuteFunc((_context) => {}); } } diff --git a/packages/dev/core/src/FrameGraph/frameGraphRenderContext.ts b/packages/dev/core/src/FrameGraph/frameGraphRenderContext.ts index 20fefdbc4cf..993b2e70c1c 100644 --- a/packages/dev/core/src/FrameGraph/frameGraphRenderContext.ts +++ b/packages/dev/core/src/FrameGraph/frameGraphRenderContext.ts @@ -19,6 +19,7 @@ import { Constants } from "../Engines/constants"; import { EffectRenderer } from "../Materials/effectRenderer"; import { CopyTextureToTexture } from "../Misc/copyTextureToTexture"; import { FrameGraphContext } from "./frameGraphContext"; +import { IsDepthTexture } from "../Materials/Textures/textureHelper.functions"; const SamplingModeHasMipMapFiltering = [ false, // not used @@ -48,6 +49,7 @@ export class FrameGraphRenderContext extends FrameGraphContext { private _debugMessageHasBeenPushed = false; private _renderTargetIsBound = true; private readonly _copyTexture: CopyTextureToTexture; + private readonly _copyDepthTexture: CopyTextureToTexture; private static _IsObjectRenderer(value: Layer | ObjectRenderer | UtilityLayerRenderer): value is ObjectRenderer { return (value as ObjectRenderer).initRender !== undefined; @@ -62,6 +64,7 @@ export class FrameGraphRenderContext extends FrameGraphContext { indices: [0, 2, 1, 0, 3, 2], }); this._copyTexture = new CopyTextureToTexture(this._engine); + this._copyDepthTexture = new CopyTextureToTexture(this._engine, true); } /** @@ -250,6 +253,7 @@ export class FrameGraphRenderContext extends FrameGraphContext { this._applyRenderTarget(); const engineDepthMask = this._engine.getDepthWrite(); // for some reasons, depthWrite is not restored by EffectRenderer.restoreStates + const engineDepthFunc = this._engine.getDepthFunction(); const effectRenderer = drawBackFace ? this._effectRendererBack : this._effectRenderer; @@ -274,6 +278,9 @@ export class FrameGraphRenderContext extends FrameGraphContext { this._engine.setColorWrite(true); } this._engine.setDepthWrite(engineDepthMask); + if (engineDepthFunc) { + this._engine.setDepthFunction(engineDepthFunc); + } this._engine.setAlphaMode(Constants.ALPHA_DISABLE); return true; @@ -291,13 +298,16 @@ export class FrameGraphRenderContext extends FrameGraphContext { this.bindRenderTarget(); } - this._copyTexture.source = this._textureManager.getTextureFromHandle(sourceTexture, true)!; - this._copyTexture.lodLevel = lodLevel; + const texture = this._textureManager.getTextureFromHandle(sourceTexture, true)!; + const copyTexture = IsDepthTexture(texture.format) ? this._copyDepthTexture : this._copyTexture; + + copyTexture.source = texture; + copyTexture.lodLevel = lodLevel; this.applyFullScreenEffect( - this._copyTexture.effectWrapper.drawWrapper, + copyTexture.effectWrapper.drawWrapper, () => { - this._copyTexture.effectWrapper.onApplyObservable.notifyObservers({}); + copyTexture.effectWrapper.onApplyObservable.notifyObservers({}); }, undefined, undefined, diff --git a/packages/dev/core/src/FrameGraph/frameGraphTask.ts b/packages/dev/core/src/FrameGraph/frameGraphTask.ts index 43563858d24..cf26ee4cbbd 100644 --- a/packages/dev/core/src/FrameGraph/frameGraphTask.ts +++ b/packages/dev/core/src/FrameGraph/frameGraphTask.ts @@ -227,10 +227,14 @@ export abstract class FrameGraphTask { this.onBeforeTaskExecute.notifyObservers(this); + this._frameGraph.engine._debugPushGroup?.(`${this.getClassName()} (${this.name})`, 1); + for (const pass of passes) { pass._execute(); } + this._frameGraph.engine._debugPopGroup?.(1); + this.onAfterTaskExecute.notifyObservers(this); } From dda7b9996b1771e72d08f2da28a7d2dff7c12cbd Mon Sep 17 00:00:00 2001 From: Popov72 Date: Thu, 4 Dec 2025 17:18:56 +0100 Subject: [PATCH 10/18] Improve performance of lighting volume updates --- .../dev/core/src/Compute/computeEffect.ts | 6 +- .../dev/core/src/Compute/computeShader.ts | 10 +- .../dev/core/src/Lights/lightingVolume.ts | 365 +++++++++++------- ...volumetricLightingRenderVolume.fragment.fx | 3 +- .../src/ShadersWGSL/lightingVolume.compute.fx | 56 ++- ...volumetricLightingRenderVolume.fragment.fx | 3 +- 6 files changed, 301 insertions(+), 142 deletions(-) diff --git a/packages/dev/core/src/Compute/computeEffect.ts b/packages/dev/core/src/Compute/computeEffect.ts index eae5974fe4f..5bf69bf343c 100644 --- a/packages/dev/core/src/Compute/computeEffect.ts +++ b/packages/dev/core/src/Compute/computeEffect.ts @@ -422,7 +422,11 @@ export class ComputeEffect { this._checkIsReady(previousPipelineContext); } } catch (e) { - this._processCompilationErrors(e, previousPipelineContext); + let err = "" + e; + if (e instanceof Error && e.stack) { + err = e.stack; + } + this._processCompilationErrors(err, previousPipelineContext); } } diff --git a/packages/dev/core/src/Compute/computeShader.ts b/packages/dev/core/src/Compute/computeShader.ts index c836ecb9f99..e99a50d9b30 100644 --- a/packages/dev/core/src/Compute/computeShader.ts +++ b/packages/dev/core/src/Compute/computeShader.ts @@ -114,6 +114,11 @@ export class ComputeShader { */ public readonly gpuTimeInFrame?: WebGPUPerfCounter; + /** + * If set to true, the compute context will be rebuilt at the next dispatch even if in fast mode + */ + public triggerContextRebuild = false; + /** * Instantiates a new compute shader. * @param name Defines the name of the compute shader in the scene @@ -368,7 +373,7 @@ export class ComputeShader { * @returns True if the dispatch could be done, else false (meaning either the compute effect or at least one of the bound resources was not ready) */ public dispatch(x: number, y?: number, z?: number): boolean { - if (!this.fastMode && !this._checkContext()) { + if ((!this.fastMode || this.triggerContextRebuild) && !this._checkContext()) { return false; } this._engine.computeDispatch(this._effect, this._context, this._bindings, x, y, z, this._options.bindingsMapping, this.gpuTimeInFrame); @@ -383,7 +388,7 @@ export class ComputeShader { * @returns True if the dispatch could be done, else false (meaning either the compute effect or at least one of the bound resources was not ready) */ public dispatchIndirect(buffer: StorageBuffer | DataBuffer, offset: number = 0): boolean { - if (!this.fastMode && !this._checkContext()) { + if ((!this.fastMode || this.triggerContextRebuild) && !this._checkContext()) { return false; } const dataBuffer = ComputeShader._BufferIsDataBuffer(buffer) ? buffer : buffer.getBuffer(); @@ -440,6 +445,7 @@ export class ComputeShader { } if (this._contextIsDirty) { + this.triggerContextRebuild = false; this._contextIsDirty = false; this._context.clear(); } diff --git a/packages/dev/core/src/Lights/lightingVolume.ts b/packages/dev/core/src/Lights/lightingVolume.ts index 002ef801c5f..4dadd230e69 100644 --- a/packages/dev/core/src/Lights/lightingVolume.ts +++ b/packages/dev/core/src/Lights/lightingVolume.ts @@ -1,7 +1,7 @@ import type { AbstractEngine, Engine, Nullable, RenderTargetWrapper, Scene, ShadowGenerator, WebGPUEngine } from "core/index"; import { AbortError } from "core/Misc/error"; import { Constants } from "core/Engines/constants"; -import { Matrix, Vector3 } from "core/Maths/math.vector"; +import { Matrix, Vector3, TmpVectors } from "core/Maths/math.vector"; import { DirectionalLight } from "core/Lights/directionalLight"; import { Mesh } from "core/Meshes/mesh"; import { ComputeShader } from "core/Compute/computeShader"; @@ -13,7 +13,6 @@ import { VertexBuffer } from "core/Buffers/buffer"; import "core/ShadersWGSL/lightingVolume.compute"; -const InvViewProjMatrix = new Matrix(); const TmpVec3 = new Vector3(); /** @@ -28,6 +27,7 @@ export class LightingVolume { private readonly _buildFullVolume = true; private _name: string; private _cs?: ComputeShader; + private _cs2?: ComputeShader; private _light?: DirectionalLight; private _fallbackTexture?: BaseTexture; private _storageBuffer?: StorageBuffer; @@ -37,6 +37,9 @@ export class LightingVolume { private _numFrames = 0; private _firstUpdate = true; private _currentLightDirection = new Vector3(); + private _positions: Float32Array; + private _indices: number[]; + private _needFullUpdateUBO = true; private _shadowGenerator?: ShadowGenerator; /** @@ -56,15 +59,16 @@ export class LightingVolume { this._shadowGenerator = sg; this._light = light; - this._createGeometry(); + this._updateGeometry(); if (!this._engine.isWebGPU) { this._createFallbackTextures(); } const depthTexture = this._shadowGenerator.getShadowMap()?.depthStencilTexture; - if (this._cs && depthTexture) { - this._cs.setInternalTexture("shadowMap", depthTexture); + if (this._engine.isWebGPU && depthTexture) { + this._cs!.setInternalTexture("shadowMap", depthTexture); + this._cs2!.setInternalTexture("shadowMap", depthTexture); } } @@ -78,7 +82,7 @@ export class LightingVolume { public set tesselation(n: number) { this._tesselation = n; - this._createGeometry(true); + this._createGeometry(); } /** @@ -155,6 +159,7 @@ export class LightingVolume { this._name = name; this._shadowGenerator = shadowGenerator; this._light = light as DirectionalLight; + this._indices = []; this._engine = scene.getEngine(); this._scene = scene; @@ -166,9 +171,12 @@ export class LightingVolume { this._uBuffer = new UniformBuffer(this._engine); this._uBuffer.addUniform("invViewProjMatrix", 16); + this._uBuffer.addUniform("invViewMatrix", 16); this._uBuffer.addUniform("startVertexIndex", 1); this._uBuffer.addUniform("step", 1); this._uBuffer.addUniform("tesselation", 1); + this._uBuffer.addUniform("orthoMin", 3); + this._uBuffer.addUniform("orthoMax", 3); this._uBuffer.update(); this._createComputeShader(); @@ -178,7 +186,7 @@ export class LightingVolume { } this._tesselation = tesselation; - this._createGeometry(true); + this._createGeometry(); } /** @@ -190,6 +198,9 @@ export class LightingVolume { if (this._cs) { isReady = this._cs.isReady() && isReady; } + if (this._cs2) { + isReady = this._cs2.isReady() && isReady; + } return isReady; } @@ -208,19 +219,29 @@ export class LightingVolume { this._numFrames = 0; - if (this._cs && this._uBuffer) { - this._recreateGeometry(); + if (this._engine.isWebGPU) { + this._uBuffer!.updateMatrix("invViewProjMatrix", this._shadowGenerator.getTransformMatrix().invertToRef(TmpVectors.Matrix[0])); - const dispatchSize = Math.ceil((this._tesselation + 1) / 8); + this._engine._debugPushGroup?.(`Update lighting volume (${this._name})`, 1); - const viewProjMatrix = this._shadowGenerator.getTransformMatrix(); - viewProjMatrix.invertToRef(InvViewProjMatrix); + if (this._needUpdateGeometry()) { + this._fullUpdateUBO(true); - this._uBuffer.updateMatrix("invViewProjMatrix", InvViewProjMatrix); - this._uBuffer.update(); + const dispatchSize = Math.ceil((this._tesselation + 1) / 32); + + this._engine._debugPushGroup?.(`Update vertices of other planes`, 1); + this._cs2!.dispatch(dispatchSize, 1, 1); + this._engine._debugPopGroup?.(1); + } else { + this._fullUpdateUBO(); + } + + const dispatchSize = Math.ceil((this._tesselation + 1) / 8); + + this._engine._debugPushGroup?.(`Update vertices of far plane`, 1); + this._cs!.dispatch(dispatchSize, dispatchSize, 1); + this._engine._debugPopGroup?.(1); - this._engine._debugPushGroup?.(`Update lighting volume (${this._name})`, 1); - this._cs.dispatch(dispatchSize, dispatchSize, 1); this._engine._debugPopGroup?.(1); this._firstUpdate = false; @@ -250,35 +271,50 @@ export class LightingVolume { this._depthCopy?.dispose(); } - private _recreateGeometry() { - if (this._light && !this._currentLightDirection.equals(this._light.direction)) { - this._currentLightDirection.copyFrom(this._light.direction); - this._createGeometry(); + private _needUpdateGeometry() { + if (this._cs?.triggerContextRebuild || (this._light && !this._currentLightDirection.equals(this._light.direction))) { + this._currentLightDirection.copyFrom(this._light!.direction); + return true; } + + return false; } private _createComputeShader() { - this._cs = new ComputeShader("createLightVolume", this._engine, "lightingVolume", { + this._cs = new ComputeShader("updateFarPlaneVertices", this._engine, "lightingVolume", { bindingsMapping: { shadowMap: { group: 0, binding: 0 }, params: { group: 0, binding: 1 }, positions: { group: 0, binding: 2 }, }, defines: !this._buildFullVolume ? ["#define KEEP_EDGES", "#define MOVE_FAR_DEPTH_TO_NEAR"] : undefined, + entryPoint: "updateFarPlaneVertices", + }); + + this._cs2 = new ComputeShader("updatePlaneVertices", this._engine, "lightingVolume", { + bindingsMapping: { + shadowMap: { group: 0, binding: 0 }, + params: { group: 0, binding: 1 }, + positions: { group: 0, binding: 2 }, + }, + entryPoint: "updatePlaneVertices", }); if (this._shadowGenerator) { const depthTexture = this._shadowGenerator.getShadowMap()?.depthStencilTexture; if (depthTexture) { this._cs.setInternalTexture("shadowMap", depthTexture); + this._cs2.setInternalTexture("shadowMap", depthTexture); } } if (this._uBuffer) { this._cs.setUniformBuffer("params", this._uBuffer); + this._cs2.setUniformBuffer("params", this._uBuffer); } if (this._storageBuffer) { this._cs.setStorageBuffer("positions", this._storageBuffer); + this._cs2.setStorageBuffer("positions", this._storageBuffer); } } @@ -365,7 +401,9 @@ export class LightingVolume { const factor = 4; - this._recreateGeometry(); + if (this._needUpdateGeometry()) { + this._updateGeometry(); + } let posIndex = startPos; let stepY = 0; @@ -400,191 +438,252 @@ export class LightingVolume { this._firstUpdate = false; } - private _createGeometry(_recreateAll = false) { - if (!this._light) { + private _fullUpdateUBO(force = false) { + const light = this._light; + + if ((!force && !this._needFullUpdateUBO) || !light || !this._shadowGenerator) { + this._uBuffer!.update(); return; } - this._tesselation = Math.max(Math.ceil(this._tesselation) & ~1, 2); + this._needFullUpdateUBO = false; + + const numTesselation = this._tesselation; + const min = TmpVectors.Vector3[0].set(light.orthoLeft, light.orthoBottom, light.shadowMinZ ?? Constants.ShadowMinZ); + const max = TmpVectors.Vector3[1].set(light.orthoRight, light.orthoTop, light.shadowMaxZ ?? Constants.ShadowMaxZ); + + const invViewMatrix = this._shadowGenerator.viewMatrix.invertToRef(TmpVectors.Matrix[1]); + + this._uBuffer!.updateUInt("startVertexIndex", this._buildFullVolume ? (numTesselation + 1) * 4 * 3 : 4 * 3); + this._uBuffer!.updateFloat("step", ((this._shadowGenerator?.mapSize ?? 128) - 1) / numTesselation); + this._uBuffer!.updateUInt("tesselation", numTesselation); + this._uBuffer!.updateVector3("orthoMin", min); + this._uBuffer!.updateVector3("orthoMax", max); + this._uBuffer!.updateMatrix("invViewMatrix", invViewMatrix); + this._uBuffer!.update(); + } + private _createGeometry() { const light = this._light; - const min = new Vector3(light.orthoLeft, light.orthoBottom, light.shadowMinZ ?? Constants.ShadowMinZ); - const max = new Vector3(light.orthoRight, light.orthoTop, light.shadowMaxZ ?? Constants.ShadowMaxZ); + if (!light) { + return; + } - const invViewMatrix = Matrix.LookAtLH(light.position, light.position.add(light.direction), Vector3.UpReadOnly); - invViewMatrix.invertToRef(invViewMatrix); + this._tesselation = Math.max(Math.ceil(this._tesselation) & ~1, 2); + + const numTesselation = this._tesselation; + const vertexNumber = (numTesselation + 1) * (numTesselation + 1) + (this._buildFullVolume ? (numTesselation + 1) * 4 : 4); + + this._positions = new Float32Array(vertexNumber * 3); + this._indices.length = 0; + + this._createIndices(light); + + this._mesh.setIndices(this._indices, vertexNumber); + + if (this._engine.isWebGPU) { + const webGPUEngine = this._engine as WebGPUEngine; + + this._storageBuffer?.dispose(); + this._storageBuffer = new StorageBuffer(webGPUEngine, vertexNumber * 3 * 4, Constants.BUFFER_CREATIONFLAG_VERTEX | Constants.BUFFER_CREATIONFLAG_READWRITE); - const positions: number[] = []; - const indices: number[] = []; + this._mesh.setVerticesBuffer(new VertexBuffer(webGPUEngine, this._storageBuffer.getBuffer(), "position", { takeBufferOwnership: false }), true, vertexNumber); + + this._cs!.setStorageBuffer("positions", this._storageBuffer); + this._cs2!.setStorageBuffer("positions", this._storageBuffer); + + this._cs!.triggerContextRebuild = true; + this._cs2!.triggerContextRebuild = true; + + this._needFullUpdateUBO = true; + } + + this._updateGeometry(); + } + + private _updateGeometry() { + const light = this._light; + + if (!light || !this._shadowGenerator || this._engine.isWebGPU) { + return; + } + + if (this._indices.length === 0) { + this._createGeometry(); + return; + } const numTesselation = this._tesselation; + + const min = TmpVectors.Vector3[0].set(light.orthoLeft, light.orthoBottom, light.shadowMinZ ?? Constants.ShadowMinZ); + const max = TmpVectors.Vector3[1].set(light.orthoRight, light.orthoTop, light.shadowMaxZ ?? Constants.ShadowMaxZ); + + const invViewMatrix = this._shadowGenerator.viewMatrix.invertToRef(TmpVectors.Matrix[1]); + const stepX = (max.x - min.x) / numTesselation; const stepY = (max.y - min.y) / numTesselation; - const v = new Vector3(); - const startFarIndices = this._buildFullVolume ? (numTesselation + 1) * 4 : 4; + let vIndex = 0; if (this._buildFullVolume) { - let startIndices = 0; + // Right faces of the frustum + for (let i = 0; i <= numTesselation; ++i) { + TmpVec3.set(max.x, min.y + i * stepY, min.z); + Vector3.TransformCoordinatesToRef(TmpVec3, invViewMatrix, TmpVec3); + this._positions[vIndex++] = TmpVec3.x; + this._positions[vIndex++] = TmpVec3.y; + this._positions[vIndex++] = TmpVec3.z; + } - const rightFaceStartIndex = startIndices; + // Left faces of the frustum + for (let i = 0; i <= numTesselation; ++i) { + TmpVec3.set(min.x, min.y + i * stepY, min.z); + Vector3.TransformCoordinatesToRef(TmpVec3, invViewMatrix, TmpVec3); + this._positions[vIndex++] = TmpVec3.x; + this._positions[vIndex++] = TmpVec3.y; + this._positions[vIndex++] = TmpVec3.z; + } - // Right faces of the frustum + // Bottom faces of the frustum for (let i = 0; i <= numTesselation; ++i) { - v.set(max.x, min.y + i * stepY, min.z); + TmpVec3.set(min.x + i * stepX, min.y, min.z); + Vector3.TransformCoordinatesToRef(TmpVec3, invViewMatrix, TmpVec3); + this._positions[vIndex++] = TmpVec3.x; + this._positions[vIndex++] = TmpVec3.y; + this._positions[vIndex++] = TmpVec3.z; + } - const p = Vector3.TransformCoordinates(v, invViewMatrix); - positions.push(p.x, p.y, p.z); + // Top faces of the frustum + for (let i = 0; i <= numTesselation; ++i) { + TmpVec3.set(min.x + i * stepX, max.y, min.z); + Vector3.TransformCoordinatesToRef(TmpVec3, invViewMatrix, TmpVec3); + this._positions[vIndex++] = TmpVec3.x; + this._positions[vIndex++] = TmpVec3.y; + this._positions[vIndex++] = TmpVec3.z; + } + } else { + // Closes the volume with two near triangles + TmpVec3.set(max.x, min.y, min.z); + Vector3.TransformCoordinatesToRef(TmpVec3, invViewMatrix, TmpVec3); + this._positions[vIndex++] = TmpVec3.x; + this._positions[vIndex++] = TmpVec3.y; + this._positions[vIndex++] = TmpVec3.z; + + TmpVec3.set(max.x, max.y, min.z); + Vector3.TransformCoordinatesToRef(TmpVec3, invViewMatrix, TmpVec3); + this._positions[vIndex++] = TmpVec3.x; + this._positions[vIndex++] = TmpVec3.y; + this._positions[vIndex++] = TmpVec3.z; + + TmpVec3.set(min.x, min.y, min.z); + Vector3.TransformCoordinatesToRef(TmpVec3, invViewMatrix, TmpVec3); + this._positions[vIndex++] = TmpVec3.x; + this._positions[vIndex++] = TmpVec3.y; + this._positions[vIndex++] = TmpVec3.z; + + TmpVec3.set(min.x, max.y, min.z); + Vector3.TransformCoordinatesToRef(TmpVec3, invViewMatrix, TmpVec3); + this._positions[vIndex++] = TmpVec3.x; + this._positions[vIndex++] = TmpVec3.y; + this._positions[vIndex++] = TmpVec3.z; + } + + this._mesh.setVerticesData("position", this._positions); + } + private _createIndices(light: DirectionalLight) { + const invViewMatrix = Matrix.LookAtLH(light.position, light.position.add(light.direction), Vector3.UpReadOnly); + invViewMatrix.invertToRef(invViewMatrix); + + const numTesselation = this._tesselation; + + const startFarIndices = this._buildFullVolume ? (numTesselation + 1) * 4 : 4; + + if (this._buildFullVolume) { + const rightFaceStartIndex = 0; + + // Right faces of the frustum + for (let i = 0; i <= numTesselation; ++i) { if (i < numTesselation) { - indices.push(startIndices + i, startFarIndices + numTesselation + (i + 1) * (numTesselation + 1), startFarIndices + numTesselation + i * (numTesselation + 1)); - indices.push(startIndices + i, startIndices + i + 1, startFarIndices + numTesselation + (i + 1) * (numTesselation + 1)); + this._indices.push( + rightFaceStartIndex + i, + startFarIndices + numTesselation + (i + 1) * (numTesselation + 1), + startFarIndices + numTesselation + i * (numTesselation + 1) + ); + this._indices.push(rightFaceStartIndex + i, rightFaceStartIndex + i + 1, startFarIndices + numTesselation + (i + 1) * (numTesselation + 1)); } } - startIndices = positions.length / 3; - - const leftFaceStartIndex = startIndices; + const leftFaceStartIndex = rightFaceStartIndex + numTesselation + 1; // Left faces of the frustum for (let i = 0; i <= numTesselation; ++i) { - v.set(min.x, min.y + i * stepY, min.z); - - const p = Vector3.TransformCoordinates(v, invViewMatrix); - positions.push(p.x, p.y, p.z); - if (i < numTesselation) { - indices.push(startIndices + i, startFarIndices + 0 + i * (numTesselation + 1), startFarIndices + 0 + (i + 1) * (numTesselation + 1)); - indices.push(startIndices + i, startFarIndices + 0 + (i + 1) * (numTesselation + 1), startIndices + i + 1); + this._indices.push(leftFaceStartIndex + i, startFarIndices + 0 + i * (numTesselation + 1), startFarIndices + 0 + (i + 1) * (numTesselation + 1)); + this._indices.push(leftFaceStartIndex + i, startFarIndices + 0 + (i + 1) * (numTesselation + 1), leftFaceStartIndex + i + 1); } } - startIndices = positions.length / 3; - - const bottomFaceStartIndex = startIndices; + const bottomFaceStartIndex = leftFaceStartIndex + numTesselation + 1; // Bottom faces of the frustum for (let i = 0; i <= numTesselation; ++i) { - v.set(min.x + i * stepX, min.y, min.z); - - const p = Vector3.TransformCoordinates(v, invViewMatrix); - positions.push(p.x, p.y, p.z); - if (i < numTesselation) { - indices.push(startIndices + i, startIndices + i + 1, startFarIndices + i + 0 * (numTesselation + 1)); - indices.push(startIndices + i + 1, startFarIndices + i + 1 + 0 * (numTesselation + 1), startFarIndices + i + 0 * (numTesselation + 1)); + this._indices.push(bottomFaceStartIndex + i, bottomFaceStartIndex + i + 1, startFarIndices + i + 0 * (numTesselation + 1)); + this._indices.push(bottomFaceStartIndex + i + 1, startFarIndices + i + 1 + 0 * (numTesselation + 1), startFarIndices + i + 0 * (numTesselation + 1)); } } - startIndices = positions.length / 3; - - const topFaceStartIndex = startIndices; + const topFaceStartIndex = bottomFaceStartIndex + numTesselation + 1; // Top faces of the frustum for (let i = 0; i <= numTesselation; ++i) { - v.set(min.x + i * stepX, max.y, min.z); - - const p = Vector3.TransformCoordinates(v, invViewMatrix); - positions.push(p.x, p.y, p.z); - if (i < numTesselation) { - indices.push(startIndices + i, startFarIndices + i + numTesselation * (numTesselation + 1), startIndices + i + 1); - indices.push( - startIndices + i + 1, + this._indices.push(topFaceStartIndex + i, startFarIndices + i + numTesselation * (numTesselation + 1), topFaceStartIndex + i + 1); + this._indices.push( + topFaceStartIndex + i + 1, startFarIndices + i + numTesselation * (numTesselation + 1), startFarIndices + i + 1 + numTesselation * (numTesselation + 1) ); } } - startIndices = positions.length / 3; - // Near faces of the frustum for (let i = 0; i < numTesselation; ++i) { - indices.push(leftFaceStartIndex + i, leftFaceStartIndex + i + 1, topFaceStartIndex + numTesselation - i); + this._indices.push(leftFaceStartIndex + i, leftFaceStartIndex + i + 1, topFaceStartIndex + numTesselation - i); if (i < numTesselation - 1) { - indices.push(leftFaceStartIndex + i + 1, topFaceStartIndex + numTesselation - i - 1, topFaceStartIndex + numTesselation - i); + this._indices.push(leftFaceStartIndex + i + 1, topFaceStartIndex + numTesselation - i - 1, topFaceStartIndex + numTesselation - i); } } for (let i = 0; i < numTesselation; ++i) { - indices.push(bottomFaceStartIndex + i, rightFaceStartIndex + numTesselation - i, rightFaceStartIndex + numTesselation - i - 1); + this._indices.push(bottomFaceStartIndex + i, rightFaceStartIndex + numTesselation - i, rightFaceStartIndex + numTesselation - i - 1); if (i < numTesselation - 1) { - indices.push(bottomFaceStartIndex + i, rightFaceStartIndex + numTesselation - i - 1, bottomFaceStartIndex + i + 1); + this._indices.push(bottomFaceStartIndex + i, rightFaceStartIndex + numTesselation - i - 1, bottomFaceStartIndex + i + 1); } } } else { - let p: Vector3; - - v.set(max.x, min.y, min.z); - p = Vector3.TransformCoordinates(v, invViewMatrix); - positions.push(p.x, p.y, p.z); - - v.set(max.x, max.y, min.z); - p = Vector3.TransformCoordinates(v, invViewMatrix); - positions.push(p.x, p.y, p.z); - - v.set(min.x, min.y, min.z); - p = Vector3.TransformCoordinates(v, invViewMatrix); - positions.push(p.x, p.y, p.z); - - v.set(min.x, max.y, min.z); - p = Vector3.TransformCoordinates(v, invViewMatrix); - positions.push(p.x, p.y, p.z); - - indices.push(0, 2, 1); - indices.push(2, 3, 1); + this._indices.push(0, 2, 1); + this._indices.push(2, 3, 1); } - // Tesselate the near plane - let y = min.y; + // Tesselate the far plane for (let iy = 0; iy <= numTesselation; ++iy) { - let x = min.x; for (let ix = 0; ix <= numTesselation; ++ix) { - v.set(x, y, min.z); - - const p = Vector3.TransformCoordinates(v, invViewMatrix); - positions.push(p.x, p.y, p.z); - if (ix < numTesselation && iy < numTesselation) { - indices.push( + this._indices.push( startFarIndices + ix + iy * (numTesselation + 1), startFarIndices + ix + 1 + iy * (numTesselation + 1), startFarIndices + ix + 1 + (iy + 1) * (numTesselation + 1) ); - indices.push( + this._indices.push( startFarIndices + ix + iy * (numTesselation + 1), startFarIndices + ix + 1 + (iy + 1) * (numTesselation + 1), startFarIndices + ix + (iy + 1) * (numTesselation + 1) ); } - x += stepX; } - y += stepY; } - - if (this._uBuffer && this._cs) { - const webGPUEngine = this._engine as WebGPUEngine; - - this._storageBuffer?.dispose(); - this._storageBuffer = new StorageBuffer(webGPUEngine, positions.length * 4, Constants.BUFFER_CREATIONFLAG_VERTEX | Constants.BUFFER_CREATIONFLAG_READWRITE); - - this._storageBuffer.update(positions); - - const vertexBuffer = new VertexBuffer(webGPUEngine, this._storageBuffer.getBuffer(), "position", { takeBufferOwnership: false }); - - this._mesh.setVerticesBuffer(vertexBuffer); - - this._cs.setStorageBuffer("positions", this._storageBuffer); - - this._uBuffer.updateUInt("startVertexIndex", this._buildFullVolume ? (numTesselation + 1) * 4 * 3 : 4 * 3); - this._uBuffer.updateFloat("step", ((this._shadowGenerator?.mapSize ?? 128) - 1) / numTesselation); - this._uBuffer.updateUInt("tesselation", numTesselation); - } else { - this._mesh.setVerticesData("position", positions); - } - - this._mesh.setIndices(indices, positions.length / 3); } } diff --git a/packages/dev/core/src/Shaders/volumetricLightingRenderVolume.fragment.fx b/packages/dev/core/src/Shaders/volumetricLightingRenderVolume.fragment.fx index 95cc9a61561..b4c21d0daf7 100644 --- a/packages/dev/core/src/Shaders/volumetricLightingRenderVolume.fragment.fx +++ b/packages/dev/core/src/Shaders/volumetricLightingRenderVolume.fragment.fx @@ -5,6 +5,7 @@ uniform vec3 lightDir; // must be normalized uniform vec2 outputTextureSize; uniform vec4 extinctionPhaseG; uniform vec3 lightPower; +uniform vec2 textureRatio; uniform sampler2D depthTexture; @@ -26,7 +27,7 @@ vec3 integrateDirectional(float eyeDist, vec3 viewDir, vec3 lightDir) { } void main(void) { - float depth = texelFetch(depthTexture, ivec2(gl_FragCoord.xy), 0).r; + float depth = texelFetch(depthTexture, ivec2(gl_FragCoord.xy * textureRatio), 0).r; vec4 worldPos = vWorldPos; if (gl_FragCoord.z > depth) { diff --git a/packages/dev/core/src/ShadersWGSL/lightingVolume.compute.fx b/packages/dev/core/src/ShadersWGSL/lightingVolume.compute.fx index d3aa31c9277..be4a1ae4108 100644 --- a/packages/dev/core/src/ShadersWGSL/lightingVolume.compute.fx +++ b/packages/dev/core/src/ShadersWGSL/lightingVolume.compute.fx @@ -1,8 +1,11 @@ struct Params { - invViewProjMatrix : mat4x4f, + invViewProjMatrix: mat4x4f, + invViewMatrix: mat4x4f, startVertexIndex: u32, step: f32, tesselation: u32, + orthoMin: vec3f, + orthoMax: vec3f, }; @group(0) @binding(0) var shadowMap : texture_2d; @@ -10,14 +13,13 @@ struct Params { @group(0) @binding(2) var positions : array; @compute @workgroup_size(8, 8, 1) - -fn main(@builtin(global_invocation_id) global_id : vec3u) { +fn updateFarPlaneVertices(@builtin(global_invocation_id) global_id : vec3u) { let coord = global_id.xy; #ifdef KEEP_EDGES if (any(coord >= vec2u(params.tesselation)) || any(coord <= vec2u(0))) { #else - if (any(coord >= vec2u(params.tesselation + 1))) { + if (any(coord > vec2u(params.tesselation))) { #endif return; } @@ -44,3 +46,49 @@ fn main(@builtin(global_invocation_id) global_id : vec3u) { positions[idx + 1] = worldCoords.y / worldCoords.w; positions[idx + 2] = worldCoords.z / worldCoords.w; } + +@compute @workgroup_size(32, 1, 1) +fn updatePlaneVertices(@builtin(global_invocation_id) global_id : vec3u) { + _ = shadowMap; + + let uindex = global_id.x; + let index = f32(uindex); + + if (uindex > params.tesselation) { + return; + } + + let step = (params.orthoMax.xy - params.orthoMin.xy) / vec2f(f32(params.tesselation)); + + // Right face + var vr = params.invViewMatrix * vec4f(params.orthoMax.x, params.orthoMin.y + step.y * index, params.orthoMin.z, 1.0); + vr = vr / vr.w; + + positions[uindex * 3 + 0] = vr.x; + positions[uindex * 3 + 1] = vr.y; + positions[uindex * 3 + 2] = vr.z; + + // Left face + var vl = params.invViewMatrix * vec4f(params.orthoMin.x, params.orthoMin.y + step.y * index, params.orthoMin.z, 1.0); + vl = vl / vl.w; + + positions[uindex * 3 + 0 + (params.tesselation + 1) * 3] = vl.x; + positions[uindex * 3 + 1 + (params.tesselation + 1) * 3] = vl.y; + positions[uindex * 3 + 2 + (params.tesselation + 1) * 3] = vl.z; + + // Bottom face + var vb = params.invViewMatrix * vec4f(params.orthoMin.x + step.x * index, params.orthoMin.y, params.orthoMin.z, 1.0); + vb = vb / vb.w; + + positions[uindex * 3 + 0 + (params.tesselation + 1) * 6] = vb.x; + positions[uindex * 3 + 1 + (params.tesselation + 1) * 6] = vb.y; + positions[uindex * 3 + 2 + (params.tesselation + 1) * 6] = vb.z; + + // Top face + var vt = params.invViewMatrix * vec4f(params.orthoMin.x + step.x * index, params.orthoMax.y, params.orthoMin.z, 1.0); + vt = vt / vt.w; + + positions[uindex * 3 + 0 + (params.tesselation + 1) * 9] = vt.x; + positions[uindex * 3 + 1 + (params.tesselation + 1) * 9] = vt.y; + positions[uindex * 3 + 2 + (params.tesselation + 1) * 9] = vt.z; +} diff --git a/packages/dev/core/src/ShadersWGSL/volumetricLightingRenderVolume.fragment.fx b/packages/dev/core/src/ShadersWGSL/volumetricLightingRenderVolume.fragment.fx index c3dd913b47e..22d0af8346a 100644 --- a/packages/dev/core/src/ShadersWGSL/volumetricLightingRenderVolume.fragment.fx +++ b/packages/dev/core/src/ShadersWGSL/volumetricLightingRenderVolume.fragment.fx @@ -6,6 +6,7 @@ uniform lightDir: vec3f; // must be normalized uniform outputTextureSize: vec2f; uniform extinctionPhaseG: vec4f; uniform lightPower: vec3f; +uniform textureRatio: vec2f; var depthTexture: texture_2d; @@ -28,7 +29,7 @@ fn integrateDirectional(eyeDist: f32, viewDir: vec3f, lightDir: vec3f) -> vec3f @fragment fn main(input: FragmentInputs) -> FragmentOutputs { - var depth = textureLoad(depthTexture, vec2u(fragmentInputs.position.xy), 0).r; + let depth = textureLoad(depthTexture, vec2u(fragmentInputs.position.xy * uniforms.textureRatio), 0).r; var worldPos = fragmentInputs.vWorldPos; From ca9c6830c7a2b80f482764054a6f9f922a76f048 Mon Sep 17 00:00:00 2001 From: Popov72 Date: Thu, 4 Dec 2025 17:20:05 +0100 Subject: [PATCH 11/18] Allow totalVertices to be passed to the Geometry constructor --- packages/dev/core/src/Meshes/geometry.ts | 9 +++++++-- packages/dev/core/src/Meshes/mesh.ts | 7 ++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/dev/core/src/Meshes/geometry.ts b/packages/dev/core/src/Meshes/geometry.ts index ff86691f69d..6ba032938b0 100644 --- a/packages/dev/core/src/Meshes/geometry.ts +++ b/packages/dev/core/src/Meshes/geometry.ts @@ -142,8 +142,9 @@ export class Geometry implements IGetSetVerticesData { * @param vertexData defines the VertexData used to get geometry data * @param updatable defines if geometry must be updatable (false by default) * @param mesh defines the mesh that will be associated with the geometry + * @param totalVertices defines the total number of vertices (optional) */ - constructor(id: string, scene?: Scene, vertexData?: VertexData, updatable: boolean = false, mesh: Nullable = null) { + constructor(id: string, scene?: Scene, vertexData?: VertexData, updatable: boolean = false, mesh: Nullable = null, totalVertices: Nullable = null) { this._scene = scene || EngineStore.LastCreatedScene; if (!this._scene) { return; @@ -157,10 +158,14 @@ export class Geometry implements IGetSetVerticesData { this._indices = []; this._updatable = updatable; + if (totalVertices !== null) { + this._totalVertices = totalVertices; + } + // vertexData if (vertexData) { this.setAllVerticesData(vertexData, updatable); - } else { + } else if (totalVertices === null) { this._totalVertices = 0; } diff --git a/packages/dev/core/src/Meshes/mesh.ts b/packages/dev/core/src/Meshes/mesh.ts index d3889543c72..bc397627494 100644 --- a/packages/dev/core/src/Meshes/mesh.ts +++ b/packages/dev/core/src/Meshes/mesh.ts @@ -1786,14 +1786,15 @@ export class Mesh extends AbstractMesh implements IGetSetVerticesData { * Sets the mesh global Vertex Buffer * @param buffer defines the buffer to use * @param disposeExistingBuffer disposes the existing buffer, if any (default: true) + * @param totalVertices defines the total number of vertices for position kind (could be null) * @returns the current mesh */ - public setVerticesBuffer(buffer: VertexBuffer, disposeExistingBuffer = true): Mesh { + public setVerticesBuffer(buffer: VertexBuffer, disposeExistingBuffer = true, totalVertices: Nullable = null): Mesh { if (!this._geometry) { this._geometry = Geometry.CreateGeometryForMesh(this); } - this._geometry.setVerticesBuffer(buffer, null, disposeExistingBuffer); + this._geometry.setVerticesBuffer(buffer, totalVertices, disposeExistingBuffer); return this; } @@ -1910,7 +1911,7 @@ export class Mesh extends AbstractMesh implements IGetSetVerticesData { const scene = this.getScene(); - new Geometry(Geometry.RandomId(), scene, vertexData, updatable, this); + new Geometry(Geometry.RandomId(), scene, vertexData, updatable, this, totalVertices); } else { this._geometry.setIndices(indices, totalVertices, updatable, dontForceSubMeshRecreation); } From ad8d205881ec424061e934c190a5e18ba90b0a62 Mon Sep 17 00:00:00 2001 From: Popov72 Date: Thu, 4 Dec 2025 17:20:21 +0100 Subject: [PATCH 12/18] Improve backward compatibility --- packages/dev/core/src/States/alphaCullingState.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/dev/core/src/States/alphaCullingState.ts b/packages/dev/core/src/States/alphaCullingState.ts index ee149f8cbe2..d2142eaa2d0 100644 --- a/packages/dev/core/src/States/alphaCullingState.ts +++ b/packages/dev/core/src/States/alphaCullingState.ts @@ -33,6 +33,10 @@ export class AlphaState { return this._numTargetEnabled > 0; } + public set alphaBlend(value: boolean) { + this.setAlphaBlend(value); + } + public setAlphaBlend(value: boolean, targetIndex: number = 0): void { if (this._alphaBlend[targetIndex] === value) { return; From 243d557717b860a97c334d8853c19c902e6349c7 Mon Sep 17 00:00:00 2001 From: Popov72 Date: Thu, 4 Dec 2025 17:28:07 +0100 Subject: [PATCH 13/18] Fix usage of copyDepthTexture --- packages/dev/core/src/FrameGraph/frameGraphRenderContext.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/dev/core/src/FrameGraph/frameGraphRenderContext.ts b/packages/dev/core/src/FrameGraph/frameGraphRenderContext.ts index 993b2e70c1c..991c4943748 100644 --- a/packages/dev/core/src/FrameGraph/frameGraphRenderContext.ts +++ b/packages/dev/core/src/FrameGraph/frameGraphRenderContext.ts @@ -417,7 +417,7 @@ export class FrameGraphRenderContext extends FrameGraphContext { /** @internal */ public _isReady(): boolean { - return this._copyTexture.isReady(); + return this._copyTexture.isReady() && this._copyDepthTexture.isReady(); } /** @internal */ @@ -425,5 +425,6 @@ export class FrameGraphRenderContext extends FrameGraphContext { this._effectRenderer.dispose(); this._effectRendererBack.dispose(); this._copyTexture.dispose(); + this._copyDepthTexture.dispose(); } } From e5f9cf0e20e932cf7828cc6a1f572d26dcf38ce1 Mon Sep 17 00:00:00 2001 From: Popov72 Date: Thu, 4 Dec 2025 19:27:47 +0100 Subject: [PATCH 14/18] Fix crash in WebGPU --- .../Tasks/PostProcesses/volumetricLightingTask.ts | 3 ++- packages/dev/core/src/Lights/lightingVolume.ts | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts index 09b1cb26d6a..8a5a1192685 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts @@ -84,6 +84,7 @@ export class FrameGraphVolumetricLightingTask extends FrameGraphTask { /** * The extinction coefficient for the volumetric lighting effect (default: (0, 0, 0) - no extinction). * This parameter controls how much light is absorbed and scattered as it travels through the medium. + * Will only have an effect if enableExtinction is set to true in the constructor! */ public get extinction() { return this._blendLightingVolumeTask.postProcess.extinction; @@ -133,7 +134,7 @@ export class FrameGraphVolumetricLightingTask extends FrameGraphTask { } /** - * The output texture of the task. + * The output texture of the task. It will be the same as targetTexture. */ public readonly outputTexture: FrameGraphTextureHandle; diff --git a/packages/dev/core/src/Lights/lightingVolume.ts b/packages/dev/core/src/Lights/lightingVolume.ts index 4dadd230e69..e329035345f 100644 --- a/packages/dev/core/src/Lights/lightingVolume.ts +++ b/packages/dev/core/src/Lights/lightingVolume.ts @@ -505,7 +505,7 @@ export class LightingVolume { private _updateGeometry() { const light = this._light; - if (!light || !this._shadowGenerator || this._engine.isWebGPU) { + if (!light || !this._shadowGenerator) { return; } @@ -514,6 +514,10 @@ export class LightingVolume { return; } + if (this._engine.isWebGPU) { + return; + } + const numTesselation = this._tesselation; const min = TmpVectors.Vector3[0].set(light.orthoLeft, light.orthoBottom, light.shadowMinZ ?? Constants.ShadowMinZ); From 6788d2f83dfa97e75940863aeb75e8e104f2c6fa Mon Sep 17 00:00:00 2001 From: Popov72 Date: Fri, 5 Dec 2025 17:32:09 +0100 Subject: [PATCH 15/18] Allow more connection types to dependencies --- packages/dev/core/src/FrameGraph/Node/nodeRenderGraphBlock.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/dev/core/src/FrameGraph/Node/nodeRenderGraphBlock.ts b/packages/dev/core/src/FrameGraph/Node/nodeRenderGraphBlock.ts index 20c8a529e77..3b17f97676a 100644 --- a/packages/dev/core/src/FrameGraph/Node/nodeRenderGraphBlock.ts +++ b/packages/dev/core/src/FrameGraph/Node/nodeRenderGraphBlock.ts @@ -299,6 +299,10 @@ export class NodeRenderGraphBlock { NodeRenderGraphBlockConnectionPointTypes.TextureAllButBackBuffer | NodeRenderGraphBlockConnectionPointTypes.ResourceContainer | NodeRenderGraphBlockConnectionPointTypes.ShadowGenerator | + NodeRenderGraphBlockConnectionPointTypes.ObjectList | + NodeRenderGraphBlockConnectionPointTypes.ShadowLight | + NodeRenderGraphBlockConnectionPointTypes.Camera | + NodeRenderGraphBlockConnectionPointTypes.Object | additionalAllowedTypes ); From a415439743d95467cbba2b9922c89b04623248b6 Mon Sep 17 00:00:00 2001 From: Popov72 Date: Fri, 5 Dec 2025 17:33:09 +0100 Subject: [PATCH 16/18] Remove the static imports --- .../Tasks/Misc/lightingVolumeTask.ts | 1 + .../volumetricLightingBlendVolumeTask.ts | 14 +++-- .../PostProcesses/volumetricLightingTask.ts | 14 +++-- .../dev/core/src/FrameGraph/frameGraph.ts | 7 +-- .../dev/core/src/Lights/lightingVolume.ts | 52 ++++++++++++------- 5 files changed, 57 insertions(+), 31 deletions(-) diff --git a/packages/dev/core/src/FrameGraph/Tasks/Misc/lightingVolumeTask.ts b/packages/dev/core/src/FrameGraph/Tasks/Misc/lightingVolumeTask.ts index 369a818bea5..5b3dd5efa72 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/Misc/lightingVolumeTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/Misc/lightingVolumeTask.ts @@ -14,6 +14,7 @@ export class FrameGraphLightingVolumeTask extends FrameGraphTask { /** * The output object list containing the lighting volume mesh. + * You can get the mesh by doing outputMeshLightingVolume.meshes[0] */ public readonly outputMeshLightingVolume: FrameGraphObjectList; diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.ts index cd48ea49233..028db381e7f 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.ts @@ -4,9 +4,6 @@ import { Constants } from "core/Engines/constants"; import { ThinPassPostProcess } from "core/PostProcesses/thinPassPostProcess"; import { FrameGraphPostProcessTask } from "./postProcessTask"; -import "core/Shaders/volumetricLightingBlendVolume.fragment"; -import "core/ShadersWGSL/volumetricLightingBlendVolume.fragment"; - /** * @internal */ @@ -23,6 +20,17 @@ class VolumetricLightingBlendVolumeThinPostProcess extends ThinPassPostProcess { private _invProjection: Matrix; + protected override _gatherImports(useWebGPU: boolean, list: Promise[]) { + if (useWebGPU) { + this._webGPUReady = true; + list.push(Promise.all([import("../../../ShadersWGSL/pass.fragment"), import("../../../ShadersWGSL/volumetricLightingBlendVolume.fragment")])); + } else { + list.push(Promise.all([import("../../../Shaders/pass.fragment"), import("../../../Shaders/volumetricLightingBlendVolume.fragment")])); + } + + super._gatherImports(useWebGPU, list); + } + constructor(name: string, engine: Nullable = null, enableExtinction = false, options?: EffectWrapperCreationOptions) { super(name, engine, { ...options, diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts index 8a5a1192685..dac2769f6eb 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts @@ -9,11 +9,6 @@ import { FrameGraphObjectRendererTask } from "../Rendering/objectRendererTask"; import { ShaderMaterial } from "core/Materials/shaderMaterial"; import { ShaderLanguage } from "core/Materials/shaderLanguage"; -import "core/Shaders/volumetricLightingRenderVolume.vertex"; -import "core/Shaders/volumetricLightingRenderVolume.fragment"; -import "core/ShadersWGSL/volumetricLightingRenderVolume.vertex"; -import "core/ShadersWGSL/volumetricLightingRenderVolume.fragment"; - const InvViewProjectionMatrix = new Matrix(); /** @@ -187,6 +182,15 @@ export class FrameGraphVolumetricLightingTask extends FrameGraphTask { this.lightPower = this._lightPower; } + // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax + public override initAsync(): Promise { + if (this._frameGraph.engine.isWebGPU) { + return Promise.all([import("../../../ShadersWGSL/volumetricLightingRenderVolume.vertex"), import("../../../ShadersWGSL/volumetricLightingRenderVolume.fragment")]); + } + + return Promise.all([import("../../../Shaders/volumetricLightingRenderVolume.vertex"), import("../../../Shaders/volumetricLightingRenderVolume.fragment")]); + } + public override isReady() { return ( this._renderLightingVolumeMaterial.isReady() && diff --git a/packages/dev/core/src/FrameGraph/frameGraph.ts b/packages/dev/core/src/FrameGraph/frameGraph.ts index eb99a524ce5..12e78f02f82 100644 --- a/packages/dev/core/src/FrameGraph/frameGraph.ts +++ b/packages/dev/core/src/FrameGraph/frameGraph.ts @@ -10,9 +10,6 @@ import { _RetryWithInterval } from "core/Misc/timingTools"; import { Logger } from "core/Misc/logger"; import { UniqueIdGenerator } from "core/Misc/uniqueIdGenerator"; -import "core/Engines/Extensions/engine.multiRender"; -import "core/Engines/WebGPU/Extensions/engine.multiRender"; - enum FrameGraphPassType { Normal = 0, Render = 1, @@ -37,6 +34,7 @@ export class FrameGraph implements IDisposable { private readonly _initAsyncPromises: Promise[] = []; private _currentProcessedTask: FrameGraphTask | null = null; private _whenReadyAsyncCancel: Nullable<() => void> = null; + private _importPromise: Promise; /** * Name of the frame graph @@ -105,6 +103,7 @@ export class FrameGraph implements IDisposable { ) { this._scene = scene; this._engine = scene.getEngine(); + this._importPromise = this._engine.isWebGPU ? import("../Engines/WebGPU/Extensions/engine.multiRender") : import("../Engines/Extensions/engine.multiRender"); this.textureManager = new FrameGraphTextureManager(this._engine, debugTextures, scene); this._passContext = new FrameGraphContext(this._engine, this.textureManager, scene); this._renderContext = new FrameGraphRenderContext(this._engine, this.textureManager, scene); @@ -234,6 +233,8 @@ export class FrameGraph implements IDisposable { this._built = false; try { + await this._importPromise; + await this._whenAsynchronousInitializationDoneAsync(); for (const task of this._tasks) { diff --git a/packages/dev/core/src/Lights/lightingVolume.ts b/packages/dev/core/src/Lights/lightingVolume.ts index e329035345f..4ff4b255072 100644 --- a/packages/dev/core/src/Lights/lightingVolume.ts +++ b/packages/dev/core/src/Lights/lightingVolume.ts @@ -11,8 +11,6 @@ import { StorageBuffer } from "core/Buffers/storageBuffer"; import { BaseTexture } from "core/Materials/Textures/baseTexture"; import { VertexBuffer } from "core/Buffers/buffer"; -import "core/ShadersWGSL/lightingVolume.compute"; - const TmpVec3 = new Vector3(); /** @@ -40,6 +38,7 @@ export class LightingVolume { private _positions: Float32Array; private _indices: number[]; private _needFullUpdateUBO = true; + private _webGPUReady = false; private _shadowGenerator?: ShadowGenerator; /** @@ -65,11 +64,7 @@ export class LightingVolume { this._createFallbackTextures(); } - const depthTexture = this._shadowGenerator.getShadowMap()?.depthStencilTexture; - if (this._engine.isWebGPU && depthTexture) { - this._cs!.setInternalTexture("shadowMap", depthTexture); - this._cs2!.setInternalTexture("shadowMap", depthTexture); - } + this._setComputeShaderInputs(); } private _tesselation = 0; @@ -168,6 +163,15 @@ export class LightingVolume { scene.meshes.splice(scene.meshes.indexOf(this._mesh), 1); if (this._engine.isWebGPU) { + // eslint-disable-next-line github/no-then + void import("../ShadersWGSL/lightingVolume.compute").then(() => { + this._webGPUReady = true; + this._createComputeShader(); + if (this._indices.length === 0) { + this._createGeometry(); + } + }); + this._uBuffer = new UniformBuffer(this._engine); this._uBuffer.addUniform("invViewProjMatrix", 16); @@ -178,8 +182,6 @@ export class LightingVolume { this._uBuffer.addUniform("orthoMin", 3); this._uBuffer.addUniform("orthoMax", 3); this._uBuffer.update(); - - this._createComputeShader(); } else { this._copyTexture = new CopyTextureToTexture(this._engine, false, true); this._createFallbackTextures(); @@ -201,6 +203,9 @@ export class LightingVolume { if (this._cs2) { isReady = this._cs2.isReady() && isReady; } + if (this._engine.isWebGPU && !this._webGPUReady) { + isReady = false; + } return isReady; } @@ -209,7 +214,7 @@ export class LightingVolume { * @param forceUpdate If true, forces the update even if the frequency condition is not met. */ public update(forceUpdate = false) { - if (this._tesselation === 0 || !this._shadowGenerator) { + if (this._tesselation === 0 || !this._shadowGenerator || (this._engine.isWebGPU && !this._webGPUReady)) { return; } @@ -300,21 +305,29 @@ export class LightingVolume { entryPoint: "updatePlaneVertices", }); + this._setComputeShaderInputs(); + } + + private _setComputeShaderInputs() { + if (!this._engine.isWebGPU) { + return; + } + if (this._shadowGenerator) { const depthTexture = this._shadowGenerator.getShadowMap()?.depthStencilTexture; if (depthTexture) { - this._cs.setInternalTexture("shadowMap", depthTexture); - this._cs2.setInternalTexture("shadowMap", depthTexture); + this._cs?.setInternalTexture("shadowMap", depthTexture); + this._cs2?.setInternalTexture("shadowMap", depthTexture); } } if (this._uBuffer) { - this._cs.setUniformBuffer("params", this._uBuffer); - this._cs2.setUniformBuffer("params", this._uBuffer); + this._cs?.setUniformBuffer("params", this._uBuffer); + this._cs2?.setUniformBuffer("params", this._uBuffer); } if (this._storageBuffer) { - this._cs.setStorageBuffer("positions", this._storageBuffer); - this._cs2.setStorageBuffer("positions", this._storageBuffer); + this._cs?.setStorageBuffer("positions", this._storageBuffer); + this._cs2?.setStorageBuffer("positions", this._storageBuffer); } } @@ -466,7 +479,7 @@ export class LightingVolume { private _createGeometry() { const light = this._light; - if (!light) { + if (!light || (this._engine.isWebGPU && !this._webGPUReady)) { return; } @@ -490,8 +503,7 @@ export class LightingVolume { this._mesh.setVerticesBuffer(new VertexBuffer(webGPUEngine, this._storageBuffer.getBuffer(), "position", { takeBufferOwnership: false }), true, vertexNumber); - this._cs!.setStorageBuffer("positions", this._storageBuffer); - this._cs2!.setStorageBuffer("positions", this._storageBuffer); + this._setComputeShaderInputs(); this._cs!.triggerContextRebuild = true; this._cs2!.triggerContextRebuild = true; @@ -505,7 +517,7 @@ export class LightingVolume { private _updateGeometry() { const light = this._light; - if (!light || !this._shadowGenerator) { + if (!light || !this._shadowGenerator || (this._engine.isWebGPU && !this._webGPUReady)) { return; } From 6946e70bc3c05d164a93dbaa6c9e198563835445 Mon Sep 17 00:00:00 2001 From: Popov72 Date: Mon, 8 Dec 2025 17:23:59 +0100 Subject: [PATCH 17/18] Better typing --- .../FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts | 2 +- packages/dev/core/src/FrameGraph/frameGraph.ts | 2 +- packages/dev/core/src/FrameGraph/frameGraphTask.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts index dac2769f6eb..db2f5b03ac0 100644 --- a/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts +++ b/packages/dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts @@ -183,7 +183,7 @@ export class FrameGraphVolumetricLightingTask extends FrameGraphTask { } // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax - public override initAsync(): Promise { + public override initAsync(): Promise { if (this._frameGraph.engine.isWebGPU) { return Promise.all([import("../../../ShadersWGSL/volumetricLightingRenderVolume.vertex"), import("../../../ShadersWGSL/volumetricLightingRenderVolume.fragment")]); } diff --git a/packages/dev/core/src/FrameGraph/frameGraph.ts b/packages/dev/core/src/FrameGraph/frameGraph.ts index 12e78f02f82..e1c61af8843 100644 --- a/packages/dev/core/src/FrameGraph/frameGraph.ts +++ b/packages/dev/core/src/FrameGraph/frameGraph.ts @@ -31,7 +31,7 @@ export class FrameGraph implements IDisposable { private readonly _tasks: FrameGraphTask[] = []; private readonly _passContext: FrameGraphContext; private readonly _renderContext: FrameGraphRenderContext; - private readonly _initAsyncPromises: Promise[] = []; + private readonly _initAsyncPromises: Promise[] = []; private _currentProcessedTask: FrameGraphTask | null = null; private _whenReadyAsyncCancel: Nullable<() => void> = null; private _importPromise: Promise; diff --git a/packages/dev/core/src/FrameGraph/frameGraphTask.ts b/packages/dev/core/src/FrameGraph/frameGraphTask.ts index cf26ee4cbbd..7b0f28410c6 100644 --- a/packages/dev/core/src/FrameGraph/frameGraphTask.ts +++ b/packages/dev/core/src/FrameGraph/frameGraphTask.ts @@ -80,7 +80,7 @@ export abstract class FrameGraphTask { * @returns A promise that resolves when the initialization is complete. */ // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax - public initAsync(): Promise { + public initAsync(): Promise { return Promise.resolve(); } From a79620e03b2e9104f36b2e8df4d18415ba812b2e Mon Sep 17 00:00:00 2001 From: Popov72 Date: Mon, 8 Dec 2025 20:07:39 +0100 Subject: [PATCH 18/18] Remove dynamic import --- .../dev/core/src/Lights/lightingVolume.ts | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/packages/dev/core/src/Lights/lightingVolume.ts b/packages/dev/core/src/Lights/lightingVolume.ts index 4ff4b255072..7d088cab400 100644 --- a/packages/dev/core/src/Lights/lightingVolume.ts +++ b/packages/dev/core/src/Lights/lightingVolume.ts @@ -11,6 +11,8 @@ import { StorageBuffer } from "core/Buffers/storageBuffer"; import { BaseTexture } from "core/Materials/Textures/baseTexture"; import { VertexBuffer } from "core/Buffers/buffer"; +import "core/ShadersWGSL/lightingVolume.compute"; + const TmpVec3 = new Vector3(); /** @@ -38,7 +40,6 @@ export class LightingVolume { private _positions: Float32Array; private _indices: number[]; private _needFullUpdateUBO = true; - private _webGPUReady = false; private _shadowGenerator?: ShadowGenerator; /** @@ -163,15 +164,6 @@ export class LightingVolume { scene.meshes.splice(scene.meshes.indexOf(this._mesh), 1); if (this._engine.isWebGPU) { - // eslint-disable-next-line github/no-then - void import("../ShadersWGSL/lightingVolume.compute").then(() => { - this._webGPUReady = true; - this._createComputeShader(); - if (this._indices.length === 0) { - this._createGeometry(); - } - }); - this._uBuffer = new UniformBuffer(this._engine); this._uBuffer.addUniform("invViewProjMatrix", 16); @@ -182,6 +174,8 @@ export class LightingVolume { this._uBuffer.addUniform("orthoMin", 3); this._uBuffer.addUniform("orthoMax", 3); this._uBuffer.update(); + + this._createComputeShader(); } else { this._copyTexture = new CopyTextureToTexture(this._engine, false, true); this._createFallbackTextures(); @@ -203,9 +197,6 @@ export class LightingVolume { if (this._cs2) { isReady = this._cs2.isReady() && isReady; } - if (this._engine.isWebGPU && !this._webGPUReady) { - isReady = false; - } return isReady; } @@ -214,7 +205,7 @@ export class LightingVolume { * @param forceUpdate If true, forces the update even if the frequency condition is not met. */ public update(forceUpdate = false) { - if (this._tesselation === 0 || !this._shadowGenerator || (this._engine.isWebGPU && !this._webGPUReady)) { + if (this._tesselation === 0 || !this._shadowGenerator) { return; } @@ -479,7 +470,7 @@ export class LightingVolume { private _createGeometry() { const light = this._light; - if (!light || (this._engine.isWebGPU && !this._webGPUReady)) { + if (!light) { return; } @@ -517,7 +508,7 @@ export class LightingVolume { private _updateGeometry() { const light = this._light; - if (!light || !this._shadowGenerator || (this._engine.isWebGPU && !this._webGPUReady)) { + if (!light || !this._shadowGenerator) { return; }