From 5c254697375d599a5a32530ec91cac58df8b53a7 Mon Sep 17 00:00:00 2001 From: Arnav G <73305591+arnavg115@users.noreply.github.com> Date: Mon, 7 Oct 2024 04:28:03 +0000 Subject: [PATCH 01/14] Added draw triangle with success condition --- mani_skill/envs/tasks/drawing/__init__.py | 1 + .../envs/tasks/drawing/draw_triangle.py | 301 ++++++++++++++++++ .../motionplanning/panda_stick/run.py | 92 ++++++ .../panda_stick/solutions/__init__.py | 1 + .../panda_stick/solutions/draw_triangle.py | 41 +++ 5 files changed, 436 insertions(+) create mode 100644 mani_skill/envs/tasks/drawing/draw_triangle.py create mode 100644 mani_skill/examples/motionplanning/panda_stick/run.py create mode 100644 mani_skill/examples/motionplanning/panda_stick/solutions/__init__.py create mode 100644 mani_skill/examples/motionplanning/panda_stick/solutions/draw_triangle.py diff --git a/mani_skill/envs/tasks/drawing/__init__.py b/mani_skill/envs/tasks/drawing/__init__.py index c6df1f738..f90b9a236 100644 --- a/mani_skill/envs/tasks/drawing/__init__.py +++ b/mani_skill/envs/tasks/drawing/__init__.py @@ -1 +1,2 @@ from .draw import * +from .draw_triangle import * \ No newline at end of file diff --git a/mani_skill/envs/tasks/drawing/draw_triangle.py b/mani_skill/envs/tasks/drawing/draw_triangle.py new file mode 100644 index 000000000..8275c90b0 --- /dev/null +++ b/mani_skill/envs/tasks/drawing/draw_triangle.py @@ -0,0 +1,301 @@ +import random +from typing import Dict + +import numpy as np +import sapien +import torch +from transforms3d.euler import euler2quat + +from mani_skill.agents.robots.panda.panda_stick import PandaStick +from mani_skill.envs.sapien_env import BaseEnv +from mani_skill.sensors.camera import CameraConfig +from mani_skill.utils import sapien_utils +from mani_skill.utils.registration import register_env +from mani_skill.utils.scene_builder.table.scene_builder import TableSceneBuilder +from mani_skill.utils.structs.actor import Actor +from mani_skill.utils.structs.pose import Pose +from mani_skill.utils.structs.types import SceneConfig, SimConfig +import math + +@register_env("DrawTriangle-v1", max_episode_steps=1000) +class DrawTriangle(BaseEnv): + """ + This is a simple environment demonstrating drawing simulation on a table with a robot arm. There are no success/rewards defined, users can use this code as a starting point + to create their own drawing type tasks. + """ + + MAX_DOTS = 1010 + """ + The total "ink" available to use and draw with before you need to call env.reset. NOTE that on GPU simulation it is not recommended to have a very high value for this as it can slow down rendering + when too many objects are being rendered in many scenes. + """ + DOT_THICKNESS = 0.003 + """thickness of the paint drawn on to the canvas""" + CANVAS_THICKNESS = 0.02 + """How thick the canvas on the table is""" + BRUSH_RADIUS = 0.01 + """The brushes radius""" + BRUSH_COLORS = [[0.8, 0.2, 0.2, 1]] + """The colors of the brushes. If there is more than one color, each parallel environment will have a randomly sampled color.""" + THRESHOLD = 0.1 + + + SUPPORTED_REWARD_MODES = ["none"] + + SUPPORTED_ROBOTS: ["panda_stick"] # type: ignore + agent: PandaStick + + def __init__(self, *args, robot_uids="panda_stick", **kwargs): + super().__init__(*args, robot_uids=robot_uids, **kwargs) + + @property + def _default_sim_config(self): + # we set contact_offset to a small value as we are not expecting to make any contacts really apart from the brush hitting the canvas too hard. + # We set solver iterations very low as this environment is not doing a ton of manipulation (the brush is attached to the robot after all) + return SimConfig( + sim_freq=100, + control_freq=20, + scene_config=SceneConfig( + contact_offset=0.01, + solver_position_iterations=4, + solver_velocity_iterations=0, + ), + ) + + @property + def _default_sensor_configs(self): + pose = sapien_utils.look_at(eye=[0.3, 0, 0.8], target=[0, 0, 0.1]) + return [ + CameraConfig( + "base_camera", + pose=pose, + width=320, + height=240, + fov=1.2, + near=0.01, + far=100, + ) + ] + + @property + def _default_human_render_camera_configs(self): + pose = sapien_utils.look_at(eye=[0.3, 0, 0.8], target=[0, 0, 0.1]) + return CameraConfig( + "render_camera", + pose=pose, + width=1280, + height=960, + fov=1.2, + near=0.01, + far=100, + ) + + def _load_scene(self, options: dict): + + self.table_scene = TableSceneBuilder(self, robot_init_qpos_noise=0) + self.table_scene.build() + def create_goal_triangle(name="tri", base_color=None): + + box1_half_w = 0.3 / 2 + box1_half_h = 0.01 / 2 + half_thickness = 0.04 / 2 + + # change, rn too lazy to import pi correctly + pi = 3.1415926 + + # approx div by sqrt(3) + radius = (box1_half_w) / 1.73205080757 + + theta = random.random() * (2/3 * pi) + + # define centers and compute verticies, might need to adjust how centers are calculated or add a theta arg for variation + c1 = np.array([radius* math.cos(theta),radius* math.sin(theta), 0.01]) + c2 = np.array([radius * math.cos(theta + (2* pi/3)), radius * math.sin(theta + (2* pi /3)), 0.01]) + c3 = np.array([radius * math.cos((theta+ (4*pi/3))), radius * math.sin(theta + (4*pi/3)), 0.01]) + self.v1 = (c1 + c3) - c2 + self.v2 = (c1 + c2) - c3 + self.v3 = (c2 + c3) - c1 + + builder = self.scene.create_actor_builder() + first_block_pose = sapien.Pose(list(c1), euler2quat(0,0,theta - (pi/2))) + first_block_size = [box1_half_w, box1_half_h, half_thickness] + builder.add_box_visual( + pose=first_block_pose, + half_size=first_block_size, + material=sapien.render.RenderMaterial( + base_color=base_color, + ), + ) + + second_block_pose = sapien.Pose(list(c2), euler2quat(0,0,theta-(5*pi/6))) + second_block_size = [box1_half_w, box1_half_h, half_thickness] + # builder.add_box_collision(pose=second_block_pose, half_size=second_block_size) + builder.add_box_visual( + pose=second_block_pose, + half_size=second_block_size, + material=sapien.render.RenderMaterial( + base_color=base_color, + ), + ) + + third_block_pose = sapien.Pose(list(c3),euler2quat(0,0,theta -(pi/6))) + third_block_size = [box1_half_w, box1_half_h, half_thickness] + # builder.add_box_collision(pose=second_block_pose, half_size=second_block_size) + builder.add_box_visual( + pose=third_block_pose, + half_size=third_block_size, + material=sapien.render.RenderMaterial( + base_color=base_color, + ), + ) + return builder.build_kinematic(name=name) + + + # build a white canvas on the table + self.canvas = self.scene.create_actor_builder() + self.canvas.add_box_visual( + half_size=[0.4, 0.6, self.CANVAS_THICKNESS / 2], + material=sapien.render.RenderMaterial(base_color=[1, 1, 1, 1]), + ) + self.canvas.add_box_collision( + half_size=[0.4, 0.6, self.CANVAS_THICKNESS / 2], + ) + self.canvas.initial_pose = sapien.Pose(p=[-0.1, 0, self.CANVAS_THICKNESS / 2]) + self.canvas = self.canvas.build_static(name="canvas") + + self.dots = [] + self.dot_pos = [] + color_choices = torch.randint(0, len(self.BRUSH_COLORS), (self.num_envs,)) + for i in range(self.MAX_DOTS): + actors = [] + if len(self.BRUSH_COLORS) > 1: + for env_idx in range(self.num_envs): + builder = self.scene.create_actor_builder() + builder.add_cylinder_visual( + radius=self.BRUSH_RADIUS, + half_length=self.DOT_THICKNESS / 2, + material=sapien.render.RenderMaterial( + base_color=self.BRUSH_COLORS[color_choices[env_idx]] + ), + ) + builder.set_scene_idxs([env_idx]) + actor = builder.build_kinematic(name=f"dot_{i}_{env_idx}") + actors.append(actor) + self.dots.append(Actor.merge(actors)) + else: + builder = self.scene.create_actor_builder() + builder.add_cylinder_visual( + radius=self.BRUSH_RADIUS, + half_length=self.DOT_THICKNESS / 2, + material=sapien.render.RenderMaterial( + base_color=self.BRUSH_COLORS[0] + ), + ) + actor = builder.build_kinematic(name=f"dot_{i}") + self.dots.append(actor) + self.goal_tee = create_goal_triangle( + name="goal_tri", + base_color=np.array([255, 255, 255, 255/4]) / 255, + ) + + def _initialize_episode(self, env_idx: torch.Tensor, options: dict): + # NOTE (stao): for simplicity this task cannot handle partial resets + self.draw_step = 0 + with torch.device(self.device): + self.table_scene.initialize(env_idx) + for dot in self.dots: + # initially spawn dots in the table so they aren't seen + dot.set_pose( + sapien.Pose( + p=[0, 0, -self.DOT_THICKNESS], q=euler2quat(0, np.pi / 2, 0) + ) + ) + + def _after_control_step(self): + if self.gpu_sim_enabled: + self.scene._gpu_fetch_all() + + # This is the actual, GPU parallelized, drawing code. + # This is not real drawing but seeks to mimic drawing by placing dots on the canvas whenever the robot is close enough to the canvas surface + # We do not actually check if the robot contacts the table (although that is possible) and instead use a fast method to check. + # We add a 0.005 meter of leeway to make it easier for the robot to get close to the canvas and start drawing instead of having to be super close to the table. + robot_touching_table = ( + self.agent.tcp.pose.p[:, 2] + < self.CANVAS_THICKNESS + self.DOT_THICKNESS + 0.005 + ) + robot_brush_pos = torch.zeros((self.num_envs, 3), device=self.device) + robot_brush_pos[:, 2] = -self.DOT_THICKNESS + robot_brush_pos[robot_touching_table, :2] = self.agent.tcp.pose.p[ + robot_touching_table, :2 + ] + robot_brush_pos[robot_touching_table, 2] = ( + self.DOT_THICKNESS / 2 + self.CANVAS_THICKNESS + ) + # move the next unused dot to the robot's brush position. All unused dots are initialized inside the table so they aren't visible + new_dot_pos = Pose.create_from_pq(robot_brush_pos, euler2quat(0, np.pi / 2, 0)) + self.dots[self.draw_step].set_pose( + new_dot_pos + ) + if new_dot_pos.get_p()[:,-1] > 0: + self.dot_pos.append(new_dot_pos.get_p()) + + self.draw_step += 1 + + # on GPU sim we have to call _gpu_apply_all() to apply the changes we make to object poses. + if self.gpu_sim_enabled: + self.scene._gpu_apply_all() + + def evaluate(self): + out = self.success_check() + return { "success" : out} + + def _get_obs_extra(self, info: Dict): + return dict( + tcp_pose=self.agent.tcp.pose.raw_pose, + ) + + def generate_triangle_with_points(self, n, vertices, interpolate = 0): + # Create an empty array to hold the points, starting with the vertices + all_points = [] + + # Loop through each side of the triangle and generate `n` points on each side + for i in range(len(vertices)): + start_vertex = vertices[i] + end_vertex = vertices[(i+1) % len(vertices)] + + # Generate n+1 points between start and end vertex, including the start point but excluding the end point + intermediate_points = np.linspace(start_vertex, end_vertex, n+2)[:-1] + + # Add the points to the all_points list + all_points.extend(intermediate_points) + + # Convert the list of points to a numpy array + all_points = np.array(all_points) + + for i in range(interpolate): + ind = i = np.random.randint(0, all_points.shape[0] - 1) + p1 = all_points[ind] + p2 = all_points[ind + 1] + p_interpolated = (0.5) * p1 + 0.5 * p2 + all_points = np.insert(all_points, ind + 1, p_interpolated, axis=0) + + + return all_points + + def success_check(self): + if len(self.dot_pos) == 0: + return torch.Tensor([False]).to(bool) + d_points = [] + for pos in self.dot_pos: + d_points.append(pos.cpu().numpy()[:,:-1]) + + drawn_pts = np.vstack(d_points) + + target_points = self.generate_triangle_with_points(100, [self.v1[:-1], self.v2[:-1], self.v3[:-1]],0) + distance_matrix = np.sqrt(np.sum((drawn_pts[:, None, :] - target_points[None, :, :]) ** 2, axis=-1)) + Y_closeness = np.min(distance_matrix, axis=0) < self.THRESHOLD + + return torch.Tensor([np.all(Y_closeness)]).to(bool) + + + diff --git a/mani_skill/examples/motionplanning/panda_stick/run.py b/mani_skill/examples/motionplanning/panda_stick/run.py new file mode 100644 index 000000000..5066fbc38 --- /dev/null +++ b/mani_skill/examples/motionplanning/panda_stick/run.py @@ -0,0 +1,92 @@ +import argparse +import gymnasium as gym +import numpy as np +from tqdm import tqdm +import os.path as osp +from mani_skill.utils.wrappers.record import RecordEpisode +from mani_skill.examples.motionplanning.panda_stick.solutions import solveDrawTriangle + +MP_SOLUTIONS = { + "DrawTriangle-v1" : solveDrawTriangle +} +def parse_args(args=None): + parser = argparse.ArgumentParser() + parser.add_argument("-e", "--env-id", type=str, default="DrawTriangle-v1", help=f"Environment to run motion planning solver on. Available options are {list(MP_SOLUTIONS.keys())}") + parser.add_argument("-o", "--obs-mode", type=str, default="none", help="Observation mode to use. Usually this is kept as 'none' as observations are not necesary to be stored, they can be replayed later via the mani_skill.trajectory.replay_trajectory script.") + parser.add_argument("-n", "--num-traj", type=int, default=10, help="Number of trajectories to generate.") + parser.add_argument("--only-count-success", action="store_true", help="If true, generates trajectories until num_traj of them are successful and only saves the successful trajectories/videos") + parser.add_argument("--reward-mode", type=str) + parser.add_argument("-b", "--sim-backend", type=str, default="auto", help="Which simulation backend to use. Can be 'auto', 'cpu', 'gpu'") + parser.add_argument("--render-mode", type=str, default="rgb_array", help="can be 'sensors' or 'rgb_array' which only affect what is saved to videos") + parser.add_argument("--vis", action="store_true", help="whether or not to open a GUI to visualize the solution live") + parser.add_argument("--save-video", action="store_true", help="whether or not to save videos locally") + parser.add_argument("--traj-name", type=str, help="The name of the trajectory .h5 file that will be created.") + parser.add_argument("--shader", default="default", type=str, help="Change shader used for rendering. Default is 'default' which is very fast. Can also be 'rt' for ray tracing and generating photo-realistic renders. Can also be 'rt-fast' for a faster but lower quality ray-traced renderer") + parser.add_argument("--record-dir", type=str, default="demos", help="where to save the recorded trajectories") + return parser.parse_args() + +def main(args): + env_id = args.env_id + env = gym.make( + env_id, + obs_mode=args.obs_mode, + control_mode="pd_joint_pos", + render_mode="rgb_array", + ) + if env_id not in MP_SOLUTIONS: + raise RuntimeError(f"No already written motion planning solutions for {env_id}. Available options are {list(MP_SOLUTIONS.keys())}") + env = RecordEpisode( + env, + output_dir=osp.join(args.record_dir, env_id, "motionplanning"), + trajectory_name=args.traj_name, save_video=args.save_video, + source_type="motionplanning", + source_desc="official motion planning solution from ManiSkill contributors", + video_fps=30, + save_on_reset=False + ) + solve = MP_SOLUTIONS[env_id] + print(f"Motion Planning Running on {env_id}") + pbar = tqdm(range(args.num_traj)) + seed = 0 + successes = [] + solution_episode_lengths = [] + failed_motion_plans = 0 + passed = 0 + while True: + res = solve(env, seed=seed, debug=False, vis=True if args.vis else False) + if res == -1: + success = False + failed_motion_plans += 1 + else: + success = res[-1]["success"].item() + elapsed_steps = res[-1]["elapsed_steps"].item() + solution_episode_lengths.append(elapsed_steps) + successes.append(success) + if args.only_count_success and not success: + seed += 1 + env.flush_trajectory(save=False) + if args.save_video: + env.flush_video(save=False) + continue + else: + env.flush_trajectory() + if args.save_video: + env.flush_video() + pbar.update(1) + pbar.set_postfix( + dict( + success_rate=np.mean(successes), + failed_motion_plan_rate=failed_motion_plans / (seed + 1), + avg_episode_length=np.mean(solution_episode_lengths), + max_episode_length=np.max(solution_episode_lengths), + # min_episode_length=np.min(solution_episode_lengths) + ) + ) + seed += 1 + passed += 1 + if passed == args.num_traj: + break + env.close() + +if __name__ == "__main__": + main(parse_args()) \ No newline at end of file diff --git a/mani_skill/examples/motionplanning/panda_stick/solutions/__init__.py b/mani_skill/examples/motionplanning/panda_stick/solutions/__init__.py new file mode 100644 index 000000000..8186dd53f --- /dev/null +++ b/mani_skill/examples/motionplanning/panda_stick/solutions/__init__.py @@ -0,0 +1 @@ +from .draw_triangle import solve as solveDrawTriangle \ No newline at end of file diff --git a/mani_skill/examples/motionplanning/panda_stick/solutions/draw_triangle.py b/mani_skill/examples/motionplanning/panda_stick/solutions/draw_triangle.py new file mode 100644 index 000000000..1a3086e72 --- /dev/null +++ b/mani_skill/examples/motionplanning/panda_stick/solutions/draw_triangle.py @@ -0,0 +1,41 @@ +import numpy as np +import sapien +from PIL import Image + +from mani_skill.envs.tasks import PushCubeEnv +from mani_skill.examples.motionplanning.panda_stick.motionplanner import \ + PandaStickMotionPlanningSolver + +def solve(env: PushCubeEnv, seed=None, debug=False, vis=False): + env.reset(seed=seed) + planner = PandaStickMotionPlanningSolver( + env, + debug=debug, + vis=vis, + base_pose=env.unwrapped.agent.robot.pose, + visualize_target_grasp_pose=vis, + print_env_info=False, + ) + + FINGER_LENGTH = 0.025 + env = env.unwrapped + + + rot = list(env.agent.tcp.pose.get_q()[0].cpu().numpy()) + reach_pose = sapien.Pose(p=list(env.v1), q = rot) + res = planner.move_to_pose_with_screw(reach_pose) + # -------------------------------------------------------------------------- # + # Move to second vertex + # -------------------------------------------------------------------------- # + + reach_pose = sapien.Pose(p=list(env.v2), q = rot) + res = planner.move_to_pose_with_screw(reach_pose) + + reach_pose = sapien.Pose(p=list(env.v3), q = rot) + res = planner.move_to_pose_with_screw(reach_pose) + + reach_pose = sapien.Pose(p=list(env.v1), q = rot) + res = planner.move_to_pose_with_screw(reach_pose) + + planner.close() + return res \ No newline at end of file From f1e4826255329941211d19326f6d85cbb14ef6b8 Mon Sep 17 00:00:00 2001 From: Arnav G <73305591+arnavg115@users.noreply.github.com> Date: Thu, 10 Oct 2024 01:08:05 +0000 Subject: [PATCH 02/14] parallelized progress --- .../envs/tasks/drawing/draw_triangle.py | 89 ++++++++++--------- .../panda_stick/solutions/draw_triangle.py | 8 +- 2 files changed, 50 insertions(+), 47 deletions(-) diff --git a/mani_skill/envs/tasks/drawing/draw_triangle.py b/mani_skill/envs/tasks/drawing/draw_triangle.py index 8275c90b0..26ad7cda8 100644 --- a/mani_skill/envs/tasks/drawing/draw_triangle.py +++ b/mani_skill/envs/tasks/drawing/draw_triangle.py @@ -5,7 +5,10 @@ import sapien import torch from transforms3d.euler import euler2quat +from transforms3d.quaternions import quat2mat +import mani_skill.envs.utils.randomization as randomization +from mani_skill.utils.geometry.rotation_conversions import quaternion_to_matrix from mani_skill.agents.robots.panda.panda_stick import PandaStick from mani_skill.envs.sapien_env import BaseEnv from mani_skill.sensors.camera import CameraConfig @@ -106,15 +109,13 @@ def create_goal_triangle(name="tri", base_color=None): # approx div by sqrt(3) radius = (box1_half_w) / 1.73205080757 - theta = random.random() * (2/3 * pi) + theta = pi/2 # define centers and compute verticies, might need to adjust how centers are calculated or add a theta arg for variation c1 = np.array([radius* math.cos(theta),radius* math.sin(theta), 0.01]) c2 = np.array([radius * math.cos(theta + (2* pi/3)), radius * math.sin(theta + (2* pi /3)), 0.01]) c3 = np.array([radius * math.cos((theta+ (4*pi/3))), radius * math.sin(theta + (4*pi/3)), 0.01]) - self.v1 = (c1 + c3) - c2 - self.v2 = (c1 + c2) - c3 - self.v3 = (c2 + c3) - c1 + self.original_verts = np.array([(c1 + c3) - c2 , (c1 + c2) - c3, (c2 + c3) - c1]) builder = self.scene.create_actor_builder() first_block_pose = sapien.Pose(list(c1), euler2quat(0,0,theta - (pi/2))) @@ -164,7 +165,7 @@ def create_goal_triangle(name="tri", base_color=None): self.canvas = self.canvas.build_static(name="canvas") self.dots = [] - self.dot_pos = [] + self.dot_pos = None color_choices = torch.randint(0, len(self.BRUSH_COLORS), (self.num_envs,)) for i in range(self.MAX_DOTS): actors = [] @@ -193,7 +194,7 @@ def create_goal_triangle(name="tri", base_color=None): ) actor = builder.build_kinematic(name=f"dot_{i}") self.dots.append(actor) - self.goal_tee = create_goal_triangle( + self.goal_tri = create_goal_triangle( name="goal_tri", base_color=np.array([255, 255, 255, 255/4]) / 255, ) @@ -202,7 +203,22 @@ def _initialize_episode(self, env_idx: torch.Tensor, options: dict): # NOTE (stao): for simplicity this task cannot handle partial resets self.draw_step = 0 with torch.device(self.device): + b = len(env_idx) self.table_scene.initialize(env_idx) + target_pos = torch.zeros((b, 3)) + + target_pos[:,:2] = torch.rand((b,2))*0.02-0.1 + target_pos[:,-1] = 0.01 + qs = randomization.random_quaternions(b, lock_x=True, lock_y=True) + mats = quaternion_to_matrix(qs) + self.goal_tri.set_pose(Pose.create_from_pq(p=target_pos, q=qs)) + self.vertices = torch.from_numpy(np.tile(self.original_verts, (b, 1,1))) # b, 3, 3 + self.vertices = torch.matmul(self.vertices.double(), mats.double()) + self.vertices += target_pos + + + self.triangles = self.generate_triangle_with_points(100, self.vertices[:,:,:-1]) + for dot in self.dots: # initially spawn dots in the table so they aren't seen dot.set_pose( @@ -237,7 +253,9 @@ def _after_control_step(self): new_dot_pos ) if new_dot_pos.get_p()[:,-1] > 0: - self.dot_pos.append(new_dot_pos.get_p()) + if self.dot_pos == None: + self.dot_pos = new_dot_pos.get_p()[:, None, :] + self.dot_pos = torch.cat((self.dot_pos, new_dot_pos.get_p()[:, None,: ]), dim=1) self.draw_step += 1 @@ -254,48 +272,33 @@ def _get_obs_extra(self, info: Dict): tcp_pose=self.agent.tcp.pose.raw_pose, ) - def generate_triangle_with_points(self, n, vertices, interpolate = 0): - # Create an empty array to hold the points, starting with the vertices + def generate_triangle_with_points(self, n, vertices): + batch_size = vertices.shape[0] + all_points = [] - # Loop through each side of the triangle and generate `n` points on each side - for i in range(len(vertices)): - start_vertex = vertices[i] - end_vertex = vertices[(i+1) % len(vertices)] - - # Generate n+1 points between start and end vertex, including the start point but excluding the end point - intermediate_points = np.linspace(start_vertex, end_vertex, n+2)[:-1] - - # Add the points to the all_points list - all_points.extend(intermediate_points) - - # Convert the list of points to a numpy array - all_points = np.array(all_points) - - for i in range(interpolate): - ind = i = np.random.randint(0, all_points.shape[0] - 1) - p1 = all_points[ind] - p2 = all_points[ind + 1] - p_interpolated = (0.5) * p1 + 0.5 * p2 - all_points = np.insert(all_points, ind + 1, p_interpolated, axis=0) - + for i in range(vertices.shape[1]): + start_vertex = vertices[:, i, :] + end_vertex = vertices[:, (i+1) % vertices.shape[1], :] + t = torch.linspace(0, 1, n+2, device=vertices.device)[:-1] + t = t.view(1, -1, 1).repeat(batch_size, 1, 2) + intermediate_points = start_vertex.unsqueeze(1) * (1 - t) + end_vertex.unsqueeze(1) * t + all_points.append(intermediate_points) + all_points = torch.cat(all_points, dim=1) return all_points def success_check(self): - if len(self.dot_pos) == 0: + if self.dot_pos == None or len(self.dot_pos) == 0: return torch.Tensor([False]).to(bool) - d_points = [] - for pos in self.dot_pos: - d_points.append(pos.cpu().numpy()[:,:-1]) - - drawn_pts = np.vstack(d_points) - - target_points = self.generate_triangle_with_points(100, [self.v1[:-1], self.v2[:-1], self.v3[:-1]],0) - distance_matrix = np.sqrt(np.sum((drawn_pts[:, None, :] - target_points[None, :, :]) ** 2, axis=-1)) - Y_closeness = np.min(distance_matrix, axis=0) < self.THRESHOLD - - return torch.Tensor([np.all(Y_closeness)]).to(bool) - + drawn_pts = self.dot_pos[:,:,:-1] + distance_matrix = torch.sqrt( + torch.sum( + (drawn_pts[:, :, None, :] - self.triangles[:, None, :, :]) ** 2, + axis=-1 + ) + ) + Y_closeness = torch.min(distance_matrix, dim = 1).values < self.THRESHOLD + return torch.Tensor([torch.all(Y_closeness)]).to(bool) diff --git a/mani_skill/examples/motionplanning/panda_stick/solutions/draw_triangle.py b/mani_skill/examples/motionplanning/panda_stick/solutions/draw_triangle.py index 1a3086e72..29d7c5d9a 100644 --- a/mani_skill/examples/motionplanning/panda_stick/solutions/draw_triangle.py +++ b/mani_skill/examples/motionplanning/panda_stick/solutions/draw_triangle.py @@ -22,19 +22,19 @@ def solve(env: PushCubeEnv, seed=None, debug=False, vis=False): rot = list(env.agent.tcp.pose.get_q()[0].cpu().numpy()) - reach_pose = sapien.Pose(p=list(env.v1), q = rot) + reach_pose = sapien.Pose(p=list(env.vertices[0,0].numpy()), q = rot) res = planner.move_to_pose_with_screw(reach_pose) # -------------------------------------------------------------------------- # # Move to second vertex # -------------------------------------------------------------------------- # - reach_pose = sapien.Pose(p=list(env.v2), q = rot) + reach_pose = sapien.Pose(p=list(env.vertices[0,1]), q = rot) res = planner.move_to_pose_with_screw(reach_pose) - reach_pose = sapien.Pose(p=list(env.v3), q = rot) + reach_pose = sapien.Pose(p=list(env.vertices[0,2]), q = rot) res = planner.move_to_pose_with_screw(reach_pose) - reach_pose = sapien.Pose(p=list(env.v1), q = rot) + reach_pose = sapien.Pose(p=list(env.vertices[0,0]), q = rot) res = planner.move_to_pose_with_screw(reach_pose) planner.close() From de9b921b471c72c8edd39b8aebb419cf8edb8bda Mon Sep 17 00:00:00 2001 From: Arnav G <73305591+arnavg115@users.noreply.github.com> Date: Thu, 10 Oct 2024 06:16:22 +0000 Subject: [PATCH 03/14] fixed triangle rotation issues --- .../envs/tasks/drawing/draw_triangle.py | 19 ++++++++++--------- mani_skill/examples/.gitignore | 3 ++- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/mani_skill/envs/tasks/drawing/draw_triangle.py b/mani_skill/envs/tasks/drawing/draw_triangle.py index 26ad7cda8..41ad88508 100644 --- a/mani_skill/envs/tasks/drawing/draw_triangle.py +++ b/mani_skill/envs/tasks/drawing/draw_triangle.py @@ -4,7 +4,7 @@ import numpy as np import sapien import torch -from transforms3d.euler import euler2quat +from transforms3d.euler import euler2quat, quat2euler from transforms3d.quaternions import quat2mat import mani_skill.envs.utils.randomization as randomization @@ -40,7 +40,7 @@ class DrawTriangle(BaseEnv): """The brushes radius""" BRUSH_COLORS = [[0.8, 0.2, 0.2, 1]] """The colors of the brushes. If there is more than one color, each parallel environment will have a randomly sampled color.""" - THRESHOLD = 0.1 + THRESHOLD = 0.05 SUPPORTED_REWARD_MODES = ["none"] @@ -112,9 +112,9 @@ def create_goal_triangle(name="tri", base_color=None): theta = pi/2 # define centers and compute verticies, might need to adjust how centers are calculated or add a theta arg for variation - c1 = np.array([radius* math.cos(theta),radius* math.sin(theta), 0.01]) - c2 = np.array([radius * math.cos(theta + (2* pi/3)), radius * math.sin(theta + (2* pi /3)), 0.01]) - c3 = np.array([radius * math.cos((theta+ (4*pi/3))), radius * math.sin(theta + (4*pi/3)), 0.01]) + c1 = np.array([radius* math.cos(theta),radius* math.sin(theta), 0.001]) + c2 = np.array([radius * math.cos(theta + (2* pi/3)), radius * math.sin(theta + (2* pi /3)), 0.001]) + c3 = np.array([radius * math.cos((theta+ (4*pi/3))), radius * math.sin(theta + (4*pi/3)), 0.001]) self.original_verts = np.array([(c1 + c3) - c2 , (c1 + c2) - c3, (c2 + c3) - c1]) builder = self.scene.create_actor_builder() @@ -196,7 +196,7 @@ def create_goal_triangle(name="tri", base_color=None): self.dots.append(actor) self.goal_tri = create_goal_triangle( name="goal_tri", - base_color=np.array([255, 255, 255, 255/4]) / 255, + base_color=np.array([50, 50, 50, 200]) / 255, ) def _initialize_episode(self, env_idx: torch.Tensor, options: dict): @@ -210,10 +210,11 @@ def _initialize_episode(self, env_idx: torch.Tensor, options: dict): target_pos[:,:2] = torch.rand((b,2))*0.02-0.1 target_pos[:,-1] = 0.01 qs = randomization.random_quaternions(b, lock_x=True, lock_y=True) - mats = quaternion_to_matrix(qs) - self.goal_tri.set_pose(Pose.create_from_pq(p=target_pos, q=qs)) + mats = quaternion_to_matrix(qs) + self.goal_tri.set_pose(Pose.create_from_pq(p=target_pos, q= qs)) + self.vertices = torch.from_numpy(np.tile(self.original_verts, (b, 1,1))) # b, 3, 3 - self.vertices = torch.matmul(self.vertices.double(), mats.double()) + self.vertices = (mats.double() @ self.vertices.transpose(-1,-2).double()).transpose(-1,-2) # apply rotation matrix self.vertices += target_pos diff --git a/mani_skill/examples/.gitignore b/mani_skill/examples/.gitignore index f3e6bd028..d29c740d4 100644 --- a/mani_skill/examples/.gitignore +++ b/mani_skill/examples/.gitignore @@ -1 +1,2 @@ -videos/ \ No newline at end of file +videos/ +demos/ \ No newline at end of file From 1189e323c542c711afac4a1ce873beee56f8114c Mon Sep 17 00:00:00 2001 From: Arnav G <73305591+arnavg115@users.noreply.github.com> Date: Mon, 14 Oct 2024 19:34:36 +0000 Subject: [PATCH 04/14] clean up and format --- .../envs/tasks/drawing/draw_triangle.py | 136 ++++++++++-------- .../motionplanning/panda_stick/run.py | 104 +++++++++++--- .../panda_stick/solutions/__init__.py | 2 +- .../panda_stick/solutions/draw_triangle.py | 17 ++- 4 files changed, 172 insertions(+), 87 deletions(-) diff --git a/mani_skill/envs/tasks/drawing/draw_triangle.py b/mani_skill/envs/tasks/drawing/draw_triangle.py index 41ad88508..5c8c39351 100644 --- a/mani_skill/envs/tasks/drawing/draw_triangle.py +++ b/mani_skill/envs/tasks/drawing/draw_triangle.py @@ -1,24 +1,25 @@ +import math import random from typing import Dict +import mani_skill.envs.utils.randomization as randomization import numpy as np import sapien import torch -from transforms3d.euler import euler2quat, quat2euler -from transforms3d.quaternions import quat2mat - -import mani_skill.envs.utils.randomization as randomization -from mani_skill.utils.geometry.rotation_conversions import quaternion_to_matrix from mani_skill.agents.robots.panda.panda_stick import PandaStick from mani_skill.envs.sapien_env import BaseEnv from mani_skill.sensors.camera import CameraConfig from mani_skill.utils import sapien_utils +from mani_skill.utils.geometry.rotation_conversions import quaternion_to_matrix from mani_skill.utils.registration import register_env -from mani_skill.utils.scene_builder.table.scene_builder import TableSceneBuilder +from mani_skill.utils.scene_builder.table.scene_builder import \ + TableSceneBuilder from mani_skill.utils.structs.actor import Actor from mani_skill.utils.structs.pose import Pose from mani_skill.utils.structs.types import SceneConfig, SimConfig -import math +from transforms3d.euler import euler2quat, quat2euler +from transforms3d.quaternions import quat2mat + @register_env("DrawTriangle-v1", max_episode_steps=1000) class DrawTriangle(BaseEnv): @@ -42,10 +43,9 @@ class DrawTriangle(BaseEnv): """The colors of the brushes. If there is more than one color, each parallel environment will have a randomly sampled color.""" THRESHOLD = 0.05 - SUPPORTED_REWARD_MODES = ["none"] - SUPPORTED_ROBOTS: ["panda_stick"] # type: ignore + SUPPORTED_ROBOTS: ["panda_stick"] # type: ignore agent: PandaStick def __init__(self, *args, robot_uids="panda_stick", **kwargs): @@ -94,31 +94,44 @@ def _default_human_render_camera_configs(self): ) def _load_scene(self, options: dict): - + self.table_scene = TableSceneBuilder(self, robot_init_qpos_noise=0) self.table_scene.build() + def create_goal_triangle(name="tri", base_color=None): - + box1_half_w = 0.3 / 2 box1_half_h = 0.01 / 2 - half_thickness = 0.04 / 2 + half_thickness = 0.04 / 2 - # change, rn too lazy to import pi correctly - pi = 3.1415926 + radius = (box1_half_w) / math.sqrt(3) - # approx div by sqrt(3) - radius = (box1_half_w) / 1.73205080757 - - theta = pi/2 + theta = np.pi / 2 # define centers and compute verticies, might need to adjust how centers are calculated or add a theta arg for variation - c1 = np.array([radius* math.cos(theta),radius* math.sin(theta), 0.001]) - c2 = np.array([radius * math.cos(theta + (2* pi/3)), radius * math.sin(theta + (2* pi /3)), 0.001]) - c3 = np.array([radius * math.cos((theta+ (4*pi/3))), radius * math.sin(theta + (4*pi/3)), 0.001]) - self.original_verts = np.array([(c1 + c3) - c2 , (c1 + c2) - c3, (c2 + c3) - c1]) + c1 = np.array([radius * math.cos(theta), radius * math.sin(theta), 0.001]) + c2 = np.array( + [ + radius * math.cos(theta + (2 * np.pi / 3)), + radius * math.sin(theta + (2 * np.pi / 3)), + 0.001, + ] + ) + c3 = np.array( + [ + radius * math.cos((theta + (4 * np.pi / 3))), + radius * math.sin(theta + (4 * np.pi / 3)), + 0.001, + ] + ) + self.original_verts = np.array( + [(c1 + c3) - c2, (c1 + c2) - c3, (c2 + c3) - c1] + ) builder = self.scene.create_actor_builder() - first_block_pose = sapien.Pose(list(c1), euler2quat(0,0,theta - (pi/2))) + first_block_pose = sapien.Pose( + list(c1), euler2quat(0, 0, theta - (np.pi / 2)) + ) first_block_size = [box1_half_w, box1_half_h, half_thickness] builder.add_box_visual( pose=first_block_pose, @@ -127,10 +140,12 @@ def create_goal_triangle(name="tri", base_color=None): base_color=base_color, ), ) - - second_block_pose = sapien.Pose(list(c2), euler2quat(0,0,theta-(5*pi/6))) + + second_block_pose = sapien.Pose( + list(c2), euler2quat(0, 0, theta - (5 * np.pi / 6)) + ) second_block_size = [box1_half_w, box1_half_h, half_thickness] - # builder.add_box_collision(pose=second_block_pose, half_size=second_block_size) + # builder.add_box_collision(pose=second_block_pose, half_size=second_block_size) builder.add_box_visual( pose=second_block_pose, half_size=second_block_size, @@ -139,9 +154,11 @@ def create_goal_triangle(name="tri", base_color=None): ), ) - third_block_pose = sapien.Pose(list(c3),euler2quat(0,0,theta -(pi/6))) + third_block_pose = sapien.Pose( + list(c3), euler2quat(0, 0, theta - (np.pi / 6)) + ) third_block_size = [box1_half_w, box1_half_h, half_thickness] - # builder.add_box_collision(pose=second_block_pose, half_size=second_block_size) + # builder.add_box_collision(pose=second_block_pose, half_size=second_block_size) builder.add_box_visual( pose=third_block_pose, half_size=third_block_size, @@ -150,8 +167,7 @@ def create_goal_triangle(name="tri", base_color=None): ), ) return builder.build_kinematic(name=name) - - + # build a white canvas on the table self.canvas = self.scene.create_actor_builder() self.canvas.add_box_visual( @@ -207,18 +223,25 @@ def _initialize_episode(self, env_idx: torch.Tensor, options: dict): self.table_scene.initialize(env_idx) target_pos = torch.zeros((b, 3)) - target_pos[:,:2] = torch.rand((b,2))*0.02-0.1 - target_pos[:,-1] = 0.01 + target_pos[:, :2] = torch.rand((b, 2)) * 0.02 - 0.1 + target_pos[:, -1] = 0.01 qs = randomization.random_quaternions(b, lock_x=True, lock_y=True) - mats = quaternion_to_matrix(qs) - self.goal_tri.set_pose(Pose.create_from_pq(p=target_pos, q= qs)) - - self.vertices = torch.from_numpy(np.tile(self.original_verts, (b, 1,1))) # b, 3, 3 - self.vertices = (mats.double() @ self.vertices.transpose(-1,-2).double()).transpose(-1,-2) # apply rotation matrix + mats = quaternion_to_matrix(qs) + self.goal_tri.set_pose(Pose.create_from_pq(p=target_pos, q=qs)) + + self.vertices = torch.from_numpy( + np.tile(self.original_verts, (b, 1, 1)) + ) # b, 3, 3 + self.vertices = ( + mats.double() @ self.vertices.transpose(-1, -2).double() + ).transpose( + -1, -2 + ) # apply rotation matrix self.vertices += target_pos - - self.triangles = self.generate_triangle_with_points(100, self.vertices[:,:,:-1]) + self.triangles = self.generate_triangle_with_points( + 100, self.vertices[:, :, :-1] + ) for dot in self.dots: # initially spawn dots in the table so they aren't seen @@ -250,13 +273,13 @@ def _after_control_step(self): ) # move the next unused dot to the robot's brush position. All unused dots are initialized inside the table so they aren't visible new_dot_pos = Pose.create_from_pq(robot_brush_pos, euler2quat(0, np.pi / 2, 0)) - self.dots[self.draw_step].set_pose( - new_dot_pos - ) - if new_dot_pos.get_p()[:,-1] > 0: + self.dots[self.draw_step].set_pose(new_dot_pos) + if new_dot_pos.get_p()[:, -1] > 0: if self.dot_pos == None: self.dot_pos = new_dot_pos.get_p()[:, None, :] - self.dot_pos = torch.cat((self.dot_pos, new_dot_pos.get_p()[:, None,: ]), dim=1) + self.dot_pos = torch.cat( + (self.dot_pos, new_dot_pos.get_p()[:, None, :]), dim=1 + ) self.draw_step += 1 @@ -266,7 +289,7 @@ def _after_control_step(self): def evaluate(self): out = self.success_check() - return { "success" : out} + return {"success": out} def _get_obs_extra(self, info: Dict): return dict( @@ -275,31 +298,32 @@ def _get_obs_extra(self, info: Dict): def generate_triangle_with_points(self, n, vertices): batch_size = vertices.shape[0] - + all_points = [] for i in range(vertices.shape[1]): - start_vertex = vertices[:, i, :] - end_vertex = vertices[:, (i+1) % vertices.shape[1], :] - t = torch.linspace(0, 1, n+2, device=vertices.device)[:-1] - t = t.view(1, -1, 1).repeat(batch_size, 1, 2) - intermediate_points = start_vertex.unsqueeze(1) * (1 - t) + end_vertex.unsqueeze(1) * t + start_vertex = vertices[:, i, :] + end_vertex = vertices[:, (i + 1) % vertices.shape[1], :] + t = torch.linspace(0, 1, n + 2, device=vertices.device)[:-1] + t = t.view(1, -1, 1).repeat(batch_size, 1, 2) + intermediate_points = ( + start_vertex.unsqueeze(1) * (1 - t) + end_vertex.unsqueeze(1) * t + ) all_points.append(intermediate_points) - all_points = torch.cat(all_points, dim=1) + all_points = torch.cat(all_points, dim=1) return all_points def success_check(self): if self.dot_pos == None or len(self.dot_pos) == 0: return torch.Tensor([False]).to(bool) - drawn_pts = self.dot_pos[:,:,:-1] + drawn_pts = self.dot_pos[:, :, :-1] distance_matrix = torch.sqrt( torch.sum( - (drawn_pts[:, :, None, :] - self.triangles[:, None, :, :]) ** 2, - axis=-1 + (drawn_pts[:, :, None, :] - self.triangles[:, None, :, :]) ** 2, axis=-1 ) ) - Y_closeness = torch.min(distance_matrix, dim = 1).values < self.THRESHOLD + Y_closeness = torch.min(distance_matrix, dim=1).values < self.THRESHOLD return torch.Tensor([torch.all(Y_closeness)]).to(bool) diff --git a/mani_skill/examples/motionplanning/panda_stick/run.py b/mani_skill/examples/motionplanning/panda_stick/run.py index 5066fbc38..a0373cbfc 100644 --- a/mani_skill/examples/motionplanning/panda_stick/run.py +++ b/mani_skill/examples/motionplanning/panda_stick/run.py @@ -1,30 +1,88 @@ import argparse +import os.path as osp + import gymnasium as gym import numpy as np -from tqdm import tqdm -import os.path as osp +from mani_skill.examples.motionplanning.panda_stick.solutions import \ + solveDrawTriangle from mani_skill.utils.wrappers.record import RecordEpisode -from mani_skill.examples.motionplanning.panda_stick.solutions import solveDrawTriangle +from tqdm import tqdm + +MP_SOLUTIONS = {"DrawTriangle-v1": solveDrawTriangle} + -MP_SOLUTIONS = { - "DrawTriangle-v1" : solveDrawTriangle -} def parse_args(args=None): parser = argparse.ArgumentParser() - parser.add_argument("-e", "--env-id", type=str, default="DrawTriangle-v1", help=f"Environment to run motion planning solver on. Available options are {list(MP_SOLUTIONS.keys())}") - parser.add_argument("-o", "--obs-mode", type=str, default="none", help="Observation mode to use. Usually this is kept as 'none' as observations are not necesary to be stored, they can be replayed later via the mani_skill.trajectory.replay_trajectory script.") - parser.add_argument("-n", "--num-traj", type=int, default=10, help="Number of trajectories to generate.") - parser.add_argument("--only-count-success", action="store_true", help="If true, generates trajectories until num_traj of them are successful and only saves the successful trajectories/videos") + parser.add_argument( + "-e", + "--env-id", + type=str, + default="DrawTriangle-v1", + help=f"Environment to run motion planning solver on. Available options are {list(MP_SOLUTIONS.keys())}", + ) + parser.add_argument( + "-o", + "--obs-mode", + type=str, + default="none", + help="Observation mode to use. Usually this is kept as 'none' as observations are not necesary to be stored, they can be replayed later via the mani_skill.trajectory.replay_trajectory script.", + ) + parser.add_argument( + "-n", + "--num-traj", + type=int, + default=10, + help="Number of trajectories to generate.", + ) + parser.add_argument( + "--only-count-success", + action="store_true", + help="If true, generates trajectories until num_traj of them are successful and only saves the successful trajectories/videos", + ) parser.add_argument("--reward-mode", type=str) - parser.add_argument("-b", "--sim-backend", type=str, default="auto", help="Which simulation backend to use. Can be 'auto', 'cpu', 'gpu'") - parser.add_argument("--render-mode", type=str, default="rgb_array", help="can be 'sensors' or 'rgb_array' which only affect what is saved to videos") - parser.add_argument("--vis", action="store_true", help="whether or not to open a GUI to visualize the solution live") - parser.add_argument("--save-video", action="store_true", help="whether or not to save videos locally") - parser.add_argument("--traj-name", type=str, help="The name of the trajectory .h5 file that will be created.") - parser.add_argument("--shader", default="default", type=str, help="Change shader used for rendering. Default is 'default' which is very fast. Can also be 'rt' for ray tracing and generating photo-realistic renders. Can also be 'rt-fast' for a faster but lower quality ray-traced renderer") - parser.add_argument("--record-dir", type=str, default="demos", help="where to save the recorded trajectories") + parser.add_argument( + "-b", + "--sim-backend", + type=str, + default="auto", + help="Which simulation backend to use. Can be 'auto', 'cpu', 'gpu'", + ) + parser.add_argument( + "--render-mode", + type=str, + default="rgb_array", + help="can be 'sensors' or 'rgb_array' which only affect what is saved to videos", + ) + parser.add_argument( + "--vis", + action="store_true", + help="whether or not to open a GUI to visualize the solution live", + ) + parser.add_argument( + "--save-video", + action="store_true", + help="whether or not to save videos locally", + ) + parser.add_argument( + "--traj-name", + type=str, + help="The name of the trajectory .h5 file that will be created.", + ) + parser.add_argument( + "--shader", + default="default", + type=str, + help="Change shader used for rendering. Default is 'default' which is very fast. Can also be 'rt' for ray tracing and generating photo-realistic renders. Can also be 'rt-fast' for a faster but lower quality ray-traced renderer", + ) + parser.add_argument( + "--record-dir", + type=str, + default="demos", + help="where to save the recorded trajectories", + ) return parser.parse_args() + def main(args): env_id = args.env_id env = gym.make( @@ -34,15 +92,18 @@ def main(args): render_mode="rgb_array", ) if env_id not in MP_SOLUTIONS: - raise RuntimeError(f"No already written motion planning solutions for {env_id}. Available options are {list(MP_SOLUTIONS.keys())}") + raise RuntimeError( + f"No already written motion planning solutions for {env_id}. Available options are {list(MP_SOLUTIONS.keys())}" + ) env = RecordEpisode( env, output_dir=osp.join(args.record_dir, env_id, "motionplanning"), - trajectory_name=args.traj_name, save_video=args.save_video, + trajectory_name=args.traj_name, + save_video=args.save_video, source_type="motionplanning", source_desc="official motion planning solution from ManiSkill contributors", video_fps=30, - save_on_reset=False + save_on_reset=False, ) solve = MP_SOLUTIONS[env_id] print(f"Motion Planning Running on {env_id}") @@ -88,5 +149,6 @@ def main(args): break env.close() + if __name__ == "__main__": - main(parse_args()) \ No newline at end of file + main(parse_args()) diff --git a/mani_skill/examples/motionplanning/panda_stick/solutions/__init__.py b/mani_skill/examples/motionplanning/panda_stick/solutions/__init__.py index 8186dd53f..8ad0262c7 100644 --- a/mani_skill/examples/motionplanning/panda_stick/solutions/__init__.py +++ b/mani_skill/examples/motionplanning/panda_stick/solutions/__init__.py @@ -1 +1 @@ -from .draw_triangle import solve as solveDrawTriangle \ No newline at end of file +from .draw_triangle import solve as solveDrawTriangle diff --git a/mani_skill/examples/motionplanning/panda_stick/solutions/draw_triangle.py b/mani_skill/examples/motionplanning/panda_stick/solutions/draw_triangle.py index 29d7c5d9a..fbabb3f83 100644 --- a/mani_skill/examples/motionplanning/panda_stick/solutions/draw_triangle.py +++ b/mani_skill/examples/motionplanning/panda_stick/solutions/draw_triangle.py @@ -1,10 +1,10 @@ import numpy as np import sapien -from PIL import Image - from mani_skill.envs.tasks import PushCubeEnv from mani_skill.examples.motionplanning.panda_stick.motionplanner import \ PandaStickMotionPlanningSolver +from PIL import Image + def solve(env: PushCubeEnv, seed=None, debug=False, vis=False): env.reset(seed=seed) @@ -20,22 +20,21 @@ def solve(env: PushCubeEnv, seed=None, debug=False, vis=False): FINGER_LENGTH = 0.025 env = env.unwrapped - rot = list(env.agent.tcp.pose.get_q()[0].cpu().numpy()) - reach_pose = sapien.Pose(p=list(env.vertices[0,0].numpy()), q = rot) + reach_pose = sapien.Pose(p=list(env.vertices[0, 0].numpy()), q=rot) res = planner.move_to_pose_with_screw(reach_pose) # -------------------------------------------------------------------------- # # Move to second vertex # -------------------------------------------------------------------------- # - reach_pose = sapien.Pose(p=list(env.vertices[0,1]), q = rot) + reach_pose = sapien.Pose(p=list(env.vertices[0, 1]), q=rot) res = planner.move_to_pose_with_screw(reach_pose) - - reach_pose = sapien.Pose(p=list(env.vertices[0,2]), q = rot) + + reach_pose = sapien.Pose(p=list(env.vertices[0, 2]), q=rot) res = planner.move_to_pose_with_screw(reach_pose) - reach_pose = sapien.Pose(p=list(env.vertices[0,0]), q = rot) + reach_pose = sapien.Pose(p=list(env.vertices[0, 0]), q=rot) res = planner.move_to_pose_with_screw(reach_pose) planner.close() - return res \ No newline at end of file + return res From 645a74c7818fd608683b75337a491b3a72fa1a42 Mon Sep 17 00:00:00 2001 From: Arnav G <73305591+arnavg115@users.noreply.github.com> Date: Tue, 15 Oct 2024 09:08:16 +0000 Subject: [PATCH 05/14] rgbd diffusion policy progress --- .../diffusion_policy/make_env.py | 3 +- .../diffusion_policy/plain_conv.py | 57 +++ .../diffusion_policy/utils.py | 97 ++++ .../baselines/diffusion_policy/train_rgbd.py | 451 ++++++++++++++++++ 4 files changed, 607 insertions(+), 1 deletion(-) create mode 100644 examples/baselines/diffusion_policy/diffusion_policy/plain_conv.py create mode 100644 examples/baselines/diffusion_policy/train_rgbd.py diff --git a/examples/baselines/diffusion_policy/diffusion_policy/make_env.py b/examples/baselines/diffusion_policy/diffusion_policy/make_env.py index 13b6d0add..d26064b37 100644 --- a/examples/baselines/diffusion_policy/diffusion_policy/make_env.py +++ b/examples/baselines/diffusion_policy/diffusion_policy/make_env.py @@ -28,7 +28,8 @@ def thunk(): env = CPUGymWrapper(env, ignore_terminations=True, record_metrics=True) if video_dir: env = RecordEpisode(env, output_dir=video_dir, save_trajectory=False, info_on_video=True, source_type="diffusion_policy", source_desc="diffusion_policy evaluation rollout") - env = gym.wrappers.FrameStack(env, other_kwargs['obs_horizon']) + if env_kwargs["obs_mode"] == "state": + env = gym.wrappers.FrameStack(env, other_kwargs['obs_horizon']) env.action_space.seed(seed) env.observation_space.seed(seed) return env diff --git a/examples/baselines/diffusion_policy/diffusion_policy/plain_conv.py b/examples/baselines/diffusion_policy/diffusion_policy/plain_conv.py new file mode 100644 index 000000000..74e0da439 --- /dev/null +++ b/examples/baselines/diffusion_policy/diffusion_policy/plain_conv.py @@ -0,0 +1,57 @@ +import torch.nn as nn + +def make_mlp(in_channels, mlp_channels, act_builder=nn.ReLU, last_act=True): + c_in = in_channels + module_list = [] + for idx, c_out in enumerate(mlp_channels): + module_list.append(nn.Linear(c_in, c_out)) + if last_act or idx < len(mlp_channels) - 1: + module_list.append(act_builder()) + c_in = c_out + return nn.Sequential(*module_list) + +class PlainConv(nn.Module): + def __init__(self, + in_channels=3, + out_dim=256, + pool_feature_map=False, + last_act=True, # True for ConvBody, False for CNN + ): + super().__init__() + # assume input image size is 64x64 + + self.out_dim = out_dim + self.cnn = nn.Sequential( + nn.Conv2d(in_channels, 16, 3, padding=1, bias=True), nn.ReLU(inplace=True), + nn.MaxPool2d(2, 2), # [32, 32] + nn.Conv2d(16, 32, 3, padding=1, bias=True), nn.ReLU(inplace=True), + nn.MaxPool2d(2, 2), # [16, 16] + nn.Conv2d(32, 64, 3, padding=1, bias=True), nn.ReLU(inplace=True), + nn.MaxPool2d(2, 2), # [8, 8] + nn.Conv2d(64, 128, 3, padding=1, bias=True), nn.ReLU(inplace=True), + nn.MaxPool2d(2, 2), # [4, 4] + nn.Conv2d(128, 128, 1, padding=0, bias=True), nn.ReLU(inplace=True), + ) + + if pool_feature_map: + self.pool = nn.AdaptiveMaxPool2d((1, 1)) + self.fc = make_mlp(128, [out_dim], last_act=last_act) + else: + self.pool = None + self.fc = make_mlp(128 * 4 * 4, [out_dim], last_act=last_act) + + self.reset_parameters() + + def reset_parameters(self): + for name, module in self.named_modules(): + if isinstance(module, (nn.Linear, nn.Conv1d, nn.Conv2d)): + if module.bias is not None: + nn.init.zeros_(module.bias) + + def forward(self, image): + x = self.cnn(image) + if self.pool is not None: + x = self.pool(x) + x = x.flatten(1) + x = self.fc(x) + return x \ No newline at end of file diff --git a/examples/baselines/diffusion_policy/diffusion_policy/utils.py b/examples/baselines/diffusion_policy/diffusion_policy/utils.py index af3876fca..ee21344f4 100644 --- a/examples/baselines/diffusion_policy/diffusion_policy/utils.py +++ b/examples/baselines/diffusion_policy/diffusion_policy/utils.py @@ -1,7 +1,10 @@ from torch.utils.data.sampler import Sampler import numpy as np import torch +import torch.nn as nn from h5py import File, Group, Dataset +from gymnasium import spaces +import torch.nn.functional as F class IterationBasedBatchSampler(Sampler): """Wraps a BatchSampler. @@ -117,3 +120,97 @@ def load_demo_dataset(path, keys=['observations', 'actions'], num_traj=None, con else: print('Load', target_key, len(dataset[target_key]), type(dataset[target_key][0])) return dataset +def convert_obs(obs, concat_fn, transpose_fn, state_obs_extractor): + img_dict = obs['sensor_data'] + new_img_dict = { + key: transpose_fn( + concat_fn([v[key] for v in img_dict.values()]) + ) # (C, H, W) or (B, C, H, W) + for key in ['rgb', 'depth'] + } + # if isinstance(new_img_dict['depth'], torch.Tensor): # MS2 vec env uses float16, but gym AsyncVecEnv uses float32 + # new_img_dict['depth'] = new_img_dict['depth'].to(torch.float16) + + # Unified version + states_to_stack = state_obs_extractor(obs) + for j in range(len(states_to_stack)): + if states_to_stack[j].dtype == np.float64: + states_to_stack[j] = states_to_stack[j].astype(np.float32) + try: + state = np.hstack(states_to_stack) + except: # dirty fix for concat trajectory of states + state = np.column_stack(states_to_stack) + if state.dtype == np.float64: + for x in states_to_stack: + print(x.shape, x.dtype) + import pdb; pdb.set_trace() + + out_dict = { + 'state': state, + 'rgb': new_img_dict['rgb'], + 'depth': new_img_dict['depth'], + } + return out_dict + +def build_obs_space(env, depth_dtype, state_obs_extractor): + # NOTE: We have to use float32 for gym AsyncVecEnv since it does not support float16, but we can use float16 for MS2 vec env + obs_space = env.observation_space + + # Unified version + state_dim = sum([v.shape[0] for v in state_obs_extractor(obs_space)]) + + single_img_space = next(iter(env.observation_space['image'].values())) + h, w, _ = single_img_space['rgb'].shape + n_images = len(env.observation_space['image']) + + return spaces.Dict({ + 'state': spaces.Box(-float("inf"), float("inf"), shape=(state_dim,), dtype=np.float32), + 'rgb': spaces.Box(0, 255, shape=(n_images*3, h,w), dtype=np.uint8), + 'depth': spaces.Box(-float("inf"), float("inf"), shape=(n_images,h,w), dtype=depth_dtype), + }) + +def build_state_obs_extractor(env_id): + env_name = env_id.split('-')[0] + if env_name in ['TurnFaucet', 'StackCube']: + return lambda obs: list(obs['extra'].values()) + elif env_name == 'PushChair' or env_name == "PickCube": + return lambda obs: list(obs['agent'].values()) + list(obs['extra'].values()) + else: + raise NotImplementedError(f'Please tune state obs by yourself') + + +class RandomShiftsAug(nn.Module): + """ + from https://github.com/facebookresearch/drqv2/blob/main/drqv2.py + """ + def __init__(self, pad): + super().__init__() + self.pad = pad + + def forward(self, x): + n, c, h, w = x.size() + assert h == w + padding = tuple([self.pad] * 4) + x = F.pad(x, padding, 'replicate') + eps = 1.0 / (h + 2 * self.pad) + arange = torch.linspace(-1.0 + eps, + 1.0 - eps, + h + 2 * self.pad, + device=x.device, + dtype=x.dtype)[:h] + arange = arange.unsqueeze(0).repeat(h, 1).unsqueeze(2) + base_grid = torch.cat([arange, arange.transpose(1, 0)], dim=2) + base_grid = base_grid.unsqueeze(0).repeat(n, 1, 1, 1) + + shift = torch.randint(0, + 2 * self.pad + 1, + size=(n, 1, 1, 2), + device=x.device, + dtype=x.dtype) + shift *= 2.0 / (h + 2 * self.pad) + + grid = base_grid + shift + return F.grid_sample(x, + grid, + padding_mode='zeros', + align_corners=False) \ No newline at end of file diff --git a/examples/baselines/diffusion_policy/train_rgbd.py b/examples/baselines/diffusion_policy/train_rgbd.py new file mode 100644 index 000000000..e7c992aa4 --- /dev/null +++ b/examples/baselines/diffusion_policy/train_rgbd.py @@ -0,0 +1,451 @@ +ALGO_NAME = 'BC_Diffusion_rgbd_UNet' + +import argparse +from functools import partial +import os +import random +from distutils.util import strtobool +import time +import gymnasium as gym +import numpy as np +import torch +import torch.nn as nn +import torch.optim as optim +import torch.nn.functional as F +from torch.utils.tensorboard import SummaryWriter +from diffusion_policy.evaluate import evaluate +from diffusion_policy.plain_conv import PlainConv +from mani_skill.utils import gym_utils +from mani_skill.utils.wrappers.flatten import FlattenRGBDObservationWrapper +from mani_skill.utils.registration import REGISTERED_ENVS + +from collections import defaultdict, deque + +from torch.utils.data.dataset import Dataset +from torch.utils.data.sampler import RandomSampler, BatchSampler +from torch.utils.data.dataloader import DataLoader +from diffusion_policy.utils import IterationBasedBatchSampler, build_state_obs_extractor, convert_obs, worker_init_fn +from diffusion_policy.make_env import make_eval_envs +from diffusers.schedulers.scheduling_ddpm import DDPMScheduler +from diffusers.training_utils import EMAModel +from diffusers.optimization import get_scheduler +from diffusion_policy.conditional_unet1d import ConditionalUnet1D +from dataclasses import dataclass, field +from typing import Optional, List +import tyro + +from gymnasium.wrappers.frame_stack import FrameStack, LazyFrames +from gymnasium import spaces +from gymnasium.spaces import Box + + +@dataclass +class Args: + exp_name: Optional[str] = None + """the name of this experiment""" + seed: int = 1 + """seed of the experiment""" + torch_deterministic: bool = True + """if toggled, `torch.backends.cudnn.deterministic=False`""" + cuda: bool = True + """if toggled, cuda will be enabled by default""" + track: bool = False + """if toggled, this experiment will be tracked with Weights and Biases""" + wandb_project_name: str = "ManiSkill" + """the wandb's project name""" + wandb_entity: Optional[str] = None + """the entity (team) of wandb's project""" + capture_video: bool = True + """whether to capture videos of the agent performances (check out `videos` folder)""" + + env_id: str = "PegInsertionSide-v0" + """the id of the environment""" + demo_path: str = 'data/ms2_official_demos/rigid_body/PegInsertionSide-v0/trajectory.state.pd_ee_delta_pose.h5' + """the path of demo dataset (pkl or h5)""" + num_demos: Optional[int] = None + """number of trajectories to load from the demo dataset""" + total_iters: int = 1_000_000 + """total timesteps of the experiment""" + batch_size: int = 1024 + """the batch size of sample from the replay memory""" + + # Diffusion Policy specific arguments + lr: float = 1e-4 + """the learning rate of the diffusion policy""" + obs_horizon: int = 2 # Seems not very important in ManiSkill, 1, 2, 4 work well + act_horizon: int = 8 # Seems not very important in ManiSkill, 4, 8, 15 work well + pred_horizon: int = 16 # 16->8 leads to worse performance, maybe it is like generate a half image; 16->32, improvement is very marginal + diffusion_step_embed_dim: int = 64 # not very important + unet_dims: List[int] = field(default_factory=lambda: [64, 128, 256]) # default setting is about ~4.5M params + n_groups: int = 8 # jigu says it is better to let each group have at least 8 channels; it seems 4 and 8 are simila + + # Environment/experiment specific arguments + max_episode_steps: Optional[int] = None + """Change the environments' max_episode_steps to this value. Sometimes necessary if the demonstrations being imitated are too short. Typically the default + max episode steps of environments in ManiSkill are tuned lower so reinforcement learning agents can learn faster.""" + log_freq: int = 1000 + """the frequency of logging the training metrics""" + eval_freq: int = 5000 + """the frequency of evaluating the agent on the evaluation environments""" + save_freq: Optional[int] = None + """the frequency of saving the model checkpoints. By default this is None and will only save checkpoints based on the best evaluation metrics.""" + num_eval_episodes: int = 100 + """the number of episodes to evaluate the agent on""" + num_eval_envs: int = 10 + """the number of parallel environments to evaluate the agent on""" + sim_backend: str = "cpu" + """the simulation backend to use for evaluation environments. can be "cpu" or "gpu""" + num_dataload_workers: int = 0 + """the number of workers to use for loading the training data in the torch dataloader""" + control_mode: str = 'pd_joint_delta_pos' + """the control mode to use for the evaluation environments. Must match the control mode of the demonstration dataset.""" + + # additional tags/configs for logging purposes to wandb and shared comparisons with other algorithms + demo_type: Optional[str] = None + +def reorder_keys(d, ref_dict): + out = dict() + for k, v in ref_dict.items(): + if isinstance(v, dict) or isinstance(v, spaces.Dict): + out[k] = reorder_keys(d[k], ref_dict[k]) + else: + out[k] = d[k] + return out + + + + +class SmallDemoDataset_DiffusionPolicy(Dataset): # Load everything into memory + def __init__(self, data_path, obs_process_fn, obs_space, num_traj): + if data_path[-4:] == '.pkl': + raise NotImplementedError() + else: + from diffusion_policy.utils import load_demo_dataset + trajectories = load_demo_dataset(data_path, num_traj=num_traj, concat=False) + # trajectories['observations'] is a list of dict, each dict is a traj, with keys in obs_space, values with length L+1 + # trajectories['actions'] is a list of np.ndarray (L, act_dim) + + print('Raw trajectory loaded, start to pre-process the observations...') + + # Pre-process the observations, make them align with the obs returned by the obs_wrapper + obs_traj_dict_list = [] + for obs_traj_dict in trajectories['observations']: + _obs_traj_dict = reorder_keys(obs_traj_dict, obs_space) # key order in demo is different from key order in env obs + _obs_traj_dict = obs_process_fn(_obs_traj_dict) + _obs_traj_dict['depth'] = torch.Tensor(_obs_traj_dict['depth'].astype(np.float32) / 1024).to(torch.float16) + _obs_traj_dict['rgb'] = torch.from_numpy(_obs_traj_dict['rgb']) # still uint8 + _obs_traj_dict['state'] = torch.from_numpy(_obs_traj_dict['state']) + obs_traj_dict_list.append(_obs_traj_dict) + trajectories['observations'] = obs_traj_dict_list + self.obs_keys = list(_obs_traj_dict.keys()) + # Pre-process the actions + for i in range(len(trajectories['actions'])): + trajectories['actions'][i] = torch.Tensor(trajectories['actions'][i]) + print('Obs/action pre-processing is done, start to pre-compute the slice indices...') + + # Pre-compute all possible (traj_idx, start, end) tuples, this is very specific to Diffusion Policy + if 'delta_pos' in args.control_mode or args.control_mode == 'base_pd_joint_vel_arm_pd_joint_vel': + self.pad_action_arm = torch.zeros((trajectories['actions'][0].shape[1]-1,)) + # to make the arm stay still, we pad the action with 0 in 'delta_pos' control mode + # gripper action needs to be copied from the last action + else: + raise NotImplementedError(f'Control Mode {args.control_mode} not supported') + self.obs_horizon, self.pred_horizon = obs_horizon, pred_horizon = args.obs_horizon, args.pred_horizon + self.slices = [] + num_traj = len(trajectories['actions']) + total_transitions = 0 + for traj_idx in range(num_traj): + L = trajectories['actions'][traj_idx].shape[0] + assert trajectories['observations'][traj_idx]['state'].shape[0] == L + 1 + total_transitions += L + + # |o|o| observations: 2 + # | |a|a|a|a|a|a|a|a| actions executed: 8 + # |p|p|p|p|p|p|p|p|p|p|p|p|p|p|p|p| actions predicted: 16 + pad_before = obs_horizon - 1 + # Pad before the trajectory, so the first action of an episode is in "actions executed" + # obs_horizon - 1 is the number of "not used actions" + pad_after = pred_horizon - obs_horizon + # Pad after the trajectory, so all the observations are utilized in training + # Note that in the original code, pad_after = act_horizon - 1, but I think this is not the best choice + self.slices += [ + (traj_idx, start, start + pred_horizon) for start in range(-pad_before, L - pred_horizon + pad_after) + ] # slice indices follow convention [start, end) + + print(f"Total transitions: {total_transitions}, Total obs sequences: {len(self.slices)}") + + self.trajectories = trajectories + + def __getitem__(self, index): + traj_idx, start, end = self.slices[index] + L, act_dim = self.trajectories['actions'][traj_idx].shape + + obs_traj = self.trajectories['observations'][traj_idx] + obs_seq = {} + for k, v in obs_traj.items(): + obs_seq[k] = v[max(0, start):start+self.obs_horizon] # start+self.obs_horizon is at least 1 + if start < 0: # pad before the trajectory + pad_obs_seq = torch.stack([obs_seq[k][0]]*abs(start), dim=0) + obs_seq[k] = torch.cat((pad_obs_seq, obs_seq[k]), dim=0) + # don't need to pad obs after the trajectory, see the above char drawing + + act_seq = self.trajectories['actions'][traj_idx][max(0, start):end] + if start < 0: # pad before the trajectory + act_seq = torch.cat([act_seq[0].repeat(-start, 1), act_seq], dim=0) + if end > L: # pad after the trajectory + gripper_action = act_seq[-1, -1] # assume gripper is with pos controller + pad_action = torch.cat((self.pad_action_arm, gripper_action[None]), dim=0) + act_seq = torch.cat([act_seq, pad_action.repeat(end-L, 1)], dim=0) + # making the robot (arm and gripper) stay still + assert obs_seq['state'].shape[0] == self.obs_horizon and act_seq.shape[0] == self.pred_horizon + return { + 'observations': obs_seq, + 'actions': act_seq, + } + + def __len__(self): + return len(self.slices) +class DictFrameStack(FrameStack): + def __init__( + self, + env: gym.Env, + num_stack: int, + lz4_compress: bool = False, + ): + """Observation wrapper that stacks the observations in a rolling manner. + + Args: + env (Env): The environment to apply the wrapper + num_stack (int): The number of frames to stack + lz4_compress (bool): Use lz4 to compress the frames internally + """ + gym.utils.RecordConstructorArgs.__init__( + self, num_stack=num_stack, lz4_compress=lz4_compress + ) + gym.ObservationWrapper.__init__(self, env) + + self.num_stack = num_stack + self.lz4_compress = lz4_compress + + self.frames = deque(maxlen=num_stack) + + new_observation_space = gym.spaces.Dict() + for k, v in self.observation_space.items(): + low = np.repeat(v.low[np.newaxis, ...], num_stack, axis=1) + high = np.repeat(v.high[np.newaxis, ...], num_stack, axis=1) + new_observation_space[k] = Box( + low=low, high=high, dtype=v.dtype + ) + self.observation_space = new_observation_space + + def observation(self, observation): + """Converts the wrappers current frames to lazy frames. + + Args: + observation: Ignored + + Returns: + :class:`LazyFrames` object for the wrapper's frame buffer, :attr:`self.frames` + """ + assert len(self.frames) == self.num_stack, (len(self.frames), self.num_stack) + return { + k: LazyFrames([x[k] for x in self.frames], self.lz4_compress) + for k in self.observation_space.keys() + } + +class Agent(nn.Module): + def __init__(self, env, args): + super().__init__() + self.obs_horizon = args.obs_horizon + self.act_horizon = args.act_horizon + self.pred_horizon = args.pred_horizon + assert len(env.single_observation_space['state'].shape) == 2 # (obs_horizon, obs_dim) + assert len(env.single_action_space.shape) == 1 # (act_dim, ) + assert (env.single_action_space.high == 1).all() and (env.single_action_space.low == -1).all() + # denoising results will be clipped to [-1,1], so the action should be in [-1,1] as well + self.act_dim = env.single_action_space.shape[0] + obs_state_dim = env.single_observation_space['state'].shape[1] + _, C, H, W = envs.single_observation_space['rgb'].shape + + visual_feature_dim = 256 + self.visual_encoder = PlainConv(in_channels=int(C/3*4), out_dim=visual_feature_dim) + self.noise_pred_net = ConditionalUnet1D( + input_dim=self.act_dim, # act_horizon is not used (U-Net doesn't care) + global_cond_dim=self.obs_horizon * (visual_feature_dim + obs_state_dim), + diffusion_step_embed_dim=args.diffusion_step_embed_dim, + down_dims=args.unet_dims, + n_groups=args.n_groups, + ) + self.num_diffusion_iters = 100 + self.noise_scheduler = DDPMScheduler( + num_train_timesteps=self.num_diffusion_iters, + beta_schedule='squaredcos_cap_v2', # has big impact on performance, try not to change + clip_sample=True, # clip output to [-1,1] to improve stability + prediction_type='epsilon' # predict noise (instead of denoised action) + ) + + if args.random_shift > 0: + from diffusion_policy.utils import RandomShiftsAug + self.aug = RandomShiftsAug(args.random_shift) + + def encode_obs(self, obs_seq, eval_mode): + rgb = obs_seq['rgb'].float() / 255.0 # (B, obs_horizon, 3*k, H, W) + depth = obs_seq['depth'].float() # (B, obs_horizon, 1*k, H, W) + img_seq = torch.cat([rgb, depth], dim=2) # (B, obs_horizon, C, H, W), C=4*k + img_seq = img_seq.flatten(end_dim=1) # (B*obs_horizon, C, H, W) + if hasattr(self, 'aug') and not eval_mode: + img_seq = self.aug(img_seq) # (B*obs_horizon, C, H, W) + visual_feature = self.visual_encoder(img_seq) # (B*obs_horizon, D) + visual_feature = visual_feature.reshape(rgb.shape[0], self.obs_horizon, visual_feature.shape[1]) # (B, obs_horizon, D) + feature = torch.cat((visual_feature, obs_seq['state']), dim=-1) # (B, obs_horizon, D+obs_state_dim) + return feature.flatten(start_dim=1) # (B, obs_horizon * (D+obs_state_dim)) + + def compute_loss(self, obs_seq, action_seq): + B = obs_seq['state'].shape[0] + + # observation as FiLM conditioning + obs_cond = self.encode_obs(obs_seq, eval_mode=False) # (B, obs_horizon * obs_dim) + + # sample noise to add to actions + noise = torch.randn((B, self.pred_horizon, self.act_dim), device=device) + + # sample a diffusion iteration for each data point + timesteps = torch.randint( + 0, self.noise_scheduler.config.num_train_timesteps, + (B,), device=device + ).long() + + # add noise to the clean images(actions) according to the noise magnitude at each diffusion iteration + # (this is the forward diffusion process) + noisy_action_seq = self.noise_scheduler.add_noise( + action_seq, noise, timesteps) + + # predict the noise residual + noise_pred = self.noise_pred_net( + noisy_action_seq, timesteps, global_cond=obs_cond) + + return F.mse_loss(noise_pred, noise) + + def get_eval_action(self, obs_seq): + # init scheduler + # self.noise_scheduler.set_timesteps(self.num_diffusion_iters) + # set_timesteps will change noise_scheduler.timesteps is only used in noise_scheduler.step() + # noise_scheduler.step() is only called during inference + # if we use DDPM, and inference_diffusion_steps == train_diffusion_steps, then we can skip this + + # obs_seq['state']: (B, obs_horizon, obs_state_dim) + B = obs_seq['state'].shape[0] + with torch.no_grad(): + obs_cond = self.encode_obs(obs_seq, eval_mode=True) # (B, obs_horizon * obs_dim) + + # initialize action from Guassian noise + noisy_action_seq = torch.randn((B, self.pred_horizon, self.act_dim), device=obs_seq['state'].device) + + for k in self.noise_scheduler.timesteps: + # predict noise + noise_pred = self.noise_pred_net( + sample=noisy_action_seq, + timestep=k, + global_cond=obs_cond, + ) + + # inverse diffusion step (remove noise) + noisy_action_seq = self.noise_scheduler.step( + model_output=noise_pred, + timestep=k, + sample=noisy_action_seq, + ).prev_sample + + # only take act_horizon number of actions + start = self.obs_horizon - 1 + end = start + self.act_horizon + return noisy_action_seq[:, start:end] # (B, act_horizon, act_dim) + +if __name__ == "__main__": + args = tyro.cli(Args) + + if args.exp_name is None: + args.exp_name = os.path.basename(__file__)[: -len(".py")] + run_name = f"{args.env_id}__{args.exp_name}__{args.seed}__{int(time.time())}" + else: + run_name = args.exp_name + + if args.demo_path.endswith('.h5'): + import json + json_file = args.demo_path[:-2] + 'json' + with open(json_file, 'r') as f: + demo_info = json.load(f) + if 'control_mode' in demo_info['env_info']['env_kwargs']: + control_mode = demo_info['env_info']['env_kwargs']['control_mode'] + elif 'control_mode' in demo_info['episodes'][0]: + control_mode = demo_info['episodes'][0]['control_mode'] + else: + raise Exception('Control mode not found in json') + assert control_mode == args.control_mode, f"Control mode mismatched. Dataset has control mode {control_mode}, but args has control mode {args.control_mode}" + assert args.obs_horizon + args.act_horizon - 1 <= args.pred_horizon + assert args.obs_horizon >= 1 and args.act_horizon >= 1 and args.pred_horizon >= 1 + + random.seed(args.seed) + np.random.seed(args.seed) + torch.manual_seed(args.seed) + torch.backends.cudnn.deterministic = args.torch_deterministic + + device = torch.device("cuda" if torch.cuda.is_available() and args.cuda else "cpu") + + env_kwargs = dict(control_mode=args.control_mode, reward_mode="sparse", obs_mode="rgbd", render_mode="rgb_array") + if args.max_episode_steps is not None: + env_kwargs["max_episode_steps"] = args.max_episode_steps + other_kwargs = dict(obs_horizon=args.obs_horizon) + envs = make_eval_envs(args.env_id, args.num_eval_envs, args.sim_backend, env_kwargs, other_kwargs, video_dir=f'runs/{run_name}/videos' if args.capture_video else None, wrappers=[FlattenRGBDObservationWrapper, partial(DictFrameStack, num_stack = args.obs_horizon)]) + if args.track: + import wandb + config = vars(args) + config["eval_env_cfg"] = dict(**env_kwargs, num_envs=args.num_eval_envs, env_id=args.env_id, env_horizon=gym_utils.find_max_episode_steps_value(envs)) + wandb.init( + project=args.wandb_project_name, + entity=args.wandb_entity, + sync_tensorboard=True, + config=config, + name=run_name, + save_code=True, + group="DiffusionPolicy", + tags=["diffusion_policy"] + ) + writer = SummaryWriter(f"runs/{run_name}") + writer.add_text( + "hyperparameters", + "|param|value|\n|-|-|\n%s" % ("\n".join([f"|{key}|{value}|" for key, value in vars(args).items()])), + ) + + obs_process_fn = partial( + convert_obs, + concat_fn=partial(np.concatenate, axis=-1), + transpose_fn=partial(np.transpose, axes=(0, 3, 1, 2)), # (B, H, W, C) -> (B, C, H, W) + state_obs_extractor=build_state_obs_extractor(args.env_id), + ) + tmp_env = gym.make(args.env_id, obs_mode='rgbd'); orignal_obs_space = tmp_env.observation_space; tmp_env.close() + dataset = SmallDemoDataset_DiffusionPolicy(args.demo_path, obs_process_fn, orignal_obs_space, args.num_demos) + sampler = RandomSampler(dataset, replacement=False) + batch_sampler = BatchSampler(sampler, batch_size=args.batch_size, drop_last=True) + batch_sampler = IterationBasedBatchSampler(batch_sampler, args.total_iters) + train_dataloader = DataLoader( + dataset, + batch_sampler=batch_sampler, + num_workers=args.num_dataload_workers, + worker_init_fn=lambda worker_id: worker_init_fn(worker_id, base_seed=args.seed), + pin_memory=True, + persistent_workers=(args.num_dataload_workers > 0), + ) + sampler = RandomSampler(dataset, replacement=False) + batch_sampler = BatchSampler(sampler, batch_size=args.batch_size, drop_last=True) + batch_sampler = IterationBasedBatchSampler(batch_sampler, args.total_iters) + train_dataloader = DataLoader( + dataset, + batch_sampler=batch_sampler, + num_workers=args.num_dataload_workers, + worker_init_fn=lambda worker_id: worker_init_fn(worker_id, base_seed=args.seed), + pin_memory=True, + persistent_workers=(args.num_dataload_workers > 0), + ) + + agent = Agent(envs, args).to(device) \ No newline at end of file From 2bd9cfcf4a944161ee342b37f7661213443f5b2d Mon Sep 17 00:00:00 2001 From: Arnav G <73305591+arnavg115@users.noreply.github.com> Date: Thu, 17 Oct 2024 01:53:49 +0000 Subject: [PATCH 06/14] diff policy rgbd cpu fixes --- .../diffusion_policy/make_env.py | 56 +++++++ .../diffusion_policy/plain_conv.py | 2 +- .../baselines/diffusion_policy/train_rgbd.py | 152 +++++++++++------- mani_skill/utils/wrappers/flatten.py | 10 +- 4 files changed, 158 insertions(+), 62 deletions(-) diff --git a/examples/baselines/diffusion_policy/diffusion_policy/make_env.py b/examples/baselines/diffusion_policy/diffusion_policy/make_env.py index d26064b37..e9e5bf33a 100644 --- a/examples/baselines/diffusion_policy/diffusion_policy/make_env.py +++ b/examples/baselines/diffusion_policy/diffusion_policy/make_env.py @@ -1,9 +1,63 @@ +from collections import deque from typing import Optional import gymnasium as gym import mani_skill.envs from mani_skill.utils import gym_utils from mani_skill.vector.wrappers.gymnasium import ManiSkillVectorEnv from mani_skill.utils.wrappers import RecordEpisode, FrameStack, CPUGymWrapper +import numpy as np +from gymnasium.spaces import Box +from gymnasium.wrappers.frame_stack import FrameStack as GymFrameStack +from gymnasium.wrappers.frame_stack import LazyFrames + + +class DictFrameStack(GymFrameStack): + def __init__( + self, + env: gym.Env, + num_stack: int, + lz4_compress: bool = False, + ): + """Observation wrapper that stacks the observations in a rolling manner. + + Args: + env (Env): The environment to apply the wrapper + num_stack (int): The number of frames to stack + lz4_compress (bool): Use lz4 to compress the frames internally + """ + gym.utils.RecordConstructorArgs.__init__( + self, num_stack=num_stack, lz4_compress=lz4_compress + ) + gym.ObservationWrapper.__init__(self, env) + + self.num_stack = num_stack + self.lz4_compress = lz4_compress + + self.frames = deque(maxlen=num_stack) + + new_observation_space = gym.spaces.Dict() + for k, v in self.observation_space.items(): + low = np.repeat(v.low[np.newaxis, ...], num_stack, axis=0) + high = np.repeat(v.high[np.newaxis, ...], num_stack, axis=0) + new_observation_space[k] = Box( + low=low, high=high, dtype=v.dtype + ) + self.observation_space = new_observation_space + + def observation(self, observation): + """Converts the wrappers current frames to lazy frames. + + Args: + observation: Ignored + + Returns: + :class:`LazyFrames` object for the wrapper's frame buffer, :attr:`self.frames` + """ + assert len(self.frames) == self.num_stack, (len(self.frames), self.num_stack) + return { + k: LazyFrames([x[k] for x in self.frames], self.lz4_compress) + for k in self.observation_space.keys() + } def make_eval_envs(env_id, num_envs: int, sim_backend: str, env_kwargs: dict, other_kwargs: dict, video_dir: Optional[str] = None, wrappers: list[gym.Wrapper] = []): @@ -30,6 +84,8 @@ def thunk(): env = RecordEpisode(env, output_dir=video_dir, save_trajectory=False, info_on_video=True, source_type="diffusion_policy", source_desc="diffusion_policy evaluation rollout") if env_kwargs["obs_mode"] == "state": env = gym.wrappers.FrameStack(env, other_kwargs['obs_horizon']) + elif env_kwargs["obs_mode"] == "rgbd": + env = DictFrameStack(env, 2) env.action_space.seed(seed) env.observation_space.seed(seed) return env diff --git a/examples/baselines/diffusion_policy/diffusion_policy/plain_conv.py b/examples/baselines/diffusion_policy/diffusion_policy/plain_conv.py index 74e0da439..50c09e59d 100644 --- a/examples/baselines/diffusion_policy/diffusion_policy/plain_conv.py +++ b/examples/baselines/diffusion_policy/diffusion_policy/plain_conv.py @@ -38,7 +38,7 @@ def __init__(self, self.fc = make_mlp(128, [out_dim], last_act=last_act) else: self.pool = None - self.fc = make_mlp(128 * 4 * 4, [out_dim], last_act=last_act) + self.fc = make_mlp(128 * 4 * 4 * 4, [out_dim], last_act=last_act) self.reset_parameters() diff --git a/examples/baselines/diffusion_policy/train_rgbd.py b/examples/baselines/diffusion_policy/train_rgbd.py index e7c992aa4..2d7f9719b 100644 --- a/examples/baselines/diffusion_policy/train_rgbd.py +++ b/examples/baselines/diffusion_policy/train_rgbd.py @@ -1,6 +1,7 @@ ALGO_NAME = 'BC_Diffusion_rgbd_UNet' import argparse +from collections import defaultdict from functools import partial import os import random @@ -19,7 +20,6 @@ from mani_skill.utils.wrappers.flatten import FlattenRGBDObservationWrapper from mani_skill.utils.registration import REGISTERED_ENVS -from collections import defaultdict, deque from torch.utils.data.dataset import Dataset from torch.utils.data.sampler import RandomSampler, BatchSampler @@ -33,10 +33,7 @@ from dataclasses import dataclass, field from typing import Optional, List import tyro - -from gymnasium.wrappers.frame_stack import FrameStack, LazyFrames from gymnasium import spaces -from gymnasium.spaces import Box @dataclass @@ -66,7 +63,7 @@ class Args: """number of trajectories to load from the demo dataset""" total_iters: int = 1_000_000 """total timesteps of the experiment""" - batch_size: int = 1024 + batch_size: int = 256 """the batch size of sample from the replay memory""" # Diffusion Policy specific arguments @@ -205,53 +202,7 @@ def __getitem__(self, index): def __len__(self): return len(self.slices) -class DictFrameStack(FrameStack): - def __init__( - self, - env: gym.Env, - num_stack: int, - lz4_compress: bool = False, - ): - """Observation wrapper that stacks the observations in a rolling manner. - - Args: - env (Env): The environment to apply the wrapper - num_stack (int): The number of frames to stack - lz4_compress (bool): Use lz4 to compress the frames internally - """ - gym.utils.RecordConstructorArgs.__init__( - self, num_stack=num_stack, lz4_compress=lz4_compress - ) - gym.ObservationWrapper.__init__(self, env) - - self.num_stack = num_stack - self.lz4_compress = lz4_compress - - self.frames = deque(maxlen=num_stack) - - new_observation_space = gym.spaces.Dict() - for k, v in self.observation_space.items(): - low = np.repeat(v.low[np.newaxis, ...], num_stack, axis=1) - high = np.repeat(v.high[np.newaxis, ...], num_stack, axis=1) - new_observation_space[k] = Box( - low=low, high=high, dtype=v.dtype - ) - self.observation_space = new_observation_space - def observation(self, observation): - """Converts the wrappers current frames to lazy frames. - - Args: - observation: Ignored - - Returns: - :class:`LazyFrames` object for the wrapper's frame buffer, :attr:`self.frames` - """ - assert len(self.frames) == self.num_stack, (len(self.frames), self.num_stack) - return { - k: LazyFrames([x[k] for x in self.frames], self.lz4_compress) - for k in self.observation_space.keys() - } class Agent(nn.Module): def __init__(self, env, args): @@ -265,10 +216,10 @@ def __init__(self, env, args): # denoising results will be clipped to [-1,1], so the action should be in [-1,1] as well self.act_dim = env.single_action_space.shape[0] obs_state_dim = env.single_observation_space['state'].shape[1] - _, C, H, W = envs.single_observation_space['rgb'].shape + _, H, W, C = envs.single_observation_space['rgb'].shape visual_feature_dim = 256 - self.visual_encoder = PlainConv(in_channels=int(C/3*4), out_dim=visual_feature_dim) + self.visual_encoder = PlainConv(in_channels=int(C/3*4), out_dim=visual_feature_dim, pool_feature_map=True) self.noise_pred_net = ConditionalUnet1D( input_dim=self.act_dim, # act_horizon is not used (U-Net doesn't care) global_cond_dim=self.obs_horizon * (visual_feature_dim + obs_state_dim), @@ -284,9 +235,6 @@ def __init__(self, env, args): prediction_type='epsilon' # predict noise (instead of denoised action) ) - if args.random_shift > 0: - from diffusion_policy.utils import RandomShiftsAug - self.aug = RandomShiftsAug(args.random_shift) def encode_obs(self, obs_seq, eval_mode): rgb = obs_seq['rgb'].float() / 255.0 # (B, obs_horizon, 3*k, H, W) @@ -326,7 +274,7 @@ def compute_loss(self, obs_seq, action_seq): return F.mse_loss(noise_pred, noise) - def get_eval_action(self, obs_seq): + def get_action(self, obs_seq): # init scheduler # self.noise_scheduler.set_timesteps(self.num_diffusion_iters) # set_timesteps will change noise_scheduler.timesteps is only used in noise_scheduler.step() @@ -336,6 +284,9 @@ def get_eval_action(self, obs_seq): # obs_seq['state']: (B, obs_horizon, obs_state_dim) B = obs_seq['state'].shape[0] with torch.no_grad(): + obs_seq['rgb'] = obs_seq['rgb'].permute(0,1,4,2,3) + obs_seq['depth'] = obs_seq['depth'].permute(0,1,4,2,3) + obs_cond = self.encode_obs(obs_seq, eval_mode=True) # (B, obs_horizon * obs_dim) # initialize action from Guassian noise @@ -396,7 +347,7 @@ def get_eval_action(self, obs_seq): if args.max_episode_steps is not None: env_kwargs["max_episode_steps"] = args.max_episode_steps other_kwargs = dict(obs_horizon=args.obs_horizon) - envs = make_eval_envs(args.env_id, args.num_eval_envs, args.sim_backend, env_kwargs, other_kwargs, video_dir=f'runs/{run_name}/videos' if args.capture_video else None, wrappers=[FlattenRGBDObservationWrapper, partial(DictFrameStack, num_stack = args.obs_horizon)]) + envs = make_eval_envs(args.env_id, args.num_eval_envs, args.sim_backend, env_kwargs, other_kwargs, video_dir=f'runs/{run_name}/videos' if args.capture_video else None, wrappers=[partial(FlattenRGBDObservationWrapper, sep_depth=True)]) if args.track: import wandb config = vars(args) @@ -448,4 +399,87 @@ def get_eval_action(self, obs_seq): persistent_workers=(args.num_dataload_workers > 0), ) - agent = Agent(envs, args).to(device) \ No newline at end of file + agent = Agent(envs, args).to(device) + + optimizer = optim.AdamW(params=agent.parameters(), + lr=args.lr, betas=(0.95, 0.999), weight_decay=1e-6) + + # Cosine LR schedule with linear warmup + lr_scheduler = get_scheduler( + name='cosine', + optimizer=optimizer, + num_warmup_steps=500, + num_training_steps=args.total_iters, + ) + + # Exponential Moving Average + # accelerates training and improves stability + # holds a copy of the model weights + ema = EMAModel(parameters=agent.parameters(), power=0.75) + ema_agent = Agent(envs, args).to(device) + + # ---------------------------------------------------------------------------- # + # Training begins. + # ---------------------------------------------------------------------------- # + agent.train() + + best_eval_metrics = defaultdict(float) + timings = defaultdict(float) + + for iteration, data_batch in enumerate(train_dataloader): + # # copy data from cpu to gpu + # data_batch = {k: v.cuda(non_blocking=True) for k, v in data_batch.items()} + + # forward and compute loss + obs_batch_dict = data_batch['observations'] + obs_batch_dict = {k: v.cuda(non_blocking=True) for k, v in obs_batch_dict.items()} + act_batch = data_batch['actions'].cuda(non_blocking=True) + + # forward and compute loss + total_loss = agent.compute_loss( + obs_seq=obs_batch_dict, # obs_batch_dict['state'] is (B, L, obs_dim) + action_seq=act_batch, # (B, L, act_dim) + ) + + # backward + optimizer.zero_grad() + total_loss.backward() + optimizer.step() + lr_scheduler.step() # step lr scheduler every batch, this is different from standard pytorch behavior + last_tick = time.time() + + ema.step(agent.parameters()) + + if iteration % args.log_freq == 0: + print(f"Iteration {iteration}, loss: {total_loss.item()}") + writer.add_scalar("charts/learning_rate", optimizer.param_groups[0]["lr"], iteration) + writer.add_scalar("losses/total_loss", total_loss.item(), iteration) + for k, v in timings.items(): + writer.add_scalar(f"time/{k}", v, iteration) + # Evaluation + if iteration % args.eval_freq == 0: + last_tick = time.time() + + ema.copy_to(ema_agent.parameters()) + # def sample_fn(obs): + + eval_metrics = evaluate(args.num_eval_episodes, ema_agent, envs, device, args.sim_backend) + timings["eval"] += time.time() - last_tick + + print(f"Evaluated {len(eval_metrics['success_at_end'])} episodes") + for k in eval_metrics.keys(): + eval_metrics[k] = np.mean(eval_metrics[k]) + writer.add_scalar(f"eval/{k}", eval_metrics[k], iteration) + print(f"{k}: {eval_metrics[k]:.4f}") + + save_on_best_metrics = ["success_once", "success_at_end"] + for k in save_on_best_metrics: + if k in eval_metrics and eval_metrics[k] > best_eval_metrics[k]: + best_eval_metrics[k] = eval_metrics[k] + save_ckpt(run_name, f"best_eval_{k}") + print(f'New best {k}_rate: {eval_metrics[k]:.4f}. Saving checkpoint.') + # Checkpoint + if args.save_freq is not None and iteration % args.save_freq == 0: + save_ckpt(run_name, str(iteration)) + envs.close() + writer.close() \ No newline at end of file diff --git a/mani_skill/utils/wrappers/flatten.py b/mani_skill/utils/wrappers/flatten.py index 64be9d0c4..126dcbe82 100644 --- a/mani_skill/utils/wrappers/flatten.py +++ b/mani_skill/utils/wrappers/flatten.py @@ -23,11 +23,12 @@ class FlattenRGBDObservationWrapper(gym.ObservationWrapper): Note that the returned observations will have a "rgbd" or "rgb" or "depth" key depending on the rgb/depth bool flags. """ - def __init__(self, env, rgb=True, depth=True, state=True) -> None: + def __init__(self, env, rgb=True, depth=True, state=True, sep_depth=False) -> None: self.base_env: BaseEnv = env.unwrapped super().__init__(env) self.include_rgb = rgb self.include_depth = depth + self.sep_depth = sep_depth self.include_state = state new_obs = self.observation(self.base_env._init_raw_obs) self.base_env.update_obs_space(new_obs) @@ -50,7 +51,12 @@ def observation(self, observation: Dict): if self.include_rgb and not self.include_depth: ret["rgb"] = images elif self.include_rgb and self.include_depth: - ret["rgbd"] = images + # todo: might not be the best way or the right place to perform this + if self.sep_depth: + ret["rgb"] = images[...,:-1] + ret["depth"] = images[...,-1:] + else: + ret["rgbd"] = images elif self.include_depth and not self.include_rgb: ret["depth"] = images return ret From 41bc78a323f56ed4c660c28bfb98430d06b53ad6 Mon Sep 17 00:00:00 2001 From: Arnav G <73305591+arnavg115@users.noreply.github.com> Date: Mon, 21 Oct 2024 01:25:01 +0000 Subject: [PATCH 07/14] minor diff policy fixes and finished draw triangle parallelization --- .../diffusion_policy/diffusion_policy/make_env.py | 2 +- examples/baselines/diffusion_policy/train_rgbd.py | 1 + mani_skill/envs/tasks/drawing/draw_triangle.py | 9 ++++----- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/baselines/diffusion_policy/diffusion_policy/make_env.py b/examples/baselines/diffusion_policy/diffusion_policy/make_env.py index e9e5bf33a..7cfb657f5 100644 --- a/examples/baselines/diffusion_policy/diffusion_policy/make_env.py +++ b/examples/baselines/diffusion_policy/diffusion_policy/make_env.py @@ -85,7 +85,7 @@ def thunk(): if env_kwargs["obs_mode"] == "state": env = gym.wrappers.FrameStack(env, other_kwargs['obs_horizon']) elif env_kwargs["obs_mode"] == "rgbd": - env = DictFrameStack(env, 2) + env = DictFrameStack(env, other_kwargs['obs_horizon']) env.action_space.seed(seed) env.observation_space.seed(seed) return env diff --git a/examples/baselines/diffusion_policy/train_rgbd.py b/examples/baselines/diffusion_policy/train_rgbd.py index 2d7f9719b..f2706c609 100644 --- a/examples/baselines/diffusion_policy/train_rgbd.py +++ b/examples/baselines/diffusion_policy/train_rgbd.py @@ -478,6 +478,7 @@ def get_action(self, obs_seq): best_eval_metrics[k] = eval_metrics[k] save_ckpt(run_name, f"best_eval_{k}") print(f'New best {k}_rate: {eval_metrics[k]:.4f}. Saving checkpoint.') + # Checkpoint if args.save_freq is not None and iteration % args.save_freq == 0: save_ckpt(run_name, str(iteration)) diff --git a/mani_skill/envs/tasks/drawing/draw_triangle.py b/mani_skill/envs/tasks/drawing/draw_triangle.py index 5c8c39351..74e6a63bd 100644 --- a/mani_skill/envs/tasks/drawing/draw_triangle.py +++ b/mani_skill/envs/tasks/drawing/draw_triangle.py @@ -43,7 +43,7 @@ class DrawTriangle(BaseEnv): """The colors of the brushes. If there is more than one color, each parallel environment will have a randomly sampled color.""" THRESHOLD = 0.05 - SUPPORTED_REWARD_MODES = ["none"] + SUPPORTED_REWARD_MODES = ["sparse"] SUPPORTED_ROBOTS: ["panda_stick"] # type: ignore agent: PandaStick @@ -216,7 +216,6 @@ def create_goal_triangle(name="tri", base_color=None): ) def _initialize_episode(self, env_idx: torch.Tensor, options: dict): - # NOTE (stao): for simplicity this task cannot handle partial resets self.draw_step = 0 with torch.device(self.device): b = len(env_idx) @@ -226,18 +225,18 @@ def _initialize_episode(self, env_idx: torch.Tensor, options: dict): target_pos[:, :2] = torch.rand((b, 2)) * 0.02 - 0.1 target_pos[:, -1] = 0.01 qs = randomization.random_quaternions(b, lock_x=True, lock_y=True) - mats = quaternion_to_matrix(qs) + mats = quaternion_to_matrix(qs).to(self.device) self.goal_tri.set_pose(Pose.create_from_pq(p=target_pos, q=qs)) self.vertices = torch.from_numpy( np.tile(self.original_verts, (b, 1, 1)) - ) # b, 3, 3 + ).to(self.device) # b, 3, 3 self.vertices = ( mats.double() @ self.vertices.transpose(-1, -2).double() ).transpose( -1, -2 ) # apply rotation matrix - self.vertices += target_pos + self.vertices += target_pos.unsqueeze(1) self.triangles = self.generate_triangle_with_points( 100, self.vertices[:, :, :-1] From e322dadd33fc6d1e4455fe6be778ef40cf1c85ff Mon Sep 17 00:00:00 2001 From: Arnav G <73305591+arnavg115@users.noreply.github.com> Date: Mon, 21 Oct 2024 19:55:42 +0000 Subject: [PATCH 08/14] Added depth arg to diff pol rgbd + formatting --- .../diffusion_policy/make_env.py | 79 +++- .../diffusion_policy/plain_conv.py | 32 +- .../diffusion_policy/utils.py | 221 ++++++----- .../baselines/diffusion_policy/train_rgbd.py | 372 +++++++++++------- .../envs/tasks/drawing/draw_triangle.py | 4 +- .../panda_stick/motionplanner.py | 4 +- 6 files changed, 443 insertions(+), 269 deletions(-) diff --git a/examples/baselines/diffusion_policy/diffusion_policy/make_env.py b/examples/baselines/diffusion_policy/diffusion_policy/make_env.py index 7cfb657f5..0a210d79f 100644 --- a/examples/baselines/diffusion_policy/diffusion_policy/make_env.py +++ b/examples/baselines/diffusion_policy/diffusion_policy/make_env.py @@ -1,14 +1,15 @@ from collections import deque from typing import Optional + import gymnasium as gym import mani_skill.envs -from mani_skill.utils import gym_utils -from mani_skill.vector.wrappers.gymnasium import ManiSkillVectorEnv -from mani_skill.utils.wrappers import RecordEpisode, FrameStack, CPUGymWrapper import numpy as np from gymnasium.spaces import Box from gymnasium.wrappers.frame_stack import FrameStack as GymFrameStack from gymnasium.wrappers.frame_stack import LazyFrames +from mani_skill.utils import gym_utils +from mani_skill.utils.wrappers import CPUGymWrapper, FrameStack, RecordEpisode +from mani_skill.vector.wrappers.gymnasium import ManiSkillVectorEnv class DictFrameStack(GymFrameStack): @@ -39,9 +40,7 @@ def __init__( for k, v in self.observation_space.items(): low = np.repeat(v.low[np.newaxis, ...], num_stack, axis=0) high = np.repeat(v.high[np.newaxis, ...], num_stack, axis=0) - new_observation_space[k] = Box( - low=low, high=high, dtype=v.dtype - ) + new_observation_space[k] = Box(low=low, high=high, dtype=v.dtype) self.observation_space = new_observation_space def observation(self, observation): @@ -60,7 +59,15 @@ def observation(self, observation): } -def make_eval_envs(env_id, num_envs: int, sim_backend: str, env_kwargs: dict, other_kwargs: dict, video_dir: Optional[str] = None, wrappers: list[gym.Wrapper] = []): +def make_eval_envs( + env_id, + num_envs: int, + sim_backend: str, + env_kwargs: dict, + other_kwargs: dict, + video_dir: Optional[str] = None, + wrappers: list[gym.Wrapper] = [], +): """Create vectorized environment for evaluation and/or recording videos. For CPU vectorized environments only the first parallel environment is used to record videos. For GPU vectorized environments all parallel environments are used to record videos. @@ -74,32 +81,72 @@ def make_eval_envs(env_id, num_envs: int, sim_backend: str, env_kwargs: dict, ot wrappers: the list of wrappers to apply to the environment. """ if sim_backend == "cpu": - def cpu_make_env(env_id, seed, video_dir=None, env_kwargs = dict(), other_kwargs = dict()): + + def cpu_make_env( + env_id, seed, video_dir=None, env_kwargs=dict(), other_kwargs=dict() + ): def thunk(): env = gym.make(env_id, reconfiguration_freq=1, **env_kwargs) for wrapper in wrappers: env = wrapper(env) env = CPUGymWrapper(env, ignore_terminations=True, record_metrics=True) if video_dir: - env = RecordEpisode(env, output_dir=video_dir, save_trajectory=False, info_on_video=True, source_type="diffusion_policy", source_desc="diffusion_policy evaluation rollout") + env = RecordEpisode( + env, + output_dir=video_dir, + save_trajectory=False, + info_on_video=True, + source_type="diffusion_policy", + source_desc="diffusion_policy evaluation rollout", + ) if env_kwargs["obs_mode"] == "state": - env = gym.wrappers.FrameStack(env, other_kwargs['obs_horizon']) + env = gym.wrappers.FrameStack(env, other_kwargs["obs_horizon"]) elif env_kwargs["obs_mode"] == "rgbd": - env = DictFrameStack(env, other_kwargs['obs_horizon']) + env = DictFrameStack(env, other_kwargs["obs_horizon"]) env.action_space.seed(seed) env.observation_space.seed(seed) return env return thunk - vector_cls = gym.vector.SyncVectorEnv if num_envs == 1 else lambda x : gym.vector.AsyncVectorEnv(x, context="forkserver") - env = vector_cls([cpu_make_env(env_id, seed, video_dir if seed == 0 else None, env_kwargs, other_kwargs) for seed in range(num_envs)]) + + vector_cls = ( + gym.vector.SyncVectorEnv + if num_envs == 1 + else lambda x: gym.vector.AsyncVectorEnv(x, context="forkserver") + ) + env = vector_cls( + [ + cpu_make_env( + env_id, + seed, + video_dir if seed == 0 else None, + env_kwargs, + other_kwargs, + ) + for seed in range(num_envs) + ] + ) else: - env = gym.make(env_id, num_envs=num_envs, sim_backend=sim_backend, reconfiguration_freq=1, **env_kwargs) + env = gym.make( + env_id, + num_envs=num_envs, + sim_backend=sim_backend, + reconfiguration_freq=1, + **env_kwargs + ) max_episode_steps = gym_utils.find_max_episode_steps_value(env) for wrapper in wrappers: env = wrapper(env) - env = FrameStack(env, num_stack=other_kwargs['obs_horizon']) + env = FrameStack(env, num_stack=other_kwargs["obs_horizon"]) if video_dir: - env = RecordEpisode(env, output_dir=video_dir, save_trajectory=False, save_video=True, source_type="diffusion_policy", source_desc="diffusion_policy evaluation rollout", max_steps_per_video=max_episode_steps) + env = RecordEpisode( + env, + output_dir=video_dir, + save_trajectory=False, + save_video=True, + source_type="diffusion_policy", + source_desc="diffusion_policy evaluation rollout", + max_steps_per_video=max_episode_steps, + ) env = ManiSkillVectorEnv(env, ignore_terminations=True, record_metrics=True) return env diff --git a/examples/baselines/diffusion_policy/diffusion_policy/plain_conv.py b/examples/baselines/diffusion_policy/diffusion_policy/plain_conv.py index 50c09e59d..7244469b8 100644 --- a/examples/baselines/diffusion_policy/diffusion_policy/plain_conv.py +++ b/examples/baselines/diffusion_policy/diffusion_policy/plain_conv.py @@ -1,5 +1,6 @@ import torch.nn as nn + def make_mlp(in_channels, mlp_channels, act_builder=nn.ReLU, last_act=True): c_in = in_channels module_list = [] @@ -10,27 +11,34 @@ def make_mlp(in_channels, mlp_channels, act_builder=nn.ReLU, last_act=True): c_in = c_out return nn.Sequential(*module_list) + class PlainConv(nn.Module): - def __init__(self, - in_channels=3, - out_dim=256, - pool_feature_map=False, - last_act=True, # True for ConvBody, False for CNN - ): + def __init__( + self, + in_channels=3, + out_dim=256, + pool_feature_map=False, + last_act=True, # True for ConvBody, False for CNN + ): super().__init__() # assume input image size is 64x64 self.out_dim = out_dim self.cnn = nn.Sequential( - nn.Conv2d(in_channels, 16, 3, padding=1, bias=True), nn.ReLU(inplace=True), + nn.Conv2d(in_channels, 16, 3, padding=1, bias=True), + nn.ReLU(inplace=True), nn.MaxPool2d(2, 2), # [32, 32] - nn.Conv2d(16, 32, 3, padding=1, bias=True), nn.ReLU(inplace=True), + nn.Conv2d(16, 32, 3, padding=1, bias=True), + nn.ReLU(inplace=True), nn.MaxPool2d(2, 2), # [16, 16] - nn.Conv2d(32, 64, 3, padding=1, bias=True), nn.ReLU(inplace=True), + nn.Conv2d(32, 64, 3, padding=1, bias=True), + nn.ReLU(inplace=True), nn.MaxPool2d(2, 2), # [8, 8] - nn.Conv2d(64, 128, 3, padding=1, bias=True), nn.ReLU(inplace=True), + nn.Conv2d(64, 128, 3, padding=1, bias=True), + nn.ReLU(inplace=True), nn.MaxPool2d(2, 2), # [4, 4] - nn.Conv2d(128, 128, 1, padding=0, bias=True), nn.ReLU(inplace=True), + nn.Conv2d(128, 128, 1, padding=0, bias=True), + nn.ReLU(inplace=True), ) if pool_feature_map: @@ -54,4 +62,4 @@ def forward(self, image): x = self.pool(x) x = x.flatten(1) x = self.fc(x) - return x \ No newline at end of file + return x diff --git a/examples/baselines/diffusion_policy/diffusion_policy/utils.py b/examples/baselines/diffusion_policy/diffusion_policy/utils.py index ee21344f4..bc270e19c 100644 --- a/examples/baselines/diffusion_policy/diffusion_policy/utils.py +++ b/examples/baselines/diffusion_policy/diffusion_policy/utils.py @@ -1,10 +1,11 @@ -from torch.utils.data.sampler import Sampler import numpy as np import torch import torch.nn as nn -from h5py import File, Group, Dataset -from gymnasium import spaces import torch.nn.functional as F +from gymnasium import spaces +from h5py import Dataset, File, Group +from torch.utils.data.sampler import Sampler + class IterationBasedBatchSampler(Sampler): """Wraps a BatchSampler. @@ -48,15 +49,18 @@ def worker_init_fn(worker_id, base_seed=None): # print(worker_id, base_seed) np.random.seed(base_seed + worker_id) + TARGET_KEY_TO_SOURCE_KEY = { - 'states': 'env_states', - 'observations': 'obs', - 'success': 'success', - 'next_observations': 'obs', + "states": "env_states", + "observations": "obs", + "success": "success", + "next_observations": "obs", # 'dones': 'dones', # 'rewards': 'rewards', - 'actions': 'actions', + "actions": "actions", } + + def load_content_from_h5_file(file): if isinstance(file, (File, Group)): return {key: load_content_from_h5_file(file[key]) for key in list(file.keys())} @@ -65,34 +69,40 @@ def load_content_from_h5_file(file): else: raise NotImplementedError(f"Unspported h5 file type: {type(file)}") -def load_hdf5(path, ): - print('Loading HDF5 file', path) - file = File(path, 'r') + +def load_hdf5( + path, +): + print("Loading HDF5 file", path) + file = File(path, "r") ret = load_content_from_h5_file(file) file.close() - print('Loaded') + print("Loaded") return ret + def load_traj_hdf5(path, num_traj=None): - print('Loading HDF5 file', path) - file = File(path, 'r') + print("Loading HDF5 file", path) + file = File(path, "r") keys = list(file.keys()) if num_traj is not None: assert num_traj <= len(keys), f"num_traj: {num_traj} > len(keys): {len(keys)}" - keys = sorted(keys, key=lambda x: int(x.split('_')[-1])) + keys = sorted(keys, key=lambda x: int(x.split("_")[-1])) keys = keys[:num_traj] - ret = { - key: load_content_from_h5_file(file[key]) for key in keys - } + ret = {key: load_content_from_h5_file(file[key]) for key in keys} file.close() - print('Loaded') + print("Loaded") return ret -def load_demo_dataset(path, keys=['observations', 'actions'], num_traj=None, concat=True): + + +def load_demo_dataset( + path, keys=["observations", "actions"], num_traj=None, concat=True +): # assert num_traj is None raw_data = load_traj_hdf5(path, num_traj) # raw_data has keys like: ['traj_0', 'traj_1', ...] # raw_data['traj_0'] has keys like: ['actions', 'dones', 'env_states', 'infos', ...] - _traj = raw_data['traj_0'] + _traj = raw_data["traj_0"] for key in keys: source_key = TARGET_KEY_TO_SOURCE_KEY[key] assert source_key in _traj, f"key: {source_key} not in traj_0: {_traj.keys()}" @@ -101,88 +111,108 @@ def load_demo_dataset(path, keys=['observations', 'actions'], num_traj=None, con # if 'next' in target_key: # raise NotImplementedError('Please carefully deal with the length of trajectory') source_key = TARGET_KEY_TO_SOURCE_KEY[target_key] - dataset[target_key] = [ raw_data[idx][source_key] for idx in raw_data ] + dataset[target_key] = [raw_data[idx][source_key] for idx in raw_data] if isinstance(dataset[target_key][0], np.ndarray) and concat: - if target_key in ['observations', 'states'] and \ - len(dataset[target_key][0]) > len(raw_data['traj_0']['actions']): - dataset[target_key] = np.concatenate([ - t[:-1] for t in dataset[target_key] - ], axis=0) - elif target_key in ['next_observations', 'next_states'] and \ - len(dataset[target_key][0]) > len(raw_data['traj_0']['actions']): - dataset[target_key] = np.concatenate([ - t[1:] for t in dataset[target_key] - ], axis=0) + if target_key in ["observations", "states"] and len( + dataset[target_key][0] + ) > len(raw_data["traj_0"]["actions"]): + dataset[target_key] = np.concatenate( + [t[:-1] for t in dataset[target_key]], axis=0 + ) + elif target_key in ["next_observations", "next_states"] and len( + dataset[target_key][0] + ) > len(raw_data["traj_0"]["actions"]): + dataset[target_key] = np.concatenate( + [t[1:] for t in dataset[target_key]], axis=0 + ) else: dataset[target_key] = np.concatenate(dataset[target_key], axis=0) - print('Load', target_key, dataset[target_key].shape) + print("Load", target_key, dataset[target_key].shape) else: - print('Load', target_key, len(dataset[target_key]), type(dataset[target_key][0])) + print( + "Load", + target_key, + len(dataset[target_key]), + type(dataset[target_key][0]), + ) return dataset -def convert_obs(obs, concat_fn, transpose_fn, state_obs_extractor): - img_dict = obs['sensor_data'] - new_img_dict = { - key: transpose_fn( - concat_fn([v[key] for v in img_dict.values()]) - ) # (C, H, W) or (B, C, H, W) - for key in ['rgb', 'depth'] - } - # if isinstance(new_img_dict['depth'], torch.Tensor): # MS2 vec env uses float16, but gym AsyncVecEnv uses float32 - # new_img_dict['depth'] = new_img_dict['depth'].to(torch.float16) - - # Unified version - states_to_stack = state_obs_extractor(obs) - for j in range(len(states_to_stack)): - if states_to_stack[j].dtype == np.float64: - states_to_stack[j] = states_to_stack[j].astype(np.float32) - try: - state = np.hstack(states_to_stack) - except: # dirty fix for concat trajectory of states - state = np.column_stack(states_to_stack) - if state.dtype == np.float64: - for x in states_to_stack: - print(x.shape, x.dtype) - import pdb; pdb.set_trace() - - out_dict = { - 'state': state, - 'rgb': new_img_dict['rgb'], - 'depth': new_img_dict['depth'], - } - return out_dict -def build_obs_space(env, depth_dtype, state_obs_extractor): - # NOTE: We have to use float32 for gym AsyncVecEnv since it does not support float16, but we can use float16 for MS2 vec env - obs_space = env.observation_space - # Unified version - state_dim = sum([v.shape[0] for v in state_obs_extractor(obs_space)]) +def convert_obs(obs, concat_fn, transpose_fn, state_obs_extractor): + img_dict = obs["sensor_data"] + new_img_dict = { + key: transpose_fn( + concat_fn([v[key] for v in img_dict.values()]) + ) # (C, H, W) or (B, C, H, W) + for key in ["rgb", "depth"] + } + # if isinstance(new_img_dict['depth'], torch.Tensor): # MS2 vec env uses float16, but gym AsyncVecEnv uses float32 + # new_img_dict['depth'] = new_img_dict['depth'].to(torch.float16) + + # Unified version + states_to_stack = state_obs_extractor(obs) + for j in range(len(states_to_stack)): + if states_to_stack[j].dtype == np.float64: + states_to_stack[j] = states_to_stack[j].astype(np.float32) + try: + state = np.hstack(states_to_stack) + except: # dirty fix for concat trajectory of states + state = np.column_stack(states_to_stack) + if state.dtype == np.float64: + for x in states_to_stack: + print(x.shape, x.dtype) + import pdb + + pdb.set_trace() + + out_dict = { + "state": state, + "rgb": new_img_dict["rgb"], + "depth": new_img_dict["depth"], + } + return out_dict + - single_img_space = next(iter(env.observation_space['image'].values())) - h, w, _ = single_img_space['rgb'].shape - n_images = len(env.observation_space['image']) +def build_obs_space(env, depth_dtype, state_obs_extractor): + # NOTE: We have to use float32 for gym AsyncVecEnv since it does not support float16, but we can use float16 for MS2 vec env + obs_space = env.observation_space + + # Unified version + state_dim = sum([v.shape[0] for v in state_obs_extractor(obs_space)]) + + single_img_space = next(iter(env.observation_space["image"].values())) + h, w, _ = single_img_space["rgb"].shape + n_images = len(env.observation_space["image"]) + + return spaces.Dict( + { + "state": spaces.Box( + -float("inf"), float("inf"), shape=(state_dim,), dtype=np.float32 + ), + "rgb": spaces.Box(0, 255, shape=(n_images * 3, h, w), dtype=np.uint8), + "depth": spaces.Box( + -float("inf"), float("inf"), shape=(n_images, h, w), dtype=depth_dtype + ), + } + ) - return spaces.Dict({ - 'state': spaces.Box(-float("inf"), float("inf"), shape=(state_dim,), dtype=np.float32), - 'rgb': spaces.Box(0, 255, shape=(n_images*3, h,w), dtype=np.uint8), - 'depth': spaces.Box(-float("inf"), float("inf"), shape=(n_images,h,w), dtype=depth_dtype), - }) def build_state_obs_extractor(env_id): - env_name = env_id.split('-')[0] - if env_name in ['TurnFaucet', 'StackCube']: - return lambda obs: list(obs['extra'].values()) - elif env_name == 'PushChair' or env_name == "PickCube": - return lambda obs: list(obs['agent'].values()) + list(obs['extra'].values()) + env_name = env_id.split("-")[0] + if env_name in ["TurnFaucet", "StackCube"]: + return lambda obs: list(obs["extra"].values()) + elif env_name == "PushChair" or env_name == "PickCube": + return lambda obs: list(obs["agent"].values()) + list(obs["extra"].values()) else: - raise NotImplementedError(f'Please tune state obs by yourself') + raise NotImplementedError(f"Please tune state obs by yourself") class RandomShiftsAug(nn.Module): """ from https://github.com/facebookresearch/drqv2/blob/main/drqv2.py """ + def __init__(self, pad): super().__init__() self.pad = pad @@ -191,26 +221,19 @@ def forward(self, x): n, c, h, w = x.size() assert h == w padding = tuple([self.pad] * 4) - x = F.pad(x, padding, 'replicate') + x = F.pad(x, padding, "replicate") eps = 1.0 / (h + 2 * self.pad) - arange = torch.linspace(-1.0 + eps, - 1.0 - eps, - h + 2 * self.pad, - device=x.device, - dtype=x.dtype)[:h] + arange = torch.linspace( + -1.0 + eps, 1.0 - eps, h + 2 * self.pad, device=x.device, dtype=x.dtype + )[:h] arange = arange.unsqueeze(0).repeat(h, 1).unsqueeze(2) base_grid = torch.cat([arange, arange.transpose(1, 0)], dim=2) base_grid = base_grid.unsqueeze(0).repeat(n, 1, 1, 1) - shift = torch.randint(0, - 2 * self.pad + 1, - size=(n, 1, 1, 2), - device=x.device, - dtype=x.dtype) + shift = torch.randint( + 0, 2 * self.pad + 1, size=(n, 1, 1, 2), device=x.device, dtype=x.dtype + ) shift *= 2.0 / (h + 2 * self.pad) grid = base_grid + shift - return F.grid_sample(x, - grid, - padding_mode='zeros', - align_corners=False) \ No newline at end of file + return F.grid_sample(x, grid, padding_mode="zeros", align_corners=False) diff --git a/examples/baselines/diffusion_policy/train_rgbd.py b/examples/baselines/diffusion_policy/train_rgbd.py index f2706c609..ef6e317f6 100644 --- a/examples/baselines/diffusion_policy/train_rgbd.py +++ b/examples/baselines/diffusion_policy/train_rgbd.py @@ -1,39 +1,41 @@ -ALGO_NAME = 'BC_Diffusion_rgbd_UNet' +ALGO_NAME = "BC_Diffusion_rgbd_UNet" import argparse -from collections import defaultdict -from functools import partial import os import random -from distutils.util import strtobool import time +from collections import defaultdict +from dataclasses import dataclass, field +from distutils.util import strtobool +from functools import partial +from typing import List, Optional + import gymnasium as gym import numpy as np import torch import torch.nn as nn -import torch.optim as optim import torch.nn.functional as F -from torch.utils.tensorboard import SummaryWriter -from diffusion_policy.evaluate import evaluate -from diffusion_policy.plain_conv import PlainConv +import torch.optim as optim +import tyro +from diffusers.optimization import get_scheduler +from diffusers.schedulers.scheduling_ddpm import DDPMScheduler +from diffusers.training_utils import EMAModel +from gymnasium import spaces from mani_skill.utils import gym_utils -from mani_skill.utils.wrappers.flatten import FlattenRGBDObservationWrapper from mani_skill.utils.registration import REGISTERED_ENVS - - -from torch.utils.data.dataset import Dataset -from torch.utils.data.sampler import RandomSampler, BatchSampler +from mani_skill.utils.wrappers.flatten import FlattenRGBDObservationWrapper from torch.utils.data.dataloader import DataLoader -from diffusion_policy.utils import IterationBasedBatchSampler, build_state_obs_extractor, convert_obs, worker_init_fn -from diffusion_policy.make_env import make_eval_envs -from diffusers.schedulers.scheduling_ddpm import DDPMScheduler -from diffusers.training_utils import EMAModel -from diffusers.optimization import get_scheduler +from torch.utils.data.dataset import Dataset +from torch.utils.data.sampler import BatchSampler, RandomSampler +from torch.utils.tensorboard import SummaryWriter + from diffusion_policy.conditional_unet1d import ConditionalUnet1D -from dataclasses import dataclass, field -from typing import Optional, List -import tyro -from gymnasium import spaces +from diffusion_policy.evaluate import evaluate +from diffusion_policy.make_env import make_eval_envs +from diffusion_policy.plain_conv import PlainConv +from diffusion_policy.utils import (IterationBasedBatchSampler, + build_state_obs_extractor, convert_obs, + worker_init_fn) @dataclass @@ -57,7 +59,9 @@ class Args: env_id: str = "PegInsertionSide-v0" """the id of the environment""" - demo_path: str = 'data/ms2_official_demos/rigid_body/PegInsertionSide-v0/trajectory.state.pd_ee_delta_pose.h5' + demo_path: str = ( + "data/ms2_official_demos/rigid_body/PegInsertionSide-v0/trajectory.state.pd_ee_delta_pose.h5" + ) """the path of demo dataset (pkl or h5)""" num_demos: Optional[int] = None """number of trajectories to load from the demo dataset""" @@ -69,12 +73,20 @@ class Args: # Diffusion Policy specific arguments lr: float = 1e-4 """the learning rate of the diffusion policy""" - obs_horizon: int = 2 # Seems not very important in ManiSkill, 1, 2, 4 work well - act_horizon: int = 8 # Seems not very important in ManiSkill, 4, 8, 15 work well - pred_horizon: int = 16 # 16->8 leads to worse performance, maybe it is like generate a half image; 16->32, improvement is very marginal - diffusion_step_embed_dim: int = 64 # not very important - unet_dims: List[int] = field(default_factory=lambda: [64, 128, 256]) # default setting is about ~4.5M params - n_groups: int = 8 # jigu says it is better to let each group have at least 8 channels; it seems 4 and 8 are simila + obs_horizon: int = 2 # Seems not very important in ManiSkill, 1, 2, 4 work well + act_horizon: int = 8 # Seems not very important in ManiSkill, 4, 8, 15 work well + pred_horizon: int = ( + 16 # 16->8 leads to worse performance, maybe it is like generate a half image; 16->32, improvement is very marginal + ) + diffusion_step_embed_dim: int = 64 # not very important + unet_dims: List[int] = field( + default_factory=lambda: [64, 128, 256] + ) # default setting is about ~4.5M params + n_groups: int = ( + 8 # jigu says it is better to let each group have at least 8 channels; it seems 4 and 8 are simila + ) + depth: bool = True + """use depth to train""" # Environment/experiment specific arguments max_episode_steps: Optional[int] = None @@ -94,12 +106,13 @@ class Args: """the simulation backend to use for evaluation environments. can be "cpu" or "gpu""" num_dataload_workers: int = 0 """the number of workers to use for loading the training data in the torch dataloader""" - control_mode: str = 'pd_joint_delta_pos' + control_mode: str = "pd_joint_delta_pos" """the control mode to use for the evaluation environments. Must match the control mode of the demonstration dataset.""" # additional tags/configs for logging purposes to wandb and shared comparisons with other algorithms demo_type: Optional[str] = None + def reorder_keys(d, ref_dict): out = dict() for k, v in ref_dict.items(): @@ -110,50 +123,65 @@ def reorder_keys(d, ref_dict): return out - - -class SmallDemoDataset_DiffusionPolicy(Dataset): # Load everything into memory +class SmallDemoDataset_DiffusionPolicy(Dataset): # Load everything into memory def __init__(self, data_path, obs_process_fn, obs_space, num_traj): - if data_path[-4:] == '.pkl': + if data_path[-4:] == ".pkl": raise NotImplementedError() else: from diffusion_policy.utils import load_demo_dataset + trajectories = load_demo_dataset(data_path, num_traj=num_traj, concat=False) # trajectories['observations'] is a list of dict, each dict is a traj, with keys in obs_space, values with length L+1 # trajectories['actions'] is a list of np.ndarray (L, act_dim) - print('Raw trajectory loaded, start to pre-process the observations...') + print("Raw trajectory loaded, start to pre-process the observations...") # Pre-process the observations, make them align with the obs returned by the obs_wrapper obs_traj_dict_list = [] - for obs_traj_dict in trajectories['observations']: - _obs_traj_dict = reorder_keys(obs_traj_dict, obs_space) # key order in demo is different from key order in env obs + for obs_traj_dict in trajectories["observations"]: + _obs_traj_dict = reorder_keys( + obs_traj_dict, obs_space + ) # key order in demo is different from key order in env obs _obs_traj_dict = obs_process_fn(_obs_traj_dict) - _obs_traj_dict['depth'] = torch.Tensor(_obs_traj_dict['depth'].astype(np.float32) / 1024).to(torch.float16) - _obs_traj_dict['rgb'] = torch.from_numpy(_obs_traj_dict['rgb']) # still uint8 - _obs_traj_dict['state'] = torch.from_numpy(_obs_traj_dict['state']) + _obs_traj_dict["depth"] = torch.Tensor( + _obs_traj_dict["depth"].astype(np.float32) / 1024 + ).to(torch.float16) + _obs_traj_dict["rgb"] = torch.from_numpy( + _obs_traj_dict["rgb"] + ) # still uint8 + _obs_traj_dict["state"] = torch.from_numpy(_obs_traj_dict["state"]) obs_traj_dict_list.append(_obs_traj_dict) - trajectories['observations'] = obs_traj_dict_list + trajectories["observations"] = obs_traj_dict_list self.obs_keys = list(_obs_traj_dict.keys()) # Pre-process the actions - for i in range(len(trajectories['actions'])): - trajectories['actions'][i] = torch.Tensor(trajectories['actions'][i]) - print('Obs/action pre-processing is done, start to pre-compute the slice indices...') + for i in range(len(trajectories["actions"])): + trajectories["actions"][i] = torch.Tensor(trajectories["actions"][i]) + print( + "Obs/action pre-processing is done, start to pre-compute the slice indices..." + ) # Pre-compute all possible (traj_idx, start, end) tuples, this is very specific to Diffusion Policy - if 'delta_pos' in args.control_mode or args.control_mode == 'base_pd_joint_vel_arm_pd_joint_vel': - self.pad_action_arm = torch.zeros((trajectories['actions'][0].shape[1]-1,)) + if ( + "delta_pos" in args.control_mode + or args.control_mode == "base_pd_joint_vel_arm_pd_joint_vel" + ): + self.pad_action_arm = torch.zeros( + (trajectories["actions"][0].shape[1] - 1,) + ) # to make the arm stay still, we pad the action with 0 in 'delta_pos' control mode # gripper action needs to be copied from the last action else: - raise NotImplementedError(f'Control Mode {args.control_mode} not supported') - self.obs_horizon, self.pred_horizon = obs_horizon, pred_horizon = args.obs_horizon, args.pred_horizon + raise NotImplementedError(f"Control Mode {args.control_mode} not supported") + self.obs_horizon, self.pred_horizon = obs_horizon, pred_horizon = ( + args.obs_horizon, + args.pred_horizon, + ) self.slices = [] - num_traj = len(trajectories['actions']) + num_traj = len(trajectories["actions"]) total_transitions = 0 for traj_idx in range(num_traj): - L = trajectories['actions'][traj_idx].shape[0] - assert trajectories['observations'][traj_idx]['state'].shape[0] == L + 1 + L = trajectories["actions"][traj_idx].shape[0] + assert trajectories["observations"][traj_idx]["state"].shape[0] == L + 1 total_transitions += L # |o|o| observations: 2 @@ -166,38 +194,46 @@ def __init__(self, data_path, obs_process_fn, obs_space, num_traj): # Pad after the trajectory, so all the observations are utilized in training # Note that in the original code, pad_after = act_horizon - 1, but I think this is not the best choice self.slices += [ - (traj_idx, start, start + pred_horizon) for start in range(-pad_before, L - pred_horizon + pad_after) + (traj_idx, start, start + pred_horizon) + for start in range(-pad_before, L - pred_horizon + pad_after) ] # slice indices follow convention [start, end) - - print(f"Total transitions: {total_transitions}, Total obs sequences: {len(self.slices)}") + + print( + f"Total transitions: {total_transitions}, Total obs sequences: {len(self.slices)}" + ) self.trajectories = trajectories def __getitem__(self, index): traj_idx, start, end = self.slices[index] - L, act_dim = self.trajectories['actions'][traj_idx].shape + L, act_dim = self.trajectories["actions"][traj_idx].shape - obs_traj = self.trajectories['observations'][traj_idx] + obs_traj = self.trajectories["observations"][traj_idx] obs_seq = {} for k, v in obs_traj.items(): - obs_seq[k] = v[max(0, start):start+self.obs_horizon] # start+self.obs_horizon is at least 1 - if start < 0: # pad before the trajectory - pad_obs_seq = torch.stack([obs_seq[k][0]]*abs(start), dim=0) + obs_seq[k] = v[ + max(0, start) : start + self.obs_horizon + ] # start+self.obs_horizon is at least 1 + if start < 0: # pad before the trajectory + pad_obs_seq = torch.stack([obs_seq[k][0]] * abs(start), dim=0) obs_seq[k] = torch.cat((pad_obs_seq, obs_seq[k]), dim=0) # don't need to pad obs after the trajectory, see the above char drawing - act_seq = self.trajectories['actions'][traj_idx][max(0, start):end] - if start < 0: # pad before the trajectory + act_seq = self.trajectories["actions"][traj_idx][max(0, start) : end] + if start < 0: # pad before the trajectory act_seq = torch.cat([act_seq[0].repeat(-start, 1), act_seq], dim=0) - if end > L: # pad after the trajectory - gripper_action = act_seq[-1, -1] # assume gripper is with pos controller + if end > L: # pad after the trajectory + gripper_action = act_seq[-1, -1] # assume gripper is with pos controller pad_action = torch.cat((self.pad_action_arm, gripper_action[None]), dim=0) - act_seq = torch.cat([act_seq, pad_action.repeat(end-L, 1)], dim=0) + act_seq = torch.cat([act_seq, pad_action.repeat(end - L, 1)], dim=0) # making the robot (arm and gripper) stay still - assert obs_seq['state'].shape[0] == self.obs_horizon and act_seq.shape[0] == self.pred_horizon + assert ( + obs_seq["state"].shape[0] == self.obs_horizon + and act_seq.shape[0] == self.pred_horizon + ) return { - 'observations': obs_seq, - 'actions': act_seq, + "observations": obs_seq, + "actions": act_seq, } def __len__(self): @@ -210,18 +246,25 @@ def __init__(self, env, args): self.obs_horizon = args.obs_horizon self.act_horizon = args.act_horizon self.pred_horizon = args.pred_horizon - assert len(env.single_observation_space['state'].shape) == 2 # (obs_horizon, obs_dim) - assert len(env.single_action_space.shape) == 1 # (act_dim, ) - assert (env.single_action_space.high == 1).all() and (env.single_action_space.low == -1).all() + assert ( + len(env.single_observation_space["state"].shape) == 2 + ) # (obs_horizon, obs_dim) + assert len(env.single_action_space.shape) == 1 # (act_dim, ) + assert (env.single_action_space.high == 1).all() and ( + env.single_action_space.low == -1 + ).all() # denoising results will be clipped to [-1,1], so the action should be in [-1,1] as well self.act_dim = env.single_action_space.shape[0] - obs_state_dim = env.single_observation_space['state'].shape[1] - _, H, W, C = envs.single_observation_space['rgb'].shape + obs_state_dim = env.single_observation_space["state"].shape[1] + _, H, W, C = envs.single_observation_space["rgb"].shape visual_feature_dim = 256 - self.visual_encoder = PlainConv(in_channels=int(C/3*4), out_dim=visual_feature_dim, pool_feature_map=True) + in_c = int(C / 3 * 4) if args.depth else C + self.visual_encoder = PlainConv( + in_channels=in_c, out_dim=visual_feature_dim, pool_feature_map=True + ) self.noise_pred_net = ConditionalUnet1D( - input_dim=self.act_dim, # act_horizon is not used (U-Net doesn't care) + input_dim=self.act_dim, # act_horizon is not used (U-Net doesn't care) global_cond_dim=self.obs_horizon * (visual_feature_dim + obs_state_dim), diffusion_step_embed_dim=args.diffusion_step_embed_dim, down_dims=args.unet_dims, @@ -230,50 +273,57 @@ def __init__(self, env, args): self.num_diffusion_iters = 100 self.noise_scheduler = DDPMScheduler( num_train_timesteps=self.num_diffusion_iters, - beta_schedule='squaredcos_cap_v2', # has big impact on performance, try not to change - clip_sample=True, # clip output to [-1,1] to improve stability - prediction_type='epsilon' # predict noise (instead of denoised action) + beta_schedule="squaredcos_cap_v2", # has big impact on performance, try not to change + clip_sample=True, # clip output to [-1,1] to improve stability + prediction_type="epsilon", # predict noise (instead of denoised action) ) - def encode_obs(self, obs_seq, eval_mode): - rgb = obs_seq['rgb'].float() / 255.0 # (B, obs_horizon, 3*k, H, W) - depth = obs_seq['depth'].float() # (B, obs_horizon, 1*k, H, W) - img_seq = torch.cat([rgb, depth], dim=2) # (B, obs_horizon, C, H, W), C=4*k - img_seq = img_seq.flatten(end_dim=1) # (B*obs_horizon, C, H, W) - if hasattr(self, 'aug') and not eval_mode: - img_seq = self.aug(img_seq) # (B*obs_horizon, C, H, W) - visual_feature = self.visual_encoder(img_seq) # (B*obs_horizon, D) - visual_feature = visual_feature.reshape(rgb.shape[0], self.obs_horizon, visual_feature.shape[1]) # (B, obs_horizon, D) - feature = torch.cat((visual_feature, obs_seq['state']), dim=-1) # (B, obs_horizon, D+obs_state_dim) - return feature.flatten(start_dim=1) # (B, obs_horizon * (D+obs_state_dim)) - + rgb = obs_seq["rgb"].float() / 255.0 # (B, obs_horizon, 3*k, H, W) + if args.depth: + depth = obs_seq["depth"].float() # (B, obs_horizon, 1*k, H, W) + img_seq = torch.cat([rgb, depth], dim=2) # (B, obs_horizon, C, H, W), C=4*k + else: + img_seq = rgb + img_seq = img_seq.flatten(end_dim=1) # (B*obs_horizon, C, H, W) + if hasattr(self, "aug") and not eval_mode: + img_seq = self.aug(img_seq) # (B*obs_horizon, C, H, W) + visual_feature = self.visual_encoder(img_seq) # (B*obs_horizon, D) + visual_feature = visual_feature.reshape( + rgb.shape[0], self.obs_horizon, visual_feature.shape[1] + ) # (B, obs_horizon, D) + feature = torch.cat( + (visual_feature, obs_seq["state"]), dim=-1 + ) # (B, obs_horizon, D+obs_state_dim) + return feature.flatten(start_dim=1) # (B, obs_horizon * (D+obs_state_dim)) + def compute_loss(self, obs_seq, action_seq): - B = obs_seq['state'].shape[0] + B = obs_seq["state"].shape[0] # observation as FiLM conditioning - obs_cond = self.encode_obs(obs_seq, eval_mode=False) # (B, obs_horizon * obs_dim) + obs_cond = self.encode_obs( + obs_seq, eval_mode=False + ) # (B, obs_horizon * obs_dim) # sample noise to add to actions noise = torch.randn((B, self.pred_horizon, self.act_dim), device=device) # sample a diffusion iteration for each data point timesteps = torch.randint( - 0, self.noise_scheduler.config.num_train_timesteps, - (B,), device=device + 0, self.noise_scheduler.config.num_train_timesteps, (B,), device=device ).long() # add noise to the clean images(actions) according to the noise magnitude at each diffusion iteration # (this is the forward diffusion process) - noisy_action_seq = self.noise_scheduler.add_noise( - action_seq, noise, timesteps) - + noisy_action_seq = self.noise_scheduler.add_noise(action_seq, noise, timesteps) + # predict the noise residual noise_pred = self.noise_pred_net( - noisy_action_seq, timesteps, global_cond=obs_cond) + noisy_action_seq, timesteps, global_cond=obs_cond + ) return F.mse_loss(noise_pred, noise) - + def get_action(self, obs_seq): # init scheduler # self.noise_scheduler.set_timesteps(self.num_diffusion_iters) @@ -282,15 +332,20 @@ def get_action(self, obs_seq): # if we use DDPM, and inference_diffusion_steps == train_diffusion_steps, then we can skip this # obs_seq['state']: (B, obs_horizon, obs_state_dim) - B = obs_seq['state'].shape[0] + B = obs_seq["state"].shape[0] with torch.no_grad(): - obs_seq['rgb'] = obs_seq['rgb'].permute(0,1,4,2,3) - obs_seq['depth'] = obs_seq['depth'].permute(0,1,4,2,3) + obs_seq["rgb"] = obs_seq["rgb"].permute(0, 1, 4, 2, 3) + if args.depth: + obs_seq["depth"] = obs_seq["depth"].permute(0, 1, 4, 2, 3) / 1024 - obs_cond = self.encode_obs(obs_seq, eval_mode=True) # (B, obs_horizon * obs_dim) + obs_cond = self.encode_obs( + obs_seq, eval_mode=True + ) # (B, obs_horizon * obs_dim) # initialize action from Guassian noise - noisy_action_seq = torch.randn((B, self.pred_horizon, self.act_dim), device=obs_seq['state'].device) + noisy_action_seq = torch.randn( + (B, self.pred_horizon, self.act_dim), device=obs_seq["state"].device + ) for k in self.noise_scheduler.timesteps: # predict noise @@ -310,7 +365,8 @@ def get_action(self, obs_seq): # only take act_horizon number of actions start = self.obs_horizon - 1 end = start + self.act_horizon - return noisy_action_seq[:, start:end] # (B, act_horizon, act_dim) + return noisy_action_seq[:, start:end] # (B, act_horizon, act_dim) + if __name__ == "__main__": args = tyro.cli(Args) @@ -320,19 +376,22 @@ def get_action(self, obs_seq): run_name = f"{args.env_id}__{args.exp_name}__{args.seed}__{int(time.time())}" else: run_name = args.exp_name - - if args.demo_path.endswith('.h5'): + + if args.demo_path.endswith(".h5"): import json - json_file = args.demo_path[:-2] + 'json' - with open(json_file, 'r') as f: + + json_file = args.demo_path[:-2] + "json" + with open(json_file, "r") as f: demo_info = json.load(f) - if 'control_mode' in demo_info['env_info']['env_kwargs']: - control_mode = demo_info['env_info']['env_kwargs']['control_mode'] - elif 'control_mode' in demo_info['episodes'][0]: - control_mode = demo_info['episodes'][0]['control_mode'] + if "control_mode" in demo_info["env_info"]["env_kwargs"]: + control_mode = demo_info["env_info"]["env_kwargs"]["control_mode"] + elif "control_mode" in demo_info["episodes"][0]: + control_mode = demo_info["episodes"][0]["control_mode"] else: - raise Exception('Control mode not found in json') - assert control_mode == args.control_mode, f"Control mode mismatched. Dataset has control mode {control_mode}, but args has control mode {args.control_mode}" + raise Exception("Control mode not found in json") + assert ( + control_mode == args.control_mode + ), f"Control mode mismatched. Dataset has control mode {control_mode}, but args has control mode {args.control_mode}" assert args.obs_horizon + args.act_horizon - 1 <= args.pred_horizon assert args.obs_horizon >= 1 and args.act_horizon >= 1 and args.pred_horizon >= 1 @@ -343,15 +402,34 @@ def get_action(self, obs_seq): device = torch.device("cuda" if torch.cuda.is_available() and args.cuda else "cpu") - env_kwargs = dict(control_mode=args.control_mode, reward_mode="sparse", obs_mode="rgbd", render_mode="rgb_array") + env_kwargs = dict( + control_mode=args.control_mode, + reward_mode="sparse", + obs_mode="rgbd", + render_mode="rgb_array", + ) if args.max_episode_steps is not None: env_kwargs["max_episode_steps"] = args.max_episode_steps other_kwargs = dict(obs_horizon=args.obs_horizon) - envs = make_eval_envs(args.env_id, args.num_eval_envs, args.sim_backend, env_kwargs, other_kwargs, video_dir=f'runs/{run_name}/videos' if args.capture_video else None, wrappers=[partial(FlattenRGBDObservationWrapper, sep_depth=True)]) + envs = make_eval_envs( + args.env_id, + args.num_eval_envs, + args.sim_backend, + env_kwargs, + other_kwargs, + video_dir=f"runs/{run_name}/videos" if args.capture_video else None, + wrappers=[partial(FlattenRGBDObservationWrapper, sep_depth=True)], + ) if args.track: import wandb + config = vars(args) - config["eval_env_cfg"] = dict(**env_kwargs, num_envs=args.num_eval_envs, env_id=args.env_id, env_horizon=gym_utils.find_max_episode_steps_value(envs)) + config["eval_env_cfg"] = dict( + **env_kwargs, + num_envs=args.num_eval_envs, + env_id=args.env_id, + env_horizon=gym_utils.find_max_episode_steps_value(envs), + ) wandb.init( project=args.wandb_project_name, entity=args.wandb_entity, @@ -360,22 +438,29 @@ def get_action(self, obs_seq): name=run_name, save_code=True, group="DiffusionPolicy", - tags=["diffusion_policy"] + tags=["diffusion_policy"], ) writer = SummaryWriter(f"runs/{run_name}") writer.add_text( "hyperparameters", - "|param|value|\n|-|-|\n%s" % ("\n".join([f"|{key}|{value}|" for key, value in vars(args).items()])), + "|param|value|\n|-|-|\n%s" + % ("\n".join([f"|{key}|{value}|" for key, value in vars(args).items()])), ) obs_process_fn = partial( - convert_obs, - concat_fn=partial(np.concatenate, axis=-1), - transpose_fn=partial(np.transpose, axes=(0, 3, 1, 2)), # (B, H, W, C) -> (B, C, H, W) + convert_obs, + concat_fn=partial(np.concatenate, axis=-1), + transpose_fn=partial( + np.transpose, axes=(0, 3, 1, 2) + ), # (B, H, W, C) -> (B, C, H, W) state_obs_extractor=build_state_obs_extractor(args.env_id), ) - tmp_env = gym.make(args.env_id, obs_mode='rgbd'); orignal_obs_space = tmp_env.observation_space; tmp_env.close() - dataset = SmallDemoDataset_DiffusionPolicy(args.demo_path, obs_process_fn, orignal_obs_space, args.num_demos) + tmp_env = gym.make(args.env_id, obs_mode="rgbd") + orignal_obs_space = tmp_env.observation_space + tmp_env.close() + dataset = SmallDemoDataset_DiffusionPolicy( + args.demo_path, obs_process_fn, orignal_obs_space, args.num_demos + ) sampler = RandomSampler(dataset, replacement=False) batch_sampler = BatchSampler(sampler, batch_size=args.batch_size, drop_last=True) batch_sampler = IterationBasedBatchSampler(batch_sampler, args.total_iters) @@ -401,12 +486,13 @@ def get_action(self, obs_seq): agent = Agent(envs, args).to(device) - optimizer = optim.AdamW(params=agent.parameters(), - lr=args.lr, betas=(0.95, 0.999), weight_decay=1e-6) + optimizer = optim.AdamW( + params=agent.parameters(), lr=args.lr, betas=(0.95, 0.999), weight_decay=1e-6 + ) # Cosine LR schedule with linear warmup lr_scheduler = get_scheduler( - name='cosine', + name="cosine", optimizer=optimizer, num_warmup_steps=500, num_training_steps=args.total_iters, @@ -422,7 +508,7 @@ def get_action(self, obs_seq): # Training begins. # ---------------------------------------------------------------------------- # agent.train() - + best_eval_metrics = defaultdict(float) timings = defaultdict(float) @@ -431,28 +517,32 @@ def get_action(self, obs_seq): # data_batch = {k: v.cuda(non_blocking=True) for k, v in data_batch.items()} # forward and compute loss - obs_batch_dict = data_batch['observations'] - obs_batch_dict = {k: v.cuda(non_blocking=True) for k, v in obs_batch_dict.items()} - act_batch = data_batch['actions'].cuda(non_blocking=True) + obs_batch_dict = data_batch["observations"] + obs_batch_dict = { + k: v.cuda(non_blocking=True) for k, v in obs_batch_dict.items() + } + act_batch = data_batch["actions"].cuda(non_blocking=True) # forward and compute loss total_loss = agent.compute_loss( - obs_seq=obs_batch_dict, # obs_batch_dict['state'] is (B, L, obs_dim) - action_seq=act_batch, # (B, L, act_dim) + obs_seq=obs_batch_dict, # obs_batch_dict['state'] is (B, L, obs_dim) + action_seq=act_batch, # (B, L, act_dim) ) # backward optimizer.zero_grad() total_loss.backward() optimizer.step() - lr_scheduler.step() # step lr scheduler every batch, this is different from standard pytorch behavior + lr_scheduler.step() # step lr scheduler every batch, this is different from standard pytorch behavior last_tick = time.time() ema.step(agent.parameters()) if iteration % args.log_freq == 0: print(f"Iteration {iteration}, loss: {total_loss.item()}") - writer.add_scalar("charts/learning_rate", optimizer.param_groups[0]["lr"], iteration) + writer.add_scalar( + "charts/learning_rate", optimizer.param_groups[0]["lr"], iteration + ) writer.add_scalar("losses/total_loss", total_loss.item(), iteration) for k, v in timings.items(): writer.add_scalar(f"time/{k}", v, iteration) @@ -463,7 +553,9 @@ def get_action(self, obs_seq): ema.copy_to(ema_agent.parameters()) # def sample_fn(obs): - eval_metrics = evaluate(args.num_eval_episodes, ema_agent, envs, device, args.sim_backend) + eval_metrics = evaluate( + args.num_eval_episodes, ema_agent, envs, device, args.sim_backend + ) timings["eval"] += time.time() - last_tick print(f"Evaluated {len(eval_metrics['success_at_end'])} episodes") @@ -477,10 +569,12 @@ def get_action(self, obs_seq): if k in eval_metrics and eval_metrics[k] > best_eval_metrics[k]: best_eval_metrics[k] = eval_metrics[k] save_ckpt(run_name, f"best_eval_{k}") - print(f'New best {k}_rate: {eval_metrics[k]:.4f}. Saving checkpoint.') - + print( + f"New best {k}_rate: {eval_metrics[k]:.4f}. Saving checkpoint." + ) + # Checkpoint if args.save_freq is not None and iteration % args.save_freq == 0: save_ckpt(run_name, str(iteration)) envs.close() - writer.close() \ No newline at end of file + writer.close() diff --git a/mani_skill/envs/tasks/drawing/draw_triangle.py b/mani_skill/envs/tasks/drawing/draw_triangle.py index 74e6a63bd..38b3fc365 100644 --- a/mani_skill/envs/tasks/drawing/draw_triangle.py +++ b/mani_skill/envs/tasks/drawing/draw_triangle.py @@ -230,7 +230,9 @@ def _initialize_episode(self, env_idx: torch.Tensor, options: dict): self.vertices = torch.from_numpy( np.tile(self.original_verts, (b, 1, 1)) - ).to(self.device) # b, 3, 3 + ).to( + self.device + ) # b, 3, 3 self.vertices = ( mats.double() @ self.vertices.transpose(-1, -2).double() ).transpose( diff --git a/mani_skill/examples/motionplanning/panda_stick/motionplanner.py b/mani_skill/examples/motionplanning/panda_stick/motionplanner.py index 097ad1748..5a423884b 100644 --- a/mani_skill/examples/motionplanning/panda_stick/motionplanner.py +++ b/mani_skill/examples/motionplanning/panda_stick/motionplanner.py @@ -2,12 +2,12 @@ import numpy as np import sapien import trimesh - from mani_skill.agents.base_agent import BaseAgent from mani_skill.envs.sapien_env import BaseEnv from mani_skill.envs.scene import ManiSkillScene from mani_skill.utils.structs.pose import to_sapien_pose + class PandaStickMotionPlanningSolver: def __init__( self, @@ -113,7 +113,7 @@ def move_to_pose_with_screw( ): pose = to_sapien_pose(pose) # try screw two times before giving up - pose = sapien.Pose(p=pose.p , q=pose.q) + pose = sapien.Pose(p=pose.p, q=pose.q) result = self.planner.plan_screw( np.concatenate([pose.p, pose.q]), self.robot.get_qpos().cpu().numpy()[0], From 46c3b227650327df68b8b4034986efa576bb0148 Mon Sep 17 00:00:00 2001 From: Arnav G <73305591+arnavg115@users.noreply.github.com> Date: Mon, 21 Oct 2024 19:58:27 +0000 Subject: [PATCH 09/14] Removed unused code --- .../diffusion_policy/utils.py | 30 ------------------- 1 file changed, 30 deletions(-) diff --git a/examples/baselines/diffusion_policy/diffusion_policy/utils.py b/examples/baselines/diffusion_policy/diffusion_policy/utils.py index bc270e19c..e3398ccee 100644 --- a/examples/baselines/diffusion_policy/diffusion_policy/utils.py +++ b/examples/baselines/diffusion_policy/diffusion_policy/utils.py @@ -207,33 +207,3 @@ def build_state_obs_extractor(env_id): else: raise NotImplementedError(f"Please tune state obs by yourself") - -class RandomShiftsAug(nn.Module): - """ - from https://github.com/facebookresearch/drqv2/blob/main/drqv2.py - """ - - def __init__(self, pad): - super().__init__() - self.pad = pad - - def forward(self, x): - n, c, h, w = x.size() - assert h == w - padding = tuple([self.pad] * 4) - x = F.pad(x, padding, "replicate") - eps = 1.0 / (h + 2 * self.pad) - arange = torch.linspace( - -1.0 + eps, 1.0 - eps, h + 2 * self.pad, device=x.device, dtype=x.dtype - )[:h] - arange = arange.unsqueeze(0).repeat(h, 1).unsqueeze(2) - base_grid = torch.cat([arange, arange.transpose(1, 0)], dim=2) - base_grid = base_grid.unsqueeze(0).repeat(n, 1, 1, 1) - - shift = torch.randint( - 0, 2 * self.pad + 1, size=(n, 1, 1, 2), device=x.device, dtype=x.dtype - ) - shift *= 2.0 / (h + 2 * self.pad) - - grid = base_grid + shift - return F.grid_sample(x, grid, padding_mode="zeros", align_corners=False) From 4f598bd9947bb76a10e81cac018ede4f930d3b6f Mon Sep 17 00:00:00 2001 From: Arnav G <73305591+arnavg115@users.noreply.github.com> Date: Tue, 22 Oct 2024 20:19:25 +0000 Subject: [PATCH 10/14] Made requested fixes, made bugfix to frame stack wrapper --- .../diffusion_policy/make_env.py | 17 +++++++---------- mani_skill/envs/tasks/drawing/draw_triangle.py | 12 ++++++------ .../panda_stick/solutions/draw_triangle.py | 17 +++++++++++++++-- mani_skill/utils/wrappers/flatten.py | 1 - mani_skill/utils/wrappers/frame_stack.py | 11 +++++++++++ 5 files changed, 39 insertions(+), 19 deletions(-) diff --git a/examples/baselines/diffusion_policy/diffusion_policy/make_env.py b/examples/baselines/diffusion_policy/diffusion_policy/make_env.py index 0a210d79f..d18f5270c 100644 --- a/examples/baselines/diffusion_policy/diffusion_policy/make_env.py +++ b/examples/baselines/diffusion_policy/diffusion_policy/make_env.py @@ -12,7 +12,7 @@ from mani_skill.vector.wrappers.gymnasium import ManiSkillVectorEnv -class DictFrameStack(GymFrameStack): +class DictFrameStack(FrameStack): def __init__( self, env: gym.Env, @@ -26,15 +26,11 @@ def __init__( num_stack (int): The number of frames to stack lz4_compress (bool): Use lz4 to compress the frames internally """ - gym.utils.RecordConstructorArgs.__init__( - self, num_stack=num_stack, lz4_compress=lz4_compress - ) - gym.ObservationWrapper.__init__(self, env) - - self.num_stack = num_stack - self.lz4_compress = lz4_compress - - self.frames = deque(maxlen=num_stack) + # gym.utils.RecordConstructorArgs.__init__( + # self, num_stack=num_stack, lz4_compress=lz4_compress + # ) + # gym.ObservationWrapper.__init__(self, env) + super().__init__(env, num_stack, lz4_compress) new_observation_space = gym.spaces.Dict() for k, v in self.observation_space.items(): @@ -43,6 +39,7 @@ def __init__( new_observation_space[k] = Box(low=low, high=high, dtype=v.dtype) self.observation_space = new_observation_space + def observation(self, observation): """Converts the wrappers current frames to lazy frames. diff --git a/mani_skill/envs/tasks/drawing/draw_triangle.py b/mani_skill/envs/tasks/drawing/draw_triangle.py index 38b3fc365..c7b35b753 100644 --- a/mani_skill/envs/tasks/drawing/draw_triangle.py +++ b/mani_skill/envs/tasks/drawing/draw_triangle.py @@ -28,7 +28,7 @@ class DrawTriangle(BaseEnv): to create their own drawing type tasks. """ - MAX_DOTS = 1010 + MAX_DOTS = 300 """ The total "ink" available to use and draw with before you need to call env.reset. NOTE that on GPU simulation it is not recommended to have a very high value for this as it can slow down rendering when too many objects are being rendered in many scenes. @@ -102,26 +102,26 @@ def create_goal_triangle(name="tri", base_color=None): box1_half_w = 0.3 / 2 box1_half_h = 0.01 / 2 - half_thickness = 0.04 / 2 + half_thickness = 0.001 / 2 radius = (box1_half_w) / math.sqrt(3) theta = np.pi / 2 # define centers and compute verticies, might need to adjust how centers are calculated or add a theta arg for variation - c1 = np.array([radius * math.cos(theta), radius * math.sin(theta), 0.001]) + c1 = np.array([radius * math.cos(theta), radius * math.sin(theta), 0.01]) c2 = np.array( [ radius * math.cos(theta + (2 * np.pi / 3)), radius * math.sin(theta + (2 * np.pi / 3)), - 0.001, + 0.01, ] ) c3 = np.array( [ radius * math.cos((theta + (4 * np.pi / 3))), radius * math.sin(theta + (4 * np.pi / 3)), - 0.001, + 0.01, ] ) self.original_verts = np.array( @@ -212,7 +212,7 @@ def create_goal_triangle(name="tri", base_color=None): self.dots.append(actor) self.goal_tri = create_goal_triangle( name="goal_tri", - base_color=np.array([50, 50, 50, 200]) / 255, + base_color=np.array([50, 50, 50, 1]) / 255, ) def _initialize_episode(self, env_idx: torch.Tensor, options: dict): diff --git a/mani_skill/examples/motionplanning/panda_stick/solutions/draw_triangle.py b/mani_skill/examples/motionplanning/panda_stick/solutions/draw_triangle.py index fbabb3f83..18cbdc594 100644 --- a/mani_skill/examples/motionplanning/panda_stick/solutions/draw_triangle.py +++ b/mani_skill/examples/motionplanning/panda_stick/solutions/draw_triangle.py @@ -1,9 +1,7 @@ -import numpy as np import sapien from mani_skill.envs.tasks import PushCubeEnv from mani_skill.examples.motionplanning.panda_stick.motionplanner import \ PandaStickMotionPlanningSolver -from PIL import Image def solve(env: PushCubeEnv, seed=None, debug=False, vis=False): @@ -15,24 +13,39 @@ def solve(env: PushCubeEnv, seed=None, debug=False, vis=False): base_pose=env.unwrapped.agent.robot.pose, visualize_target_grasp_pose=vis, print_env_info=False, + joint_vel_limits = 0.3 ) FINGER_LENGTH = 0.025 env = env.unwrapped rot = list(env.agent.tcp.pose.get_q()[0].cpu().numpy()) + + # -------------------------------------------------------------------------- # + # Move to first vertex + # -------------------------------------------------------------------------- # + reach_pose = sapien.Pose(p=list(env.vertices[0, 0].numpy()), q=rot) res = planner.move_to_pose_with_screw(reach_pose) + # -------------------------------------------------------------------------- # # Move to second vertex # -------------------------------------------------------------------------- # reach_pose = sapien.Pose(p=list(env.vertices[0, 1]), q=rot) res = planner.move_to_pose_with_screw(reach_pose) + + # -------------------------------------------------------------------------- # + # Move to third vertex + # -------------------------------------------------------------------------- # reach_pose = sapien.Pose(p=list(env.vertices[0, 2]), q=rot) res = planner.move_to_pose_with_screw(reach_pose) + # -------------------------------------------------------------------------- # + # Move back to first vertex + # -------------------------------------------------------------------------- # + reach_pose = sapien.Pose(p=list(env.vertices[0, 0]), q=rot) res = planner.move_to_pose_with_screw(reach_pose) diff --git a/mani_skill/utils/wrappers/flatten.py b/mani_skill/utils/wrappers/flatten.py index 126dcbe82..989b95125 100644 --- a/mani_skill/utils/wrappers/flatten.py +++ b/mani_skill/utils/wrappers/flatten.py @@ -51,7 +51,6 @@ def observation(self, observation: Dict): if self.include_rgb and not self.include_depth: ret["rgb"] = images elif self.include_rgb and self.include_depth: - # todo: might not be the best way or the right place to perform this if self.sep_depth: ret["rgb"] = images[...,:-1] ret["depth"] = images[...,-1:] diff --git a/mani_skill/utils/wrappers/frame_stack.py b/mani_skill/utils/wrappers/frame_stack.py index 3a3e5c4d2..d8242abca 100644 --- a/mani_skill/utils/wrappers/frame_stack.py +++ b/mani_skill/utils/wrappers/frame_stack.py @@ -76,6 +76,15 @@ def __getitem__(self, int_or_slice: Union[int, slice]): [self._check_decompress(f) for f in self._frames[int_or_slice]], axis=0 ) + def _check_decompress(self, frame): + if self.lz4_compress: + from lz4.block import decompress + + return np.frombuffer(decompress(frame), dtype=self.dtype).reshape( + self.frame_shape + ) + return frame + def __eq__(self, other): """Checks that the current frames are equal to the other object.""" return self.__array__() == other @@ -98,6 +107,7 @@ def __init__( self, env: gym.Env, num_stack: int, + lz4_compress: bool = False ): """Observation wrapper that stacks the observations in a rolling manner. @@ -110,6 +120,7 @@ def __init__( self.num_stack = num_stack self.frames = deque(maxlen=num_stack) + self.lz4_compress = lz4_compress [self.frames.append(self.base_env._init_raw_obs) for _ in range(self.num_stack)] new_obs = self.observation(self.base_env._init_raw_obs) self.base_env.update_obs_space(new_obs) From 7a52287e73eb008540355d4a246dae254b775e4c Mon Sep 17 00:00:00 2001 From: Arnav G <73305591+arnavg115@users.noreply.github.com> Date: Tue, 22 Oct 2024 22:32:19 +0000 Subject: [PATCH 11/14] Edited make_env and frame_stack --- .../baselines/diffusion_policy/diffusion_policy/make_env.py | 3 +-- mani_skill/utils/wrappers/frame_stack.py | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/examples/baselines/diffusion_policy/diffusion_policy/make_env.py b/examples/baselines/diffusion_policy/diffusion_policy/make_env.py index d18f5270c..f8543185a 100644 --- a/examples/baselines/diffusion_policy/diffusion_policy/make_env.py +++ b/examples/baselines/diffusion_policy/diffusion_policy/make_env.py @@ -5,12 +5,11 @@ import mani_skill.envs import numpy as np from gymnasium.spaces import Box -from gymnasium.wrappers.frame_stack import FrameStack as GymFrameStack from gymnasium.wrappers.frame_stack import LazyFrames from mani_skill.utils import gym_utils from mani_skill.utils.wrappers import CPUGymWrapper, FrameStack, RecordEpisode from mani_skill.vector.wrappers.gymnasium import ManiSkillVectorEnv - +# from mani_skill.utils.wrappers.frame_stack import LazyFrames class DictFrameStack(FrameStack): def __init__( diff --git a/mani_skill/utils/wrappers/frame_stack.py b/mani_skill/utils/wrappers/frame_stack.py index d8242abca..fb0aaf9ce 100644 --- a/mani_skill/utils/wrappers/frame_stack.py +++ b/mani_skill/utils/wrappers/frame_stack.py @@ -79,8 +79,7 @@ def __getitem__(self, int_or_slice: Union[int, slice]): def _check_decompress(self, frame): if self.lz4_compress: from lz4.block import decompress - - return np.frombuffer(decompress(frame), dtype=self.dtype).reshape( + return torch.frombuffer(decompress(frame), dtype=self.dtype).reshape( self.frame_shape ) return frame From 7adcd5dee72e2e0df653e49318b2490bc25adb71 Mon Sep 17 00:00:00 2001 From: Arnav G <73305591+arnavg115@users.noreply.github.com> Date: Thu, 24 Oct 2024 19:17:01 +0000 Subject: [PATCH 12/14] Added state obs to draw triangle --- examples/baselines/diffusion_policy/examples.sh | 14 +++++++++++++- mani_skill/envs/tasks/drawing/draw_triangle.py | 14 ++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/examples/baselines/diffusion_policy/examples.sh b/examples/baselines/diffusion_policy/examples.sh index d59255b05..5739b2851 100644 --- a/examples/baselines/diffusion_policy/examples.sh +++ b/examples/baselines/diffusion_policy/examples.sh @@ -44,4 +44,16 @@ python -m mani_skill.trajectory.replay_trajectory \ python train.py --env-id PegInsertionSide-v1 \ --demo-path ~/.maniskill/demos/PegInsertionSide-v1/motionplanning/trajectory.state.pd_ee_delta_pose.cpu.h5 \ --control-mode "pd_ee_delta_pose" --sim-backend "cpu" --num-demos 100 --max_episode_steps 300 \ - --total_iters 300000 \ No newline at end of file + --total_iters 300000 + +# DrawTriangle-v1 +python -m mani_skill.trajectory.replay_trajectory \ + --traj-path ~/.maniskill/demos/DrawTriangle-v1/motionplanning/trajectory.h5 \ + --use-first-env-state -c pd_ee_delta_pose -o state \ + --save-traj --num-procs 10 -b cpu + +# RGBD based observations +python train_rgbd.py --env-id DrawTriangle-v1 \ + --demo-path ~/.maniskill/demos/DrawTriangle-v1/motionplanning/trajectory.rgbd.pd_ee_delta_pose.cpu.h5 + --control-mode "pd_ee_delta_pose" --sim-backend "cpu" --num-demos 100 --max_episode_steps 300 \ + --total-iters 300000 \ No newline at end of file diff --git a/mani_skill/envs/tasks/drawing/draw_triangle.py b/mani_skill/envs/tasks/drawing/draw_triangle.py index c7b35b753..9547e561e 100644 --- a/mani_skill/envs/tasks/drawing/draw_triangle.py +++ b/mani_skill/envs/tasks/drawing/draw_triangle.py @@ -212,7 +212,7 @@ def create_goal_triangle(name="tri", base_color=None): self.dots.append(actor) self.goal_tri = create_goal_triangle( name="goal_tri", - base_color=np.array([50, 50, 50, 1]) / 255, + base_color=np.array([10, 10, 10,255]) / 255, ) def _initialize_episode(self, env_idx: torch.Tensor, options: dict): @@ -293,10 +293,20 @@ def evaluate(self): return {"success": out} def _get_obs_extra(self, info: Dict): - return dict( + obs = dict( tcp_pose=self.agent.tcp.pose.raw_pose, ) + if "state" in self.obs_mode: + obs.update( + goal_pose = self.goal_tri.pose.raw_pose, + tcp_to_verts_pos = self.vertices - self.agent.tcp.pose.p.unsqueeze(1), + goal_pos=self.goal_tri.pose.p, + vertices = self.vertices + ) + + return obs + def generate_triangle_with_points(self, n, vertices): batch_size = vertices.shape[0] From a209f59a7c61fa900fc7db4ac47be0b7aa8f2b23 Mon Sep 17 00:00:00 2001 From: "Arnav G." <73305591+arnavg115@users.noreply.github.com> Date: Thu, 24 Oct 2024 12:21:12 -0700 Subject: [PATCH 13/14] Update draw_triangle max steps --- mani_skill/envs/tasks/drawing/draw_triangle.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mani_skill/envs/tasks/drawing/draw_triangle.py b/mani_skill/envs/tasks/drawing/draw_triangle.py index 9547e561e..4353dddf6 100644 --- a/mani_skill/envs/tasks/drawing/draw_triangle.py +++ b/mani_skill/envs/tasks/drawing/draw_triangle.py @@ -21,7 +21,7 @@ from transforms3d.quaternions import quat2mat -@register_env("DrawTriangle-v1", max_episode_steps=1000) +@register_env("DrawTriangle-v1", max_episode_steps=300) class DrawTriangle(BaseEnv): """ This is a simple environment demonstrating drawing simulation on a table with a robot arm. There are no success/rewards defined, users can use this code as a starting point From b5528d6d20db217762db0ab513caf4652869f603 Mon Sep 17 00:00:00 2001 From: Arnav G <73305591+arnavg115@users.noreply.github.com> Date: Sat, 26 Oct 2024 02:15:03 +0000 Subject: [PATCH 14/14] Added DrawTriangle Docs --- docs/source/tasks/drawing/index.md | 23 ++++++++++++++++++ .../environment_demos/DrawTriangle-v1_rt.mp4 | Bin 0 -> 410912 bytes .../envs/tasks/drawing/draw_triangle.py | 5 ---- 3 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 figures/environment_demos/DrawTriangle-v1_rt.mp4 diff --git a/docs/source/tasks/drawing/index.md b/docs/source/tasks/drawing/index.md index daf03fe02..ad304f349 100644 --- a/docs/source/tasks/drawing/index.md +++ b/docs/source/tasks/drawing/index.md @@ -26,3 +26,26 @@ None + +## DrawTriangle-v1 + +:::{dropdown} Task Card +:icon: note +:color: primary + +**Task Description:** +Instantiates a table with a white canvas on it and a goal triangle with an outline. A robot with a stick is to draw the triangle with a red line. + +**Supported Robots: PandaStick** + +**Randomizations:** +- the goal triangle's position on the xy-plane is randomized +- the goal triangle's z-rotation is randomized in range [0, 2 $\pi$] + +**Success Conditions:** +- the drawn points by the robot are within a euclidean distance of 0.05m with points on the goal triangle +::: + + \ No newline at end of file diff --git a/figures/environment_demos/DrawTriangle-v1_rt.mp4 b/figures/environment_demos/DrawTriangle-v1_rt.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..40d1fa784e44e6f481b7fdb5fea3083fdaa13940 GIT binary patch literal 410912 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
*3{y0(CA>wrSAHdByc0r%sdT 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≥vhrq3f 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�dwI}IiEYGdCKNsLv@q z%Yd+MB{Je?ispWt-MJ%uJyiH4bJKAx(Jx-`=G=51vzK>Y)Vm6W#|zBud*x|^zKU7!&ibX=ayW~^uyd@KW+ zBi?Gf6@w+L5YPyL3U1wPQVeOwt>^IZTVMKizh<^NJ5*;^(W4nUgb@!mpH`P--za|b zpSZ#h)x+@NV;~5r&*I_3zLljTQ=%-6uf-bM30C`{@m3XYi+6{#d;*-P0>jM8g$iY} z+-&CEM6}!9P$-1sVlKV(`033@E@)n#W7kT+9*v8d#&r+-vAgdc%YZ*42@&|Y-?ww_ z>cj=$(ctn~LRJimuknm{X@(3B%=#iyV* zhBpAkC-u@_OTDfuMY7)b#q*dJakrRTY0gitm<^Qi;=#(Ct^}xb<3oF$48Z3iVkU!_ z$U+s;YJ!ve2Ivd8!34sm7|r}Qx8N!LEu+ZWa^Ssw_pO5Wt>9g#Ieu@=1DF!#WVP^X zzoxp8&AX(N6xOx&VJ@y^#N>jDD#un!@j!Fko)$ ze^hq>9erA??eZ+(B-@%D=Pw5UBtliSm4T9>N!|kd3N>%kw45Z~_DDw=DSa%KTYCtD zjnWnxAc9;DtWM5|t@Ci48|*S#`@H^PfOpr{eeDJL zc|s%*tnwzJZ7nZzNN)Kph=;A}Zd}ZL&>A29I0vHKZo5Lyt7=EEco_EP-Ne5IXMzZ= z>!Tg=$6L>rnBXnGBQ*2)H6J!b`ZY{!MNz*^Nv%lw-kuqT7j*Ve7RnD1{;x-F{_SOq zYym`OYf?zwmY4R?O?Lx(>vI|RSE(jd&D3nts7%6YURT*7j5+9;FKPTyU{MW8OjcpP zP;FnrLx6E!VsyeMrZBR-OlNx$K4W|;oIbI{CMX(*P8{~zp1N^}<4&t@obCjSDBfbL z&vest+GyyGo*hPd=3t6tNiI-7v$^(tR(4qBGRM9}URjfPR^1b%WNnbk($q5fzp-3j zp6!p*-DOdG+c~hvrR;rOyfxf4A&oyTHvhnS4L6ML5HLu{WG8A@`kMy3l14$$DILmC zSJDmWmsQnQ9ie0rDaKIUy3&QO<}Z&~QTZ@iXRL#9k7OIIf(AzTz3fSiBpaIn3Lo=1bijPWXmKq=UC+_5iTu+ zwaRp+{k$WLu64pQ`I&HMz|4LUcNRY!rDHtHjxLVh5tnAmJ^3udnou%zN}Kr?mSnf) zf}VMU6&l2-g_N($am*j7OwJ-(40cq^GbkY(oO}JYg>sOgo!H|b*x{ZmpX?k^X@*`* z8gf8mLlo<_g+L_&B*~qhHGNkR|3sguL`lHvwjEmY2&e47`mu(b=KS9}!vFK@^c*XY z+4cV*TPDzi@9y{*fA;zn#_ax)f_4bXDVMXocOQ})xpIN2MLM4vgQq{;&9GZLQ*(F_ zW1G&hbD1bEX%U?w*p>%-02@_tb?SU~A$mdZ{=nq(f;8s=b(JnFChZOXs6fp4kiVfc zX1*>r_+X-=?cNH)e&gvzWHJS4SH;09|iF(Z-sC4gQ* z2xtU~9zpc(0b*epfOs)?+F0{9fF_k{F`-Z9J(ueiRO8)fpDPM`Ml~{gu+)a&W^{*< z-@PP3_KJN@*T2RxU7EvEyI8Cp1KSx@;8Tl~=)-caO6UmOOgV77gQ>)YGjK^g4>TIL zCT8dzzME4yx&~H_(TmSoeBC|OjDD!KAg-u9Qkr!by~xmRFgswtK!38yT}G(se6ure zeS~E-c7h01qaYn`Gd8946fRs^zoDdoTLD|`$ed^;qRlt-6&}7dBIU~~%YK69uij!2 zfD<_Z(%Q~()~6LGm^FRi{QxDNu+9tq8lm6tEGZC;>})_ogMe%CAcD$hA3zY%PXt$n z^-te?Oh(Fta2v+K)}ALac+Bdtl3mL6Yx$1)Qss*zFR}Mtv_3b{&giHE4o?rrxb{$o z%l~_Fa#y53N~twfcU}qTmG+y(gB{~jaw7uciPYj39fShtkchg3v8lHmXUh$T%6G<1 zdb)>v7U!ET-}|*=C(d?KX;jvD5`+DCX(gPeE-!6AS}nsSGtnf(OE&9ajr3HT*uC$Y zLZ98OokJK4*(qR-?mKrCcry52UrnE>C&M6F5~k{TFqq3>f~MLSQ%ng%1!>3J45kZ)ModKN>mw_Kfbf zB*?DTEb5HU5CaacFImYrld*mMir4fT#~-CQ6F4z8ims4Yi)x8{5*5kxp5y43G9O44 zHZ1f_!s%r-6Pz2Q7tbGSZFgSm`ud9&bj5Zh39izOD0m@Wegsha)cA&S$YKYels-zA z9b^ZZvq@m2A%1p$Ri53!Ey*+__gF8nw%b0())mT{k8EgMGAY*nP&Qrllvr>|=B}lX z$>K&3;ckDtuyt}wwn<}f`qgN)FshMX`a^&cqbp~V&0ACkMxs*9;`*ob#kqZg>c>Sx zgVaIU1}=x3nh-z%39JNWA5zSEpyi|AA<>WsLJyLZcAhi8f`1Cu!O|#@a!&CHWMuV% zq1K}-irQjGzc}EPSXF9vt5G{;1|8i_B$#}rDP4+{XUvPlW_ZQ&uMZfu`1n4m-S+rg z9&?r8$J|mWnxR>4G)@33J=Hgf=l*1`w*CN2t!kEtyB@h1WNObR(V26fWlIrf?g-z` zP`*}8pr=&u;Dn;figV6osGkCULx&@2X2g5=E=ac3@J_!BWmu`0^gK~7u;jLuW<_D` zp_*OW?00*o_S9bVo$vmlo_=%M3=z;Vva|Pqk@+20HKZN;kk|rls!P^B2E^gP+{3Qm zvT3DfD|i5w(6l6)eU6gPR_=7DVEC~~s}CT3SAWIg9yfCo2x;T@czL!))+X6GB?#K! z&zzrMZarNw?6g=ghPNeCfMtZ&+)bfsuA`Ee7rdCP4+IR>cGPjY4(R=jDx}ed%Zf;w zu+%G+4uZpWDgV}iDofIwBL~Th&S$K^QmQTmrtFCC6x{}+_v=lP)3-qxnUA`R&VCWy z<4FBop+1TB4pUy`MewP)%f%l<3b<-!S@@V0Ui{pUP5o_}TRixA3+`&Q_*3wTV+5Ur z9z5DMT%UmU;CKf1e+9Oj|85tA<}mZV&0B0p5eEX8z7DGIzoEq#DOS`B8KWpk-3|Ak z48u7tbH4NFOdbBX_Uuzd(rj!t+B?3=9L$_=3t3nXS$kD!*%CEj7K^AXe^D~zK~_m! z-w#1LOH6XDedE8ErZvAs2F^RRE#Y>8GaH$?TZg0reUKmyl>}VAdCTq->8Bv+RcCBm zks+Pd?Syjd2wtI(2Lm`PF0Vg{VqV(VO2;aWDaSiF8|$x|%DAgrwq~5?Sn1_WGIb-H zexzg?w(W(+ARC+6`1YFn>eorqVvTBrC(GXQC3SDtH66Bl7zf6vz&X~5p8M?-5WTB} zEb(M{m199Jh+_1{rL5b0Yfp6_|B%Jr%M)BrZVQX+09BzfVNu%;?gyYb9dEpCd2qnO zE8}4k?z9^H1=DgP6bE9;z;aJ*u1d43QuoAXi7_N$yIkIT?f@e+bFvBDzKA6A==^g? zg+oM;FsBhD41@qTD@-W`J~ffXm$QkQNN&u_ZHP~Sli<)@D_ZSe19klPLm1qzIL1{s zGCE4!R8n$JIBIviQKmgwfhh`QzN;E?lXr;#IxU$x24qP&qnh?d18?Ly8$4-_pmGT= zdJM`UZuc)==pux(^~9UzmWa+K55gck^iE@FTemE72&FMvZLG~~cX|8I(vuZ&=|=46 zf;>-(nnr<>vrMYp(Qrw`mu>1BH`7J^Z?)E9pA4vbjIrkj=8HAVMq9#E>@0Lp^^hhce)VKH397t1%p&^$j3KmicTuPnp-+6&%=o$$`uoK41NQ1k(mwJ&mOW+gQ#z zrt_KK4o0$(Isi~Fg`2w|>_FgB-Z=mOLcXqeA7;rH=)CL8AT4$qKo7@0z~9bc5PpH& zjsHU|&r*gL{TbiMCWP0^0MJp>*OBHI@h)smL;MR0M@7E4;U)0=;F0Vs%pW|@*tQM4 z+2v^B8@gm{RF%EloN2~8^}5p0xqxee)K)A8(pf>fQg`MIjJm}}7uB>Il$rz(e5Y^m zMr)1lh=VQc1p&pk0D}tMB|l%os4ehJvr6aCW&Xv6{PVxjF?-I9GjTFJMAmm8?5@>+p{Lw(SJZpk z2+!%Zm9B2(pjAQ(g<1wF5(VuS3aevenzBA>$6xH zj|3GkN?DRWpb=-Z%I#{HkZVc``lRemB&oK@>_;X?nAc8gH2=JQ9Mv^=BvLV=S58=5`OR@-)k|9xFZ=>|jS z+)9kFy#m}utyf#*#DudoO(FLuKBbDBF)KE&b9x9SNDV|NPB|pVgu~n^8{3+QdrWpo z{(Y~@jT5*N(|0!f6&F*#itN{N@p5r$kAj4&z9W!Qb?XlRRK?iH+pFJ-umhQQ1pzqP z)QlKnEw}-No>QO|c&0z!l0vC6+Misx53KjyHwkzv205<-J?+`o*{}*; zFc5{Uk_k05kaj0^oSknMySiJXqQJh|Wz#>$_f2Hjd)c_s`7lb1QwElvl!4}N$+?vD z#cy~24C_3TVEEl1R`2`IF=*|yy2F2n2^vBK2()HQb?j`~PD47M#|C%O?W8PjVKQlM zGWy~LcbiuWmc<@pgkI}`*acN`B|JpW+z{GOG7lWV{yE@itG$ZI0?oR3(vCB*{A`z5 z&p!gFASf+Z9%Fm%4_;Pap_D;?tE9*{lBjMA~r-1_iwEiBI{QAHCenWsB0CV4d zK_eJ_F(vjWwS05S&=3$3830pD!ahB!&1-JB)E=OKrS~xJJ=K%_ak0gD^&J;@Ffy}N z-+0C3e2`jpI43$)zngB0$OH5dWD=FZW;6D7PAPT)5icrz6bW50Pcb>PA&OKi*?Ac- zQSWO)--e2_gzpkp?>LOFjG!uKBT3xxHMneXH_|E_N{N~;F3I5HKgAh=mPBi)IALn4vvl`k&6W+lB>h?1zH69l0^}HT?3ay(2cam?|vm45`^U8rD}x2JVs>};csABE?F4EJZ-&H|^UPW5#0Iz8(at`v z>^Ajzwf*1_y|%$~(VW|vWYKKOU_k+|{^Nd+xXXYGOTFm!cR3P}9JNfqM(5 z-@?>hOz_`Q|A$o1@V_)esPA{#Zv*Cj{8B+MCMi=SK#Gx!qXGbH%RG|@_C;M)pLF0p zjKzoY2&8BxLNi&-Lb(zUb@gS-B6#E^X6h6$08c2qDEo6738MKYlQT9vR1s`}NmUcz7fEyMtK_0IRQzcU6c1p5WVrCTW=~egEL~#SAntzwUOE2LH zyIEaiqF&(LpBPz9rzz@{Y@YXX;Xz>}oER8j<0t7p1jok=|reFqmx^Y`UeA zh$n_ex1o@Rrah#|#HML8#u7een(DvM3Z$?e)6GNgMK`ee6Fh8Xbv_ zVo76CBmOz(u{0+sH>6t`1*1_2x^pLeUlm=UwIk-`MXGwUZ{T)<$lV3e2!_HwLLFVP z@O+}SBS9lhw&HEe)rdf7fC7DDnzo>o?L+*_VR#Rd9K1^8Pi~5%dZm~Cwe_a9dfp(S zrSH3;5Z<}-h{SkefnKnj*}jY6(eWN6_WMIg{u8!0s17&a3a|5#0OOuyBKNBJ$jRHS zfY~ap^9#jb33h_>+^pUnt3EI{$bAwzhzE^IWI$AW_Ho-kgMJ-a;weo3z=zX~^K~*M zY~3r6|B+a-vPb1x&)#cv`S@~w=_u6JUxvwBww56p=Lebq?gzqY^V1& zuJTk+oxN5hYX4mI=-V>$Dcj~RKQL@Ebke%*a-S20#9~>3rQ6$nc#O^3f|{XB?M2F$ zY26umx08q4Z>{;_HRhPfpw91Eqz3?(`wXQ<#V0G& z1uREUYekIQCi#K@uHBHLn8_nOQLQ=ZR@0$Mn}2SQCuVlsSfUATuNR)mS#mkQCvn(W|3#} zeQ0@Tp{?Ih*!!=c73=`BgbTsjt`=P(ypIwXXsU7Z4 zkM1haZizJGZHzq1F2=r3o<*OMEF~MoaPTVdaA_sIX$BM8WS_i{B`@BL6(Cat=#!YY zY9^-hB_<(RCgfuH+E^akZTQeWUz-J!?B7iOqFxRq9F)N`8-Xxb1STQ8-y*z0i_!|w z9gA*nEcTk}2!hPNUBWI6<#Mi%tq0pXa>%VaZYRS8m340)k&%jiWx1D)@M^sxEhk#3 zb=?MUkEGm(M(cj8?F`6mJy`8TZ3yrPV_nShD=I10&?ne4K(md4rpTtChYWIZK1H9~{s?Jhv?{K&A8i@rLn zS&xolQ3uX6aulaajq-rPdra|X^OMO3emWZF{W&3=Ht2~Rnn!Fc$1W@mV?T|BxUAy#ar6 z4jP;)%2VF^jgiz^4HMg)?+4AQ`3%s)mFJeR$)J?pCevQWt_nooMy*S0E#e4UBXCX# zrtgK4Ipo>0jY~ADGw9hVn8OdL#UrHoR9RC!9|TQN`&Ix@K_Pap^Q&5(nt3v$zkQet z%`vyd1cqWQQ_n)76cWUO&#_P|Q~Q$maERf6-(25_5c9{;YS z)$i<=YOGoF`$@nm0WN87(%J*_9W^UF1f~HqSqC(QqMWKtgBJchzkTj5(1OccE{gc1 zd;oEcO-O+>M*&MH8ZLX3J4vgqzhohMH%!opnIs2A$&2qAh#1~`hWWT+hS$8zLhrv9 z0O(!5v8OET&`+u1>E$MrSsE5)TdyVNyJ{zHeplypU#Dz+^344O9;wdLt7WinqM#Z! zf><=FoWc){0(wu3pS8$y9GT78~5Zo5AS8I15o}`edVg>XPTM>Sr z04S+H%bm`+9@4~&_huO7_mn4cU)mh-6CX%{MgrR^Zq^$Z(o%6cK=EC8^CMcr_cRO+ z=~alv28c!i(}mm6p$gGBE|9LXVoo^+EIKj~TwM)0Qkp1`$zO1~=Qv{;+EKMw*bm3u z`9SoYC+AaaNs@V4){dAkOc{QgfyDGZPmv`LgAC;)@QUD@=$d>JBpoEAbPydJvI~wp zdWwtGF?eG*kHH4%K0pg3C(3QBSg;4&O@Ghz%)r~B6(yjA?$HMQ? z2%hKU7Ih=y!!!N1$VcEbT<{>0*<~mp6K&bhK}ZH$62?b`22<9F4(OC+;D7XLMW<#e z{R)FLW`(kXwyTM?{}^&Ceb3UR?Mpwz;D@Jg#X+*w9&QIFd(QEV`oshh-Zpfe8=))z z9+PSiYOTCq1@#r@IajVyaPOb6XJ1zU{v+7s57~yvuw4zW{gj<@Yv4Tf<|+w_ii`H@ zIz+gCAE=k#3FPs~js~(md$cO`8LUbf8ZRMu!DjA|B#@$|!p@Fw$n=QPrqP5f3zRNi z3^mfv+xFyW>9=P8o*M>M`PRIJqbI$?UTAIsR-Po-qiWZq-63$4r_UhA;6<`1F`p13s!_pv3c!0C_|Wef&~K>QuaxKfDLQWbqF*xa z{vxtyDYkTGWSISQEU7N3^+l+=X-SLiU_jKMe(#!pGF?++5pva+WyP^56YbnSg} zO+#BSrn@mpnl3ScB9`0fu{I1W2UT>nkgiX@D)(U)jx&Q68MG;zM zx+skhElc+^%#SH$bAGDb`AEA-xm<8cU!Kk+k00Lf*4Sj zgl?mnUQ@wM<Cqr{yQn*bvYEzjV`zONIh`YW(zEH>_r;cL_sHM%Z!Oq=d6qv9!)VA& z9kx&T1C3a8+WSM#t!rc|x&J=J@W?Efl3}TmOyd$-dKs3UjdilHrn}|G-$v$Cny`4* zF+JjA??LQ!c*5 zUzTrBYU8#m9Dz6@Ole7NzT6XV35^aoa& zh*Y3^Sr6WPNgbbF4B`tltTeMQRMO#^`3x7#^6 zYHDE$LPtGW5EK0s2BG*S;rCGh4G`Yd zP&|Ud0LWe|zPaN?4gj{S`t!>Ju70!rWs*AUO}>vYn&o)d`_4JXdA-WgBR#C5y;}@h zv1)Sn73;h7;qMi0|s-*HOILu*B z(>}?)pe>>Xmxv73KV;Wu{OkO?KjRRd#X&ex-Sch?+Bzu6Sw<3t;yx48uT$u0ZYn~n35g7)-lE$>ccH<=E{3A>&iuGu_AqfiqSZ>Kun*+V6Dd9R_MbB(JTnP6q9Du3 z6B&&Lbvnda7%|VkC;cIcnM_@$r3@X&mAH2kK0`g(uNq2QIIy8xw?SKjL&!xo1!@Pt z12fTiQ}Yp0BFtFWE+7QlL_fijmQ3MLKoJSo-R0y%reHJIHmW=|$nxaTv{^FwTqv)AQCcZ}>W-zV)GA+VZ&sO!c*3~h>l)=xn|)cgA`T|( z10?#Ok=Ez3|09p<6_tnoS3R)h0RRB50_O1jCy&V+(H?@#&;ioqla!4`c{4y6kx(Wg zbwS%#=e+T}8sFb|`(-cv=rA|?oFV_bdn#gGmm@Z`)N6=2)vnX+ttX#lazb-fVVuDa z!#52R+s=4j9chyIOx14P@_6Zdk-a?q4S{jP;Z+gm_2}`Bfs;#%<_dd)SY!rI7HNE^ zwbU|JAf7$lK~TTCUg(Ey+C`~8Q_SUK&Or2O@*txB&*vDx zx7j-vMb=kRoKcrjaq4mbOA;ThFI@pG634?LMj(Ua{}zVy3)-?vfM_Bw(I%?*QRpGGG#x&r z*hEVjuWZ3wO`=YBAC2MlsM&yJg;pFGid!qnY%Uy^&L1RV41Cwv9h__1pMUaycU zY2!iu;A=AqjHt3OR#$WQf=hf@xdC&D=j#WUq%v+uQ1^n|_S`=BU+Rwj^iIdR`TF?} zDA$zc%TG^Wm&KxF>J_l#9X{RU{g=RI&3|BxdfW@7uZq@zd zKTUfkc1=uG93k9+L>a&#!%>#=Tim7Vj7mv?-cTi*4o(1*UIu7Z&s8ak(FzqXNH?$$ z^-stP&g0FtX1o|9@tpO1)4mQi@Y21u>E~DAK+jY*RAJqy0`Rum&?vdiK;5j6;<8FC z5T+$+$h#o5CxlHK04>{$LCZ%7tPJA%voUq`y{}>F`kS8avTU23_TFoafVM1b|I-PR zApZx+jtYt`?FHhpe%D~G&edwwYU9N=ILNT;JH)ivuC1avjWR#cvNUD%Qv*hk{moea z?LX=psbGF2%M4Vp2EItG59duCInB4k$_U|k;-RMZNZ1op_8Lo9K<*<-Pg$O;}- zp@|idg!5z$x-I+IF0bT)G+dy=j_#5sP)@Yfu&C?3}GXIPj@zb*ayFb zR?GJ+&?~Ov`D1rqjC?U(lN(&&4UD*y2~SI#I5?2h8$C1(+&=Br>Y8_kIXiveWKKL= z6KlW+9#t`R&p`*)tHnz*@&9A$8=^$nf^5sS>z0jMwr$(CZTpsO+qP}nwr&1;-G9)N z%(ZeH=VWZe4%k}XivdI}-`l^sf>xm%w=-FmCn|uIdUvLo?Ivuko z0V_eJ!-wzU)$_Vq(WLl;F0&)R$hY(bflaqh>kJyf1)+OcMW6yAi@XQO(dmC zi>sZ0(oPqhcm(L#h%x_pj6V~Ftv}G5iaIpeCmbo$n|Fv5ZUsHKW_k%6t&R5Rbk6M3 zq=~9B*g>LkOiUz7{qtbf>Il)7GWAiWbv3~Z`@_3@9Mq#!UKKuUPo@Pe&u>*7WgE$X z*?w=0_X7=9|9*;_PmMY&)~F2yh3*u2e&1y0O!&E;jKH!r93M5f(Wh}1%^>aSHd5aQtDmGC0ULW1BEXKR_syjNCIh? z`lD3&L7&&I`LN44j;;3NuXjceAGTWJBIxjhS%=9lp~qU;IM&X0wC_P~^Mz#!s^Fpe zAocdv{%%JTB06Fz+R%woN=hE-Yp^$-Yhq!eW?D=fV`t8taB%OwII~4F4asx)@+Bxal!|H_sf|B-STG({C_+qH@D)BoNnL6BlI+PXTeJ?t zMi)=jB7T5O($RJsa?Ddp-m@76>p+XS4Dau=dc4d#T+?)Y9+fHu6(@((D~oNL6a~rn zQ<2QHew1he%qfK6zGIC$d*Z3W6gz2vahytN#lxZ3a9OqtK7wCNlO}l${EO|K!svhXyGB7bBe1qocB*UMk?e8S;0fdp+TsjeL^0R zU4yQf5vPsEKkSeMPY=i}$s44a9uYJWJ>b!Up%;$hiY}@z9U!(@-~m#N0=Y>eV-t6_ z#o6G0>f)6@K_WCHOE%T0T{skpO-!peEqw1-z4nxg;+b@yHgky(?T!l3`YDN*@3F^N zbplCp$JbJ@>`w<}Ae|~A1_9l@T-*F0`M1T>A8&@LpTtAUTRgDv3BR(-@#N(q z3z4lJvwz{1<|17iH14k(xx=pqN$h=8?CuVl{`$*F&ArK z!jj-|q&kTH<LNz@icf2t@k(kP z+udTa3JmThZDGu2NR#4?W*o)(XYJDGqU;xi(uK zoByl~{?w-)9zX-h&r)Q_k$u~VDkmM)(F4d~Ym6^*XCTIgu!9#gghaE6&b>HS0sbx! zN(I0s`JOpDhnuxBzA0Nm?;x+ILc z-y{Lea6bV65!_{vf&X^*Jdk;A-$-MSlF$8Wi0oEqS7zK(QK5}|Me|s)9kAj z^pDK0p%ADOdTId6Q4cA;KiZwIo5YeCJ|d25`e>BuH?WQ=u1_9Kml$aBiLZpYCDGB_ zHSlo_ZK><>y-HylT{GqKp@&6tYt@~Svl+l=P#|A#1!~HS@1;3VIL6Yx&b5g#ixM8b zESGJJ_Xae`x=8wsP$gGOUVey#pu54}v@GM0czJL?=#~~wd;cch1$-W)+-7LE`t-=n z20-)so2^*P0+_&bOl>eDJ#MjrR9KuH;xj2$aK6EEB-x9fr?Blhpfw>x30~-fhwB+? z2QHt*Z|Q?U9&>l=sSI|;&@HlCaF9`v@y7?-9e&Yl0CGe9%=*rnzQOGuTqy!3^~#2) z*z_4KETMT=et2<0RMWeGAHDH40=a6P-dkGq)wl{hpGL+x!pJwU-U72uLeGeu_0*ju zvM0)_kn1Xo-p9YyXz?c?(RK^dnh7K`W#}fMABa+2F>{j1TV-bG_`gZwVIy&&zzUeD z9w(+*f8U)mS!Bacivd^1BFSBugRD=@{;Ms12Z7Pv|KEy3|7teCD1h09|Dh}fRcQ|0 zK!#eNK=q+k_*GeZU>q85ZoP*r@w`@PBx_F)$4JfP;I-m+uXXwrL(QT|shXgmDDsvU z+!leneR5@93KX1VrC7ma1nXwxe=1dX-o>Kd#D8^xS{iB$fJyIOw~5!ZJ$??iLbdUM zjdjVR>^uP56N?3XFXw4Hx7p+~snX5gJfd07MC3GZTtI9fqgDl--ajm;)-#p4wTm(V z4mWuZvsS61#F{8F*nJJT!yW_h`RWvZzQRutWi0umjDz;p_1%6{8i*n>uj@ilaBCG= zj4|q`u1b~NVtJpDiyvHlm01O7sd@pEKt`a1%e&d0Yxed(N9VsD{;6sR2-=W&UpJgh zJA-J22MF`@?-Mszv9ARBwA|?0k)oMEG^B`v{M>{r_GQ9CclcW%;cGAgD29m&^q184 z0)+nwuzxrlhV2$uT>@|w-*wH~Tj4GhgaTp-s)-6NRlr;6%{O5`8`F@yJV04zqq3bB z#XL1&_v(7e{38#X(Cf&AKZ>nY@7)#{-_Oar8RS0Nc9(gne5_;4Q%ys(g7kRE<2)Hl ztiE-T{Mu^+eZE;bkQ(MvPn77;BPZ$cIAy_${zySxVib=7dsRG z1MsJpM3;1%aI$g^d#Sx(v~D?C9uVq^HY@1g`*U8KmhmR}kagRtj_+TXHi+bN+1C!T z3_VSg^47V+6%_|#yDU@2P@@fKD4eF?)iv-lk+P09KvNJICk`26i&A5~94fB+OepJmkzf3>VKE5TnC$!CP{d{bw$kGN|Flh#RnL$8Q1Y4)`f0 zdZGPlqX44#(nCxYeMT*+5G{kYa)lzaDGH^%1zE&Vw@5g^`DL=%G!-@o|?Y?OF`{Xg5EBq5x`3S2Kr81MODUUgduLmpEUmS~?^%+s6s1ZrTPc`kS!b9=)N3 zbp2s+3MErEkK+@I_yvlnx?wTw=QI3bv1if>KQm5~C(Tb6SeH|iVJ8>Sk01~_VX}bB z$|=HO+NqADg?(_boiV5F@9L#ibv(M~)|l4Xj#Tet?m!%I5Zm2J1Hco_8DSAENFVV0r8sVw? z8}*iCv9#?_6PTilX~2T&7Ew<=RFa$0rB^?Y?W}=>y>y}edo=2EI2ZTkrbx*)^i$F8 zI9g*h26AzVqnD{RQWi(vAnklI#A6lOEx7}J2maJS0ZBKLi@BhcAatkS*$FjfxEI_^ z=RJYX3g*oBST~zy>~x4o);m#R48V_7tsWo$Z`wvcG8$5Yz9h>T-4tuX7QH&Gzli=m z=(*mAF$^3*1~*$tOSmnFc@3`KaU2BEx69qPszN?vdwOBOEmNwFz!7^$IVQlw~->Kb!*BR>w_N8p% z=t)Ax1BsmT`5_dO<9U$!RDy+3zyu|+_wy;~=k}<*$v_@dsn$t1==8RaXACQf_p8?q zX~8?cYf3h&XE(KFLT&0+8;)gbklt@>mgT4tQIs=1l;S8(e$fM9s+&&K&ZIuR~|X7@wv3R9*Lu0#zQBHdV-sDPCI)go&qKy*;d0Jly_C!Faz94Q%Z!L zw5LBXtvLor0sf_p$q|XUvt0DntELE~LRL^60M<32bD8!&`uud38TY`Kfe6#20X~vQ`ro41ZJ+6E|kJ?w;1QyOAcOf}oETRI?!R$UgBInal#C7MHxs-Ns`?*qh#8`fYaCCZ>jH;|Hup|4T;mp_m;4 zmLSl}Zwf0sF*&$9Rb?@{FU$}J=$_(G(>)@=4F^0s9NyrB=9(eTz}(j!aaQ@~bhjh= z#>1t9f(Oy%KVDZ+0J)`Ht>K&hL`V4+ba>)dIs`4*J^-w9A?c_;=rZNcxzY@zqyAN~ z#2n!8g}lcm^I#aw1YX#i?<4OaQ;QSMv|7M;qghySAK@aLfX8$W;gwuX z0vlafal+2sPT;pV8RvOAc71p(@d@dbGGLjDr%P@t=5*mHH!h0~&huWAOgCo1wuA%4 z+`wTDmDYjd)<-kNC1C{Bb%DmDC6|PB9b*9ElFr$Zul+kM3TK!E4{0vs>kMti<~*Us zKkCEHB+0Fr_XTScp`g>oT6>Vf{sEf_5XeKfbfa#6?<%;kY+OUT`gC)|?>t@>eAu)O zT@7!~71@*=o)p}Nh4^d7AysSKMy??*| zioH=R^PA^c!h+aJFM|JhHNmlDQ>7Zp>It*hrM+7>FZYj%E3j(weD%7$c)JE$rG3W- zfYQSrrxb_?Hz=w8uM-`WJ!&?`sZmb;a%L>nzW@;L`~4q7@MnkoudV#;YVXmEtkL0} zfDp1n+YgBH;4d>e{t0+Z`1?ELr*%?&mO-15LLv?GmylQpzkNkJ_SiT!&Y|(pW{mJ` zmT$3?8-6Qow}4cjDgsj5C@gJhMSNb7uhUXt9rZ%JWd}hUDm;k|-_dHQ2w-Xtn@BK; z8t!>9&x4-sgY$bX9CF~>*{@SBl-j41#%g%sQE2V1uFTzpq#6w)#EAf*LSs_^O!!jq z0iFKcvlx{0G)My?XeCO$FYz-Yl#!Rp@z3!BjUQ>neVO06Mkq_qT;j@$p+3I{Rzs6I zl0!hdsOERUY|SHNx6T>3iWaF;tkPf88NSpCA7{LqDYbTq{v9>h^ZwW?CjN=RR}GTu zmp%qsp!W?R;O)J?m*e!xc0Mu87>PCVEC}N(T6CRXvjufjMAx5&<69%#`Wl6i{`guF z5HI?bopm5*3%8d(n3LGH4P0NS=C!{EnHcPWG4!){C6abICZLonc=97iJK5higOmuIu@ocb z3b`uZc;qK5HyDrGe)F@}kO*BYDjnPNI)9S38~eqs~65GIGyWI>LYy&+!nNacs!H>%$e7+Wo_7)U{Jz-Cyfoi_MYc@UT?! zeA8^5rJV;}pbma!^)pj7q{*m`t`R|&7g^yv68wOGzv2FN z!Z^ZM^TmN==k1EgaVW=$o8C$6vhl$xk)lXPWQg&$HpvB;Xj3D5C!j9njR zvZx_nTF+8yWCB157Jpa+#IFx)P87o+nX93^92gf>CoH-xUEn|+4}!P+^JsY~bxd!@ znHr`NB`T+q;8#Y|9|BzD`#%5H&X$K7@$sTkH(p}0Mg*A?AQp#Di452V7N6!Ay9{e} zCsb%4g?K0|d%8uitsOTZ$3}?eAcO#q#nrsZPs+KG+V^Elmb4hF3LdodqW_ z0h+6*Cmbvu8|0cD#%*;%hM^|CA_Db!&_Jz~D+EWgj09Fz$_9j)v`fo^s2SL_1nTw*D4MEKK%LpH#((C*G1> zuE1JaTR~WyJWa&!1=vDV(h?w{sAtc}!M72~=>o#kv}dh~L2igu{)4F&4AeHkIBELX zc`w`-(@sHM-894+3>5T0+A|0Kf%l)n*cE5FS!;zVWo)&E7#; z1kPN3L{`+|m=e6;rw`W0P0NhDrS>Z9@G_E6B$-2JHp4RMPFZ zoDcX4nLJzLs~{uH>g^rXt*?XASwrS-61B$q-cdJk^5VNK06^-J*A6(&C9K^Q#=F&2J8Sqy&)Yc`~qO$bo`n zh!PbB_llZH<;1W04*jQR=q4AKZHP5vx2K@r<)Ww{pU6S~hs!Co+>KUmX4DqSM8C-o zuJym-C;pwt{GUVcpQ9G|_W^VPm|gN8S3{etzN4z049N%p$11Rwy5cLo-)ooOP$NTx zZ23!odZSKcwg@2-0e-c3FRlyMOw7Js^T$dY)&pHg)f3_#wb9PtPqH=yx*?xj+YZLv zz~u}Cj*S2W9Y(NVa^kr80%Sdf$_(GALNZqYEh`K+jfE1)MNB56tRsN(xPc0PDEvSQ zIjSs0CNN-Db{M$#I4jZApEsD=4%urg@f9+r1LY{^%g|^2Gf_AYe$j;?24Cmx3sY4WtqRdJwW08f`k<)8G6rAP2MBW&`(GTIw9G(3@ zA>vI;s1q_lU>Sq?{Hc@W=*KSKsm5LdfQPZc?yf7LW>yw5;~NK_iG^(to|J7gx4V^q z!Yo>nsE>E2(FOf;h0#4zn8~Zb%z9XZ#C1L*W-AMSGVGa7F+OBNi41j}Q{UYE2jpH# zSFTxz^R%#xjjl8x_r0U~g0}G~sj08azCL+|8OUcWjJhUEjZxYP?(rBR*@^(2NG*pU zD~uNOf09N9^+S&~_45#)SZdTnZ6CH0p6Bam*QP;}hu#2L_OsKN3zG7!-N6)FBjmG1 zQmi^fmYMrlhh!XwlkCn$U8O_U)*s}|`~2J)Y1z;1V_kb)OaxF8bDk z7enC{#cJ^_Kguq0Goh2jZJOz9$RT=~t9$eXiHP@dt5yIc<>-5!-h6=yFWCqd0e9Ck z1JQRenWZ>N^Sp;{4|*5u$lUF!-fS?`a+C7b;;BxRV@aL&WR7tek{kftmHD@11CQ;h zj1}-LP5c~y-ggM^D`Jf^QBoUJ5J+ad^~ZaCZEa?Kz>H47`nw)izF{i#=eT*2!ViXg!uC2jMKI{`!s}#`x1K|1Sl@LZPO6Arob6 z2ULg*zquF$$IZVqdUg_1y_{1lVjR^Rd_wIuZAVSN1BGQRR-K62(L*$4KEkV#4R`RR z!D*}WG^d+V`)1OCNA%uHjk0K|K{gG|oaJx>B}`E!ivB2vfl}I}K)WUQWk`D(*isFL z{zfL`A{4x9F0L7f6^zU&puj;~!Be}sh7|~@G{7MDczuowmv_@)$iW{Ru-l$KpyJu9d=E7LN->H&BwfPiZj{vu6Vq4wuPz0|G%F^5?vxa*N-6BfB((bztEK~1 zZ47kLH~??S{4rJy3q-1WpGPyvQMd06HQUUfG2A%{pwkR!CT2(^=t*Q$N|c4CV#P=Q z@M{v1ug*=0UmQP?iQqeMWUyyL$Nm2A*ft1`_k}kGJv@G3K3+&pdCD|>G^+i$(Dgi+ zeW{K+xihy?UFwYA2UC0wtd%e;53*&BV0q*4R8P`3!4Oryu5f~%nBkM*@ms9A%`g8tkc{u zi{l&5Y|0O37Spg2eSFHtwefMd!R<<*As5AVZSdmtzEDI$ZjB6rv1C;$>+8u3OPBvO zx*=A|(<3gc1wG_vb;QfvXFmj?+!VCx9?)-@oA&EAhYICVcbo||!7>;?EU9|i$Mzyw zrSBWYbj$;tFG%<82~Id=y<6I$%Q(b;U7=@Mhrc$O%a3u*nWRgVP5rkNtR#&1;^331bUefdmLy6`SsE3=<}HdAE(I2lySw1Ym%-$#6w_{Ixm?? zvSnp2S6j|4F~j)eu);7np}LP4)eD$X2nIo#q58D1XaDiYZYM1%uqO`1b~f(3^#j<1 zo2ceGxg`l1e|!6AH5rP5^HAW=)qkFBSC$j>Lo-vjvZF*3s&=``Lg~kuQ$1T+82ANf z)>&-OkAic z-DlytiuEkd_w&I!poDz=C2b?IXlReLQ2s#Qg3@=&-U{S7=g|mxw7%C245cA&^*m@4L8pSA&W7HBymqq~D5oEBoguVU|4J@Sa+QYvH zIx-E{VSxOomtgg{{`4mzhjk!JcGg%f=}t39a(~L%oES zPpZqhzg*{QX=O+|?IgErB@R$3dfmpgv&?~t@M7yvVxxR$p7pE54=VY}6QJANWuZq# zeJKE)Bh1}-i7YqJhot1WC$pkrSkj!j1N6J%%5?L;qlTxr#1mNlO4@eYOhoJfX39y+t886a@8^JBd@WZch@Jq%MUfC@kHvi-)F&iB3 z$)74)w&;g5U?S}`qxE@c{%0zx)3>+si`J`3r7br6*gi}DCWA+ej}0Jzo3;wj81}95 z?O!12I8GfCWUReM6wx{b*NA0L=B$LEa?xW8phNOw8E4C5!pLoS`w{kHrA45rw~mEn z^l$a z0jD$Du$JyHa3&?#(THsxa+`x7o5!RGOb9#)0Uob$#+IJ=l!kq-V_ZUCcu5tvTQ;W? z;^Hz&cLMmy0u1B8j-~xaIicpLQl_#%f1VO~Da=lBSLZ(W1tNw0`_#$BgFtL0wxUMa zF0;3YCsS1(Bc$FXLzqy6Y%8!jU1HA8R96zpe8gi#748v{aXx&SHxm+ATY3F_ay--F z3;Zsj@S;V-&(PU{WZF1wl3$(wTCy_Vl8y)|et zgi&wwu5<*9=YkYzJ5BJtu2WK^)K}S@?3?&mE4+c|xBS~UuBg~YV%Oc$k)zBjs zQxl`)iPwtQjwmP1n9F*Q+3vdunl^VfY_ZU+=v=+`q$@aAh5v9kuNtP@8gBPsGp@qA zw$2$&YAZ%59%8|3KT$#onX`Y>W6w&6eMZPSwWl zHa-L#AMFOl{Au&gKKrIKgw@Qqo!-MDQSKtbmypt9UC7(6Az9LKI4z0~WTV>GW)Xph zO(s8gH2~_{ECA@)gxvph-7sttyWr}lHzjsaTT_3PRNWAaW!5Zt7wL0NssMXzARzhX zcSMEs35R~ye2CGzX!VzW;OVqvjwcTPsGl}H0vts9Fk^~ORC!Y1Is6h@zas_X|7&3( zQ#51tBrwVb6VW69P$@!JV2Mo_Mbp%TQkpU(|6=Au1B8Y25lL|`*q101JG4e1dzYst zUFh9S*H4z|7;tI#4M0q0Zb{nWtgzD!uFK4Sa2Z{ksYZ2?*g}XE?~>OEBYKdLlTx)D z*}>YY>+F_STJxD2;S8b|3N!)$bg~|@Q?XOiZ}*r-HR2@Q-F0NvwL}};`d!KcQ&!^B z1J9*$3!WY5~vRc(t_r#ImjXgBF zo(q=LdW93(ftDAgyjlG3;-^T?oRp+|77yz*g5TBiYAy2to%wP7taw1sm^xBeJTfe1 z!_Ampi>zEX?HMqJ5BB+@OyqG-w*!a#pUw^Q4~PeC8od~mZZSJ#SJ8ZMN;hkEjHdD* z!&eA(TC0kpr^oSy_aIP=0hUh(?NR_r^~HPK_3lV|t5=q5GfkKW48RKgFE>ZOs~F6@ zMb^Vw4B&KY#+v)Yp4C--!cT!pZ98Af?@lhTvk0^!jrEZn`8jG?Ki{Ocv+2V;l*u3j zV%T4#^t)Dd#1>L2FHC#`90$$4QI$yX8q&3C3=Mbf7%F^dYU1^wn!-G9% zlIf)A4t##4G%2HIv24kw0_^K)A(ZG-C-5QDeXfmQ;K4yDqRoT zIXu?w;Bc+fp(u(Nsfb#-Nrd6~wJU7d($2B8Uz2t02I-uV!~CYhJwiqy9_@6Sm>?hF z_l$$BD2eN%c^ruQ#fUHtDp4(c+^Ii#E+SuLa%b(RN;5<1(}f5Ug*K|E3sjx3O;~Z# zw3K^HIjlbnG<-DG>stP#7oR2u3YR35#g60CJu9iWc%2YRz$(5>xwW6fn8wAOD1uVO zJp_a>D?3K?UGWW91gW>qfy>`*EXEE9S|>;outGt0{uDjHfibcEWU6yDYv${FSbi$w#3Rv7YO|Dt?eiQsXkQ>+AG;*fi<7_7OscGtrez5SPoMmA> zll6M|tquw+U=+mXp5}U<%vgjCrnua&&??Mx;<2YDwXld`%lY^ijQ{bSdoLba-8dW^ z38cHT|5~=pCjxK~9;4T=QRx1+=Da_1OS|fFf=PL3f{)JoGBB*MDJUbOxC}M`B*=2V zW=KvHFvNZRiFT9ll8^a078Yz?w7O7K^{Blc$G6PF?ccGja81@wScmVY4U1JhhkPH+ zV&Zvig;vw~@a^%!)86SUzwg-x&si?Mnc)>5>F?Ct2X5jzl2Ydg`dj&syEs9M=T=qd zRn=hSs0&SWBURc{iQ{1i&1{Sp0shE>U8$o#mMBKp_Y7bj)p3K?50#6VVG#}&c;5Ka zhS=|bE`Z|%Igj1+0H}5Cn_ovL;Wcx{bLc5{l6^qkuac>CdDM7yM)Lf)e2cAyJ2b!` zxINU>>Y|6drGWn4K80Ug0i4*0k4OscXJR$Pjt|!!wqlRcE{EM2_V-&Hw@8ByF9=%{ zrO~Qo;WP;^qlhD4$L@7oa9_aY%KuESO9TD9O4vt>j^UzA_b#6I%8ntm44qFYLDM(- zUj@Iy_CQ^}{&tNMEK5q+N0f?kLHQ^_IE!^N=crSzYGGYmJ)v7Nadp1I(WPBuL%*=# zSl}t8sRsO|nCu3myYCc$c+6bDOvaIU7Dk8Mx$ujzs|rI;Lh*3v@yhp`G6S<_HCX3{ z;%m@P){@O~PojWfG_8NgHbuN>B`iCVIK7Lt%Ceof#%c(+q7;026KFOyLIsofNFpR! zy@K>t^^fk(ys)5oH6t-}6m7%w+9c#C2snJIF~>Hq)vPdyXqg8@xt6O)jCU?)HH(wE zEn??nk!Kp3io9_(>#o^U*guN~K(d|)YjuiDG#Pq zucvCeE!zgBZ@jZfncA%S%Gn-lDv@IQ+v={=$u1}dQP&hS2eYRfZnrm^GHaz%{coo6 zyW5JhI27+ULB3}S*fFN8H)O&wfg8ee;>>C%O7f?&LvGXt`0IlxWBS9v&2Na$t9)o^ zl7$%>b3T?SZ~7Ia6lZ97<0y*{EnRC03=pNiCC-JnrZMq#DMV{?z?+2Xw<<1j=~W*9;mZ z2GRPyRMevGFlrjx(c{Y2PySp@oVTZARvl%|M(hzaMg=(NP2C#~dHxc)iN)%O$OVaj zGmAo-58Rt?gMtQH(|m4vW^K<)9EP`}R2ERJmnY$Bv0gIklu%5RNVr95K91kh<9568 zm|~IY@NCPT&bU$BbejHU+tw$>i${S72~`(mWX@$l_?ZX9@o6`uO7 zBc2;!uO$78vYVy}yN4R=HJDm1H}rVYFzYy4g-0@4=rB|}=CP5JePLebtz7r| zzMbejQXn!&j8_V4OYyUuUjO`rWoacGJj1)cI1ac-KCbOZuC@vpeC|l!e479n*0oTV zrR6fh|Jw0xl0kZ}X> zP>;AmAhIu1@Ob*iE>-%-{h$9`7bs+M{Vh;8->=L3qwga1f7*P|)IYnFm%kP;h(iAK z+y6^9@&U{FNzpMBy|JbzvVmX(Po6V*P1gbQ-Bx@*TrqS{h-I>$TEMNEq z?FL0>@a?64by!tGr^&zNev-KDxwcS{t72K=`!v!LDdGz}5}wqijxM(i z#49Ina>TqnXyaqM$t0)SvkYH2O9Yi0KPi;zySsYGVq%9^s<4|LQXeYtM6@tLmHed1 z;@EakmlD$-fL{DB(E~!r)w&Y78LL@sXB3CrXmHbf=iNi_{$FI zD}PMwd`P&^=q5QU_PkbfD}EZ@#TpVV1>c`Gy6r#jq1>NNToxP%m8bHK!i(yAJ*gT! z(F|9lIGvAeahvuZsV|R1RS0w_0bbBQFUf<&JIBv^=4dRJ=J-U!qOMoKZET5d-Gd)K{>I0^CY0#dg zZyh?}Y+~=?V;^?Xd!3XMBq*p`3+$%fM2y0ZjE--Vp#n0Bx7J!-Rf$9pn{EN1z)SsI z&W9GwxG2Fh(b3}654-$atm9R`aDBmZK#%T~3fwRU+?E51Wx!7kR}fST@}9_ET#Ns) zuN{i@R!CvShlR{gDoPRF51QZ)*VHbLyUV6%XVC6@OrFNMhSMHI@_~_92|i*59rgX7!xi}+s&9-Q5iFt;-XoxA$aIVF zyTqIy7zcy}V%K7|H1O?1#zICCMnbbk)m((UHlUVXDNWEx@Hu4}u?lpdK^=dE#(bqJ zy!I%iY3}jM6UZ3ue#^LQ=F(>riMnhpAjk7cctCt2Beq}qPsnEdb9@9UFSv=8)}*4H zW}A({Nrx|@WOqR2E8@eRcLkd7+~pDc`Z*J&sjcx7Wk6l^PJ)21on;M^xnZf^8?M1{3*1C(VJ%3s@nF=2(Pw z-|EQza0JcV`!_T^Z~w`CTu>Pf(Er_>Jt)$wpFZbOWjy1X+3y;;$sd9WYso`x0wB{y z0a5&u4eFB_KZ3!D>1WD~y*w(=1bo22b*@NVnq56zZs1QH?U%P@VDU{537D`~-G9IT zq0PP0C%S5*v9`0^P}8_-W_Qj>6o+X}_W7G|$%K zc_10{4)^Rk?YpsZ4=6RMQjAI5`)xeFa3f9yBZ}&ciR-TGif2(A+|l&B+PrTwrI@v{ zQP^7+Zx$yR(t7)TLupt0+QY*tU**`)++IwuXvq8y#4l(ZI@3Zg4F;@8gzGE$B-flk$j3JmNAw z4GX|WHYnTf)Azm0Ll5}nX2xVcL|=D%a8@QPvosOA<+J~4eo&wee;OtF;NNqxLsY^W$R;_X+LQS65SPE~}Aztd$ zVmorpeZcC^rlR2B75Vk%v@K0K^!Sd_S^bT4us;`@^@g9P^|9l!ezI^QGREH}|J#eJ z_TGprKg%y^ROIt);mgJDIDN$odz-e#Ssw~izd*Lz*FO?Umy9sEe0NM-#ufC;HMpft z#9D=w2LMPS^9uV)j=07OrI+?{la@8AhAwq`)Ea+2=NFbBT|4(9sDt#C3o1l0yYv$O z*j}E71eIesr3Yz2Y3yKoY&!3udoy_x4CaE%w`(69a@kH!={(TIiSUReQjErl6FP*T z`Jd=15atX?Y(vMT6da-?!wFFqh4KgP>-3O_ovQtyC{Ps@rBw%B)R|v1oI;xOnTPft zRyH{Np)US6Ib1Juf5gfjbm!;`yAQH^7g~M+1j7}B3zH~{8M$eUXw?uci2!^|cPpfl z;a|Qllf%EVeG;FCE1ugz)8H~QG$LA-YDKeIas*$~PAu;;qH!K3c49=@qB z-gh#&lbQPWvLr0*gVJgaC%u96t!&Ne1|xpw>V@r(-Dv0scI_4K$z09fqDe+ukBA^6 zfo@_1q}r1mOx7z&Ct+Mo`@d0Kr0{YflK58f3td^%?Q>Giu)3m}P8z&&*WU@`}Xx0)|rI3`KTj1sjV2{)|aQGcsONJRl8xz_R# zWm123WXV86beUW$h{jRZs-5fq_AF2QIdK2WBpMU3uQ+qa2+yrN81XnJ9nQzq1k|ba zbkHMpo zgnNazSLPRe2q)4WT;oZ^uvQ(e>H-<)xY42RzyjX4vJ*-aXLVGMY!P3M=C5*vinhuXaC}}(`xGK-3LbqUU#pbk5277p z=i5U)?y3dJs#A5if>GYqPNddu0<7^?p!q%#59=21{7FXB#XVbjX+*!sjg^!roLqGn z&&M0aA~TvKESGmC$dP5T=&zB%w@q4R<$s~u-#qvR84=4?A^nMRzfxVu5FFyWp{-h5 ztodZ^`$sgJtVQ?EFSRuun(RX8d~4XAXTKpcj}K(l1;AY>RM1qUCUype=?q)R}D;ugx5neP)Vr=BdLbEn~rG z7GDb{cUim9jg>(ZarX*u1Ydfq<8C|D{Z>n-V3K_I!3R=RhJr4s$nr}W`=&)iOKV3n zz#5Hp;@$6&4UyqBr2WUOuuPH>;u&!@jYWLjpSUC?F^n6-w3}^ju=%GsZn>1xC%o(H ztFr2vFxh!|6@C3QPH$eQ;2^01tYc!|2#lE8#!23P*allKPm+_p{ByM=(8F!6dS+#09@;049Dy`jxaoM~ujX@vH>K0p4Efios;pweFkjlbM>u!S(ENa!10WRuFhQ~>wdnBX# z*bJ#IOvJqxDyE{^xEVDgaJ$VAb0o=KU1U7X)3s?l0Oh1(DZgPk4g_7t30#JsBNJ2( zY9Ri?=ygumI5hrNTjX1kmmOUrm_d!-lg+M-5fne{Uk6Vov_XdPNixYy!rKO}UQ%WL z^XuI7Sgxt-U^&jd-O#S!BxE*l-tvO9KK^aO%;5uFz{XTHzNiE!9}0Luz33mQuKJ7m zF^%5iMUlkHt<#|WiMSf2wwW=GiEkCwy-m-p=Zz%;`(EW#is72DjY*MkETs-L!m69&Kc4==D; z#w74K7|?U#3UVqt17HAx{5d!sU^XGTMPM1^+jIFyFPy+2r9d$p#>R^|<6foo>3{vp zYu#8ad4kBcb|{Ktuajv5!73?ZL(LMYel6{Ypy{wUb(Swf@Q&`X%~bu?omMA`oaQvT3d6QTpJU&Y z(uG2`@Vo{KiL}K>>Ku_O`Be6O7RJj!tRA%L+OGYx)dts9EIUYk{^!kGA!=m*#^;q9 zuPbfYchSzQ8u**Fnr};SRBwi21-)S6wZ@ZZHyjabxz^L=P~2&okUw#$f!V87q$F}QH`=)GF=!g_oP zh(WRZOu1%>B^bnxDEb%}+4kuL^rz|AOhLy_6VmkP6xLm9e#miOR zc#7Plm&W>)KrI7gQP1JTL&%#g)(K7z^`K7m*hqJt6;^&gTF=L(znFmtUc&!RU=7mV z|6}SMgEVWJw%x03+qP{RGi}?pZQGuOkrYU#Q5>A z(SX9*5MJTKGOd@fNrIuu^E~+AXaID+xI-D?f6-?45&6Ri{%gAffPDVE<$-b;{v&?X zH&X_N7r;nNy-%Il2LE#0-|FR^rUm_t)kv}G%CF=>BoP*R4L+>YB)m~|+I4N97UmZ8 z-df;y7}2EMniupk5oKSR_qEP6m8~Z*_T~MMkWjNdZ#0gCh(e8Tl*MHh&)mDrL} z{eTg3e}6(c4;86nNNey3;siT2;YN zAtoWFWZByes{6A->26Cd%hE3FRvN^_wn=)Md0#OvCDEU4T&Jv*sVwGFJO1J=0ank% zx8gWu0I74j&QK+UFMcB=XLh*4{0%AIF0E7I;WG!bWfq|6ghVS?qX@>$QQ=I=B>CwF z0+(i{W!IiQ#*AVryL8evT0-vJpm1vz3vYwXWuD&hQW&%#nxit~P|;{RQxIcdGT-L3 z{@%lE1*BvZ(Umnd$$A(#Eu@BxVBz0W)FEot;|i>#gO<5nd+Gc zzwBV(Zd8Z>d**jxb{Gr>2inI*`1YmaL=ckt5bgR5|EdgvQcSg?DodJv$b#{Um*u}9 z`8k^t2Y$WZa;8ISA#EkH0s0rO@Swovc8t@+&ls79{D{dEj4`Ysz!^bXw>h+oaMxqf z5??a|v4`}d{$@Lhmy4?_+cGiL{&Gw$CAdxJ{+{9V(5M@r{__mj051wkf$v`nf(=ZR zNvDc|*NTDj9{+MQU#CBIFtKVHwqU z=Fh`-_>A%s$~GUGRk5MJB}yYD*Oz~4Jp%`j{N}u z_MhiRMeO&Fm6M=Q7VH0|Z30u#M$ArvsIgE=LPo6|p>UrN=ZxvT-AQP($pU0|@7B1P zB8gE9%!KR)h(8C2En9gq8G4Q2R)tdua|?GrUL(6Pd-n|(Q9U|$mdD8=3LLVdzH(p* zVeGhAWxg_A1nJwR-srd^!M-Dn6#`=O$Bd8H_v@BCe*n4DgmPjF?&{3n7cFn+lDyR% zp}>6S(^FP6wK)w^5?HTL9;+VLi4xe4NB}0DHXypeXiyYDCSz4wqSexFX&fu;>%S7B z;yu`HrU{899gC6g&+hM?SKBJq1s~PDu`N=hru>g4!5CBa1Tnisea_RFK#4`#Tv+5H ztg>CV{ec}$lE)8?ys~6VadsK5L;N0sqNQl%-vNo!6DLMuB=QmnbP!4_zIwj)%brkH zkFD6gdiT(x0X5uhtR?Ytx5Y#l6}k>Bg&|r=Qw;dQc**y9n_--b>cw-&JPO>R(nZ}? zDJ|?h9Cvi;a{+Rhzv_`0?P}!!&e~y2zf&S9LZQP0S-g8XMQ8Pn21iwXgme&Tzq(Ge zUUv!pD_2D1wDHZcsP8Q+UX%=y%7IyU$MKp(MO@ga15Mzq*Toji?|gz9Aq&H(s@Kct zgh^H)*193k(;{X|aY4h=hYT|>7W7+O?HccVQuP=ZA>rqQA1i>D`QD^sh*%)h`)B=m zp9w~L0!Yn(7}9+Ggw^jF+F)v)@tZ((*i;}%lnR)W7VgMJ+yPDLD4&v3R}9H~g|m1H zuguQkU0Rq=!wywduW_rZk|4Dsa_>z&uZvB#o$7sxrI-w*N`(+K`+)5n&v6e^$vhRN zUdX`xGrzNo>E!{2tAD{$r@s@q6s9tofKDf-fbz)Vj{|RbL|O{##y_q)u~-M|B+p=!VR^21y(4#cxa5!M*Rcw0(x?-Bau{`uv3{b-Bnn!4mI)9 zG$<}&Yl*o)Y9F@?r&Aw~^f3LXl6usJ_dE5>8vs&8c~!{{#N5BwBx7U-LR#%QjtBo^ zF0g@onMx_-CxZz-)u`soZFH`xHLHipUK&{P{_YeAaGQ;~Dy_RtakB5qF%r&6;B~L^ zHJbw=!i>6f?h5{Dn$PxJ06`l&_3ZA40|NE`ICqI2_&V1-j-)G3TyHI*8*pR_wv8Q< zRYv-T8i8LUuSS%0@VY%A>>6+Z65np};t3)5WM{Qu_d*fgr6}NVXt^pQVi`1-JQm^6 zy*)zi_npsu1?wE;G9x>xBr&7i6CD|G6AxxEb^EKw2C-7wgn`dcOyYKMSlpVEiKnVj z$j2qIHP9(iV9XNPbr$~QlB_1iJONG#0Y<#9=R)F>54SqV>Z`xgaUX|%iUT)aX08H> zYfUHj2nl&?RsjYMN3-)TwNbHta&~h4P{2Jm+TP3g8vBh7odKV=Ow~2<`?6x<=r!oTFO0gv39C~y0 ztFG{lzOaI8S`lDqo5;e~e7iQPgu!$EGwwdPCfU5K*ULgp6ASfc0|vm8ZJdkbJyIB{ zSg~LG%66<<3%hb1>5D_EdjgatPLDjoMqRN_Z)0J$u*Qo$%CH&MG=m+SeAcN`=@}L& zYWx z%`MSbj?sz=VcOOlJS!c={5y}yHa!QN=y^^l(r%SBf`f5heJ`@qb6+O6)Wwu}J28A1 zYhsakKuS`M4JU{17o7Kso9(RWLzI4}ObgTSeL^4+u}xv*j@g{x=&X6XqYH#VG(L%^ z4=zNQqIH-d2_Lb|& z11X~x0FaFGsVIT*_*GT!IX-kbV;_^1`yNE@mWyG&D4qTTb#7nd!oi@~qQ%(8$9Mgq z>iw%*h^i%*gM~#9i8NNl_%v>l=|j13MRBPHht8k>48;BuO2G`jiuqeoz^M7BNQx!{ z3J+!ummC!Ab}U`nOxPX<{_?|Tz?Du3LDlT#NRTt<8~#?Rj%1on(9JsK8CN9u)^r&g zdO~Y^eSfV5V)60ptU5k0R9MCEx8gAbVd%|X&ko8lJuv>)$q7wGLR0`m3t)G^Knn#W zlrBNv&aN{oy!d7(F=4I_jG;Ya2M^30ukuW-edg6E^jOj+g>c z3?+_DODOvww>F}iSIE)aw{iA2>F?+g{RMCo_{s~ zNYZIb3h~X0>pjM~XnSpZiIOq?-X&WDogX{4&m%ZcmpR@XUKzDt)Hgf0!B1ag>%|X9 zZOpwYNrH>+QUT+(P9N2EFA`YWGL=`eq!LK5Ysp!lW-(NB^ z3Pzw%9>||VI<+IAS}Nyl>H9MSMRpga2qureaGdstzB_Xvmj|fEnHG*Px5! zG<3Dy9x3^y?T?czVVjXy^Hy`EQrDzax~-RHLu~^BC`T56;~pLm47>?j3?QxN=`o0; zEw(QRGRp@FNITVX3Yqi9R}Qq2k9S!x#!?#@C-Kt}rKvs=Mr<`C%?Uy4Rtn@t@uc&c z?sOt6YIQhK;Fz;tAZ!*hwP)u%VYhx`0i#p-2m zu*r8CMH!%RyJS<1JPldL0t%*OYxXHiygv>?WPzynyS|iNun`w+W8EP~H7#zsNR(ic zu&%ft4^qiO&h1f6UwjRIV@j0+4BE`l%fCsX<#6BWX4?9C{FvcGVX&nF8(-$yLXORG|9M@{&Zxqm6$JnmAw3V{^;leKYB zjJeH6nf{9sbwB0E0H3XrZOeB&l=C233PoD#|JU$96z>r0!V*0@W`W$VNBmLu@A(d- zFjVnwRQ2Jw!CF=K7+YF=Jo&#*s2J|tm@WEJkCKO0+<=UO&RXJG8Y#%Ty_WiA+%mm_xxZ#e)ro z>NzWMZz?0Z=l!)(;)J?%3A*oDRxgHuLwKs_u*Z>WopcA7k zz~8NaFBC)R;jLbt&*MDeQq-a1d5nlJ&>F8bN+Y^OFdjUP+cL7qMZV?E;~QZ&1mZjz znp3A>Mih;0Dt;T~nruN@8jVD4shygGrX=^LU#1aC;fsRj?|R}yM~l=@hA-eKtrf>W zvek8{81t8I)+FGX@51BOgJ+P1?7Df7v;!L|aU{;iiaezUe`nJe;I$lYs9zC{Wp#<| zI;<$$xj<7&7by7*&&-1uny;92uMFyGmhRddoYfwOS-TG4J|999}q4mk4s(IOCW{7*lFkWf4T-3!Pc01Qb8hW3+XxdY`o{09rm zaIP7#8YYNO-+a#LBMsshZ?DZ{e47w3E4df(ClY!N>-E7piEWQ*mfhFmvA#*$wyceb z^Bz!evL=Wye5(pQ8ppk$k+9tL>xx4*=WDNEP;@r_-cOXJ~f4Krt&5DrIo9v6Yn^A zK7bVr{EQ@D!{C{KwCR$(RqW+~8`%U>N(JLPpA9bgiL{{N2n*SRJT!S)O&{%4*^YcJ zK*L5?@o}^daq!9?$n>-J1T|;m(E+`_di3B+P%qT^$=ZHr%*FS(j?S=;)#~X>0c9h{ zfp1_$F>P`m5#V9hYE-=o6m>_Lxa~!yKPx+hE!W2FAY{-jaaq}ERC>)%uB5})os5oF zc^9pta$5Dj4wB38ebuqFD%5F)_yS)umkZJMfKK-dA3~i9nNm~JyTVq6ouRP)E&fw> zCCvPV!Xxp=2hxATk}|8AvMu1PnsQ-SAM6h|nP$in=&`x%VjH9|N2hN#I;l#)DM5sCcddV68orlzhn*%J5~{)%d?r z>sO(Rl|!J&E&l0Cbna-j?E(vB-sYahYvf|VThPvRh=D%GcqJp*2;qzx?9JblDtfxU zAksR?k!zX1RB(F=pQ3*5w%wh*Tq*EO!*vTCywL`7&InqfqqAp23RpsI1rC;1Mp zs(aVs6wDoBKt1i{#0%zbhKg}_KJ^aeYS{6v*`{;?spXSe`=-hK3f8x6QHMo_dUi#v z_??UmtQdX^+#}?D<&hnuD|SOlRZvW4`T5Br%I~iz;~D9slhUsleHkMLJq1A&!PUB+ zi3nG?24-7EkN6fEL!*32_(e{JkUD*Tfuu>5%d~&7D4Mc%mT?LNnTa&Gew5bu*~x-3 zmWrXQ))srifgeZ=mR|bw#^0bPkAa~hZNrwpSX$n+FMBRIRFjUPgE*F$IL|d3i5XVjQ_8J*){PY9Trntm@2BZ-NnW$3 zKtfvE;cIZ;qOS2aiODP(c@AP^SEdA^fCBa}cL*88@a@yQ01AJ*3hMnISvCtPlh~9_ zk^s2U%<-Yc1MkwkuTBl&H&sV-To|L|H&aR?5MBA-=vq{9e3#;(0)m$|XNu**$rI`L zkrKXB zyR=7pMI%J>`eB-tveh1eFTFnG7#^8Y4j>{m326epi!P|J*r172#tviT^P6AgSu#hR zsPuo#i+jJmb?|&`!rY#2!f%35vU4%-K`T-MLKG&Ph8JV>Mcgg0r_Li%d>cZesNHBg zC)I-D8+Uvy<}lYuXpV`6hQ^aYSw?o-n?(n`_B(;|WY!NC8r~!gC>I^ewLwe4XRW0^ zZ;8Kb6h(XXx6d4Y-7#R1>@u0AnIGk;zkyM+Xs;nT!ktY+=#hWHFm|HO)3<8O_E97O z={2hmJh``boo+WYFM*B2Su<&0->_mc8wLx*`Kk|aF_MEsTa7Iz15w_M$nlvCX2`J^ zE~EA3QF+sfo3rhC9DwfZ*DN4?4FyRy;9^q>rjJD-n{87@I6C_O9OQSivV0EqLy z`BFPCts)O*YZ73NkGkrygeQBKt8J+*v7!!$;JJKR{=bTruQH7H;}qd^BA zT~B=qkz5%!jqXL-u9)FzSU$tE>MRW6(MgfzU0Tfe_wVV8geu8(eR-Ea4ryFt0&51W z8Zv^XiA1pi8*caX0);8LQI&7wZMEPv*a>L3+$lvW(vM(=Z*yQz5Barx?Xv}qQ0A1t zZ=w0^85}uoHy;*O-amNPN;N2{72&c zD7RS)9kgO`x}@qTMmaFb8b!09b{4CR+skBSH+&WRDZ8zxoG$#rn9wI34+zs-f73BC zNiaoqYi6o^p!UZKoPDCt6s5l#h0BQh7!w~S$s-AL3xuPP_Xh{oTF6yz9Y-}(ls@Uk zjP*ai_8f)XYRfj~P0V5@N7=4-E%*(;o|j-#@&M>|XEp)L)3`HT+^sB>%`bS(GgbWf zQHre4W?=-IEGAUUgTyG@)qH`|jIws6h(4F$JG}>5U>zo<;MzF8?{FjthnW;rFp$K( zya0kq3~to-u}mVLJ@ou`ZR{_`S2Yng>5tuJ-38^p@2?~Fr{~p&Xi(7T{HDWxy`*>F zE%jnxRSS57yG~54^m+A1{blMk=UBU&w{hUnaTn&PK%0(;4VwGs5$7(m+pX$i31s+% z^pChmZ7qEO7ZL-w)yH!+n#@lNH)JDPZJh8wn1y_~Bz3+spCcnLFH;&#%(8fIW4~WIE5PY#cP8N-n(_e>pMoZ&8UFy?k zrJ~s}Ku37?6-Q(0^hUVE>|DTG6j-ER=>(X^etb5^6#J$%6+;c=98UY?qdY>wFCN2x zoEq{l`k$m zw;3_1Lf-AuQE4&LOFU+tmGgE-8AhMbr1$NtE_bCcr5e#F9Z0981Jx=zruH z=1Vc3vfHWK*9Qb6W;rUDoLbcB%{!od5mw0JL+GSP{8E$uDji>izb@m(&dG~bRXw!S zi~l$=i9^Mj?@|yKUBA=$=(Kln$%{^%2U)j?yfsm-;Djjmr^igL*~xZ z7W&Oi-b*W{ljuw_sgP~4PBhsze*j%mcUkREMqdt8+u{|`uT6=??lnT?#O;vndv zy{)~NwB990GyFXp4{nw>^qemY53caG6~8?n1IQz`V}@$$DY!2WQQWw>N=k*ZMeNFQU@mBVXUoiyRZ}ZXFbQ65$4tvw+~GBwY50Ii6p2ln}CL#=D$oNr!SX>28qQ>3~3lDyEU@!O0y$Q6u7v{BSPG^c+j?u-Xk zoR$;2^9>W%gl=xV;^JyctqZj1yoUw9i-3U|3WJbs zl_p%Kyw~>q-|yCu;5d(5C(|~2z52h2YNh;9fFjr)2T6w#U@CphAs_i08SUSzms?#8 zh<#cmaSZ`j0{#+j5EOk^;@34{RnDNfWOf}*EA6$8x;TjG7J+B358a9zkx1D+Sn|z` zf>+pbR@>M!g6bk0-`Ph_%s@`wVyz7b}I@{%OQfN?W zlCM~I#m5a9T6Cv7K&>Jzx~?hu{P!b5TsICq$J)E^CdX|A)ud|@zWVF-O$nzv!LAZQ zuJ+HzRREr5dDK8La1)PwTd6soRo_eBf=GCi*)Uq@c93mwG& zHbZTCl^|pY@zFKH2KU^MjBw+@(gnuhh&eh~(5*2fn&soPvgo$>btK#dN(Q&w10=yW z;o^B%x7iT@?)vtX#`rsk72Ii6^Tp^9R?C*C?+)u}vG)MhE)KesY0ngwt#^fy<0ugu zG~q&YR>(QW)#7|f#dA~&vaTo?#lO$-clZK$O$|q6PL+ud1A;OZO!X4PXkndSllhfHl4X4mr}P1?1|y95C7l zL~OlI8;41}#xqSF?cwAm{$A)_6SBE4X~!vTMxHfLVUe5`_A)?KIwQAecGBYiwoSTh zPOK9e35&MjV*4&zoXRsw;!vNlhRJNCU9IZkEBOT^k%&&rmk*Nu;Hp6z)RUxl5A$Sy zsi@=LYY%+`>rt%E51b{wA`Y6XpIKOD=(jT!YDhKgpkjs6mKR9Mcg+8gVuzKN;}j|4 zzD*;$TyqLNfsJ*XT>;vj$a4lDHw;nTsS7$%Z0<1WLzj$gV`VqJX0C4}bHiAkD<^BvW(b9Z_&V;qL z6LMYBU?@}^zHRDVEdou4iu1RUMM0QmK|xtOC1Du1=h!oT`xAnXuy&xgw=W7CeZkszJL(7up;)EAe(hf*{s{XKv)sIP`R-E26AJh?f%NV@`((Jp8U>kR_htw z=ig|0BkZJ6@DNCg)ErZYKBI&^nXGc+Cr^g@XMF-XL1=;n<@uyNnUkx-wTh*Vk61H0SE(*+3Zvpk{Y1Wva``Mahl zApzWu!R!Q#cqLqYkntIu%zrlJt^v*VzSVj%0J=QmhAj~yNPJ!x3IU`uc`>5YjA%Q) zWu2Ciz4%At<;^lkzGR6x>(d_2?N%VR`tZ`&+rO4#By=wv@#Z1+JRX99M0J~z%1q-G z5z3>wUa%6ZC8Fm(gzQ1(!P)mM+8Cm!C3$4<%0xLI`lCYpr5(zf=yJfVt=@+L#Z|pK z5kiJ84J2vS<;chy*o=f2c}V6E-t0DDFRJM9EE;nXUHTWNqkfZ;=Shz!@i`7y1VmfP zsRYU0de#IaCo(7D>$i6I9wN!fsv@P0o|pd)TwoW0APR_Kj*Ji5JU*l2?8BlTq6dP4q4YzwecpJdePNCW86RR}uUfB}Au?bg|PP`GWCwBcPd?!iAYAME=LyTEjI0SOsrf{!z zgklLSnu&s|RuS9^Tw7yruJ@JnPv81CT%kF@#BP(LY7ADQ9TS=4Dh}^Z57F`@FOV| zIm?5$f1KJ`<=E;E9EN0Pcmu^9teT|5&&Sf&l7qJNf?-Lzw^4!z7^GrvCuw zo&S_lXeHYyL>$!d4O_T`=ncLq*%Lm8M*RT}tvi1XG5|PLoH8rC$4?r7H=2TZZG5(b z%!hu>yznh(_2&=H)EMH|MZo(VNXQ6$9{hakNAc`zK|(G!&t1EfGjq}{=%`N`O&pjm zO4x2g3C5(AGjvQn8GL&k1BWY>J|M5AG?B>ujms+DCocx!82MG!*l%7y#*OWqgLo{4 zE6=S{omZ#6o`SdAjESTi7&%33Q;+yindMTo2!A4{BF-2|JZ5!!J4j|p?O&Z&Tup7E z4!El3I`yIK;Wdj)6iQsQhz{ z0J-Ebs2<<{1z=xCR(;T25@}w3X&*YJuZ5%;&KrWK=D*zg38?;i6+^_7O8lM^Fho8G?O9@K*2t5ZQI^ES+yVTI^O5gX$?T32Ak_$sZYF0ehGH zHd6@5CF>H$aV@%0=OCO83|KmDPA#Lbp^knUG^Z~zQV_#dogG%`w@PJ@U~ z{(!Dnqv=7qQ1MK0R9B1-LDHZ38_Ya_B#mm9o0&q;g7Hl|%I5Im^!A41mhU69+q!mM zFN&vkIOe93J4r;?rx%w~PU0M+y|hTnEkU7+a-g|Yi90rkHsS1p(aO7VXV|rs=kto8 zs<|nZaKy2>mS-({{X?VB7^yEr%fgF;m9wk#o~K|R5AT!B!EA%*6AAX@Eqq62FL&4S z4)x5C%aGMh`0(-H(}IbFRjuZZvTB4^vKvo2@gi}Ax92z)4%n1f7%RxSr7kOa12{ly z+zAjCAWYA;)i<&5!CFkZiKjwX-hZU|d&cG}E@kQ6$0ou{tu6n;b9S%q%@d98Wa=CZP5s~R=2E?(TrHjggq@w1 zf0)lnJm``DZQ)E5h{H=`z6CQs>>Y;JA5ORabZCbjw{YQ0RGB>E6wm!clQBo@f zZF+VI4H5SD@4+`MOG`~p{-(piWh&%SXFa#`qaZil{gQC0ui1xYME8)EyPo`TmX2Q_ z^jSP^x51`CJ~d&w?PXoL)8%dP1oi^F9=RP73rCT2Rvt+&zZAAOJ;&;BBt%imSJ!+g z|8Db0CuYj4E`XZ#VO6xe)8k~HX~i(sBsVx!_mP*Bb^c8jm;FHnI{(M{LDI77&7*NQP`Dp2Y557rL)IlE z{TkoGA6hUjk0Z5hr@UE`3g}>XD*+tw(~}U3bloVDP4eI=Ify&4c<-L;3nnB~rd3~L zVgALDU|2bom*Du$Lgy=iI(v;fsei8Qi9twX$!BlsK|XoGQ_MF!nK|syqzBZR9<4(9 zbEq!pq}yn`2Z0B0HCFWvO51SPc<_l0;DU+rayynZ^Rei--ZJ{Qct?7%r zzb4f*({*6gjGg68-p4#5TtNyK5Fm#}iF@-560kgP+`&FMPJGrNrB9sG%_k)zo|B7Cw;5x(|#mzsf z52VqAvAP)SL>v3LZ?v>qDN2MYt#!Mdnyd)9%Tf5-@HCgiX>}(7fH%&OPSwP|b z*OJGzs^&e+x>qC{jC?$NV;E2WGkKv1Q4XNXGTFf0^ZZ*>!0(+hrHwZ;3kI8UVA;Nj zf3@|^;uhH+fgcQdodI{TH>&1cG=FWrJ%t+0C#Ur1=eUjidl~j)WFhQ{(+?l$FR-Y2 zGgtWyhz_f8#~22m@lU42(@@q}E%RZl_=D84fu1I~r*wrq@2R7JWRVeW0$ir}RqLDP zW@DW}W(0Q6^hkww$~mfe*+OuBYt1(z#V(^QoA$*hv5-$wlm7Ci77Of{X>#6deD7mn zEoj=PFfc|dl6zD6fVcxq;7tlX+P&i^z?5h5Jm42xOekGVbG82H=Bx<^eOR#Ey>caf z7fzQuq)-_W<0-|i4~E)z+B)%}$ar4Rc9En**T_41i}dsvp)to#OE&AUIh^d&xT%#9 zGm8qSPkLAl$2PN&FV$Ywb&ONIieP8|FgEN=T}i(}{>#qUB4$VcGUkk56oxwVa1abc za3FcwH{IEd1MHx4(Ag>jr!IHbDhpNHz)`|(49Y^JFkejp3-Jfsu|xnyEy{+s1Z494 zmfhnIi-`ajj^JsHkpJML@@eGRb>*^)xQmShRc549QM{yCE1dl}J$iHjL?bK%r7sEQ zL>mE{46&&WiK8|NNi6UNnE{U}x)FMit94OYJ``WZhr?sr(qBL!O9yfC&@TyBn%{yD z8rGzxw<=bcE(sTwsT81UyW+T<{Lc%li53h{h)RRM2;iTK1SrB&+MIi3Dl*R2o9)I- z=v39kl=3&c_9-qI+O9}5@-Qjgg)w0>Srua=Plg6zGMMi#5C7F7Qgn<|FMF-SC6&NU z7)(H4&u~Sr{bmLkA5dZ)e3dH-Tf( z%^dB6PXnZvPwF_Pqu}4+@zr4io;M$|d^ezhHzG%Ts&cO^7@*6}i1m*I4f^qUp#=V% zrf%U?QZ21;*0|K*-y%Cgc{ke3$D*c%)ffd^*)){%o)4 z#CDJieG|*WHhn+{HHYkC_ZbPOhSJ3gOw3**!N2(wYN2sml ziaqSZ1_d6eJ@U6-_dLTqnEdLE8+@%-z-7Jr0PlBw4}PzZ`mcSi;8VW@LgJDF9=_
  • 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

    w4UwW@nuE-T;b|G*Nr=9JF zUNB=i&*E_aL{jvZ?OYA+iSiT6Jl8ucdpP5L^l8+-bdOwWsKOSM9S;CfNc!jCg_7?R z@V*IuvVKj8d6~ju(rL&Pu2Etq&~pxPC!``AD^~f=RZG_(^H}8RNido{3~!Bro7VO; zjTN6EjsiMWcut>*i}7ZT>d!_203fWRj-!!@V<_@{e^W_?gNdR?bEaOTblT}s)!g4c z9DE=?&YMd7b$DKZ40=IC^?T_=Kg8Ekw~Dy37HVKAzVCr@SK?!B^_~#5sZ-n zBs0F#r3Ua^TCia;vzS_lpG(#rD_20grSt_*zux?tNax8=AZv@(UOWKo?}!*s;Di?H z1||UaDBRj~*{jZ!PD4R2)Zl7a4n_A+JJYZ>d|JFdn7^be9{#4@?>Q-~$?--l&qr@6p(X*&e#s{(b*l z;Edk(CzFyz^n72kX!{R`HGK5P?_+ExCHa0dasm?6caM;sEn^f83fDz*(vT*J@0jmMU!siOo_hYV_3Fvdv4hHzuOq zHh>^^2#q(lGD~@hvnGIWzmOhlz}N{OX5qp~CHG5)$MTPXuo!xCm> z32+b7zeZ`*Fjzd8knQ9yhq0wA5`bj3jaUxs9#QEzR_FwZY;FeVBd-__)vyHtUr*mF{&GyTj9_XL zGwGN>2Ii0jv_k5aJXlcaJ9cA=vQ^ z;dH*k1Y_#6AYDRljWgeCOSqb3T@!0Ac@cM`pv0ehHv61Kr?2zt$Mj9Q4^lxVWg8}X zD$DXl>=bFf)j4z7;o$Cjah>A!A@aOd&}$b^Ksoz1;olYS(Zjl~+&u+`neJnF&_PY@ zEwaE}MVJQ+e8$MjA9e0IY$$-n>l%*toPOlH&0jC zO0!gM(Q_j7*2AN^P}4vP?PJt!@e#}%86X=wTOYx6`tZ^p{)?P{ClZv{#`jXdGs}bh znrn$DzhZgb0?}wx~t52(^E-eVOCC8xfeD++hIrJ6_Og=-enQ1KFKr$tBYNh$SQQx%~Py z%9>H;8HC4X3|)$3J$m;}=l!Iiim?n#G@cT+7EA~oqAAI%z1$ZC=Lc9U&~*~!MCXu-xDA=1YVQrLzUpi+U22oiiw|n^L1<1}(FDZdml$1zngXeCgbqdb0;`Jnl9$+ z63+pH!n$Rpm?Al~CpV3IiIs9{fVnCxYxihk4GAj00t1m4zsr^ z5yA(=)2CZ0uH(LBw>Y3a0fJx38gJV=k-cNtt6r<{j5N%fcVCiwxsFQi zl+NKxa=(DD|%XH=xZV zt4e_wpg0WV`A1#YrME~(OWbzQ!}P_U9~37VOf2F9ZDs^HSaRtqqW^RPWZYOEn010j z;S%|BxKXfh-I-f;GU_~*BS>0C3tA&JUcC3HmBa_xkyXYO;7In(}0TdSsRmM)OsAX8n>{aX*E;#v7PU%tBgs zm>&UeASPa*214%G9|Jj*9>UJyS1;F>G)Rw(t-FRT0a$uy3d_-G*WRo;>ZMx3nN^0G zui$QLUR?;$&GjrmONjIaPFWb2{@foxVe6D>qMZ0i$_&43nP$>HA{&4AXOC1Vnw~te8 ziU^k#>D`ZfGrb%IN=4dIi0myPY)hM(;i<#QtCSdZqWgx6?{?qk&Oj^JXd%nhk7C06 zh8K$*tIxjn*Cy|*??3rUUXJ+?u$}w(!vcUdgkY|zSSi|6KtsLbNr0Y}+J{Qtj8tx$ zU1eoBJ66UI;~R7u2c?&NMB^DA)mFT5@6P`LOH(jw;fWD7Vyx|xA3mupKISVjd0MjjO45Sa@@_@k9~`}r@+1nDZY)O*p0*)2x>@z{l) z(i79+j#$5y1#~ie*sd?HbCw|;K%5`jx+!&bK&KbIUzvR7(zkDR)icNy z3jcl+u)?I#snzPDveJ0uL*!~_Hm9@^EP20uj z)coi_%!MVcK5q+`iX_U;apB)+0=AVg>(RrwVM{jXGH~UZYL0eUb@f|#EIZ?nBvRG5 zJ!Xh)stNwD_xi7h<@dk+JG6it2<8a=mkdqzvNQlrwr)Jvv6R1))7|LGZ7Io2h3*_r z)cl+lyFmQpQR$^_nWC2+vm`!QY2dw=VLg~0n>QTsu>$Kqy!FC>>6ST!KAvMD&5=wC zCGjAV!Dfpma}=HS>mwkRQcEtxdeV8hbbxGBBh}Ruy4a)cY4c&w)!hfnP54u^f#`eD zp5Tp~q4KK$?QDbK>KkaGS>@2gU<4r3^A)zJ?C;jI(qMQcdv~Zw&*@d7hz~;emviMy z&@h^?U%PYs&TqGE4qK)JIqmY6m#*o&Grl|JJVqFo*cdF!l8Cl;<};=}9U_s1TPnX_ zN&latz=p$JO==V$nGoW}KYzM^zVyuR7=QS=*60ihVQOfI?657j$!HApT>-}{z@YZW zt$Pm#1>na^R}r7mQs@J3+0&ar*k77_ZLzo}JMl&3AUBG)sA=F%|zL zNJ}OZiIT}5XONvA#&u=5qt#@O;a@xs3m$@iG)xh~tqWr1@f*ui}=NR@6SiO1ZlFx2Y(czeODrEQa&HXm&1k$9bH>}E%^=EMn`p}xY z+|pLNNOn*l591DnZq6^EqffggJ^#aHPRS#_`w{$M4z_H&qFfG{c`m6j>(?nv%k_;V z3pKqi#>=ZV*O?kC!BVYi8J3fMQQZgwl0~o7yaTxc2fx=bY6b#qq=e!!0z00zd!+a> zPC^yF%@W&d#9+Vmhmy}W7~A_$?74gGMf{eBh?9GxSk}tEvAI(5G*A25Mp2V7X1S>F zAIgO4-yC+M*Wu1^V=JM(8F>%$O5XsMK>pfo8`9AbkP8D+# z;%M8GT+p2}0uvE{@QByso3L0${+n&NXu$QIr!!*DZ2(ojMx;$)o4HE#9^{au^i_*( zz5jq4sXXuh>K#-5?ud6)F>xs4>Z}fS3^qizL$f^K;LhL6*S);zrx;tf?KunNK z9avEH)KGC^8NAp;?0%QE1@klc?U*b-l>!|GM~|nRr3o9|0QkRhPqct<$%4zHD^vb? zi|OoLi!g!8u^6a!T!{WDCw04n!=6{?LzM#4^hA@*DB6H(jtU90-O80OLLTOXbKbcw zUAUBW-X%;acK2vyG!FYnb&Jhmcy#z4olH^&u(+onybf|}qOs?MAuEG<>_iHh*iLvhtPVlonjUS{d_3D>O-~u* zj-29pOKKEPk!LWIBPA{$I7mOY&No zce`bs%%jiZKNQf#4%Y#lprgLAnIg=XRA;{rL3=(mZ|%-|^p#?RKV2pS9a*DB@Gp}g zY;=t`o?ekky|`sMtxZRK#j!Rm1REk$x@?DKrZPZqp6XQkr4^mG{$_AVyO;71ra$8Fl}x+Ye#uco zVyvy?H$tdzUS##XuY(wCrLipHX)mW}$h4zne)h2q zKJ+1LmFGzgosI5|Ts)a|?q+TRu-e8ih*zP&`GZvb0QRmLQ@I7SXzztEcwlgW z8dhW$t?t~#2fF1t^jXFb%||qE#~h_oL1q@HzW)3J)%Xu6&B26zTaW+tA!NJ1D<{C5 z-*V*#8gI&@Yh^2Y!vc9wlICa{uvhqs~LSAev-_*hbVZMZ=DZj1gYIaAUP z%Eyel_DO7c!eKQ!`?-+S-2iXkvbZ69K`s=HVXde61`~V*0Bip585Pmo-ZyR4l7n}7 z=+F;BU}8!_s7j8=`iWMDO!!dgq8#H9wu{2ypp%04m5}^Vx<)Rr0wtJZ*y8Y9{|ZcM zt_lSkyFg{P*3Mv5lmzo6Nc3sT($~jmjZ4}0PggY$l7w?22mPSJp9%-jR;oylSU`M4&$9JPAW(AY^`3&aF~~_&kuNBHmqzLgIB*EqjpvXfVvjI zg_-*!Ec;ioo_@T&MoTQO&jj*nnn-%ioXIf(DD`m#DlDO-wcoM2wD}+l!#%AH$v9c+ zWzC1_4S(yS#9b=Nsc1sRgyX$)^-hnR(!Vu0;D3`os!Jh&MI5K>r*vgf z0&-LRH;&AED@qD7(cA1xuAZ8x!4G3MKQglpi=0KJrroal+Rz`p%WLAak*eYn7pgcv zwB%Rzo2^+Wa)fDULiXV0i1oRj>j+cMUXcSd;C4wSNnG&81xXPkqrU2y9Xtp>Q;;#5 z-#do!=#~5N-istN*1FAL? z)=oWg8(M|NvrOI-+#0rG$|w8^4=}+Yex;pclb7=;`}P9Q&KBDnq0O55N8Z6CrstpR zYf=OgWAz{bOKNEQMQ#Z9dw|l9^MMCAC))k-|BE%XNFsv&gPmI6F9B;Vm|^k%60npj zRA?1gX$TIX3WpM11SL9e`VJLQr69v%pw)* zUerB!G9c^E493|;rJ$Y{yYllwKeXY{rBa~FNqgmr?*I1sj?%6zL01mYXtSlmkkY$Y zq|IBiM2xQ-*rd!TURareY4?@dTmK{kVnSA;Uj)@@KbZS%)VRKpsiD9tne{$vwd6y0 zaAUDYzk1%`ts{teQZ6{)CD5|4=cRZIr5W(7NqW48oCaTk&`zOLyeyGjQTtINd0j?Y zUiob{q#SZ;8~fUA1IlneYjG8=s_zD6(yA!{>~6O@=UjI^K==Eh`Z^s*2J{RGh&cRs zU{_lgxps@ZyZC!ekvmUM{AgU6yrRAM*jY$bOTbFD4cH8%pL{gS@pEE|{#3Iz7V4*+ zwdTnwXBMBDpOjllGRZAy)8<~{LVOkUk?b+Dvd++qgCi+;-kQZ$;Sj_=rJL88oIa3? zXTGb;K-gwAnLGS@3?5ALs|Le5xv)~ho6z9(oTsTpjjF&G^A>1)%*rvlH$xCbX!B_{ zK$_*DYtqot_a=BCyVOzYfvvGjUARV2(#f&mFNi1*WQANQC^Pgt14QZbA$8ValQ^PL zbv3+gB;q(I{fkZ6RC1ayD{#(YiH;}SG?DNFRQ*gHZ6(*qp9|G4AbP-Q(pCWS-7*=q zhASvaYhKA2UYxcwIQCakOuDoWajLqtbtPiTppxOO^hZjD4Jd!X=cK|)AvzmqK;+Ht zqR;j&)E9QGWWj@lbX%JuqEyy984UT>mMm$n%I1}iCqZFa`EH9#fc{?tMhGN&C8HmXX;-*y44^(Dqc;#0N1DA$Onfa-#zj0Xz&tk!1~r{5$;W>(-nJ9DJ^ z^k>m%?Mh-E#JYPin@RjZ{-;Y|M(sw?^6`Y;VjcR8r%X%5`5?mgT1YUj2|}-@CcB&3 zhj2YpGT6u=*yzdTIG`HeK6zbG{|dm1qR^g-oFmk<(sG`xL`HoeOsvT#2QR79Po1kY z9)87uRxR5EiqgPFt*RBUY}ZXa<*q{0hLE=cr2Q<#chFWd@mf_)5m8*#x`1 zXASoLCzPK8j1O?2*D9?t4-R}Jb zoDb(ZgvLA-V`SaYhqzeGFtaawW{!}mIHl3@ngDm%v}*qhoFNUd7UE(bQEqN zqKCK;Tf90-?8VB=5E|51eiobT{S_ja)M8oE7(_~k1ouA~N6MRx_>b6mu-cLR2qe&c@>< zAwP}>R+uB-U9_$vZH$N<&@yb^;g2ue2xdbn_iTN@eP}mka@r*YK~pXu$j5FnFDK!b zb|WIvKw>hvaN`YkO3}k-^IANEA8ZkkjDpmv6DVpQwH;=BNpB%jyZo*Y!XFeL8v9S? z`JuxL@A-q))S2EtY_bEI)$5pA5cvb2!m3v_n#`aS^eB#t(;lchWUqs&6_I1C)bV;Y z!NJL{p7nTgh5Q3%^BAojlI`K=NWvWV>F}ijVIp?1Yy54x@DQK$pB*-{pr?NDf8uzx z9Uyl3lRc0PSu7Eac~$RN98pD8aF~@h&I8e^+edjalF-_ZVAJ`w0zCf=p3z^Q@ppMzhP-J36y-YK|oh2q%EiYVSsbtb^`Tt}O`Hz2QF>QyRTtB#~L zk{K5|wmAi?l~cEJI>-u7+PmycBw#nDGVzg6Mv7T^?B((pj5M4|} zsAnxtQfwS%Np%D<+cSTCC~C^*3KR|icnms>$d)N;#G|P{PInO zB=>i%N)=!Gs}dbgvSXNZzKqDOLS*#3sw*!;{mLLTiLM&pf2j__2QJNK_xQSm2H4ySQg1Q z@q$-y8%SQ@@GR%>K}vJDeBSldaU_EoBIwKbs`hPV3P$dX7zW`_Sv0yjrV9*L(Bv>C z#X9DuL1w;gV&78|)aJ9?$c`GEux@+9d6RMVmDs7N=r>P2pft!=5p)p+4W1f2ROL_r z@F@Q8dgj$Jsa(vCw-y!wa^vvb`X`Gw8TMcqrMBe&v0~R$^ty?1l+(0R(&_MZX>WP;) zS?`;S4Ac)MV8{bmdZJv@#n|V-v4yZwl^BR)wjHJu`|y8MCjUF!{Aa`gl>DVxM+I|2 z{!6p|Mi>W9Mb_-v8tg7Zwd+%LLNVY)8o%cJkwx8RlS2bWUXu zngwXAh`dar%lyZK&pbUfmKtO?vScli*ozq$mftIShS@VmwRmp&bL;1}(6qDsVwp@| zn_1wIi#Z*GmtWAwe?*nWfJPd)7PA`s0-(zG_<29^IrrUEH9E7~oPXu&VU0+^xJ zvT%1LfHf>2V5v(C%7EG8hOrp3OiDH;QRL2N^9i{<_|>dDz*EUFA*Y^b7N@_(8`Y+N zO9-yzsfB*ah)aT%Y~4&-N_39rUFbN4Zt||6Ahi>@e&hx`_xl|7L)$z0@PQstap~=S z&h`{kiCoa-)VN0$f*T?NLf0MFu|03KDTL~jB6f1v4m`Km(EMcnJPy>{q(F$7aw$d7 z@@u>eMc)(8PlEla;F0jG2eZ8%rp;?StsB}+`vHt2s+p8M0L}o*UI)iE7>Db1&%1N^ zUE}X>kV~-Ca$528%0A9y8NTiv6K<$Qffd(jf^Z~;kh^LbVm5seqY3WLIr*Pud_(!B zP?hH%0}*K-NaU1*f=jKDpnqyx59`GisUtg|>LY>tck2OOy^wF-F%1mUPE=T+R96wF z^Fceu0BEpKQpobO2_Jt`&3gLQaI6Hqj-kzjV>I&$fM#`LU%Vor#~QSa7ZZV(0a(>D zT*2FHoQbm`%kiP6-4C5cI~(&r)VOK9aP9mWA1Q?41~9JV4#ElVeg+@BQYE>(x1PM_ zmkwkEY_=1Sla9y)ak4LvuN=fxsbNZv>xksTzd;T*y%UA_Qq=s=w=z@YC^jp;u#suE zr+-83mwx7n5!U#2zI@71_2Mydwlw#1GOG!luvs(bdx&mJt!4f)n$La zXlye8*5}~e0C>Cb9GS29x?g?o1O0DDcq6JHQ^zH>Pt*J`%)9W~9SBuY#c2odmy5mf z>(NOkD|U)x2GNXhT(6f28Np5ClFrUMpC!5DAi92zjo?V=V|_AfxqD~f5g*a*t6+Vp z2Fo?!&A8pVaojZ#Jh5aJ2~IwGA+6PQ#y=l2L)gBlVO?i)S< zSxCx%P3d#1g!`FYHvb}>xO>BCqyDfy85aGN#SU@=>x;Zq+375`xlQBmWo_K%EV_5c z7@)>wU?F}hcZ41J$(!SW8MXyJHeUO@eZr1o1YVfv-l<{8GeGnTnZa-=np0$s?hz{wUymERJY31dg{m)9l-H!i_pEN;|z% zyAmo_`BXu7WWnj>(g$8C!j8>Z(|E212y1+{@!H!gDfT-2&MA<+QtP9fJFT6!N4(Zn z!We}X`%f(cEcOWdzp)Wc^LLd8m{a^eTx$BYB`qWXNK}XKx!(H&BzzC`3XQSC!soabzoXg#1onRX{cWBmifrG%;zhhqLBVFd_bRo%- zfS2;|U)RhCEik5A=O6jybXnsW0^XM0FTvgAO*k;*c4Tl-I_lG14VC%O9WC~Lsg8lH z{@SPsyPh2r;$Bi-oD-Pvn!{nm#yqiM8v}s3l!)1>rilLXTS}MS) zxq^N#aq0P99+Mwz>JLVPK5JDAbZ)^lD#}|tcB|&%##`XCr~&fgKkX`oks669wc-6K z@-RSZxwPOhp1IhHG}Q(q9wNftZz#L+sD%D|rLxV_J;RM11m>KN@H2A7BvreG0bv_J zXnu9dAcJK*OoSp(x>6nQEO8s<)DsS4i<3GC8U+bNa{PPQe74vKIE;GylE!qCXmoZU z8ZX{T#=g3_?s*Jx-lDFCySFuwa(gE|pSXWBI4NiG=;<1gc}xPL(k9doG!f%TMjXjA z#F|$L^=J8_JKM3^sX^BZS$%nbsG_wNB`9+Mj%13Fv0Pc^gs8B&H?{D{;i`^FToejaC_actNrde_~D)~R?X=ckHT-R}xa(`+% z(iYBm=bPfq!P)W7bZ3tjE)NJS=#hlG(SVRa48S61$qu`+82fC4%^mU-CXSlW^uOa^z=b_rhd+l$FC zKG*ZuL6CkDwKWBhDqZMJtuWJQ511T~+^V}R^y`mYEOiIcss0M@Y?{*~4z=yOAd@!% zs0<}rVg@t$7@FBxz(&@_yu6eOoc?7l&@5?sii)W~l@~BCrp`1S{MhPbv#&x(UO{u0 zYZ(IUQpqO*!rFw9t>-0F>&9cXYcOZg*eQUP<(*Moa#8W-ZwF{_n~NYKpkd=a9ncAf zjaR}+w1SOKIB+=dt6&h8{eA>7G5}0;z%uzOLsB%nFklB_4gg^f9I$8qA7my1$o(He zfdME9f7f1sIi>%@s1AisbYD%|3k#|20D$E3jeC_xD|@~e(Pa7}?X;9^oQN}n zP}OQU*va=0xCVD-Ga$`M3cQhkWC6I=STeX6?{pf>glOV;G8OR*a;y=v-afhl06Q1q z`xiL)HW{?&!YZf+X7X_X1zr@FL7<`M1+i3-a#3EK6?8J=92zThvP%6_*#GOE9T)$? z_+}}|vQg36Nvt#dLl^PhZby9&5=R^2={lm7NaabQX5`y0kpo?vH14svcVXxlFmPg=k=m5E4#=;x!d?xo81o-QS3YWvbPXbRFFO1-Ak0CNX&>(OEtTs10q zEQ9&u&A8H=HPyd&kxz@z;~jt)88^ap zuz!lM#GLjH9mCO+UQkqPDeE{KPFN@fXZZK%J=Lm`|wUp*b>{ay|1 zo7_&NDaQe5!Wmd9L!G5B3oLEe5;~elq6*8sDj1f4%$gO6!yESl3+M@Xvx_LU z)hWwkF7}t6Dz@7XWf{{AI@rY!8LZkv7(|tPWvBh4EWnl!F$WhSMnMl=xAeZA|4I

    _gpx9v>?;n!**WDfozGv87H_OvhE!RBY(jf1_?1LQa3~4g{o8ttB){GK^fw>*576v zuWz5OIEXt!_dD*u1p$Hlg@2vA0YsqwHGnmz)f>*exL;D(<~$EJD$*uEJhLxR{+Kq4 z8%c7*({IN2J%vgPh)*a`wMc+c!XswC&N9c>IwyV9Nz2M-p_(0Ry5}>e5I>|+ZjLi`TK?RRlFm(T>a({Ht@+mXXVsU&0ye6f z_vYXd8EHWbqf~hkQ@--@^{_Jln$o*oV;|)syJvsjWq}UruPt%z4J5;MV5`8_z_l(` z6lw4k=n-28@MJSO#fjp(EXvA}s)J^fTHY6iFxrQRVzeU{AEW0Uw2w-&H53}09&{^*A${iJy_I7| zWT7mknkv_h|Azg)^pFo@+sr(0=~YYoP>kr)&^ua!v5XmRkz|-~P3`pd?r@_^k=06M ztPi?jyOxV&s}J&4C&uAbnN~Nw%YfB72(qkq#B-GeD2$PE(2Y3NMDLSVbmVVrkoBOD zKK^m`prw6{CgY0AA~Ntt0KUc;VwM!v`3BDrFwd>4#mn6Wfl`iH-)f{_%!aJICDnp9 zpVsVVs-5;{wb4g#qrCjoN7=qGYvcBv3y}T1F)X*6fV0 zY!g5AS(*j+Z=BFR9<(`)QxIJXLh*PABY+QTN9LiQ!e^WmzrXhP#*<@qJO+vKy)nN6 zbcR}lKY<{JkKW1hHWU4Cwko90FR z`>rT`oxP5CZXTVtMcvtngFSTeT+AE^sztlTap2=6zE_mvCv~0e2@3*-Ai;PI$K5dE zm(DbY5hxls=wkKG6Q2IZQ8uM#@F3ND4!#ya78InsgH=o-=>tgEFz8?fxmqk_suBa@ z+^Sp_@~VC;PlQs_3bx!6<=+~9y)9%ahHPjqJBE#udNT5-2J!LRFQDv*E%$mXccAUX zECf2q4nyi&4>x3y-o=5ED!J7~M1jQC{Vy`Dw+2y3BcPlE(P3R7mnn3WG)dz3s?w1k z?Ta^-cmjH#&4aF#l1zu4s224rf;3ST>HpW>SH@MWtw(O4R4( zSqfzfi*f&1j6CtSD17MTL+x0`pa4~OEMfhV$nms32aKywZKle@FU6?igT#ZfPlVpUv{xo?w@ zy5dK5g+D$##maVWZGF=C&_Cdn{;S6kE&1WN@|+lV{fx9Efy}tKn%BOF$dMe~;!V%4 zR5k5kzYD9{bYa9xcW)T%2X{EcEHW=+_tNPOObbSp>HWGa=&$H7jcy7^J@JC<8SnOqj{^~imtbNJC2UAVu zeBI$V-fH~~J;DT|MLOCdK_O&Op9kXGE%QY6QF9;5I+^m#iz`k_N!`3f*7(>Q&qmu0 zpP2|{ei4kO`xtrDy?yQQc`SgMjFP%m?CEl|gsg1SknD|=_3CV6;X@<;a^pQk+1_$v zoC?TLTCple#%cKTGROMsIP?N12vO^Tv0WlzXNegj}O~DES_Syng9QJvDcb70S^))EsO-rM4M~|9tdI?Y%bhu*Hu&%)4(K ztw(<2LIVPz(y>hpBq>iP&g{Z%GL++g5(xVzL2CS%4UfFpo(LG#Ku#NLzw`Od`O|iy zvAR&1RWIawP3;dI1X(YN$Xr^cjxR9Xs(g0QoXt0Ro92u~x?4MhQV{EY&U+%{F02@4 z*!WptH8$UG1v`GwOLERh#^f1+F#icop<|~BTF63~{JStNbia!93yG%n**a8NT3>5r;;$6a&$55T-wzP&5no{qWA!qAqLK%y!#aj#YM< zEuZ%gV6pwZ5s}Qh*(CO*b;p#HDMUJ9}#!_Rd3CkmBKHqL-2` zu0OHKQy#Z0ym~G_L6-HEt!#@;6$U#U#;2W*4%1h$xH##{yMn)N>qS{IS94D`d2H69 z)394om-A1>fmvIlW3@X0mQEuh5P^sq&IO;!%#Y7&QVA9W9C8!`YVy-pxik`!$DBBa z>O6SO5=J58u6DpQ4CE!EAccWh%U=&<{ChhFp3y+Y6HDv+`(1fS z+GH}TFDnt;FD}cuASk0GnjGYpTVIQX&O!+X=gklq?4-#~KkaPM3RsPrFN`~k)IEmC zJ*Jp1oWDpdKfp#Yi=BoFut#>>3i&Y$1kUoC2KBtjk9dG>5!6COQzR?pTM=F%_kyT% zi`tSfY|`Upo@_nBYgy02i&KYOY@=2zDRMOr;-aeGQVNZj#z^BM0`Fg+rU*3Y%(iRX zpw%S1`8FDJ`~1+??bXL&%XOsaS1Ckf?l|I+tsEn<^-NaW#8vSvAT{77N_!pT|Lh>_ zn%sm4RYF(#Ou@2joKW+tUkD9jNY~E~P1ZF(P3BII*!4ZSk|cAK`K7ed&z07|N)s1i zg+^-%4Pr;v*rTH&U0nv~ul=pQ4)Kr7jFMRGG-^Wwn|YeriM)QOA2s{8Og~R3-XE^g zySjaj7ft->+k31fR6B|U!B%u`qugPZ_kJ$#rRu$h_)fU}jEHt)?+LM*WMZ;zr8?4G z+AjO%^N{G3x$6m&{vgoBkdyKzSJ_3=zH<5{*4pL9KvKBy#E6 zOS)j%N3z9q@2DdA12@&`&5PIATsSX=;)bS|mzL^c&T{KD300pisDjm{Id5HW3egNE zk=+N46~dBkGyab@wuKh*%g~)VYa4hEY3WLMxL47qY58oUSt_OZ-HJspUMtN;2h-uP z-?+)DlSD)|p9zcT_V6#F@vL@NS^R7;Z_z3K!4_h-YxBl~I+>5oR%!l@f(xJOdNNCP zx_{0)s@%wCC{%DPD>qkcj>*X8z>Ad}x&Ma(i!Y)N%7 zC@iA~hS&;y>3q6d+wz0s7}Y2rDS%lM>$XQe`(gNZRq9;Q)ar)~*Ynf4OSTZgUsYA00*SeqT;r`YG`%_tw^WbV0&w8u~U7S*4zkI!49$%VL zSk9eptqq#iSIft=8`Uf{O@xu!YHMzXMz@cF@a@m2=m)EY$C&irAc(Ni#&-aK^_5Nd z8ffRjjKi#h+SF4ZK&dj8BbRKObsjn$7RHm&-Y#<(X*os&cg zbx&VgYV>hn54(~ze}A0pk*;O%JBx{h7uh{BH%h!+Ei=-b?hfgvNL{vv^;5k2Uke>gdm1ZzPN$9erU1+VA6>1BeyMUx2WD>i#{-q+j z-c4;Fg0RH!p&v<;yb6KP+JzYchDa*q<`bGUpWveyd+$TT&t<;|lou!qvfqFY{50GX z44iI65fS!o{_HuK?I_+WOs1H5MVQ&^%4sF(RIZFu_hri{blp8%h$M|#A@;ZRNO-zf zsoOILd;ue+Gi9~Ly>-h>v$?lrZZmC%HF>Er_wupHDhuvc=ve&JEoO@eH+gAL)}2$V zW>n}FppiFv*|ag%dC5WNd_(Y#SAJl!o<)m^=eS<-@kHj!fTxj2!$H$rcG2A zKdh&Au0$7YSv@551k1J^je*)#@ZDG(( zO*0WQ6J-voKFuRcnV{tY4SVxpzK!mE$3;Ps<9^Ju38(75N&=UYn{ekGYR+tY=>X)F za#$&f%#wO>4}CMIj#ah{wi~V?g7qsQ5jQ_UoR$(4HU#%6@ubtOARiXX24hdkPwqx2 zdEZl5$Aw9}xssz_@(5%ha+`lsXj_)>_B%|p-tjJaErs~K7{;uBri0yAWn$16ynwDIgE%|N!b{SO%L9R(y%NRaAz5emPi6qgou9`4l z9&b5-7vHB8HPe#TOl_kXABAfu$C3}v)cT&Y1&Jy|I^su*LSByXRn5R35Bs|;Kp zSG?Lyxo3YA|slF}-n3NhtbH0-Y?|@mE|%4MM5d;XRvQ;x@P%pJcotIH4Uz-;U|(S(e^S z^z}tXdcXCh_yg0|edm*~RXw+u{_!#E;QOA$*MnbB5}9V(@@FJk-A=_T!WP*ARC-p& z>S7a~8~8BAP}bC8le471h4L)nlxYgF#h5O~c+~UFx$!9`;+Gkfrqr)}7DSD6w3RBK zypNJ8iQFIAf)G-2jjS+kd>gaC+VNHQt^A8OjIF{mk7#+epCFrgW3n!|;g-#(dRQD# z2)wt@MLt9V2Bfs23 zzke=R<7lAoan`Z8rUHeD{Crq9_7UGp2UFoQobSEvSdPT|c#%4;0v&tnN zt$P(yvXt8!5~2Pwdnsug@@1Hrb~q$+e3&vy;~D-!te@F8uNM=9uib@ zgjGgwcjy-d=r*8zVPwss329!ndH6#5${(M$Z!~G-E$zrY^g;~00%o9S+Gt+VGeoHT zsUs}&tK;xzs0^;ZSDljoO;i!>UFE75#YqBWa|Jq=o*>mVl_`R2XH8n!MXi0Amh~t= zU(S_hH!WAITH&JUA5%Q-R{aykNDUAPoj-|yBIXGF5bL(QC>ztZE}A*IzzO&cHcevlKa zW;JY7oh!UiG7`G>U886&)YVTyLYz)o5Pew4vD4bAds{=~I!-y+zC$9jEOBYd`WmtQ z=P^d#(#gehjw8Fuh%y^0!8x0Nd2tcm`v!-1&y`FTxuXQ4cp;`jhJmj1D;cE;u-Omd z*P3zDzD)eXi0h4NBz$*qj!sJj7CwY=dU(rUI>fQH?ggsV5|mPCeK(GtXYH6g2-&mk z&T_JzlPoz34ln(@82o#+-bkdpK%!nkDpdrw88ufZN7ppx-hwDrj=w#k=D*wxr`hl;X-9?jn>d0?(x(2(llb9(BGc0e>_QDdP`fPr( z;7iq+etk{EATnrD#Zk|Jy)BcN>s08;sHR-PRbEr#B0RYtXc42uPtB#;YM#`+wjGzn zk{O_%vl6w8{_Uo>Z2Mp*~b&D|~c;B|*@I6u~}4QWa3M2?qLL*o?B zelDG@{&>$`%=;d1m#S~PfcC!7qiQ?LhPdYTOwUwXO|6Qrhtr37k#aguJ?@p>5_>rK z?V=5bjpQd8A2G1$;*ajxzS7;0#`WG{%4xp5KNkjxp;T*U4qnwBmQ7npny;2iaYU0N zzA!^fI%R~aHb{;#wK(6}H#N(A#P9TKP^3>Atl3MpB`+aZyrZPEPv;f1r0(2HM6*Od zaMS*%b({Eg5Fw#-&NDxYB}|l9FZ|n@1{T=~pHN+qtonVM#Ls)jV%0c4tleK2#Tf3f z%J*VH8AN@zC3bFH)@1WTq;@gOd`JBTo0GENu{HeXfDNWgI>dGF}dL&(PLR z*?VLM6uY-=Zivs#U0_g$fa+`wd#m2pS1tr->`_ere-K4h-5K~p6 zw5KOOQoZ9ir*q>Q*%Q>`yVNuk{P?b^*TzS4-`8SdH;m|B+>TqnuxFFuLkbkyth@39(YG}(+K>GWAMEDt6s zt~F7lW*iBfDC9h?d^3>JW46-T;J^4$NbfU4%-P!*UE-u361!rruqJWW2?${* z9@*3m#hagZ9v!n)1hnsAcUKR0?h#EKuQ~Ar(TX&r8i+-oF?Hoq@-vve8L?}#`kEqa zMcOp3GnoDqV&7&-fk; zo-TNok_FPlV*^ zCV|Q~oENe@?TbzGQUEDh*zM^vLOTIG#k>hn++|JPqJ_LAX^K0i#CfV9u=cqjC5}kIMUut zs4Lh@EC$HQ->QpwzB3U^d*xoq(1>b)_{leCX;bv8@uZC(3flBSPMqR%LT}D5XH$im z%V?(=7WHSgkp{22pKzNoSg@&mF#H%9rimJEWd9;t*9GC3kE&A=XLk693D4m?;Z&kn zDxcp?$$c9R_^x5)nbF_gcXc3>D0*agMd%xclR@aU+|_<-33TyY4eXwp2_-lhMQBBv|2YSqN@1pdH*-7 zfc^8_J@;UdQwCL+tj7VGxv)uLeysEO_qFwHU016%*Y0erP5ndY+N>Ry(uGV}$bZ0r;j5On%cp zqTEu_xS{wi{S231;;qb#`BqY-uh8g(1{LRo&+~U}$!%qaRh%={=DF&OBAS*wYd zCa9)zO(qG5^3{>2&n#47~D?wadyx^l}X6vg-E|Y z$5*ed&|fcES6ZvX7Tz+6vq{Wdf0p<}RKul|b&2h#C|6eBu#t9ip%RLhz8N^YjM^If zfmQ`?Pe`~*`Mvr+n}xrsMVS^hMwo?fPUyr^K3Vh{ov@}ghFbVyc*M)iqZxmtfb%Vz zCH;@*#i22#Kf+2co^%_!s?mlA-t`0?6^B!`U_p&wfje*Xu2m5=+h4KGZkWWAdAg1@ z>!nhcB%L_T8(+9&dX*rODh7mnLHdYx8?z|C%ARw>!G8Q)5(!HWiQ;TkbHs77;pQpD z!X6&m7KUY!Q>Z0Q7xtxLv)OJzWIs!baTLZ17OM6YUY|c1#(p|@Oqc4IR)>Puno*tj zXjSdft6{bx3?uDB)f({u;mp&E{-}$glGYB(2e3ET^+^7JHfJYjT*+1?zf+-oGz z6;pv=`RfwW$^Ypua<(Gi*2-V28a$bRV?s!01FIP*TrBY~Z@}AA%2BAvbV%g5&@aLY;^iN0>))N3GH8t=fz6<4)>~FUz@gW&N7!Sk4}GMnk;<4(h?VZ!-I(N(BDY&1{2P%8X}`~l z)l;OipHW*l1=8TQ-{oLHnO3Pd%LBGlLrP96=xCmEjQhLnz*ZOeIuAm3Iw@E%6Qo?J!onlgUW z_86%8bu5NuQ}nj3;}`RRW8dk%(N}Dg1>`m&*xTd8x0IG;;$}qiq2dCIuI4RPLvA?= z(yX6;rVOJxbYB0QY%b6hFn78fbSOIiF81E)JdS=wMp%JbbJXJ4Z`4sOOJFiP+^C2O z;6OwhM&(L;%Pc8(5NH+g%(Y_M&trEN(2kD zoOzJK9Yl@pjd|GQXp2pH=s%yY$?;Qy;OuG^(Twd@`{cop^H^XM_lrZbqf(ObUeeTUz@yUHt%=!gk>uP}z=v)Y0pZ@72Xbe$Q|LQGJ zXf9x-#F9DwUW-t^yAD82pHXhnXnGDKmLTk=HXMS`XE==J+vQ^+wOeW!e`mDPOiA74 zaOz#qcA=RVef0EU(R7<$^83n9N_bx*+2tPu+GE`^=*yHvME6U^Hcy4MT5gU#cUux& zdH}r%8ns(6FWf&Vn3cREz0qcvHqiO_yrbZQ?d2WDwRc6lspZjltB`Fxfd*yMtq@86 z>RM1(zV=QDPqm}iueV=FZr9w9-}8mQLd0De$TPg>v(_xxRnO|G%_ov{#7(2H1O~q& zG0zQx_Y|^CItp(vO_{<}URG=p;5@QQdz~%77h%*x-pb$9@!)|M6?I6S#YS_vvJ6H- zw5I3k?>re*F9abZIh}o!hwW2IR>B%T3fA9+M|w%R64a~f_US)^q_5pOeoWg*lx>@l z7E!Bia;I6}Bh3Z#8dz|RNxKqcuZWl^zF;Gx3>rws!!Hcm80}fu7p`*S{AJj#tU(@? z_&YA9OSW?i&F#tHUf9g#Xm+2z+}5{Cwkjzo39L7d+CjZ_$evJX1>;kA5Xcy zaz&AwyOUa6%^a~;N-M`Puqt~k$#Y)Uu47B6(Qs?Wt2Sr#TdCwn z>pxNyS-LCNeQjiFe$+LpsdNh$TmNQE+qrS?|Sve2ula3%L1P? zdwP@G?yDaAn@KN;?@o z(^e$Yr}UyEL&y4-BKwxwPA#079KCfKg^{l~%0V#A2t_lg3IcnJmKedhXm`2;FZ|&( zzq#*}DD@Us;vSFmorVu^`ZP4@dXF2UIG(+R$(;&D^V~)j)jc&4o@IXU{@>l_e;8;T z1ajZn*53XN1Ol41ie}?}k=YJ~~8RUVs{K-gXZsy_)I5Kk^XO}-Ie`*T1i}ZJ$ zu`q4TUKs-!m95!-wp|eD{DNq9{K?5;WoF~_w++afS7zq_;^DCt!1l7nc4ju_a2?DV z+gElLfWdoX`^V@%t4(M2myFEJ$sDc&4{$lAtCJ1YUpywv*~P>L@CnW?&i~pWaGhY| zH>MmQhKGOJ{F8tTZ?-I8;RFx=kH%lg|JV}U-2ub_tV$r5L8$JQAjFm+E}9ZmK}~|+ zUxC0k(3S&#Vj~0yveouFb129_@xL$}!sUN#f%w1jzx?rE|NP|#_~G&2U;W^};v0KWPpDQ z$N}J9fE56r04N*OM-gB~z^4MT1y~s1M}YqZXcp+-0?Y^aIY4lKw*U;!3+C|9On`d; zP6IsLK4=SiBEayr!ZAokgV!$!@L_lbp)f#TzJ~^m0c7Aa zs4pO(hxQC$xNrLb0pFp4xiAv&G4v-O;0rWmfI+*!bQA*p4E$vbFwjE)bw=0(_Wb|` z*ByWKLHjV4fjt|L1}D%?%szlY`A9&9qz&*3fD3>=NQdqM4BCf01Z3bCKw<{@7Xb$4 zBh>;*2G=vMK$-S{7X)MmKE(m*g&YESGLXLuTzfD8tONK4KtPUx0%U);9U2ZWIKhCo z9{>0QaShm-0=xm(x1d}EaJ(Rc`a*F4J_B?K+CvQV6+qepfPp?5{CI%3-wKc@!2AFc z0UjL?*q3Oa40wM*ECToi*gs%Oj|6X@5Fq&Rm<{j|;DZ1a1AHG~a2!J40eS@T2Likf zc=$es0SxjW^#dN{gZuwpFQ_BDJitR80bc>+U>`z3IZ!r0a*#iBbyMJ@KLG)3*#Vij znz

    ~1T?~w08c%$YzcC2|D*UV>?Z>crI5DqY+?xg^O>tSaYuSLd7A+j$-_BI>;-<#) z#A+k|XpQv|sX!K4J)^kG^EqSEj1r!cDE@s2P1hmmf{2fM!iw}y=Xcf!sQ4MHyT>Po z7l1G?J2z#WE*s)ysQp8)&uz*$@~!PDzjH^b=_x_R2kc6tzBRy)EPqsnn^89qy?0c|Q8fNgN;u*cAp8Y2<_b1+Izb z-_ktIhsUv4r_w$!h}4nlO9JC!C2L5utT-O~pxndS4@8On^22@{KBi9Z%(E+2UQ7g> zQd4VsZG%Xlf-TjHfZsY43PE03%`j?AkxR(?unTuZ>jq5PrTK18umRkPn|By`6`Ni- zXcLL3dg{hBgs8(1E}kht;JU561{DW;0k$X)q0#t85=(E;P+g6`#HU2PD$G|O&rud| zSVQ`{Agcb%+Y|CuiC#kiHEy=cfcl%$YmK7XcCa)OhVwcqJRMEUGBwa4yACc|VX4qQ zK4q2)CUFD~HQNCvTu?ZG=^=29&`X<~G4Bhi!h54GRmaHR&pbSOquF zE%J1Je+G+2k1y@gaR@M%5b zRP+8xk&I3@|aA1s1$Un#U936j6B@p>} zI0G7BKaQIhhwD)jLO|4#je$7JfGmOKaWXeVw@5n;*Z2s=XJUL#e$B?SLyf21XfTg0 zX209L4SYUr!nP(S(w<0m^`UC0q;v`ipfbbDuvQ@J`Y*e8z zpnPgtW&)}Tu^iSvMFgVUabQSfjYk7r{oJcH@Z2g8%&$u_5=qu_?$T+-9B9&-;AR4b z+K=R{n1BF8mo?b`6l786_KOHf$iJ1|ARgzN4WD=udd~0sOw7zfy9!}goI+tcfs%wV z;DDFOUXqpxS;R#e`3n!Ypc=ngfdkDoFrq3_(8pkH6ejwiu)zu7LKe;EJQtf6=m6_u zZ1|R)nTUn{ge&!oaG%BrN(IZe!}E2=eHj z)yk>$k(NQ$hUXA!xf|lU0nS;OP@&{;AFoBje;od-;vGVCKxp>m9K@hB%ELd_ye370 zo(2+N`JsGuF(Xk3gMH7%iW-{qCs9u6cFY7deF{)RXy1% zfxgycdSVtLEc1yu)^Gcc8<$EniBYU1lE^dF+~T0sq0M2YWaLX-Io4^o?}Y@WFB z#z9jbJewGUTG+MTnjz!Y$-SK%#5G_mx6RzX*)|~S>f0$A<2+WNe|``e!xpGa6gM+^ z%jKHX7UUiQyPSFlqaDXAOwTVC8igf8vgCYCstm~7pTUGcJ@D$^l2 zQpk7>_i#Xk`p5COR-T9{{5^&5;2+B$7@*M@HM_ZYN7E3}HXsQH&j(2PkLOEWa%r}x z-Mq%@#K*{o16b0dVSwPH^an_)t!!YqzF7Mnz8jm8de^2TPbh&^ zIwR@W$-goh3Hl;G*fSyHhvN^=6V&oH;p!M*wV&6hn+9SpaXq}99I;dV%Q>!HHIH1; zYmKYshv~wO0&26#WfM$m<0Pvm@PME=thOKBkfu>v!5bgqp7jo3Z+6~Pn{Io>KEy2$ zhbN82kH=zaI$PdUpeQ48nq!MLc)LNMb8^3H!u{7wTVfCLS*LpaWR1)PLZI9JXO}jf z`J+$`)DO8#h$>y`4NO#_*x)L!{uj>M#c$r*BQCw~Bkq~IFEOz%~3MqPk3+#n<)T;!5LkkX-ZAMp#q{4bi*F$ZM@kW0@3FAowdFR%HYS(!oyI0+YNUr)?%@R$#?Bi)RifJr@tJyeLC>h zwqE%B=5YhGjzY}kgl$gH=y<+xya>NNo?LF)qX5*0U0B9E2$CpVJhL&bOYBg!y*n+l zDxM7db^T-&rZ#WnoyA+$Oc+9`2$k%HbjuxfXUUn-L>%8*LgxZWtneG2p44+lq$ixC zP=kCuUP|CYiShOGq6bzTB(#&koRH<_L~0exdbEYG_wJR5$dXMCxp`#Ul$0H^_^LId zR7FPC;TG6~_P-A@yzNhi$&Jsk;XW8m-3kOE;!Q=P*>l-R!nY4W@#zz``j2*cs9?-tYS<=GpqoV_#*;C3R?hlf;HxB%0?p#LJ zj?#-i7=bI`^AZrzJ_KfyqJlty6`Sjhwq%f~GpStPt__rI*}TYhf|o?tS<)C2-hbEb zr7K*&CLh3fVbrLw(=<^yy;E0|*#xN~6kbRQI%>b+vYDh?_cCsYFODzZdQYO$d}3%? zCLB4eq+rAtu@wBP%0|wc-Y!n4d(?`rD((>0&yjL3H74=1QQR6oI?GxwYF9tLl;1)V z=Wk?w zeJSzJf%Svf+(hz+>)RG#`aj*@tEI5HLt#V@lS-!=XZo{cuiqd>c z{o}#t3yZNNpN%RFM$YFvu-NN-9a4W0a;=978ahZxGw2YXdS** zt_n49m5npuxE7yceC{g*9!-BGTT1ig=8riSpNhm4ugBOhHnL~*j!p--!Z#|M`wva= zBWCf#?{%*FSG!s`v`#TBQ-K8+reHg8pL^jc_zAq9e7M9e-?R%#)54T&cwrFACP&Wd z0&}NDQ(iNjEBN4rYyvln$3#SWj8PHxNV3w@6duCF$5a{5_t(__t;?YpQ8S*5OX- z-z6JCLPQY4bGEh8&P}8mI&*wS6OgMNyLYIp7_zgaY-^oA7d2x!jr!C>Q+UDfuVyfB zNk2TKgu=-XY5!T|LHPNQ)UqJMoPcWXz@8;q4$ApZl~>PH(T!_s{S%K+UT*yrIV^EY z&#{c$!;gJK3FlGhFWL6XhHBi?cQf6VoASc4Z?I2xRQ~Q#gk|Z*jE^jaU0`I~r3r%j z+f0KL1V6`Xwz=mB9dR2D{UIIS2Nq*osq{dQhYR{S!g9Sv2>X;2{TCM0&`Dsq(i&Hz z=jaC|REQDIqBH{#k6pYZ_F~RJTAF{NtO=qjKpJXn-?(d0wNeBMc z{$p(QIZyh3_ftB-28Xg`i8Ue>vnJ}>!Pb<>BWC6;cXlf%mv8H8?8p;DIAbqBo+M|Q zcpA@fViMjMFH1XY1V%*V{qO5du-HUjxdgU=TJhT|ucXcr>R!VFPNfLK?i}ENhVr9V0fw{hwymJV#O0)0Mt~ zziEIF_%u$RJB8wTeYx*3bhuCq$1SwW{3uR!3!p9jc11cZr}TZM-;?5frKSph=UYeW zeoUtW^IQAV@ltW3UznlZaI99?5}F37aDEvd4Iil{FbmCTD}4zCaeRuzV8@YN+CCg` zPjPQ6NK-VrsasB%L_@T>bN=&|LtL)1*C~xE$nI2fKR zEk6x&@1hG(lz499;1X=|8I$#>+wi9T9WANg)nii9*`oJz>swMLkj~hI$hMd0ItHpy z+7qw-zD2VW{^OO`sj-Lw0^DAs4s=msn5TA|*1Ln$awWQzZCsu{cuuZuK*)rXz_E68 z;AG5Tq?|U4Hn%6qp&9y0Llw<~;bJ(6fx^jw$dG8mokQRp!K^neeG^J=mDYdn2Jo}P z>Pw2)5?3#^9fYa8tzUlgVo}PC?{FB8T~Sh$8nk6}ax2>*(NTFor9z+8%X3<^37WH; zFY*N-YZ&}jGomp4tn)xwg+ELd2EK{-x@))jM(BXR45*_P!%RN~m1Oz;2=ls~gJ=Rl z&JC3+V(*rjB99LtrHgwH6ov=2PMafyN0dn)g*)+D2>>_IJ69YkL*>^V5dnp*1wK0u zf5J1N@HP&m{MGB(xd3)1A?mFJwjft zc*4pStW^udOUnrohq3EQl-m@$Of7Kmdxt8=U!VxpkCF`yL=B{d)InmTf5N)gTIp4HPNKlJWz3bMl*?GYq82b>b$O;~w)fOUoN z9>lYiYc#GS?jxFIFfYAa^TqrTByi#uXXp3NxD&!$BPl#@>$IdO_>+Sn)-=abK`_q+ zbKGzkfmSbvTdv;yxg20) zr^@7DR4`x{SxlXG7aM(LsaqWt{iIy~%u;(9RhKkFr z2pz>_T?0#UsSTI-1vJgI6pA?$*LjQAOi# zeZzb8@bzuRGQV}flMemUIF#Do5!AkVL*R@dEeL|mhzi0}PPsHhL<9iK5lZ0v7t;Sd z7)U=a51_2#|L`oTXV`WL3KeQdt^qIQQ@sKHM?W+znD9F6b_l8%oyGu9{7c%HnT%(Y zV#o{-lB0K6M~RfQk~7%;{I!RN+a#ijfrK%{w96`olk$lnyP5+^TDe!l8#?!mh)xT zR?wxeJzkB_8omCFk6Jl!bCZHb`G?_CUy>1(LP) zUpvQFd(#D;(7;@Yiw9MmM%PkQ5#|@H=1-2IfjD&nZ;5b3sX>5u%{s6bm(Z?-kR;WJ z4aS7E={8iDU=-|H_Z~c|)IPmlru{%JIf=tgO=djgx(nYqaC)`W?GZkJ4&xu z)ID=qhdPc033HtB?(0R<-vN#ksxJGlZ-bL=APJM&P=?m7Dy>YOhVQ7XI}Fd2JX{i){oCUM#65&4_&bI1CQ0a7l`sUU=imK`f*x}Zvd}XOl{dM44mcAN zkzbr|s^T~7J-($WwTX(6DukBd7nUL%g0Wp|aAz0}!hI(;p`T0x|2*=B6&saJNwGfR zLD)&nxs4wIka-OImsf)CnJ+Z<-rn%4g8sxnd!Xr1-^Er)j&>}-vD_x?+|#(YA^v8% zv;cqGbu>6RuM?JxAUbKf(la@k7>7tzMRymiE3-Z`tje9Q`Bni4F=zV&$*j~Q#)ysd z6~5y=-f-a~G_{zXzYjY;M&rWYM>^i!W2h0~LZhrX>Yh3QK;g+yRZ?#{puNt2hQez>{gkG+h}okFH78jYmBeG*#(D@?**$4vFw;T2Lf9o7 zK zl|S|^6b6b_VQC5OwbuxWQP=;#vESZ32dzEq@zSGxhw>l^j$2Q;<^FEP&d<+cz)^;o ziQXfXRk*zT40z-E#2)qnI1frY=Bdw4hkU$}1w$zd)Xwckeh%EG{g&P~r&Kk6!I%4Z zjKS5!SLr&b=c3V+Kg`^3mwxk^BFemoN?@v(W+y5jNYOL4;-v_R`{-xG{Z;zVJ2 zxx?-SBslsC5ABTiqp6uXQ=qznHY7fiDIy|V)x-+g&p3HDJ4xj-_$ra z42t;wCE(}C<;Vr`L0}YSPHkx!3p{M?gai>UvYIf8(hHgol@`8GPpb;)>2iLhJ z-mn#xEF4 zEkltxeE~=~L+F&in70w|Yh`YF2G7rcqE?687WC;L!&FOcojk|x&k+|>Stoe=FVXB58=5VM^pJ_ZU`m1T|I6?Z2| zQx+I>F&x8D8tFjZliZkbAlJ{8kSMQ7S#-6z<8KWt*4w)JMv-IpfdC*N7bXBAAnC-i z_(+!B@&2G?b2|ZE66@dXp*>3XWfrRQE6+3>0$go-K&MF=O6wZv@Kzstg3GVQrSGZh zqv5bh&|02+t?O~O zqE|Xl2J{U!*r=_6gi%UCe~S<9N;1kHpO97xBL)_u?0ex?( zG&BG4B`O8rGQn!!-ArJn?OFXj!8nAk?M1NXk%E?8IeNxRUi|j>g1b-XJ#W5ar`lRj^P`N#5RPR9B~6V>Cpf} zC#`&HdF{sV7we_G5Qe%-o zW#Tg3itppiC-<#gBmESqFB+d-wR~eSMQ(J0S5IhUJQoc(X=!A|295o{_=lBk~~w1|7~MU8h$ zI#gWTRKB(xxsls--v(lUuYy*|p8qp=Jax~ozG=Bga}BA908z|L^Z*G@lHTOw{uFek zktfov0qQ1NHCuMn8}o&t%VXa3djdg%ktjX;xS)sR3p-IZyxt>JIiRlt)Y^flEZa*e z)SBH#zxK*+IqoIBO>z*q$V*C96788MV!X-oBw^jMzC$itjEn4FbE0Tkkj!m&?)Bl< zTfh@S`|D*{9wz9J^7E>wQ=<}8@;%~BbNILHoI)#EkDcLh_;2@yEpoFSE~bJuAXa`j zLf$AOsJShJVSQnyCP{O$*x_{4-D1G^7fCSi)|EwJAi6%)B};0G{vK<4hNrXfOI_2O zQm|0LdS5^|e!5tu4fu4a{%Y2ZWsqGisbz3`UqGeZE;Lkmze9010#t;xfrtbCP9v>~ zGhVbLcAz$_@m(wzkz7;*PqJ7d8};W+M1j<=w6hRA$eTfHZ;m8v4#Ve8AMgNG-ka=FrNgS{QE3d?e^c^tOALeQ;lr{E$ z%(a@l2jpkCRicW}S9iF)pV|eT1_$eyS67Dbp2UXjxvJmEvqpS~?JLNu9D}u~(taP$ z?uDWS=j&G>ku47AF&XUhXKp@puUfn_L<$YKCuWEYoWoE+wWO|u1d{ADo;4zhRSe$9 zc>y>T&0B9LD~&7ZtGh+Yf%mR)(vHiE0=MXUyk$5j23Dq!49un9Mzt6!@8$&t`*`+m zyPSpw{OyTf#mQ%TqziviRZteAJbLaIy#f*ctu-dclr9c&8SCFSyij&YmCu{`K?Q-T zylD+f-GJ;hvezprIn0z2g_x zPn2p9oncJiu8=|rr5j>)C<1ugs=C|oi>&bQe-2gjpwk(pf4vf^enN~%!wLsR3K8d{ zPRR>PdbG*eqNiY%#(1DnOAw%27;GkM2I*MmsLg}17b-{%+#D#_0bkU`ElGrOjN!nF z5KH1)NekZSg_};(U%OD0aeU@An0eP7$21q{O-CG&*v<3?oKE|)Vnd5_<1Kb3>^c7zn@iUesNcv@*95p*(;RBEM9c3Z_VFxu7tX zEA2nsK!CLJ6{gGd8`@Z&{=rmqO@+v#=%J?0uV^p(;*gjcbWA%P?^}f36@`jK5G1uJ z?E~@H*8s=#S5B(+iu+na=Cgz|4cT$s7mRz#c?K7pdmG-rYrAQKx_UD#gLMN7irWUN zs9rvSawxGalqg0jQ(TFdNe(tf$x+%TDhH)*x_YdY5*y-Sa-yJxUM@3i(iJSFvy5ey z@p-*3dRuZ`#7-9$`PVIYG=@J8b9^`AeWAvs$@QLq8L@Cd7FA z(Ulz`K_cVlkmdkDd~I?7V27i)_eSQ9Eki$G^rwCU5%^g zRq%AX%qLi1h}6I)@CSAUoD@;6O>O;J^r?5(E+U-XQd2HcqVqX)|7MH$z}M!=7fbj@ zSLrG~hXKiiiQNb7kZ9lXHAT>$+{N>h1rtWaL-bB_dSefbUigu|xnb$N&mng8Ze zz_KabgO@czvryn7)&yqxRqIr!dwp+t`H8m!;S@knS}O?5x3BO{%D>Sc8kuwdQsdr3 zF7Ygug9Vzz97QmC_Hv+@;Cg$wXw<*7_Q|(|ld4B|Pl#p9rNtMW zqhisOrG#t#9C*|NXYw>+RiW^1vbIB}2KbmVl_8Bc&?ng0>f!1zN4+p(-ceP&oZT68 z-M%ZYBfLH82^fZ|%=KI5==#II6+)eF>6g+nG18`T$Tdx$UL%qrn>HV53kUYfZYWLXp-~?~W&N0w|z~6fyBdk9;D>fT* zIKBvrJ@btSBTje1_1>&ma3}4=q9FM`k8~-L!4>v5p8yA=w-!pFnOsBWX*~}r*yK^O zj6_4eA`K%je%gNlPKiV8d-8MCFyydt?7~>G`&WEzbB^{uybzNh{xVg>_y(uSm%7Uu zn~Y_MrxH`-kI@>W+9aQ8`dqBNn&rMvp}_C>OUuECk^{fhw{JRI5qT9$1P z!>01x7h2ZF=arR)yNF-(M*x6q7~CN2i@?V?d@24rzky;XRDv$%vALI#R|e%(&aG?< zNRvGR{n_Ic^ZL198{RDvRdPt?LPDQziA5p7$L|K9qkoBhC@{+oMzL3s(^I+>a){g8 z(@{q|wf}y9s-iBXqkt0L?vbTu(@>%o^{x3VwaE-yyE`d9kHbidY|X9ebR%2M=&9rm zji~TSo6LFUjm=>I_vM;I-9*tnU+OPI4!%F0gi;XU<#sL306@6ETz>){a5f?o5I!G_>e zi5|A%>&m$ zfBV!lrN_qRuqwe7I zj->V0h^SfeKdK3lX&)_<0RA7Q&M`Q%rfb_*Y}@w4p4hf+Yhv5BZB1<3wr$&)Z<*-cXjt#$Le#PbWl0c9%U;U!|M$LCwInA!sff}<;FArJmoIYuVnkOso!0V zljkF&XD3y~##ix1=pebq_6}fRcwZTgQ(V?QM5t+U&Hol^KmMK2i~Y6CiUXbld~5AU z!0a41%C(h<_oL67XaA)U0WWZ6?9yI7h}-t-ZFCErGT%lW)YwyfdNgh+=c#{xCjeIT zwTbFtmO})JW~s7U*}dYIeny!MSH?-`2f;PFXI!Y9KY)e6u9Y;JKllSXU0s!LVmf|( zODN`!*RP>O;1i5D|Fvy9WzNyh{S*XhyV9k_HZ&>z(X&O@pba?6fke)ZoY;Tb*Xh$% zj}qA$b->ih0Q9q>WLu>}5@e5yh9gHT$W3AoG2ra*FZN0-9J}e2?wmLS)PT%3g?-}#X{At8{ewk?@Z+GSfGN1TGq#7^CY=%LUh z(#hA^nEi~!GRj@~IIgYxtBFTQ)ozC#e}VoP{=RdO60%suxyEKEwtI$w>tWnZQYY%q-O3!3*|{+Wb&F7NEN(g}4GG3E$^Cn7!`P)5-{bZ2*oy|Yl9CJD3 zzwcPukRkOHhvIZwtvw3vmv+CD^*FtDFZ*PlKLzxa1Ud2?Ntq5G?R#oOS{fY=LZYc$ zt?vqBZnSg+5Cq8vytV1NaTRwIwEO&@7YbBaBW41*nWt7ou|%|HcM>`P>>)VoPp9CC zif~gc8jqtaBsf)(s_BN{K7oBbLMt$}r{;ix%Y4318lqOjDI|f??0*NX_)Wpz=GU2V z-D9HBwaIfg8X@x*R{CyXkSZT+;MhQBXN=zVTo zUwE`SDg~ak#&-{aru&Jraf#(!TQ@fqdP!2Xijzgg(9RFmUzRKA`MiyoGP9aG+D}k2 z)d)U*WS^;ppi{@YU!YoG7ntC_ZOg)y@B$E`KL*YI&&-or;BmW|8Z-iB2L5`FY1b)P zQnm}K^(9n;4EDjr9wZ3WH9{}p~YL}|)RoH(6_pYP#+LY)4zb0m{4CE=qbwX{C#Xd-vfPYh(aRSV9b(*uN z1xH)nJB`q4LiA&MydSj9DEPLAq*?K}6xBmIc#-GV%GC_27-og?+WuWjVwQK_=q}pK z;2+DibZ=J-xo_yb27 zAnWVeKP!rogYS?@xV{SMF;e1YT?LR@vJnwU4g7I;qY%U^O4f2rET8{{r^&SJw@bG<4J5O&?`n;%2rm*wZE zypC_`z!%BAoBg%L;4hz-h4b$Rk~%O&?mtZ^LGBJ3+zYbUJrQ8boDvLcD+bjfwb)+DK-@N%24=ittL1bc)Ak zxxPVf3_+#UoJ-ZV0D1GJlZ-}_R7T@b{SSkl83c25EPinkXTd;C9h-+S(!)C|G|kDht_BLj~}1y6FTVDty|eH6%ew z3Dz5s&jK&yUv9YD?BAH#5B$+a=>q9I1(_G)U~KllvT@qsvFAv>&oW(?u9bmT%uwJi z$YO(aF29N?d+1JGnJ}oFw-QHdwEz9Fh`x7^d+uec0HQUl7P^u3zhnii>gYeE1bzPP z<^m=4_h!J4lKji*%9wW0i}bNcTG3a7@}vIv5TqSRak+eiM<0`-Mw#qXq^J<166e&= zf%i*Vi-hmu)tL@}85I0t6i=^ygbyL3eSmELz-E0n9`eMc|Bo1Vix?zv+=N)4B-LF^ z+Fm83BT5ay$A4mbOnPBNB5|&~vO!etLvaKAOE>7-%$+$HUj+y`-PNx4{7V z?=z2C`X{@Z5fcMh0?K_fyBGMX%Io&^u~(L{krsRS@8-+CIHNqmZ=>H^BFd(@@0Z*S zb0?4RmL8n-iaj-6D_1ShSdsY6pU!T{7Aj(Aim>mHM;tVGtSBd3lq|X$q}i<!wE{ zEcjepVb{E67uwzYm=OY>KI%xdlLLtl&okSR1XLi)j7P?dnKu=;OG76tf=hKNru^qL z@~3~y==~$iZ{oJz`Rk?5WoUZ5L>%xDasH(`Nv+U<)vBl4GS78-309IhHNddF_Wgn9 zUzF<6JCY<0JNUKrauO{fzG)oO4q@dztg?R!W_9at=%`pJ4z62w{3KMqpDq@V31x8@ z)yv8VU!paug4pK$nKUTReCST&-XzM*z7=cJBtAlFj_Wc3SFGWEs~DwgisF&lJk$5I zPW2Ywf+^}QRzzZ)DL1KgQxs6#P;QxQk6+6F4?H*)@}`&qf`$W)GosdjhJEwCL-ZV_ zbXbm4Wc*+{zd+#fm)8g@i{msbnZA-jj+)X#e}n_W8X~?PhiGMGTKURjyP&dta_IT% z5De;LjCJ~8g1)$kNbJY@v5vyT=HF@q2|gR-7+vvF_!W>Rv|ELB>jg~cRh5jQ62Rk= z2egKbjV}_33lBw97s~@*$}Xx9aU_}G;rNAdkA&#faG0Hi{Pm?-$N=)=P~`z%HMk1; zT!Q`P-!NAkKYpH;@$_I>AKYg!$y+QWXa~8?G&dB;uU7|rGjn_@U8BmB6VnZGZs@zT z^%dg_b=e@=@p;U6WO0uJc+-~VXArb*uYV%ZF7GRDsJ}|y54endUUwhQbv8>fI2jL9 z1cma66py6c$zL?ASFD9fWX;)jtVUCTM}Kz^l#5Y?qvekU*ci7#+c}b8Bzy*6J-ZVY z2Y4euD@GfP)v_=iEC3jmECPtEiMv1f5-EEJ%#5sd!ZVvY3zE#b(gv4|%BR6EZ$J+r zt1K6X{>1}9o2u)lcd7irth`8V^^&q^;6@t@W1(oDVFywA(@PU(zQ%w>Lv)XsO@Cx} z{bABsn;e)ueQH}HBdzuvr2)?d zdA|&mC#B=k_}D%qKRq0S9=3ddsRZt1%24L(Rbe1+!FbLoAF_X*@zoM2O$5`GhPY z>v{ouTv+-tm?uFBK>mJ#ej+-Q1b~+5d%?r}`Crg`><<6{u>$4N{`c4pM73wBJ}Y!; z&LhJo44DAS$S@%uCP_&EF-PGq;s?qfL<;WLA@coMyufFL7OvH(}3GnY4!Q*nb)d8$bNYA__m}iEHd3W>VO@R6CD4d%! za=x0fu$hZXJCLXviKXk$nL!FwA?F90SWwwVD=r{&eRB@So#@}J-8P)!aTXH_g)`Kd z>BMWd9?KRTIAA!bA`noM8$gZx8}dHkA<07E*~y@Y099}$-YH{0S1^`fy$8*J9whMq zb#?tw^|ByQLNNm+mK3*SkfE==$S+*_Jc2>E8Qg7JPWj7Ev%jB`xQVCqqoGvI9bVPM z+(I%kH7KmOD_tmdh4nZNgkpXG<6@Dh|E=0jwgBt?vv5a1x%B@%XTocdE;}})9!wD- z$2C12n$y#{0Y*~rcrJrX4*28d%1(4|LJ{F4QfL$T3}ouh*sutV6-67FPQ}$J7_CxH z?YMv00E3xwiI29$4fq?X9nVPtzzJn-WP314woCJBCGgT|c=3vmq-NgXz@(OM-~8u$X{ez>37h1Sso;6_UE>Tvzo6%$rqTbB+pv(LVp7kZ&s)L` zG$O$-X|%fUFbj*Z*O^F!&L+kMJxl;eks6f)hVASOX|z#j{r0^-at<|AHhN$v0d?a+ zRi%5<(r#uk_tuh9mSxXsvy7h+wdHjoHft^;jNYaKyB^4rnu;Avy(l!y8$^JLn>@wx zI4BM8LS7@HnpN$KB7y?y7jS_;QjyF$LvDu8xKx=|EXMJoQ;7F)UcG;EE3t>2< zUR8;EWU#0A!XD;;-kY9clTK{4Rv{m6jb}Yws+Zat{9@1Da&Yu{#LRD)Que#|?>B@! zYRmvWHC`FBq)9QvWiKPY$?>TqTc{9;zq>V1`TkIh4Y1dOJ(_ zNxo&cuT$XG_jo&F2i@^p5TvKPj|-y1F-!2|R;y;godQ>X!- zl#Qn#wp;5$q855k84wVBVOz{jzx!oG)QQ!8h3s2EVnUz8C!1^O@~j!fgmO*!qtbsi z`Q`(?!W9dbQaz44c9U)zX18G3av~L(Tygr&)l*G1=kJR7UHL(`XA>56Orfh!N?#BG zL5PVrGqZ8K@6JX&`HSu{u;Gt8Hz{W+!$6ouz~G4CcTR#W&it-nn}LXRjsHe(?1%n# zlqTG&?lm=NjFQ&7Y%yqPoP?f&1}>%aA8c!CgmW;^bEDVf@o;&wrcMcwmk%^_{CDuR2G!8pzzh{jY-gWg+L?K4Ki^sE zj!?=!N2vf)n(D#oEB;Ag}OD9CFe@CK1&e z4nKEBFEM7pp-}h#{KK^PhS}w}Ds3yQMGY@1dP=d-*qW z;*j`447Sz#p|~iQ?ptjof9U|vrWq^4SaRxYN`Q$_HlJDc*9rrp;AUj|%B792WXFOQ z))g&*n-*dWHx%#vb{^;&Vy^3Vgm%`#wvDaYDVz4yS z<|Fv-nzKWXW#!~u0vr*vi7TO3FRwr;XWgq9te3i{m2%O^G=AW=B<(4U0`0lBu84`$cxS469%XsO-rlnT2W$d>AYlC27?Oj}=p` zH2(V|mSNfHJ;%#$+-LWsD!(((vd ztnsB69lLh@3V(JO`;{GzebNN~*O?JnR;P(W9(_A2P5uFH&ywY~x7R`^2rfmjll|o* z>O~GqkaZ0ipiP1T8I~zAQ-ZSa^L^KY?&SL-`M@8i5Dg(Eq1)K^XpB1pE36-0z@hKT znl4mjr{`$1xaf@XSAONVhjD|g3UZCkS_dA{|VKqLO`_z`nZa1;DFeb}l+`JE+Bn zI`3t@k3jf>xkAS`72qRb?RB^gAmQ#Vq@Vh;p16!Yo0g`NDs;kFw?9wdfE>orKku^3 z664mO&TNTNVGK3<{E73Mt*}H8eAYg=DSY} zG~&^2+JBhks>1q>yp(4+DlEG*FFoa@K?i~&rGN_Xi%1rpmsxc&cbz%g5*M~}M$B&# z;^8B#S%oX3eM2Llerg?2VgtnnIb#tv<1m8=@fHoGtimI)GO+;Vah{@{B~`ZccuB8 zhWL^PXGp>oWOOw;00gFiyCfN#LY@%nEoh z9kF^z|ADO5bwHUdDF`J+m2dLMFlN%Rw6?bjqL%l+RZHex9r-HL@d*>>Tm9nckBq*c`o`>9O_G{)jwhd;pI z+AU)Dy&!({3sq5+tTf_sC03dbIdz74A5J{Z@Cg^osMqepW!|K1Z^ z$1;Z5JFY&#km6B!YJteh+nq}(5EMQ1VDd7V<4Tq}u9V6iuRvuXP+IL~3B$>n%tA;> zc;K{gIe-obO-*w4cI}HGvQAO$4=(qYU1-ak-L_+i`vD*CjtH%Udisrq0<;FkT*nxvRmfxbH#)*tc-=DP~wHsSmvQPEF`RjvsN|GB!&f!IcDoUE%AHSg^$ctBH4FJd0je)dQ$9S4vy@@2C3RIlB4rb{zhR>jwZaTIW_ypz zd4EzeD?jY^%XlF`A*|<}-VWoas56+Pm#5{2apP$C7~t!9E<3zO1}~oXC5DKToL?6j zvK8p*$VDetW){r${MDtt8f}AuStv_^f2tBz3yjeq2$4tgW4zK6I5XEWy#v@H^PrZs z=Q#ce<~>yRpKh@9H}ecM9l;M>%Fb?yM|p%Z^1VC_Q8A~6H;GTXp4*{=nKdlI+xBO@ zs~6VromF~&wS#IwW-L*OOd5x+jnakRBw|dM;iT?c*zG83(mmxr)RQnzXq10SJMSLi z@maRz4CV+BT|vxqYpH$O*;C_co3)!{^Hqa^$&Vv!7#zu5J#4$|i@$Ctxa-%m71EC6 z7|#jV3gZWozKJMoRkcm`Kdq#!X^6Rnp&p0FmE^16oqOp}5W21iwv>$9c9%SrCv$#; z{Jm% z0*u3sd28o*F$OoMq6+8m+M3Uv0P0?C-QGWtX7^qWe6nQZJ%i1emw_qqwci@ zdQp!FQ);A`Szyt$d5>e)$w-WBb@f6mMVs9{<+WUyfa1d2W>tp-7b*FvmGjfo;DKGm zvxdrSTasL2w$yVYmat4)j$N1~PHk-n{*w0A~t%eb#JH)hfz<%EN zH8(KrdpCx}er0aD!R+=n2WcVGCYPBDMDn>ly+SFss+8kAAx9SBEumn?x{7zerrWpm zdlFA-y)OSFRR@^51@d0r6nt4=)w;~xL&9sEU3|WASVd!!rAnQlyXvCeZg|W#i5QZd zb885n^B7qU$3Iyu;-U5G3X4WLPzgr!E)FCR=D3!>ga}T=u>E6uEPUpT2%yI&`;MGO~Ug10pf1 zA)MYC;ijhbtg}<`#>#x|sfPZESQ|14A->ZX#z%LMG0rY?o(@l!{dDUND}XPa-jN^= z-mFc+QDIJC`FPX<;!Y{#`nibKDa=s}4zynn@Avs-A=slQKizunhMO#}&oDD2d+psb z#HBA;KLuIRt8O0=(?1BoI(WH`yf=Y!BdrVZCSWU6Z`Y?M5^)J|)YLkS^6!EC`=N%D ze??*%C)q;feF5fIYl-1>p>>MgZ>me(d{^$ncqXKpOs*1XvLGT2wz=uBtM#jb7VWqD zR}P!=siRrRJah*7FmCTTzT=*4=kq{Yzd#b486V-U-8Q8xTXZ_YScRViZ|w|7y8e2@ z^e=EK-{C^q%ihSnm?$)u4PErm=~=8TIpYkBeO0(=^BGiXLEKVJz*i8eGzvv!oV%2b zJ@+l4V{~?{xPW252W9sK4B7rv$Wh-2wp3_!0l1k^c=$#GlCmDA)0aeL+7x1DpUynrf|c z4+8VQ>d8A}Vq-G+NBw9}I-=B1e#31VtkGLx1p==-_XZ5c&$Fo*(clT<28sEmd-#%M z`qlhp)@13A4{sM;TE^8uY9m)qD#jkE2=*ZiK!_RwrxlpZ6|k|YWW*>Xtz;b`p3%~m z#~C*#L&8&@Wt$(hFtY6LWcx?Puqv}Q1f63oQzKMkJ7u}F`UzJhg@sT%w zhuu<7rybBvicWM61km?;B2n*U-n}#o6=tZ)3FS^rK}(kJJaINhWHaML!qK%pkMs$x zKqy5eX7|YSvy&gKq$LpumDr+^yKGA^8(#}Gn#SYE*V(MjwU=%b@SDOk!bZY_JAS#W zf=PZWb*Wjtg)O&!7QiqoE4x3!z)uW%$weG1H}Ld2S)Q0w(j(5B5{Xm=x-U%_+31c4rK%ZlQ_-gQP}D? z9iPJlUz?}MC^Dr^E{6rVhQT{qkF<+gkD`!s_HZi8U9-qpt+4>xhgpGP5SsN?7|ryk zg8nfaeEIC(j?SXEfehrqc1G=*@gGc29s=VWuI~}CVnE)yX-#rLp{a7}A+&1Qi#3++ zr+ek;}bkC8;gs2{N^mQ8S|!r-{g&av0b5!5P%> zfbngCx8rKZUA;1?_MEv5Oo#;=E_E=~P4EOix|4c!j~0VPZj+4(Cdn|9Q6+hV#M))I z=b4a=TK2R)6G*4zYHcqk5~@FN_Niysb_DIQ!on^PQNE9VU03F0m^`pgRGV$NRFgnj zv;E+MdjV)_qTam#(1gU&BBuXsHrF5i2(vAa>Gps4V_oKP(kwX`hHAN=T`l6+WKlK{ zOTqQuQ@$?06+PUMc#dWU_7eX;r3rSW8FIG*l?`S`a>48`i-TBx!%9wJF+=gpGm@Yv zi=WQk!Uyp;Ydd9(oHCU+M%GUt5L3h#v^M4ZW*4M48@-|w1V!{}a|bEwx6t2msupr_ z6Y=%((-&6FtlbsPR&U(b!<)7RDke)ws<-b4X8D*9O}>>`WYn3o^|g2HbP>$Moa*12 zbwMWa57mEGexuoyqriCdYBF#8#}FI*^wvCx_F67Su@tTn_H2Mm@cJ!7ciy)LsXWYi zIWy5?`U^S@=j?vM$lYNh06-TxN0zvpGWATD7V#Amazzt6Tkl7Lz7%i9(g%iJ%a$bn zZaH%HCN7ipp$*7t_(E6?Bl$jH0jvw2vbqMu)2T;bg!;D&D6bDiL=s^(PQuYr%0$+v zS00tY(JNF=eJks9&fdldqH_^!-n5S+S84FuLO`Y@z;29lL^5e;hzTt4Tp#eB{yYiR zEs$EE_uCs$Y4Ev_>O2*X&>fd5hsxFx9TVRf;Au$!qTCq54TjX}%$-=|>Q72cz5Lj= zC>+$qix2#a*%MIDR5&c2W&iG9(%pq|Kuw-S-N3J8kTTVcUuj@#4RgYemxLVmQ&}tV zn`8PzH3FiFn%+(82gasa zZO8={wTNa9hZqKJ`U_cepmbjmf74dCc57y)LE>pdsNqv%-chJsRg^tR*|36F>JL;} z7;SX<~6#{ti0UaY~gK-G3GuRRz2n!HR!rum)Pl@h1|}zqdoMB>;cfh?kK=) z@lgHqHuulCRNdQeht4V5-N7iUkv$F2P(V(rtH0V7sf5_O zWdZsG4VA`Xso|OkKz&0wtPnR6#adzx%y#*Nbg`cshxGmSZK%8l-lNmh3nW`Nzl7P^ zF@>94ie`^cNCA;YXQtz{4V|j9CCn`#kvUj#Qu#HPA9y8IBv1edl>M=~%w`8Qaz&gm<)mSKjH0uiEMJH|^%O!C~F3 z3te1HU)4mw-5(!PqM2M|`z>%PSuYXrWf?$%{xQyI=a{9>94YH5*_G2ZnWfzLwnH1+6iCAYI~ihoC@Zrm7eAhQGMGONQ(5u*LS)mQ2Kv$h0Gq zIE8~6dur}jFZn(T6PY23oC#jLP{|ge_H{YY&H%*Tc2dTDaaQw?IN%YeX%^##H zpGw(!6!07f;-=;6eUrUm+%66 zO9#R9*Zo0q_!Z9mj?$fib0lH#w-dgaX5;T*E`n{`OfU*#Z~T?3?mC#)ost zkiJtcsi7ARm0aiFpSg4^6s3m1=Gvi{rVDH=cK++&5C>y--$u9LU-m(DLve<&>95}H zZoltu-*+9?Bry%7#hnV0jftuH*-kJL{<7i-gou#?S_Wz?%Wok zibp7vZkb;!ebVOATyT{6Df@vjWsaDX#0Hh9qH{|Qoza*l@nX$$Z~j$MTBqwMLw^EO z?X#TJBEdFxEV2Z%og z_QyjMr`5}~K=$o^L1b1|LKM;iKj@lgp2@##gnS}@7(fg%mz$w3^YA3bqLd`210^|n zbT{l)ILkA3n1HoH3NM_ua!rZ)oh`o8qQ|vzZp})&=tH}eMn~2EOPBuu()r8Gr1m$m z#oq@Im-W6(#5upeteyfSxGQ*LujslG_lOdKfXHO*_2%1211%?3BUpQW#`%7s$zld+*q?ENy*# zE9DE8J;9yHrxdT^xS#uuuxYr43BWL5FX_x#UBY5|ajZ^bRqwXfAFxgBYz~a(*fCP`UwA={K)@?fS z3xT?ogaXt+H5fw7`bU2Bt^c@*2?rxGy5-j4emhmwo~f4KY~PZYRFhiFzP?+Sh_X) zv7&Hnss>Wd;ShWB4emI~$aFdnT2S&h>~@a)>q;XjS{H3M2mFt;s3Gh!bQXvfgdmf;H2j)4FtSJIr>DgZ+&nz%_=@q(UX4mv zIoC^7wrTR4x{(a{3Xab7INDRS^Lx7zW3cFF2I<^(+T7+Yk}| zybyV*&4x&qn@fKY-CNH+`~h_Y36|6WevVKuO^#%K-I(W|r+io;{=HO(Qbo_sTcJ;C zzl)8&!IP@#5xLl(G!xdOo`jgWQ_=wbo0hdrlF%`BB(Uh#ZHgk_maOC2HOL_)(^gW` z17aT(nATFxHTPs z945UkBpQ*sm5m(nj8sSFp96m@2}D)u;!x_S5CYT_Y$uD;L~2qFb6Rw+70J^G*K*m= z-eYwSUsT^)Wsp?elbj@MmZ%!)lHqwNzH+(a>^|k44!SzgUa^PC5l4K&VgpExbZp(qsE)yJQ*N8oBus3+ zab3OKY9WF8GgmFUSAH?GP7DYcoBH+kk7G%xJ9ahUa#)w^vUK;q3?V6PO|~^~`wv$* z@~0fTPMGb?*)Qtjo?-03f*bhDOi8mKo@3L-MB}Sg?kOOX0S21nCc+G3$KUDF149}dLBX_X@FySIwAGzm)@yjaEHvlXTn2&T^zi=nbIuau3X^!^f(?26t z);fX3r4NTfy0qZnHhcHo{sYBLb?q<7GX`qk)IBnEc-b5c&vjsv2Pgs-?hvjXj+#%4 zZlL3AmoYD9(Z6?EI*7$3J|XE79MB#Iv^eZ$2@Xz?i$^ZWdIZ z8s@$ptk~C?<*0tV9=X*^WWfrv06Mzibnc6?9~LtO_H`&Uo_XZHTLvc4bw9o><^s7X z|DW%(nfjU&f==6R-3C2lx5L+MHu?bU* z`A6oTv_`UwBY+KG`QLsc2h76)A25Sv##Tq#d$%kS;Yy@jGO!$LdM?n}Cr%l31T#|t zO&^S=1_5j2u$tRb`?2s_h{A|Zz11eU)kMxr{stE~s0#EAizz}d%5oGYm5YfMPIvn?NE6%PC*tU!MA zpxE%i7jd!lT$mfZA(7lw57sewVv3Rzp@2yRRB&kc%qdRdLRvV#aSBhSxiIkzuWpLS zsKPF%NgIH?W9PVsGB#NT#(WgCx{pXO8=~n#wMGhbpN3C;Opbg=t*9k%s?0j*UOr;BjAo`HIJzHwskuAqBNrMMyz)8E^RVtPY0h=+ zJgI4Poy~GYW)+vn)XH?pXEyJ9$o7I<<>qF=B7De-X=s#gP@_oKy3ltlMUSj?=66uF zmJUl$QeSew^w0-6+4Q|k^YQ(!i4+CA3Z%EAq5kK#(m)tm)cEPrx7!>BRzLl!>6U5s zYnQ|#kXY$+cOk>GssakZ`$ZBRT*yklV-^mmN807X{*-(yp+9#5Gaxog+f}pxJw2#B zNj)ef*H`Y&&}4VR8$wv&3E4OAO@@e#%I>H5GD;BLQwGIQAEqqq`UAYERY64XOgZ+~hv>IM zI2B(KIi}+fk}AYgYQnonHXeFlx#_!5F0d5RXfXqygsl7qqt^=jiel5R8M+nK7hO_n6 zWGblgtHCLC9TfZT5In#+XM!IfdVJtSYneP}y)bk6*zB1^A%)kx%k^qP`6xk_W7spq zNTAv2;-emqD&$>IyUR+kI1d(0f6K{=6s{e^3OT}lKx26BR;%VLf2Y{Iu+; zVaIj-*QK7))Si!jWCmI-iCW#Lkm;OX4L)C!Df_piMvXH%#v=g=;^ji+LJr6A+t%%( zlzn_$YN+2Tbm(A+R-VNIeMT9Rk+NiJ0uidEjJF@E#feSBqf{DW5>(c|ks}O% zj2`M-*Qlv;{Hr=Y=4x#LlF=6RoADXo{B293Qd$JR{0VNft)Nfz5^e3xb5I)W2KLN# z+x>%WGn8;8zT9>>HQ5m0)}4jAhXA==h0? zUDAggzCa!cgigUZC3Y>@B}StKK8V6H-GKV!-)9(^HQQKTT%^~N-6URyl5fvvk8gfW zM6B5fL|!6tl=mVI8*cfO==r&Am-8d3AL7JmDVtZY3bv-Lg%+fFEZjK!gZ%TIQy5Yx z-cvjpI3eO_Z;~NSW=PCY2Y_ZWQi9glH)O9Q5!}rOE^G@gGX{Lg#_o)@gjB$|f6wd_ zOAHkL?PdVtt|fweE4>@KDtv#ZUzQeYKiHi`oDT`5V%G!O!hkr3|5Iuk$VV}+hOp|0 zA<+z#11KiY^q*+pnT|5Yfns%kehwJxuBq_W@l=EKv#b%`N7+vJQ`65zB#k|!Ft?aA zm{*@>jFll;r%~zEMI&r#R%kc!SfFC<{_xJ_{}tt&*?uC$fhXP0?ET6!Qvyfo_)^fa ze}feq#Q19x2s5jD`2o_Zy)1X1DIb@0B*gG<-ucK;QW&PVed7=ipxJB+s$38Q z0O0+DYw2QtP8kq@Sl`cCLkyJL@?V)m=_{D|+7G5IITw)F(rh-7BH2ID)xZqI`NDS9 zIZlit-MizJr3_Pr&L-odnfzn?7gtCHG!$BxMjCGv~E&WoUpout4+hAS9e)Kt%i940^Sc1D<{czz^)btC91D~q4u6LJV z9*s^%#gv=(b#ljLjCLH6cmF=|>3ZMDv4aL7^SuW!-_l~by`rK;(0;lQ3J~xpZIw3=QB4f*4905$ z$<0cQuZB8*oZseF&8lKHR)-3~@h(mH=*zQIZmoS7bigSw8H7`^)aYM{4aLE6ZjlQ? zpq7&PU+GKXG(-u2oTqk)>ueBS^v|-D3CCgusOB%W;;^}WSqI;&9d^5{(_`1S_=A@- z;fese*vcW-$D`$Moh$K}S;jS&yfcneD@m!|B^RJNN$57daik)g^1tUCEwIN^8eZ-b z-I)!-if@gNrVWp&>xk)wb!?GT(8^j7>FgxfkllFm!4*cJ|!dBR#@}XN2SR*qk(BCnFxA7{MgO zsx=B#XPbWtwG=9!0*-m(S2IjCCo*C#@!kHAcx5s7?(pO1W!&LB*#xY%v-lWmg z0XQ2grhzX<(|gbZ#%3N^5_MlNB%c9Dh z$6DYI|K1tb@Bet|Y+W$_L#FQVqMB0oQEBzrzR;fQvSNfT6K6NGk=s$4NRf;BhtF7| zQvNJ6KJ&!N)NV`@SZ1Vev&M-GzmkA$5Vr~io@^79=2#B{yh&cmOqb4LU!>Tt=zK4c zJhO`!&{C^er|f@Bln&8Y<%(-g_C~WDe{yjOhl~drJE=P*LJ?SqQLAwnj(xvVjYHu9 z{P5IfBR_{KE$mDb<+3(Ga_9Qj$|A)XNmpsnE;P7oiB*K`zTtciTsBpmBqpT%?zsiW zcx&HtvBV?XVe4D&HDctG^o)bHDkZCdKit9u`s8XI8}nF&#vUPul^GSFg&&0RkrWM- z9FwSAJ_lQ|TVRj`pEC9fxy}Qa6?9wz(5mLJe*&V}wd-#qGT~@faGn|~3hCJDH zN@_K3E8qpsau)jpq3-18=afXt=*V4%#Y$DQ20OR`kz+m?+E042-l!~|(sgb5Y8F3h z#pGMsLB#bHHwu!^6lbn`ZifwoTW{KW+}=eb4tx17rTFycL=?ErmgH;t1+b*eT?Qj{1h^vK_b_fgT3{h4`P zOvborJX2ccg(J- zTXKUT2?(g!^8~Qv)(U)=G%yf%PQf9tPSt}~%Ecqc=Tsg=51g>-il#ZcTnnLyx7CEo zz~JPp07esU`TBteoQE*)#tsnMZ^BmsCW!{NeU&!G{nO@+5P3)6P5D|!&|+Dp(YK?6 ze7$r-MtBk{oT}TUO`!qcrTnka{79tx3J!j5rJV5%$ zTSof@=}FTumic`d50!!z+UoP@{{y{1Lcf!%IG(M3!4XY5@V~^zA4wP7k~pdSnodcK zkg#WN&ylVI(&MajuS4^*cd*`&Z5oJoN&vTL1N7Mca=XSgLWn$GJJ6Y<3DKdCZG;UE za1?@WY2a0(!fS1o_%j%~o?A*EFOhl<@L(2L$dEUtwuw(0h2 zI?fn8b{>1qdvdJ35fcTrqGC_y`}a7$=yuI6C+?p8=1*wO28+>!-mPoC8(+n%ECH|{ z7Ww11Szba~Rzn~#EfIYA!@ZADYH~J)iWdbm&8j$kHD~j08Jr>arcp*l7hQB0Pbp&L zDkUoEjB!H}aYzz5AX#GU_xy*9>GmEfgEXOzF3acEBRTAlLq2+HmLh8ttOF#wzu(4w zFiDqmIOUOmq^BF`dbJOQw2nyuwN}3>*HG{?~kmiiikd_$WJ?Tun0tBoz?;>R4ZbeEIG z>X^Im3m|W=lkHk4%6_bl8B`#o4w(%!1$KH>4~viHBB(5oN{}g)WzDGz?7FmR+1UWe zd;7eV_uIRW18o!RLkl~0RppA%$HJRj^`pEld#Y+>AjalP#oLBr?6i{JXnX+OT1uo@ zBMCQgHfi09?Yw)1%M=Kb@#iWyY@D0?#!v7qQQu_4h<+|zcxmfbpCs8G7nv&T2UYMhIOQ)}O*MG)`)Dn1XwKjg|hr7Sv=|HCZbDq<@0 zK%p%?_OXg0#Hra?)&{>O)hhFj(& zj!L^?n^#CjL--4g)OCH9E7Y2)%lc;zc&d9}3kM`AL@Oh)J&Vzc0|*Wg7N2|)3OA&F ztri9gfR^!$87}kH;ggz10nmGhz0kfCgN8^eQ#eThk@9^OI8yl1pl{AZ-EQ&$2<(QPy$q^r==+ zSQeA*=4MT{e~m#M-{B7*icDio)v37I?u#g0RM6MQwRf-ajZ zc*J@7qD3)Ef@cx`3Q27Fhb52L?@@ z0*B&dFZo@2**6G2SoD;(JzHhUYc7&8`-VFJa~?|#4|L`Z#0g~zm}lk;APko)HE>fP_xnc{gj#&^_E(y>Zv z9m=@)e!NQ2Fj&%IM{`%FxODwy?nWSAH231($d$iRDr*+MT4+tcBj?y&nEe@^II@a> zF@}3AHNvBna`Ft!P7bX2^G%5IXQSib@m#xdFX}Xi@$~sQE+OvXLPXeR0-iGqN@mvJ zf!;NjErbkEh}cf`BzD&2;_&+sE1NXC4(A%o-G&Uf{lRFN0}?-}Aux2HTl~kp+jZYf z-YN5^Y51Cq6jh^y2P1jB1nzbnw+H&yB8o zCy`WEAdz);Hqas&D%V>sVJatVY*`fZOhk8oM6I%TNq_WCBt#L?bv$ztgD9^A-RwQJ ze_v>f>>4R#fX7~-4eap@eZ{VaHPHop7e(zu9YA#99_A?41*Jb8h5K?GOjH%fu=#Cy z!ccX+BEgfu2LaF{X&->tMx52fFXlW2%*8oD zL--_il>M@XtPtRk&cF)&<|QAAXIqAbe9>{QLGBC?Ak@e|ADa-ZZ4{@$8&?n16V_N2 z_l{m*SR-9Fa4$8@S5RU8@GzmEF(1H@3&SC?9TDOy0hG^YI~vn*{TsQP+Nn?VS2` zpiY;sGT6#k!J~Wk1C`@Q@s3mvzmb)sp)2^IxlHl8in=HJur;S7nUU)TbQ4~#f0dJZ z(Jg32fg=2+v#&K%q0u6z3Q^uRgTwC!S+FGYFjE~2x4Mw9)a zTj6<3r?PkUv>wV9>{YB2q&j!|hA0o^m4^dg;iT$!v11c5g z7vBz=;Qvj4_O2yRa390~qWgdnH*LL|FmAGw84FLo-__j*)Y5G5h$h^?%Tl%f*YNWN zV&1jOUzuhA2TWJ*u{lmG2P!nYMF5}t#rM`v0v9=BXfG=JUPDYAK)~5IIs9T7Q{%E= zK=JK%xiSZDR%aGdrx%?73bm@k!pR|$)ij3d7!DN0+&xmlWW0)!(FH)nNfx#gyZVe3 zmH#(RILHd+P#o0^ zvGxR~JyBaMH6Qo`+i-y>S=PoqKnM-HNGQ)^a!>#O1*Sot+C>#CEB^+s3G-|ZIVo#~ zz1#V6^7jSE(js8l^Z_k=vkd;9eCD}yX6#p*p$|t9pc#3u7VF!jnt`^EKE`^UN#{e( zr*03Gn9Aw&?>+(Zl^0uc(;Utzv>}*C&Q_hJUjaEd09!FWx zZeGPsxcB@x{G=13hC{@rXmDcf=YX}Agn@4}rR#lV;s#`4iNm~_;Gf6rj@7LE=Ultn zrzJt6lDm3=H^+mYp=CfO$_m2eJ`~VZDq(Q5$(a8m$6OxrlH7q;rAm&A;2hZa7Uw3s zmQciEp0Kn7Se|L?62~u0nBp z7!bp@%?j(aV&{0bls(<5t8hIw>oE&16~vK68^E?JsQMvea@U8j{*-FRt;|PE<=5ad z2i4eHrD~rRpl?9>^Zrx#{KUvsmD;Q&mMe|gL-#7QF#QvCC1e=GDCka#x@jm_CFso7 zy8mSBy!W*qFcO@A4v%lECPAp(VUray*ki1HtT-~y`7%+nfs~VO$DRzLDAmYg`gDwK zce8QA#jc0}BRP*B9A;?q@3697pbhbOtA5AKrEp5*@2m-Nc>%&>g*VPoPQCQAQF)IHed*IoK?=+8 z81HHo>bdP0M$qq5pL*g=O_;_8uOJ`XT)qwkOAh?HpmdcKg~*0aN2#CHEfhnzh0;rPGw`$AQ1YMYM004LDUGp z>XmfluSDRyvI(!YB%QmY@}ybdLBS48Y1tMgF!CGw-KPsD&N){ESau|-d?F(EXrL~6 zoC2+GdJAJ3#Dh1Je|bbAkZH6axK z*RBlvX08v2O7O~?LZi71`p4DHmljFtd!bAb0xB9`LM-S16;JMD!%cNBWKZ=P4m=># zpJ^@l`y~~Lw^=Y`;P@@j8at6=&6Ozd3f48MmfgA#xO`I$h)M7(?qpyHX<_6WR!RT* zSJ+K~X*sdue_V*HjeN1KpNd=%@Dq5@Kt^KO*Y2@ZNcoPI$s3!`LW6l98!qq~{1U8z zrfx%MU^Y`!%>}XfFRTVxa<2gsTSEO@VPYB3c=NObVvwq>O>^FM4B2Zt@c=zifU=p* zurLDE$3z(a0~XZ!uKq-md!WxKw{^3suB!n6sO)Sl1>NbwBQI`4$|>R z7PHVD6-o#tJb&j-)LOj-qT3DjUebqs)&*7Zxw8g9JAXaThUmjuT&-G^91}IN%tK~q?WNQ}CX6N$2jWq@ie_$%^WRH_M zP+>-~hiJ13yL$u{qRi(a!l;Zb4z!A*%nInz8XFw=C_0@N{YdE{I1n~at|LV0bC7M|4To`kZH#Hc}d|kevH8w2ClsU;PE1a5MZ; zQIi2f+4Jm=fj<0adb|_cI&p~OG7jpV*x+JObCEn%_5{9ys<4$k_^k`UpN3Abv8ZJg z0n~f{1(jENdLn{xcR)?sgqVXS9mQB5?*k%hUi7%$7GuO>g9^5FS?PkNI2{c)+50p; zm%=MIDgXjq-VO9%)|A=xtAawWwB#5ZB>bx1sui73y5uHMAQ8J_@3Lp@DL|JG(2`|d z$vp{a-0M(LLrkgzUc49-s_QFyszfGp+om8aLP{6O; zU3u+5Mh)y2)$4SC0xt{fi{rEFE^!URn;i4GTnO#POR^FR^rU;ANbC8wE4#rHHn+Z7slT8^LsK~H zza=79p!!=(tNI>%23}iFB8_PuU$ffrh;%QH`C1mgN+b#^d__#T$n@0Amid{d@5is1 zBUr&+U>EW3`)}__p_qNve8J)6}TCU$&pW+W(eg?Kh93&+LC==|PZQOct*>O1 z>;ld1{Oov8>dz9>5oB?*b#@-4tcYr5Fyf3_m2-N z#gId#<1|^NO)7GOQte*|(cC(cgP$Imk+N9ImB-&@aVVX3+^1I3$`8@M4q`8`001$$ z&j0`e0009300RIF_y7O|Qvsj*YC?Yr(U@{1?gT`-GkTicz77J;xhHcYb7J@-%>;lf zCn8R7pW()V2<_dj`2id3CqmpRU1W$U?7FsGMUeL)E({~Qdwxn?32@(%aK$h=Lsl ztR5&1f8v8s;cF}H1z%Jv*gcNdV~A06Lfz(Jwf}6TA`QOkndFgq@_b-70jG-~g)#(i zsG(8#%-VxKIEKhz9W!qUsUtw3y05Pe@-0HUN7uBeP2ZJo0{O)1tE@f(-Z+h^UokWp z{`DGF%g&opLCaoFz>zA)}_Rs4deYrZ~s?K8bz znm~31M?E0yobMDXr7&`L+uWr?uYtqeyncGw+)ilJ-w=6KBjAsEM?DNb`iUj1R%eRx zTqWMa0T>^dJ`lAZywrZZFs?LxbqG)axYvAL5>~BKB@d4stFP*LSRhx7n=Sr{Bw!X_ zknG{)jnr-Jlv&}y+7od3=t@@Y-T>*YT@WAzET>Lf^xGsJ^>Fz|^SmVmi{~;UH0HN2 z8R2p$4P_N%%keG6W44dtWm;&Os$rG5&<*iM91TqWkF4z>Lb+3&;ykqit zdROc0yUs1!aQ~hO)R?bLLi?ZoljF~vqH>4o#SIh#zNLyu_e9g8LjA$|9$&s<7ViSa zV=`Kj%IcfhKb5+aj#Copp~h^FW;+&KCL-%mfG{4mHI=+_u|VLH`?1dmXOZq7T1kmX zw_o*%^{1sq1U?2cacC?<4s*%_R_4Y@&SLg?R}zwqb#DB{)e7)QRl1cW+ILoo zjaw?a=p7u4JSmZbEM9^1S6>~@`hJ=;GVjFhl+3AqAAtn2__N`gDf|8Dqdf&MGd5zw z60plaRu?wfCGYuVw9m0d=+t8@&WX8JAt`gV2z$caKA}m~@xI0w2_wPXj7+V&Y^a#W z8pC(~x=n0l$h^;i#rZY(KjBc7)wz!W{kZXWB2ochG~bP?#^UIE8aC+1lok zxa@N*;~UxYz7DVOs@7Bh0Ace}0009300RI30{{s5000bFL7U)7s6lL*ObBoP{*18p z-&~WwFoMnq0ON0w^;q@MyP2BaaLtyySw9q8Nf^HA;9smjf~0%)E5+ZbD)z7mKqjr! zvST66d<`#(BYATx5(EcTFn%lTiL49U4#n_CHU8xIZKDLLgJJJ5THUw5}1W_L`$LR-%EEIxt}BYog+IHcMc z5Wyh%nL}}sPJ2Cj;tm~|ORrhrW-=Hd&4p7a)A$5tP|H{^+`=nPXYoIk7 zS~NSoqii=H{K!OvT6Vzl*aAPqX+DkMx#e6uS)z*KT{5q=BQ}nXWsZoEWy%WZ$EFEC22HQa<(@2je7t6Y#$PK=J7f&B^f%@QtPtncz&W_S#(`M3K7V1?s2xT z^lBzN6k@Ti4W6s+WR-q*1j6jCjrvSl?!Xrhu0pPg;ympdm55nn_Uq`SFp^%-XldI}Gb!T9ba}Q6NDkXTbgg9?!5R|K-xu-%*SKL{C zSiTL6e(M%5N*(@{6rUgd0vYp)U(_Sj6iZ?|vw{7Fe{@#ykuLFCPp{-J!bxnYo>S@1 zVV&*a} zS{1L0zm=MotDi@h+81|89nP;iSiO$1VjF}yIfiOYiw@O&JI(HFc?;!=VTQ1?nwP9O zdSP(ore=7*e=#e6wLV}NYw1L2|J9$maJrDl+d3d z`y*~n(D^vVSI*tWo6Ey;1054pNQ#NYAdH(G6yZlPC_%~hBVmRZ7R*8HS3{>@$i`<+ zDuOk&$<2STIJv5|W4a6UdEwQ39>5}1AVHyYaQF$8YMYK{zJ8{p&5EJ*D>h@_4^PmX z>w-z|`L+uyO(XT&{vFL%6Q$cKB|NzcR+m*%UDTVDU-~$w6B#|Mi{X)ST=DFV%wNPj zJK+uU+!tSncy{)Ir(^w6*(9W%ph=zE=0VD9Q%zjnNVP-)Kj66(MJFU@RYR03q1m@rw2?s2%vK> zv2n%;?-lYtT9J22b)B?`eK?J{#oT8@dz|xaj2D`n%-LXE8z7?)cvtJRpfpcv0X;U- zoH%~bPZ`vY2_1s9BGLu+A)mh1yPxOa%K8S|RUR$$Z{U3}sRl_Me>BVQj81a7QiP)p z{b8Mm&utQfBC?5K;e&2A+bUzH;=s2DgZTCZvDIdbY&6Yo!hD8Qo3Y|MpbH=HS12Zv zj)Rzy9k`0vq~vvgNKxGctEhy*|GPgKY8?lnIZVR@O(41%Gc-uGR{=KSd{NsTd@@>e1Z*$7iB02yKJlRD;b{0Cx-`IgPnb1{shoc{G-bHtgB&Rrw6XV3OD~hqHY5h?B}WB$A^t1>xZVi z`A71}>t++=PJEHTq;bMP@TB~jVANJkYi3Zws~CnRV8vO4gf!RMlzr0dUEmGfK9$qngGJ(oYmcY=A45IaUPdEj}z z2s~srrEmZB+poDGF73rB(pc*6%@rzA-5zfH59B3h9VIvClT=1*wefh78z?x{PeFS` zT4AJL2XHTst<$|mAMt3%d^E55b`vHjoRm0+dtRD%Z3P7X^KkAq)q~m&1UXSUQTtw< zqiA+2$-i|RP3msNXlsb%@zToLa6E$Z(EN{`LU+gDGwt^jWXX%ehSM|u7Bklfs_^7a zmo6+ZEx(}LAzLv3<%Kk-0 z#f9p78ikc`p_7>aGG?79)f+-=keM14yxx}(?MwBqn0ueHWtRb3J_G#Ffm4#Y3Hq6H z-Fp7d0P`%rH%v_}LOjA=j0?;OfY82L){qn@K6CdUtBelsASD%ju|w8M=4 z%_qU|9-vZljz|mS7wOVGJ5;)Q4H08c3{L^=7tgpwklZG`VjWu{8cNan+MH}$^AwS28vl6p(KT~*`D!cIxyXbh#UMD3b`4Tdg>`D$e4|sklz08gdT-W~-@x#0i2g9{c z53w63zm)tGJEx*zg>W^#a`2bLiTAAI%5JS7+_fhYNzC?|-xkQ=&5SVhfjt0aI7@+E zWOfyo)WkWjMo*ho~}hG7Y%-dr#rVb$qz$xvtw3L)an*V83=y56S7~ zl7nVITlh-c_zC0r?c~mP77@xcjR#yvMM9`tjO*xLX8vXK5dXy<1zA#*V_-H*!g7_% zgrClDdA!S*zx*2Yl|RY`y7o@?p@p4ucA18D6a0l=bqvvCy}}`*piN27Sd!|1RZL5@ zKRLx4%nqH`AZ?q>93zWi0$D$H_bh%lMo6%J*G*A%CnMoT4&>EL>uhUs&Y40M8}`S@ zT7E3<-*(+Ui<W;?iPEK|8VT&r)t769tAf2S z6E;3d2ahdvO00BWKAeiR-EI-TR9Kl`sdVl*C0!@F`HiGv5h)3ja(t(=q; z{aA2b>>-xO-vlQ18#jU0M*^m!ge*;U2K>pjEte2cf4$9^6F{L~kERoB(Sh||#03{} zLGX{$>|PlEUzPB3@U=i4pJ9iNo% zTVwwTvK_St2>8k=F7hA%uu?BOY!2XYKpP&z)GRQ|!6ZZ;$8L1@eALNrx<7=K5R2)- zg|$CFl&3{x|a zoDf{el>kE=^f zIA^BoZwxJ76Qc_4%Hf~d8TaA3z@E8)*6x0tV1FimkA!*1`5o8-JT=U&`@$)zP4ke|78(AZ}# zH7u^8pEQN-Uz-DM)to?{K5ry$U-`KbyuY2h4vCk31LTS+pg%4ebk2|S+ztJ!erZl*$|)1CVmZ!7tD{PUP`ROEwj-Tc+HrLUxk z1wgJqO##da#+?hlKlG#+Q!lJ1`FuE?9n!%uoNt(m-K#B+46{HWDxcS(G9meFC9!}? zVsigGc435-jC7TW5bj_HXoC~oM?4^$$+QH4(iwKcXAu2yib^&?E{c6lKGUn}EGPla zR9l6FosVuU8LBtlGc-&$R7mx~oQ_khbl{S~_X)?}!NY z-O1RO(w+Ej?av7@*T;4cjy-?Cz1eA-)~;EbF44E-GLxIDw^Oo#6ZB3)nJE_*s)woN zc4s{Biul174pkPOKXt7-5Y;~WOc1oCp@G*BeMMt-xgI`oOD)bF6WRpNB9UA*Pd|!y zDl*lH0|BcrM*g?-%;}I&54RU7%HQ%Z9wClCB%r?ghrRYI8j>hL-PUR*AK&-w zS&6l+Gs{6L-dTj~FA<*xlE|bT2bo^@hQ{@>660VZ;ruh`&sjAhUAASzoGqIH?}`gk zA6WLY7uPi5a}%E^c|<+S5dxQFFy;qhmhFHJnZA^h;adCskhvk4VT?`XrtzTRKAdq@*=4V&XDo-PqMW^TLp6 z8~ZlRhIlz?2|n0cLELe{A%nUWB30TGbS7%TI7k1x z*K-4y@Qg6;IcBRS@y6TS=}fZQ;bEHUNip%KW>HgbzS!#NLpjyZi8sAyRjQpqb1Twk zU~W`+O=ZPKWHqFAx1K6^xQJyRKg6G0QzCZl{C#tkPhbfA!+4Z<`o-haa{3x>00093 zFR^DPpa2Z*?#ciF0{{RPPyhe}#sQu^bV7d#O%ITu@Et+iH4s2oKmv%(VbJtPdeH!t zJ5R|n#E9_G>M)Pm-Imos zj=DoIBHaWg+7;6D*N7T81qS$Kpc?%#(Ei0di;_p50_a5SjULO6_(6SUe#jgC5n{~t zVUe@id?DX0aVkk03~2G+@h{U&Z&8q5XGlj|^{?v-e=l*NH~oouU(;-BMc$tOW+(IJnu*R_?8QQ!bEGjQA`7%`wX!%VT@Kri{6XWsdf$G-*GM1*oBF|F+NR0%`<_v%zRAUvX|u#&O+#E&OS6XHvWjV;O-Bi`vKA zw;Mc<>9R11R)-^maT3Sgb5|cZ`tdWkILy33#6rW#E^^yy$Of7cZ0IGz*iuVMLyYAy zkWs-lD>3c+5KXwQJrdJ`FCXl@Rt3N z3i1)hn9*{o=EQ8Iu&sKt(km7z+U39ugdgM1P8zY<@J_oJl4!3u_H9)Jq$!;_xbgcKErD@q_-$ zs}}IlzH=mDe1%RF*w4wQ2XbAR;xSj&9aGGszc8qWSUO$j`g(L83Yem8k_5GzE-=hb z8Lw26q%avym7t<0%X>}})pJ? z00Zd(o{+Ek&a5hUC-k`fa=F2 z{ho>PnZUV+Cz)$M#yoYkP7M|GLu(OtU6pT?rI2%ZL1yGQEaa#*xPTx}@#ZLk0W(YH zcwW3$bJ(@O5i3;5$n`=6tA&$E+e$_(mVRg&RZGf^dTj5ew)`i>VIbG83bh*x=M%;y z{WfWaQHC?w`^X43qmBvX)l9O|KYQl-7Rffot>*m#D7^|Lq@H%BQlG`#cQ~B55)&eb zO`o5D55MH1Q~n)BifRbU@Z$va_)#r%+-qn@=a*$^8iSk@5$I4t>Utc3PY8#*)36Or zACL#1Y>J{4qAvFQTGztV1JtG`^2JJ$BieDO?!Z4H!VF@6^N&-7_>_SEU`;r}k^LNW zY`F`zQ76*O5<%-Rps{4I7?Ce-Id21&jv)DBme0yWC8Hdr&gS1LS^DO{bsSE|A+1Pe zywoiEA`O|3Y1h-$FcnSL&F294PEqT)I;0vx3d-$ zo{9bB)tA6iC?B=WQCENfog`iQF@#zl>_$XbY+;QMO%HtV)i=1n^496rKLCu{w(FB4 zO3bwuyxDn%JQ|<^sE?G`Bw!(nGz6_~Gkr;H)qehY(=P41Kh3Eehn9??AJD`NIW$D- z089d*8(|DW)`C1CUd2jy{v-YQ<+15zU5IoXjn?I zNDn16F!HMY`Na00Y6qhmlrSBV?4Uc{vsTsC;{pTKLS-=%uKkkM6@Lw+zvTmz4)!6 ztbhO;b-(}!W_SPq0{{ix000ccL7F5rLp=^?8GUh87K(+4P^UM2SqON(d0j|ghnfEcjW zGiQ8sfT`=RMx=ZuT)T@qnB0tg$AiSfJiW)#@&E8#PQP;sbC={BIfjAEYUPxR10j!b*>y zjwNH3hkJt1#PtGj4|r;bjM$vot~RF=oSwnyVgF*?^t{pq;xONm{S&Dtq^$Yb<9eC2 z`Pkakunr^Sz{ttmQ1U)+QCG`ocTbjG^7k~=ZnAtH1OeCn?(yqoF%NBWX4iP_8s(n! z^BXCyS3w2y*7#TAL7z>CwmOYZjk{D`9Q>mCz$x9$y^Pt%A?V6FB57p}qfJ4aSCn+- zV+x)_aZwDLo<1&hcE*npUG6Yy+4crmeIO3%{>JmhyVKbQxud2N4prKuR-bD$5YXFI zN;;JA%!z9TD6a*bhHkX|{WPz;{w8FWPE)>@%HtTw;yVCm{m8=Ei^aX6kKU8huu9&L zLtoAF?Fs*IN;S%LiAe=vjL7O~=(nRIghmj6P;^NAEtY0`RixA(|JkK8R|e@D;Y_vu z!<{ym-E@kB_kak7S6l0k#e&|4q8z9F-0EIp80KZMVGTmmi$awqH%Gnj1P0lOPW*w>hX<-Mf+ZtjOfOR0evGg*jpX+L;A5m2>F_ylvB`LJcDj=j5k)XNhRp( zR3`#)w|~7#F@3SZ5*H&7`_X(_7CfU3UKS6;GkS{iT-C@u2nA-bv7%2Ny|a~(=Kf^; zkLi}fp6WATFG~ndZnc_bq1F#eC92_rd~M7^X`PL`Lk#?WtI7*OWNy3bt2<2UFu><# z+E*2@R;w8MRQtOvmq6OI*U$vkR1h)Z`HyR=vq^M_TTf33h5u!sxTjz5kIc^R3eon{ z`t<@+#$jl&pvrAKjl|@4l`)&Ai3Hdg+=KtK*fUXih=*Xp{mzIuZ$LOq+_Un$FNyF& zGNJT$=YFZkWi6N)pk?4;-yBVyAO3ApsBzaQ_%~nR>*f;cf=;F;XG1&y{Ge$Gq=h>3 z+yCPiPi7$m+CeKFH0d$PXDAcgdp-7$vd{f3EEM<0`LYgJx+a3#emS;j3!f%~GpDN$ ze*8UXy(cZ_yzGEmxT3lpMn-9J@NZkTdI`95pp$jkYtP=OM3HZ%Y*+n?l|3y`It|!gz*sOTI^c`2CJLE5a#YegIkS#C_$e zJhb#8Cs&Q&srxUCI-J-Ka9!w>gqsYD3R#s z{U2uREh4{%$~-43sDn^GqaginFe#e79`LzR)Mr@Cd5wjx^s1t0)b(y~oKpbLGkm7A zQC=`{Q-hKv%Qm@n*5eHay+4M6aEOav2@9x7LU)8^lAbIhw!hSbY}dm-TiLptvG@rL_|nk*T5?x!vx2da;o z2ga*>vUb#P3I5j|C*EgZDL3ytB&jHbMgm=MErC16bNyh;vU|g-ndmR}4r+hyT;h%& zh4pfEcvp9oYrR%R_My{JsNzFXUg+`dkOkE4PWVPF=<5k$Ngc@)TQON;KP%^IVbJ)5 z4B$FgaQD;-C1qf&;UlH@5?Z(svF!JHM9V7`F)G^^t&iLtZ5rp!CAi|9*wG33kJ}qc zWu)i(JmD&7Z~mlEAV_2+_Rg^rP#(t#u)xVhH(k&ypN#X1G;rFOIX}D=AVs#vXspnJ zMa)103HiUYg!2n-&QjmW2odNLM(ptR6NP>?S&gfy(*Rb}W;B#3b=`aX9c9CZiOlsS zgY?BEL1hftayy}dJZn&=qy-4ZWH2Y#I~SA3{z%U%6tmFVqgZR`KmkKC6+}>%s+eJw zQ=TdRQ5yyIU7|E&1Y@{BBTE8gSrRt6O=la6IP*j?%V1@g#co;%^xXLwZzKEizjifJ zlUf=FQD`{WR?KuDNhFDP4Be)Mr@rmd&^5oz3tQn?TkBrLM6~MrM9As&2DuG96O+tL z4g3|`{|8d)!3pqqbj%IEPIRv)$EP0OzsWFO6*N1}Mj2WQX@J(`8-x5JyRd<>1@w6^ zAz|fdkgY{uS4JaUVy{usBx>)SWWX@h=Ma>T#xtt5`BC0FWg#XkD#OI8(Df`VBy?jB z^10>e{T4@Y(rdo1JCwv$Pqllf6U&j+!g6xW0h*;C8~{I?pB2+*^L1&Jbn9WPpcn(a zB9bWCilDos4i9h-QX@8Dup`S;q%7HdyVmRn2dA<`{y}&@e{tx561>{SZ|!EhK6awQ z!npTr*OZ2h^PmLx>CZ>DHat$X5P{Q$#3B0e3LAd5>rect@4N;qNcgrc-OjCe*G`^6 zAES5!#^5ECLD2Uef-OVw4dLZ;R$_R-& z+oN-yaE8+>7OU^zyeE0|sxD z_l!EI@P%x8QVL29{Wv{8^bWIW&nH>DSQgvkb{{n}I>aXNaSPoi^0pcnyA#`j3c1cn zVO$bDM#MLXmhE2O9uKR&Zgy$3rNweb(0*+Ihn;WHw7V#VMMgK8xugZFO^ckjGIwuP zo*oKXydz|4$p&kW39V^Vk%$YI68RcN}CJ?{PS|rSB5ZgygdW?=&}!O03hljRNb_6!)kfV3S{lMQA$f7{Uv*6zP(6F^%RYbB zEF4wyc36hH3(CR|oGPBNCRD?l7^^P2EA0D}6;7Uw=m1FT3Y~G(il+x=W@!rp(@W}2 zj{fZ~@D-O=u)#h8FrO-DbSHf>7HJu+^nx*g9e0RKWvERBzTR+Skc;i9aQI9;uS3~| zw)*IZ_?S0)1diRjZ+O!y-Y^#X>cPU;j7ov-8!~%(?W2zM8E0;8XZ7HD9t7X5jR4nF zifKElpI!zm9v>qf=Hid;N!>_7AaS_RP4j=x13f=RH-|9nE{aAFb?XydIX^Ucp|~u3 zH-x>tTj}q3S@_1c4S$bhN+~VeD|VQ0bf*+M@UWh=FpooZG@lU4Y1}hW3f72c9*W|Z z{PdfRRH>HIMGXm%C_;;$BAiQN3*Npf`bKirgiT!BPmCGEMUOp@IyohX(;L-27&)i{ znHbMPIA8z(0{|i5000HdL7qZI6)Y?N1^O`LfTA-e@>QqaJ<+38a*XuGHE z5shT!%Z)?!VxkIEL844c1MW7$mj_YhmscS*e$Ug?GoqX4jvMcvh#UqV>y3-)b^(R8 zsGC_vhH=h&9>ul%SNZU2%IxoK$*EU-9E8|+a^&$FgBj0zVhKxZ=~w>_(w;tz&Q{-t zpiE(u^6`NmLROvn{`=ERqcEy-8{bTIaz__LNBt&75ufploEI2NSih{5ryoJO z(jsg#d}3&t_Qx)z_=e4MwoV>hS*CgO6jt|k;b)Hv(~GsTP83t z7TuQ_ibG|oOBy?3WvItK+Iflh2f8g zB!GL?nN=txrKFCi+nDZPomdcsF*LefQjAP)X~0m9IVR?>Q%3+eeP7(de{@erCC7s4(+T~Cfps!J7 z4W8nPHUh^aY(=J-5;3mBi!qNCe#qy$u^8Uj0dD_40mW_y+zhIqLk&)$jG{2GP*DJm zFu9dW;x?neMeoUurul+r%RrUPJJy(2^@^Lj+x^)_=H&c>ybO+B=c49_V4qurVC7%Zxc8UGaVnm z*HcaxEymtMmD;gcux@si7>--0pvxMW`$P%TCJCXWn%EI-FAe;CDt<{m0Yuh5v2N8z z+e|rPzpmNSp4)1u))MzCW5c3%nt( z(0DQ6Vb#`vm7@FL$W@aOPV?yn|QAvjLXX!+J3WeTN59#F_94^{HS00Y`i5Eu%nsU^}Zr*PlSKVHVNa8i2g(<)K0 zA<-e)49=9XMZP@Zu*@e`>t`9Cqab=f0S6u2M&`5tX004IV-`g3d zkm2VQ=>e9z>~`2Ik@2=;FWRGP`YJNK{Hp`!_e!3QT-=`^%om>4a_t*fT|De7_FxYGW;XHrTN zclUW0yJCef$iO^hm)YNW^HauNfEBoL5K@yf#}<8cAJn8}xd{Ed1Cph@>V;%!_$=1*{cahJ_t z%*(2B?x!JZ3I-@=W%;JRWG(EZy1qF558Uoo_=Zua4z&WriI&o}89*$OV+^CX89t98 z7r!RGqkp5qptx^}VY2fYM-lOMBT3UFi0A$jGfFe?E8^qOZDkDRyV<+24|!=Gwb0iV z|Ln$Tev;37CxR?a86z7yauULdg)rgBIIf+>$0SsI6YhSdwBNjn4V{ZAhviyv6_=E6BASul!)^v87 z?}w$Qk%tCPCi!!XcUWRoB>ubdhC0Q8bx3=?BhP&;*C(q`&qlOSX*vEs^gM=TWz0hq zA_@O@H1+>i!LC|K5g6N&)vPHArX6xnNDPB73nkr82Vs&F_DUQ3VJgf4xWb4WFRXRn zJf`tTlIiwfs9Qbr!-^=@NvL_a4uPkeO&gm{5<}?hu6K?Ku25-0kAqAh6W6JNRN0^c zZxC1uM1&+!?3whCZ=Lt4#2&=}00RIf%T=@h00RI30{{RCxBvhIC;^^hYC?YqPE>qN z>78diayUsJ4!w&N-;9UEH6->Mt%&d83 z@wm@~WL+Pbi|n9rPXXzLZx4=rJ(?mCYL@GCHMYrHquyXN$g~$qhTJa!oes$zvCO#F zi>?wfnk{u8@2h_6TelX?pDQqFb`Cda+Vwp$lao?sWnQ9$$+ZgVTYQ8EIRj991)4^H zw|;}0jUi|;MvSK@!<%1jE($!vyUT8MD|YZyI_-a`DPn5Umb}S@lHXsPM|E-r#Am43 zy_@Fn^XnMh1B6Vbm*$JXSGP%`7xyT`nhLL!R^6s%VL~~Bn7J1#kzE)S+8uLv!WSzj z(g&Djlv6Ye^nb{u;%hwKy$VObks=Y#5Q$P^nbdTVdX1iD4X>=*4IF;d|Mm0)`5H$E zF~xS}4+-SBDn~pQo;dNuQVd-yfE5P#W00L#)f*^#L-adh!vOyzdin3hS-wcV|2X3x zh_C9Ixtmfza`Yr)FYdDY$L z0I7F!O-!Y_)NTyo{NQ@{l@{=VoC?j+Wi zm$wT22T;>Bfe{^&dJ$Qsoxi$MV46!bd=-5UoNk64Es$9?3_$$=NXm9r8wxRMg+8<` zt6Y(nfuLLbHvdaUfWyIayx;?8%@lwU6Rx*AD$v!tgqq!?PPxy1g0#^t@*VkgGiJX# zpx29_^F|vTVKTCY`)ABfX*~`S6PVzRe+M1j%@-9NTZcw(M;!Im$wSBtzGJi#NW$5y0?SwsSRsMw?@pt zSnGsKDZ++=jbsx^)0e;F-VX{S05@O;0vs4sDkc1xMI=eTW&m)spH8^2eI_+%#ev5a zUU8^Z=>Z^C>LS9BFXzwek>X{}u{}_cwb`5mhS>~_(yKmjLr+dV?}D z-Zz>pwQ@?zS^GMeycwu~7nX0+D4Qp$i*4hzCeR9?LOJyUj0Lp$*IQ<~H2<6c01@ZF zfB*mu!y8}#00RI6X8-^T+(DXXNvJ_=nM??8|Ne}ygzNU1Tzj)%mcGwS0qHvD2S6Xf z_ICu)5yDOfXLhT7MES^dUWN=-vQTDP7>~TCo`@_}y%%35$lX{1Rew;!C1`SJ_%c5?;8cNKvv|u?(m0CNKB>{9zGwNEesmK~uRg>$@I2KEITpxK)^H$sre1KbgVLNIm9Se_KhiC*CrBtr1VxT`%?AU!M^4W2 zroW#;&LFx7Ohl3{6K^MV!L4t*apKI$x7P4{GnOwS%pF{0PBhTs7)CeoH<%YMwV>lQ z3O8HiW|vy0)@wdr`-d}Ax3+>_1U)9TU_+{&;%CatG6v9=t2xpRvsg=QlYQ0=d3RSu zB7aT$prz~}V{=`3hcT9#TrM|M2cXV7{B>L^I$dQ9o~u*7sQD7@TW9p zV$ly<@k#1v^O$F9!^tNCM8P6fK)*BFh?k3I$&ks_K>VqCkIgfzrN@@ zL^W77Xe%KVrG41tu0X1Gk4A*eIEWI*HDpaih-_SrK;ao`+tMbYvb;xz-G^&ax6h;a zv+94$!M_hUhLoi8d@Xt#j}whRVQM`Au;YV0#Ru32euYT&GZzxVE#={Gv%M-eHJkvs zYgo1GzbiEU`^@!f(o+fSR8>b;rJyA)uf&L^mDWK94+hl@|F2BobxVpSrDsk5yFA;Q z)IPYi8G1Dd#|*?85$?~-{0q%caEIUXb0sPXPRsuKG8+_&j_u=tPWgs&u>}=jK-s8n zoE@oP^y^fnwV)GNHu=h6kdxfoa5=Yu7deC*z&GJ;MZJ}OdR&gbR8DWuO%Vr>{BHF+~WjXf!0e$zt2j?7NSmL(?|H<%)D#du$J8j81- zYkU@nFi}MXrpP?cJ238Xgr<;-3RZq->RBzE8JHwXuNzj>^XjOsA4~g2w1wNXy2L9F)GpldG)Y)v}eCF zHXX&!jw~SVer)jD{x40ppUnv`cha>61#(jP7gf(?i@Pqm3bncAzM}IGTq>G`*I%4@u|xIEtinwkK$d z|7*dFtB-kq4Ni1)|CfN#JrFuSTTt>_mPeW8)@%+)R7Cqkq#8pY_Vc5%R~_84;Jq!D z*E}HRH16*)mSXeE{(!iX>IXu$;_>hT*mIZlH$;(tg5Vjytz?w@*ET7VA1QJ+#}_no zXDVc)6()n!e=s5rZB**JxIp;=CUC7#ZtUPZG9=Q~6Xx5Hg#E&VAG%_?;iZ8O1VQsiYudh-!bBL2s5TK&5)w{+oIJG* zjP8{3XkM<=)?Nxh8-#<1EzOQHD3ibk>|6IS7Sl5=2@jOh&{|V2$x2C#l)F8WDUsCN zefx87=#$@F;eNp}U1)s()nB$L6LGsAwK{mvC&t@h8=m1I9ZLsu)4OnZ;(~`Yx9jwP zsZ%8(bj?J+MJ_6e#&H9BhCfuZStr!BV+1XB#=@c;jLg?(HK))3nJ8v);UA+Nn>%1U z{1F$Lus=_`JO2|%8i6~KSr!zEINEDOH2<<4@Y-d;`|`%G_mkFFF+O0p+MHfxyPXQ< z#mFyQf4{>$UeOBZ1jU3L$NVYgToB_0-pNU`_hGJeOTI0(Kr%~%R5`ZxaP4He^stxt zx8+oqmDk||9Qn=L2M6L;HPjt9n)6itL~_!msF@dj|H5v0a!&n-Hs^IHIhcSTJ-|wF zI%R65h=#yOCB3A!5liXJ`n*^^A}E{bvJjV#3kHWzC}Ds>q}SzLe>hJYQ=BIyggDon zv6q;W0T zr~irj@`&ar(30ZPCj>W=_}~@<+ z4eYobHlj_RJNjH4iV%{(*^FMNov!1eT$lZEdJJk(V>dt9RKv6R#YUX%aE#_23iJp+ zpTpoiel#D;hDCQHt_9R(&)?Sk8v0CWy=qeWePj&wmYyw0yK}<6W4#;2RzefSp$ zJCX|-k4TFP&h+Ua+i{YP8&!E74wEgX`hwJQmRthH>e%%uvVyC==UWn+$}JWgbRwmV z^CZJ`Y1wEUEy2I;2(Y2QZi0=yeAe9e$2Ow_7x(wAP1Ka11p^9s*Pq^woIgO;l4$%b*+Vy*+L`5eLOMwdZLW!S39 zQC<#bLWkS$uzl#(?|kzIvQkt=zSDui(vfD4^_IHIpx@&dY*uQ{q&$s4iJZu|RCR|D zsywT0CKI+tC+hzD-#N*1&ua(g<&;9H2-oyYfAJ;(VYg~`Tat24_9Pm z)lO6_tvlr=OcAw)jYTwPhVcw56YMAkN1ul>%FrO6RoNax3yY*#!C6!LPQfO#(F<67$RP@~oR&)&hYIMG7-ZPj zF8+h60Wa|-D#56+d{hjBJL2A}Ihw!ml!Uv7J(3^cHB+t-1Y^M#aIK)jR!r>11yU$< zNDe^m;vF-3#E>wJ*DB?R&z$~TH;t%Yq_5?}-?*l$3-^0;fdBvn%R!!oMHMV7{{>h_ z1=azFkPUzkt|ZQUrbQ&tYY^Z8!k2wMWqw5nDL#66sur$!*c{wI=!G%%na*IvA<0!y zIS$SeX!B13^%08XfTT_Zk?CwcSOWVj|7yRZWU7GdPIR~W(HnF!gWLep*jL^sT9QQ> z8qB5gRjB7n79?VI3&ewaL*$00tjzi|l0O}2h-&>q0CH`%tRA$dQT+gTnf;yN>;e#i z)+0Qtg#kabQ;<=O=R?0rzbcgE|5F>DV;5oRt1>>2D`WiT%VMBmFUQ^z{4YTz(3Rd; zH&OTfY77GfSZGT{K^yVI80c;FMKsrz3m|->o-&NVqt|3C z+IMFRQckbFKm`muxA=;O1c9b~s{S3PSK#1bUXS%m50UNl ztoF^3$HtAz@&0cLy0*xVO(Y%isb17_W`SPDLdqmkjyz+zD^Z?a1 zeyChr-1@20ooWqO)}^4nee(5B2yTr&2l{HoCR5oDWA;b128mOHgkX;{DqgV7axy)@_wP(Jw6Czeu!K))&XQAl|==9Qh!Q`mbQmnq5A{4J} zd8Z;A32wm#|GQ1BcEhI%*7zY{sz%E3>TMR5`~%Cy@~i@sr6&Pb-dLMXB+$$DR0Mk&030OL&=UmvYl!@OJ?70gFGIR%259zqTFhC& z^ik~MdI5z0pb5EuM)d+;RJG!WZJxR?9+LvPBkK>)M*O(1iu^(Ty?(Th>Tq~}f~O@~ zK7F_1d{h}D_9*X!asqvZX-@B?P!Pqm+tbg0hTz}Z>AL+@C>moTT7kcb&=o2`OxRKS z;^a!F=&%@F=@`s{j_RvwJ03%8+B9g+)~V$wYErnE_>Y1!Bilh_DTeF3Qrp*!6$j_xvm^~}YpOwasSo^hm)M`_^4gKCLM-6001edapR=uK+|N!u1OJs+2|rnCUZ#(64zbGt*wwtDWPxVgDy z5d?(8dQ`1mllqXz%~-$spE=%+rf?od{TPu4`4sAhv}q&X5HN;VMBtRZ zA8`;|qAp(SbF5p|Qud4qf#7I@&&$Pd(9M`U@77~k4>TNlzetiI#zgm6qGf{6w0`6()Zc#eyS7%TTD zLSwbH;UY`A$P1{{ZVwCSQ~OO}%vKkGLJu>uSPay&WQ{Ng(aw*8tZ9$}Lrr*}*s~!t zecslR$i@==cVFm;tO8J-rKf(DL0bQQfvA@W*ev?l*rYZA>bf3%(zJ3WH z=nFhfxqjbI=_EB$S|xHyuOeZ(5p3DaZTGq<2_$U$x?8Ye zli0wF{eXy`p?r%5qf*yqKpP*KlKRk(h^$C8RByoOPMc3@p)Y!i{+g^`wv#hK-|R!D z5YX-7j;@TP!vwaARo#UZM8V_)lv%U-V|4d+JWUwtjRwx%+L)n2s1>*JR&YJ3|0?4+ zCm+C!vhFe6>dVF}sR}lP9=hw>e{`v*o0Rw}8B|(}xyO-6RqbnLX!|6x%1TPFYxv(5 zF_nlMCFu^|0ci&sZG+RX0>D8)rexIFc-lhRq*-e`Rm+A8Z zP8p*0qZ@iE)N@8}6WRKJ0q6jT>$VCr)?DkOpBFxE;J&(U;`@qz!@dH#s>EO%Yx3a_ zKYJ??qlUQ?=@EzmV6@=xO}xpV*+{aWLIUuRYxC4hKqVb)?lqA#VGQcPsx(g_NlB3W zw=OgBjbJEKVXvCGxPWvl38!Mp-ZpzW9rU5^W|xmPjdX(bElI|zIkTpCTK664%>iiu z;XB8$o9c~6+U64$@Dq4bPC06@g>+1p=mrYFKjm8#_4uEC)V9h5qxnmU_8!D!u8pE1 zK^GKl1Jn*@w0LlLn857hT6X5|nZ=Zw zD0N-UM~^O2Y`T%HMP5Ks#Sm3K(bfv zbAQdc-hH))3n~;I000z=GQ0o)0{{R600096D*yllmjRxqYC?Yp<}jVXqZgwk!5$*r zyG8&A=9rF6z5cSG#t7aPOJ0NkDk(fs+fWJY~@s53mg=bY78$D3)1FEMpf7Ju?4*rk^ zw>^5&;&;bJS_V|#nq+_Kg{*0oYHzZ&`nO+9abqe=M4QdN>{>P|f-P$;WBdVA z=>1jR^jWTr^LtQ}7ZIlUwdmE>_PVN)Q<>jvx{}>;-ghX-_r!RQ?bLcYOq)ArJ#Px) zmt{I<(*+K$P*1pT^a3CcxH_qS-r?J-yRX0-4gMvSSOTbHmX7jY7x|9eJ%OzrZsOgG zvQl8wUp-cj5F<1MiAT86;?c4yBXZ)Xx(^KftIZ9J>i-;CCe#9oI2p(hW#fMVhIB`!9U zFv}ziUl{8n*9fpVmF1k1tcoEV(W2I%xJ9tvFtLMqQ`!a$;Uc9R3k+jG3-sk`1^16RWSA<3Don z@=L*m`tFz1+vcH(z;@naui?~zO4ZHH&@0wg^-`+e4=FpHm~v)jw*KP^X$^x|dR)OM zsI?(k6w6K$)W1j|Up2(>#j-zEd(tXm3MZuEi@e7pdy@0_ZPo~dmO3254zIN2zkT@o zw9$Haf_4pj`Q!lTW~PUItmG{4SyfMHS#OdeuDszYU>_U2*cw`H;h_jy)UB|Lr} z!bcDnC0XucexNO0T!f~==0sbi27jLdbApd@#NKiEYmhpb2hnHb6s#qssrF@`!^d5= zv5)%od7)AN-6Y$fJ1@U-WK!M~fM*?f%B`ji$aP*bW~cDZpCyVxj3lgk)RO`uh z!A#yQ;pndRw00UWTNa9;G)PcxGVE5gD4(YNlG`?g8Yq)a$9x}9sB6oT(LFQWKuxm; zMX#|cwA}#o5R;q=2!nY=feTH=(yg15p^Wx)2WnQ3(0}eeqwV<*ZsQUo$t7ms002~8 z+yDRr0009300RLp000hUL7J>ds6lL*ObBoP{*16}aq?IO$9$$sB>SU~z$T+5A9~%@ zz=@Ivfr)FGj}6Pa+m^=~`+V<)gU`MQD+8;|Oyl`w$A!eHUpF9$(_?k>iqQYrm7 z@SR9R=JK_@UueB*SKyi!mjW+DBPpGbk!Vyw0B^U5xs9nb3M+o7~U-Zs7lUrHM)o(Dq}ZHJ<@)i0)6Cui9TfsjQq|J6FxM zK-M6#Bsqn`4~woRP5_|g6`p&IMhMh6j3-GdzQg2}ba9+W?fH|mu#XJpm9S2-YHS1;?ix_*-0Uy8Q&xzK+MZ{k>rpV`|dpZ1YNmL2-lMPdV@OJ`ay zW{ug|N7oSvjVh*4EE|mM8{qZ3gCaY9`fl#f=3ZW;`o$6cDWX%`I&Vp%P%rL{RK9} z3jfQ^GYeiN);LoHL<4D0*$mX!O*^o}j4B29lFIk2PpmL$i+Ja^`O1Je>iyA9tuVwPb&xqm<7#Gc@>X&Elf^7WcSG^H@??*90tJ<~dLP zRO*$*?HouI@N=W)bnF=IXGuTkBp`8w->nh{jj#~W%L*Ptei0cN|Mahgj82B1sSAwM z=xMKN;CSmV2TW4HhjQCl#XP`~BX3}kSCOSORi2EY5qH}AI7Lm5<31k~TAWm|0B64Z zB4a(`!0tSObMZA0Yo#W#A3vYny z!KN%Ks6Z`7-I#he9JT-e-rr=|tA5}yZr&jfB{&ftfL3Clb- z!Bol%>?NIs+p%O!CATZ&ANapl&tY~<;~jKBBu<=tf9bWC+ z`{4BDG#Q_tsNF~5WdimldU!f-YVl<_?`m!6p^=2aO&O;aMIwx=&9;)QU=CY6qLzn&jMw{%X)WX6$oIkB{bZ>t>ssEUrv&MF<|@saVh| z)+lwS{?~njRDkmeFBf3X(~IZ|i#pk=V|ah0wg{wp-)4~-zyx%!5bHER{APk15g^6%=?Yn355~E6goq5#BDAq5JE(oqXI&HMmc~0i~H2+WM#;p zzY^ke=srBv3idM{SeU9UWxQ(2)fVsZc3mmh|IPU~E^eOW%fhcQvMuL&K3pO!bw}a* zm|WkwkDAGTbpgf*-dXJObqzWiyZ!c)SsR5tf6`P}G=qA@J|HIbDpEg0W%Tl7Gv@I| zY$>#0xtVW`h-t>|z62$o*g1q!gC#d1Q~k^hUr@k_X2?SZ>$FCp{dyTl?-rT^5I7K< zn%=M0VcW#sy*75wJ*kYOnA?8t6G$S#SpZ*Jx$Km#x(7l?EomoDUAk*O8J;kr0eCaU zdZ_&N4T38yW`7RSkm7}h$w;n#meBMiiL!DYV7sz_@M((v-xUW*^(%0fxmnzOy%NcA zarHf50Izn};ei4*%J3O(B23`L;sd-NjNdcPPkE+xOBH4Ge(x;>K1(WeN?Hy4+@_r< z6B}WKwvpH|f-&XtghA$t$M@UgJaju@HmcXpXk)cgU7FuxcY3fD!>)u5QM3&0v>Kl- z(Ki9N?h=b2q3~We$;1LbW8dCD!Q`Hr0cRGZHcy;bGwP>?eSYZ-H6w@wa7|Qb-$sf_ zY+2Blp{Z$?IJqwxMtYp=t{TS}3)!*UOwxMrQW8h(Lj?pHuD7IlVgAqgHTUEhcvlNL z+B=pUcRn>1uAAm3$6PNZY3~k#p5dii<)z|op^2x1HBHbt1ZuP!!d&lR*_|}I_Wj5D zK!P%gZlK{o_Ho^Wg%?8VK`~WC%B-{EN^F#wh9A!Ih_|G|9*YnPf81ay_C`!5UcxN8#28}k z&J9rWMeQwxy|@T6790g%5dbo_y79$n;rOu!qXL)LR^grpei&~~Gj`EGLz~#@>^Grr z*sdlfBW-Ul(*pp>U&G}VR(P61ttSjy4v;6_EKNAN8UOJd3q_3NLc>Q1(h!S?3=K28 zQp@jFYfs-s(4QlS{#^V|L_4W4T2qOK^Ne&+bCMA(rQ9*iMCrNmorF(IcHGL*6MeEM zA5VaFB){kSu5`6!HOUZ|IQSiQ2wpJh8qx_Eo6AvkQXP+U%_FLNuYPxwHcj&tG!!ro zEPCTru|;zVwn_DO-mRPz2!((u`R%YVoE=9JQ?N;ppINzpOfz$r^NM0$r&K4_s$1`{ zW&!9=fHk61;?OR9&&ozi>nL1P6oR2s?=3%wGPcaDBT>?X#70g%yD8Svv+)IR;{xA>CgvYFQ$khD{q}=oXPOiK zSw^ntpQHTL2MEVZg_2!@Sf0x}G^Q;c5Fj~3V}Wb+fipe|yVcs;#PK>7k8|D*N=5#0 z9txE8|1wf*GRwHaHnOepZp&y&vzdUOj#q+-rk%#{x(ZRM$l?gLVK41A(^6rHSnsv+ zA;pgK4G5f(on!?Js|Y$DpnE}hBBhtu7CKNE?9&6F0R4O6$AA+!=}!VN;spG*k+(Jn zqwQlj{Q1$?pq2c_drG2vnn31dgw=yWCS4bYbPQaA72{4~>#7a?c@e!!&k0JHSZEH+ zXX%B!`^5J;mwbLfHpqshGOB5S1BS;@XO&>|zK}s5|sr^9F>S>Xv_*Dd{*5T!~?o zls8&?9A;J3Lvp6OL^DjaUj~Fv6P!Y52Dh4OkSDaWUk=xWSKBg0+2ACr$Ka9T{lct^ z=}*&lj#b_cRe8N(6bX%qb=zr7MxrLyOE{rI13-FXn+nAW+H1sa~^J`V#YL$KMsrnR1mn{GL?HS}{ zCU~u$`qpRM`OGzVT~bZ%O4_Gsc~p3+uQ!OP~*YZo4-)DpZOti#lh(7~&p8D=JKk&WtKy3Q2~^lVkCXnLrD z!%f7NI?DG1jWZ7;LX>*$T5KmN&;BwvJwbZ9xbv9j`UoEytt~IkmUer(*HNtVjRW)C zl|dB!MsJN$B?V5F_qhTZe##1N?#%2p7=OH|IOa6Pudum|$sk`ZT!Um7lF6)pK;>Pk zI>5tVNLT{i02qR+L5SWrt4#<1r_XxDMddP`2M1I%X^)TeJ{K+(60*eK|F4|QQfui0 z|LwIMer+Ny`D!v_Q=v$Dy|cuPZ9Q*PrrJ)Dr)U7=X+{P1wvaI6z_PLal7^lsoeZ51 zC+GywgO0(7D72{y0nKjtnACWvGlO-4(j%lASkM_jj9ORV{Ab|50nG0$o)TZX zgNhoVn_h?ALu-5;b@0#pp>Px#a5CcPJY(>t%buysE$vq_!_%s}x&`bBaw#Zv;`167 z(lG#rgxDvpqXqOwX_pOY`MK9+z4Zo514r+>sX4lnnk;ac3uo->!iML1nB#8C2nGkP zV1(uV)TXT=>4Mfgf6M?Xv4pxRoTBtxti4N6<-3}~Dwoaxr;x4V+^Sw+OOQoS8rTFU zJo?SNBe7`BV*!DO7b~tCSjytLY>W5JYWM|z;>RC9(w3i!6VqYGfFql-*&x7Gy`Q1z zUOlA~2?!lrAJ9pzp^eS3wjNDU%_W1U354fG8^ERhf)^eW@x*sdWLaWt#IDC~73Xn) z(Q(*Sx=J{Yv`fvIcp@)^z9<4)?BJt1KGJMS$?|27sb}#DA^5(J<@rGgG4;9aDszRS z7qOjn3BcGMrurDw1r!u^vo$0oQ(H3DHU2|Ht#m;$rMyELM3M^Tt5&=t!ilFS3xYx2 z1I_97js9Q%EZN@TX>{tAdlMQ8b+X^!T|ldwWRs&ohR=V*Lz+{1!MSwm#W*R}`LovT z5i%HkTXFP!+h-=txZO-oO?BCWTdRSwAbHl=;cCo^hdmK3cznIdFhLYWQcu`phVl&v zSpX^g0F(5$f-Z>leI;5d8FqdJv785))otv#zq9vT&q z1k=l)!P$Cw?(t^?W{revIF@Oo>NX3M|L!%ml*vxsD%uT(hyh_1Ae0bbmHJ^>1uQcb z+G3GD=}T+6?<$RQq80?rEwH*x7d)8a5%EZ|z3Ww`RdAT>6Ft~e?ia>HfhV+9)?YQR*R?a{%_Np zb)o@SMhi(Nsp*v+v~QU&CDL44RTy8uwN<(36q z`Ziys?i`&WlM|7|xKd~p(HoLG{UNmbR7nqV3bI>*ijt#!%yL^RcwLqFAGg;!WET}< zBrEL+FSmm>MoFaAb~Tfe+@h*sT2O;6GKGk2FR}M+$Pg~VottpvV*g9@FePIXxCX-i&B#1@jtzGdX z^Ejcz`sCE4{26E@P?*b0G!H+&bKplNhB4}`e5TZf0X0%YgbAy#`5`i!lfo+Iyntdl zvI%+~8Z5$GNI2~W>s|bOl`m&C;TunW5s-9IhPHM(7YsTLh)A&=0A{^hheZV-qgN=r znV8XI%0#d~lpHI^tl)$;SS;*`(&3KZ6NOd-!~m>IhI5Ztmv-t{W5?UxHG6Dsn9KS?`%3Y!NrN$@q(h1^p z7rly8)V3Csf@c|{=z5S5gXQ15DH^4=%;dvlxZT;;7isz2OgJbr3l4je1VKFLtPRLn ziAc#s8rGV}_J9#PCVJX+-muJWSb=ZXd#BG&#fkA}1ZvE}kR_mD9rovT=z@VeDp8R{ zpw&+x6AcOjBu7<4F9}c@4~d*E!HCNqB*lTMx!ms~G83%cNgNKKio5>#=x~tQ^1Ov) zZ`aff=^fkgp3AY&pi1qN<8Iyj+KEMt&k96Y_sD{x07aO;p75I%o7=U?2Dcm0m#WBW z?M9E~*%wS`=r`m|e!4#LGcpk^T_i}W%IY{o;4!_c&mThe*RxY=5i(bl=kCG=&{wH~AEP=(m6P(w_5=+31kpR`J=Bo`s_V8n7oEbm)3f8o1G%ezbnpS{ zY^<0_l`MG+{v>?P38nlL^AMcpgEK>yR~{Lyx;*^=aI$$w{tDfk)_++*!t_k(5YB%L z_8R97{wa*ypdHN_x!(DKr!Uhuvf@ChJA}G6x%rmmoeia0d$1twpRtj?yoFvTl`H5N zfuExF{Fm?t42BbD|A9_(zEvZ*54L)$T58NFFWdQPFRoo`11w}Esj}chqmyq+oI-pj zt_U@>l$xxX=Uv`0>XBiMn?whq^Ak-U!Vf&iPP}Y0+M}!I|4s{2Cld)Pkq#-d+r3kM zV;}#~&ei9CwJ67?3}ET3M#v#HCEcUp#(Aj#1xTbjLOS%`T9ySLHa64oVPPy+^#vz@ zuMt0e&6g3&_m>~One(IXh2-Q4gR_GIMDO6r&!ho~;v4BtFlbw(2uwIDZ#`z}=|ZKu z^%@b@4ixA)>9H*>BPz?FCGDjwK?s_G2+=NChV)AZaqLwignSmS_jxj`@Ol2f{!7#m ztRmV+%0*I*)@S~6KOh<`em%$^Up{U8lu!Tw0{{z}ML+-uBcK2P0{{Vm000Cy0iNk} zLVpL15vt#*ky*UgXoWZU%&o{j`e{yiDJ+CnMgsz_<{{Tc%>V_4sd<>v0*pg>s!49% zHdpn)FLLy?7FzMrh3nm{yZetCW14Cx(EtHFOkmy7TrZL-rx4Ct0U|aV7+j0_3V)a{ z9ox&h3Yi}W@9X_0xAogyCS5ey1N~*(vjtotzqU=TUB>4v-GBTqX*YgYBWN7t_zw=A zI03(_g!^;qqtn3~%0kGr1Ff+4q5n)GpF1oyuvY`Dq~ z5Jc}g?R>NJ1k^1m0XIz2tP6gGFZ{*GEue52W(q^i#9)<9fc5`vl_oRwvJ;uS$6l3XZ`Dfg zu9=AvaB77ox2iAp1_B-q2Hj@=H6gzoq8=NJ6y0UI{y+f2LIRb<8?oPwt~CYL_Q)bG z3VL87f~$$49)jBqGu<*Pn^d0Rcc3%Nx{!7=WO{t2!DB~b-K_9Ak>yZTd22k222@*{ zMol%(8Y3|c>g9T~y$x5(FYdnNM`N}r)X${PE$#$ysVp1RuQLfV)tzoC6$knlYFYxn zEd3)%1pSS4;@QnPQ|(}BkneI!598G?0nYMYu5^jSDdn-UbqE}JvS=!1u;ojcaB9|= z0meW|F1C|`!CBwV4A@w`cfXCpI8;Z+6fl??l)Y|YI`coR1i=t`A5}C} zhh3E$XLmXR76ae^6vIAuv$4a==w#vw8;wE|Va*K9@VFu}vaxO4Sglq+2GCv z+%Aw(LUnNvdd;}9T<=@H6$g}D4kL8PhbN(f@+s5ZuPC2*QzT}k-+dR9u==DWihl$n zbq^d5Ykf?<*IQtF-639WBIJy?@^-H=7+d8}qkb&3$t%8Y+@QZyAG1abxl?w_$vKJ* z?fk`hM6-I!N}jziY(L*~3c7-!mtB7|aY{Q)!l1NmTj4Mb(^b(AWB#D8RA}HGoAQqP z4zqc@mYBIEOx?hXoxZTjNL7j)ZJg_aO-fu zfzZ2ki#JF#K`LNtPvI1fd8rSjgaAUdsV0$0VEc^us4^Q+KAGqpH ztT;9b4+FSV8}d-n-VP+ayba6DYVzI7rE)Qu{#c9m>JekLBL zlSIi!Ow5)@W|RLjkl3bG_|Q9z*2_YR<~y<*%JkmS2-c{Olz%zRfK$A43!RJZko^R( z9RiQKd>PaF656tI*NDIvGrD*p&bWxS$0@2|NGjaW0!O_jE~==xe#?5%W6yyOlDq0Ea09v6jNi&N&Y}GXvYshUfWt~OY(3Xj(DlYFgaw$&?)&uRz3FeWOaxneW-y=db)Pv7ZGrRFHkI;Fdv2(ej3wLD= z)*=u%m8p&M3eSQFJ!IOkO!%|N6&@=8N}Lct4e%Yx@9Xl{5ftZ7(CN7B@GPeoIe!5wOdFnGK=U6d^OXS{_y4|W< zv=&?)$s5VI348B#kr^m8>myD*jD?s2$UCF0RnmmctD&p#kGJ|X)|&AqLs|Y_v`Z}3 zxI6%01|?s8XfTmjF2k~X$rKWL88E#Dmu(|I=}TmQwmX@6`cZ6t(4KkiBgc-%e%5O| z@phFpZ^tuZ|C#Wwc!F5%_u4~=Z5E}{p^Couu;l_e14{8*K~-a-%IshA??x)Vbe;0T zGx^kZpZlhk7HgxM#U!PeL?}v{%0-qG%-v7M#fr^gft?rC0Je*X=lfX=^=|72_6jZv zg!{CgBsqAU!)b(yef*66YP8~3Db^!n3s<^!HkBl^ZJuja`l6F1aqhwSS}{`26mn{f zD$E`z7C~2-D>Y3Ut0@|XASeO<5CM-|OGS2@Pw^l5PQh}*ba!F+W@NY;Wlsa)zXYlB zBgPs(@LZD-@+z&2rPw0J5)*Ep|$=cgkaelrLHY zy42f;iD%uBXUml>_UceMPC&A2vIz7x!^KsdPO{qK)E8_T!NpO?w$XX`b|;MMY~0L(k>MSdRI(3J4jFZ}i zg}}9Kz0jTLs-&W988V91{AYg?Jnag2JyjUUBk0=>@JhiS3+abiVXzjjJ4OhB*(9=k zX#yStVIQVuCbDO&UzrK(fqrl2s zxkUYo-9bxEdGEFQD$tNP^<0<96lKV_gkuCyYri>AwNfwkZ01<*^N`xQ-xGmyhpDd_ zhL6E$N@6}-Rr3sw_UIlOfTa3#-pj=8`(cA4nZXZ5V2LDJ0Q+eO6)bK_D+AWZ#*cnX zRh{rb!nUj7!cI(+MzRKy1%Ra(WF^^gt!vSlb8A$Gah!^fg-+$EISz}_6jRSCzQW<> zcyHdX4X*Y;i4e%&jg5C)O0BFeFH$Ui!B5S2zQO9R^upoHkUpjVHm^Q)@KE-;knX)J zPT#2dd2G`6?t0ppJU@-r2&66gMZMBI1Y_W($7g|157j*yVRRiY2Hv6@)&v_CEc`H} zB;vRVmgHK+y$7RD;cdr}WyDYCTRTZ45>D=60HbC8iGel;N|E-nzBL5{uZXs>svHHT zWBNeq8#5R)}%b%70(sbKzrLqv`EC5F$5GM7OjI=w;rJ~!4Kc!OnR z95h-I-~?9I(#E)j!W;{gZ_yUW1%BDhrY-DJ1Mip*WX^~OB{PqyB?ujcujIvjXeLE2o&RIV#Jo|03+-|~|4)to6s%6^a2 zWq>ZL_%i9kdbJe?NeZ@;sRYC=kPQHGQ;fJHFUuLbUSFLOaER?Rt!lKw`rU4L?K1rf<@8(RZU~z$!@xYNwOHVx-xn2(S;p z_NSlp_z@Tz_XPZg4#0rEC{vm_iBeTkF!0(laFaconMziAaTg_r8X=U$sEoVuln{1e znSYsQudo&=l}{s|qkSlyr4G-HH}X_C8s!xJJOF_4fEPh&6l+lJNC%y710sdjB(Wn6x@7dihqC96;M8NV)kahNi0 zN7!SZQXv!p#T0UVxshIEE@uICuzR|WRJ)(8Dfw324k(~g=wxiusPIm{nh1R=(H8MR z7z|J-F}woZ6|RL`UJW=%1^Ci34BGVlm3>j4HFJLSuMK(5!Xh_8CIn!8?HuqhkLE(I zKjVD0Pkn@BF8saY08nGANe#-q5fYNtNRdqQ;(58tUP`sQ7uM=oJw!hwSr>cY$kFEk z4(;-+rigjxLQhJ_0Gk?QQ@IyT6B^HaE0;%(?eL8_5>{yvDnEn-NGJp-VTE;Kh}LaO|AZMn4emX>2X^wMY>mwW69Z&EpOYaej@OsZM7X@#!uMQ6pBkfp>%LT+0 z(3M2wkwzHrkiW9ii%PLfU9p1G>@GNO)@VDJpsVa5-+{p;9L(* z-0~Io)8?rP`OrNt!-R#Q_~Kv?vBhYPvOs*HZKu!HM#f5bX~OnwD;CB^Uzz4wseZ!4 zdJ_iF;iYA+lP+EmrX9@jugmR(3Jxh;0|(Ds`*{r@)ry#?sZ0{I90~C*oY&^de0?)U z&3jf&djN#pz5UncE|wCq!`#J}bXYdg!jHPx*Jci-vdCb;ZM~&JLDAj*!sZg_nRr82 z3-~Ay(Jl9-6^r$W#9=eE$si+u)lY3EX@>G5ei52mm=f@$Z?Q zO;g%hUkqAV%@Lve^e_S4QEwy+8wCz5W>ns(G0B!N@N2z+Xk*O}-r+B4)uI#}+bQqUHc!{R8zrgA{D zxtc%nbi@>FlEN3w>S1ZQD8O7jNXqK(%_Wy|{(}@z(-S}I4b5mP;|pAp1hCvhe{GFN zT}=~ea39O46!Y7N!=$PI7ImKAdH1fqcd-jj_dPojKvU_zm34SR&{81xdg7GavQMUs z^r=n2ed#jFubFrw4Y%$e$~|V#;@dj8GPpZzx;leeLu1>^drF?OZnl@D>6^!xTWrE#=~h;s19u$zhD8_Qf7i_eN$U2aALKEGPi|j z>B83y6!ItRoGFl+S4xe$hE@{2arg-#gaJ@1(1p9H+wITwPh^`r+;(AlA2Y)Fe=qtM zaLTTuG&-wzQF`;NG5o$i2XTee_rX+N7flvnyLbP5f;K3j*N`fM)MmIqDxhDjFt=n! zDEbnWK0KkfjjmNS;qRPqEqmT*35f2uq+n+Md<@Em3(-@(Vdse^(84y5HkSk6t%>A* zanee8MUQ@3_#^- z(|Y1vSSw+N@=6L?+DaM7I8L$UUA-%-7-+h zZ1KsBsSyv_`F14{d!64-WiZ02#BY zi5GtAr84X_wJ9kSCAv7GIsPzka?Wa?Q;MXs2>`Z)oq{}X#ykqqL$?|vMtccE`gJZb zUAFEaN;aUxFc?b!-K$>x`hq3G1CJk0M;voYsT)QVuJ!0s(+{tzbGboI&2X zjttpYZ$GO4_DKedh&x_4Wd64yNkYGGQF2EuTKJ>Dk?mcX>zl5IdmC=e4p3tk-_>)o ze(~wr!>wTCDQUOpoyGX=EO5I81lH81#|)`k#f?k(Guxk- zemf+0%OuLkn`BuqKEo=U65quWij>IG9&2S%NpV*s&~`+~JpdydjY`B%i1C9e5 z!%(FZn+L3!2m6+R+E7|VK5S3#^7-GyS{d7@7Kl44mGNk~5nn2fU|7z8cEkPPFnRS` z15M-U*CSJ3FoYBQE@_NR*gN4cfv?n~Qoe_il`U0Ek(g(nw^kH#)4`9*G3Q`uDI5+( zKy2RrQLpFG#0}kR(V3$w3f5Y(J1a*;XMWHl+peHtxR!qA}AYrG?&*SCc9QKtOb|M1b#7p{zh+(LWfFI(+l`D|^J`$gz9fs-%_fM8d5_)8XD?P*XKPwkRgSTEYl1dqobno#>eqGdj zi>|zzKLftiy~4_Z?Q>>yls zj18YSn>0h!Jf&HCFR~_F*u3st5^7o#VrBz;6Jf_mGfN#36WRZ?Jw(Kn^MDxn(hrRE z)nHp*YUi-9fLvbMQ3nMF5pbl1q^men#q zVw^-(VqnMZZp(L|=EfUOY2Zngj2b0U{D2bYuUf{}>+C5Yu)sGwD`MXb0gd%?x1I5N zg}Tm{6UbcWruTbq8uEn(+e5)c8~X@H83yI+ZbzCkOnl_ifLFDm`csIczU8Q&S4|A! zTVLgnEO4&eL#HCGxgh0=)WKD#m9taD)_5(~hi+7U!>S^ozE^9N^77euC;|}H+L^48 zv7&NXI^D=TUhjjvi(I)23*n#_gFORIKk5k{K>61&B*&95UTVN6`jfqz)bSk{h*!se zZ!6}md;f~G2-Ed$A5AE0O;P>ERSnAz@9m|B*b^vpL@%Y7&kgPg$61IHSd4xm5szMa zUA2Gd@~H_;qvqFnUg-cIKd0Z10qc9?AuXrcN}fjOeb(W`^aAX3Q+#=(Ubavb`Ac|Z zCE97UY$7CN7i2mIywY4IFsuUFnxKr*`PSUv@BpEh4+Kbtw!x(5+-wu;5wm54m)WI5 z+=$kr^Kh8yl5TfKqbCP?zmH0z_U(KPZ^IWsi9B#j6kAOr4P^yZ8#!MEcoUdq;Ci98 z(RB*Lw|5S5aCBB-B*RiBTbNZGn;!1eAEfFI0D>YSvwxn62dJ{oyY}fQ%`1#EM_rxa zNX2B7ewO7STbp@K1mPx1F?nkXJ=u9wR91!Qgk} zI8-19_P;4NND9JL>EkZVL{KxCl`He9gdwRq1b~i!BR#Vot^|i%bTaMH`^k3jJ`a&n zpGaaNQ46jQG&ajR8IFHqN6Ya)8|aXI#~UXJ>5s8^0(>~LP-7>>hXNeWT>xk!9Z;x= z%g;CVx;gsNQ+aqt+MAKp7DHRPr2B3mWW5c2U)i5FajlaQpDtY)eBsnvQtFkTm=Q~l zg|ALGw#f6Kxm07re3{bYWs1w}RwCPIk7-0g_=PRG(DG!VR!}S~gNPz=su@N&Y(c3U z6N1Sk*fV^xpe?@_I7X2c;G~`q-r7xUCHk*ueN?G4HdcLF0^Ocse;Lc-&w1_;Z5?Zh z)7BkI1r6~vUir>ZGKn82uBEy^DU!ad?|7CpTz!u0uF#Wg7S`LIUwd~LP(WeiCD}G% z?_g_{Wh)wQTI!{$GO^-%HNH$)cXXN62V2Fv(g1PY!(H8Dh}8vPWt=Fkul9Bov+gw` zdHY&LB~CNhpPxb|4sbQk+c-|qv#|VEkpfHM>dYn(JqF&Jwei%D<%eJAN&PUkIVtW^ z0=Yr(a8@St5bkjT@iAX9&Gz2HZ}FR5COx@1-bP7aL$Gh)PlR3t?#m{D zubY?oJyKz`=Z_J3E%|DLrl9tz45{6Wj?`OR0T5ait@h{Rvkl1jXd|OpYt^%3a z*p&Xm_xr>8MF@$~T*LWxROYg7EfWQUqyvNeH@c>$&EUE+Sv-MIt1^80robP{bHs?w zUDka_O3Jk{R!RRx9qP4&YfX7Cc#spIzb>@y?EE7uWct{2wXB5K^;ThdL(@H+bcSH#g++2zV*9aI;3krlXJ%kTQ?j6m57wp>ba!9 z;~p9|mrV5FSitd(8ST>Oh*J0}#184M=rhY3yg+X`Ho6v*O}^>wkLkG;Gg`*eF0&zs zC9~b&WS?dh-4ZKB&l9cfuBVRh4wXn>LG|g3dctzML|)PxAZpi8n9WyM03$Om$B$lw zCr%p57|ALZF)Sa%vtiCk7qY|8`u4kqZ3DcRI=$4~``yTCzH(&1j9qw@n!J2W)GKbY zV2Fs4c1aql5)tREMHLe7obA6(I5Cavf@m&u0lMJo=N${iD5R#F&4!IitMW8uT6vCy3HXO zSD|-fj7A}+$1HS*0lBXv&AL%)L8D+Gscov}OOndq88w-JljTX0aFTyB9|Qv+@OPt$vMaka{cbA%PLCd(&;S^n z-3b3#WDSUX-P^l9IesTXT;)x_X>vvzjx=YwTyF+PLRO}OV(rq_=<6!~_e>hynav;_ zr*VpqBN5oAUDQ=h(zZ?w^J;@fy^6ZH<8M@b1Bx0Lf5I5VC0)P-qoUo!Z%+Hf!HXNo znZ=JHA=np+7wE;S@~6`;dq%QXiU!wip-6)9cpSeRo6MZJS95fMo2(OCIKrAU=406g zURpvf632s;?FTz>Yxj)?-thXIy~n8)opf|xC*fAGF|iI{WIb5wAcXg&c7=_Hc&1S0 zvEHHVOMS>=b}*9<7u`Tl+JdQe-qBKfU(WZpC_ZmzZ1IlFtB7^W2$}>4?FI@pjR5x! z;c21=+_#^ocp()WiQ|IvK37U_h4i;$Cr12t9jq5@y&zeHtktPRcmbe^Txk0|wAXNm zP8`ggBtOO)A|6V$XKy_3_EVoI76L5XACP6nehOw3$ZwcyI|^M8&CLxLf8ot)b|L33 z0Q<-9ipy`V5y>yaK?lsC`31mWSC-ye0Xivx18Vnf8M}5VXgT%{g|F341*Y&pRRi26 z&ik^633nGS2yp4*=_1I%ROI=ps?s#qaLd(>ZvyN(yTC!JOscRUJn!gDr>ADN^e{_x z0Ae4ou|i|nF>rncg9KS zlM=2|^nJbIR5E$qL3IdDg88~8*c^$)I`yT1!_R#Cd~ZzcCImFIGHNu1u!WPb+Sqht zT>JB`+ZQKyoC0@1@(BPYfVt5P9I8P&p=@YMsv`y4;K&mNjP-|%XSLKnb&WHF-V=hz zYM!;51YEdw#NI}N-3o)Q6HF_^+zP-~JEFXrNL29Cp|AV<&dNz{Y z(nCGO+?*V*SDuD-_g;2Xrk&DaYMx9{(Rh;6CFK{D%ljR47qt`vh>zZG4>-hm9)+h{-qm z^F@YR?14c=PiwITh4fjP4z~?XP7P+ug=kn2oR#{l{@QaBu;sA`!+7HoZ;3k)|Qby$vh)f}x`-5J~-cvz6;H=s%?K_yv#ve{o(v&uc&F8OfFTs;I{P}9xK?Zgv4*K3t+ej2%G&N@chEJVXR4Ly=nDM3bw2Bq{u+~< zmAI#mND2@KX6GqCg{euIh&_TT)Qv>D{R;la)Q=m!$PVaig{^DQqprQqZkr4?bAC{1 zBVZ^!+x_gXMZCR`zg9PDT%uu=aUVt>e%ku_T4onz?i>(#Dtb{wLMaP--XcPtO#`}~ zhOttx;8$6wC{KgTzucpbhQ|6ZPbimhb)A%DBsai_x263zTK#;&QeVG=z*7$?5 zO|vhn*3!S)!_xmnFTen?zv2+!e!v{MU%(4iQ3G`wh|iA##xld@8UwLs<0%3&N*~EB2_1hA z4B)PxMy4LbkT<;Eko~Xh2(rsF0U^Rflcq`X^rTZ!W9WS@++eR1eXZ(*p~AdJ%PU84 z_t1gdGkAx*T~f_a-fd@6w_(%1$-ep4+|~@ybym2Lnf)GdRNz{?zW`DuMd~2y_+m3q z;pnl`eSC6+>8l4Ifg>7wq>ssP9Ba9WBon}UFjl4`dZtp4lE^39PhB_l<|Y+4>IME? zPnPIgl&jLF75HCzVW{yTrb7Ff)R@Uh!wSs-Y)=vMg(vtHtx8%y7H3!5mGzG^sU3J; ztB+0VPpz+40eI`=_g5&KcGh0w=4F63IW=cskti{zBUIB2@#m8x=YUdXWMc=W7lGbW zHs+>6Pe`yZ3Ip2btE^nnj#1o80hAs7n3U&-g7CZP%`I<>Hj1*Z^*>L(0}gAADhpfN z@9t#0R#;Ztn*{0!7ihz2|9&IZ_a}@enn7=&#_t=f$`zcQP-sz;gZK~l-!M4@cl8-F z`OA*e8tBzAc|PlNd%|%yi%w1KN>2@SXaA;|$WsL9l@Ru;xGQ{D6I^0jYp@#S5%9np zo@Cq4ohnFo&@^(Dop0@E^9!Yibdl(`;%FVB1RZkNnrX!~2vQKgdSHX$S#7_ak5Ls> z-FmEM>Grc-AwH$?cWoRGDOQnXta{lqN%!FUp>r-hWm%Gdg3rnX5Z<4hU5qMS-^(Ep z2sV>P?2JS@?nDNm0&3_2#q+D(%8BqEjMLN?DbDEX*)wxddkfCUGo0BNFR8%yC%G)h>+q6r=B}M~iIq7*Gu;MrZ8jERh_Q-aJxIrozWDz*JI=(}JxrY4s z6M0&);*p18;wZ@bry$?Krld<$+JvCA-(}l$$uv_|C3`ZA1~=r)HXL3R$R>!+78MD4&-J<=#0LFgA)`#w!4LOb@KB0opjjcN{vW_rG1@mP zRdf75uLa6ObjhzCU1sG0Te=^$C=pS(Y6It5apiI#(Jnp3DUt+rWDe~1Eb1c&m?aQap9B2*(;u>m)aw5V{2Zq~Auvzx6(arFGfT-GvuW6y zEHq!UcLmRNr9~CX${M1-ad|STAWGu;shWMB4$Fb_)ea}(9MNBejUGf6cY-W8{@5o% z5GD{9|GP*}dBofBp5`My5?IdFVtFRnrOJ5suc%Zke{dxU-(%thzrz#ngqIWHVoX~o zXPSa2V55ZBCv0Fr7-JTQt)^s##)-U7Pi93(VIE_)+DJ!k;IPj!E2v2q9jfCn=6F4s zIoIP{*t#`RC_VMq>1-38{*&?_T<^KbWIMe_o%97a#Qdm21uf4`e(;dZPdjio7|Px0 zd2-yCl&}TN%zd}m+wU|Vf)MrZ?<{#uTb#M?iZ%k^iKEHl<*&m#Ik9gfD1QIOIh?2} z8vM!m&77wXt}ZPbvmRCMDx=-x9^OYxTj<@1L~xc)5el~D+6M`_EcwHDqj!uT9~A4U zp1WX0Yp3`F@K}}^gRlJ~q^I2wJ;F$ghzKpY)Xn4zgCVGK0kii-_SYj4H#i42^Yb4b ziX8B*cqi@|Q^8kj2Offng6g}TW`OfK6z#~APcRd zW$p*wUV7?NJQ|9Z=8N+N7{1ll!!&PIT$ZwP!xt`F%IzpWnbN^XCY9Kza)Y}WMsPF3 zV_9ylfUDctdhv3!udSddHJ^EAdFdirDD=2AGv@ka#UYIMu3<1Mj8xFpw2seZ?NWlz zSEltxO0U;_Oztfs@?C0^rC*cULn=K~PFEV#z4gW7iVGSNk=VsU+qQq{+$wYu5n{0W z(M{1`v*{W54w>ydliB8M=_!5b=F@H`gS)_h=pgj{%YJaL!TMK(!0p?~k<`+8B}~YM z73sP+Q^rHT9uS9|(W6_L^MR;)oEY{;#C~^JhAc-v@uUOg5?Eo~5=Rt^QBf5elY3#p zKW_3c9Rph^GPTTJO~+rDdJGgp-b=e?`MA&y;A96pP%;o|OR!CFwFJd-#XjhrHn^Y3+SR*=b5bQHip3xLG#Q8c?&~(nBW%C~CeE`=fX(*AVt__e z&glWAK;iL}qWjV)6xDXfn(Gj&@=uJB4)u71y{K0TyDqyg$UwQv?pKJPza2$t zt0vafoi(0}k6d;mX99}dPq~2Yy)h5qK6PwRRLya|=riW~IP%gW&|VbbJEvrnpfbQ{ z+>a_ncS$?eeXDNO4t!WG)0pddQeRtHCrBJXp|4n2NoJq#J- zu(eAsxRzGV>jH|IFJYv0^fw<&IFLAq}I3R;eGYBE0owlMjkKN0YNvgv>u_ z(PH~!h0NSM7ja-=Hn=)uYyo7(KZyK{wDp6CEU@%DgqwFkMR#^=L8p>M);NLsB8ILN zj71b2qeX!8j1HRpSTc-O7v@RC9h>mOJ%2MmfJgG)M3raJ8;5dh(e#{!t-hGqd@JxZ z&1@7!7un_g1taW-i&#vOYhfNnCp+PVYyg8<*)4?9rA8ROT~2`J;=7?+8$X3%?(wvG zE+^gDd~Ff--EPqk@J)d`48QUP0Jb8v3ViKxp^Em&j|icZ2?JZv+ranX!y4qeJ<^(t zR{Nn1!etj+2e7UwvDF%9H*>*`Xpa_|%xGySWynsurqj>o#Xw$ySj_@n^DV)|Aaaj8 zS@M_uG10?oUc(Ka_b#L-^wuRBD*N5$ojqVlC_0Yv`|G&>O*bM7T+;xl(bM2N$`-R2 zBW0mssyuo%3I<%d85)1*oKSGm3YLygr~x3Sal@%$XOG*hj1xe^>$-oUZ*c$?C83EbXYU+)(;gC7#U%WljqE*%Aaue#J}jZXhDa8b0{zNwBrUBCM(O@_&^Pm0VGETE&oV0PJVMmq5qPs^W&0k`Ab#EIuQUR;6x+6}k9y^-VHM-vS%0hZM?Vd6w8URZnRcw=HJP_DhG%X_)uB z2ASv2gRqf;sc!ojb__$vHoYt7=WFi?;p~|vv9;3JbXS`bRgZ{8PUbn8QX!?P*vT~y zmwa;1N*)gtdP_=M5FbxaD;BNS-B#vHaZxp4;MoFEb}X|erLq64bfyu-oZV(@2dsUwcG7L!mr$Ef(SMmB)u`;(K zR2V=YwO;xUl#@)SXh{@!<-5FM{WxTd+n9>{WM6n1?4@fYp#6R&0lCMy5AbfUjJ^tl z!WXxAn?LC~j(P1^AEi|=@sJf8SV8^I4niU3+>@t^!ENNsQX^ahMlUMf##yu}BYM;g zZU|bkdF;OcjYemxX0_37;I#5T6<`L7xQO}CZUBnc>QV8~0o*CwJAF9<+Tug5CU<1^d$BYp|7k(N@?bWoSX*% z{D#8`;nvCm7m(Zo&$V9afxw&cESDmV;wnEhB1kc=13x&CPfSe4%o2|`ST%<&r@`nOZf}1NLtEy_kS`L2P(v4L%@>S5UH?kJA=T<^Q=NFtUWbHHy z&og*v@{rYB(u+5|A77xyh@S*wn4cC7R-;>92dLT1y){T4I3lDrKzpy^H<>g$(7WM^ z^?3}La(`0pG;5-cxF5@r9%}djkNl9`Q1RumC^B@F(mos&oxd(i&B2O<=uNuv-zSlZ z@uFR%z3&4;g#PV`yp|J|$~9Ve1u3&c4Cp-vKo+3cPSHn*vOjGUu%k z*E#R@c}~TxVl^uv6{nL@1sHtDvUqE{59VlH3F0EW`HJsyi|z;>7xUmutB zUqF2)i9mJyPVG;S!oIuuBM1CGy3?J9!w;?7Oa{!cwyp`u|FMMP#*zfv%SHAFSL_jb z#z7odGueF={4X_)syp6zOX$SudUj=L87#c^)&nl-P_I>2$l`@r)ocg3N=qJR=W2g3 zy5XC26>Zpr5Tm+@@c7n5hV{wt8bY81F$8~Cy*V+8a;pyIjGP|;M*k0cUO`g3pFE7$ zyFS>y6D}k%3v1CWJDfjCl;$KB%UJ;HouiFiVz<|uLsfW9Q)!6*yZ)S9J{6HcYtR}5 zTj~H4nVl|an+&xTa66ds_?g?{J)n%?vz0Hnb9IAi_oJXF567sY8e)Xr4UZZzCX1(1 zt_NU$K4U6A2#B>Qaab;B^~36wwaq&pAqCFz^?pp<+~A{~0gOfR*i9&+)EWq>9PsVN z*_GV6qC!A>eE?!y1J|Q-hYS-crwTLBrQ#~7qw8l!f%B((;1)diusI%O*WD0if-&I0 ziqtUpc*4cbF$_k0~Ev-si@=c0Mzec6u=Pn~=j+x=K zF1w-r#4CbQ_`=T0^%!*jvR|yf#%gA!VRTfWTp4?yxlM1|v8Ff(F%K8l>A(`ZqvAu9 z&&w|62JM+Xy-fZFJsq{dmxLGp`6~EW9*@WO*rI5(A%Ysnau=8yt zJ)JpcOdNOn_naa(vd0hr`)1x$+NpWnp2t-1g);AXmbIkG#HTXc=p@1Y6AR_kX_Y8v zhw25DDY)SK;f_)YeiD?57hrSy)ONMX8UqXG zU@IOJf6xp-kjuxvCEo{>U{t83arbm7S?+x?zWT)@O*$_{Gb05u5K*F6cj71X(hD4+ zbvk9Qz6jh$pGNO|!gM43D1CAC`j;y~{&FV3*tq|mL9y@sK3V~D9R5R?tV$}0me=Jk zZ!MU?BKqpM5Y+PG;_Z#3C^W94JEJ;~ZOlV=Z5_|G81e`4g(80S)%67i<^FV(swMN~ zA2Fe;4HSLF#SfWs{4Cpi0rhQybvF@PaY7(<`*UVzOSoHJvrKj231R~usas`3Je zbGT4>*@3r}-%)Ser`~Nh&3O!a(sgLP?(+8Evb1CY>R-tIB1NAOmW<xaN-RSB-@8vpINVxc0CVL-*=Abi_PZ=#Z}GLH;^$tJG?S z^OUODq;W*COzahxcB*I($daYyFJ>m452?T2RbqycEmcoCKuYhB&lpVOWDuNYURK$l zli}4?(P-5t+#Z!v0HpC~#9*?IO*+#^nKP8~&^%1EfAAPd(oJg&hAJ7Io~tk! zzG-2Ea?=Bd5|8%7;g1PwE!ly}Glda$&5m@PQKTa}38IbSTkrtPx6QOFI2jrj=z$V? zLY80bczMpHbVS&xx+7IZeOUL|GTDHyNu?y^tif&yP2+#N3{?~+0s`?UW$D1sfkm+- z7s!NxXG$AJ$mBLusyL+J6ZaBH6KN4o6U86mD&tg^KIxOq_ABL^YeTI{;q7jXgb}VY zMBwf=vB(QwU7iZ%IR7kDjzV<{7B>M$3d~G#bXwe0H(EaA5^}q7m4c{WPFwE zWdH&Zooyj4h*ZRZa4bK`p6Vdgt4h8`+V%ntNFpSEAH62fbAwI2eo1&Os18%Y@Lgkp ze|}zSwsKUT*!d7%Z=4=9KtI>MlE|{W;qM5jqgKXxRMrS>(G!j*VhBV_A-Kr8t+y{v zq*N~B(Lhg~&rj8uR5MNr$-P8*-zyTDP3#*Sefc4~?ucMh z_A|4mMXmCUq1ZZ@8-|JdBHG2c`#ti7S);ANU(!jFf7qW3hERHCCygwV_nUSI-%He=& z9@%;O&#fb5NX6s7=C(NTpC;UuI489tUfkGVx$65v0 zd~M^$k00Ip=EKLz#_q*!2(2)a7E3{;=cyf0H7Kc12^I~LO z9H;*fAclhcgMD>?`Kd3jrHYh@U`Q}yXZ?ZDpSiP$$KEA)J6%v449GGve~WI1UE=*x z{rNfmZHHyIeJ3%U$h#gscZ9q$z+`n4U)$hq<3Sv22hhE{?L6#v%8}YXv}U^?H@^R1 z-CGO11EKf&MrF#l(Up8aedUEDw^M6$YRO_7eiS&9CuG2pMvgrxHP-8Ng!K^-u{|yX zWePjv8-W)<4N#d-*j|~cWH*cMYg*2Gum|($gP20+TpPdIk~AsB^Vxnhzic4#-!HuW zWfc$;Sc*g)d4u&6%on$KmRKjTC9$O&&>1HrN*`&XK7?{DvZfb|CNh==gj8xGg}VTX zoiD;)`X!pCYaODz%~b~!aKy$Z8{iK^!NM4+_J0y>W<2PX^~JQ|)S%3|rP)4_9AU^6 zpaJ!%XcfMuE;eVtG*#!jj^}MgPu`YnQ+Fc<=^$rPI8L%LO!TY{<8CR!TGo8yl|T)f z#2Bq?fQWBrrMM=Y1&i zv*Wb<)i^=XGP_tP6Z#&^l{N9r>4GnT3#XVX33SRL?{Je@q5tVu$zT@LQ>illm#@66c-3n| z{-FN&;U%-vx~XF@KHM#g&NG&N(bKFZl^x8*L|uqc7Zm(%@XhCWPEp#jO7>bEH3eat z4|nikU?mfEO8q5Y6pafCxzqsar{RnBsC8C(+5Neqv0Uyr3B7>MBszMSJz9q^-5tbL zr`!mY69_weGM(}dhV8gF>x32A2p?7Va}5yxfJEPSRnVP!T_49Rsezt`;-p!Jd(>0$vbWuC3mC#BoWs(w%Xum-ATX-Sj4_7L6b<0{Q|4K1|1 zX9_XM?+a!y2+YGd5G9>7?!ZI*is^t|*` zMUrQ}`>}n(3va3=WGh|5`^|9odLMe6Ux5j;(<}Q(M*7DtM`cy#Rwb1HC`dlBA!-W- zzZM$w69uB+JC}hSLx2xPHAU$!Sm>)636?_SG?RuC8Ej{{)0Dp; zF#0g){>dQa2NMuowjh6@Wnn*Owby4>d2OC3fRP}dNu#OC#>BXW_xKqDKD1xgTthO7 zT)U$RGk^xEE0^-+8jtUCd(Cu|d?3>=AEM`eCp04mr}zWyqfq7)89g zRV&4U&gUav-J1KhZN}wAe$XG1Z3}mK=V9(5=869pt9$te>)?{TUq{Z={<~C!f9Q%Q zBk|)gD`nD!_+&06(DBs~?MH%F!7>orlJT8-%P&heD*SDZjV~+LjU6tGBr@povvR|+ zIT_pm}Hx<*h(^O`!CD$wc)U(Kc z8XjO?`VWdTUY9Gc-fb#}Ar`9)z@m2m9Kc9A)Zot5*$bYx&gbv^jVooCL?KTJuVVq7 zDYG=M5E)pTnUEt+8(=8f&Hzg_Oh!PQb8YJv)YbPCv-e3ea7-2Lo18zC&N>i2kN0UG-~=p*X1mSh2srFB{f z`lv%`SFRQ>S4#iU89`zp5v0=LOZmQb>+njx$jr&f(zGWIQzl9P!SutwSilM};L3Ti zXi-2Dh?6>dVlCq7li;gL5`$v(Jm58)^w8_bUi8iDb9)DDaRW=HOtI;r<+`D3xq%t& zEQrrxEpZvmcb4UWb0Ag2A<|U?b&;U1Ii`z^@yOTH`nG-wuy$lQ<`pSZTy8N3J^j7s zDHJ8EimRoj+^@n{KO!>f()SI$Nqjez#0C>|RI!DUpX>*Fqbr=W@~9VqejR_|@*rL< zT2$YD4g4VXuqY8P(UYs31f=Lu@~%W&o0#u$yy0+s{3!%e%Xw{Yzg(3DralhL*snre zxY9hH!9izY_f3RXIzavt3gaIg@*72kn3+^BPw+kJWwoUlQ4f$(GVlW{K2Tvqi)X%; zen0>5jg!P|))P8r2_wW-#+N*n1O$b3r7%bz5kvN0RJ~J>C{3_6I<{@wwr7uR+qP}n z_8!}|ZQHZQ_Wbjmb05x)sEF!%sfX^&>dKXwYc=tK4J8Z`8)%wwNJrd=V%AJWlKKf$ zMp55;MvmlgZLU$xUdintfaZj}-lBY;LIi3BHDKc&%V8}Ix*(i;THNBMD_$spTiniU zMeYqCjLSLBKReB$d>vtYm;y-RYFE1?vW2qhS}3&H>sT6g>EZxrPyJG>?-dR7G(`)A zVt){6eSc}-dGBi;wjYk#Pu)0_q3o<1BQ3T*mDv}ok)XooieEzH1oP=rczYhpge`Dx znh-A+eJLt7_3OJ*!j@&p7~*L81BwUbAv6sqD#+b(GOE0l#w2D$JLIS;qZVO{dST(F z#dxDEZV&&sB-nFKa5mPxf=0!#sQ5-qr0*RP)uUZZHyHn&1E@{=@;H%3O+~EHL2H$f zDrl&5=TlVAdBRo0=!uC^hVkBC=R~y#R32gbJK}L#&FP6>p&RWE;YK#x+3IwS^X_L! z+P7LJ71y9>%CUpbOY^(wv~VGFhG{H8ldinJ%wTyO9L1=ZXb7Dmz>GoJuV)RB%1#7{;Fy&Q*WkbUhBuo{I_w69S_p3U zRrav##B)`?h^$HHh3Z0$B+4DJQ1N_(K6%r6B9W{wqsz-Do!QER2$M4HAgMKbHF@Nh zgcrBkIV>suPz=P=mjat38Tzb20O*}6Np0r8kzt$d-@(${M8Qvxx&+rJ?; z9>q&Hp+GLIsobOcietR;71yDQBFGd&oKqo@@#j+TIea=~7kT&-lsdUqf#Lyiq{b%0 zGb0Acf80s%1Q|c@1{`ce^KMCFOf^9LWz7h+s!3wD%_UJsfoxI}VTebLsD)DNMiQUS zpRZ!(8nxO!S+!B85|dhL_9Zp+t;2!hE9upoFj1veFEO0Y0bFcaJz;BmV>l|z7^A3} z02hTd#;|(L9P}I;5l((`PEb&!SQjN1=pnXi6MK@`!fH~*q~U>E;_NA~Mv+DeKFx`) zS#p;Pus_By`2CLo1%g!a6*Rqd>+zPL9uSnbsEq5#obPOsJgp+|o$Wb46bTDgc5DFL z5W<0os?%y5$23%F3ts)AdT|(x#Fq~Rx*i=tG$jn2-&Y=Jx9}DiZI%Kc-bQDJhHm_!JTgCErgc2t0 zvZ0C7WJi@B0rg8GTbH?`-ik?wpQNBJgqJBhfLQEf@bU~9Wg?f(DzLpaV9nRqkPW`v z2wQqWh8{=rNg|ri0voV+fgEs2M9Z=*wuM*6h^L}|3`3<|+$JQuH2Qm}0{f7yd)pSYM zPCC{v+QFm5>JE(IhS$)x&9dgTptG%p6wl9D*uF*wycD+0!*Ywto(UFc7?>_5ro|Ud z&s!k&!tc`}X#(V_TCAB9IPhv?eZJ^2AoNEp4YW9JfNS1*gha?!&tQxizb6#7kF!~u z5f_fZpW~;9CZ3MvIMEVOGKnj#!x|z!7X|roXHj2#7$kfs0{E@ZDEy zonkYu$9HJq+<2cHL*Tj?ir_N34J3bbY&(2)ZgHFRLPZNs^GV-f;&hy77U5`PG2v~# zt-g+xLO(|LmULM$<%0KW3VcbhwvV@A9y31oXbfl{wlYU5_K5v)G<*rYT~wh#_cWgp zipoK~SKy9!Wh0z~&selCbXseMXqCgUq5vI@oHWFtXIZOjAsVztsexsVCI}rx!jhRX zg|CKsQ>?G-b`~I^H=(A=^s-9H{vF>NTypR6E-(<5g*^F3MUQ+hj@Fui-`LZ>L1OPS~7(h$?e7NQS9pqR4oqv$Z5ArUfYRUtF z46TOow)-}vx( zz{fwDmwG$7JeW67XCB(x_rXl(d4N z;kY;nTi<@68FAxh2$EE&P>uyg^SImhiFfTP*Yb~BO9aZLQAB8n^zYyD*H*oil)JX2 zE0<4M`Msfe0+H1LVfIy`+c;BfXo)B{ri9grAbT6+v>e70D^Q{&aXROcR)aW zSRkGor2e3>cUl=w&)ooHBW2g9Fh=@sGQX{5nRQ%Pk?E$jGqsQE{M~#+5o{G0WaB`0z?}EgzU(J}c@u6=k5;9&C9`Z^IuNMoS8?`}<}!n? z3VEZVyQiIGP=L0O%;Wq;`#;RS6@@1^Mhv@y&lx|9*Ql=&d z81}1p4G0CDI^o!Ng%EXyE3>F$&4?h~F=O8P>hG*TJ=1)p?41+OSM<-@`i#$X^4(4E zmH}aYtmRR8>SHxNdYqm(ghwzh!NhJyBHY1t3tkgM%;)*#zy9AI0_$Pmlw{u@Z?6WI z<}sM0$3^TIQafZ3Rm1B{Fp#wVRzKeR1sU>6k}{mB4~uZU%xl4(hT1O5XNH0~=#Bn+ zKgr5UCYV}$vf82TX1(u7hp1l_Nc}%lqEmH;CJ-XBvQP+Sym5XdD{oL`D1r1P{s{nr zesdbm(DoJT+lCAl=-S(2Pou&CN6=2Riq|y7EGA4Y2nQ$Q!(IfkyIL14mvS8{*k;AT zTl;-^NCnBa=Sb1MHmv6h7ZgrlPkQ6RuT|w2|3%a|8-@S?5cy;OJp=tJ3;}xp<~9F9 z&!7X5{9`zP_uW1&D-v~Q2{3Hn4hL9XcfsZUuRrWqhgy1IhdzfH9OMlfyT zm|G4nX@vt@%JHj?9F<8L4i}5p1e69I>;70>ZKg$bfHMa)ET zi8gR(6*~myq+{ovmup{Zl<$)x{rV#g9`wC8ANeB9(lmBs-uL)NDcwuqs^{!%VUd%X zXaX^{mt(y}rnO3@7&^$5CHfVuLF+Vj+llW;y38WQP~^n)PYjv0p@vNCdtT=+$y^P~ zIgtDXUPxmiqGqfI`SZ}B#nlwtwS0Evlyq+Lmstwa@A>icXxg&T)wy|cKwX-VK37>E zernl#=iP?5XfXR=21C(|)9)a9ym0=pD-biUR)PlDYOP{gH2X};<_GX)qMCbcmO+}7 zMl5pgEDguk4B9CrgWl`>hjfak+!T$FKOuX63Vga#pr#zQm=tGVP`Rv%!^LRotQD=_ zGI(#8o&1U{K}V^yAf5h{I2BkeNuwI73qWygkb4L5u{y#y1)+#UHtqOEb#H(pwHmY? zi%6JBC)oHJs6_)BN+>X2efJLpMn#yHzj%JY<57YGG$|2%DDC8rMMoWQ-^}A1Z5KT`c{9fAt*yud z=W282)9l3Rd5QGZ6`f1}jCsXGQht?nm!ZJ{n~$S<=OwRsB+Mg}Q+0GHF&@18GI#Aa z^BhM?{1^wra54Z;53DFQIB z^%pw^&1v;VI5wUM;c>1g;HX|{;}G0GSghp=q}|4UV3cS0tK2M_pKy!>s_Q8LBwMXq zqEg(y3RXU>^Uf=Od195_?FCSB-kI{y@Vqcy9P4|8Iwg4Kk91Tjkz$f~(((_cA&XJW zMu8j6sC3%JZ^7?X_9$TICj`H$N)9OGHfDSikln5fWjyD6u8iJEk=Q^g12SPqbm;^g z_H9qPmd-AyofEoad}9Xvpe?DKAQGN{r7ECu-uGi)nZ9$JICh}m4##HNbuF!R;X~7< zdY{A+wYOqWWs6A$Js2xO@rX*v$2B2ctpdXg5}y zcF13z+iH#?v2A(o(+nMXC~`%7=R5j71*cgVUBZ>233Hyl}dv(VsrXi8`{| z)WwgTC4jhj3BB(Y?_5#pwl7mw@{X`Yz)fUu^@Kq|n|M^A3cqhT@64EpxjSz?B@2bgb_7p0Cw(TU1P3f2$R zT;{$(z3sCuCA&yWcqstoS6&Q<7K6RrjzY)?3^nNy1x6rSv2~HXETaiVwc`u3ztTes zIVgGinyU1ZHt@h6)AGp!05+tLRTD0LhB@vU+VSdLy|8g+0|8^Al1J-+kQfT2Zbruf z2>SW4OeZ)17-uQrkP5$HU8S=Qsc@})F=t&?2s%JHW1)u0`e#A zG9m`LAQJUUb-8ssJG^4T9Ua{gI6eBQC@^r!hSnbx!l*%8bm+Hi)$YB@Vr@=AMwy9k zXcA8vy>kJ?UHM+E6fMQFky>|2oRDBrvWYR|>+kBFJ{rmKCgLQloydO{uB?RPu;hG_ zI%R9|WrZiN9GF2j=_sdvboOU@N)Edrfv?$QvLp-w>QTt>S1E5Rk`s9CWT58cNjN{r ztEw9)Y$hD_7P3T$JHG`O{DfOCUHF|E17?YCRAJeuk07UzaTR~i)FJde90#Gy?tsg(_CR0J6_z!h=UcHWxh?}j#^34JJznXYpzrO~K+;>8vOd8r zDFG#N&!uwFZ#{&7P+oHJr*^WHc`U4AwpFaWGJ8$IiW>#WI>np{N1yXCOMHeN|2B1} zZOBACDU2N=MMY9j9dyRke@5>KqG;8f!j7?GThTrAffK;?gg17_D~w`RA|(Sw}n9=du+g#0cTc z-n#A%#wm+)yO}*y{nk|TIVBM3AP_BR(71^ue?njpRYtOXhHlOJZ|QktcNk|^fRqYJ zxz@q|#?KxPLpq8ZcZwkK4vqk(`uCb#a^%sl4p~h{iMw#G7bOo$P0{={o8GBAabOpC zKifZs^;*g~5<5~oQ##1nm&x{xsc*G-N3`?YKdeG(z9sOTfy_fy4g(SV>^WjPU`ib>LBek!|vsp@9aR3Pf^- zKfggocq&(J#X7Enf;SL=uA^#W*-q-2$B{k@Gu5KA9qHCnB1{Qh50FEDX^ro;pB$4} zgH+Aa2MMPcRkLh()N16w9?ri&=DkXB;fPWAt^xiFe5f;j)d-j;K?Lt#O3?4FEmo2u zi}!y==v4~fa$!JbzRTOiOrw>(BE6p^%Pt(?@jyc!FZ!u#OS8KNS7u{MJkuxMbeZdp zOCW1QHp(@S@&-Jr&bRX^OjmmT5%#bQmGORfE3UtakQ~#YJ};UM>4WC=Eru;op5PCpHVW$Y0&Y6A~T~Ky7yIOSKrL+h$9h|}CM+cAM_;3mjTp;G9=C|} zZht0-x2oL>ggB>ACp|#>^IJCVd}>ndDpWfTHMNvwTkH1)VSPoX&t0*c&A9I!ys)0b zC_Q`ggG!h=y^>y8^ZYKS97LO~zF42oI9XUpDD;^>^oHc*Md<{|QpxI8hhEm6TP5<2$Yb)stxOOFDxjVuL7GQ`{xb!+9luZ+6>7klCK$uDOT9Gr3jQgoJ*W z4nhaaG{;Oo53J8h>>yOzDIZ)9{LWn&Q-Yu&6O)#=sITwZnFC^RQSi z%ejUnG3`&Bo?}WlxXz_q9i)v4xQpJxE-@93+9OriwNArSVmYuIwF^K@1JoOEb%D#>}IeMUh^;%ST5_jBm2jDS=2$fKrAy4p06Na3;qthFfatFnBsq*-)nvqpx z-TD9A=QZsfTe2u{`2hWhp^Dj^naw!muyhRu3ptLE!`svj-WIeUmv*+NcjhP+_KBg? zF5=Dgm4Vi+obN4OG70KoO!Te1dIP7P2`oT)3ODC&hMtJ7L??4)4D-;J z!T+SIdyw4DAFWfGTA_)Z{&`zk>MOjQH30$&S;CUrJb|C9!jjg{K>nIjo!_;wocETV z{i?S(h9#nzt4S#_Xp%aR#A^+0xGm-&n>P>o%6KyG+tBi|x@>k_uLrhzOlU|y+g#ee z?IzrFusShi5Cy85bi$a~E6*zVr~npb%0uSBo!X5pPgf(9mXUp!w=lf?_=fKzJcQED z?a;N72|*w>78#(~8_&tw`p%xeOOzHZfpDK|Gn(_b%E0Tp>vk$Y>wmH5TR0*K3G_LD zba;Pc;AUGnVLxNI7GLju?%^!9NEz-$Qi8@)AoCJbJWXOD<9j^(d7-x;TJ3k+-jV)0 zaDOY&#RGuxcaO1BDA{2c(R~El#guV8gt6CrO)E-pSEaaynJ z>{+?u1zLh&!@B_(4FT3V;RjX2ah!+Vx&%uM61%?URN{g+dG1GsS92>2| zIDV0937^)!cOh+rN({b%wbaDDW=Uk18^zAvm_{^OJF zV~X~l7mqOL!j3ZYfVBs$28fTVBY>zrt5o7l$AjW}E*lpWWb#wO){}4rBk(l0bJ-Ur zyf;2@HVHaHm^?zLt`NhS_Yv3n1E-6?hJ;tBl1lsi$5`<`0ES7Uc1MhPkE^^m-Axpe znL#58^B%lx-m$>zDJZ&FaJ`?OHsKyq669*^;fy}QD!1j$+mM-rC8@rN{0PUe>>oXV zC9g~G@aV3z2AUzAg~Dfa#G%oxHHh&Eka0EuTm4<3a!m#3kJ1Mdg;&DIRo@ zT-DCziIsJrqFm$P@k>SP&SN~#rNdsr%)K0gN=SqgXtes8KNUV_dyX~_b8j))7F_n) zuAOH1O{m^awlf)Qat!_4@qmTh5lDToogOlzVY=gwX62^MMb>{JGn!mZ^bit(m-(9l z?j~~VvUhHG6&Fbja0nV|=^kFa*+%#8YbFTBq-e>l63`fJq8*!?ZIVs zht<(2sN0>^Uiz5emyl`f+8>K1>5pssl1KIs%HaZ3%85HTVa%x32JaXSHPRzpp7g_Kg$D{$s1n1fe_!UHv|MQHXxR&nNtc+eN@&>aZh&GUwM4u#CV?4CSF(2A z<~%)(dRv5Tfbpyu1OR6DrHP3k7Q$&+pJFWDu$9drUWuUHzmlw)rr6b%v4QZ~c63I^ zCmY2==g1*Q_MZJUcF1Fc{k$jf#)<>sOx6e){1FIP?Y38$3lYMz&Dvv@lf_qU%D6N4 zL~I&Jso#KDW;jkuY&CEOEl;5Bzv^y>*}a!TLR(kNz&TfL&M|n8vyh1O(Op#(A{zI( zMoqV(iO5L>`Wr8nhV=xy!g}YjM>C$N%!KSne&}CspzI!_G)?m1(Mw)j3ewu|DD~YX z^uX@%baR0M2Iw8&$azrOL~!sDUS1g!;U}bRBAm+PA!`Q^YmH!)w2zg!+qH)X}cGA4iZ zYJ%aOESCNdbl6W%yRHx)kwsGAp5|7reriJ445F#XtEk((aoq=yWNUvT$pckG0xD|Z zsm(05uj)C0{ng#*U6{>rN!$RLlAWklZ}~rgIRT8RiYe7q^OzNB5V zj5B9{y;nWRCN^;w!>a42&+4+f9N&`!FPB+Kf7- zmQ4#tA==$yQ)DYFQJEtdpq5F$T?5uc3{qyrLy4#P)wf==BT~?9iK(it^Dzyugg4cV z&LCq^>@82B*Hv@GzA}4-*DwVNj`qK>BSBP{t-6kXQ`Mj#pw7EL#*%U*azU+rF!3db zx7U1~2@1B5JEoHxg+gM@2lp^*>NP6|+2!B?T3~wZX(ocn zP%gRqIJ{H2uHqLYz8V@}hj!znI2Ylo&W0pAZB92FbzVR2xbP&gV$^1c^z<)I8%*lL zg2JRO&&6U0&r_3LOClH(yDbMLuLX~zl3m5N1Z{l;MmBmJ8ZOOs$e(Rm4fw(9jZK)QS#P$KP7{sK7t- zcogCNXw0rwkyuhDK+b@~DXSU=8vQ(@4`25Z3A<98a(9jyb!Euk*A{Hfq>Y#a?t^^JUyGCt>g?gm;3yn?iR$wut_OLlNy zP+TNYKa=gfpjBsO7{!j}++jGT0HV#9(nf-ii{SPVkRO`i7wOuMROTTh7ZC}~ib)*a zVN?v!3%f2Q{2OlHEf%~fmmi-BD7vpz3=6I9^nWX+bfo^y{kv09PM9?uCijFYOl9dh zuC}u~7r?LU=pA&TYD$lwa&y8zf8RK)A^ljgpLMgjTE59#!)K=mUd}d_ktg#Tv-~l% z@be)0n_KM37$ELC=d0@aHPgQ2_2~c4Je53q2Xv2MN{LH<2Oi7&?-wsg>hg<-H`>}~ zDFB@h*$hWCy+q(N%UBM_a#4Ug@QGJSn0&C9j-& z^zlFtZ%~us=6>amnF{ID`X5#mp=EPG8K}-;uB^-pvX!U~E??f;*r0n{z6?k$jakuC zW!nP4NnHwMzSw0ynb>Ta@|x$(BXo)?MsG^iCwb@Wr)Ul8W?5f_X`63pr!j#kc-wqN zu0p>=pg9=DzX(T1z}lGYw=X;}!~t`+XoFzlqWKj;R|{7;!${Ov`5< zBeNK5I1QhEkN^bapf>%cDkCHcTF57+u0Uk3&2>PlD>b;b+B%;8*}9LkufPiwBV&@k{l09f}ZANG@Tg@yR4c@8hP z|JgRMYii>b05ISGmJt7!WdU0j%-Z|Ez%KSMko`Lt0RXZnKGUR(PnU6bnc5wk($ihu zC4z=e86rIDqiq%{LE*~P&CjFpswU_Mc=>5`G>eG>DXFN&jC|Vhs;rF^HOS#MsC_w? z8XEzI$q;YVw9Za$vRPbJ!*mk=6Sshyw;Al>L*nA9c`6oT`T@Sr?`y%vcF+p;1eLW7tL@ZKIXg#KF&DfIosFtZJS z%2^bD@J9W^Qt?uCD!QU&B5uJz_8DusT<(!-LOjQKgU4e!CA?l+#c5Zv=!(At6Hjb31wTzh z*u&nfg|X}))1(3WeGkhk`O3;*v8U)pxns#Bxn(D@@QM(RXSvrW7{fGN2$j0*8(1K4 zTJ8Fc6B^V51V6MYntjI=6;40gM6=9LLknQ~s#~|qvA4b$8$&Qhh>W%w`zT;4ZBs|LX}h% zbNy@|EwWJR1Jddz$b=d?YlzL3+Vihw{{t+$Hd>BD%k6NW42bzBeIcN7F$i@hqCuNw zVp{Gu6BJ#{W=F)8cGTeKf8sNXxp7W*@|4lI^PNsK)hAS>bj$*6Nz{TjsA8}9ifv5D ze=6Cf){&2C>kuAYsQxMT*jKN-`hj{ZVEG9@B~FSV=zp+;>i$v&c7C7eJ4Da6zQQE7 zc;3CB_l5{)%ILWV$mW7Fp-o^sJD%AQHuwT3^SvSaswc$X<-K`n)m#rbn!S~1gDxD@^^ahJ;3 z13QTTsqulP4q+j$t>sz4YI5@`;zM?sHaFW^AH7PG@G}DdrOf=WJ=Yj|z}P!D0mCdW z(0m%qb)f~{S(@srWSmpRie3_66B%X9 zjWx?CsbNsIGdZ*4?y`|;%AR4L0r+?a@6_iUatvi0c*;ArOKuUOqpqDMg_w4~f3MAi!=xGGD?m_QCCmup{95>1qVSupQ zAz863nArS4POOmoO`DOJ7asrUCzD#3C%~9cA zt+_}K6+(I{xF!Vh$UvP(4Cg$HQK-UsBv!=-b`0^3WDX|UsH9$;9_5YOt%x~Z@Rf>5 zCoqS)RUQ44AEZll(&o+L+3vx##^f#{&D$eGMm*L`v0-8I_-V8w)O;%k(;qR9DW#!@+-wI%p@(czu`(CzdvI&m2!IbDW-}MLZ{;zyMLogTb zfAJdU{h+f`x%X*P$Tnakj0cGVY6V&%O_10g?4^sM8okqZ-j0H-xj4@~XCZ?-7;+~4 zo47{KtlIfy0pQDNqK@>lg7SwC%={+6ksUeWbih1_XC&H-!54b!qhWk)8s+`Ve!KxL z0lm*@UZFFy;EHx-Pn$>yR%6kX-@ zb5k-wD*SD)Dm~E$wW+2zyA_-l@=s=|-D!}4O-f;Yr!WaNv?T#^|mi;samshI^*H-^&-9qf0a_)RxD6b z^kEKh%mjrp$nT6hyh{abqZz{g5$e_toRcPc+9`?3819YKD}3qkUkIDLnNvP1eUvai zz`xbp9Iao17Yo3m=sL$@%oM;5jqUur;QBce>mrt`Zqb?p>cwehgG;ct<1&Zqda|vi zO2E0}g|w7Vgy5i2#tE9sYkI}7L6y%)#%WC$e@qYIH2u6sK$g|>Ubk++wv?Dk2o$2z zMn#ojO<6+jrZOc2=yFH5bv5#PBsP~6YPC00a!_|!7gfu+DQwx?RG}v^F;2*^)PW`W ztenr7KKp|NC7rx;0VJ?qc0dgX#QBcBHzsoa`$s)COOC*wJah`w5M5I=Ce}%FZf?9~ zTCDZ@@@L5KKHDTe+PHnF2M*4!Ii$E}RlfSu0IfnFl-q_G&Sldp^msSywNhLK#L2;% zU^4JYA}$>&+fd>Rk_l4FyN1Qc-xtkt8QLchaQYByQRwK{r)#xoX^aju6T`rd`%K`u z;-umEcqBIwO;mOc^lwqh93{9c&ENH0E#jqiu&h8;$XQp|FD5tySNtagU)}JY9k=S@ z|89+-7@Y(FfTq8n8UO&!OLycqHW~uV<^2zEFlk-gaV5`88m_gm#C{bE?I@z=WzbW1asYJn$@B{Y3BP*c-Ba3bHp4ow-ZD271?_+yFuH8es@Elh#HXEKve&u1^0Mu{&g1FL!ss2F^c zKx*LBdN^r>9Qg1?CEB`A2t~#EHxgdkHsw?96YFa~B@+5g`7fXCiSfqRZO?A7ay^*yLUf-pM z=$8&k%b{L?*HJV9FJEsx+2Bt`V9Pee{bxY1l4X#}Z_f87~kF%{&ho70RGDz2{?!a?SW7<04qh)W|}d^++(smnd-GfiHp7G%sXI zmdAPUm9`y>N#q4q93gb@W>>3E{e}-*1_!Wng~90T_m2Z_5LGkL;qE^tMLYSXDk4q& zUAHh)VXH8ufLIVk`WQlcpeuN3F7@q&M(P+U>*6KsRLm?vUtkJaAE(EcvhtkR#Q~XL zt&pNdfL#ltb-HQT)NYrPt?@G7vG)089LuQ$S{Sgl=lqA&ryG?&Z+qjP`wC>+$7wxh z;+y%QVmuth9dc2NwqNFXTYfb@GBL76|9bC`pfSBH4_$%b*|j{{jkqrUWN~jV6Zuy; z-E!bMkUTXwu<`E31W7DDy6rG?FNaFviC;;n-$+Uu+5P#?jsdP=r+=X~oUZ>_1pW3- z0-6El^8Xj(TTnw{vaYEeD$mm6OO0<0*)Vz+W6z}epaj2gE}QI@Ta6Y+BnekZroW=asyGx*#zTTI2{7 zc7J2K3zIEfj5^MDlkINVu6fQXMHz-;Ino&{*j1~j*M$7<>9d#~(!|-G+d^loSSn^^ z63FQ=C~KFf=ua7mb8ZaJ1L3AOssOS~efyL+!?u|PLdm%kf&}lvs_}CnFFq^N;8X=c zM8j!7fN+y<>CC4B1is7?8y!E%UE$@nujzk(-v0*f@aM+=zUSX%Q@}4h&W>Ov$^Q*B zaX?vL=6|^`))X#KIT|u4HKecH?3YF0Tp_bFHhA6>JHSfSHsdSgA)0_-14@Ggu5UMB zf(L>l?l!R4P!JmGNQiEFS;+qkAWoxUH}x0GwZChr;>?P|Hg%|PP6I_?Ky`5f5y{WH zZ%bFxm!wVute+r69)K32+sIbz2LOl)we2v5sM`$#-fjB^$`W%iYC^z6%#Z9MN-?XK zGKx}-c^bw!c*;Z-&i)jkoHSZ*;|^Osbpd+Y4qLS11$VMJ?T0N4LN8g;1(2jCOipM0 z)ZqaMM+d9hjPPvDsW9kZxK)K`(?IsTHk2B`li|UMD=I!@93*}^GMUmNen!2i)70st zt*W_KsnhB)eiQ8`VAlXyVYWxw0KN z-NrqCX=`Dp*bLe(KumOBs-vBk6tx&3^|3127i94fJD?czL*g9+-&!bmZ|7zG-5z-z1?%_Btbi7X)`iw=74xCP`NnxqoCx9sf0*j&bYD4TmyHJN zo+5@z5lJ_@l)J)>jV*@nQs&C(5)qbZQLYx9A;kP0-rF5zNyqvSgs?0%KgJHVe~Xhu zEa~m&JfxsDW~}mS?rnIZe9-rAP|s>>R2ps)IgGvOHU-Z)fND~B3OZ2f5WUVgrMYF8 zxj#&T8LcP!l?@VB~`&&L81`{1k3_*%VuRg;oRv>GT>_%XBrZ$;zo06~VZy(r1f3tCoVL6gm z8zW~J3levp;~zeN<-kb@o{i26jEWaJ7YUk0Rta#L0UAU1p`ho>J^>gQv6DGXVKlCH zt7Ow`Q@8~b+jed;I+e7N!@WNK28e#yjqW~eZKk_%$Z+8B&uGZB2zd8|oQw0C9LrX^RPB0+-so0OMN9svIhjB!U$_9Ba=(VJZ00!<@*)Wq*ciM>2W z*8c7V_;SsePFz+Q`Mk<55+9y224+B2^Ev`2gq6H=P~Un~B_XZ0jbZxJMc{rZ(ZdfZ z)Jk@1C8eZHQ+7l8`Kht4x5(&+BT{UZ0&|Y$6s|@=D?;=2@7{%T+~L7xTmdjONXrG! zfbSD^_qnP4l}b<7mcZwnj=OnUZwxCi_nqb3)}-?U7u61;r)|{Z%<_Wtt7%Y&gnR4JJn=6N-x$b8RfNU;i;IPw0a=2S6T)J)NF$_IpPF{6kDp z6DI&SdS&so^lIXP8?M5?2Yj+uAi-#>*y&tK?)k$WsFEjI9N>J3MSVm-+a3{$&x*e6NdtL zr<2zG{e^nO5g1EAqfXQ(lZ2z(qi@YM>Z#keu2d+CoW5cq^_!s?hk@?)4(s(*@OHx@$eF}X3oDFT zLu3~p>?7WzQ>;@-nB>gVLjHGuRAVhaW8r}Lur3&5dKg+>R-m2r{96A69HA?*3IHQ* zOuDK`B1&b-l~m>_mXGs6luARPLnje?==E^@1i*#Y zQo9vbi{ly6EZtvZ8Zq<#t~`Kj5exu0+y6cO+Hb*cl=J|YYw%x`WEma&wCK6&Hb9a! zAv7iul-MOeP!5e|{brQQ3Zxi09f&caC(zNV5+%_q+`~5(n6y2@$LC`IDJ(D*em{yF zK7GfH7AaS6%zBN=gz@ALwm)7OGd{g!kuU|j-T$u0Tae^$y{#`9;3r_%G(F@TBgJ#I zWiv=zn+it6!5beW$0)Q;_R<=+U*YBStAZwEl_gma8m4$YC9kCjR=~~*>XgO6S^LDL z*#ZGCu1@O4k3R@?;Q3fnw9~>jTZRls(H!>=WG*lw-cgLT1>^(IB|-hgc-tlg z@^LfMNInr3kN8j$< zeL@-PUQ#}J*<93U8^tD3r;jPQrba`=?O!&A4$q>$l-=Zut(e^`=Ja8fiyYn4DUSJE z&a4?ZbcEL(>#$GvK{`lxR)+2h`1wr$%syKLLGZQHhO+qP|U`ri3x*33(;lldI6 z^6W1nb~MeDtWK7HSsI%Fi9uBOxiM07K}3dIlt1X7%(}4j&Zwy_^dR|x#!7GX#qNVL zwq>?*VqRQVvCg>0?ESnbVe4y^zJ$(i@9nU5xY0@)#duTxH`GCvbd>b|chCa>i1qyo z`xn3*!~cjX^g%^$^Vf`^VRP(D_^AfXYN z!HU2wctE@U=YIDoF7l8r_n0Gdg-ehfB%vcloGCEu2AWhF`)*OYf|&=R&QI7P+y2zj z$&DkhGgWOd+m3dTYmKAA9E(vi#QO8wFUL3MIn}V=19eIWeg#nO@-4Eu0zM8eby}JJ zOGZaf2-ZWRzGp;}nK;~AYacvpQd__2`#A>Z)B<2-{sXxw7E~&bfj7Sr@SWyTuL9Gu&a+1*8=v zU0WLbUSGOMbYu!rzX=*QTTSSh0&lw*jUy}Gfzk)WIHWMTKq(lT^33(e+AA(+&B%ye zr8f{dCHBR9;2s89lTM}7#wCp69oi+zF(zjym`yJxnJ5CVn zl$p0uNYD}hS=JEC)z&^qZKmpjd$gQFcY-k+g{-!v z<-$e0!SlDMaMiSx&w3Z#iS}fc09B56gR$s?>g>J(1j!q%jZ)Ao8rURqU}9BlY=S$^ z5lL!{QbB+bwquE+lzB0HXaa;-U{ji(#v$dS_j)DJkHN<~?Bvza5dUB0sa4X(E|#QP z@{ta3UA62FCtVn5mH!4jnIgyezkvU*;03JwH#&+UkYV=!YFs=|=uRqpev+F5AAk(+ zZ|Sbq5Sgd6oi9jc&N$O3rSD095HZb}tlU`^0E}fOq9d0C?+TiN4ePuJ>Bo|c71wJ> z=r(VQ+S(HQCVqgfK|RCvI8Pl2R=@g)N9)oNFBNKl_a4sx3E;m9JN~jMeaZp%+QyJ^ zhz6#oGO0suR=R%_yfcyxOpvDp<7XBF1@Wz;LHssP5vOtT`^jrtA{4tf0gh7AY(xni zIfs23+`yx-NHP48+*>nFj9^<{tG+VVet3S73^esQ7B;!ogn`*sK-8K;@pg|fAExN5 zy6@h~Uv(~b_58vac@vj>0UQeBH>g`NIPv`yK>^g1`b$j?PorgA#SNo$zV`Pl&>6{n z3u?v@%z)*y2TJo>{;Aw&*tqvUgt7fS?UDhGXd1%E27V98Y`jfs zLNMTaa@u^mqs<^J31avf^h4*!m2)~I@SNT1D6I=Ho;!%^I_<)-diQ&H`|TNR-#gGk zPF!UKgebQTSg{4(zyQ)bT4U8nq*W;Y8vq*ZnQE$=fLn_9=H5!4Oo$>uB1Aj$L%q#g z>tQ?f>LT^j$?$xPopVoQ{@sS+e0x-uD8XOl>8L;cq&=brPdzfXOJ1&L6$Bz$P9Num zO~))vT446h>C=C_sZg`%PG`pO(b?OwF!VF_4f=7e4$N7gF>nkB{NY>Jv{y-z_S3IC z(3ZniXlfahD|*R}F_2okv9?rTHx)w*tPbc#Ccv-}tBc){zFbBl9kQkO&+-_c(M0@X6znSPjOB{STex6&1psp4^dl{%ROT2X!)2*Lk>ueC8&T@N}}8tcOm4DuFh7+d#e z_rbhLA6eQa&Q+ScVA>fo!`x$|EF^$6-w(i68yE>^NCDkeu;4cPywf1P6?J|Pl_$jx z!3HMBnqijLZHp#%vW1CsT}lD4)Dd~f&`m@;;VycY8HuB&nI?Rngs0Er6F4qn$h!*+q;z(MC6qT%qyfZxWF3S$>17I0XjPiA^oew z@NdcmTs#@CG7h)}AMgUzyC|rscOS(re?oP0HIFmCVkPW*8S0z#4b?q@r;7Hj?PeQw zb^C)ilA~;TTXw-K+c;xBotx(LVq1nG{ssM&H@P*XN1wh1VABPM= z>G*0JDwYNbha7~&c3UNUSjYk`l}5$}QN{_ic5uZhB|?2uY=g!-rY_5NirSodCvucBC_t+mD*{wBOW z#3ID)jdv%GH~x>7yfrn!eUU;6hIKl_3itr-vD(3oi^^qM>8l`wEqhm%hTX=zq)6{- z5_dFhj4!kx1Od!^-hI-*{0IS7=#tRf_VYjLgE(=gJ3b#8Rsi z7Z8l|dN(^70NrlPsr_!3j)4nb@^JdRaiWZ9xv9+;)RCrY#`Kx;VCoFrYSBmg>dBNq zy#0X%p6wiw5lx+6QDt5@2kP+z-%fu|xZKB7niueR&8}@0{0}ssL*8U`oB;}t>V}}3 zYhm3{LWXMnNn@KfQ(aKYoxxDSve%c>rM+NVAmTp}x}id$5L2uB?`UbWr?-~XpA|s} zLS^h$XK%Xp(jpTbwteK=@Nslfz>#o`%3i!f>9S1shFRs?)9T9t4B&%O3n1I91(k6Q zT@<=4tan;gW$a#Lvqz5K0%sLhm{f(Y-6CXtdkJl6ZY&~C5PgTFru~eAlhtg_t2k}N zq;%l1m({ONrd?inWUECSEL7h!Qb`qtaG^LtjuGbF%!$v7;M8xYX^OeMg(Lysrfu)! z$6}iM+-QbU?NB84TLXxL{th*y-rO64SbtPrb-H8hnufN}30cE4N6~*cBo6wpu##Fd zH_1pXXUyK)4ie>t9bC z0I4V!p$gS89QwfCgigqqm+UaaIXl5o#Nvb-gGb8?@1cNPb#~6Mw7GL|H^ZrcQd}wI zOW+zz2k2eC311PR`O_YVKjxr&w4D-cgS<1TGH^X5w zo>iQ%qy(${Z7;YRd?}*F<^|5A^2mmQ^o9<^WS%USZXu3px9cDf7_3YMd#D0n*O~>+ z{MO=~B|T~gFhu#N)Jx8VjZQA=5*W#ppfwJV)pdS}7-)Xn1T|l_T{H3MAGO{(@VXEE zLAmoW_FmT>{3h>o<2-9lnuywVYT^!)@s0aX6gtYub!4ITDti0H-|n9)kyb`;T18g$ z!Pm?(sAE&-dn*(Bs6>qZHY|jQh!sS#pZ5bCrkQ&2i0*gXtrMo~^%^jtvn>Sj=o(Lm z2><{hc_{=uke&lj{)fat#07Ff{-+qdVX10xm&;qNi+>zi_dFNmO8hRV>gz@>WPq}! z0j4tqz%F%{BxY-V8?`IIiCFz-dsw*cfw|7STZ&f9*FQio7dWNeX20@L{9eiU^Di77 zue@}*Du**pL93)qlm}kWjKU}26-mJ@rq()3-nY53I}6XBoTH4H7|Q4D zdkW{@lO<8xP|mm%`XFi1au8UP`qD(vEx{w8iA7uSl9LLY^vc~U7fmt!x?3Xu69 z2<1(T>&UAbgP;Unm5783hv-(MA;YPTj~LGDQyNLS-M>f{XmJ^v=;@9~(~^@?pa=J_ z#iA`(?BOg|-p%&S#4e|U5g9fM%n8#GDiO<)kO+|lDZGp4+c_E$5V=MjF*@LZSY->y zAnCH*0HEVl@)d-0zS{RS7VOS!|Rnt`Hd~?lCN#WO<^g7HRUBvD09}^;oUzWy-)REDl1>%t7Jzk zl%Xi$FXc>W+F1C6K}NUHeeiRa-+|VQfYvSZ-YIv>b_jP*W2YOfTb#KGYen78S~YXD zmj&NC@Mnh~j9*AAjxJNo+{R<%H%BKq42IOqq{fiwM~r6Q`9msn;XP9r@o~u-Q{p}C zdhCEAGblZsORaaN7NLKpn9=AkwIVlKgk?@OAsr>B;PC8n)Bv1I#n1qu31l18NhfPb zULHH#%~H5R*;Yg$@@ynkqx1cRIBHr5=SUJL61B^ihPLe;r;CyNVMU5zSFh74PcD)w z|1KmED@JE4g#VQ*3o!};p7rHP3a-Tyyk4q#Bbo@I8tPOAk)Q?$lfB?0`{=>_7q^<`y*DD{YzDdL^Bs*6d#{7 z0`o>EEewmNY2oVL=pa5=$Z+2mJQZEn>5f#pPI2^j57M-VzEFt%s3&s>u;#iumFik(R>cd1(7@IrlJs5mf}ZBEBh+A1vi?I`^EK!xOZC z`5zHX7_eDcw)8%89Ku`s?2%y5Nk!>7hDvtLLHSaFv&2wo$uWE4bLrsSDa0b#TKB=j zgE+6GBwM*amz`4nFke+_6mJuUe7Obt6&#IQ7K}bp+B+`xmpKJP=j*RxGGICnonvnK zGk&GmSO@vE>LFF^${Wm9$?3g{;}40fpcCA5X&^!Sa3ZHly`kKYYIMQrGBx|(d5toR zXeVS9XW3&?EUO1!KpsM^$}UIuKx`&C zJ_Zhf6fY!-NCUA2+xitoa52p>LONB%mJd^AgtkLc)OQZB89`246#fewE3Bi6->Cl) z78oVd0DyrNe*bwzssHzc0?aA?FI9>NvE61~!cfg}&n}QHGyYnJP5{N(>dgx&%m4nN z7l&`&5ip&b4<|I7%_gx9HHG>)?2ccrPmRaeAZsf*58?g10%+`oSC~kO$lFg$XrU|L zuskCie>@XrT_vSAd9vC=|A-&m=RI>s8#nfb7yk-AoqbvG%SSUP;4);$==BdQgeJoq z)qm*uhF$Dd-&Dj_k3Qp>U9CIusi{EMT}I@yVz$!f>7_Jos9-MblIjSuCAA-2LNUdZ zQqNW=nkSKPQ)QwYcp{Gl5B$4EEoYuodlsB~PYt(RF zz}BIaY1+A(*xQhdOW=s6dNg2+yxJd_TpH3OIYt->Hz|X?z?T1_P-gukOZFEp4}NyX zuZYs#@T0Z4(A}mEEhLm|7v`95UO5GpcEN08?(d>Ugad%NyLE}S$J3!skx>ZBOOm_n z&mWy^b!qjbN4>vCe6xzE-rW=^S!^=2XQ88B`&wTZv;Z^#^)M5=9R`>UASF?n`mIl+ z4D4}*0~(~D;w$Uk^^F!d^+lG~pfwJqV><&JR z5SPUBA}YFjw>OmRKDRKhRtXtpTRc+^027UZukDjto#j)hAfQtaLqUr!7W~W?&^fQ+ zs6q4QPn6FZYgmlG8@{65LD$Px>=aoIcbnfmK-SQAzrxihldftqD@D1+#3bx0Tr;*G zg%0f~xwG#9g|ZXwvA)t`<`n0Jvwh|+fyC}9P-kib$z7VKD@|LRVSk(<%H-B6uZm;S z_H&sU!S&}^wh+90`PK5P0q>^;E-uwkN-tXi>Or#@*tslY4~xMyH_{Wd#AN=P51?Q5 zk#ql(832+0>dODx^m9u8Lz}EyT{PFrk6p37ZQxoV9A0dFm2(31{R6PTL3DjYXG27> z$J}8sBt4gsE|OoG4QD6itnb++<;1ZZ<-Dr^nyV`^dTF0n0A4&NIv0I15eV(FWvyjg z#H!IHkxp#Fn+f>`$@5ClbWQ6pldPk7PP26&N+33S`JyGAyP#n+XZtpfwMi$b=n=kq zqP#pSdrbUW0G27|cqWQOp(c49=iEUJ?7rxFUv|foP>ls;{cL4__z05C7Z%P%8S2{u zniGxC*H50TK6s}NAa7_*zyIM`?(3i0 ztoilN7|m1{_&yf_N9oFna)twZ~g?lhmZAbT_3FKU-^)>e-{o zw$d4G5IOqwOF^&I0hr1IbL0`MCuMeifgdQL=mBXtn+R*L{+lT``uOapAO5xB?IS4s zXj-aGX^a_1s~4w+)D-3J8=)}3gq zDnjLtI;lfFPL>Y5&__8K=n%SHv#Y+kyZF`Y~i-Z);xBC&6vu)Z3b=#GOEx0+i)v;(*+wbSX@oK5< z(s*$Y%{wY!%Q}Yq6Ck{9A9YGAk_D578I;%cgmucHjJM7Nh$Y_3#unhn&eWg?h$taK z_OFYM@o#T*v`c6dTpzWiTo1)gwZEMUE6Oh(o8Rts?lIv|3Yr2$zpVx{X&Ywm-`|Do zb&IwC1UH~B6vf^DiE>ms000P2fsCsEk1V;?gAS!@0F;Lo*zf{czyJQ7TO@cTx;N~p zt}jJ(|E<8_eb+3Xd!{+MMpVw=2X0&4_t(>unm5nwdWiyQ*KcET@&Do3m-hl7e*-}R zlol`#`o;#P!KE~8lu5}OKI%!akfDQP#I)4D+`3N=)$3=1i~vt{DWwdQ$;=$dAgXko zs3V-@1F|kERf;~UsCdA!D!2P!?18(T;uSN;rE|;V^DwK)i-!0T-@6C@x42bADK_ zfpkNwSA`-!o7+!^Wd5UCP?I_pF_2%#tqjJzBWZQvhgJWct%uYDqm8a@1gB4v1Bfh* zQ1?c`w`;^XrJT;zJ(b!Gf|yB~fP*GI;x>M*wyGY&y_R#ZeJ7q}*=khCYL`8{Z_yAR zsH_hJLykA0<^lt$8RaEb)paK)NdrQ~jpTuHJ7%YV{v#ReR4Cs2+J`~Ejy((Q?|05U zi}P)f>T7Zn1Ey%ruD7TsRRUZrNzoGmoGsS+uf1B3Y^H)jZ(9F(YCXoDIC_qdzUC&7 zs;$C&^TELJMdB&&ECes(I9{^ofj_!TLgl*(@O!WSDY{=2$k8@e)hmQPG{&EOL$iVr zmS!*yO{>CBGLvW5tAY=Z=9zadRHb6~(LCc##;8q?Q!7UiIl|yIu1%`uH;+!32XsAN zlT6W^@q9mQs>$6n4*4-YKCsBG0Ls)`L}(e=nNV2-kT&j3t|334nOz#X)1_xrrYc*& zxz2e+OB=nQvNcCt31*f=6Zg(@-z(M5H>0aj>Jkb6CUFtOd-t;{Ra&pSEVlo+80h+3 z>9Da}%4N+0oE86#M+W|tcEIMe$!CXM=&I#{blA+9kpVv;!{A1mgKOSS{iU>Y4BzR7 zkB9w+%Wp2Q?37h;mpxL}@7aN++-H2EBiMbAVQhifks3%OKnez}{Z$`;n{(1h)sn;B zOXN4jvoF`b;dVZ|Q1l{s34itIPI1Mi&tp^pScu(|zMlzGxG!xq{=U>4HzPQln)w6V zv4b?>-*B2ep_&whuD^W^w(7(JTkfcCf~N+Q5_##X?-3K&&vd%59QsNVM?Uw?J~O^g z8&pi&u6}9F9UxzAQS+-^x_$VcRL8ZVt^}s&T($3TH*xTjH8}{ebs+mbXPPk0!`z$# za&-?8>zU?5P(s}tK^QWY$*vid>Er%(tM#iQWmXz<(rc5nhGe$x({`|R4pPOXu=3y9 z7(uq8M`nKNYI@z$`_g|uu20vNwu(@T=S_-F7{gTM{fbUUo3ot#Il~#izLIgHkY8ml z0%2DJXWT%!sJNyFq;mT7+K@35 zj;AAg8E*&v416#-R9Dozgu&|L>`A>A0}#^H@T=GsHDv~kSSMubZdOcjPf%1ex?QCq z((@9eR#sYMVlHQUv;tD9mD=~!<|j6NIC7k6;M^|920*6q)YEl zKLe^w^CkJJ0+-eufe})T6$(-3iORzJ%;$7y9k?1)0)vyetje)sm8E!H}a1kabSj~-($ z^7Bhf_=l6L*RApU)CG6Z`mEpy*3=+>3?P2#JJgy-X(=iasdWDAD%)?9!y#h}DT8s? zc^Ql5E9B9x2-(p|H)13(*{d}=3%O>IiSe@}`0ke8j1XC=*qD$J6)q~6*5|!Uv|~`2 zj(dg=)YWzWD;!D+YJj*MVM-fV=t+bqXy$dE&*$og%X=!$H4m-^J&80ZstcJAO9Bjc z(3H*~(@54Prjs4Qda77QW-vRnrf!x5SIY%wiw8$JD?(8m$yxvZ?$ za-owA|7%9Gk>osdC2mKIxs}D^p$%g1ScJHNR!!~8a2BjIlqXF^DhCkaBdE`lL6H9; zsV+4T59#$P-=HdDnFBxu!tq; zahOXzf^z;^F{S8Lb6m1GDkW`Q<;9>1d!4wsa;OWyG)>x#Xup95G2@97H@XRKcIXp( z7dCE|lq$bLnZmRsl?9F)p)D{0N?(J zTHhz0xH|nHp75TdlKQGj#3D=l%442ZxPF{r>iqcahbpkkY%W+z!7S0CiFu%n3yp%a zjG>4~lfp$e>|3W-@>G+SkpdRR^;+a%>h$r4Y10e5b{ckErIxrIjKS!(FZ5HJ1DPR% z92#z@3ss*VBI1uLcO!XsNdloM{23PQ45z=NFC2b&t1us_wmHBGLf3=E|U1^ui7r+dQTv#4^fFXFp(iocIGT`_H&Y%gWU3%`)XHL@~| z?Wr6fM1~pU`uB3X?{{^BN*cO2;-v}Qv#kmeLR6+qAs>BM@fy_N2g>KwYB0SsBD_f^ z&>z5B{IWsLoNv@(^_dHFYW-0=mY3^kNTeEF)NC3eRh_!nmm z>5{g=PFEE)bqcwqW{0pBb{ADF8VcyLOSx>e^d-R?>mrlZ0ch+g*SL@_i?c?Ngx_kR zo=nx|p=RyZsLKi{6UZHviVf6*w{7DJnmFYfC?Tn%(E-~WqExC>`OmVgQ~*hS)-fTR zygpw3wCvAZm8JLQhNVjJwtW!!b~ZIEsjeya0*B?* z`Hf!$i`d?8ZRlIp1m1_LwzIgv>xAvLGF~Jec6NK&RJ$EX$ENRfIV^(PaXsR|GkO-a z+hj#?cey?)zXeF#s*4DJ4swG*7a6mcnt9rnu9G_TL%@28e$oYVdNIE5gwpF;DvuCA zos_JJhO((-#Ntf1_zp9X;7#Rt#<4SmQ>k9g8!TMvP#3?6_QBlII<+^@#njZEot22L z!aQNO`CfRBi7mxT6R(adF16x73>cRb)LDW;s(QD-}p^nBO zIW4FgY-td8Wg9(3iVYK<5PFqXU%BcyiACkOW{R&NJh&BVI-S0x)j)=NjzETKkVfMW zeAL$nL-Yc27i>RbPW-HDz=!?s1D_;r8FpY3^nMU`?e)Y$4U%{R5MRaTQgr$US@*7b zi@JQ%N<}Hkt1c=G@Gi;fZ-#`>537NFf#Iqg6KFd12>L@?$17gNeJ1Kd)-!K(Nf5m? zH4Mx);_&T~zAq0t4j$bd%h7-AQF+0)yl4|nNoYlO##Bm%rV|lqt^5-&?%6$g8FD1k zXy>5h1!5~Nh(LZATGgejY)y9TW{8@|!4tB`_xoRBN}wR_P!GnVu1^A4BsHVJ9(fFC z1#iDM&w0F9>%k2OO6`5#S*fY!4_L>nXPi-!lnDE2xhAsb|1b}Oxee`5NAW*HzhWhL za4+dNL^xlv_xS*ZQTn+^lr{J*G6gH}F>84$GSU=NdGdGi$d{{LBH$*?We}NttgG{R zXjKnFnL-keitSHK^#}ddcpKPb{`ez-ji(cSAJpkWj?$VO?<${s;aOiOCdh6wrbmU5 zsr7DiRcD_iU)9(7q|r`j1`DdXP0J^|A3kDSwhMu z6)Q|6NIjAK=V;%><97zd$TXMVNe218xwd$li~s08HW~f9t~$VP z^Tb05PStz+sO3yQ@REm)Z?LM8#2bb3j{G@-u3w!WYct@o9si7v{8c?DpgBFU83asz z>>PI$@p7~<9vE)CJ%G@O4ny7(sLM)}5efvS$q|f02fGAS0t%I z6*U66j#_tNvgoGcdem;VFdhsA^u%rL3r>0%nHR-L7KLy(<&-vL`Cz=9(2V=BVI-F3 zh7vjnYHrhqw;(O~WDIGGxSF}zP)KKsM7R^m^p2RV-- zFgQLdV$oANG`VHboPsI+%YEi#3tVkwwGHzq(!^L^Dp5f9u!saF`bSU3novFdD!^pQwWD` z8~G%E@2&B1)W@nKBRXE8#k7nmQpc;<7{06KuN;^0hCLCtVDed1drm4(n-C1WAC+J6 z*ugen-VT-@(wG${)4CR#)LbLY3hIF4hH-?12(kUBq z4d=&w=^R=z>5}9<(Cce!@@Qn5QlDAwwzs?;tWTc`=69} zf@;KH;E$7H3P=LFV@z;nM2z@T>!lQT%+E$~ii;t^hyl<9`cEt+zTKKpFjM9!JvmFoYEK2>i1W$I&0%d{n6?^L%o&F z2h6L?NboEP?o`t;1Fa{!M@J?e#tGFnQTYa1GNdULk5BTWa180GvB(M&CA%a`5LuW~++JfO4txe9hdc|q&a}XJEV-NX@D$=Kvs&R5{GI+~~(=0?J zOI;5N0d$O$5Eel*5ASjY?xpYbi`pG(4S5RfUI72L+g<~StMC{&T(Gv@%X0+lI5A@Z zdqRo`0%aFs38Ac$#N##ble4438B2tjVi!JF172!5Ww>7a{_?T`=PSCv#aQfF_f<-{ z`8r~$%bMi3bdi@OgCP9V3)gS`RStcIcbSL$kQy~p<>_6Qx-52Nbv%63u*aj@%!TVE z@)=big8kP^m9kw8?QyfuuKw84pnEBMjiDMdfH@I;h9M!^XK;RfH+;6u4=vwve27W@ z5UXd#DD~8CzIjJE)Wzd)nt;g`EQH|VaD-sz_$`ingNgXW1Y0~|uY zIc!)JeR56);d@vW)oL#ZMKhgR*SIV(P0q`f33=?rzqB^!I&5Ab>A++>cRvf0q^>@r zox1TEtqJzp*`I54I!mM-b15SGc_hv$uzRQe5N{eSke39-ee5C(C{vMn|6c+Dp8vy= ztO6N#|1Xv#8u(}4PCI>m==qkYM*~<88O*BM3ic*uuS$ zaeuUg4zue{ujYUVkYV72+{GjqEPKm4&COh%cU7xFl_f=c!zD|8nj#UTvT|g>yzNr& zeJQ};#3dbBie%YK$iwrPrnE=NfySaLFzfB#a*VI1`Rn|%+u@neeP?hcK@rELyqobL zYy`zw1@t*6ft$?%j{RW5<3VtgR2DJy3}y-`$e%8x#bp&22o3&L!Cr<&^QU^t%8B(! zg_Utx(#TVY#-5bl(m>zeCYK|6kDUn{-f$&Ed0G!1*^z`B>7ZN0GEjbKwX2;$CK9Xc zM^+c($hYs}7@nSZ&GZ6i@VCKctDvTDJ+{uT7JD;R0_L}#;gWxm=FSI` zHGOFG-rI$U$je5XLjPVz>eD&A)*!pw>Nq)xw1ECHeIQBm}R*s_oEVn2K5r?jPVD)d4ZUzp0fW=OaeDb`0QEe5}UI4U!5D z7&JnX%`SnUq|L2>)KlAxQ=OUNix|_|fa!mZSDM@d$N5|siwGEhDj}+4Ko!G$fFw~H zCZs1aI_)Bv@o_DXEHNRMiTxs?f^cl4yn+6kP6 z6GAsytP%4$Bb?0OVmBvx|GDJQces0AS9*(pi_6|Y0%_AhoMmv@m&2wnaoUebfF?4N z2=F89I+9JSmrcST$7d(&@?a;mKU-Wn^p!-t)1(z;apX!S<8$31nAsRf4|zcFRj#o! zWT!CW6|c+gk5#UzPsF_u2YN1*oJj;$?DZ868jkXHi9NU{+Vq^pB6A$7D2ej$-T70n zLkmm?{Zz%md@1Yt{Ui#;Tega%LD#(s^t|=@Ini3NNi!tA3i7$EQ=JgPW~M$?+r-WE z>|l4K#%2JRscAg-*W!5OV(4IT7#3aPJvU~#7c*tUh0~!xos{_i`Z373ma{psMPcVQ z4Te-D507yk7y(5p`^R4V+W_)L5I0(U*9oxJ{!*C8mnl=-Pu#z`of`CC`=`#>U(1em z8xiar%GZM=h1C2~m#Ekyy2Voqk2pK(1!accEj@m5`kr966eiafq=GL?djh1!gW7Wx zjC*D}GZ0ZO%rxZW!Z+OZQ^(E?mK`>>W@U5EC5=X0xF`64cv1?ijGZc-bLo-? z>XyeqImv8MV5<;m4p2jOk$-#6jRvc6VNf`g+@m;G@S%QPhC-thEYy(V-f%z1+Nzm& z_fncqm2}0J3Tjo1fZ?qY5 zLqx+&lByRNXev0T5ImnpY?zqOSm3(uWOl4q-8nW-Wn=h~T}XDKIUJ&NF)ZOlUzx-G z#!dsMxYwqLci5S=cPav@ma$5R90($fno@O)y#ds1gAOiz9W-{^^0HJEJk1~&3?N-{ zwT-t0YRLNlT%^wXetxKT?Ntwwx|L}IO7>7G(Q<;)-{W7t=F$k+HDhm1Mg?q7rv~YU5S}Wn9>^x-y8UWRoNEb1Ucrq(ck^^G-2nYxRtnH zx%x92=sV23{imD%HG)v~q9+@qvhGsi?;iozL7$v8g=0b0GU-IqbD5~PAEd<^pJEjx7+wFzLm}Q z7)p)$vsm7DGgfd2j@cuu>l-IbdV58GpZUf{FJT3Q4s2WSL!0D~{-(h;i=C_Nx|M}G zI69|9&>A(4U1a4Sbb!`mz0Q=KYHPRfBRm=XIwy6ofS4_WmYBKKM($3=FWt-!ms!|{ zG~lhe-#lmayit3u{JHp+O`*o+B?e<-GK%}%ap&|Cuo7|i|F!fKEOav*cKRTh<4S;- zkQKn9X4<>my1QCo2Jaoa9S^)%UwciH8!LZr4ep{@*b8x7NE4(kJ`?HVmmh# zGqxJi6LQ7SI|1kvygnlqdyQVA220+s$Jet3p5{ArMzuSbww>M7b?d3gs`|a-tC7It ziQk_z;K(j`P%-;KjdJ8d?ng~`z~ebY3HMz@1owqC-J+f=4EcO%;14v~WkdW;`0Z?7 z+>3mz1KE_l95%+fr&js4{s_2NhAVOgBX!|IwZ?GAHd#87@zvLs32A`?bQQ^LRJA#r zuXaq9Lx8viGZJ)meYEID5bMuw^m-}?4L8ypp$Y9E{Z+FW?pA#xGLJtxP*jiLUGZC# zWf&FxBsyMcP;rvk>VsK*gNU*c9^-oc8zGOs$sj>Ys2~|zw?eDTRo=hLwWsVbYSVkf z=N#S<1*wEp{)dc1z@?2uiC9z|xB?~$zoVf=5nJhLQRFnlri)i_H1-df`a^8CyJ!53 zh+59I#HvAnlT3040Rr9xK`^#c{@%Z9%i(0HR`3?W79LF4hDrSS?o>4OFpM&J3<>}{ z;KCIE_vUlr@DgQ;I5bqT*OCeBZ18--kdY)S>_Z~<>gyQO%e_LtzX%C+V%a344byCRsKV~g}fevG0GTw!KZZ~(QKR81C^AE}fuUuI!3QSPG zT&cK2PJ!#3!UR;Q?}1_)Mo3=+9jp%Aib(&KP;HL38XYE09QiY_NZ_20NR^^W$C>56mMF6Y`~H6Z_368tT}O{2Ug-5%O z-C7vMRDkkgR|)2l0dj#&0x!=qsxn9WFm9$xb4^(Uey*5r*iO8`id7=uZwf@ur2v?& z`2W#UQ;&Llvo-R4bs;06?)Lz)0uM{F#X9Wmj{OMA zr7LnwIl#w-;4f6fHHHVv4aC^{<{++Uflg@`Y5YKJAi}8EF~%JcQXq7m3cc;u(REfH z)-H9~^~`4b?hr*u{Fp>IXv8sEN4*w0-d!_G=Fo4Jjgd=8$bze=XvmyQaFN-FEb{ab z@F>gra?ACnh1H39yf&>h6gRuU^A77lOW*wfc~iCRMX|o3JBPyFXW1*Wx46=_tjs%krJ^3QaBHxZjnK>yA^Oy(*2)T2 zPY9Zv4bFzLm~!3E6e^X92FgcsRlM&NtEMdM$~ZQ#T~XCs>YK}!g&O4hulMG;8?FaQ zYAX`^GzPxQ$|A@yTjcq?r=hZ^uHyi)8E5=4n4&p-qWFQMV+nhS2_FE^DR-r*wrElf zTdHa;O@&X&pn6L)h|2IMfH`a}dv;0ViwR(xP(jqs@rxkE31gqT>pKP;U@v~* z+p^dOdLm7<{-kYPs&7JfZ5_DSmpZ-C3tc(+dx;ARwkiqlk@iQd6!?tc2P5_sN8<$i z_2E|iv4}rXq6XmxYZ#T#+YB|KZRqm>I;wo;T#ii(Ue|spfGd)~*Fr)M1Sr;;#YxbE zQt9L;H$ZUAWyN^gEtj-ww0exQ61-k;-%P2BNofwDC1XP}%Z;aS(eMfsyIg`Cep3if z&3qo!b?Wl1T=W8~B!&ugoM7J<)4!6wK@7{R0Rp+MO@7U`xrMC8e>mJf%U%4o|J&CG z40QYN8z*2c-GA7e0Q;c)DXDjlQ!^aET8x>TZn8>@b#5SreM)^3yO2kPSan$ea!Kj^NZjjZc|{gY5B#XMFu-T*JjM1) zq1zI2m472z&F4c3P`s;n4IZp$BH7E~r`@M>yZb3@vYTw|u{$fni$vw!aJH66ZzOir zK0-aja(|g>!SmE-@Bz^hc*VdvxJo?YJQanMMm=-#gC++<+ny*n@UTB3jhJty#y}zs zQNP=fD#?Wv?cl&icvvO`gTYE?Q|HW>z1N>ChNTF&an8HX zOGG3vu`87fsd*WaFjVHP%bDUgds~nQ9-4|_v77}22X03xOL=*;s4pz|&w=Lkq)IE} zKJe!&2Aj=ag3C) z!R&D;J*xOSvatw0%A`MHrW0NdTy>^90%+P(kO}FJXll1{BD$=+H5as*#K7%&mB;P9 z8*4>#O`EkgTSwbyDKyNq??@`~bgPZ%lB*qa+0W<$vha%XPP%-HXHlT#<|!`|iTt$G z*X=!dyUItg+`caoS%f9HVhFXUt0GpDl$}?v=lvmO*^w(O9X(bnXHLnzC6K*y-2q6b zS5k`t!tAHJsJZF2KN8+_GKYN8h3`uz|E3$LYzz1NH+#T$Br~l3d-|73uKfSVT)03c z^Z!fc$XBiX;GDN`4Ev2^iog|8&-_@Ye|IXtlFd+=5gtrXS1&8&Len&dav$^YLb7NW zGH&L00W~TJmx5H%#@reE8&tW+KDiv@A7&nOCI8Nj5H@=TOiQUP&9&MbCN_@3*CKmW zx$b6$ep!@^`~JZVW7q&Tnwe|DTC_g>6#m@I>D317LbuiE%Cu!4M(B<<$}4g`C>|h` zU8W&n)Ny29DBwZ(NWi3rJTCvFE42Nz0AFJt{dSor$THJKvuB3qi2J5I76MYgxc+vb zv91^wH-dr+fKl*J%L^N%;9^(P=vOw+JOu2D9!Ne$ab61U==c4MfA%QKRVx8ReJHK8&ZS>rKzP7^JaV4oR$!6rfa>hAGDKR(}zo}^7)CKZlFehUwV zF!W8DEr-5mu=B>|IIn9C4OqsKkISmBi9lNt1!kS6M(8gyaFo80kx%X09pW34@A|R= zP96Z+;OK!lW<;V@aYj?A`PJGiqw*=W?%fn}W$1Hx@wSLb{EM)bC-EiI#hmlwMJ7iJ z!;xMFuJ}H*=1=|!0MP7L2tVV9`EVfbZk!|c&?uN#sgOs7x-a_lfD}Ng@lL} zxMytZRE}cTMO)m^Ib^-7Y8fjE2v*QDanqIWslufpuEJQGnY()sB=Ws}^>~#Y%W4i* z>_9FN6sMuB&|E7fUh=`o3*J9UCJd~28t=79X*7fDTl9p%C=P=9hq-|HMjb2pi zxyLwR0G_VCfmKpvcb6J+YiwjO+WQjac)e=ev!6MA3FrEglMpwaGA8Dpd17I+v}u!&nfquN{vwCY;ttQ)icpD8=SUalTQ4ZSvOqcb zWX<{!39H9E%(cCiaSDfi0Ns~%CGXG2CR89cVgKDi)&mUQ&w7$1=7lSSLkmT)z7fv_ zmX%p?G}0-*Kby#9k|p9*zJ!>oF}41>9fAIg(ZiUY{4_`^4{)A5MCJmRC2nD|JT;SP zBncvpgXII)*SVNrGM)}qHcc7!7?hb7-;AmE<~o}@E?sw3R=p!sRP9;3ng|EoQu`Vz z?*v9u5MBZgOUt2@&t%)e;MLh1@+bSih25)Opn{EOszgi`Bqa?V2@FwL)?-(MiLZJ4 zkVKS9-+6L495TI;8cH3h%fa{R)~Cbny+I27wKU0T&kh8Sal97pJ}y$+Kot<+?m2TI zb<=pHJZu1|kH8D++G%oP1p>9c38?rFu6B{S&8k(_I}W9tAatCp`g#E1(?FPwukr16 zz`NaeE%?GJ?wsBUJ;^2a*cMf^kHztH+_-Ys^$lQNpQva84|n3s9~A zrT4-MZUfL`Du<(*XE&C6_&hIsrp$E~$=MhBq*Ii_Zy?2zcbedEkL;`+^BS8*-%w5E zlAF$5p};K5gm$D|HFrG}2Ncem65>P1&V2rIchx9gH>EHz-M_?&R()^ftTU@%-W3cc zSGo6=&IJxStmFKKNrcd*L90Ku$6CSPnWU@Y{=+T>>nW<@@%abh!|-kWlA$kbZ)G_I ztxOLE&sLJoeH*xzyvwwJujD9^<4xY$qj+5eRYYB2(mgE;kZJVrNK*e=r9am7EU}YBX^1qJHRl_ z>c)`txnTIo1|)WDs9GM>5Z{Wimk{ysYfc*#oF+W!uvks3GI(egg^(j1&u4(<7i3*KtZx`7|p+`?c>B$E0XD)=`E9x+(NQwSD8 ze&(&04O8ccx)jkTN4{$W6r?D|CL$4$ zryRmV`r@uvD`Fs&EsdIlmgV+MfYKg+ah1#ricgLx$?`_xXD?2&i-1q~c$AIlxGzKW zjycG$xI{t~Qyy;G145DGbXcgdv_SlexsDy0n_9Q>=y zU&MU|Jf%${6S7kM=c`d9mjX|&PvHCOqV$>bbu$_g`j{gcge0)LI?R4qBv~%oBg0AH z0O{eNTi<1^5h5R~j!3A-!Tz-(c_OuvPa=6FzRAZd4IR+&*R;pAw7sL_ud5=})xDu0 zh)Hm8Rechq2Vr1eck1!^k;W2d8hrx=e27 zBEsPy*rFW%ezcCS)&OfG9Q~AKt#)l&6in{?u@5KxWbKk1u4!T9tt@$Cdude#s{@O0 z;XoslHe)wm9*V}4o@E90!7+db+85lTaf?bpEvur?$NyGw&{CHuHdndZ02;6#U9yCU zZVAPNc*9T(%&D5AIxxdqFSQgC0jTmX?9&#^Q~WRN)262!01K0B z2LovZ_s#X?RR?fr2V2^$1pM^yZ-g&URbj9tXP)>ju5YQvTM~OqthH}`ow`50<5!dx zN?b*ApwXmH5P&m8^Mr{s0I8ruyl%6ZywoZaaO{94%=36)*W=efN}qEA6Erp0P?25z z&RMaHcIO~P14K;{e9w#2o1ISkw;oz0n_h+iN|R)%gkEvkHMj>4KuUl_n_mYMTqdt+ zHlcrk+oimDsW(e?x7{(G65k;Gi~$|ptg4qDK!YN8Sbhos_%!WX^f-?H3gp2@u`om((c<**)rM&S0GKGz2!A-6qnu4 z6q;dMx#)MvPHC|&E2$p}Q8oZ^jeVqLtA5D#r{t}b)$fx2q`kbb)2SV}@ks~5vc0>u z`5<0T%b9CM%HOwW9*_=g>WQ}xm77CbMEt3a&{0zIDHJ{TYM8#UhxxW^+g!jR9}-8d zimPBWn=4_@lf9}J&5~XKCDXxgEf!J$;X9|fG6#igh)m^asf6%rY8U3u2tV zF3ow;VJ%DbG{^`nKN5K2{ez@{TME{JgIN7GM+a#Zx8(UXi`xF#p)^+Qy#7U?kh|~J zV6L97pzS25T#3Df`p_Lqe~SL%SYT# zHDxEyM&_}7X!mVp(vBbseL>C?C$?3YLapc2L@X8xCpc}>P0=$s=Qz~c2MxXd`h4FL zM_jH399#t7mVA9HIB~oks$X6!y-qUTY};_N+8>w}ouju;Wdjs>xjTnRuAK1Pf{Bbv zX1u=Lif{~u;X@5jS#(u{#>U;lJ z?E%UC?m(6S<~jTa8uG<91e%?KO`m$xu{!|(I9R-yHk2z4C-h;Trx>TByW;Y(Y5ZNV z`nT`Fp4NpkkS)274@(^PFX?B{Q_Yg$uig!GPIwf1dmsf~3P);zChr;S8aV?_U% z95Lo3HDJO>?_NG)MZWk$^wK*SE_ntHhU-61-HRjr)F&p;!4GOv!_unPI_iw;6 z0=`D%j-}O8^LuG$(j}^`)+xrPt@0#udrt}PKtX=QBx z9B#jX$wMyH!%vZF_n9(h6wcG0YD@L`v{cXn*2uQ`UckddVR1 zM0Me;Q?&i#pHFUKpNa|0xT;H|x`%Ouf!YatHXSZnKo5kz&T9WiF*;x$b}3&+>Kr#L zs+Ywm;nOmW`4c(@h)vd*YGZzz`J*wuKrUI8dYED#_iq zh6U2QPEWF^JOf1|(6bVH+dOSPxsHmbM=PAXpp&*P@Md*CELY?irU;0`Ih)u;qFnCJ8#tjG0T8Bg90`+VglHwiPb*j>TrV%EHJorf6dntb44LX0>I!pl+1@l8;ZIXyYASiX4WSKWG_0 z7Dh8_&(lYjJ<_8-0HUnOMrL8^_#X9gnzQOf^OOspizy;A!I{%*b&pPQSH<`X&unf~m`og^+ZX6Fuw$dP}gnq#;nYmV_Mq z(3WMY1H)7%a-6Xu=1sZ#Nk7Oj)$>w2ydrCVtGr%-T!DxO5jrXiIl6*CC*IJmZa9vo zJAumSx3F-Fmx(NLC;(4#v>hLGQ3*ly*c-@~ex1^1>)Opi=NFjVbq9u=Po6QH5a%<( zbZo^O-pje!vR5s;6>^wu4gw5W1sxc&hE4rGb<*icZ+yKK+euW6GSZ#8?Z_ns8E39d z?f2OQQfZAPciPv^*tg=Kns123;UF0PD=J}?rYpdz2W*TFk?G~JibW0RI=?nf1?E${ zceMwS{+tKmsu7*3`XMbC&J@p+yIDNtI6VRKc$96RigII|z@%a&2lEma(8_8FkYs~0 zReIW0E-U@C^h5*3DUxf4zCUMe>=;*dI<1(*x%1&$^fhQsUwjl#>bQ5s4v1Y1ktrsc znl|EHROQD`3?p!wHggbeoWv%2ow{j;bDZ7pz4WgnIR;0I--XH~m|H;qh2IX$z?LqP zCy0Cvmx9M5jeoQKW@9LasaX4m(QQO=u_nmvLQIV1xFT+gc!j%x$a{N-#4aayd>6y3B1=| zD^^1vmxD-wG#JG<@P8w`SX2J5w?H-l0HA0Ev)uoG&@VH3REo|V3PQGP2mhK37Cfph z1_vG}HFvIU1wht7(PX>1nm#8LT*HkJw191uR$Dg?OC)L;f%a?Df$WS!TfB}IO75jN z?0s1&7mo}q`@E0K*T|39P+dowO{ijwJrw~rZwjJ0uer;plimLAwAwjZ%wp& zZ-SI>L-OeD@DfUaQ2)=u6SVd$h?pLnvix;pW(C`}&E`%fBxhagQ1O|hK)RV}0*5yI zAGzE?MUxAzJ6~q;6qD7HPPeEsaDg4-eG}D>&U*Q}R`=ASKLp>HhZ5|xHpZjF9o7(A zOBP>dCsIH=hd%p#ZO5HLH(|WuMXldxArlGDA3UG_?IuT22|eHTOz5d+85(E;wk(`( z-|op+O>-W*yq^oCaRu~DsSQ3nwlb;c4AIFA{E8Y44PDbu-DjCoqY40sowiQ5GlVoO z$620Xap@2Yi<$s%NA3#7lDIQf{sqjlcd$kj9W#HVZ`gt;^WwM7EbBGSFo#dU9DT>P zFWB|GAB1}-;N$3P7ynix(N(*kc&5HIj1fo$DaW3yY(R1wOO0@J!9n;NSq-2MJQX)T zA$gAR_DED+uyz`km)SRNkefmjZAI^uAb`9y8JNcj)hDaAi`xpLCM0GodI~#d2F<8= z%Ah;}v;N_)r(Cg&6JD)03x@hL4RyFFRtG9}VCItMNWyKpelRJZZ+tbd=Q;G5FA<^E zEIIvqr-(hpt0k#OyZIC$@4%G$47T^!TfQLoRS`eJvOUILDK*y=FwNfIH_(t4Oh<4R*+x*K<+KM^}551BwR;0%9}xe<&1e&0j*b0L;%gb+NuH@ zD8_Vq5Yml>boatqI}e+l%D^!&x>)!N(P*gZ2mqmle4v>5_m1av@9N?`ZLFg8&x#!?AcJWH+XtrPu zt%soF?Bn2j5e_qXP_CGQM z6uya3i{L5{$3K?2{QcF22D%?T49u?7E-pGoXCvBuu2Kp*nEz?px4D0&m}P6ltvI0b z(ACx4TfC21s`780m6n%WCZ3Z<$kEaj%T9phQsCFuH#=3Fpl2(-W_&=J$_gZ)=f?f% zUk7U+($TpqfQO3TwN<23Fe!kRn-(a@hv&!}MZHU|VSXKI0gTSr+rv-oukoOVoSXL& z32%-Fh5$LpEW}`0YZG!q%~lW=87wGI^Nu@Jnxc1~W>%|ibxN|dmLxB@#~XD&0`Gc> zc~Fq?15&tJ&4lfM9qIh$7LEHZs}OmRZY2(XJSCCy7@87;i6c_ zulN^4+r4P~rxmF_HKXSK4-PVkWzJ@jUra&uwR0f`(t&`ll5}|Nnm@`Vv)C7$dSv|1 z54Q7^-}k>S(|Ix*Se5GJQ9u_fK)v|2XAY<2-gR;+Pe$xU|Eu1!vzc;(ln9_Pi-!OmPI~ z83~7SfSssAMsIGT129SNTQkNL5L zvx@i*<-(UT`IHF#?qLb8-{2sfp_>|$o}$gT03e%^;{B%aB*Ix2b&=u^A&a4qmZN`v z6sNC}Y1^N#DAP0IYKdivSq#Kf6cu3BsofNj5xG+)+|1c?%#zs6S-y^vv+A=>Y_~y* zM|7;W0+^nMbTl1qhA#1)^2Mm^?nXSOF>M-xQGAo*&%Yr8S6l!?D*NeJq4=fE;~~`D z$k2!fFZY0DT1`y?rskMbW>3Ye*~V6ua@^kqWGOsEU*@p{Hj6IiJQkAys^!pCXYb4s z#zFQ9CB^cT&dUjfek>+NNF36zR_l7G=I5+$$4iN*o1DP zfMTtW&;h8RW`I~3_x$vap_;W5eo@HsPYs0PTjB568n^VOSLZl{W!0P(OO$aWD+jvV zcl0E40V|%tEx;HKt3t7tg7|N;w*A*IG}F6yj-Nv~W?3!bvBokb+Zm57DuMo3_M5B@ z7wrwB=+npVQOkp+WK}I(ko{6TyJofKj(x|P4qln?l2Hu#Hf&EJ-_&=TgDItx-N$b^cwf?4Ml)=HstX=z235kZ|wfF5$ z8ZU6)+>%BO0QRh9Gh9C?W~cjCS=Jzn?PDMbPG0T8Hur{u5AyH9`#x+B)G!PcBEqRF zZcC2$+UUwM!jPd&+LFfSxs^n*^03}Ul+%EjKk=s);EqVs*Lt*2kUp!B+0TwBt2TlG z%tG3(06>gUqa1&C&4M$+U7fcfFvBc4nS!+VB@qW}NT$8k+#}>S1V6!Du6JOmhLUl6 zm+;brG0sw0DiMslXqVUIOF(i1g~8Lub(75L3e}ei&x6%sFW7Qf9x@5 zPVC%(9J7Sw6QRx7D!=arux1${p7`y|&n6PI(`V2V&DEWdNS8=Bc?Vh5u;zZaC9q}c zG3Ro$+VJ9@#1;`*TScuZ{w8fCH|_a($z_blBCHq4k*f|b7KXro9*x*@zhJUhFfaALU{ZbBz+PtaO~FLR=)q`0_0 zNR-3)v=sBB#4c0DHhorgZmB_+s(;!ED|6d&UGzB$g*^4rdA(S(BOs;FC9i15{lbRu z&sWl^Z}Y3{zG>5x>yM2VDX^^PVcIT#KD;BZoh`$|i}Qk?+sTEwk3zE$CiD}c)T9}- zBu6`&>!*k43Sj^`qU5H~{L+pR7NpY^8ywA*>Odob1Fv6tu;~x%BT!%H56fi!B!ZQu zoD}KjbJRxmXtxKra3-FW-moXj1+j}YC+g|l1dU&ZPV!O-sD>h&v!3LEhHP#xrf_#X zyXvY}W_@GD!|>EYr)_xPpWWeVZAZ)6P28Ugl6)%fHks={sgc* ze_a3aQXb zi|-kTdsZ)+wV755b%YJ3JS7&DyIT+OQrt}^xjWAIkbx3>LS8<1`tSm^;Xnwqszpc{ zFar7z_h1Cf+b5J&MbIT6wP;{|E))Uw{NU5*ol}~Z5YrLehNJ^c8wDOa(q=_)4oKlO z?x7cJUn~Qga^Q%o5XbCV^MNchtJPtVLYJ&V<(uA&{bo-m^rAOV%E|> zbfS!v7hnzVG3Dj7Lz80XVZ0wT4fB$k0)>~7*QmA`I||!Z;}6;liQDrO_ah#WkDlIt z`rVbH9WaEnC#wDD&d`f>F3MuL;~Qg}hq4#;oHpuG#a`wIPAq-?&hIu;f`VdmTgUd& zHTUp{*TpVH~8|e$6)}z zDxV`6`L8K`??N#b9)bLa2NKag^mbSdW)JRX7?ym6UO(B#i$L~}%AdQqkfq#M#q*Pn+N=SS~@E0BSNB7n}9eN!U#&^cX zx2A4<0PEiqwrHOmR)~=tJmAr8T;J!bYExuZjAlRO+)MHl^8j;zj{39dm9$rqVaytA zc%^ks(`&l|?Y)l*GQv>O2Gk{;grw+=AKLxAdR#O{nGPet7BndlzMquJWPxp_Sn&=1 zubx$K`9EO`45;^8asuWx{Sr=)`j<`z;oNe@d3)qa(K#<>`RZ>3p`y%<2$|{j4Nb{T z)DddURwuPyKVg%_VHHLT>*xHV%OZ6#Lye|CsHY8i=m2b{DG$CuX zd+Y^wZj`U1TO`UexGg>5{`kv}=jR7qgWyhdj@!!oy=F>>4BrMU{Ga*@HTT`&Y}e}y znG}dvWr6AE#eODi zH-v));=B3ICuOoDLxIM4Hu(mFvErjjVh1g1Zp_D^^=qKsrAv#Zj-(GEv9l<*w-Tl@ zNKT_tg(g#@6NOd^9sB?{i~LBtGY;W6pSdOb-M^yaa{?iqZK(6#3aH|X|*W0`?PrFvh(RF?V zPPlZo2qK;r9Cu$1w0Btn`yh5Ys!9Wse-tFdlNS;JYZP%}So`A$GL>kJ@enX}tQlZ( z#yNlU4CA!n;jZ~n##~kMBX1J?DuZNJ*>?@#9T~@nVDydOt-gVnchSaqCCn-|dxl-> zvM4P=t<=1bbLOtIr&L$ns_A!6n(Q$U}ubSJ5hQ4I0ox62(yMJf+53q!~GUIa=QPYUK943gV zWWg?PiUu>U)w>fd%rgRvs)gPA|DiImj7)Td}6KL|LY!5pWn(1 zFt6o*oRsk+TCt^{auMt1etKHBfMzSz&3uV03{45>x>}Pp`Q!8m`=9h8TJYIj6Oz** z-n^RG2kO_NLK=yrenG39)mu;UvM~N<7Y(JjY=zS}faX>*=Q&zUJGNYMpV_RF=%ccH zWsf+O5@!f%9R%?E+4yZ|9t=A(y}vn1pl}9!XTBBRCw57gvk|7<86Z@&B5(U{5Li#g zm62Rk(ywo5Ajs>^p5II?yFznyPy`)$kXe(eVDy=kmJV}?ZAC-L=2M!=B&2;plA1t? z7=1MShuvIH_{yeC@-i~ZIBkk}Vt|1j=zv+H91u)An8Cg!yFs&0x2^{LYquBcM}tS-O@fEIZZu%KNMgX533 zQ5s~PZNG2tf$*{GsByvWs~R(_P_DsJY(WYYAmBnQ?ptG)t`2W9Q{wC9{5&xvU42r3 z=Ea_c85GfVYHft)unQ6D2MEOYcC zaL)$%!}8tM?|UEFLp&vbSGDilGSEr;pHE~S{<(+QcQBPEutv4=T9cFHlmT2yGxHvh zBb#4@_bbhw!PR%RfYL~I2gyvTDCb}{8ef%6{A>FmS}9QDkMvalqE-a?4(j(42n3Q( zVm`Mc$QxVo8e`#%f`BBK^|93Gr!#3m8qLvwoww-iv;K={_UJUlHTS^3Y} zyH2!)d_o9-JoxYCDS;kXE;jK~7!esMfydpyu_bNLB8*5>#bGx3S#JAv*eJSSIdi6@ zzZO!*Z^azCklSCA*bFJE6Mdp*n`(m8WXhJ&%?M6ASqK9RHV1rdCFa35%OWx$KzFhr zH1qXlvuH(~X4)xoqr5R0h7bL+_dTA3A0+|#9mbrpAEi*hS#RtG;FTqo6M8ggWevk> z=FJDh{JMs%{*Q%zkz1PLO-$3c_G)qUIA;ofzZr3`cGVOref5*M!W+8>itWru8dRv* zV1k@*wbZ$K2t=x`y9|&7RC+o7r^B2bPXBWs=zkJGfPW8nK;;W&b^gBumbj|I#iKnM z-~fhax=EcWh|}t1?e-SOP3>COzcRG)PSfm1e*TE}P+VKRqe!#;JV-$fR19~rbaMV% zU?$d8B4xJanVW0ll1)W8TCm zoQ{t@^W&CpJ&fP6vwBu#)HTt|J$#b+cRa6dMPPoH>7N|C_SeC^-A3OW4e!BScy1!~KR z%w(hWCZuB52;(VN)g;Hu1Lb4KhnBOdP-aa-L{ZYWmsVoR_N)b`mekm(Tf|D0^4b+{8$p!{}K?vy+5SQI;g|Ucc*Yabooz2P1 z$Rr39M^)2e@~Rv9_M^sb+)~HQ01Q_bQhh$2@CLzu5skMRS{s6i03vA z&dly-cfQxz-*|l%>!d@yy!68DGqDFA68jDk8ouhryY#%M2%lifSFw0mVEx=`847e& zmJAhxTzb}@9$Upsdt#Yw5c`u2p5vKLD02aZN)@#Fv9WT3Uz{>Z3K7vBKwhJeP1!f? zIYXuySz~R8d_^V0UL{+ed%ny_g?bz&C~pJ9$6b1zzwO@>sRyum?&=sRQ+%ys`DVhM z%u04hSEgEwBNCpL@C{iFxVlcM;O3r%N)ZDHU4qsnk@Ate05@(Z>jhU~8{KHVwzwI72383B8NDu4$El z5~9F(sS;6u1T;XvE0#%XIXVf(_&EnPnX#6X8f06=IKIzRfqrE1`e>dTem?-cw+uua9i1A$JTS<_s^5-ZLSwYNluI!#A*ccGb}4_h*05 zXG60f3@C#EX(pQVpl+wSrk?|{4XGTj_jCqoNGM)Y)3EOV=>m&f$`C6aHRZKzWk$vN zy0@<(rF+fK>!2AJPx5I4?z<#r=74HBCE$gA8cOUxvB=zsJg)utSJ|LK6+#7ee4s&V?-7R|Cp~mhTcUToyxkL9Sxhj_YIMtph;r|X@imCkA$uG- zSIM>v|IEwerK&6|S?=!)$VhH+Mevbh$w@yRGr4olP#$*417COwgi|ky`Da%#+ zJB5$9&7V(pA2X)|l=^mRL|lT1g6;9qw0iU&d{sGN4p(5ty*HYkL|MbcFA13;%=K^k z^N#f+_Cbbc|HtctpZ`U;o}qV#7lPl>u0XJYDj{H(dS5b!i2(l4-n-z;#3!U95mB1*HS@|a#&Pudw zWAGEG57EA)CSn(VZG6EwIk|!+C=q;GBD>|Brsn?UOPW$X=ww^fbDni1<((jf4uvsg zjT0^`y$?tDI327dzTll1e+QhQ(A^v%20*hIje02B7o*p{yj2T7BzD07tRC=KEMF;; zhA;E_H;PK5XT1)Y!z)Brc+4%OZlzK*Pz{3~7u%%x3)Tj#MVZ=7ZR*g+!Lcx?fy#26($n*IPMyIy&W} zCycSgfqz@cvULy@C32)GcbAo}Zl98d*Tvt38Y2~lnvXJrqDYKIq-TiCtmBjYYaUvc z(ijTLZnwIyKWqKhgXs)&}5{E`A$>bsm zU;Ui70{;WAGo^C?FN9QoBLVtVUOairM^r3sS97SeM?-SA2`&x)VX6mSGy>uwhusb< z*<)68@Cy%eb{!d4+b)v>ApA?5@0dGn9>ko78b25r7-^iR%nUy=bGR*QSceO|zQzP} zA@Fo7K_?C7;%jMyJ`AuM>|2X(R1cW$8S1;vx%Vy3%u|n?K{9e?LdJ%&;y&XA;GL}y zDiBgENC*`LYJm^yFr9dc;NI&Y4j<*@Ph4A8f4hz(oMl)%5RGsU-U@PdL$W~sA&osS zsqO~3`--heyb1+k%iCrDk(gm_(7c--(r?oYVaVHmp4BOR^Q$ zn3b1x0om*Wqr=Qp1!b*5TS5k@gx*aM{_A1vdfBMGbpHrcI%H`<)inpH0h8E^1wvQL zAv3dL!*ANrD|QO_ExK4`NB)Nd{E_2QAj{MAn6wmYcDipEfb5QS)HK}i%B!8w6r;;$ z9L5lY-!c$8jG^4jdWiQR(_$(Pkd(I8(R;6i$}uPi`t8Pb&Wx{<)xE7NDcS8^<8VNzB$qv9OvYqANA(ch&Z8 zXuL1I<&~GoywPvS54r}Z?66EFilXu2E?M26DDdKs3O5lv1Mq`2x}y(YAXzz2e4g-k z0pYX-2s_K+3}SD=L%hvZ@A$f$5v4g3%9F$PZ@>6IO^DDU-%lQ+>3FCudE6hEBtFl{ zka}YEq0|rK$aR~GhHZ^E9>lF;F41c2Iao>1G5{j2ORA)iO>B*w#7Eu`4fvyRxRa;G zm?q*k#SpFS*3bayVjW%^fT?C%UqnDgr_gU;co!~r{Qo>tsr7%M?~P#I z`hTJCtPW5A-%LE{0GoABB*K#B+pA=9va{pKk3)Tsf`0TGSOyJk8d3sTD~?pMSOnC; z_=wf*7B?>i4KQ4>c2H?u%q0n?+;Xf=n3k0u2qpzA16acWdTww7rQwOY`anlpur$0T=!Me9Z9gBn|seJ}ve79qfK z3>(M;ur34k_E}l9-RSXnz^{jALcV50Ttzdnrk8;nq8dau$4w2kFE52c@bXnBg+v0N*#w@E#Q2RL?TEQTsc2f@! zEv!Hhmr|W!&3rzGADnmbg=7-okzt$}v@A$EOlDkGJ<9&{ABQl|b86c__(>!N<^9?F zix)-pSszez|Gh)p3YiU#u%3CIhzGg>l&w&UU}d{PsNk0S@DKyTa^*h>!&E0Lfb8yA zm7{)qmzcal+xt%TJOzl9)_?B;3BgyH|I8{5`52(-3kcdT>u&x8eUNDc{HwbU17I{< z)CO+zb=V9b!mm(ekrhfT4*kZ<<;NN|w+udPb`!R~T&DXI!0)w+?Hl3x3@PjfGFJuZ zUv5M@dLBDkC(5=)iS2o&$!*h@Q2-v1ZfUN1qvUzo?Gd_u6W1K9f|1F^v9+^|wD% z8ggRTtYhzNgi(_mVu8xf;Wg%%U_cfJmI~DQhCG7&Pn*7i>G zTVYI1&hkeeM*X8Tf{!n{u&CI?@&Af>|Gz|(Ej2dv=^etc8$v)V#XDuk|(#(KL?JwCDrNqJ~5mD*vAu%;%pAbA`^ z+t(E%*qpbT=9Onp^5YCFxa+{@elSBvO_ZY_5OoaP3IXwVpSmUt+E2y68#*OI9uv%Z zBEx=xuXJyggrN2JFYH8I;ZY~mI6d~3H_vm(S--9P>hi~`$O^kT7aI{83V=+!IED-OZ8oUZ}xj zvp4Eq%=00&KvPus@BhSF6PA_g*wFdSt(uLCzsP@(F2Jp?z1;R$0;$DQl~Quo1LXak z>$O$(vm=Dy0QPA|*W_ zeE3a@eE0?ERNv#RB8xULX%A#LID^ue=AvDwP=(lr8$qKfzmS_P*wteoy6fLTn-&l$ z5@$>jje9^Tgf*FoZ zIYhg9+ILB{06i0sj#^(GoB2I zJu`g=k%IE2Cs(<7mfCc5^p9FTe}p;Jz{ANWlrDRaRqh>bHtoV%)w%r66%lLjXx*Qd zBI?CfEOV-rVqOTj*AUTQ{MHk(?8q zJ+ZrZuJ#OqNhJclczg49!>`1lu#z;x+{TVklERFTkH;N07z)z8-&~gwKb2yQ@c-fv zs>8$ok>q4~_xQ3JV*V-FupCxnzP-XrCl_~e0;(Sh=cwKyRq=*({&ckfnyrAs&(0_31bj9Q3?b2=|mJ=QE!#@mN zT_AoBXJ_6gpFdi7pvl_l@Cyb%l(W3*kYx;~fevG)tbDZJ4SufV%bVT?2}Nc@Gp;To z7C@f-Z*~dPJm7D1$^Wo10MN$Y>K|a<$A38VTM<;*v)W}27qkc<)COA(e2tQLEkroQA+F!;IX2?Ed5f?XC3mF~|HbMn6`dUr)8 z9(#f%erc)?DU91C-*tH-Vs)zajb{;IW7*(70q)G>Y`2a`UEA%f?Sft88UU?Q#IOS9 z2X`XFSG+#0R7HugTUVX^YE4j?X^*(HXl$|u&Lp&$p5IRCI4Ac28KejSrkH_ID13Rc zB>-RUlD?pGSD$2{nwz_Xy_`p9kwV1YGcNfF%N zNLPZSXdhlr(;q);{X1=ouNscZYh()zRrt4p^f zQ(syU+|*>bs*wV4D0o;0-zwI1}a2i z*rBGr7Mzjick>Ue10qG2-%#sGtJZcqqml7T^D4^*7#AXXAWVH%G^p!FxYSGth|G48 z>tP_mm1taOv+ULrRH>jo-*TcwO`^`4yxP@mtf zy`S5v_>dCD@0->rKzqXPF+7#4TnCN4w%e(_TeJFk-ksD(&&1K(KS)2YKBziHU!EpG zM^Q!RJQTo%@jeYK0iX)j?qulTS+y}xIbY3m~IPX{3jnEPO zRE$R_mw(TAQh#5+`@dV9LpOFqG8VabiPvABJ?*iS+rme;K~wnmP#-h1DRo+|CSQyY z>%-k{nTPrm1M8#FIw&(fyeq~?YHF1xq0*N!BT)?>pm-AmoQzkJz$l{>UU0T|jMer0 zsA5Y%#BUuLhA>)Rv06etg~&}Bbm*3%n_Wur`gxWYlmagu{Uc%e!`{2=vo9x3V6+Z2 zY1bW-zp%h~L|SEf9cC073gJ>ibrRc5Edr} z{a_RZ)i&qK<TwUIRb`S2ssG`-LhohzA!R2UL~f=*67}7BikE)`oo)OTOW=Y)f`~ za-McGXNojglh_{)=2x_i`EC(Uj+;=R5QF|g;d{l2Kf8+w!mv>BepcEqXtCIgt#l;m z$W@L$0ex7UMEWMIRC_?MGnY^OSd4!z{TzmxJZ$=5q_XciPV4qptXcia!R}&^7$Jt> zuNWu?5?UhbKRj*!4#fjU+n)*>1!TxR#4FUxRB4!IzP-rqvi|uml&CAFW%>k76bHYM zO>d*R$H`W3XYzA9njoYa^6r~5U=~V5Nakg&v&PwL zm)2s@NF*}D`27$B+)0*<#lqZ*?0X&C*nTU%$7Ep%!@mt}<_7!?W6Q&vF$2~1tCYGE zn$p}?1PC3DNX~XP;Lyu91q;!4mR#+{qDr+$ddHQCqbcBWPO^qdYnCSWhoiL46G8Oe zS2)*;cY)T}TkdjpiHk3QEQ&N1;dji`I8tf*rL^EPQ3duXH?W@MdXMvva&Mc;bgl2f;v~$1D^i& zY&_i%J!pt|M%~^2h%QdoFU>n=dW4g#zRa85!HsJLoy%f+x3~k6hFPgT2Sv>gFNZVc zIzzpoX-klqlOUvVqkZ^~Jj$JW3Aln$Cq14UpTd2=D?LL)&0ho=-21ro%6TM^82y$Y!`gpOQsgfGQM-H;!!bN|FGrnVZE zcvv63ijU+DX}*8b{K?W-v0}`Q=-*3+Q$Bia5}k=`T0A_Ad0;#7cr}cQK!BydZR}NR zGid4egFvsVe&0n1gqs#VDDYj(h}weew1=m>S&){A?G{$_O0=*bFzygrN>I%kM5nQ5yow;59(Fb zE%|*BrTGrxOL>Xf)kAnjZs{!)0PpFJH1BR-`BC%k=)v4rHYnHI*F8&GehjY7C9e+5 zkuI(avuyyqjp}1(jKK=JfBK!O3p<4cIG{mR_k+ZENvlZ@F;b@XF|`*VZ;<&kB>Q_Heb-3PdGpiZ$UvKB>Hx|S0t|YV&cieJue9|b$lNHgK!MKVZLL6vL8CwOD1lLt zID+?w%S>WqDEh03Q{x^f#rHK#iUWMi1YGko$eSRuMYuUmX*y8E;9ljRl|a;c5Dd=b zH6NGctFMe}KLyDqBn*vxzTmvJ0FQZT1tK~mv)b1?a%CO8wg0E^`uQ+eUZ2PVGfE_C zv34z)k%6;uQ3eEN06&YuA8q&Q`c`d?_V`mX%EfnTwNwz$akX83^%6%$=#GV8NsEUcm zO}TkKYn^PQKBeAuV0E?0_Q*h971P}UvWvUI_jZBXNj1X=sDS6b;5Vf{}Luz>;uXtyYollT^~rV`nvg+yVp_Z z+8)qy-Xsf`yClB+@@DV1* zCKfspli3k_`?SFMcnq|`jxI~&0l{2o!4SKU1s%VGfN+jAKHwvm0f|HYjCTjrEIo=s zOac?qk0`fn=yUkd$UAKY0kxoGobR3tNw^b6*}IrYyO!{p`jizaBq&?#XdUEN)CdqS zyu&s1j;bn@&5u_Vs1OENOFZMH6<>BWA|b~h=B+Nx?4L~@j1Ah#?d%QxKkZc;dpgtJ z?Rvn|581O#wy!?0*kUmotAt!ym-LBeKA@tYf20+vfIkx-5jMWj+)B}4n4IrDTh1ej&CX{YMlGSh`&PzJ~3XgYZnLu&`dOFP%pDHLf0eZNrxp9aW!jo zt{?+7C&Y92K~0CBdw0bu{QsTc|4eTnTmSP3=HUI8GhPubPQ2Y(1`scaRx(ZG9p;XK zY)G;*U_&9s%{Ida;Sy4Cg)glroMOvJ>u^?|T*m{j*NC=I(icxa`S@nlG@uhUmW_I1 zP5gAO{gDcVLbm`1$G4j>ntXBVg#>oC(1rT;J9<;0%msjsz7a)nlkcA=?!aoB6!1fO zlHJa9_l0!bJpAyChoNB@8?mFq3cHu3i^+Jb;wPrYi zzM*JKNa%gw*B}W@RSODBWZoaWgC90$0k@TlrT&QQ3Vswp(wEFuDI+IdTe_j~2cLDa z{490(ZdE&wwLm)V%C@9dTJV@V(ep+t+y@rP=Ohx10&Gw*qXCX0V`zWT@+!p{2F1In~(YhSunrk>xX*e{*9NC6gXXGv3s~OA@;BLf&10k-ip%72= zX4e4WJ6D1M5Yl7idz*GaHYXb~vX4whKW!D$lLV3C0I(g5gzG9Hp+5uyDel-h0d7Gd zQmh6hozbxoT<0RO!#S#`uxBfRu>$h)LWN=5TpQ?`GL1WGbi5njl0!YoX@+ETcx`Lx z=$r~I%nw8_N2Qdz5QSm zns{XsEOmAw0&kJh8%?MpYmb@2x~Z-qFfwY@0Bh+eZFA((fnw-Ht;ooXq|4;O+3p@8 zh@yE^jR}MrxL=?2xc?=dQu!MepNocPUgc4-azu&M^@q8lVR9DuOW(w9+)oB9Z;(05 z`s{a*vuMf!Wp|cOUPh(der`YBKhmM^$62{g3G2+aT%&9e>npDa9<;k_>i0tq#7h|! zUH9hxPPVR2#?UXj@QVmwqrD!J(rcx2I-+Pqj{fN{$jcpGE;QAk4tTS}+mfae0TMO~ znQIs-~Kdc&O!>!m*yIgrkN3zWzW4XpXWkQ#_%qV@lo@_|t>{ zq6MOy5*9q_fd5(s=ZCHHHIg$3L}tB8qyl4x|FZ}Bev5eqHARorJKd{M0P=|J5G{WX zKNsuxp=!HVL%n+7R02RTevn;!@2YVT!e|{8G(5xd1jw%D(lu6H4~lWi-a&k(X*l-~ z*Y{mHojwyIq(+fVoT`Ph=~1K#iEfzLnjJ+H3W3-esG6-sL@3jHYwq8t9KJgLa zI?7g>YGWdyDws>Ji?>3bE;k@cCUkj2Nd8%k%^(h{N~)%0kQZ4E7IIC?m=+3FL8YiM zz(5xjjTJuO&)sjl#xp4*0-rV)jnm`f6}h2fX_^5{f*NI(ib(tfy<>c1M~T)XT(1Gm z3WD(Z@+GM(C`kw0DD7%>drCws5nr zBO`<=@8&-qKzISf5p#7)ZU<943iAX9?3uCqg!u{OsDei3%^~0MvrX$?2Tbu#%3W$P z;5{VwZ>znR!m(kr0YUiM3e_=NL@k5g;_J^i#UIKz6cgmmfX$`Th}m6U4`f#o(T1D> zUZw8%A8Kc7Bf8`SRP#h#Bf90bkOwdGPs~TLnoY!Qo^5H$jcUsH)Ahia14x8B zBkbmZ57rJ9A~(o8Z{0{6Fs!JVN$MJYQ6NCusdIf$1lA2{MH5#$k_#mU}xF%qbsp>zINniIrKl*7!rmFiDpNNQ80Zgk;6YQ%tXpguyZ{}(Yqt9v4Eny*A}Ap+;gu#DwT5+*t=g(jgOfgZepOO37O;5g8A zviMWM!Z<$zot`7|(){+=1Z3>_@mY5u60_M62Mqs%7Fhgv3&r1Sc{BD}w*Wr4woh^} zRk}qF=yUzIfpCnJ@5my%=QUsS1;T(XZxOhp;z?8BQzE=Wv40Ms9~Qj1MxG4>Tqkvg z>CTCP80}3eqr3lsp#OjGXMQ^j_}kwNBETH}|B}Pt

  • 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