From b81c9d04cc531dffd3a68b64b439a22cbea79748 Mon Sep 17 00:00:00 2001 From: Jess Frazelle Date: Fri, 1 Mar 2024 14:23:30 -0800 Subject: [PATCH] make kcl std lib first class (#1603) * make kcl std lib first class Signed-off-by: Jess Frazelle * fix tests Signed-off-by: Jess Frazelle * u[dates Signed-off-by: Jess Frazelle * fixes Signed-off-by: Jess Frazelle --------- Signed-off-by: Jess Frazelle --- docs/kcl/std.json | 1457 +++++++++++++++++ docs/kcl/std.md | 285 ++++ src/wasm-lib/kcl/src/lsp/kcl/mod.rs | 6 +- ...rser__parser_impl__snapshot_tests__au.snap | 66 +- src/wasm-lib/kcl/src/std/kcl_stdlib.rs | 3 + src/wasm-lib/kcl/src/std/mod.rs | 23 +- src/wasm-lib/kcl/src/std/shapes.rs | 49 +- .../tests/executor/inputs/cylinder.kcl | 2 +- src/wasm-lib/tests/executor/main.rs | 167 +- src/wasm-lib/tests/executor/outputs/holes.png | Bin 96835 -> 96827 bytes 10 files changed, 1864 insertions(+), 194 deletions(-) diff --git a/docs/kcl/std.json b/docs/kcl/std.json index e7857eb91..a50cf7a4e 100644 --- a/docs/kcl/std.json +++ b/docs/kcl/std.json @@ -18090,6 +18090,1463 @@ "unpublished": false, "deprecated": false }, + { + "name": "circle", + "summary": "Sketch a circle on the given plane", + "description": "", + "tags": [], + "args": [ + { + "name": "plane", + "type": "SketchData", + "schema": { + "description": "Data for start sketch on. You can start a sketch on a plane or an extrude group.", + "anyOf": [ + { + "description": "Data for a plane.", + "oneOf": [ + { + "description": "The XY plane.", + "type": "string", + "enum": [ + "XY" + ] + }, + { + "description": "The opposite side of the XY plane.", + "type": "string", + "enum": [ + "-XY" + ] + }, + { + "description": "The XZ plane.", + "type": "string", + "enum": [ + "XZ" + ] + }, + { + "description": "The opposite side of the XZ plane.", + "type": "string", + "enum": [ + "-XZ" + ] + }, + { + "description": "The YZ plane.", + "type": "string", + "enum": [ + "YZ" + ] + }, + { + "description": "The opposite side of the YZ plane.", + "type": "string", + "enum": [ + "-YZ" + ] + }, + { + "description": "A defined plane.", + "type": "object", + "required": [ + "plane" + ], + "properties": { + "plane": { + "type": "object", + "required": [ + "origin", + "x_axis", + "y_axis", + "z_axis" + ], + "properties": { + "origin": { + "description": "Origin of the plane.", + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "x_axis": { + "description": "What should the plane’s X axis be?", + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "y_axis": { + "description": "What should the plane’s Y axis be?", + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "z_axis": { + "description": "The z-axis (normal).", + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + } + } + } + }, + "additionalProperties": false + } + ] + }, + { + "description": "An extrude group is a collection of extrude surfaces.", + "type": "object", + "required": [ + "__meta", + "height", + "id", + "position", + "rotation", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + } + } + } + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "height": { + "description": "The height of the extrude group.", + "type": "number", + "format": "double" + }, + "id": { + "description": "The id of the extrude group.", + "type": "string", + "format": "uuid" + }, + "position": { + "description": "The position of the extrude group.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 3, + "minItems": 3 + }, + "rotation": { + "description": "The rotation of the extrude group.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 4, + "minItems": 4 + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "name", + "position", + "rotation", + "sourceRange", + "type" + ], + "properties": { + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "name": { + "description": "The name.", + "type": "string" + }, + "position": { + "description": "The position.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 3, + "minItems": 3 + }, + "rotation": { + "description": "The rotation.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 4, + "minItems": 4 + }, + "sourceRange": { + "description": "The source range.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "name", + "position", + "rotation", + "sourceRange", + "type" + ], + "properties": { + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "name": { + "description": "The name.", + "type": "string" + }, + "position": { + "description": "The position.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 3, + "minItems": 3 + }, + "rotation": { + "description": "The rotation.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 4, + "minItems": 4 + }, + "sourceRange": { + "description": "The source range.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + }, + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + } + } + } + ] + } + }, + "xAxis": { + "description": "The x-axis of the extrude group base plane in the 3D space", + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "yAxis": { + "description": "The y-axis of the extrude group base plane in the 3D space", + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "zAxis": { + "description": "The z-axis of the extrude group base plane in the 3D space", + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + } + } + } + ] + }, + "required": true + }, + { + "name": "center", + "type": "[number, number]", + "schema": { + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "required": true + }, + { + "name": "radius", + "type": "number", + "schema": { + "type": "number", + "format": "double" + }, + "required": true + } + ], + "returnValue": { + "name": "SketchGroup", + "type": "SketchGroup", + "schema": { + "description": "A sketch group is a collection of paths.", + "type": "object", + "required": [ + "__meta", + "id", + "on", + "position", + "rotation", + "start", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "__meta": { + "description": "Metadata.", + "type": "array", + "items": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + } + } + } + }, + "entityId": { + "description": "The plane id or face id of the sketch group.", + "type": "string", + "format": "uuid", + "nullable": true + }, + "id": { + "description": "The id of the sketch group.", + "type": "string", + "format": "uuid" + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "oneOf": [ + { + "description": "A plane.", + "type": "object", + "required": [ + "__meta", + "id", + "origin", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "__meta": { + "type": "array", + "items": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + } + } + } + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "origin": { + "description": "Origin of the plane.", + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "value": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + } + ] + }, + "xAxis": { + "description": "What should the plane’s X axis be?", + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "yAxis": { + "description": "What should the plane’s Y axis be?", + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "zAxis": { + "description": "The z-axis (normal).", + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "__meta", + "id", + "sketchGroupId", + "type", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "__meta": { + "type": "array", + "items": { + "description": "Metadata.", + "type": "object", + "required": [ + "sourceRange" + ], + "properties": { + "sourceRange": { + "description": "The source range.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + } + } + } + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "sketchGroupId": { + "description": "The original sketch group id of the object we are sketching on.", + "type": "string", + "format": "uuid" + }, + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face’s X axis be?", + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "yAxis": { + "description": "What should the face’s Y axis be?", + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "zAxis": { + "description": "The z-axis (normal).", + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + } + } + } + ] + }, + "position": { + "description": "The position of the sketch group.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 3, + "minItems": 3 + }, + "rotation": { + "description": "The rotation of the sketch group base plane.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 4, + "minItems": 4 + }, + "start": { + "description": "The starting path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "name", + "to" + ], + "properties": { + "__geoMeta": { + "description": "Metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + } + } + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "name": { + "description": "The name of the path.", + "type": "string" + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + } + } + }, + "value": { + "description": "The paths in the sketch group.", + "type": "array", + "items": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "name", + "to", + "type" + ], + "properties": { + "__geoMeta": { + "description": "Metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + } + } + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "name": { + "description": "The name of the path.", + "type": "string" + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "name", + "to", + "type" + ], + "properties": { + "__geoMeta": { + "description": "Metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + } + } + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "name": { + "description": "The name of the path.", + "type": "string" + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "from", + "name", + "to", + "type" + ], + "properties": { + "__geoMeta": { + "description": "Metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + } + } + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "name": { + "description": "The name of the path.", + "type": "string" + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "name", + "to", + "type", + "x" + ], + "properties": { + "__geoMeta": { + "description": "Metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + } + } + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "name": { + "description": "The name of the path.", + "type": "string" + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "name", + "to", + "type" + ], + "properties": { + "__geoMeta": { + "description": "Metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + } + } + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "name": { + "description": "The name of the path.", + "type": "string" + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "name", + "to", + "type" + ], + "properties": { + "__geoMeta": { + "description": "Metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 2, + "minItems": 2 + } + } + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "name": { + "description": "The name of the path.", + "type": "string" + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "type": { + "type": "string", + "enum": [ + "Base" + ] + } + } + } + ] + } + }, + "xAxis": { + "description": "The x-axis of the sketch group base plane in the 3D space", + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "yAxis": { + "description": "The y-axis of the sketch group base plane in the 3D space", + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + }, + "zAxis": { + "description": "The z-axis of the sketch group base plane in the 3D space", + "type": "object", + "required": [ + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + } + } + } + } + }, + "required": true + }, + "unpublished": false, + "deprecated": false + }, { "name": "close", "summary": "Close the current sketch.", diff --git a/docs/kcl/std.md b/docs/kcl/std.md index 674753d63..5306c5449 100644 --- a/docs/kcl/std.md +++ b/docs/kcl/std.md @@ -20,6 +20,7 @@ * [`atan`](#atan) * [`bezierCurve`](#bezierCurve) * [`ceil`](#ceil) + * [`circle`](#circle) * [`close`](#close) * [`cos`](#cos) * [`e`](#e) @@ -3438,6 +3439,290 @@ ceil(num: number) -> number +### circle + +Sketch a circle on the given plane + + + +``` +circle(plane: SketchData, center: [number, number], radius: number) -> SketchGroup +``` + +#### Arguments + +* `plane`: `SketchData` - Data for start sketch on. You can start a sketch on a plane or an extrude group. +``` +"XY" | +"-XY" | +"XZ" | +"-XZ" | +"YZ" | +"-YZ" | +{ + plane: { + // Origin of the plane. + origin: { + x: number, + y: number, + z: number, +}, + // What should the plane’s X axis be? + x_axis: { + x: number, + y: number, + z: number, +}, + // What should the plane’s Y axis be? + y_axis: { + x: number, + y: number, + z: number, +}, + // The z-axis (normal). + z_axis: { + x: number, + y: number, + z: number, +}, +}, +} | +{ + // The id of the extrusion end cap + endCapId: uuid, + // The height of the extrude group. + height: number, + // The id of the extrude group. + id: uuid, + // The position of the extrude group. + position: [number, number, number], + // The rotation of the extrude group. + rotation: [number, number, number, number], + // The id of the extrusion start cap + startCapId: uuid, + // The extrude surfaces. + value: [{ + // The face id for the extrude plane. + faceId: uuid, + // The id of the geometry. + id: uuid, + // The name. + name: string, + // The position. + position: [number, number, number], + // The rotation. + rotation: [number, number, number, number], + // The source range. + sourceRange: [number, number], + type: "extrudePlane", +} | +{ + // The face id for the extrude plane. + faceId: uuid, + // The id of the geometry. + id: uuid, + // The name. + name: string, + // The position. + position: [number, number, number], + // The rotation. + rotation: [number, number, number, number], + // The source range. + sourceRange: [number, number], + type: "extrudeArc", +}], + // The x-axis of the extrude group base plane in the 3D space + xAxis: { + x: number, + y: number, + z: number, +}, + // The y-axis of the extrude group base plane in the 3D space + yAxis: { + x: number, + y: number, + z: number, +}, + // The z-axis of the extrude group base plane in the 3D space + zAxis: { + x: number, + y: number, + z: number, +}, +} +``` +* `center`: `[number, number]` +* `radius`: `number` + +#### Returns + +* `SketchGroup` - A sketch group is a collection of paths. +``` +{ + // The plane id or face id of the sketch group. + entityId: uuid, + // The id of the sketch group. + id: uuid, + // What the sketch is on (can be a plane or a face). + on: { + // The id of the plane. + id: uuid, + // Origin of the plane. + origin: { + x: number, + y: number, + z: number, +}, + type: "plane", + // Type for a plane. + value: "XY" | "XZ" | "YZ" | "Custom", + // What should the plane’s X axis be? + xAxis: { + x: number, + y: number, + z: number, +}, + // What should the plane’s Y axis be? + yAxis: { + x: number, + y: number, + z: number, +}, + // The z-axis (normal). + zAxis: { + x: number, + y: number, + z: number, +}, +} | +{ + // The id of the face. + id: uuid, + // The original sketch group id of the object we are sketching on. + sketchGroupId: uuid, + type: "face", + // The tag of the face. + value: string, + // What should the face’s X axis be? + xAxis: { + x: number, + y: number, + z: number, +}, + // What should the face’s Y axis be? + yAxis: { + x: number, + y: number, + z: number, +}, + // The z-axis (normal). + zAxis: { + x: number, + y: number, + z: number, +}, +}, + // The position of the sketch group. + position: [number, number, number], + // The rotation of the sketch group base plane. + rotation: [number, number, number, number], + // The starting path. + start: { + // The from point. + from: [number, number], + // The name of the path. + name: string, + // The to point. + to: [number, number], +}, + // The paths in the sketch group. + value: [{ + // The from point. + from: [number, number], + // The name of the path. + name: string, + // The to point. + to: [number, number], + type: "ToPoint", +} | +{ + // arc's direction + ccw: string, + // the arc's center + center: [number, number], + // The from point. + from: [number, number], + // The name of the path. + name: string, + // The to point. + to: [number, number], + type: "TangentialArcTo", +} | +{ + // The from point. + from: [number, number], + // The name of the path. + name: string, + // The to point. + to: [number, number], + type: "TangentialArc", +} | +{ + // The from point. + from: [number, number], + // The name of the path. + name: string, + // The to point. + to: [number, number], + type: "Horizontal", + // The x coordinate. + x: number, +} | +{ + // The from point. + from: [number, number], + // The name of the path. + name: string, + // The to point. + to: [number, number], + type: "AngledLineTo", + // The x coordinate. + x: number, + // The y coordinate. + y: number, +} | +{ + // The from point. + from: [number, number], + // The name of the path. + name: string, + // The to point. + to: [number, number], + type: "Base", +}], + // The x-axis of the sketch group base plane in the 3D space + xAxis: { + x: number, + y: number, + z: number, +}, + // The y-axis of the sketch group base plane in the 3D space + yAxis: { + x: number, + y: number, + z: number, +}, + // The z-axis of the sketch group base plane in the 3D space + zAxis: { + x: number, + y: number, + z: number, +}, +} +``` + + + ### close Close the current sketch. diff --git a/src/wasm-lib/kcl/src/lsp/kcl/mod.rs b/src/wasm-lib/kcl/src/lsp/kcl/mod.rs index c8e4e939b..9d8de041a 100644 --- a/src/wasm-lib/kcl/src/lsp/kcl/mod.rs +++ b/src/wasm-lib/kcl/src/lsp/kcl/mod.rs @@ -636,8 +636,9 @@ impl LanguageServer for Backend { /// Get completions from our stdlib. pub fn get_completions_from_stdlib(stdlib: &crate::std::StdLib) -> Result> { let mut completions = HashMap::new(); + let combined = stdlib.combined(); - for internal_fn in stdlib.fns.values() { + for internal_fn in combined.values() { completions.insert(internal_fn.name(), internal_fn.to_completion_item()); } @@ -652,8 +653,9 @@ pub fn get_completions_from_stdlib(stdlib: &crate::std::StdLib) -> Result Result> { let mut signatures = HashMap::new(); + let combined = stdlib.combined(); - for internal_fn in stdlib.fns.values() { + for internal_fn in combined.values() { signatures.insert(internal_fn.name(), internal_fn.to_signature_help()); } diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__au.snap b/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__au.snap index e828dab5c..9b9d64178 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__au.snap +++ b/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__au.snap @@ -4,18 +4,18 @@ expression: actual --- { "start": 0, - "end": 90, + "end": 74, "body": [ { "type": "VariableDeclaration", "type": "VariableDeclaration", "start": 0, - "end": 74, + "end": 58, "declarations": [ { "type": "VariableDeclarator", "start": 6, - "end": 74, + "end": 58, "id": { "type": "Identifier", "start": 6, @@ -26,47 +26,47 @@ expression: actual "type": "PipeExpression", "type": "PipeExpression", "start": 17, - "end": 74, + "end": 58, "body": [ { "type": "CallExpression", "type": "CallExpression", "start": 17, - "end": 56, + "end": 40, "callee": { "type": "Identifier", "start": 17, - "end": 39, - "name": "unstable_stdlib_circle" + "end": 23, + "name": "circle" }, "arguments": [ { "type": "Literal", "type": "Literal", - "start": 40, - "end": 44, + "start": 24, + "end": 28, "value": "XY", "raw": "'XY'" }, { "type": "ArrayExpression", "type": "ArrayExpression", - "start": 46, - "end": 51, + "start": 30, + "end": 35, "elements": [ { "type": "Literal", "type": "Literal", - "start": 47, - "end": 48, + "start": 31, + "end": 32, "value": 0, "raw": "0" }, { "type": "Literal", "type": "Literal", - "start": 49, - "end": 50, + "start": 33, + "end": 34, "value": 0, "raw": "0" } @@ -75,8 +75,8 @@ expression: actual { "type": "Literal", "type": "Literal", - "start": 53, - "end": 55, + "start": 37, + "end": 39, "value": 22, "raw": "22" } @@ -86,28 +86,28 @@ expression: actual { "type": "CallExpression", "type": "CallExpression", - "start": 60, - "end": 74, + "start": 44, + "end": 58, "callee": { "type": "Identifier", - "start": 60, - "end": 67, + "start": 44, + "end": 51, "name": "extrude" }, "arguments": [ { "type": "Literal", "type": "Literal", - "start": 68, - "end": 70, + "start": 52, + "end": 54, "value": 14, "raw": "14" }, { "type": "PipeSubstitution", "type": "PipeSubstitution", - "start": 72, - "end": 73 + "start": 56, + "end": 57 } ], "optional": false @@ -125,25 +125,25 @@ expression: actual { "type": "ExpressionStatement", "type": "ExpressionStatement", - "start": 75, - "end": 89, + "start": 59, + "end": 73, "expression": { "type": "CallExpression", "type": "CallExpression", - "start": 75, - "end": 89, + "start": 59, + "end": 73, "callee": { "type": "Identifier", - "start": 75, - "end": 79, + "start": 59, + "end": 63, "name": "show" }, "arguments": [ { "type": "Identifier", "type": "Identifier", - "start": 80, - "end": 88, + "start": 64, + "end": 72, "name": "cylinder" } ], diff --git a/src/wasm-lib/kcl/src/std/kcl_stdlib.rs b/src/wasm-lib/kcl/src/std/kcl_stdlib.rs index 0eee747cf..a2b8cb755 100644 --- a/src/wasm-lib/kcl/src/std/kcl_stdlib.rs +++ b/src/wasm-lib/kcl/src/std/kcl_stdlib.rs @@ -11,6 +11,9 @@ pub trait KclStdLibFn: StdLibFn { fn kcl_clone_box(&self) -> Box; fn function(&self) -> &FunctionExpression; fn program(&self) -> &Program; + fn std_lib(&self) -> Box { + self.clone_box() + } } impl ts_rs::TS for dyn KclStdLibFn { diff --git a/src/wasm-lib/kcl/src/std/mod.rs b/src/wasm-lib/kcl/src/std/mod.rs index 082924497..9c05ef9b6 100644 --- a/src/wasm-lib/kcl/src/std/mod.rs +++ b/src/wasm-lib/kcl/src/std/mod.rs @@ -133,6 +133,15 @@ impl StdLib { Self { fns, kcl_fns } } + // Get the combined hashmaps. + pub fn combined(&self) -> HashMap> { + let mut combined = self.fns.clone(); + for (k, v) in self.kcl_fns.clone() { + combined.insert(k, v.std_lib()); + } + combined + } + pub fn get(&self, name: &str) -> Option> { self.fns.get(name).cloned() } @@ -789,6 +798,7 @@ mod tests { #[test] fn test_generate_stdlib_markdown_docs() { let stdlib = StdLib::new(); + let combined = stdlib.combined(); let mut buf = String::new(); buf.push_str("\n\n"); @@ -800,8 +810,8 @@ mod tests { buf.push_str("* [Functions](#functions)\n"); - for key in stdlib.fns.keys().sorted() { - let internal_fn = stdlib.fns.get(key).unwrap(); + for key in combined.keys().sorted() { + let internal_fn = combined.get(key).unwrap(); if internal_fn.unpublished() || internal_fn.deprecated() { continue; } @@ -813,8 +823,8 @@ mod tests { buf.push_str("## Functions\n\n"); - for key in stdlib.fns.keys().sorted() { - let internal_fn = stdlib.fns.get(key).unwrap(); + for key in combined.keys().sorted() { + let internal_fn = combined.get(key).unwrap(); if internal_fn.unpublished() { continue; } @@ -874,11 +884,12 @@ mod tests { #[test] fn test_generate_stdlib_json_schema() { let stdlib = StdLib::new(); + let combined = stdlib.combined(); let mut json_data = vec![]; - for key in stdlib.fns.keys().sorted() { - let internal_fn = stdlib.fns.get(key).unwrap(); + for key in combined.keys().sorted() { + let internal_fn = combined.get(key).unwrap(); json_data.push(internal_fn.to_json().unwrap()); } expectorate::assert_contents( diff --git a/src/wasm-lib/kcl/src/std/shapes.rs b/src/wasm-lib/kcl/src/std/shapes.rs index 8bafb0cc5..192c61fc6 100644 --- a/src/wasm-lib/kcl/src/std/shapes.rs +++ b/src/wasm-lib/kcl/src/std/shapes.rs @@ -48,7 +48,7 @@ impl std::fmt::Debug for Circle { /// TODO: Parse the KCL in a macro and generate these impl StdLibFn for Circle { fn name(&self) -> String { - "unstable_stdlib_circle".to_owned() + "circle".to_owned() } fn summary(&self) -> String { @@ -64,15 +64,56 @@ impl StdLibFn for Circle { } fn args(&self) -> Vec { - Vec::new() // TODO + let mut settings = schemars::gen::SchemaSettings::openapi3(); + settings.inline_subschemas = true; + let mut generator = schemars::gen::SchemaGenerator::new(settings); + let mut args = Vec::new(); + for parameter in &self.function.params { + match parameter.identifier.name.as_str() { + "plane" => { + args.push(crate::docs::StdLibFnArg { + name: parameter.identifier.name.to_owned(), + type_: "SketchData".to_string(), + schema: ::json_schema(&mut generator), + required: true, + }); + } + "center" => { + args.push(crate::docs::StdLibFnArg { + name: parameter.identifier.name.to_owned(), + type_: "[number, number]".to_string(), + schema: <[f64; 2]>::json_schema(&mut generator), + required: true, + }); + } + "radius" => { + args.push(crate::docs::StdLibFnArg { + name: parameter.identifier.name.to_owned(), + type_: "number".to_string(), + schema: ::json_schema(&mut generator), + required: true, + }); + } + _ => panic!("Unknown parameter: {:?}", parameter.identifier.name), + } + } + args } fn return_value(&self) -> Option { - None + let mut settings = schemars::gen::SchemaSettings::openapi3(); + settings.inline_subschemas = true; + let mut generator = schemars::gen::SchemaGenerator::new(settings); + Some(crate::docs::StdLibFnArg { + name: "SketchGroup".to_owned(), + type_: "SketchGroup".to_string(), + schema: ::json_schema(&mut generator), + required: true, + }) } fn unpublished(&self) -> bool { - true + false } fn deprecated(&self) -> bool { diff --git a/src/wasm-lib/tests/executor/inputs/cylinder.kcl b/src/wasm-lib/tests/executor/inputs/cylinder.kcl index 42f3eee28..e7f93ff12 100644 --- a/src/wasm-lib/tests/executor/inputs/cylinder.kcl +++ b/src/wasm-lib/tests/executor/inputs/cylinder.kcl @@ -1,2 +1,2 @@ -const cylinder = unstable_stdlib_circle('XY', [0,0], 22) |> extrude(14, %) +const cylinder = circle('XY', [0,0], 22) |> extrude(14, %) show(cylinder) diff --git a/src/wasm-lib/tests/executor/main.rs b/src/wasm-lib/tests/executor/main.rs index 8d6f68dca..20ead275e 100644 --- a/src/wasm-lib/tests/executor/main.rs +++ b/src/wasm-lib/tests/executor/main.rs @@ -602,23 +602,14 @@ const part004 = startSketchOn('YZ') #[tokio::test(flavor = "multi_thread")] async fn serial_test_holes() { - let code = r#"fn circle = (pos, radius) => { - const sg = startSketchOn('XY') - |> startProfileAt(pos, %) - |> arc({angle_end: 360, angle_start: 0, radius: radius}, %) - |> close(%) - - return sg -} - -const square = startSketchOn('XY') + let code = r#"const square = startSketchOn('XY') |> startProfileAt([0, 0], %) |> line([0, 10], %) |> line([10, 0], %) |> line([0, -10], %) |> close(%) - |> hole(circle([2, 2], .5), %) - |> hole(circle([2, 8], .5), %) + |> hole(circle('XY', [2, 2], .5), %) + |> hole(circle('XY', [2, 8], .5), %) |> extrude(2, %) "#; @@ -631,7 +622,7 @@ const square = startSketchOn('XY') #[tokio::test(flavor = "multi_thread")] async fn optional_params() { let code = r#" - fn circle = (pos, radius, tag?) => { + fn other_circle = (pos, radius, tag?) => { const sg = startSketchOn('XY') |> startProfileAt(pos, %) |> arc({angle_end: 360, angle_start: 0, radius: radius}, %) @@ -640,7 +631,7 @@ async fn optional_params() { return sg } -const thing = circle([2, 2], 20) +const thing = other_circle([2, 2], 20) "#; let result = execute_and_snapshot(code, kittycad::types::UnitLength::Mm) .await @@ -650,19 +641,7 @@ const thing = circle([2, 2], 20) #[tokio::test(flavor = "multi_thread")] async fn serial_test_rounded_with_holes() { - let code = r#"fn circle = (pos, radius) => { - const sg = startSketchOn('XY') - |> startProfileAt([pos[0] + radius, pos[1]], %) - |> arc({ - angle_end: 360, - angle_start: 0, - radius: radius - }, %) - |> close(%) - return sg -} - -fn tarc = (to, sketchGroup, tag?) => { + let code = r#"fn tarc = (to, sketchGroup, tag?) => { return tangentialArcTo(to, sketchGroup, tag) } @@ -685,10 +664,10 @@ const holeRadius = 1 const holeIndex = 6 const part = roundedRectangle([0, 0], 20, 20, 4) - |> hole(circle([-holeIndex, holeIndex], holeRadius), %) - |> hole(circle([holeIndex, holeIndex], holeRadius), %) - |> hole(circle([-holeIndex, -holeIndex], holeRadius), %) - |> hole(circle([holeIndex, -holeIndex], holeRadius), %) + |> hole(circle('XY', [-holeIndex, holeIndex], holeRadius), %) + |> hole(circle('XY', [holeIndex, holeIndex], holeRadius), %) + |> hole(circle('XY', [-holeIndex, -holeIndex], holeRadius), %) + |> hole(circle('XY', [holeIndex, -holeIndex], holeRadius), %) |> extrude(2, %) "#; @@ -700,19 +679,7 @@ const part = roundedRectangle([0, 0], 20, 20, 4) #[tokio::test(flavor = "multi_thread")] async fn serial_test_top_level_expression() { - let code = r#"fn circle = (pos, radius) => { - const sg = startSketchOn('XY') - |> startProfileAt([pos[0] + radius, pos[1]], %) - |> arc({ - angle_end: 360, - angle_start: 0, - radius: radius - }, %) - |> close(%) - return sg -} - -circle([0,0], 22) |> extrude(14, %)"#; + let code = r#"circle('XY', [0,0], 22) |> extrude(14, %)"#; let result = execute_and_snapshot(code, kittycad::types::UnitLength::Mm) .await @@ -722,19 +689,7 @@ circle([0,0], 22) |> extrude(14, %)"#; #[tokio::test(flavor = "multi_thread")] async fn serial_test_patterns_linear_basic() { - let code = r#"fn circle = (pos, radius) => { - const sg = startSketchOn('XY') - |> startProfileAt([pos[0] + radius, pos[1]], %) - |> arc({ - angle_end: 360, - angle_start: 0, - radius: radius - }, %) - |> close(%) - return sg -} - -const part = circle([0,0], 2) + let code = r#"const part = circle('XY', [0,0], 2) |> patternLinear({axis: [0,1], repetitions: 12, distance: 2}, %) "#; @@ -746,19 +701,7 @@ const part = circle([0,0], 2) #[tokio::test(flavor = "multi_thread")] async fn serial_test_patterns_linear_basic_3d() { - let code = r#"fn circle = (pos, radius) => { - const sg = startSketchOn('XY') - |> startProfileAt([pos[0] + radius, pos[1]], %) - |> arc({ - angle_end: 360, - angle_start: 0, - radius: radius - }, %) - |> close(%) - return sg -} - -const part = startSketchOn('XY') + let code = r#"const part = startSketchOn('XY') |> startProfileAt([0, 0], %) |> line([0,1], %) |> line([1, 0], %) @@ -776,19 +719,7 @@ const part = startSketchOn('XY') #[tokio::test(flavor = "multi_thread")] async fn serial_test_patterns_linear_basic_negative_distance() { - let code = r#"fn circle = (pos, radius) => { - const sg = startSketchOn('XY') - |> startProfileAt([pos[0] + radius, pos[1]], %) - |> arc({ - angle_end: 360, - angle_start: 0, - radius: radius - }, %) - |> close(%) - return sg -} - -const part = circle([0,0], 2) + let code = r#"const part = circle('XY', [0,0], 2) |> patternLinear({axis: [0,1], repetitions: 12, distance: -2}, %) "#; @@ -804,19 +735,7 @@ const part = circle([0,0], 2) #[tokio::test(flavor = "multi_thread")] async fn serial_test_patterns_linear_basic_negative_axis() { - let code = r#"fn circle = (pos, radius) => { - const sg = startSketchOn('XY') - |> startProfileAt([pos[0] + radius, pos[1]], %) - |> arc({ - angle_end: 360, - angle_start: 0, - radius: radius - }, %) - |> close(%) - return sg -} - -const part = circle([0,0], 2) + let code = r#"const part = circle('XY', [0,0], 2) |> patternLinear({axis: [0,-1], repetitions: 12, distance: 2}, %) "#; @@ -832,19 +751,7 @@ const part = circle([0,0], 2) #[tokio::test(flavor = "multi_thread")] async fn serial_test_patterns_linear_basic_holes() { - let code = r#"fn circle = (pos, radius) => { - const sg = startSketchOn('XY') - |> startProfileAt([pos[0] + radius, pos[1]], %) - |> arc({ - angle_end: 360, - angle_start: 0, - radius: radius - }, %) - |> close(%) - return sg -} - -const circles = circle([5, 5], 1) + let code = r#"const circles = circle('XY', [5, 5], 1) |> patternLinear({axis: [1,1], repetitions: 12, distance: 3}, %) const rectangle = startSketchOn('XY') @@ -865,19 +772,7 @@ const rectangle = startSketchOn('XY') #[tokio::test(flavor = "multi_thread")] async fn serial_test_patterns_circular_basic_2d() { - let code = r#"fn circle = (pos, radius) => { - const sg = startSketchOn('XY') - |> startProfileAt([pos[0] + radius, pos[1]], %) - |> arc({ - angle_end: 360, - angle_start: 0, - radius: radius - }, %) - |> close(%) - return sg -} - -const part = circle([0,0], 2) + let code = r#"const part = circle('XY', [0,0], 2) |> patternCircular({axis: [0,1], center: [20, 20, 20], repetitions: 12, arcDegrees: 210, rotateDuplicates: true}, %) "#; @@ -889,19 +784,7 @@ const part = circle([0,0], 2) #[tokio::test(flavor = "multi_thread")] async fn serial_test_patterns_circular_basic_3d() { - let code = r#"fn circle = (pos, radius) => { - const sg = startSketchOn('XY') - |> startProfileAt([pos[0] + radius, pos[1]], %) - |> arc({ - angle_end: 360, - angle_start: 0, - radius: radius - }, %) - |> close(%) - return sg -} - -const part = startSketchOn('XY') + let code = r#"const part = startSketchOn('XY') |> startProfileAt([0, 0], %) |> line([0,1], %) |> line([1, 0], %) @@ -919,19 +802,7 @@ const part = startSketchOn('XY') #[tokio::test(flavor = "multi_thread")] async fn serial_test_patterns_circular_3d_tilted_axis() { - let code = r#"fn circle = (pos, radius) => { - const sg = startSketchOn('XY') - |> startProfileAt([pos[0] + radius, pos[1]], %) - |> arc({ - angle_end: 360, - angle_start: 0, - radius: radius - }, %) - |> close(%) - return sg -} - -const part = startSketchOn('XY') + let code = r#"const part = startSketchOn('XY') |> startProfileAt([0, 0], %) |> line([0,1], %) |> line([1, 0], %) diff --git a/src/wasm-lib/tests/executor/outputs/holes.png b/src/wasm-lib/tests/executor/outputs/holes.png index 75cd2820fa5a3b42c5c8b42c60c1299f7108d2d4..684a73baf7a80887da11f3c21fdd18b74956c524 100644 GIT binary patch literal 96827 zcmeFaZD5quwKg0g3P@`ZtDM&AfY5r5sIk(@@dF027JOPuZHqY;B<=AiZ9N(hDG&%Z zRD2Ps4QMS=l+=29s6Tupv|stX|15du(Mz|DEx3Ei-mWikukSPE zt2WfF$ns*YxFY)>P1$S4{`fQgXoV^N%lK^HBtJ6+cdXC)O)JV%6@Pj-%j4M(N*3OF zEZgJB&l0gG-tIake0$ux@biHMX7uwF3mN6-rWmk|&wVUp8wGcN4jy6P{~SC*2J$(0 zd=4I;Gmj7f{G2O>IP~WvIK=ZmXZN85=JT{AoNay%9-o89=h8q>$oO3I2+qdm`B-Q+ zK9}FZ+3DxHVkkTPTrdq~r=Nqz|L?#f5oz2$;pFxSOVc#d%-OSS*o^v;)`L?A6Frh+ zTv@@aUbX)CA9{H24J~=^J#!?II(L-Nk~_ZclGS9V6u{AYg4e^w;(%;~(? zZgca*JV7jCyta8>+XJb*uOv>qmXrKJ*I(Q)`S`9!yV-{r zY{`gjeWN6RMOWoQ1_ zW7y*yR;pIse*dMNw^yIJeT>;v*}1E#T^?dy^>OnoAId(jS(VqmFmHNK)1$;b;?!<4 zlT}`_vHz{2#u~dC^t$o9+rSheLSdhfX=vfv=ip9_5!*`Zi#C+$|5Cm*Rv;{b}C% z#w{HW%3_>cDQlhI@{x@E#c1NivSzM5UU!>shyhivENfp<*8UMkST%m~?nm3B$JfrP zU%RD)ub7Di`rMaawvNfL_grQ2KxJ}e%yh&|Lv>hKPo{nl!qinRZCsm9k=ucdkklo@g|wMy~?~zrehhO3A<17Gh4@ zqMz7>jgRuqjEdTyOgXf`JSsNW@f&>mDHzDr@(k}rlJ8cw;|o&%Ta@_U<&%k_=9}Hs zTS`BbWnUjV`!ps+?4Ysjw~cLg<;WC86W9ALazjP)4UI{C&mEjeXC=RCIr-tlhxVHP zgCE?OpQ_1E$u!6J$CCT2InBGx9eg+c(q9R@<*d{4jlV71Zf@q6#^U2*@q=6imK@{J zUat}D%sn&J+>cM3b-Z58T|92V=9U{bzjtFvi+Dg)EYFORe{6nlVu^ah`}Ldl)Ng8q z`L_Tm?Dijw=LHhb@5xce}c^UORL`xa~A$5xnU;9mfnX72-ee^E&#=H((YDhc#C zYZHdu?7d^Bp}sWrN$IRT)>XWIriVB{$=X?%vzuC0mzJ!Av0h0zFi|%9FtrZzE3Tdx zL`Cx&zw%LF-J>x@jnG>biq zt8T_uY&Un%KKSRflF)J_`DL^zwVH!Hbr?l)x;>0Oj^&fN4_c)^B7Dpj{Son@`Q5rc zzp@Ya_E=M%Ojes@Q4EvY!>a^bF&VcrF9lcYvvrZM2z!NOC+wk(f{HQjyPd#DY=A$=mIXW@`RVT2`?+TyC%7sAEr5BTIuVL)e<6$l9ZzcDEiHb&YWnl7!!3Su#XBPw z#wBXQD0Z8laSAi6Y0tN+#y9^om3O24LmSsm^9Q8~L%%2ff8D3=wv{4GZrd?JrsI}@f+Xs7zP`t2_rpoXc{&~#6TE)SL z&+LcQ|D-bl3`)pPT4PE0#ddv8e!Tyjd_pdz0_o2fsdD%pjkJZ2Ih^mSOuzx6x*aW7 z$1({~>qAEtTIrc;^E7MWW*uL!lWf0cR_*q}&h3Ru&CyvMYrT#cq;KufQ=~E=I~@d+ zc}W;DEs8iO=oW}u)*}yxVpN6imm9dkd=&;=IrEZKX$LU}Mt8)lQwy?BB6DsKi% z@tk!CsAe76Hj&7g$uh8w6@pv0M^6G6$rFY0UJ@1PL_ii&97}D6BX2}P z;)Vf?t|U1@oW4#u*~Ed$ETems-B=HIn7*R~z70&D=(36rFdH0i*yzatkC-`daG3D; zxc53Hl9(820}{-_;A_mf>QqB@Y8eNQSIK`m0GrAr0UtHyuOLd5iI*#jpXa;r{YC1p zmEYF(F7r)7G}%0j8i;49N~=H*{&?k(iFAwsnUxlHoP`&$J)rIEv=tOYI}+y1=DVkdToDkTbx?Wv+*} zPL8&&C3CR(qRqTd$&V&ud~3JV!cXiQK`ZckMGndHT7jH# zqODsOg-HkJoVy@tH?IZ~kn2ny2+;8rW-^C8K>)Gym3Hqi2He3UWDeJOw)$Ub2Xi=h zVM_gP9a$w`L!q+N50%QPV5wnTpxLJoGzA@|7B8Qgcv({L3NMn1&;`j2m|mDU@C7b# zd1}n{j#yn|@(wt`W1o9mN%SSWBlm6Br=5eZe-7_xaPR8~Ca8dC$5uu=wlc3BKhJGb z+@3?07=F@oY*J_yk~zQ$V#Xz@vUS$mX3~Pqay(})r{By0&wLK!zA_cz2ZVSbFrFzM zLp$vKSr@yQk<)-3UZ3mI)B%T}d*rAsdWUKJ@RANrqUpi+&`a998oI9C8P!1oMy!G=>@N0RTRd!q%>lv(!b-*nZk7UnRw!xaB;P zXY=PhGtTNnL_Y28*}_UPH1Cd5ZKyM|sfJ*ouS!J_Qu*dt4OO!mT5AkVyaA{S2i$GW zQbt0T65@k=2q`HaAqMKJ_!{fyX8URe82*`nR$2T8p{AMWG|ya~G2?^=%((oLDjA(} zoy<5~@cDjTQ$O#4R9PE5kYx3^nGgFbQ#z}|%R*<@1!JWBq=pbcn&n_ zYPW*HAV8W9DZ8PF*yLi;^Qf zR}C>~m*yTnao|}_ahOzEB?7Z8BoU0kOzW`RLldRbkKP$=B4uIFlg8r6!tlPIEcYbBm?k zC2iivaISj%PGVOF`7YM8#w;RIVFmIfWTZpaEVlwg0zR_(Ls?rebOp85*f|PI`G3}$RkozxXSM~NgPf~G&MBv?ctPW&i>C_zZV*53nR>&>pl zZ-;jj`0M1R%hNeiiIO@dSYC}JjB8^stkc1CY4g82e%5a@;uMobj{>oI)6Se%g;2J~ zhaO0E&=@tzj(&=ni^IUTnjuI~8d9(_5R&HY^%uuZ3U62V$za`5Hx<%_D+2 zp6b3jrz*&*WH6BVMvg!40Vz!7k0F|+n%6~Etu`$H_lpeSKNP!IE;@(MeB3O`0+nU9 z);EL&sGvcqDu1?{{dW2fg<(8vGr`Ubq+_^2QSOgRoot}g&4y49!%W{O#u2olv8G7L z=8`bkgh&;p$BSTMK#E2{%qlfE8Wge;8Wa`m-GuteJO!J|qsSOp{6n(i3UQ+pGm%|6 zcJMJ=_hRN8OU*>Ot!AIzagq_o9STW~QI_0gh6HLQOJF7;4o8Q$k;|(@E{b3g^a@gG zR??PTtUJ1v?Vzuc1H6i5w>$yP`n(lhIL*F62b434U%Smf{PHJZ%V!;vgOdDe?Wg9= zM<3jD?6sWwem52ifMR4bt;(iClX)lbBzdN^lbi#D1?64&1c~BhO~K4jp@Z&@NkRbY zpjgh}gVg!dynsruhH?&uXaDFKGir}b^0E9JMrTyG{*oSNJ%^fdSvW+zz$k)+5SsdB zzfiq|zkpp?6n@(b;l%yFd?*MPBvAcM@6CBL-@HWuYSt$==N0#%=il8FRyBuYsUJt1 zFNii>z!cLJc9)d3%`ZE>fAhip^Tp~=&ZP3;g39rG3tKN7-urOA*IYS#o|zbk_)M7B zwtFAL)@x_(sqLgHR;j>V`kYt^OWFG)pALw8+9y?}`Z8j{Ye3fnxbJu|*S6j@*0KpCiiLyBpN!Rh~)dl%PUjL z_+H>I@kp1ZBEZ6#Hv5vg&|vjC)^($2Sl88*?UrC2iv=X_cu>uS*DW=pf^i*+2Q?U) z))N$+&H5lEa!(rU4>)38AUbmL>^utPrbldnv<5HSZEgwL`uMnc+mdeN%KE_rp z+vSnSl(2wp-iMuHtg8~9QtL5VbOhyTGVcWQAVto~pb$V~Y0{xeiE-lQJRJG7Bu57V+h?)(XpYG_CfN*bku02)Xe+LWONrkjkbi~{MA%M`4<^@ z*fALAXm08qsw(B03GVh1jVQ66>!^qOX zZ32(m&*X)wkb4B9i3euC_yYk!X^WL6>BmFkbqAhJMI8Nrk- zOh?R10WdwK5JlT^4{jD)MWf#8`@77KKzBhH6fEZfETy~0JF~_;Xk8Xioj1$AMVhl@ z5F7bM;Az45j7-yGLdc>?w=l=qr|Fmm8_*K|rsw@HNVLD<+ zjp4LEAF}&&(sPLXS%bqTNaK1OW;_D}G!Zw~Y>dfm)4;_-uT^uZ6Q}%#WF*G}$U|~D zGVB8akVx!R!D+?}Q(j+9KF%O7qp`kJ&FYp*`svDe-$_hFAZbfhkAhwl_YM%Z`Kog1 z7^1f?muml!4M0vV4O+;9;@xI_NG>fyc^o{9*-~eeiD?Ncj$lpgUR^LDW)DE#^YTYu z)>IP>I-#d#Ss?D&sArp|f@Q@qqzq8&xwOi>NBPI!A>y0%1jgB8(%RtC=9< zkBd@~Y*nR~5W+x;%P^M#p)^^2i`qTIXBL^XOoJ$Dv#z?dnu`+TY>^pU6L@MS)*M1y zu@2)ps8(a0?1xrOmj~z2xSm>H(xDL!@G9959Xpj>CpA~;BJ5zpl146&lV#WM4*|<97>lZR?n!Mq;CcLY$XY_Rrsc$TM#yNbG@z~}!pF2v z!z^Sy46EiuMD29I-1_z&@MZ0Hh^RwjdXAg*fsAEUt~Q)Pd~5Sgu^aW3!j4y}7nmK4 zPiSN&jTaB6`!k%XpYI68C)9-X>0Nw!JS>sw6ZsM;Ll7}gn@plwoJJP1)l5cMVUx** zbD5txHn3i0QajO745aKEBzecpYQ7}^@SV{XCOE9}Qp1DTV!r5{Hr#`1*nB}7SF9}4 zo+Mz?5wo7|Y6E03c%zvdUOl;TK&K4o=tyCsdr;Yw4B~OP8fWs^w(%oe;=1%9SZFz~Nn>Sx*1~I4^TNO3gRG ziv%AQmmDl;yK;7{b9c1ktEn;~cy5~#W6j;!NZ|OUhE=i(m9*KFvJd#$D)Q32o93EY zCThqRxSYroaduQZ)|=XfxfaeIJ0Zh8!7_!voYZXtU2bBgTybr*8^4{lPI0jyqn@Sf zzek#G7sReBnB;rosv6*02h;-O+RbXod+85A;GRk@IPp8yR?NSgb*IFmcL<5aJG2+&Yb#-?kREXH#1ITbTIx++r(2-2s znsgyoQ2?*;J+|<)d#9{k8YgRHnTZv}O08ucFG?MsDmz_dYY&wCM74$#&!s%7>(vAl z7?s4`6q9?b*cqx>JrQJ9Le1N;R|s2!Xcm+!`MUlId`ly_+Nv5nG!r%5D?;xGHO?Uu z_Ij}HX3nNbXs5`!CzSTl5m#w#lQxLgrEbzS$JuF_>K_$;>)N%K&vKKhnkxcvnh(70 z35h|&kMi?01!HFeT3?7{i$L! zg0Wq?YQsq=UqX$_#J`6{U+N2$AM{O|*ZAc%KFR2c*3K$m7! z@$huUId(C3U6ctO-^Vr*wGd7}Nm6;B;LPk?mo17tQ}qA9Mv_F?0tN_=eUlA@Z?*Of zCs{Nn4b!KB&vmj?!7UGC7c)m?6Y1o=Yl7_-FqfV{=@blhx2&fJ7HNC8Ofe>^9`*gD<;#w7#*zHaE5ACN zxXH7_0;zY2>T+p?C?jAOjMhN@>wbOgp3hw?DkX9>3iGD01uGk50ZWLm;+)e1cL{3dm zA<&QC9-s}>C8#0V&Ywz!BgErC%ZRyBdDT`@TPn|N7@6!`fwBU>QH&udD;5mfiRjAq zojm`apnT`a!D}N~L9-S2o5#nmWOoA4<}UdtJTZ+66iynUNdw8bgcx2Q+b-_J4GxT2 zU1IEc3aB?zWM}^32hK38I=8iIknVt3F_E_5Bsw{TvVasx(}@)mS;Rpj)%v=-!s=rA z)l8;?FzOtJL;>Zhi%8)n|A0X&QUiB&eXJP<0>1Rn-Zf;6cZcaBHrwpZS>EN^oD>8(4fA6vUA zwK3Z&ZC;yd8=uxkfnpWANZlFJthh{J}FT{8^;sXVpwe z;;_!GVE10WTHk#X+=y*xL>3Ozwd^DIL${|)wyy5_;HnBBhyNM-ZBDn`?mheTA2FN% zq5sE!Z|gnC{k(swfp6>HSAO^NAGr{)Nu+|Daswm3M(ZQgnQ$h!Fp`gp(5x}xS!2OjS+ zW~m)5n|cA^{R)Q7BdJk3Q~dibL`PEtf~nT`Y&N4gErDm4DySC|FmwkYD33$?H9;@- zf2j5dam+OsO(x}Yh*^6Y?95?8Gngn#>_NGHD$*-lrsJdJ8(+Kv)OG= z^sP`aq>x0EZIPiEK5VB-3Ys+zn@2>X(6*}hJQ^KI;`sPYL6~Y@=$vw7&jEASwZtbp zRbO5AwIyYT{uJGO+ti1j{_xS?K0R-s*!;9h)4sheR_3PdHZ_UL#W}AfK1#i^PLUba z5P08J@&rM#Ux1Rx1~Q>da>I58!Yi^>G=OVS@qR7%_G9}KYq`XEFuUDjE7=(r>f#a` zCn+P(BvV zohdu~$7|D2;1ErIt{?I3wSShrV}iJDAzNQ}eW0`qxS2X>@8m2gf?x)9(d?qIcZmY| zNCqe}V7I_u4d(Cb>ZS)?P-X$4}GrV=;cG6 zJ9tm?y%lGr{U8_rY3D*FM8ve@ZivenE@ zCTy1Jt%K_8L%aQt&K))y!?1VS@JvJR(|_5c>gyB!vNyg4HqC93wn1i!*cYFiY~OMI z$!)Sduc48Lgs=-omL^M8b*6^3w?cbSWLA(*Xz>hQaAZYo6Fr|@9AhhwGBviU7xt1p zytg?F_Fm9lyZ0QVu4zY?N;;-eb60ouYTu)`-CJLOUxko)=w+h#Y#!smYmTp|wHo+D zE*Tw5Jeb)r$O!wZG;3i1U`ru2Q0!ONLg9EF`h1csuAl5#mwjO}s|;`m=DLA$vh!W) z2-+1Tvx11`2X^cNKWu&J&Q--J9c5EdnthGvKSx(|L}!PZKyVT!p1-T~JFANSL3Rx< z5qrK=z1VJ3M;djV7$QB^?r^sK{dOC)+PwmPW+QR3_64e?W$bp>-TCZ_2O*K%c`MjN z6*PFjyB^OW288KjlC2FB<;!+3e}p@+S;#&aT!eLBmthxQnzy0p_dO<08=Swet!jul zx8||Fv!~D56?<~pYrF2v9dRIkOlw8*KjSaNwvKIWrV#5!TFP9Vy0K;6VvT4+IrlWg z_9O~15{HgJSnELGv3hJJg)6rFL@zD&uS4+uPHswN#Booc5RL)R4U{tRko9=t&x+bf z=_bp}Uwz}udyhuj$HY#&);aYWbMvm=|CQQ0e&h5f#uUH5F)4Gh)6VD@P{UbYH{CWN zzLsM_`5BqRuD=Q=(z01JxnpFWJU(k z_N%i1{qWv&{%5`t9AvlLG@YE#oq?BuXxqK3FAx+C&}d@h`nq;j9+)r-DAxzNOaKQ% zW#VBxr}zpldw>G*(LSUQJ=iqGQyy3!690m#MQde4WcjiREMX%EzT=x!1SzGFo2e7( zR*bVR&_Ifn^l4GIn!?LQ%yvsFz-)fS(avt`M;M;-$LCMT!C}IVr1UV8va)1Vg`E6A z=|L8j`X!R0KsT+-h3=ve-m$bgj*8QEX8&K%bipyA8-f3 z*nB<0$XRt^IH!n=(lkH@K7z~;Q&4lZ*lzzh-TRJ~nA21wIkH5aZLtv_e`oqN0@7Jh zrYe*YTba?w(BXl>;;THbN^EF%hg%7YmLbMn-MEq6o@bxtZjP~)Rhl4ybe<=lNT#gw@CK z@m$uJo$%KC3|oCrhukVlo30gHva0w~zYpOICx`;*0>>MJfo^L>g2Pc#`PDY?|9;*43S@{etYrThZ?m z7SlpmUj;)0l0CQJxvXzHp}_m99hwil7I`-Y*b!`?>42hh_s9FamH6N7_uKR>t?saO zRxA{}F$EpM^}jc>B@6ztbr8*m?R`n+Iwgqba8c>DjLQs6;<~7dvV`LX z(##_dNRB~A=9N$QV>sJ+At(ZPc`|Zcb@{Kyy$f`aZ(5*4@zT+1>$9hwSF%|8!zzyk zdu`<7gPWSPFf$X6l^J_D4P*zb_OQ#DWL;$>83YeQjzX`G%mRM}~0#*zeessu$ zdKxe4$W+5_P%AhWSzgz^0x>ssMY2DS%{<}-9B(!&KqO;}kMn+}3yIRN{rj+`1H1R! zcJIBzuAOmUn1Fa&sU-7sbs7B?;nA-u{#n<0Pwz7bk|=<-p`0Zlts>yx@a&hJm7p6m zi0~LE#INFaRrnd4P44R*Z0dJ{UVf;PykPSWsL_MO3>zOG8SE^7NWeWEx7Jm!j3sKv z7r%b6|J6%>Rq*#m7o~oGk6UJWUsI!mFU7>i`z=wxzd1)l-}0qHZP?c32Q%pBmY?5@ z<^NEin8<*g1MI+qvI(7yOn*)LYLWj0cXH+b!!Bj%jXhqfHi0E0^B< z14d~DyeWIVFR5eOQ463Qn9*^`O$}>Pf0&Uv^VXG>4d>rD#18Z_$6p@zZgj}df5fIY zkxO24NxgJUssFRMzO;P8Ur2BFYl&OTkML`$-xlmhlZdKkT5_B?IkXmX{jFN2ysRyB ziiU5)$ojZLO_1y_nuOt8tyRS@1o^c3zHU-=nycFKX)^l>)0iG2}|iO_tNRo4Cw76GBklcD5mZ$dxXbGMn; z|NGG1-i!!wB`o>u#vb~rzmT+IETmML^11bin>+IR1{T#W(S)AqA7}s*&PDD1aqr@8 zxkxQU*crF%M4?FkWFX5htyju~vM8BDoLygcHVHB`7_I%U=%;PnwloFV|kZEN!01r5}*LJKyJ{{FC*`v$FAxUOu_vRnIa zyEnH_&+fBFjQ@J~nhytU8**FD=$zb~Ieiw-pV+r=<)EBCJtr+$_r0FmhV<%QGb?va zPM^moo}b&4lRIZ!*}CubKXrMZ$|GB??0!H&DG}id1~RdvH7<8uI=qUve#j_ zfnGyFc7~=psrf%h0q2i&6?*yLMOPY+41hy;;yO^~1tgJLgcR5mL)CghzL=r`HL$xKD z6YP0Ie%$(yJQjM_0&~(Ur~7E@Lo(XYG9%M2>Xp-Lp}30tynlBa7w5>7EbcXD+Sdm( zeJ{6HH!+V9VjZg%E}WawXY}a)IlTt;={ca+ZT)lR%pEjn*=_yj%!N7URkNF2oaOHR+Z!VKn$pM=~cXHNIr0WgKf2M-!FAg6m@ zd0%d?oB@OEZ1w6TFqPY@*W88j^N-qJloQ0y)>tDkW~ECE^EDqv#{!Qk5cDUlkf|uq zM%{wsg3zXf^p=VZzlPtO>zI;eH{QEhq{rj}1~mekQlr8%fi?i)G*1QgQ>3QI9OQKC zFDN2|?I#g z9ectqWZwGr?cYsg+YiHu;%LO7HSBQW>-xGv?qO%$2qbB#coCb@Fc@fY8?7Fnih*~f z3fb+>D!Gpo7*$X_7$3ik2i{RdJ-(vfTdbj2wC5R&@+0aqD)=SqdrB1UliT#Yku~S` z%IP+G{MQ$D&&lo6SCC*tj^v9^jTk?`B4*Cq5jEHLx-CbLAx9=c++p!;il<^A-DNTa zjD3I=GkIrEzI4`_KOsMqN?Yp*$D;E|&#-%xB!699Vem+E$XI$vhvF;yPcUL_6ShK1 z8PZ5o#N;oA)-)cyBPrm=%(z*D%76+!3X@ZrHMa5U-oh3AK7>fY)VX-kZJ;K?K*bw! z#3n3H=`~`sjX?03nse=x^jUnH1n0TazTT@_u1t?LnT7UW5{Bg00;o9xtlcEw^c5E0 ztNT+Dpd=3eDO`(N#EzG6$yHG|)Yz>)M(E8v*2ffbTJm+D2l5oxz_;LI1T(+sZ^9rp zLOLFI8MkHmEF{BR2G8Fq;kD96)13Zd5r7m4JeF|?*BC!Qtfp^4PqC8$0x|%PoIy=j z_N`emXkj1mnjArmoL;xtzrc%3#K^uq7xuZVGQa4U7$?r$*#{H7PFN#E2$sGX2dr}= z&%|a_*O{!=1JBUSFTVH`H|N_R95;I400A|$u_d{He2yQNfg*v!G$)HuQFjSykP`;M zYaI@c$+4c)J=ca`c+%_~!PuH>2Ur3!en7YWy$0nhT)1xJ$ei3kIfLeGySMLCIU`0| zQU`<)%aLDO9}`YTp3~D?Pjh(%N#oqeTBOq zPFqKk=xpc28ViVSUxB0ny>e`5CeGvvg_S_`)WQ*c`!8IWGrxSoBdW#Vb_8)}9?yVG zL=OO!dFdLAL*~VhiaD^Y;z@6$rTWQOu#uV*pinYl5TTc>!*P$x*vIRR1eJ*(0=tC& zO2->Tw8q-4SU0L6>g;z6$MDlQ8?rgaAZhsW$&>B{u`F}fCq z4*$5Mx^d&FS#LbB_E7V0_CGl6l~rQ_*Qtb{rfZ z|I>O~i;8&9EIxW$v}30fQx}}v(Bt5zhYwzNXv2o1lF7b1?Bl%?PP{gCcc< z-f(I_Ma%!mo0W)kzO_>3tG@ETqiv`5rdBR*5o&Sd_lu{$)T6q6?&XI*`u$+}^WSZM zZrp^HKVRB;CffG2kk?y(b@atZ`{Cvu9cx#eS|zaA$JA1_V2VsynP|o2ujnzTCF9iq5~ylL)KZJ*vExiC%{*Nc-c?uO8L8uQb&jDbcg@ zWEqH3?~U8?)_dM3kyKp?ja)|du$@cJu-92I>%&{@XWlTeaV9rNy{x^|n@3~M5>&C1 z1VaF01a`fXVEA4}*V3&#C*Mz6^K~;3#@FDFGAwGv-nQKr+XO}W5v7@G*9a&Czz9Hj zQNiXnfzkXx*Jm5_Sv>H6iyzyAxV}v4g23ZiP-TTEL#E_Nbdh*kS%%PU@D7qgm(>&` z%fn5CvA08Al*w{-Ye8H)B45y335wJ~+U}Qx@NM84kC7iLpQim&AY%5{S%Q(GE~6~z zUtk0kIDj)XMmI{c(^*R&-ZNY-){PuJ(;_$WcJ0w$p!=ebB|D;9u8ngj-U-B;vq3J1 zj&8RFR5X{=UDkD@e|YJTsY*fMO?;AWnZof>uAjlK2}dNxEHSq#%c&9anc0%Oa&3A> zNkMY{w-HFHG>|0AQ5#b2O16tc8p27~SSFebH@KEZK=>q)ov)g}PxvpSYjk&VYb6(O zee_hA<-xAK;7Jj_S)r>7)xWJ{%@sCArtZdtBOl`9$HyzeNtwBV-@@NY31bmz=%_1T zI|;1I-Z4@MdFec{E;iXxq0zIL#RBmjFm~vgMdBima%LT@DmgfV=7Gtwy;_ObT$^Yo zqCBw>+hXsM}Npc?~roGnb`d zB#qkVF7pf+aC^O1c+UiM0DPQ$*A%r{ZMQ*DRak^#L$ z;-@}cu(}m{J1A1XQ?ZZAoXsgO&gi;vc1~H(dBiW7Wx0&AB6tT64;~$>Q~r@Io1Jo7 zrNVhw;tU^UY?!i73ptLH4mncfxV_vu!V&qB!!hH-q&nTzU@H6{QLrSguGbmexp^M7nKH)xm5oZ9}ewZ-qIBYr*~3$#UIM zYa1*D&v5e`w~|xd6(#H=N?Cl>@SwQG!~CdGxZV+=21U0bI|>e#`916Kt{>4YDl z_KQ%OCn!jgahBU06ZauuA$AhnJgMr(We}wcA%NBqcS)FQ!O>nBE|{!Jj(vI$c8R+jC#! zf-vOaV(+(eF$t9dL=EYRUM+w~bC=*MbTG8Ko_4zms8lB_2;YH1m#hAy_NwL@x<9k9 z0gr)cWLJy(};4TxD`X`hwQU&Lbu?I9ZuAFG-2(x?OoZpZTl&+5ytEG|2SYjJ~0 zyw^O`Yu@N~e@O&divwLH5TQQKa=SLqdQXGTzZ~SUiJ|O!bsGS@ry1wqLmCyFd*}sp zR@jQM$QnH5X@&Q+_HCt)d2%?AfZw_6!pzqhlE@g4x;=tK=!?YGChi{1aT^k=Kh6TH zw`ZwGD7MIb`%zYaH*I$2&04u^~00Suy03BN>c*4&R>-nN_CBW1R!RLJm!~( z{q#!aQ1nyCAU~oeJuoEI>-o;rC$mZQx*?Vm<+eXnGqs~xNn6R?V8@#GjWtigaTQEr zI~mXrANyG&L++QMu4fSjlS_k5*sw_grfv2~jzJSZvQ+Qz<=H=u=jje?J)c%)wFNv- zFZt`2o>$*)7ZRtu7OwtGNOOpog`_pyw|^>>S;XPM)Zw~saVx$72q)RsVj=M^m7p@c9vu!-x+! z`ErG~rfZVNqgJld1J`Ahf^!cc!4HmaSqj{g^)!0Dq&FUA(96$4Pn@M z{Zy?4so>!)1_G~yDszb?%sk*jlc2k)0J_RVb>J30x5+)Vo1qT0!4>xOjU?_geZMc% ze2I?#F9a@nlMntafrddCN_r98NmKF0Pr2r9k@S8d@j}xFAH-8`ZWu4`#Ag5uCCcw4 zZ3Xv0A^W&27#k7zYTs?H76{Oz8xhM=;e96YXg3ohImyibPc{QXcz0<&V z5k{o(@d(erlD&0_$YG0DJneXew-~etjeHoeOvTl_;uKRS@@nI!JT`$o=H7H)FybM3 z+Yf}gfKo?;Mm*{#>jX$4BXKm2gl{B4N|W%NRA;clLZCK=)R`2IpL(SMF~mL>VleM= z5C^`R>l@k!qBg>Iq!5u^8ajl^Z$eB?WvzG|6%W4!F}4#?QTNC?HEbjImS7vAoGB37 zPdISvq~mi)l58JAPc=34(lx-S>xlSA0IjLEFPcgbj-DIB)uPYRbp!BG}0B`+BD(2 z(Ryuvnun7m8(ZMnv>ti32kA(JVlghFKY4Qq{mp%W0L{1SfUVMZ2?^iB3^hUYkVXN;SJtq z0R05cAq6)xhx(Yqspz&ao!uDNazHef7{1@yWqpR7X)_+Oc@NEaAhHF2v^~Gc0$=ZD7?cGT8n6 zIlPLT9jFl6CiVAguTMUY%1)k}mNRgSbb9w){$ zLtQ)jwA?>4An(Wu(}xfjJh9Yb961qRT}Rn~KpsDXn#TG%_Xv*q%$xRMRmo$OxotbE zJJ(d&F9`akn|;-{0mgpv!!^acflw|>y9-=|v7Q9|h>L@Ar}@vG+I`hh1+e=iI^~tmSdn zyI2&dp$LXAbmv*64#J&L&)LjWHc;&xLdtoBj?Z5>r6szJlq^(OQ}gKNir#K!_Y5R>&u?;`wyg(tsj=E^0T0+s z19Wsha-3`yGOmQ9t#mH#DST+J_iSd$^;hJK4y?CQapxaRlDBLB|I8gzJFgT>4c=G= zPtX7qT!_%!erRnNNOj_8!O|Z#KRA`$dt5o2#qN{NZq;ZIhaA0$?g~@sd8&?U5GYUe zfOLCoh53P?*XFp!B5MK`BKU>q(s4MfV`BJ4DNk~S0cpF^!=CH9xG1E0-vyi0Y;l}x`o!A|j!)}Ag zdz}eVT0*w2$&vN#^Xc1t=vn+^2hb6{shE4mocOg>(-|PN+b`=q8|bB%odtPlxwR5- zAw>x|g%+E=X9-FEr1P4bFa-@xda&qZQIauN4hAloRh2$%(d&*1TXnD+<%rl;&IW@M zxZuNL&k!U|y4q(RRi-eZ-l`=9jWe?1G2NPpybNU;d8A$BEv|e%kHQ@(2{x(JtT5LE zli{@dt0xLp^A^H}=aNaX1yg$kwSg^={?%^_8Sn_nfXqBoj< zuw!`3E9>N`!C)x;f+UJ^H&0K^f)BawadQn>D(yp2*qYC!AZD=-`Pc4rrKCC{3cjvN zs0XMr6!>$l34^we8}6yLF8O7fj^)A>-BH2uh;EsiQrJ4BTJY=^9_>Ra&r|XJX%3TR zh32gKZ|p*-C`GE}gyVDwrnE!B`wNX7aL6kbWNx_R5H>vu6yPX9Yt={Ovuf;eaFt`mk_4iQ@Q5F9 z37O#e?yk2%@{^qB+(H=%yjJ$ZcPn-kp`hLRswpwhNE)bA1w zdW^*lge0et<^^^>rUL|Bh$PA30JjZVdyqRe6NRi4YSgg7ujCDAjgUy>zN8;;z|Mt_;+R$yJTQ{-R3FPR!Sby!`CN7ebj7C59Pc zKfUz|RXZk-yR%p$lK{Jp3*yt;sXR+)tl0_dZro&B`0B0igoy1{)=196ucgCJEXwx9 z^8Tv^fV~L7d2AD65i;rTY}ZFl-5O9;d>OZnM8___Ye_T@fwxbfYAXxQ%LsTMnym7V zNMO`M%2WMt?||>u2o$g&J&@J>0FECPfg`7=v-9g+PI^mdC$}x!u7n8O7vWlWH0SaJ zM~hAPQXUuX6Lj8UGE{H;kSL`$+TeNRkG_OI@^uzk%mW=Z%e_Y4-GN9<uh~139;vvJDT|Z2<+e4k&nue&UurfK%$6H5(0%G&~?ZoHz1fI@hosIDB zcJg@ZsJ6Ou5yjo8Ym%JdRWSTWICYj}xLAdCpOx}n2MZXpd`XxV-)I44pHKc;Q8-BJ zzb^zfP~b5A20oH4mDkR*GNU_>jG3q&J?3B}8Eyvqw_u(vlxI7a77S84e3o;+IpdTx zEvEYMKY1Rq0Ogn9RKxgH53jVs{+a0^`T6h>^N{io1U;2KG;7o zrio?DkN|u{E6&jP{q*Mm@_Q_=#xi+8Iv*z97IF%?kyJy$m-s$rLp(>+nGX1T+H^oV z$Z&ip;{7;OfN2)~RcG-L2nB0Mm-V>eaD-dO&(Vv{L_Xm_eew6-f@2hZBs$gjW<7*a z=B#{KDcP)$*VS^QnfbS18m)C`XYvHvtPc(cPKV|xQNR!{T*;>2L{4!=`Rcah|A>8P zl>1bt@}8i`+!&A7l$yohesie7tT5s%z zXO?D$L;iII-V@9=IUjl@Mj|h0KUfAQ7;Nn-oBD0U5a-*FL?uGom(7<*N5U+&Oz(k# z<{^RYJzAvCU;lt-T1nm{Rp!;<6ln}^zvUsw*2qXNxPh`mu0`8yrzMN>ySxqUE1Eq) z2&j?Su}^PmGwPg*LKnS?g_Rnn!VottxSk~QO@h7e+V&8@N&&!BKh|+vyRG>qBfpCc zWx-0E-xBkq&J0~Z*N8DfT}8Tshl)SQt;VR8_de{~d$vXe?+>7>FFU$AhB*-X!d$EE zFEUF~+XdkDO4PCD7hNkN!729{UDwMloFgo63mo$1qI1&NUQaWIF^=}GXPcRCLcG3< z3MO?HA2vamv~Nu3-}Pn3%j$yFsCeuHSb+s8Aqith(|lU`i;RX_wV5y_T^=~}7COIk z`4y(j>M};}d?&wjh0Za}80Fb)Uy*413(k^Hmi7jOY(a|U;fif}Dv#aTv^I%x-_)QW zRRAGN%h86)b_)hivH0DTT&RsZMjd>7Zh-M6%M|V~mW$s}4Pu(-Ki_Vuc6>!y%DMob z(%;QzzR8$N)8;Y>c`4Z3Gow_)+tWhaRQ(~X`B@y$teX8cPKn|zN!hL;O&ELeVk*+L z;nr97NIEl^>Ru8I*WS52bk*((^J5Yu%s48}=R1zQ7k^??i~3EX!z@n#+TEr~^G!@a zmNZN)iv@Fjxw?jI#O)zeFBuIU$QjyLnR-vdSm@kJ?+-LMh}ISuVq#=3aVh<3$zCoW zmR7EDiF@ScdJuVHjE!};=kTx}>j<2Hnf>MCM%2y zp)E4v+-)L7-{q^VWp!Z*{6_(zJymk94PiN>TTpHNF{Yf(;dpIXU6=s=D4Bt(e;}SR z{)N?6Qz9HGZeGPWtJtlh^C#w?rF+5rn4{q%@Krdd4hgw~s9-;Gp)!?+iPJNb#Ib*z zL0;>SG+9V zElfHEB?MJzT=mYt$J>eSWuvZ<>-rie|dktQ4%Ba?pwN#Ky|-HChl7O-T5C#Hn2mN2x3 z;MF9ek!--oSB13IG1SvS+Umhf{CU%c0PU2I9z<*oX{$h_i4<+zrVwuhCY#zSzZiHR z%hpv8bJ}VmX0y;#sd{W^-=ujYD<>s$U|9A!pYG{_Rf&YrH!NY?0^4?J&3q;_SYBxi z9>b(r+hU!vs_qc#1B>p(Ok`75Gn_izR3#o@aG%p-y5 zW;^}N&5EA9u`DhoW_#3qPWm3wXI`es3XP~18#08|F+3S7o3NU!wz{er6>Me+#{Y`UKqONx>vW3iOwxgH6t`q z%<)|etK)wpFFS=LfKS+MzRUKEHD6=SMzXnHW`{jVyvA0>RBb!nQj6Kp6WVVgUI25) zRx*$}A>oUsu`dy%PC|2Ez9(dD+OCCgV*g~_Lys)#J*uC4`5SOzYj@k^$$$(z_02LE zKv)Tg+Bb?$rP8^>(>`@^w$)d(D-@(> zP*}r4nbI(^a`vRF($?2!lDH;F@ZxLm%QY^?i*3WAW>8-`9by8n7eZr&oIamyw0j{; zZ}QiSxIZ6(!M~0zk!~-LzzzM>WKkY_G)%`I2p6Mt{V2VQE<zC)sjE>13~UE- zM)zGkcMzJVGv@jD`z{X z6dQJtPq~KOL|Lg_jDD(e0(z+iF1PD>l*rm#8NY7c(#NEH;Wo;}!hIge#W&hBk*)CC1I{zm zZK#gDPqbHkCh11O)Zf+Sug%zFR(PC=RcIWmcs+D#9?!tdZFB18weSi+_(r$+K9Z@$f#v-}7qeC3DokBlCI;G9!Z9WQf^OpqFhB93)MAp<+9KZB}s zlZLIgO+-M}%LfRAu3;$lKCLg@xUTSz)*>fH=>nvQ?nc{jGLwD2qJKSvP5HL(S^7zL zvJ~K_8!v%lUNzh49{KF!2=vuU8Q@+(GV3Cjc6_j7%RWEDjoQmZlG;3`8Ln#x{-LT- zI;ru(IwXh+Xl4m-~`(x7;;ds)%S}-AfnCFl$1TPVe0zB3@Bv}gnw?ju7=+p zyB;Qy-jQgQs5nq~iU%WLF(r}N38kc#@kNrCm(sIc7R>9y?g2z{Jx22Qb8HOgK}M7< zApe;e33na40$j`;bMLcO?R9ctSvMJ_-FhJY^G3jgp#1?~HgQ_ROSCztzsR?Qqx_jH zAl$X3D@naA7%Al3f{1mBq42}b0KN0s#h=+h(9H+@17wCyH(#u0W4d8nq|dv;ObnKf zXl0y?LM_k54g|Dt5#$zkpg`1(8JNW~S{q+s68rs6pJ4NDw@DhJo!=t!U6zrUQ6P_# zl=9)AYT&!M8kVL8sr||a$C^_7S1yfO9DY62;$?72*#?r23Mq~cap!I7By&iN`swgN ziF~(YbBzgCa!k#z4c6X^8p?cT!xMgaJ%Yas$H=VwRoEU<)sh*jAmtEyo~)dOS8Xqu zUn_OImVK_eo8KB1XSp<9NSuuw2#T{XnSOS@A*d~-|M#aR}p#W(!cg z#Gbd?EE&vGE+kJz&yaqC@d%Eqy`*Gi*G4RkTl-+nh1#;aoWVRy>)?tyrK3=DPB5_a z(*t)d4%{H-H(jao(MH^siRv2QhC9VCHBQrDv=@p3x`29y#M^T$^LYoJy~mONwJdi| zwE7t=QvsuWD&;2awX`h9j-JI0M5*j&vxYJGsi z=BtCSBHcHH#MvbdSK-h7Qz=T3fN0+wP%3>;RLxZxKf0c^`w zimZjt{1;pfQ@oLKlAkYcXGjdw*R_m7a$=`RSoggS-{kigRBI156xDgc%e=IxBx%ld zSe#*wZD(H`CZwq7!c=T0;DS(9(zd^@B$p8rLxE{b3!^mQ(n%9nWoiH#A1uap0)~Yf zJit)yGm_oZ#|3;_@j1d$t13}4-5k9gSv zOO`GO=A3$Xqca_{T-P&E#KsI?W720PpV79_7#q&iy@Y(PwiKvX(+0+HMm$aEivkHf zdot{7gmP-<{o2B%qnLH7Hf3w(Wr%xE>qd{6ZhOH}az>Yg7P%zUt%^Q8b4!_`y{Hmc z7rfIpjjYCh?RT={1A1!L3Gv=F^6uRPBGkql@6eGjfWr`6XO_CUwW%>c_D1PyN=*hf z{aWL5dXh<7sSo&1n<3|E;{c{YHkz&tcBe>DVif^LRn+T(Iq02Gn?F=#FFb!|13Y}Dw_V;+))Zh-ZUea7oQr@qg0RF1$OuaW8%LklYRTHs)H@l<2p@v# z>=3U9%t)8$h9_Y44UWqdQJkUYiczm*?+#be+E5@UhdJq5YLnTvF{W^7thbP$o-Lvk z(Tg%T>I3{*f`^YX;r^54+VG7&GNhAgLU;NmWxU4z<(#$N>zb%K^*^SI+vh7)9RLW$6b<9|)Ls244jSKYC*zG~(2rHOht2-`6 zT_BX#k7LKorc?D>PRT`HUO66<_GhQco_bTHE%%`9u2p$me)Jz;pb&D-?S zTHP_>&pT<6Yd=%Cr2qTWLO0r2uy0eZkg-8^aC;o>0dTreDb!dHdRXip6qPAxIb_V3 zZOJ|v!w-^Xl{JfuI!*Cc;VG(sDBe6fygTY+r?)a7A z?aI|!w}nh6D#p0L*D{$A;!w_o;g=Kd)5}AkcefCxaKmi%CmE$gwUD!@yV~&(05TRp zTUFemHH2DK##Zw9Bp;9($Q9g)II)8aYBmrOUqo*&ileuhiaw~Ts7h*mD*w6@eQ-@| zyy!GSU%ESJWj1QMFW_Y?v<+}F4F2b>}dtal>nWa*Gy;eFZqL~nXCNfp^KkSQeFZ9PqZFWvi|8ing)Y#WHQRhL@bFfSJBes!?L z@70Qei}=hr5uIK8>*j~-QsieX6aI=u?>D|iUk?karKiDg-C?HY9u#6Mi!I&~R8$AT zK#}KQ9YvLl9HHFpDE6pe$GvJUMiE&RVjMIp;(tGT{qBUv8Nt}hgHR%8S{JeNhMWRl z0OOzp15Ltj5H=N^k6@ut31N zt?iEKT!qtoZ;%Q9wapuPpGI=yUrS*I()z+TE}EVeAyRicq8)uBEU0Fzf_!+cMVmWi zlI?}{YqtR4?cLY*&Ii+zBwxWj9(^6Wn{6r}{L-IM%ABQ{!59%t+C_$W)>LNl8GT9B z^vozoIV%ZUzCI;+lz{g=&)LI(d{USHPPiCbiuziD6*DdL6QuTG$yXxm2(618VSo#x zXvmzLBsnbK;^)pGIHjoHFrn`v*!hc9Y#h3WHtKLQKuSAlI^oE`33GyIe<$ zhp2UDo$O$ji!ZBwgJl*H46Td^KB2(O$Kk6DM}d+jyP(ujRuzBWE`n~drhmHKijku< zd{+tFp-#=tAKTv{Wqbu3e7$3#=3n^58r_6r=fC5ZaMss(zhNv3-2xYV9hoHn$mNuV zj!t$F2GU<)rD=M6YM))Kv92(rYgDrn%;Fk(t&6?U*P%_2>p4Lqa+DDPNsM)RsL`%m zdv|=Kqsn&>pjmAfzyA&0ldy|dp?MK&^0LX4rsZQ)Fb}1&s>R0gRkGRpio?jAI;aJQ z_e6}E1`Il<4G1h6-8aIzs`ooSfCI9~QG8Z9nXY>*o3Q$gFlF_AgS>|$!u&{IZ{%q3 zgbJZGB@)5az1aT>|0ZJ-p}U(j%2%_BXB`R+pCOZaRlys22P7+7s49M-CIS=<7hT zJ)>rB8#S|)m|{)YT0SQWp?D*Y#MgSV8FEH$d6H`}45A{7i&MDc-ux>D=y=la0=Z~B z%4oxrinXWlHbDwm! z)hop_1)toUS1diLCeFnnS97f-3Q+8Ub+vWp-CQ&uERJ11tLE}fbQNHWhs=-~B|Ky* zXUlrO?XYaSa(1k9ceKNjFWP1YQi=}PxkSJnBy;HCiMw8fZv>Mah^d`PS(73OLwZ0i z7SeTmM&BU6APQ?+Y$_%?m05{!f0e(7+&u)mo)2NYo=wHR5`ITEs;jP+rdZy))F4FSIr$69QSwR zMt*5Bax6@8cVs|XJ`lk_l{We|E#LK8m+D1}p%cM(5W>RS!0upi3DL6nsJH_^AjnXJ{6;1flH zVO*IC+6(&?9lDeU7>Ct@9k>sJdJ4_c)g{dZVkXtvYr>WQSJJs7=t#Bg@|2Ab&z0Nj!pF2{Ml(`tnuws|>@Uxwd7bwA-c zP8MMqU18BVfne1%&wl%saT6O;Txc3oa4tzR8 zp^0R5kR8GPTi3)li70?9Os-4xo(qIP+wgsbJW)m)-z0{R39UjfP_r70;Fr$X2n0kzJL4nY#MBY z@rC_k9m)ut89DN}D0Cv*3cVVO9ewhZkrQOEa9I&ychE>Mv95AuxI}9;x3-50$(7aK zbDFGLi#^4VD?@lfhVZnWH{gU|?>P-u_zO!5NNE_mf#A}NU#j;axi~No9ME35W_wxf z9a0w0{bpA0e>i!5;5|X^3LB|)HnO7~%~$L9b2SrpOzKhY z>>|LrV%DOJVEjK!FHo)3?nAx%!jVu>f68s1y-y{+QMeWx`0tueN`q~mcu;8O}14o_RR!@~>Ryoq@X5S40N6>?`_DB&(pw{&5NeS>eKNU_azx>qQ)- zwj-2yrz#}HGb+!~a~Uli`=@zk><<{l5@M*c*i+l0sk=YNX}7XJKu+0Xdj_msymu66 zo*3H6l};Xr{*x2oU%F9xhT)V)s5{{bLGjDMoZEeXCzm{!dKiG-Xc=y5&Gd$s!}W;> zJ4}7~bq7bu{&_3ECWfNIC@ICe;ZA{Ipz|-oiktwwrXUCj!yh&eNDkeQW%f%Ph%vHd z+r=0;!2~=Y3)#5B_Vl#yx;mH|NCbYF;eg8_Vve^4k>Pn)zK+xfsx48rh4aoP#{d@r z%Q6x5e;DPZ@(K$fjKHKV@=c2XB+3(V4<4Tf_JH^g7rbZRwK_t2_qH-gmG$ zuEpxrX#w9Srdo?vWz5{e`e~?--YjAg6INfnA;M9s66l1cA`#{`80}Qob7lU61Ht1U zDA`O=kFUTViWJhMS-6A)-nQblA)5anwZ&&l5HHR;>-cMS(Q`?iN->(~5o?#z2JY6g zQ4`fRmOYah%U&i$qC+bqNJQ$vviw%=QQ8F!9a$KEh6Tyv9}J4#_aHdXs?tV8&f_YF zJ2-^_vLg*yt3&hdBJ)5y?{tLp#*EdZW;uSY{xX0pV{=%fo{1zp!urCE_WXCm-&>fE zyDhTjKfsSkG~JB|`jFvXR((ihPOivM`Up-M#nwxj685pnkRFhftdQv}_i6hXyFv$# zdhvT)-wn4lcz?&RP69FIB;ZH`)DwW;eqG{FK;aSuHGP~kxQQ5u>9mSuL!i~f-?zVm z;UfiD@V6imytreJ?(MJCS>h2pfjt9!Qtnt;W%hm{NkTT3uAH(M=PJ z2z$rKsKE%V2X){nT|Lvh8({W+HvRWNDV;EAAq>jF#F=kQ+_aBI)jws&VB8hMaJO8#!<#gKf1}`wc}Q&?r5+5`XA#Kzuhyw;4Aj2LC;SW;EiGJp|lpaW+uO?$&hwsym=$U0LVujqGRCsq_0$ZdY=up zuI>QA3$s#AH}Z{2#02Y5x`QLkOkWHg-|DipZ`=81DxdC`IjRYclOOeAbNICWgZlgQ zDjq_=6*FhsO@{-?%O7y4-;_Z}HzBAzxIfdEu~Xbn?KjbvQQ~mg%W^rUUlpL2LFxQr z;vouOTw9$%nF(ZWWL}c<3=T-5a%z+buEH>>h{=hlByMu>ha3hMX$dq46;+LsaQCnJjyT?y5cQ*h{Vx9Dp$wi3jZ+e$r&2yp{^Qf6SMuW zM#^JnsF4E4z)-A0kWC}?8K^sg7r{W?bCYoryd z@&`21$f+>Y7qo$$QOFZ2b0MFK#7hidlf~41Dx4NCpPD$S^gc>=m{_uJ;${*P-_6H} ztmv^FN)Kucw@*bHS;$2=_xF?RAgnVc`;qy=FoW{Y<+y} z%X7)VQJ77N&Hj4bkeLQtU@l3JcL$r>Lrct^fc&f)=_Ya%zj9M}La67SUY9x{}{)6ni}zidL|nk}8&?)(WMR zti(1+` zmdcRkxb~m${uaG++Tm4WbomZfWtqgzE%0W?XuJCi43ZBE`D_!?@ zBH`ME1L55!P?_hXbgB-6Te^c0y~hHK)R~yQWzV=hQNqmfagK3=W8LRjdLchN&tegXO2LPBWu(ob< z9##c5CF#%eprXrQ(Q+47A-fL3Iek^O0=`B@6b?vPfiu#4_;q1R?*;1}VV(C|6v7B~ zer4=Q_)q#Q2B+Nkp+s?>9c7~SjtOqc6C)^RAp#sy4EJpk;ZV8!TUp`tNowL*#L_bB z7vH2uaLYk@0T`sv8lLtA6cl_N@`_-JBadY30n!s>pM9!3R8~lKAuHY}8AIz3H@ZR_ zh;at29S!fJ0r+sD>{2lq<0}Lev9vW3jLT{$ucRr6P>8Bv<8%6v@r|G^PJ+~#_l5SV zj24hG^a);gSj+Mi85a|~b+A>c^rPZY0y?B)LlsS|kMM9-IIp;rT+}DmAmCqTlWa-u zQqJZ+s%owvX0FKK+FGu61*nS5#tJ#QBAC;>4Fh3co!(z<#wy#!MniFtXAl^8_K&Nu z7V5Rc7#Bj6ln-8%bU2cEz-d9oZNz3QX&ciLTBQ9F%vA*wLs{Hf8^i6v>vC2~xHrC> z;0_faYP;4fyPyq$ebu|iDc~9Ih?NfNWA^%-GEO?vAD3Cmb#`)l4n-Zlq9A3-rydX* zI7Ckr^eF)@x5ffVSS~GOWfootxzt+%1M_Peg*;ua)}7K?W&02oRr)FM6wSoKO6ik< zAdMMobZTVjNP*19nTX(LR)VZ7zQoQYIfNUJD%vFfj!chbN)v8Ty@4??5Y6sI9?6Zt zrk;=!R!YYL)EVR)S<~eSqiO*wtkz04%L)HZE6FVwzMZzj-=TRxu%&sEwj8}tG!Ti3%fS1ra4@!RA69kuyr>F%9T5 zNlcY6=qZ)Tu(|Lss)WWSG1lGpK_Yw5U$K|pWCNSotm26%(^)sE@VOSB7GNOH>`b_(L?xI;jFVw@V)!T09HzjahFCJhn+t`>0FJJVEd>^HvxTV~)Fc-AF#l7W?36R?seIU3L=IqgWF`h4 z|2&oe5jrx=5l)E7r5t{^Dm4J>y`S_KYlg~{E-=wJnv@WR>{cqkIj4>-3hpKdNK`ci zTay3Z5bYsNHW$MQ3nD$S>7om%_PB+hnz`Ik#v5lM54~HH}n!ffSmjjnAV_Z z6!E=WEzAIP^g~K%@gPi2P4Mz8SvUoi?kBG-mp=4V)C}i0)K`MV0fVYI06306uAB^` zL6RsI%6Le6!%W(WhoS~^F8CW@7-l20Bzy3GfW$w^M_ps~Od&pVSwIO73lU0qjI#7C zLW-#OU#1->TrNFvBO(wfy-6Y(A^b>|-tntAQF1nnj1_gSjd^k~o_fyBQiW+OEv;sS z$a#wjveA?}2R$sOyTBu2UR})xLEW`nL@+1AxQa1E({jAU_hh`lUvfN5N(?F@no^=# zwy?13EsgftjvJO;9@k>3c|$ZC6vCAZvYYZUL}{7IZnBBvFn~i=ql$0}j{;wobL3Q` z2$Zd&v;=URFxb~rDxo3DAf?UW2NeBk8*~q0QG2|Nhp9Aq;cFC{1K_J56<5*}{5}-r zrusPfGM0p))?Q9jYgX|#8T8DscqhC4T1=?P4QaVxzUyZP`C+lq0)>wfZG z)Ro6QSkBKscy2gPJ^zK-S%d7jxm~4?o4|dx^c1}tB?aWd=YA{{;e9eakV$piL1Ty~ zdxfTd>^+?SJI4w6S1a&8usj)qf{anIoYr7b?H!+pSu;vK5m+F3W%dAicT)LAE8;hz zuz|$vCXPQoHBBhha`M8B&tHih`ablPks8VNakHw7CZ?+ANJwSsn~|>IXL3%nw0cun zu6uTWbzf6V;R@?gDR-Q|`*j&SFTk%=+)6*fV;d-Sp&|gnD?#SWhHf})6vJ} z&X8t4po3oZji}K#3LyJSpGq}!x!XnGhjmgB4GG$mb0A@yd&SPwMTG-6*=6xCa?1Ve z1YvZqFv3bkO_X220y2S2Ahw#ZJ&0sQI13LnpP9vQmZ*h)^HF<(Gc1{A##MOk}L zPRLxLb8O=5*;bg~n@-q?`jX@VE~&~+R5~4OTocN_wfSFi2;;5Gf@$;oHA((8!1{a+kJ3%>h+|`y9grz7` zNge)7KoFZT&}H`n4M^|8lM9=`r}d3TDZ`CmxfYU4}A9 zH%OCzxyOescn^@Wk+LWj?fTf<>_}u5(8(F;vih#R!^Nzm09I}rmR6JK(BEU~5Ka~- z4AwG4WSJ4wE`DQb1}hI#?iEd(K!NPNF)QWyiBk$*Ue?D?ybsNp4ChmM9Wny^Mpyw5 ztU~G#krT6Jc+8QBS)!SQ6SJuSgd1ZLvlXhuEU6ELw4yM>C-kBKj2qB$3Kpu2tng(- zd{BzRIe5BqE_T>LoCldo!1x;9<<>|z$!QJn3Hi)F5{m@m31Tcjs*GMzWZ9rF{#}iq zK;ax&YczVJ()Kp#0E#O8bd0^YK5p@A1R>CU%--RccUi1t8VbG8b$Vz9Tu7>DTQF<> z&LOFi6`l%-G(Uik6%#7BXJks&uVhX7DDa>ns%jsHq@5Df4r5am&yC3(8E$MMhy)fJ zH*nBWpU12yr^v{^gT{vq9D`oOi0n>Sd?=1#${(4+X{L#+)D$2CV6Gq>&?7ToP?~x| znosH*t~GKxF^*hP@VX1ZHS&IG7CSpY#L;PZjET@;LxnPCclcu?QdAhMIgt!j3+MYF zIF@i~(J|5FYssmAcFOLhTL3e;%>vF_q zA*YaVoF0fNGV^(qVN-KfrKqh^9Ct#P9g-)A3pL{<2(<0g4U75#;h2v0d=Qxt;MY_H zNth{j!4Mk8bHZy630^q^MnycFJ*7;q((&d*MA$51g{~h}3ST%$m@Q(Im7Woo ztTYNip>++FP zV4WKjvdY*&+YyN!;7Uq)cO>d1R6eJwr!LAW$%UIlk|dm|5~g-|2*q3k=W0lmQ-T^o z()8fymctKD{usMMWS1-b32koVvNA2F>W0M&Gf0TTu!_Z7C@@VR5Biuy4=E!Efd+lh zCClP(a?`G0^wUZam(<$G#sTLNMn)9hCC%C@?V}I^m3_>dk{tAGk-ICUKcSDK>;suI zCe0+r7#s1q6epFl(h=64PG!1$Kin(#yF&_Xqlg@TQJSDQhaW>c^(vx6lZ zxYR_IPPyW%ZO0lGY_m_WD5WEv4}livMbkuX=|8qguTbVvrASQ5DW#&2tz^MrHl02J zEc_rnO34tF~DxwE-k-TjFPk1a+-2BS(u1CtK1+K0hq01HRbjwX^A>w z#y7xS5{x55dZtJVeFNMp(f!x7CqFUj?Uf-sa5E^R`>R_QdEeInN) zZAU?A50Yubuf0a`1sutlu!*OwQlNB82vAW+8C=XAlQ@)KFzLN<60NcgQYTuuctx5_ zD`~tc(MmN8DeZ141yzhX%g2Pkvnk6xf&4yb-IrX2q6uTz7+Qh>ydqs1u7+gF+yHGS z<+$ZSzmCeH_YhiSUP7(bIPeS&+n@!4mS6L8#(7cUb0&mNUXLfspjVj65$KMTJa_4s z@l_9@_`yUqfKWJ;B8>O}T$*Tp$e`Rq#oq@r7)ot~RYLR6jE7B4oTjK=^(!sDTbiuS zugY=jL*t-Q;T*k_;tr_LG6s;6Hps3G%ZAc3bU4t(?`o8}ZqnQ2Y6-ma6p=tX5b+zR z!U}mJ)4-jzLP4`tdSOhZPySUpJE<r6f#(|#PGLgblZJXLYrRn#I(VTrsRB}0UJ$GD7dXC?tw;n09jB z1%e}}mc*&^?BL%xd5{G;P)9Hg;oqa7@8Inm)b@$Lqd>gY@%4qq zzGfrsV)#$dF~g_1GbV#dGQWUuv1$XM7^<6qRehgyP*EA)IFIs;#Y3T3r2tH+C}2`L z1+8pvB*)VVLZaatYq!WXMXoiJ2c_dDKnQEu#ED9(8{M`A?lM=g5Qeb>*!X>@#LYTtL?$ll3@o#2tqOHCquR{DNRR| zErlksfrN({K4oaHL}Opb@R9`*CttaK@$ttW*S+-8OC|rge`ED)PaO#5)n2`J^=i_g z-@G)Mz4l8`SY3WrHwNH$E@>VXz1`b^}@02nK?dI5tX0yH3rS zfZu79Au~e+xSW+IicQFtAi2eC7?|t#sfJJY$^?dwYGL2Y?Z5Pkw{HGDD*sej&83){ z)1`|WkBG0Ed?yNRaNC}H4DJ_AUw98MN}I4S$5*ErzHat>&m8!BX6vSUh=($T#wufH zs_{fw{`tzh;pO5PL-2CZj*gG>fSG4C>bwFHF-lycS6(AJe&Ew| zVbW!C8%F=kG*NaqlJF2mrJ1`FJiBmAikBL1nebDJmqreT zc(t(hiD%Od_U_$VFXuX?_jP{w=K!w= zh(IxcvYWPNS8~rTqra-wS(S_oUf@A4#NTe!5Byj^@Hn`|%jB-w+uQq1BB;SP!3k{) z&0m|hW=oaH*bGTfX`y-ODf3X1PVhHM^2f}5E6e1~Hkpk#I%2(vJU=NkP;P=|I$EWm zRd@_OZbMeqk*Y(7*7veqWm-R?@&f7kw|nHJYyJL1z)^Na$nxxT9uU+Tfcr7Hh10H`}VJo)z9lU2%mkLz2&#x-MO}A z_<&GdmD|1(ykcb_?|7yyJ7B-QSe(8XRI{xzYkOrNcxClbZ}$R=&uM}E1D<*oi486P z#V_7V%p6%2mGk*4dU1!X`w?wucUsRCoAa1+ZPtYoC&c`Mf{Bj1HgDdkm%d~0jOgK7 z-5(ds8@QtPZnFD2(r)ih>n~3^5E>oy&KveS4LP0!V@IX$lho|p%~__HwMRyOymROM zv!+e!wbu)8p>1X?$$S^)9?+W>NDuy`zEI;3XsgOc1xdGl5Fe7O$Z?c&r+7#Xo_7&a zx+`=tK6o+}5^h`@3JMCU1b?aEpUp0Je(b;-McC&Rgdde^5r9Z<#OPz%`b+J@tT1w! zg+Y1Y-3Ltl<|ZZGKrTczTw9PHk^eYyECnSw|#h$&R3vcVNMMs6|JAP^Qni1 zUr6hEz$TXD_U8mg2h&Xr8xHkNj&5kpX+L>1oweY3>Khz`#ijH59um%4>gMb`KQ(Ug zyzU)#-y_;J8#WAnG1cUYvTSw~X9oK~wEo=?{5P}voa@-pqnmEGJulV9&Fk@44jnp_ zeS0{~wJ6z`k>R{ByTtQ}c6xpLAK>>-?XCW7d489tqu!8rc~`8ox6&^D#gcbwMl67c z;5oA=8T2lW$>`J)DD7R}6zYOi7BTr3KHF8Q+2}0Sg?3$d&lk0MGO01GbyJ`lO9AL7?C0fId+jZ(B7Ppe6xz|(EU+SnaqrveSbFl%3S_~Esaby}D*3nUuG-?JXvx}SzMJGagw6Q${K;e7)_U%hSzn$nBOm+=kskG%d?fBi| zD~lQ*{p9icl75!4=1AYCrP8(Ymf%dwc}VekKPXM=eBIJ`{ZaRXJ=Ypc+Q27!*XDeF zKDq0^;yu6A83(2s(<_#xz4d-$sWoZn2T|F+nJL|EZEZJBZ+94CK9J)GZ^Z7@j zvRMzFKJ;#B^6)~7_f(u%XI^palUy%^348Nzf|MQ6OYnM)ntXqwXC zknOkKf>fKqcw+N_rq}IW=cU`ow>k1_b3n{|c&hhHHK_KMMv5G$lw6eeSy468@*p7E zm5h==m>i5;lZD+3grmVT%bfOwYVo++>ZsLpEWm6L^E8|9#cD7`q4AzTN7Q? zA;X%usGokb?h=$@2H!8rIZ%|l*Lko?yrj#y++jRi@i=Uj7%t2ytIR2gH-c5!;jML) zRK*G-z4^Minf?w$qkNk1nb!&a{mrMCEtSNb7qw zW^K+Pv=Wc*tQ!c99@Z@{e`X?ZL=3*C@rydTyWJ<-+fR(9Cv~h6{GblM)GW^^p4YcZ zC)QQ<9}Bq-R`vTA%=2H0AMxw5&rKCFYtl5&9a-1kH0ZFl`T-SnnetlJREnpWw^}x< za26=S5~=%vwDzU8KJWushvJew>n#n!R(3qvz+r7*4@-YZ-B>L_%DR;Nc1L~Tpq+>L zU8A`DXt&xobrGlAJHi+z6O2J}$8K38EFG{J)V$I z$g>E{i8O<&e-<-Mh07iN4(i{b6ZRHtceo?j#+6*Ld(qBn`JfiXU;TzhANiXbNO_Y2pzHm zrP6J)I8@(IQsa84e9`=jHPx=#T+>F-$(*ALwEolfHcz2crGK#gx1U)q{q&3Hd4=cXwn6IzHUx985f$J5n^}dMo1Irq zfa4g_3SeUz3yVJQtF-&0gK=}fby6O6lz}pn5zK?w%<3GwrC7Rb+NZ)!EO;fd7eZEI zidP{t@x+72PNz7kHOE;lC>EP*wosRlR~L{q8*@OM6-!zO4!&tP>ZqsUu70C`g@yTl zF!lYla9o#{Gd>d4VHgg;(rBO-fatJdR5mi`cJyd=5cK^4yB`EgC%g(l<+0(W)L~} zVNj{vx6(VZ*##Y1w$fiUK6+z)eYr4tc0qF2CXMH{`s#)bjpVhwyQi_g|8!zzX1vYw zIPCw^``<22@?^p-xE}J}*wEaOHoR2t45jpR!L7IGE1S*$`yeo>RAT(LZVLi?!s9h~zGIM{jGpyg)i6Ub7f7#}ZUYeZj($iQ4*$MFbUw|HI_F6; z(=V=|k}4vzMt0grGbEQDKl)aD_Fk4pXD*#!9wrJERB)KU9_eKefHmqWmG>qnXm89# z!!!%P_PM0TGLv)Rf&~kT(s}^lma|FeoX0~p-%8o-TD)841Hf6#MLao@E{x39c&2DP zt@H-$r@`nyl<%mt8=WT0h4aF_#UCC2T2?+1JM_1L+LOR*eIwNe{@H1o&a}F2e@a#6j*cUF<;^*- z6doCDXc1Q%T$kr{%$a4V>T9xOLAbfYYrApdiA{jG0#jSE#o)Ell&5X(`|QD85*U%& z>9d}jds*qy+S{j&_>fyb_wq)Kg5nZGAn@I4j&ZG?l9lC z&fDnnvlNh%p-UtuU~MoHT=IX{+yn!=JOmM4kCnx6?8eyR+t_-OeKH|kdY{SfjvYHz zvPe_BgiM5a!RQBH9d4hVc|%M9j+J3xQsblL{YN?;6kbToUTkZv$*SLF3jWD%ys$DY zxPvsQ;J0(Gx7Ms%@Z#dPUVH6dENb|#!tB=*;Gy0vV4SSJ_*l^4PWy??P`a}(DV&~Y z3^5O2X=6vD%)mXM1$~jam>QP!5}WpX->j!D89ibF&!4#N_!)Y3Ldtn6lcy>r+eDX0xj- z_;io~0nkSYrfpTRIK`dlvP+3H|B~X4N6XmA)b}EZajfnW;j+oH^jDR?M09 zDnQNI-TepeMO*L1WdDQKtTT2+$uS{Jf~2kru&WC!Bl9)>v#Bv47fd%=wmhqY(qFZ6JB%}seDj|2S5%xoM#*-0KMj)6<)`zgB#WE)6 z@05vmeni?Uhz>z4V?x2Smtt?0SCEmq?g;=P^B7vEXh6xLPM^B3OPb6@ZJY0p$uMXxoKFWNJAMRk_= zDY$o+&Hg3#X ze>Ca(H}cv~j<$fE7Mze+u3guDqjC1(`|AAe9-VMbbMeK)7i(&2av^mR4{N}S1*WGj zIhgRZG=xGmxvnD}pIWY6zy8D~F?h68*LY-Y`F$9yzwyIm86E8Jc}%xhhMre&0H2<& z6w$c0Tke5uPwXjS8?h9K!zPa*(e@DxC)z3oZmd8yZVSUIa_$rl6O9Y*_PQ>3O6Tjd z_4l1(2B6njdoum5V5dR6<^WT?O6!@bZHFF+sO+iGx#u(c|(;8hNc$&L>M_Ci`iLTB{6W(Wxor z*u1ChfcuB>Ma%_-Gt)Asqz`#gnATM|B|4hP$j4*J716_3mq2n|B&Wo>z-{6U35YkH zSf~SksZ){iltkz!#6(nfb7=dhq(rV(X%mLLc`6+yRn?%P--r)@y~U)OOea~=+=450 zvZC+hk%eH(MZOw#xYJ?s@D0#BDV`h@Tgs-vlf^q7>IniE|J1^$X7A=0fffX+cc zPMJ)SO)wvYj@sTzS=fS0!?MRDxoud7Y*1)~M29B=Oa!UKs_qrRY9|SNmp1Bz@D|qL zsc;iHRYkZ?{Vl~AAI(M40ufn$c?f#-&&VYsj)wd?_DN?5$|3Be&xX3+FXoA!jNvCDNWfh2(qqSoakdgKO%d$`o$-iFHyotY4rO!zxbZQEygVvy zU(|T2z}Q_ciC~W6B$44&!?CKW^Gj2wO`GOkVIO`(?>nRk^jM_7Yy2Mmr?76_@zoVK z?UV!za8e}@J_VW~B6;o=r*irv?)i~vdeSQLVq*w@yc>X?9RFmMZ4y%@B6Xm-LZ*|J zaj~ou$nt_!7$m$YubGf&79W`?r7qQnDs(5S$#VSBMS0x?#-NM!7Y(=uCz$*POj4li z%Ad>H-0p8}0f=3gwW*|Ms@8K@kXC9(8U<;-cBn)Cv#o85z^ZM~CZTR46g#E_C#o6A zSj1$PN|m2TzF;+GSbE8zg2Gcv6H1Pv%v_?;)?k60*ijJG#Z%ELa_YsPnzszzoKA(z z3!REMHS+qCS5f9lJhss0Il z4+$x;etm^cx;0~$^;+pLzD5*qc5S37^oxA4mPBI$Kf?2bB9qY0EPt5btaXq-z^XL# zpy}z;6f--BibzHQB?-1!aG~#43j|9ht0g}1q3<9$~P zLqid-terFG`HE$ptwD$bN4!L!z)#NfXbRf2V_O_doIlT4oysOIS|vj^pUCg;u#cYy;#B8=TuR8uimf zQ(XhIT!EEPxitj?!I>+LZG2rauPzVf=HHAnj<|&0dZXVZkW%2E8ZZVwL)cHeN6h1K zR%YSPJGIBD%twF9ZJE|P*cE^};`xRjoMj?M6xqa}M7l0HQBhCYEf41aDhp~oS#7pj zh#ky&))q?)3dIk6f+a94O7{}}Qo<^N3x{FnTbctw7>yq%ewOgcs&{?RBXi5{u(vNs z?i@5q+iSaLr`5cDQcBqW?Gh8(fnms|m;?FZeaV2b0^aN`P_?lN!}y)}Jtk@*Ug$>~ z-eoU1C#T=hNwOtw={1lSx9|amk-a(&A|g=Q)Y95gQ>+LEnHZ)LV_FuZxp*<0#3${b zA%_SZ%wgMsYQqP>qw<777mn}^v9gYfc9RhwvR(gMkaINtR^biZ=-bvnKFrDDKbf6> zqdxzJv%00KrX`)`$qCllvSX4FfOqXXfbsPKSL z3Aa}X)R@OxE7(b@dKZ`?;Aj>~HPB}>apANLLMriFudF^zevb?u&^`ujuF&7@_D%J% zM*q+w1~>XU=IJa`PFOCXB_@b9#)n4?2bIAim)?kdAJR7BACnnk5(DKluH^*OS*PK% z5tm5=5W^f;)N`a>Vm}>uQwRxcNIX_I0O6@!ob36~?7yy&=oSI<=aGV=Qd{bC^V$jr z&GX#`8kS7`e388=`YfD)L?R)RhN8)ZDWstth`q}3%^+hWsJB)YFfyj}5o!o04cUqI zt&oPI(P)z)RES*k>S}kDwxuY0Pij_aLiVmozt3s5c-mJqUo07TJ1+DMzzd&mYK2-@ z+hTFky`Y}VBUaG^D$&O_a(fDT7ifKSOdEHpuyhTHR?1M_1VnL23*um1p#>SpqwLe-$3D$nu^r{bA`T6}w4}2jwkmROFM5FMky>Lx4IG2uc#?T6VTO!X)D666z7OaxRKnq8#EWb=$oJ@&mn&?X4n#S}c9e+g=bf9?WeTUDR@od%mhNW-Rq^H( zeTbjfoZ~;8)*5(HKeWx_J)sGni0XQBL8rc*(|i;qRFBt_*$xJpjv1!;#1PGg>;+f~ z^)64=fJ%`g(R}3T29qfaBI^>q2b2L7<42|=ON2_O-cBJgMwAtJ4|kB@bxAy7ZESnVolYPb2 zX>W((zE|+Cv2_(Ei%g*AM7aTWuh0wtIpJRh?r5lHyZzO+Cx@_2H#}M$BoLx3TGo=T zK=l};-CmZjB~$1u>aHBJ%ghKVyxAR!Bq4<^E0+P$MmjR1P$^BpnO zC-&CHOIy(>7iM4BZh1IrUH^^zN(pYlRvB_f3ElvvXTR0P3VH-(fjbb$!>l-Yj$kD2HF$8+#^N6UtrUcaUWFJdnVr{2D7%dVmcsk+?MvwvV zLpYa|>PE&$GoQ1Z>}hOfioX70;$6THi`4U@z5Qv`MUsPsM#F)uStQqtRObyOX`1yy zM_qQZ@ph^4)_G|lUhjt zN zX5+;~&#xQ}t(gI+*+vOIcY$`GbHZk**#>~m)oE^!mOzZ}a6qwaMp`JP_LkFVO22(< z?PmYbV+n)LsgHLw8Y2}Wu3&~CgLw^xdHw4P1I387*OX|tM&s;NH)Yx)tL^|(;9czB zV5vx))?lX5X-aR!OlojYJP`F(5J03ZH7yA-G2dC#J4)>o*!?TdSvSz=8ZzK?u$~`Y zg{oPgyfPX12E(bs$UdWcqNQVv<>t&}*8@f{v)%h*C7(r_FYaD!s_p7(2Ifn4X#})7 z-PF`@F{pjaWSzU|_P4Fp%>3pA;djlO4&&b{)#*3Pj&h?9H$o2FHZ$0%7d=ITKcs}8 zs`rXF7>v%yN~R{VMj)v-QfgI!XoMuG=cP|hnG54})988251s^sx~UZ8q8?x`lODUj zfP(-F^F-*zyUt`D-Itf_Hi+WOtmD#8AdOn}mP%&zoK13GgJxE{9bpzU^d{g9S5^zu z*sQtROu^4I{txVd8oU3^dadY^-VnBh(cOWjb5i>9<;#<_NNHY7hlO@g05V)%i`W)r ztZ(V>Pdid9Pu0TJuk3-OgXnCM;vcrwQxX&txXJ=u%X%bLsyIDhwe+gF7op7t?`Ft6 zr;1ZU_@&4<$N&EnX>zeWp7#cv28nf@8fY&xW)F^1|lp_I03Vh(VyiZgHS zLB|cWAWh%{blhhxjdY2OSUN-xg$ZYhFb_{jDxx@z;$S%+EXxp#*sX zgoyHq;8OS$NJST=1S-JGdnYV3TaY^Dp`pf%=K+g`#BK)xO&A@R3b7RGK>GPX81Av;FD%Ikb$zz?p@l^`I=!gECatH5qWOYv*o)%K&EVgUjjQtaLzpX zZhX!*xM%(7%i>geB{GHF2)=Z;bu8rN-fK*EPvV$V1htKL3D(OV@{WEniOp|TX1lpi z0!Dx5JTy)d5N;~9C700ol)JFm>O5G!H~85V9xy&&oEASR~OkK z{@%Mnn2w~;B{Z}6-@evH6)mg*$<1;WJ}fq3AQC?g3}%&ZhHhV;f&{m(ngqu}dYb#p zLwfy~KA=pp=xdZ_Ej*w4Ckl-_~M6$xWSC$XxuO{uY+>Fobi!Ano1^o-aB@ zAc8WC;g=cXT3zH?6+n?fiA7$^0*R*I#~Z~F*is^erzELN=IOSXae*u8?mWBc$CyjiLTGf(r+;9 znQIbCN1Xi0QZczpO8KJBGo_<(#sT*Fj3I=pFjDBn6%oH2flOKYjTiBzuS9(GrVEW*||oSZ9A8RO~~k2;mGbcMCL3 z6uow!LLaEGGbre%k`@*Y!P^&6Ipr>;;uix6B@PQHe3HrA@?+rPC}BU>7<`y{AeqP{ ze11#V17@-i=$lHLq96~CX6-6W3=sDr>XL^oNey3;om?uJU}C6rj^IsXATmS`i+mMu zFa}DDhaWTICfSHH10$2Oj4BT5g1Dn5yehLuZD*krcE_JhS`?!F!iK{R{Uf_MOOc2s&K8!MvTKh9ZtQ(p1(D3ZY|0ivyF`r-d zpLc!02HmnnZe#zDQlDn9I`ZS_Uq$mjm{l6*mr_IeC)r@4@xBiB$)6klm!R170FGN9 z?>D7~A0GFcnD#FHzj42bX;Rr&FQ&SNuWl?tw7wEWm27|teWha&2J0*15n=ehG9LdQ f#zVTdJ?87fKY8)^;tBA-g-IF{3TCmzu>!caWCAE&yse=)a0^#yP z#R-aSP{$&}v) zvwx(LoXflSUh7%Ude+)|Kl;<3jQB$DulCN$%KE~sBY*I-tgLh8KeONId7k`V)vSX* z&+1mv`_>=a^e@x8ojlZS;hoR^*c}24FPm?k{p8cRi(JebwS z=BDwxmrlRtwGUU1FFtCX?Kk7)elt#bZKYn@gk;WF>_c2> zdTjb&!KM%HubEmiYmNM(<>$$=>+GK^?PHiNk8Lqg%{P(T;V|j?s}%FN=J7o&EgN`#WM)lHt=An&@l{~P8ena14Y z*sLPcTx5oYU(yguHq_MF7tCHFUs^Y1T-~OcGndqyu@5t>VallujhjciA%FFEI@}R) z`)!T!c%_NA`Xjwx*6wvall!WN@HFzFQ$FgzSCyKF`6X4p4VWHd<)L$uoG__Bm9A^t z-0^@c#)*}()_E=aWaQ6B;?GB$xc2zD%Y0i5sAgrfeQ~sXA4ga{X7a9w+at%;%x+k- zxr0A36ASdYFTZpxlVNXZRpLNZVr9&9#LUT>_{y621IZj6)f2hxPgLpSm}jTX+&;DQ zCHYlu`+p?MO2oomuC}jV*?8EzfW=)YE7th)Rq>+ZjV9UXb->^knCFv8`S+S4%xPQX z6T7g@BfPUCBK9{^K3ZTN78~q%9N&Hl26DAL!@IeOcdOd*1tg4g#-xZHG`9VrvF)xbnW9MiI^RXEuWY)$F`=)ygEQ%@4Xyvy9dSM#0zO5i2uoR)9=Lv)+DiC-FP9vy2w$W>s;u{qM~ zb)ucQXQrC_vGKEyHHf*3$1T{@a>J(gZkW{~9#9?2F(c$3o8B8gOFiQKhK;)$Hnzh2 zTYwbu3V14gads)kkqPj+LIlkgLs{~Zve~<>t9boP4{?B5Yi484ZftqEY}QH`>$fNe#-no%QR^_jEu10uN4}K?F{U}Tk1K!>a^bF&VcrF9lcX^vriSzf+tvPx8db|`BhzVuX;l1rXx3OJ~BS>R$1p;b*H@# z;0e{vdguf&jYjd`5{0}I5}!s4s}s{*Hf({}f_OD~7=lMzq#npKIMOt@sKb6`tl_`! zUp4)jkonL>`RVT2`?+TyEx0NGEr5BTCLW4zFAzq7jwdwmmX$24p1!Pgn8k0dcxSGK zaf#Y6ie2VzPGOog?f!1{n5JJQb8fJ2v~m43e^C}kWWeWfMa9PKtark}@U2tb5(fOE z8gEx4YRrF-FzT&Cn4%HV*xf@mtNAEo-c49#c$Fd0Ms)}iG4bo_y-n6aO02(&1H+2w z8u!Oq?vM2|r9`xiSkp7&;-;n8%Xv*!_=efm$1w!+i9B}QOqfQIo$6!ix4&_azo>%& zSE5x%O%lODOti~L{HKK5I+AoZW^Ek&U}$ILLFWQMk8Fo8ias#6A*K|6w2WvkF(p~H z-eOh)A%8kncy`!TYC3n-bgrsuUs~0EmCkzQ58bT42t&DQjs&;d#MhEJIvyAk!u?V6 zzX*Y=^c7{6%e`Ff!tno!NmWm8WTajdj~qVn;p#P?dIzk_hL}Q20N=&Z0%5@6P7Btz z2@9DZKq=%r?I0(wNh7Qxy_!Onvy>Jfm5q6$Yi40O&E5QXf=y@cRBI8K!%2HgFVD1k zW?P$3= zmWha3A3CzoO3zfAr&$X(>-Z--$@Xhz*KI56+*Y*29GTs*#_O0t`qmyfMJfZb(?LKf zO~8<8QN%$(w?N#o9(gDfqbhyBT+bEePhrqiGcQS&br5r4bcfAawGhk2PJnbJb7sI4 z&s&RtYSxl%6N#LeEN5JjSlN28M1W&-5x8}GF+5g8-JNH%g7#OH`c=)rf;7G-v*|ScUi>;m<^6MZ1m)Shs|6#I81m< zv-bujl9-s=1|*n`!PlC#HOZ4T$>kh8eoFq+0oYU~3HYcr{|lm26@RI!WEo$L?=Mz= zt@?qscbV@HqRHlI)IdB-Rayml@aC0+$M3$eO+2w`8Xn}Bp_^7>{!j9wlj_N!JhR;E z`2MuleZ1qw_^YjXrw*2!nDV!e#Nx0ROh+tL{wMcY9QQG^7U5ag-A|%$Mxlah@l06F z2K!`(%>RPqlN!B*@vC`2>5o^<=`WewM2!v`G3AoR)to&`ut}C}0O<=wF!~AY$ZHS_ z+8_>Lo#6E1!Q=aP!e@6G^`@oQH67wtCd)1!fAaOw+t=i7+}!$!q_(H%J{HVAvRqCO zjpk!cS_5r?}D`U!{RIjum> zW}>ZI7lla&=bXDBX*aJ05|Hni91x&muiJSz`D}&$CIPRY>LnCx{uBB%^Dsx6Pyln-zG@Y)-$K3!b?Yg zm>iow@1Ai^CnEA`XU`T^5}|o_lxlswnL{-M3w>2G7a^4|o_(@<_Q}>-LlZv<)P)1? zGUq5Gp-TzzK|X|(l#dVt^;LY0^>ed*H3JOaCZH82O-M%D;DIEo$IPR!zo^n#9bN`HyEYgj?I)cKF_zW=YB@EQMQj__ zK{KI{M)9r(EsTbwSn3^OOd?{aIqCCLSZsIZl1VTxxBF=g;l zr))e$eYFe@oD3%0W-F6420F)QGJqwAM6!Y*okDO{)?0j&<`%Jia1Nm9N)X3oL}I~2 zbObXcQME zM_O6~F=?mf9=~wlSwV4_R9Ynhvo$0UjKWOou-rovrBjdI8977B!k{OO#krHx8L(HY zB;GRoI+A#X28c>CFppEASP4#lX6&kVvTD&$Izx(AFEN(~h=oe%V$yU5Vk@2Ia-!#E zOTA~cc^|{M8t^xXT^;1RSkGGX1d$3WkS8G{6}o1-6(ADuk<}lfZNbnL)K+8XDJT3LUct?Q0PHwt9l{3v!QpW_#tCfUtO$>&0I+!kP`ljP&{Wc*^FLQIqV*r^^DJi>YatuDS$>N};U&07rW4m8UMnsn&X zW@m_5mN7{Bs`mMOHuq?sVr*chO@@mR5{b*m82EO2>lw2Zi-y^2;g|7&n5u5NMv-Py zelW*V-B;&S1zD90E@Qrt<|4UtuAObfvMB18BO#V(eM&LcD*Gf!lI z%BZdN4Q2r@umF4W=H3nZ7}cBWOhh zrdY}5;xO5SNEN2XPr$^06petGRcdZDC}brxC@R>y2=!Gt3N}?okTJ6Ohh)bU;zlTD zBD-?z;A6P%#mqUDnDKO5%|5+jBqNSH6pQc z6{OOvq%FT#cXTb^PG2Plcn!;Lc>sbx`ZYU7|#mHt_l}&{v^G@JNa!gq#IR^*}%DeIj62+ruf|;X22i+Z$ zgaFn-v7EsNsq?AQfJ(5Mat?-P-}JN@vD+s3Sbh$pGa_7nagTGBqNW@ThluAGMX(S; zQ@`RDsu%MQuq%tgZ=1oKxc|q8f^b0s)$jD)DxLY(%?ePnKe;KVqz^rR?3u8tIXFZ8 zIMVc`$eAxO#dL+;#nHA$qo?<8I=KH)u{xA9seHJga_rus)(eN7e<;susv1^m#s?xk z6XrGT-p8=@x|zG{I;o0PDX^C<6)RyWdw=ey19Ly^lZ>jqj9BhabtlOtxE`Z3HH~b? z$6tXDUOh*(!{~IpJ=>+3i^1YwA|r59&)2Y=d(1p%^JUa&pRPz2F+@}3t~HCXD10|o z>8fPZCe(w;@2M5Gd0KmBe1#~oz>KGG3X&bnhAzxfAYgTXRd7x2)e=ZFbVRw5@0YBo zN-E=fj(@}>^-tyk3uoHwOX@;bs@Jiu8#&9muBL1^2kTfYAbH1vYA(EPi5U@$>rgzX z!O*lGqv&kb1u2nx(qMnUVe=f(k&|cVQ7AV(Vl$*Qc;PN{bI{huG@G|A=|;}n?y-7q z6QRwlhnk&;a+voP#y3-iWFrH04Ip)tvjz>}KVU&gkJ@eA(}a#%mbNRDW`bgQYLWUF zTeWPLLn1Sa1#I&^>=a{N759`{kJ6$eD9;)5PB0Hrsx6bBu`97jaEuc>1QURJMn3>B?RZMC3BU3 zk%5ODgK>`Lrrx2dQXU?794c+*IXJdOTh}{qb1)KVYeWQ^YNqA^8(U|+$)#ijvXA*o znwB9|iF>pd{+&exg})r8d!dT3c?V?KRS!l5i@v8#sGp!P5kp%8Dv)Q)`yqB1S{TSM zvUG5pz~lBaIiV`#Zo%kcrhKSE8Z840tW)?!SBs+^pQxxy-eF2fN~&x$gu6eGjItb@ zYVXNqJ=Y~hFLIqM^gd%&5KSkrhh~W>rNB%I@*k3s91kE5 z$>m714+uaau~!GD88b|I{bllT26-8c^`#nCw_MUsSH|m3U?KuZTcTzJ^rB|(0CAf? zRW2Px^!DXa?LV>s$jPNa3wc1i+pG)8rBRf}!NZs>bw-$&&O*fztf}3r4<^Ly0mxY< zZ~BU+nrP4oJvGY$&7O^VwrMI@Rvbmj0JWa0E0ar_m z@NTE9O@`OzouH%%2VY=T1j#^v1G>=6=0%i>JCLZbGu2m>jOVlD$hX`<$4wR?uo3^Hj{gD7gVuDbLx7bVEqa%XT&;Hl|Y z^AX~Tbr{z{^)lAUerWY{d2kMm>#6l69U9>PKP4NYV<$7~q~U>R4pi!sA-b~tOHB^Az--$V^Q_aJ*h1REW^7)))J~Utsu5DLPqMO0d)-# zKBj#dW+CfgST!diYNrF{*0=Y7FKfR;t~xZP=a^X+$XHfoYr`qTw>Iw-yHQ^)>Ugzg zf!WUZghpo4c=2$$Kf|f|`SwtJLQPno-o>Z+VTn|q$d^bNf{20IWD?QhG_sH_W-`JG zn@raCW`5?_z&e#l?L{k7h)ZD(Bu4;Dy@KSq9$8 zeoYc(c6%8*aBy6K7Nbs4Xb;w?UPj2FR7E{_2MgQ2H7C}&E7I|`WRwV=-KNA?b9XipIKHW2m8?P~ZFZ&X1-`b5yi|JQ zJX6O+4fz6>6PY5;j%tpbPi@0o3uliVm*E~~nZjRA>b8L{H!)MLxHj62*+yHZxLBB0 z&(ihZElsxzV&5yA=zHU;THsm-)B@z%O=`)z@ky;1Mn6*pcVylwx>Pvr@m$(-FVh}s zU9OnRK9!5Lm!*OnSSi>QBv8cvb@i_RsATCUr}{4np%Akd4P0v7V`R4~ON8nsq={7; z>e%y&QZ4#)Q!{-jNQ&ul+CTnDwi50~vtz{l7P9B>oJ6&XJ50w0PjfND@r97(Z z)dmz8mBif?lY5l!2-U0}3oleGlj&-dR)WCA%$bL(H4PYmNmp@D%cT3?a#Fj zuLBPv=y4%+X>5O9QX4Ddxhl@lu(-3SV39^Yh;9$=x!2B7ax9G>e&7%U@s5ZpW8fU< z(yS^OmdZE_7ID`_ROt9#wvniXaQaD-Dgp&(X6L$W5$u_w{|7db#G?xsAUyU>o+Ny$ zwXZ+HqB&`pJ{5eflcfr7c_>)K9F8ddnoVb@aeuZSR&T#zZxszQ3em`BBa|lHbyb ztHX(#JUc7^%cE^(@(Ik8kx_ zVJ0MdtBOnF!6I{E*ZR48*iafF@B`FN?O`h%`&%HbR*d5PSVSz}0dH;;Vz|Oh=)FWv zO;91wkJ%QW4b&y5A==KLDupA&<3P)Z`IhpkEu^+op4l)m*|`E`1%9I#Lr_*M9J&M1 zmF+t@{y#zaE|7!QhO>fZEABUqY5o?w6M!~%$w%RdX>BU z#fqz$Ob21qISh#c%2gMU!cG1ugH~=W+|~85rWpwM(t~?elR_6dC+!2OiZ>dZ8`Mt-%6wz`^53q1IcG2?fYZXPTw?o(~#G0Twk;53aNp9V38M0 zhp|DMHXefmF@IoA!=0vr!DQt~iCAydT_FYR49p4|4~2r7G9Kh(!wB1y1%OAkNBq#-TuEdTI#=3ZKAQKLgVs>H(=ZVf4pZZFVCOz z+Qmm-S7d{f!q$IrNl;HX9WBTQ7p#D*F}?!U6J(Pbd@Zjr!xa2}OjDqcPL3{%$IQek z3sVs;>#TnTHR$rX(}=Cy!n38I>M$Zy1Ln50V)>%r7`J*C_#^A)FX;S!BXvd1pAO9L zF=~k&Et`4);r$ASmXg#cohkWa7owx70l`%3dp4WVoR+{dR29^V2^hMA5R}KE{pz3> z`@d9sggE9Jj3$%vImE0x4R+=*p{i8JowdGT`*(9TKXUQ7V^1udx$~<3IPlP8d!D-b zcY$fCjr?coU(U{J+pP`D@3*eLeYBkrtUQ>l(!KKWsomWwbT@yii>4qZf!`5pG?X(| z+5cw?ms?i!atTBcy{?StJ{B8{b1YWQ`IDH%t_fsZOte(i7NH(`E|F=`Q@w$ z<`?P+3@eDc7y0%<2V7Nh0f{SW9@xognNuJ=0RnKV6)odcwT$zFb%3C>E&-BrACz{* z_5)2g?B5axAY;R9i34m2C`2W%b9sOH-+w&NG1w~|l-1|<4Ojkr)TX!gURg80J3+4J zz zcZp*9aM}#XFy~c5QZSWYTR%P6&1?|@a}{h!aJZoD{}ss}zqxJeonCv@v^R@8zuTI4 z{Y!U!G<|OJFB6vE5<+*Fgq;nU5*hW4J$xHEQ+yfy9&I_LtAcM(}X!w31>HSP@wRg@@sR?aKf1669aC~Lq zP><`~S@*@%BHNY4>h~Eg^H6)8f@E#csD(?;{8AoY`*rO;f;@S0_;##)NvwUW!+@`W zn@tVZMXw`C32uvk^446W%0cWkG)7vVNdgFST*-Z+HRRCVqtu8Qh%2KOm36C zdM6usVhCGuWN9*#SZ8XC`+I0(itr937g|Y!9~>^PI}>c_D5yHZJlRTM*jP4cPg5BA zy>onyMrM4eYW>OlFnQ4v}4VQ%-i?%P6BQQZg$D zZ+?`=mheN?mwvvgB&nl3Q=Fn=`2*(aispBAs0q{tCSm*+cb5HdRmtB-wE^5>&;8Yl z?VfdD`}f2U>9KaZvu*abd!p6u8PmFS6({PRqjVZ&>$`5%XNx@8i49_)7S#~snZ;9< z7X!ldG2_t<|CHBFOm$qQ|LNOj z-+MUHJ}P$n_0Fl+n45N<|8L1HV>V2GY*fkn8xk@nJM4`96AC)(>ZjX|#MiSdC_gQ8 z*!550tlILC?Zb2A@mVM<BAN6!44`O`M_e4_!lHDS}VIFE0$N1M%$^5JA+M-MI=eVU6U^c%c&6v~Hk1#y<*=5J&6ft2(mZ(r;mK3XqlOL!<$ih<0 zM1~Y-t(CdZEj7YBmee$({Ircyz(47_X0e8%M`ev^o~fI$Z0W-fHBG7|a63Uko}Opq zth$IZEMqRO$ z6;l~HJTO>^mFHEx4ZZJhE8)>H#Aa7SZe;7{xu?0cqoAr<3$QLPDk34{v^vY4N$HvT z)#N?rKV-dX;+_ThohwqjVNoyl-}CE6_-nZ}_Iny|RqgLTJ@oG@hCSnw8tUDMYzxGY zknRKioT{;$1oRZ90-?mBB?3o)K?O?9G2K}aW0-7ZoO0B#h-k-p2}_Y0C5OAqT4BNL4;Zg`KoN9I|>DVc&!P0SBfbF6i1Pdf5H3|GZ(TDO0_s*=9FJT#%&3WbhK0yv?l{7gZ zjbiokN`?k#5pKb=S?qSIf%i2#G>1xdojW%K*b&zK%mD?i?(_ToJ^q(%_uB+6CH1h6 zRxA{}F$qz^HN!WtKMVfEQ>g^ms-Z9kMUlV`GV?tpi05%p>9&l^3{2v>D3Y?C;|9{i z^AAXlK}Sj}#ytxR^Ru1jg2JU|(|cWY`LFrjmvoVDT%fqzf27*_oM{)#S|rV4RY!u2 zH}dhp9Zp)MnTf|rk3F0QvICZW)b(w;AM4K|Oza=9NphoL&)lk#%^3pF+&}*8?uqInyOwYHS=&?#!1dyCv;ek?>*nzDxkG`809Hq!z7lp{)%JMR zw3TE&s+U>D)u55;N+v_t&B^_PPXE%i4#lf+dPXFp7JIK&mCU722Ff|%pjC77?0;O) zGpl>gx8M0>`NVE6Z?MQtE+RQofe!ovPTrX2HxPwF2~xjLh;OK&YTJUsI8B$>iY@^3s+oqTfB`Sc)uU{F|D&hR^Ec5P5f{92BX;IKCk_7 z`sw;(zn7G_?o43w$u@yh_%+Bul~#^6k}uN1X-z0FNn|2^yQ2~P z*o=gUtxyGd!NUcmY}K5b5^o-CykzR>_iN(!pGrP;`NW56zW$v`H_~zc=G=n88Y?eY zw-`9^mwOIAY$+uIFTqouhOBb}Pk!1brq3~(0{gh`X`Do{ zIfk8WH2DYRs}LYveZ!5BdZV53D+@RMlvwF7KCf@yr3z*kqa$X028%3RN{CE7N?%-Ng z@*MR#R+_DeLdHDLrH%dS@ySlKPu>#LaBmSlsR&J*Jb$473;*|R{S>yWD#w_>}$P9cQ^{GrODc}SMRbOmK-~#d3XZdb4VXm*RpE$rUyB`JUuTV zL`ydPl*=0?T*CvkekoqWK4HW{++I>K?giqPO99{2SS<0$FG|R2PV-zD1mTW4CX2Z;;pR#cgG#i?EKQSFV-VNlmZny+;ZnuiDX&`mhNAvHvEoqZ( zvnDBa`J{pm_KBnb2}Sj8EYhxX%k65t70E5KSb-u_x7u@^D%Z15mGfa$-nX9rbuN2s z`D;s#-t^wfmVw=fYCK?GGa((=eh9D{cgDRCXvB0Cs%&)WGxO!|0t-CU;}wj{%YwRv zE3lDI1P^|+3re|N)2QSv_)I;bZ%lI@1GEpue}8fNM~`p4uy5;ATUYm-xAyj|?73Ne z=I@x7f8&yQ)4tIwt5<&3fIhX?p1FN^?c(lP*#ocs(xP5-r+s5?{((^g`ebFF`PT3O z{qqO(X_a4ZO?0ol?m+93*sb?`Twcd5(KK=z{4OzdrdX_(sP>@t&M-x>nHKBV7GQWb z8c5hnrwj)~k1=a00c|<^4qB)Pg!(Tw{gk$aGZ#N}K&8$=4(FI$Oi7EnMDms}xLx|h z+TpdcpPY74uYr9AWX;Xb>bdpa;R9AJ%pacBcVyPctlDem_Q~p*KWCvt_3nLpig?iT zR(ajL?%9%)<%=A;sMo+=TL<^Lb>x67`TL+g;w^nd*Ukm@cw46N&8pg?vwXR*K+ z%#Eru1Gr!q(efoZ)ufuoER~>MOA+ik`pi&l**TPn;ytHYFoVY0`Xb%R2e8^wVEzqNa-FxN_kO|4|K3r1L zd4mSYbYb-K7Iv@g-3#+GXi$~}`=0WfzCH6t4)5DnCat@~g&4RRp&d?e)v9e6lly7gVuYmoeYURHO>()(n0uf29)pQ=HF zmft#Hpf!)4VjUOueNvpOSFi5Ef3gP-8YusYzz1iJH-nc*}!1_ye*4#cl`-r=A3%knzF%g(T_QXf#4HBcup4&%K;{o#q z+1VN>Fg0?(z`1>%%+J2*2JayuA^G&`V8ttW3q=ej2+DrdQCRE)#}!HMU6#hkY68tU zg-iyzDO2Ld35>?MNe5Y|D|vhG27s-V)JP@Cb@jJQvH}OzYto+BAFL5%iQ&uO z2W90C7?{u~XzL24Uw*WTXu$$a@U zUNdNr0Eqz0z`z^y<^qG@?<5LUQ4wo=A z=+xzp?&v;1CTMPcwwOpyi8}))KGI!`N6ettpsa-px8B=#WKRK%tl=YJC0T;P*#kvQ zfL+*m8=gHVUzV$bBocslxV+!r5r^0d;W{D`3xZvLARX3(0~)7N7Ri{+RPZiye;}>$ zkwT?voNuU6*d3?C=rgAIQg)Z2Q$@qvrJ;iy%DqdvNkMSbFY2v zM+XbKb8oNo4-QKxi%#A`dWLhr!D9LqCKe#l;MCGt3=oD?=<+sG`-Q@ZthR3Z?4X3Ri4 zCAHVyD#2MGV_<%kOpi60C+)w)z83ZoD-z_HC$1-kGSJ57z7n9;*5495)<81LCxNOg zX}Q9dLtUs1BqqL(5qhyd%6XcE9m8YM%%3?ef!LF~s^kd>#+uPd7AORVG$DBdSZyA2$Q{DS! zi^Jp#cNs9Sm%IZ%>_m*r?$&qs$L&W~ioLSgk=*f^_>ToQJu#j;ki@wOap1tJr>XV8 zGhVel2%WELr@ZaIj^J#sWQ`g=0X3vHc<(ZyVW@$CDXPDsNMI+poxQGYkPCP)h~jWV zuYB<&p=%O;=fRWu3=psx^9?&?GCx^^=628O+qZC}P`B=L1}$8B`|!S5BS%_N2ZVWY zq5Szt>tn*{$WsJbEWWHNc^4F(fyY9efzEa_ULk;15k`QdhH~3*l*`b@Ea+NIUv3DAUu9z59S}bMggm2G~$Ew~s(e zA3G7*y|Qk#aT?gtv-^{FPQ+M9bh97bF-Ulfgl5H=ETOQ1P<{K3%$7+SAR_)L&@w&D zOXdVnhfp)rWqOzL=!Q@*4w)B2s+|KId|*Z~1`P=`;ssAQm@G3uUCw^PY}Z~hZV=ta zZU2#pVB?Z2mwiY}Q)8*Pb<9Aav%aO+glNpbfx_28X|I0D&Ow%paq+x9S|8Ty!i2~(732PG-I#a(c;!#{ zk3p+@iGN5EBz|N8I9oDCOaHSMPP<5~V(Z{rEw9U$`O6n0axQ1FW{!}Z?gJ)9tXZv% z3M&>aIB@wbS;JpDzH(WQsDA&xcb~+w7n_TU+wY>mSQlz8YTMS>zOZ#xtdX0EEfm!x z+lxAP-(c@HkiDAQM$dL_=ZOVLj377hPU$8|A3t5u*-|>|#CF*%V!`+v|CSxInfcJ~ z4<>q4o?0v3`<-fg%*2t(Pbb}Ye7x5#EgescZGCoh|Bd_K99=l|fMl}kOE>Pja%kJ` z?UCbq55IAXV8GCi_l!IK`Y7{oWZly;Ux~#hd(>>&7i)fhSYhJI1D{@-*L>)P=;^Ja z_fL|5^53sKGkM33&F?=PP4@6633+|%fthD7%bl70rP;gZlBr_Frv_HG{3vJh$vksx z@88CVGyNqp{dfDzy$%fsb_myBVdZ->UCC*#dAg{jk36f^C*oDf6UDCnwBQ6g1jb6D z-KeLxi19_ItypvB^4af?xN)95G@T@`<>SjY@2xhUw8jK(-wGYJEU~fWy1bV8HSu>N z=J_h!HYm#glqxRSF=To?C$XhylODn()`TrdnBkLU=Iy*0J?&@Komke$4Ux@qFw?*s zOUkT6*xji=iE`Jo-pFC?+WQK?(A%dqMXkJTdMhnyy+zN@w>}edXkMcX59C z)71$Tl4o;AKcd9pa_?z~xF@uZ5HAcKCuRSfs;S)|ny#nE=jy&9*{gstkYyf|m$Ojh z^2NeT!AMb;WkS$DR}Z!}RzSjgE42{PUP?A&nkzqLhZqXKdO~;}&&*my2(u}?bt1~w z*qZDoO;3{zY4*LoKK2^O1<}!5!4(Q7b>sdGafE;H<49oX^x#@qI($;F(5K>@9nmcu zkr=aNFZ<|191%ZR%t1HEhLgOfX-uh=K_JnCzRJBexx5}O`Y^zNdHk5X<5Btkv3Tn zPRfdOM-~6NDxNpVw%*yp=JY&oyAvjqO?giT6dJ7`yVrzT5%XTb3+0ri${CepzrOfj z79r6#<5_e=dras;7+K8#5mIG0UKscSy^yNFTtNqe&A35=E;xm+z--ejCiXT=M0Qbi zoP`}uNDYtu&8nfPEzvswLVNwivy<9L-p)KA6_#Vav)l9Hkt3XV%2Z$`ODd8D%%idC z!@mN~t&zffau1is71N4NhAI=XK4;MchvZxGkA2*%>C(3fHa`a{qLR~c%(O$5IuaF1 zE&|)BY)vdt1WhOrJ&m50fTkvj;1z@cJ^RbzKuQO24IQz4gc5CGv5wap{^hoIHdnS_ z0FL>Z->Api#$b@L?-jbI3s$$p!cb&ZkpkI6t)1%_?xu9 z>;iuDXa@VJ;eu2`jfke9=%hwOYeNmx@0MwfF<8gs-YUt;!o4zy3X+q6Vks864;kKG zs4^E6CYA)VIs0dRkQNNaHrE7iM-a$mc8+ttWC>+0Iv(eyccsqpLOt6ilx8Sy0ZJMP z>Z$G*vyyqn({#UZ?~AhtY#4MA`&C9)J)%bpBb;G~Wfs-3eFGjW+S{HkMI%{?E@Hnt zJm5Bfbi2g&pw$FJ8<`R4#t#|VuJ0P!oXyZCLJbVb9|!t5WP5fEPlfespt>K5&GeQ$ zorg!zW`o2Msp`qKVq7^fB1&v}3xU`et2kXd=Yp%CCnzcq+s#-LxC#Z#_Rw|{&h}#a zm>^QnQof7=mWjWHonScfHY5ESU!A_87=Bhqjh^Pti<4svcMs9}*PA3KK&D zhZ7{05QN~g+#g^UB@n+Z5a|qHD zhq!7`e33f@yyoN3cAzA02#_+K`F+YA96l~VRBEMB$@5Wn!Ya3@8XLAO){3$H)eeVp zz8nrwJi9t2>YIz`AHB(&uwoRz$21pz%5H}smo?vDXP*=Qi#5&xLtQXe_i!D?vfR~F zSzt4+N3Hl%7Nn5qLpFWJ;edw&lrXjp*87-AkTD>2+ieq}ST`g>k&kqD3Kld+mXde8 zg<YhQt@$<(ycOsYf~XcXAlUWMGAzS*CVm5;E!?AnP2U zSjd>;Q#F4;;v@#Nn(>=YfS+#6FpyD|{5A0#|BC)W=PnOT* zK@&X=>1-!|jFnV196U3ihOc077!gv#gJ%GWqj83)47dzv2#p7Mo&%qn6M?24ZN^RR zLJZYi^9AM{#0OkpC#Z*8dqYXy5Jo(An!bE{aPF-+PDfV$WPBTxA zXk(!T816ctywx-<3ps5reCzYNGYOoFAR6Zj;pi_%E=R7zley<<&CoiSO! z%)e=8h&-2#!IQa878J0)9nxt#EAGby5?P*SgQhgK5pOj`HuhF%=3$8wPpR`N_$$|f zD9g(JT5dPCCMai7c#8mNycGOvvi2Gp9BJkF8kGR9ulE+hD>YP%O{JlJReJ-jf}i0U z;$u62#H0ky?l&;`r!JR@)r~)}$95#v1a?<;>gEn}bz1J<_$kA*9i%V3nyabAIC9na zTkh^CFk5ImJ~0hG6~c?K(+$?Dz5*4;bt|ahWD#Pm&0x<4QZSN*R2Eu;Gcn`EdbS%M z&wqTf2=Y3oV>U9~cAc)~0ge$*KXgoUBdG>#qSSir$21RwRI%!V)M#iu@@yxG5!(Bg z91C=y@W9tN^sfmjeMD{@uqb`8b3pit^gc)GNX|tMaw6EqiqE&s79iLT{KpcJ!|gfy z8OWV9(;VS7Fsi&hpgN4b3*8NoV<5u$OjQpO5Z@W*_SfiO_0TF7eiaKOBvham&HTA* zpmzC0P4KoS2eLX?*F92m5>v$;Cl-%_4QaAGkp^bla(Vd)*)bB^&$NbP_L&IzMVMtQ z3Pd^vTa9$qn}3Ad!CU;9!mGxna5v0;GI3_9%EUL2GPwdxOqYXy9orn)*`*=6<|MmO zrWCbKsgXEw5KGRe?+!O{uK_c0=OycU1XBzZK*hfc8KG~Z@=8z&6OToK!TQcZZ=ksX zx$Ohdumjs25*rB9if?vZNJjyxSPUV>8xkPf+&ynkCjfaTC{W`FO0F&+hP_EqE?jMNiE$1IWMttYTlQ3R5ZP}a8bcN}Io%NsF znYKwIuJ3Vjzk8jNO>(}yd*8!r{!kp5HmmX7;>mlu{GA~K$E&Lb9NEfr2eT^KVQKKJ zOSg?UKrYlvYys%57wo1B^Y2=z9ENLV$2996A=}{O871q=|hUj6# zDf>{~Ca~un4U4}wGyk$uqjNwv7F%6#tT+<7($aV5z@7n0OI#vY+Plnybx%&F!ltfZ zSpMC@1~e!nvN6Pa29Kqe=dOz9gfBCblnXhdQ(C-dsJP=zdG_T%(krA_2!57C{DGIu3_9CR(OrLlIt)N1c^!ORixt?wjNe^BGQY#C5o6o68ek zQ!+*7MREK;p2JP2uC|kF>F^rO>2r@k_Mw32N)B6)4RpB1dG8r)Na;TZJ}7ZYO^~J3 zCS>cWw)sdlsA#Spq8lz|-mJl!d&jg3*n5WQ3?~miMcT=sRk*WL%-xQQnDbLk;lza; zymnaQM+BYGz8?9ufb^>; zD;nLH;SzudZ^E*O|F8gT5sQL)<%r}1$|+AZY(6Co>D~(fs1sZwcwlOp!(^GzoXn{I zu3^*akAoSUAE$#b<;Sz&kq&7q5#-6Gx^vnQ z8}w@8vL7aghlD$LDmny2(yDVQ%bJch8*T*L55dZ1#t~k{2FjyntNWISjZWH6iz*rX znimGUrk0=x4BQZ_=WTx%z22*!z=D|>0km18PSO&FXT~S)ve={3=n9NC} zcmebuQ?MLB@-3N&X6#fxhsPEPt09WTtZi-zni3?_?;?PQ`dvc1@m(xVuvgA$r0O2Q zzG(Sk>K>3~ob`o{At*2lf=V!gUlmM`^I#1CB>dt-meRLMj-ny_+M|VIDGg(5fjP_^&MESd z_fz7RuMX3-c>k*F95X*9CfiF&?Rmp;7lkjRj{9ds@dY0Tq!@P?QSxTSlWtBM^|+t5 zc#fZY=v5Q0S>rIS77}#yczY^un3o%ra$31&JY~pR%iuZ3b@=5ldXn+@0`POhcBLf# z1u^=_u}{eOQoO**CNx~!e(V^2E-xYAkzbP5ZwVjL;yniVOfjcRA<{X&Mye~k_QXo6 zf7XKVm0=NhOM+cV>r|&TW`PgH1~VDQfMg~ zFV3?9zSUICgLsZ{cwXs&kJjQ%PG_OTR7~K7De`JW;_LVxdG=GV{;&wFHbV#k_~_Yl z<~iMS-!#N)+Q4FnJ-ch%mqBFp(3Di{dyqjhtVg&5^)X*E{delAf=FWoVb(J3Rg@Le z;q7E90&nq)hi$&YVyeeG4cJ?of~ZqerLDb@E1;;Ik{@{^@^aSMUSjanojmduL>T`_ z1aVG?d?aVC4ieGJWi)RUBq*p-VI9vWjWAmRWosu1tHm!1G48`G9QgWgK{ISwMWCQbrr2M`Y2dAh8iIn4h*83f=6Z@#hC zQar2GPk*S3gnAa7VOb;-9i+gVkA=_#A{xBxL^U}z9rAhKba*8W5k^LK z{vQT5)tk!ApTX{6{b1yF4zz66D*Ep%J0?UkEU?~FD>mB}IQxk`>=psLq!@lU%d*yW z1u`(K>eTRQ|K8dR+OHxgGc5l9qx9@F43k$S$zZ!K zgJy{yH$R`^Z1U1M(s}uO8=5a9riQmKM>S~;v)DU>dl3a${~H$R^Vd<-Jm8$RJ0_2< zsyyvpQlx)pc1NwoUl3ZF?76)^CL1VM@R(9yh)*y6ne8jVLami<oG*7gmZl51HA0MVK3;h^i^gTcbdth}TcvG`b_g!5o zBI*O2a@~pOrX0d3(+l4b{+S0x!TMpA(rQ(1V%7)Di_|J;@9k14loO?*#~@y-O3OsX z#bZz=SK8G1_q!$UMA<`?;fiEGkRrVa&AgaKOLwI;+^Ws6GOYDj^UrW93d_iqonF~& z>?JA*ce^sfhbwgcJ0UEKmTKpat+u|`hVRfd-yvtyVTt*4(-?j_QwPy_WpHDM9Xs&vLq)}$(3WyjXZW>j8u*w-VKZ^rop)_Os6xnK&y&YrxOjiC84|z0=4V*E{ zHOyu7$xM=~LSdMxu3!&cTu)jy|3cE~6V+hqX)DeVFxP8jiuo2lcm5Z0Rsx@0B=GI7 zX;|1bKwRCP-ioBL4I<`phJp;Ow%&g;j8R8nJ|eS1y&lC9pYrYDQu@(3UE9bZH%HKx z&519fZ^5cjoi5fXv_c_qsyA0J5r)$5Ftj04@@<3++|E*zSF3ahQrW8k?dwe?QB ziSUSSh7=qt4-jo>w;dIhGa`oqYHO4!4xPjC+B?I?lz8RosH!(5v5_yNw#H*+!jY1> zdI%f4b>LAF&c8!D3wJL>>sj~bBjBgypgJTpKiMI?toIv(f5J8g9olQe3pm~yABa!4UT zOiv*yFs+CT-&T)pleF$G*Fq6Jl}TA8b6{=Voi=YC!u$P`Fp9zwhDXthg{F8OOQH!7 z0b!}fL)~_$Ec@=j9MN}&z!6eu%4)LMc8QpqX(T~i)n^uaNJxBPbw%jb+j7&FbKrY3 zJDO6$YUC3|Pu^CMe2+cqJ||rd)k6C!M6`{IusW(WO;~*qX=g@Z)!YCy(&}4>!0qU? zc%b;geg)TK^=N^)^@y9LgQux z8{|pC{ME%kO8k!mHv;dsE1x`QM=dvw#F_6)$^}M9IAM2d<;fs(;?%ca z$|O*!fvDo+!`B(RQ8yqvkfkG&<~Q0y&5LdHnu-Nlpc=Pdd|Z!r@tM;+ib68CPIkC1 zvD-F+J)@1MmCYH#xgTY^=tx4|nO7=1dS`VWElz%D+YugBE|xr5lU(jJ6l&yYiRIVr ziXXCp>j*|6EJ&jj?G0jR1EP>n2NEKfFV@tak5FWW+4cH~O-o|$Yt(n8$wf-ZLVdfk zWPo<^a9J`<$K3OlT`8=W7~%>>nzHoBGBoGNqC>@0W3Gm zEYx|=an2b1UEI$*gTU~G(=PCTJrFQesu486<_y;#Zp*ikcc?Uh+Dk!LAIZ*6jopfI zvQ<2)FLM{v1Dp(c8+X!Vxm{-7daMobm0Bq;?vNsJyr$Gb*`i?Zi9=-<`L%B#Yj>?n zF;?^ZouiAG62(EuC})SW`Dk9yCY4qeH1YVd?QV=RaYV#2urq! zMq8~g3y5IB?Lf}x9%UxQs-7Bi-WkA5Go2GZMFzW<0oP?#F-?-4q}J?x09tEdN)oAi zkw{s|WR~t*H+^B+95oHx+8gr2Ff!l9svgr@?xR!Dx4_H*iO~haxcPxzoTY5BsZA86W4ao z^f$U5gvBr?GI>WU^O~6cF^0MP_v@GsZP*PR(QTR#OtOP$rS>hb6YlBSL4r+R#$;Nb zQ1JwYk%B7wd9$(OqTF=H-+1+f@{icgpn~ptSrh~ywQ)a#D}?DfrIjL0JAjE9;Y!Q~ zrdYD;JhmH=%=?{O_Xaj4yF=#H3HIWFEOnv0;3rwRp=+skD zB5AUb@+lmq8ksR>Gu#jHGnxzM(AkVKWoI*SFQ|nS*#^3B4?$?o!LRL{6LGjFoQUK4 z2o?tpN+z+e0r_?tkR$H^YxYuN@}qL_cv5#Nk;4Bz$fZtHR*Ayk>CBb9uL=h3BA~S`)Hh#HJM}m{s=(m{q&2vK7fXWKr5Y#=1d78-k0d z-<;1jCLt}iZ9)=B4M`Z#I!1FWs>qRf!PbslRsjB#p~FGQpP8BIF0#BSR=tE>_?zIo z7irl9Bp}|^^1%U_ha`~)HOYlGi7G_4hr32LdA=9PGx(G~+u&1v!K&CfF`2PH(@Tg8 zI_t3m8VQ=sTVcU=5u6%=t#9%as_ZpiDZ%zdI%+`YuroBdi(sqvB@Tgz)`uTTULK~d zMfGV=${q;6J(jECx5wr&2VwM-{P*V^VYFZ)}QTQ={K0yh1`QV5tAXS zHxI_+XOR(Q3drv>Bca^oM`d@+JxH5m4U;&2KP>Aeqm)~#>SJL-WamXVo*Lfdv<40s z>aS~Aj=hiXYYA%$T*(B2P$*IqCR!o4-PeWQ(S9Yp;PFECrqBBDFT=Lof+dIJA72S#npnH?HUAe-VzM}a-ixsb}+ z#FGL}rpnjPwB(4ZG1<~2kcykCY%ZN^!|!uhc$igDf*AUn=;S!qBxv6s>A_zd;2)U z(BVSCn(te62Gb~Q38s`CuPpZqjsuk%2uQ$jNpL110z$PN&DE749LkoR(y@aIX<%2C zG$umDQpJANLh2fZ~+_J<*VNBAtaoSenKP~%`{gAZ)tF($y zhITDxi~vO;#yP=gMijSWr@-X+T}*O7#%K_Q(1kbTO>Yuon0$!&L&;5KV55J=A_q5L zvh~L<`!6saJ*%9GtkeERb38zB|B^Ou9ekUZM@7#}d_v^n=M~f%Wn_SC4 zY+LZ`2~ZmA#@u_)?Ax!P()4(=3~`%}VBNu9P8`qUuJ{C;nTIF(65!Eva;m*fa5?$P zHC%t6mR^K!2=qGL34S1)UHUefNdW{u z&bW1UWDi00!o7S45k|IHfAr}ZH}G@&}|Uc-7Ye(QBf(h@6ud^DCE}*YA7oC zJqG&&PSc1+3|~~bNt|7!4ac_WMCprz8DQ;(h-&APT^>wJp(kshV^zEg1*X3fjht$LamXv0aSQDr~6Rbi)qT+hS=%H_Vsq|eN6BvVbS;RXebHbVF8 zZm7{NZ9oj)i-_mg_*Fn4B=nOxeKLw&p`6;%JL`&V!MKN_q#W^^Y(m_7QfsNM1XipY zJzNqxLH*nh+I;wGOq67IYXC&9QBEG)HXi>?a?WV$^F6n-fx6m5HNp=*idmTqTXnqI;Vw}k!Bz1SgHnM zxn{yq>)@jvw2vx^ffnXq5>l9(0Fxkr<5{t8!cm@7bhnP|b*zc$p|W;mtdZCj{lP&N zl?u@RYQZK~0~(tG!eNOaCGOfzeje7YYwAHkxUpW^k4H1@VByAY7tvw3LiQt^K|Qpoqu~DZanAz5z!`Oa-LO;dVKa7 zI1_YtuY;$T`Aq5m}sQQGx2f(Q@-!Oepgp*HbV$*k>=9Nkyidzc`Td z6H(l@zc{ipZw1_gc|$l+)~J-u1oh}Bo7GHJiPWn|Bd?*|i|gxOL0uq}*H=&ns-AVQ zdRDH4CML^3UDt(ZR#I@IQ0{tlUHo85fwSNAz*gCah9bi<+D{q)vB#s@wVx3#JL&%} zJ6g%F3LU25RZx3Sbw+y6Dw5nX7v8iLdf0HdpyiO;V7C1j&W@K3+t`S>K;Vm)JSg#=0b9lZg{)$e!4$9-b5L#NX5~mPRTCT+6C!@E1K$v zInVwrgt1GkM_im0nT2Y>He-&h0&mSNw^lD)nAYh`q-`)(GAqM(I^qVsU==*l^5^NbW0kr6Yh$& zwDqGiKyIYPIc6&Fva10 zSsQ>^Jh{p-?fq>l@>`e|7?QkQ$Q1*Rs=qRu+BaoVUyLbV{3sOG;yU2GUU5g(8`9x+ zbIHRgQz+qSuAvZl@gdidF+z7bIY#(J;uJ;tb@krk^j^$=KvDJPVSbV4U>yZWFOvkq zo&&7+b()@mj(exMI7FtULaDa5<-TEyROg?ee8FZOgcAAGlb9w_EhoX7o}6=z%8f1Z z2ICq&TQ+f(;W#=v0Qhz{1`iq4JSy>UMme$~*Q)PwWef<2+m9Hupa4u-SZ!s3Y`bG> znsJ(Mo!I_0!dpwaY3ryf1$y%s7g+FDjv!x1wF%m?VAb|CK{ag^8^M+lwyC&H1YgwciBLrmaqI?&I@@c!yo?dfmsE2PYkM@N#eQON zKb)@==~Frs@*cN=3s=oy=jOTL6J^a8Q+e=eSLi25#j)h>mUb~D1h_DYhRx}WJm6~k z{8p8y(sR#^%-BKH*f=+#?Wb#L}a}QpU>V%D^MGElu8I zz6@i#!O5zTH_0;T@hN;lfjJDFL@DhQ7PF6Kvrc;yW zgYu7Qc7Oxi@-0j^Kk5oflswm7{k_tbaHO77ribT*Zh;$t%#r})a!PgdOhDRI4pReM zRq{RS3V-Pm)r80A9$|5fRTba9m>-dBJ3-?fjR<%kE`4sO+=)$2j!rlX^6x;1yvYCui;&c_Ofy&qWcTp1 zQpxltZZ#)-xui3q!nUKVWfQSKlz@Zz5&7UAHkYu)12ubz;B+tczmlOkxVz%nNqfwU zKxC$PfQ}*GW&`p!^ag7r585s0x}y=bdVHh(E`Id%zqloM1D`X;{qxN~Em=M5S9P!B zI|Xn5OZH;ET&cV16vK$AzP%oXxJn8aCT1hrfMo6S%i88QCP5mp)zDf#;|M37JwU3` zdH>m8Zh4xx#}skgcG)&?$9+8aD4bkhSr)t{Avq$rozy%ZB(&y^`k%KR8h>E={*^=e zZ&)rReORq3YUW7zwFq09{)SE0TPhdzR+TJMif4Kcl>^YEz!YQXAXjtE_zF-ju?N;s z^j!6BE}Glg{CwxuQJwSHRp78ejS?QR+ovSxu#BF2dQq%>d{oGn+9p#9bVA7y+UCog zI`km9!^ajs&<6a{+B57N!DePXDh%sSJ?ICv$fdK5< zvCKEaN_gb$OjK80%|4ZM8VGLZ0qlJ9OOX`^2lr6NLFttkD+B%}*%WyviYadj%bJFv!hNd-(SbE` z+AViHSXp)Z=Yy&2_I3!{enIOF1{rM;gKw@Cu9@QOjX)CJCx{CXO(pS@Iz-AmlznsM z1QOIfLW=AiVN#2GdGsO?1Zn9=8qsxsV1#jHH}WLduOQzY8Po#vW!uU1CdE&hr;|WE z>6$SY)0Ai|u51|L?T+e5cA=#zky}RqM1o_zC#|Vf*MPGpwG+9xEiHWPM))$Z-bp>I=9uF|GSE0kup>sATeC_aE@2@Db%ZT{X2Dzgv;>e`!Kk1uHz)~58xrO+;@U2W#)0S zLYzk<=vf5b(tt`+Y?qrZhrGk3P2Z$Hr?xd7R2VbY%Q}q0VGf<}>9oBb&u4Uy@6+tU zjFBkN;%7<}hb(aO%$1|^MBz5R2n&|G<=CQz%{IBBYz)Np_1GiYLrr?C9arX?{BG`P z2xY3~T00`$EEL}8I5B8bf(`#ewDH9owIi$}f}3Sr+NJA<0qH~;NdE{mw0cW}J!6iu z=-pVTf&s?iK2$XM69rKL(nSKK-d zhZnqiBOaS4qZmwsV8+P1AnYgz(EjmPxyO+mHaOvFd)n~>PXq;W8`_e)7)qQr?EMcz ziK^oxEW;a2QG+?X{Zb0{h#am8afBhyCU5uifN56*Hj?7W{dNp7fz}y7n`kXZG6L#I zM)Oc-aT#rkN7uUTsP{mZl#Olf9ts{ZAUVlMED>ZsghQ*auz$8{Rg5tXM&UE2bZ=LhA99EEYIV344ZUH1W zx$^Zr!A`U7TmWR2{9qxI|DduE$TDqEIE#;AzmYv5?z))U4m?B@Wbak_FJp}FzsHf( zri9n+TGs``7g&8c%u&6+VkxbSASC0y1J~jZ!HMJ)@EtLInYDN#qddh+1W$a5YiW)A zgCpTjRbLaua+HhtMTQ-U%58Kwj-oa&JGY!AY4cAxKFa)SfE3An36YPOTT4ZYx2;_1 zwjt*7WI67-655@4))7>LbQxH`~e9VLS zHGP>JL7qEoLH6J6w4(W=6X6pDuvw3 z)ZsO}V~ALrcFNJ_@KaRrdjhS)a%Z&pwS}WTc0-jnpBHyQe7j2KtO5BriKgC&pbr`D zWpxjUaOaw$pTJpEK~rLzOmj@`s5cc%XTxV+DRk_k6R~4Jrhpec`fUwmysnvuDGJ2% zfy)98+XQVYYqfqu>${9{dvPJ(nsR5+X>fp^9 zHvi<&aaMvv9VJ)$>l0*pAWX0xPANPU-@PHVj8*~EZm!F9kXR8b{6N$(@sNB z;5h@~Hguiu34V`2?#V#9?5-IYp+`P|uS&-LF6oKOONCh6Ozj8YMMhvfh)?M+N$^5M zKbw|o<`esCm@NSYC30_PdHV6Hw#Tcv6^T7Z^3}&B*UUYM93|8K!|mwE>m>6)qG%m~ zftWIfYyLLBrZ<5yFilI2NMDxj|}=x%ng0|1OFueqE0r|mP4z5BV1 z04_gXj9{NP*4CHB-VJbapS1p!RFFUQiVfW1XI>8Jtf+^HFaI^2ukyO(ju7EKlTK3Q zbpKE6Y|Qp=@Y+t?@)`9R8lK<3>gj`FeVnhW`>^iiy(h*ZXA9U1`h*ukaY>y4r{>Ju z!<~`hZA|NJXk?Hk>Z`$QSI4mHB!{EgCOf-L%C)YVX&G24ryKbObriAcGZ~rbU&(hk z-=GYVtwn9Nrm4K&FXL?_qwwWNKJ3MZ@U+&W_@E?YLX9pAYU#qJ*ydyYD*IY%`c8R!iUMrYcYU6^kYitT~5EVn^`w)R2lASa;6lr-D1WE!L@BN-BwlZGY zRqQ#Lm;pbx`7T%Ax1--P;R3)f19(e$RpvRh832q_vct;L0Y>UfOm5ke-K(I+scV)C zgDvPz^|@c|3hnGdg1_38W>%*gj2s4Njb1mG7ai$RDu}%SuSQUAaVk+Ix)I|UK$TI2 zwHj`%0p<#8ecCR9YWmFETmxk2x!ETqPv4sXpFf?luIU{!a4B3=2Fv}{k9Xl|RbePP z3N!ZkW;G9#2sNpCk7Pho^>r$9I9h@iWQoUDh%3lJPBtuY8-c%7u$paEDRTGS@ctw3 zY1)+&k(^xtQE*^KM2`}48B}F(qlrx6{k97G70v}H{#_Pz3Amv||3a4ktOormuR8WO zb<5p9a-U zvKe*ubNuSTSLu!6x_#^oB-OMy5N+y#GAkd7VT~feV>c3Lo_~~gb#P0b@XvzuRl$H) zVpZh6h9X|)>o(_En?i%F6agyD#lJuLPYl?BRdb6SgD0piE89Y zHn#5A>p}SU$-|qhOA+dP3gJ$Ea&b_V8@FlQTtTM^tO8;JH|0quz4tU_3l-lB31A_y zH1=jjc>T;Rg~`?87tv#69^7)EcAZqr30<`2Jq@Po-;Z0Q_jbFap%5J(D0>_SD^ikO zfhkAH7|tYR*CM@?7zk-Ya{EaE+(v>AfW~@`HX&Nzm`XuKddM%5V0>rrE;~ngz8X+1 zNMOWv)qP>SX)_N>YK8Xe@y1jO$a|nR*{;*7K(|BG%%fK66<6R8!B2c)p4p(FYvutaSYd)mpB11*n3cL!)T3BiQy)h}~?8 z%Gl*4mi@M}ZQagRi7wqZ>*TJ&TEWRjv2-@BrqB z(cffS$wnM*j*-P}SSq`|Zi2D=IouoXJq^4e=S0_MZTu()sYay$!o2w93N-NoHNXTTwbqd8D0+~5_aRI>;=bwpS)j$q0OOJqeiguVx zzs(#4d4O+R;a(8I&Dc&GlbqVVjHVt^N@H&W)Zt8i+kq}m7*($TmW6g0o)u#8q1@{t zhh}gLQLCO8JvOnQfyN92rh}Mq>qzSX9MkkT{+<`D@ks=W3V^@x_zXn8cnK&I&F$-yXTOCZKrWLD$q+&^nM@{g-}_td zTJPSoC#2tB;CX!V^Z=9D`+e8-w|;9aW~xmpU^<6xI3iIL^2cY=P)swf@b{q!S(m4A~@^J*Gsy=S4 zCGhh4QK7~@3N_R;s8>UuLPSYyp(!QI+riqaM3O}^G*D@tgIa($HBXKI>NW8>KJ5c) zq(TNJtk~ff*@bA`9eP6uwdagByY-~t>@h+}_y8-LIJ%>X6+<|w4h;`pe{Ri-l+6^e`txEN%|^ zaxW)70MYg%6xpdoL6K8g2!>&|hp{DE=!q&*Epb!{f5|9obOyDUwKzYCe*>bw4+Tr5 zgcz}Rzo7X`RpybT+(`cl0|Wqdjkr?SL)j>c@0FG$Vd6$0B+@yOR;uod%Cn6WA@bvd zW5G92Tfj28yeLAZy%OyCmsduL12EH;KQ2P_%*aw1U>Nl5AbtfjxbQa|Ab&pU4KP{b z4Hw*lr~lWTY1RKh29Oh4_>eY{%K}PxM2OI%-$CdD=!N!?srO%{9jIKcM7jq?VpJni zI(P>fAq6pgTEmG_k}+p&a944wbHaUWr~@c zsSzf&APP`53g#4@q)(EaWqyioQ6-wvOLC$qYMK(0uBS}158i>j0Dydow6Rrh6aINx zmc|GDA!9;Ck9KNHGRiawp^V%+UOOQ1#y*YR#Kc*|w4bRFj_;sHpv0Hy#TZdGy%F#H zuLrwn0{i;3CdweCRT?>tL3VRH`LZ!K9?DOTHlU4^<)QayFa^I4#g>-huTrK8DXqN< zQEf@Y%(p7t|4p>llFBwf9xo@5DQf71l}M`8U4qybhq}}61y%kFr3B>h)ToWSAY^j| zQH7vT%m*D32(R8vIk8c&roi}VWusF4vRf;ancRUXaVxzUxnnwD2wul5^IJL5kh=1? z2TQtpXXzfRrd^&cR&m@>6hVcfVkD+okU#-m__VHLg(8$;%z9M|N`j{K3QbGat^Lw) zGsUNTbOR#CpxZIbN?~$}Yp_OvJG}%wQLsSr%IpF3?mSJqBIx}oq=i$sKpcOJsi|F+ zlNa{H<$SXVq5)ekp&Ptda7h~g$t$$pK`7VUj7PkRzf*~a%T}$ADLA>iqBW=Mi#|{e z>#hIxrA?LmJ*S?Q1Q|1l=}ZcsywIU-?KQKB@e-cywU)s(;<7Wk0fW9ucSd0}wf@mUa{ z*+)tB@%+^SE~&;S8_i4V3cc7$Gijn2tmPzsTsr~Gmp5QWs@(Y)8b-l9LcS_qPHILl z8fBuYfMY&PHh@gRj1_cylyR!S6d&745fy^NEHYx{h5xpy z3&HzFn>i|G@p!8#NR?rVVgPC*lLjC#$?T(QqnQ ztke`uC4kD2u8Y$l3_cPjGy+VRD12o3L@s@k`jU7jd(`N$9}B0quw!K5zL1{m1=(*NGm`RnBq>3xNN8{yD)lkWZ zf=@s3#2KiCp4LnhBifIEXWt_yY?Mpr1W3OWPJqCTO%#!!Y1BkkPc$Sbzr!R1$z%GH zEP+$do$84AC^%*x_4gB=1i@9#SOG9s5KXzBL;pGZ5yG|Lj1p{v)Qb%NW19TX%5Q0xe z6WcI@Cf}#@LwN`RCgaBB5ATJnrz-Kp!isC>4{W?!(otL)*=OwGJsFgigX++;eon4< z^kFMcY`{6J(8$l2PS^oNj0(_4PedOpm2m-9atGM8u41m_6z-y08dGHSd4#ZGs6zfW zBtJPQA1C*Nz?~P-TfX+@{IIm^^(4HC9l#%8i?% zm1yFW1!W#`lu^^Gf8t5YU70I(U%C%Y`GI}aN4jm_UhbS)BGDuzyYaB{< zNCH(a(fp!#;Rh)W!@>l$P+;K-<1VoEdQP=KAIC&Uvl~VMVdP0sOTQEr4XHJoTajxe z`9akP*`FE|E@HS(e~R^6Lf+B2VBk$9MfG)v34;bu-RxtybqBCkL)a)h#@k53O`0fR zN>~Ihg}esJc$8P;=TB5CJbz^kNFN3n&JdA*FcIf|>)$rYd$oQ`F`F`bQlv2~?#eAWc+9x1lisVYd*)fs$zi8^OyaP{p?g7TTMY zy?*jNgfh}k>WB>4e=#V0LkArJ(!n@cl<}Dg*@_DeBBb;i*rSj|ivX1X*c5A7CQ!zn z$%_ztt%uCRQ}pHv^NR;X5o0<@3$s%B-zRQqm)}R%``8;w;H9{tXjs6OMJX1~exOwh z<&gpkUh|aSA*;q+1hb@HV2;f7Q;z|g2ca>grSu*&44l@$Iuf9)BWUaWXk}ESHGw0o zNT0&*F}s8bN9Ac8gi&Bhff!VcQ8+7a5Q`3&CzH0Kd6^5}P0ifQb-swc;0ttKtoHI3 z)U$}RD1;bJ_m8kt1x}kmHaG9biN`$KF62>2u@1vldenwtFBSQ+%YH^`BQZo!# z$`Yy%sNw%)P54hhYgZW03Wbb4JN~8-hJC^!o(z&{rhplAnh>l_*2**sNu_1%PEeN7 za(GEZsWc=f-y70#USo7QF@x+PezQWd;^LjG4j8r&pMk0sY~Ta)TaRhw`_K)U#tC48 zqC}V(=wO^^e-!Lh-=(!bXw{f$#Y!%9Gt%f`f`fhbqITghNi4xilp533gM}W;U{X)H zigWYhCp!kEhv^z&YDU{n%wW~*bH0KSavJzp2&EJ<6NQa{5Q^jYcuAS`gpQH!nA}sy z`F{t+%V_rLC8Eu~zKaqVjC9o!s7+(yRiDfYy9iq*gSEP45{J?Y7PcU5EE;H4Y*6$i zjb$%lm&^j@y6^5Mi2gS2^ACU%l%MhlEno+X==9O@c zB#MaAzCRtciKak6!=q5oOk<>dUpyJT%*I0O47CJQLL$y?-=t7P6v?3%S1l-?KC~1@D-7WDwgA`S(>)l__M%GAZ0{b|dbcwzf?Ew2i zawkl_l?wk_5+_ADKz)&qqs%-*1C$XRduoS=sOFW%R*w;SlH=1(Paz_?TfF0_d^?#| zdR7Iw);q?sqz0l<@xcmM&jRh_k54)Z{)+}H(EBp~M&!YC=ssh0gdJR$IWbJ8F-!y_ z)0416LfZqer>USx4Jn9lMLF43YxpYP#c%>v709)>=46ozP)Sw-v6H9_1DK*^7%`u$E1J znecSvxJ9=O%I}f8CeDT$uyQqExS0Z&z!l(ek_0L7DGis1+(REKuW}D-Dbj;Htxq*f z^s*BvzF{VW3Ekvd-7vc$5MYaoE`zc}O0wmb?v&>f7CKh>a5j-S$lEC@!EZ$=7w}tA zOS%b~k}g{s0qHqTI=~_#L~sky@~AWsftU=V?u5p^km1GWJt2I&r1HwilRaAt3(xJ? z_ulr{=cboiY_W6W;&vrGu&uD`;FZ@BANo$(JR?3PDKS|$^57QmAb-<98Wx@ifT1Ep z9?@3SInqR=y9m5xdZ0}yz(;?=^GcRS5ba7OvC7dCBn*`5MMf^H<^D}GBGZ@j%cpzO z1N)2v{i#xy-fc(?H;C6)>q19$?g`D!bDM^eE?=3wp+Bzr{4U}2mi)_gGFv}TBDK{O z+$;%8TMDk%$ro~K9ODb@ebsHd@yNz)R#r}Ji7HUN9CUr{6S?u?g_!k zkadk>AS4i?sZK^+s0rm;LB41j3(Q!Bh+vMkGPENiw`fV3xgJJ@LLK6e5FUXNqnDJK z?7!RcAJ3-@e_WJRo}9C{!gq1`gH3wZB)#uEyY062iETG`1PZ=9HQ|Q~V+7yc^x)&^ zUF-G32Py}Al}>5El+$DloleRsH~If;EjVNM6&eHoyL!r>nK1hcO~EgnLyPCmtvk^5 znIozz1HJM&IR)$!k&(tx_Rma{M(q_Yt4za!lHO1yiH0wz5U(w26$WhjMNwBFUVU#g z#A_I1Gz8ZU>S88b3iDNI$47J4_e?Vl-er^LBNU1**7y0^g@04BV?cV~L<&bC0WK?vBDU$fx*PIs!)eW@t7rKFBq}ek=2U-;0ScC(oL-z1j~|`~{ewdIxp?`TT1uS6Xt;zM38?+~Yf57w!SN zxGCSgqWr43uD5gdneH{tLc8xVeLsBhkS_hmKXPMjXS$v^5Ffl;oVVlor@e>j!u?5C zX2tyYyS3-bDpEZ~W^+=D3qY9-mKb0CT$8-C`IK18R5SE|$+f{EE_uuwAHE(dgaN%x zmM%jkR$Q>{4}Vzes88*GGA3v6jCek-y1PWYkXU^+cbU0$V$tj;E{o2=!Sg!#7 z_Rh!Jq;30`KNvsq_XRZpn3@$Qv@EK=c&2*&^m4r*)s&u?V0@96fqxm`8-T53L z2Q_)VK>Ga`qi?g(w}RagMml|igRgrH@~}a`%l&$O{LlqdCio+HID-WseY!PWnRm2= zhbs%9YHq+TmmY}rzYpJLaBojB?rTL-^m9enZKb$w+O(&J!V$aOqz9e&!R zeIebMEnCLNvP#np$DZL&5<-n@4p$wY2@tb$2YgvzL3PWS>Y>Wij(g<6(mu}$i{q!; zYoD9GujcHTs$lsD{=6FZKT76x$N0@Zs9T-g zdHmDy)vh?PyJY36ReN$eC&?X616A(rVm^pgXQ8p<{&fGcged0!OZymM%Vpe75{5D5^O`vh9DZC56Tlo9( z58rCs|K|ALl})T@9U0c=`iq5bGh`xt@t*feQe5UGyY7nr;ml^gJHxV};hC76D|IP7 zKWe*v%2063`T2`y7QMSJF#N%m)N9jXgx}mVb;^{FDzjXnm7w$KedTTKwME;vZ*U&z z+b(w5|9xgNux&iPNeR#Dub=%OQzylVt~18fePxDlSDjvR3hRH+xW($tF%7xc)|R1% z1+Q7~95m!!-60QtYRDgQiZ@DY8iTFt8aAc(tS$;x8ll=(Q}XBoadoQ>cTd9}yi%k4 zVo7SR7wnVZD_>N+!O7BugND4$Njh(z0IwI=3s&(3317h^4lfcz%`AMqxGMxu+qtC6 z&q|x7#>WrfOdV&HEm&nsGp$+`FSAp%cZjj5_GZ4%hDyorCi&kbS{}Oul!PY4+H7SN zZGk5Chtv(hvZOF*|7I&Q+LR`Nzp#h)Ql$x${c~@&#p}O80s?ouj2Vi+mKNXD+syj# z0XzHPzq)>F8u_g*JV6|sU}SCs3#n;Yo71vN;a-VE4Sc293l=OWjvxBtma5^zn$E-; zk45UWNZ(~Lk(G5Qm&pZ6#Esa3j@X*Fznj}g@&9K)0d4W!Ols~nLIB#2Ty=ivAWv4Eo+;)U}TbW zx}&}|c&)IoaFW&apfxznmUXg08oscvwbGaT;r``^-1W^;&&M(O$4gsZuYD$IgjtEA zldFHVM=y*lFTHf59a{J%>Tlo|O_@41{fU&6C**fBQu+`j(PUnH9zD*Ni>sxcA(BY+ah>AixOqKnO;vw)>%g%J4Ke5!5 ze?wP&EV1fzv8yjuaR47T26pi~~Z!>zPqLhu88mxE4>1GgxB`qs3sAv{5$TLQhYR zi%vv28|r)$4O@-R&>SEhn})Ot~l0^2)uJFJGSHM-`i~>_}Ddm*?I^GOeonn=H4 zN=$jwQd70Zs#m35pe7jXrjS7Zt$;m|`=zHf<8T7r^1_8pting3SJMDzfO`W>zh^KL>{Gt4i zqkeb(4Gg#-AXwpa{XQX7Yb^uAo|0g!%5rUYJ8Y@_poAX%PaitHvSMD?w&j)lLodbm ze>rPnN<&WdReN)Db#QTdcX^vooj$c?LvxvM&-=n&h@IBP&iDu_1}x;d+157D3ilg) z5B$yCfkU1oo&W2)s)2{&UGFz#hq`1bZRXmmt<_nMfq@fq+j?OC-y+Mkd2I#20?r+z*SSo$ArMYAdQiieDLf<0!${pq6j2PgX+oj{BeM@7>LQvU zx%3|yhkj&IT{?z&m`b;*Q30P|hI$E6wM9l<#qwTUyAthnekuMZ;(P)O6=>KrV2qor0&vX4_)gW-@2i>L9QyFHTcqt zrI*?^#SedzmIb`lq33|=b+4>w z4a7pa32tH6uB9aqaV;1Ad#=r*53ZYjI$MRdfI$lBO^0f z;fSjZd-gBSZ(dm;od9XM-jp-E*BJ8XWSymyP?= z^1#5BLPn<#Pi9V^-6MN^Mx+)lBL2fLzI7n4m0x_Z`X^+T{d;Ov*Y;+) z2l#x?q`vau{!3HMDP7jr5^Sd`D`TBmLpv;k%|+Q~w~6ObljI+NcLDsxz}IINe*eDb zAimzN@A*lR>tsg#OYU#LlZfFHpu-14b1&B)%y8!3_~O+%s{jw^@#frk!Q!hdy|l)3 zIOQtv8Rp6z6YYcN^xcE6%Qqp!3;+J?M+1i)2kKh0y3QqehLYsd&LODn#p?52otvA} zK!_j{iYpj~e9iAIp0TWIEr`j?J+6P~b0LDcWY(|ly!aSi zS#}a|H1%B?C*K2t)F`&Kw4_L=%sdzp9wS9o_Gv2}A{o@MN=Tkk%Q?s+Fh(>#NOe0f zxBnO;0_$UXZ>Pu^tvZDApGT) z=({G{e7LX>l^nq}%GwbLrD#)s3T3_kJ#W^vhjs2Fkl5@s2CrtCvW6QQM?NUdJ5`)t z3Ndx-Q2TiO@cla1AL^<`=u_9{>-;O2T!3;8bPxT`i(%A9bIl{mAz)1kz6cnVY506h z{`Fd;=V(m9}4I-CJeC_U>`i-eH>@ zvI#8tUeCM_<=!yOZyvTgLZrTs1tBb2Z^LXrVS37+?A^O}5m^yJZz85%+5t&v=gH@v zF8<)Lna$uQQ~i@|SywHeH?7db!&b&A z@Fd-II_+ssUtB$<38QuCnn7yMWuyo1TzHv!m+pV2)S(SY8n=D>_mXB5FQ|M2a(bZ| z?6hgOEw&lldv4BezkKCay3}y5!N2#)YhNC&s4&~$_BJDa273BtKNG%H&4)$N?3`+D z8A)EcbZJSwMeiL3$g-@wgC*;+&;KHGCHr?X0JUQXJ>}UDZCQPdWL!f{KaYWC3ZIpV z5FX;NDPu@V_*`1-JXX1DzouV97`Ivo>L=%pI5v%aXDox@R*UZ*v9-B+H!}dm`K@Wb zN8b>^z6M#Pu0NrmGa&>$5Yu9?CIwxr2MO+`xKEjXEfeCS8+k=HvWyURyt`)R0jN$! zd7v`gk^s;U{PS1rR3G3y%|hx%`F4Vk=_gef;P)t9l_={#Dz=Q8?B|GX_LP^?=c%TE zq=pQZ=!Q)Sr-YDcg;P>OT?x^glH~+_)4R}lvN!r?oD%=t(hlB`fCJrVGAsDY<#Z$H z_f#O1nkgc?IZCwMhrG^<%o6z#dI0<-jQ2(CUaYJmc@vP!2CU1Qk+-D6=_8u@G)>9` zd?f?9liI#?I;fE2A)kTQ(KMuGDkZVckqe>3UvVUEA_XV|=;SI4s4UpB=<(;sL zzEBS>Vzrnq+*ncGsn<}JY!tx}u)p?Ri0yhl%#0s%`9g`ZZ4zmTAamKgXgvfqmDwOP zEcWQDYErzkIBJ|2XDjjfDmG%DqBAZ~=!R_s?GU2{&Va@oD&@t|6 zYj%OftIwFt;2qxHwCRqTzRH^J3Hp&&^zW8dGuH75K`ksOBpB7>A4-~NK$;}(SSC9ChB5+8s2 zAcWZWS?g!!cP12!IE9;a1p%jUeM>=z|I|&HGRS+8!pwi#J=8`BE5YTLHH>63vFuW@ z@-vDrNSj}|K?UhW#YOgN2;V~^(VTX~BwESpHsb;JM@_vD+BCdnW_#&WqN=cejlO=z zzxXZ}g@^49`S7I`CqS+X0A$d)ZlvfezO9yUP#5@ECrAA(z4UhM3Hlzq122(d#KNK@#8%sxZ&pM}N*s=ZxFICKS#2VFh+1FGRe{dvMDGfRYWGzug5 z>tosPq$U=vKrk>_EBTJ620zvXT%t{W6{4Gz3P8S#vev^s%-|OmDe9HSk01Z}i;3xf zgiy{d?IHO_S)U<}!%zD30|T=L?w zor2X6I&PD~Md8Z^IZR4HKfxHpe$RD zGT|05g#gKCo-!D#4aAhSuTCKK?JI_ckRFyDAw=4kV0rN3-B`|DRbkUGQWUo?~#%u=*qr)bOR-!$l zyd1R)ESKnCM)4BGZ=pnx^Henc{+OZZmZ5CXwpgA{f0DhwD0rwScegpW!W_J*xzj09 z|J~A55_;|AH;fD*>8Qeg`=~mOTi~523Zvd0Jvva1rC+7tXW6K-u6Dn~YI_&p8#W{E zh){#N?$=1v4~3%s)ZdqsaqTCA2a{gfg4O!rVCBH&T7#vgdtxg3JMeVAbt2TsWM~JEY*G)ZVP3n9yoz{oT?;V$fk<1kGep6O##J zkcMPxs%cbB7tMGgX#>Q_MD+%$5h7{Gg7ip*G!#bxKK*9cFQ+B3D^zz;+ZaKlp$UUO zO>%$7Is9*?p%-;R*pr-E)pz8|3wwq>5n+t+q$3A*0h-!!O8nkY@hG_#vVMwb5UHi+ zUsy=VR{qIJL}|Z+$cg}m#ZhFScqkcX(7uf1d>*V5ts73VkX$a0z3kNS6rlxi>r7&c z4^Wwv%Box9BQ~f)KAtR|%&e-P3x%A*7*Ptu>Dtz}-h?{P1tWxkk1!CdlKp7``=^Z3 zFjVZe&hIwz=6qCmlyJCwzGaP*A{FCHuab^t2trAjH+w`mTX8iu^s*$A#&uZMYo>Gx znjQ)y&LOpeEsn@Wi$TAdEQXS?3LVs{h!b7=Ft`rln7&=(vj#Wmq|d5uD=`??x-+Xz zKJL8p^?{Zv%?urtYq#h_e@dzo8(dup2fBgD^Q3NgpvVWc$|H7%y#orW7mQVbQjwq7 z_#eErH&?vAt!B`h>f5CE9j&_lw@@Od`4G1nj&Z_R{-+RaYlP+_bP=%uPZJ0WMq;+A z+Y2ajB$`h<_gCiW+tgBmgJx?^|N{WoaF9OG)_px8G*9mokI6Uot#amYGav_E< zqo()?T}ZnP;+wK_88yW(IhsNTyje6t3U5}#A;%c?D9NMHr8zY?FFUcWwH%}m2vRdh z*J27TI>Qjx-z`6l0#hmm`l=c{O?Kblfxh1wvQO`jHo}zW&^e<&{lJl%a0h8(Z2OMX z-iOn73!C*)mtF4dvx=?`#M)gcUmafSZI!^qoq-BqiM~6AP%9*+5SiNb*N+)-LO4ZX z8U3siLUkh4phXvk64a<2aaEYf-!+V-ZLlXMvL{%PS87>tfIZGn4`9HgRJ6s_;rXlb zR=!bbDQIHMmpJqjQDsq~gCXkE;KPedue~;f7xW=)z>p`g3d+Dc|FxCVFOra4TEhx2 zOEpvwK)sz%jS6fjN%d?MLurC1LqEhowIq8^UxR5pw9$UJEBn5cue}zZ%W5Q@z)eg5 zQ0&Fx8U5hV$-o=50#O zYVdX&UuQ-+^pm1&S6cVD`rVbz5q1;7FTqGS3oHoF-VT-VW#qwuJCJR$A}Wp+xpu;W zZevt`529EQEG1JA!1ovM;Yu=JoT`8`BDHC#!@BtHPpucC1tc_C)q{aH^Hym7y^Iob zoOiafJHb@34Re-eMUiD~yBG#~wqejq#HjnR6ZQrz0Q%{wHwfVH+3=xp66*I^*l^%YngU4cGR-V?Su zL-=A*p5G{S>x9|1I<19)#{AF&ynQ9<2Rmbp}-f(lJ-c32`-kiuk+4I!IViMeE& zwo5!O=87x8|Lr7xG;a`K#923rCU5t$QUGCxl+++#^SGMWGZ7B*K0>lQ3cXsO+2`a! z2>PVKEff9@WwQ}600pN%(a)|rLt9?Rw{=&%|LfRXM?;CNCG>t>m9KQ@p*eW6;Y-%+ zggw12hl8sGsM&VJ=%m2~HB-KVnr*HKe6G+Xzp$cwi7S)`EXL!d!l~lCR;T+vmo=Sx z)>6~++dXHr$188dJ{4NQjI;2|>gEls7HOdPIroA=n!PF!(iUBH2aSMtsl1K4aM;li zshl5OK;ZLI6%S;O_CPH4$snXf&3Y3lEus_&?}bGq)MG?(2_Ec>^gAJvSS5NIOQiEw z>4vS~VvN*ouIh*Coum2~Gqd>@yL7Tw_*%Ts+tAb!deG{c<6IXNT3x<+_3#IBNsoJW z$+NpV{r&^aK#$?(kyRT|*N1yESM`jGM;{ItxGi_H7&@bu)};ReV+4XMF-B;mr%e&= zwAG=hqwzziz3R+WkxvVy)&K=Ew~p0Klc-4$p_5alrZU8N6Op+*0iOWr%L>Y8^kZ*3 z<*9(creRh>a!##!fT-`}i8Px6(ofDy+R19S5?Ig@{Sd?(Q%ymrv1MBacj*1|b)H<& zyHr2qtCPdJAuD)rCAzz`#4o>=nYqp3V3cNiFC7-zMIghOvYLSs?#ya#ZJkiz=2NvO zZ^d{Qoz44>r@H-ov@`;^#DRrpPu6z5Ag2ecRw4=mVFLDn{9D>8&5jFdN*6DfS9WF5|m*zycvGvx!4DAE+j$TmQk z_h>15C(NwKD^<{eGuc5qK>|d9CTv8Zexa!89Y17xDML`xpz|Nqg|=5PhEr9V@02C< zaZ#Y!9xT(%HV@P^XQ#4=NSc=RTxR#lIMcNPI+fdisb&rWFr6g$oAS=ZRv&AyNbl*d z>A$9ohoXEM(`nno|A1;RzhktCd^k<*kRwLRY+y=Pf2W`_H_m<=UU=>oGM zSU)Q7CNzwN6JpvEt)%cFuMo1Bqc^Kws4S=}U&Y-9=#R?-8rjZd=1JsnWShiw#CLzdA zq$bFr5>edN zyp6t$YCy`27&A5dMh!$#oH=3&N;<=DpF%Z=!HUsls5P#zh<$oWO224SN>3L3%a!D^ z*!xn>7}-$0EEIdCwfglSN$zJ3#*En@ZNsyoZn=~ZSUp(AMU`M7jxee(GupN8j-Ko! z5NloSMz(8j6h~kS4opwg`C4|euV`Grr_ycG*^)GYKJx|K%ybmcat0XbW26Q^w9)jG z1o*u@D#YO(WJIDOVlG1LBptC6;DF0SHK*yV)Jn8S z(UE;PRO2JOE7-;^@YWfO_~0n*nqEpj*8h|-9;8Vm9miEzhkB2wQ(kQ+bW$#cua6-S zl%E7XhEfr6BPT{<;R%s6wt8T@P<@#$b<`M05oJOqoXw zIgfayP;?;z*`Ak_!cpMcSGwJ9f1F$zLfI zKViNa7Et=6lDGL|P`ns9B7{R|uno%+@L|4-U>pwQlI!8sE#uTS#U!MeMP|k?ibP$? zuq8Xn*RALz=+`8eaBrkLCa$WIh!m5VBEAZoCZEk3c}x;vev{ynwpMg|i9|onrAj5QS%|O4myc z5p5*=ibd?h_bS6dh2`hZT}l1ItqRcvqVb{KZ(?5oB#mOO(%4MOQYom0iG0vC#)E3Y z>ZIHXgP2U352H?`9uNITu2@SwjkjQNaMb_u2=~#L&s+Wm|Di|tJ}wUa3@0H)|BxSf zWb6+??6~;9SX2=G@9F=QOaI2|c4K`~PJ51Re;DhNk`=~$j`<K6gCEtpoMmB(0@U4z%&B(XLLwg$En)~R}Sp5Gr9-X>zxyg5U Xwtk+Qd>j1V!l$17#ex6x^2YxMeGqed