From a88308370e855cf1f5fa0036949a1131323e0402 Mon Sep 17 00:00:00 2001 From: Tucker Date: Tue, 18 Jul 2023 09:41:20 -0400 Subject: [PATCH 001/117] Add an initial set of masking utilities. --- examples/occlusion/mask.py | 250 +++++++++++++++++++++++++++++++ examples/occlusion/occlusion.jpg | Bin 0 -> 25665 bytes 2 files changed, 250 insertions(+) create mode 100644 examples/occlusion/mask.py create mode 100644 examples/occlusion/occlusion.jpg diff --git a/examples/occlusion/mask.py b/examples/occlusion/mask.py new file mode 100644 index 0000000000..c304f477cf --- /dev/null +++ b/examples/occlusion/mask.py @@ -0,0 +1,250 @@ +import math +from itertools import islice, cycle +from typing import Dict, List, Tuple, Union + + +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +from shapely.affinity import rotate as shapely_rotate +from shapely.geometry import Point +from shapely.geometry import LineString +from shapely.geometry import Polygon +from shapely.geometry import box as shapely_box + + +def generate_vehicle_polygon(position, length, width, heading) -> Polygon: + """Returns a bounding box around the vehicle.""" + half_len = 0.5 * length + half_width = 0.5 * width + poly = shapely_box( + position[0] - half_width, + position[1] - half_len, + position[0] + half_width, + position[1] + half_len, + ) + return shapely_rotate(poly, heading, use_radians=True) + +def find_point_past_target(center, target_point, distance: float): + direction_vector = np.array((target_point[0] - center[0], target_point[1] - center[1])) + ab_len = math.sqrt(direction_vector[0] ** 2 + direction_vector[1] ** 2) + unit_vector = direction_vector / ab_len + + return np.array((center[0] + unit_vector[0] * distance, center[1] + unit_vector[1] * distance)) + +def perpendicular_slope(slope): + if slope == 0: # Special case for horizontal line + return float('inf') + return -1 / slope + +def get_midpoint(point1, point2): + return (np.array(point1) + np.array(point2)) / 2 + +def is_edge_facing_away(edge_start, edge_end, reference_point): + edge_vector = np.array(edge_end) - np.array(edge_start) + perpendicular_vector = np.array([edge_vector[1], -edge_vector[0]]) + ref_vector = np.array(reference_point) - np.array(edge_end) + + dot_product = np.dot(perpendicular_vector, ref_vector) + + if dot_product > 0: + return True + elif dot_product < 0: + return False + else: + return None # Reference point lies on the edge + + +def generate_shadow_mask_polygons(center, object_geometry: Polygon, radius: float) -> List[Polygon]: + """From a center point cast a mask away from the object + + Args: + center (_type_): The source point of the cast. + object_geometry (_type_): The object to cast the mask from. Assumes counterclockwise coordinates. + radius (float): The distance from the source point to extent of the cast. + + Returns: + List[Polygon]: A series of masks from the sides of the geometry facing away from the center origin. + """ + out_shapes = [] + + for point_a, point_b in zip(object_geometry.exterior.coords, islice(cycle(object_geometry.exterior.coords), 1, 5)): + if is_edge_facing_away(point_a, point_b, center): + continue + midpoint = get_midpoint(point_a, point_b) + mid_a = find_point_past_target(center, midpoint, radius) + tagent_slope = perpendicular_slope(vector_to_slope(np.array((center[0] - mid_a[0], center[1] - mid_a[1])))) + + a_slope = vector_to_slope(np.array((center[0] - point_a[0], center[1] - point_a[1]))) + b_slope = vector_to_slope(np.array((center[0] - point_b[0], center[1] - point_b[1]))) + + a2edge_intersection = find_line_intersection(a_slope, tagent_slope, point1=center, point2=mid_a) + b2edge_intersection = find_line_intersection(b_slope, tagent_slope, point1=center, point2=mid_a) + + + shell = [point_a, point_b, (b2edge_intersection[0], b2edge_intersection[1]), (a2edge_intersection[0], a2edge_intersection[1])] + out_shapes.append(Polygon(shell)) + + return out_shapes + +def generate_circle_polygon(center, radius) -> Polygon: + return Point(*center).buffer(radius) + +def vector_to_slope(direction_vector): + return direction_vector[1] / (direction_vector[0] or 1e-10) + +def find_line_intersection(slope1, slope2, point1, point2): + x1, y1 = point1 + x2, y2 = point2 + + # Calculate the y-intercepts + b1 = y1 - slope1 * x1 + b2 = y2 - slope2 * x2 + + # Check if slopes are parallel (same slope with different intercepts) + if slope1 == slope2 and b1 != b2: + return None # No intersection (parallel lines) + + # Check if slopes are identical (same slope with same intercept) + if slope1 == slope2 and b1 == b2: + return float('inf'), float('inf') # Infinite intersection points + + # Calculate the x-coordinate of the intersection point + x = (b2 - b1) / (slope1 - slope2) + + # Calculate the y-coordinate of the intersection point + y = slope1 * x + b1 + + return x, y + +def gen_circle_mask(center, radius): + circle_area = generate_circle_polygon(center, radius) + return circle_area + +def gen_shadow_masks(center, vehicle_states, radius): + masks: List[Polygon] = [] + for vehicle_state in vehicle_states: + vehicle_shape = generate_vehicle_polygon( + vehicle_state["position"], + *vehicle_state["dimensions"][:2], # length, width + vehicle_state["heading"] + ) + new_masks = generate_shadow_mask_polygons(center, vehicle_shape, radius) + masks.extend(new_masks) + return masks + +def apply_masks(center, vehicle_states, radius) -> List[Dict[str, Union[float, Tuple[float, float]]]]: + # Test that vehicles are within visible range + observation_area = gen_circle_mask(center, radius) + remaining_vehicle_states = [] + for vehicle_state in vehicle_states: + position_point = Point(vehicle_state["position"]) + if not observation_area.contains(position_point): + continue + remaining_vehicle_states.append(vehicle_state) + + # Test that vehicles are not occluded + occlusion_masks = gen_shadow_masks(center, remaining_vehicle_states, radius) + final_vehicle_states = [] + for vehicle_state in vehicle_states: + position_point = Point(vehicle_state["position"]) + # discard any vehicle state that is not included + for shadow_polygon in occlusion_masks: + if shadow_polygon.contains(position_point): + break # state is masked + else: + # if not masked + final_vehicle_states.append(vehicle_state) + return final_vehicle_states + + +_vehicle_states: List[Dict[str, Union[float, Tuple[float, float]]]] = [ + { + "position": (1, 1), + "dimensions": (2, 1), + "heading": math.pi / 4 + }, + { + "position": (-1, -1), + "dimensions": (1.5, 0.8), + "heading": math.pi / 2 + }, + { + "position": (3, 2), + "dimensions": (1.7, 0.9), + "heading": 2 * math.pi / 3 + }, + { + "position": (-2, 3), + "dimensions": (1.3, 0.7), + "heading": 7 * math.pi / 6 + }, + { + "position": (0.5, -2), + "dimensions": (1.8, 0.6), + "heading": 5 * math.pi / 6 + }, + { + "position": (-3, -2.5), + "dimensions": (1.4, 0.7), + "heading": math.pi + }, + { + "position": (2.5, -1), + "dimensions": (1.6, 0.8), + "heading": math.pi / 6 + }, + { + "position": (-2, 1.5), + "dimensions": (1.5, 0.8), + "heading": 3 * math.pi / 4 + }, + { + "position": (4, 3), + "dimensions": (1.7, 0.9), + "heading": math.pi / 3 + }, + { + "position": (-3.5, -3), + "dimensions": (1.3, 0.7), + "heading": math.pi + }, + { + "position": (-3.5, 8), + "dimensions": (1.3, 0.7), + "heading": math.pi + } +] + +if __name__ == "__main__": + _center = np.array((-1, 5)) + _radius = 10 + + center_geom = generate_circle_polygon(_center, 0.1) + x, y = center_geom.exterior.xy + plt.plot(x, y) + + circle_mask = generate_circle_polygon(_center, _radius) + x, y = circle_mask.exterior.xy + plt.plot(x, y) + + # draw vehicle center points + for vs in _vehicle_states: + vehicle_center = generate_circle_polygon(vs["position"], 0.1) + x, y = vehicle_center.exterior.xy + plt.plot(x, y) + + _vehicle_states = apply_masks(_center, _vehicle_states, _radius) + for vs in _vehicle_states: + vehicle = generate_vehicle_polygon(vs["position"], vs["dimensions"][0], vs["dimensions"][1], vs["heading"]) + x, y = vehicle.exterior.xy + plt.plot(x, y) + + masks = generate_shadow_mask_polygons(_center, vehicle, _radius) + for mask in masks: + x, y = mask.exterior.xy + plt.plot(x, y) + + + plt.axis('equal') + plt.savefig('occlusion.jpg') \ No newline at end of file diff --git a/examples/occlusion/occlusion.jpg b/examples/occlusion/occlusion.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6079877421d01e9e1e2ac1bd96c357a5bec2d1a4 GIT binary patch literal 25665 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 literal 0 HcmV?d00001 From 7a7e93e9863ce595d6f322209c368794f014c2aa Mon Sep 17 00:00:00 2001 From: Tucker Date: Tue, 18 Jul 2023 09:41:20 -0400 Subject: [PATCH 002/117] Add an initial set of masking utilities. --- examples/occlusion/mask.py | 250 +++++++++++++++++++++++++++++++ examples/occlusion/occlusion.jpg | Bin 0 -> 25665 bytes 2 files changed, 250 insertions(+) create mode 100644 examples/occlusion/mask.py create mode 100644 examples/occlusion/occlusion.jpg diff --git a/examples/occlusion/mask.py b/examples/occlusion/mask.py new file mode 100644 index 0000000000..c304f477cf --- /dev/null +++ b/examples/occlusion/mask.py @@ -0,0 +1,250 @@ +import math +from itertools import islice, cycle +from typing import Dict, List, Tuple, Union + + +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +from shapely.affinity import rotate as shapely_rotate +from shapely.geometry import Point +from shapely.geometry import LineString +from shapely.geometry import Polygon +from shapely.geometry import box as shapely_box + + +def generate_vehicle_polygon(position, length, width, heading) -> Polygon: + """Returns a bounding box around the vehicle.""" + half_len = 0.5 * length + half_width = 0.5 * width + poly = shapely_box( + position[0] - half_width, + position[1] - half_len, + position[0] + half_width, + position[1] + half_len, + ) + return shapely_rotate(poly, heading, use_radians=True) + +def find_point_past_target(center, target_point, distance: float): + direction_vector = np.array((target_point[0] - center[0], target_point[1] - center[1])) + ab_len = math.sqrt(direction_vector[0] ** 2 + direction_vector[1] ** 2) + unit_vector = direction_vector / ab_len + + return np.array((center[0] + unit_vector[0] * distance, center[1] + unit_vector[1] * distance)) + +def perpendicular_slope(slope): + if slope == 0: # Special case for horizontal line + return float('inf') + return -1 / slope + +def get_midpoint(point1, point2): + return (np.array(point1) + np.array(point2)) / 2 + +def is_edge_facing_away(edge_start, edge_end, reference_point): + edge_vector = np.array(edge_end) - np.array(edge_start) + perpendicular_vector = np.array([edge_vector[1], -edge_vector[0]]) + ref_vector = np.array(reference_point) - np.array(edge_end) + + dot_product = np.dot(perpendicular_vector, ref_vector) + + if dot_product > 0: + return True + elif dot_product < 0: + return False + else: + return None # Reference point lies on the edge + + +def generate_shadow_mask_polygons(center, object_geometry: Polygon, radius: float) -> List[Polygon]: + """From a center point cast a mask away from the object + + Args: + center (_type_): The source point of the cast. + object_geometry (_type_): The object to cast the mask from. Assumes counterclockwise coordinates. + radius (float): The distance from the source point to extent of the cast. + + Returns: + List[Polygon]: A series of masks from the sides of the geometry facing away from the center origin. + """ + out_shapes = [] + + for point_a, point_b in zip(object_geometry.exterior.coords, islice(cycle(object_geometry.exterior.coords), 1, 5)): + if is_edge_facing_away(point_a, point_b, center): + continue + midpoint = get_midpoint(point_a, point_b) + mid_a = find_point_past_target(center, midpoint, radius) + tagent_slope = perpendicular_slope(vector_to_slope(np.array((center[0] - mid_a[0], center[1] - mid_a[1])))) + + a_slope = vector_to_slope(np.array((center[0] - point_a[0], center[1] - point_a[1]))) + b_slope = vector_to_slope(np.array((center[0] - point_b[0], center[1] - point_b[1]))) + + a2edge_intersection = find_line_intersection(a_slope, tagent_slope, point1=center, point2=mid_a) + b2edge_intersection = find_line_intersection(b_slope, tagent_slope, point1=center, point2=mid_a) + + + shell = [point_a, point_b, (b2edge_intersection[0], b2edge_intersection[1]), (a2edge_intersection[0], a2edge_intersection[1])] + out_shapes.append(Polygon(shell)) + + return out_shapes + +def generate_circle_polygon(center, radius) -> Polygon: + return Point(*center).buffer(radius) + +def vector_to_slope(direction_vector): + return direction_vector[1] / (direction_vector[0] or 1e-10) + +def find_line_intersection(slope1, slope2, point1, point2): + x1, y1 = point1 + x2, y2 = point2 + + # Calculate the y-intercepts + b1 = y1 - slope1 * x1 + b2 = y2 - slope2 * x2 + + # Check if slopes are parallel (same slope with different intercepts) + if slope1 == slope2 and b1 != b2: + return None # No intersection (parallel lines) + + # Check if slopes are identical (same slope with same intercept) + if slope1 == slope2 and b1 == b2: + return float('inf'), float('inf') # Infinite intersection points + + # Calculate the x-coordinate of the intersection point + x = (b2 - b1) / (slope1 - slope2) + + # Calculate the y-coordinate of the intersection point + y = slope1 * x + b1 + + return x, y + +def gen_circle_mask(center, radius): + circle_area = generate_circle_polygon(center, radius) + return circle_area + +def gen_shadow_masks(center, vehicle_states, radius): + masks: List[Polygon] = [] + for vehicle_state in vehicle_states: + vehicle_shape = generate_vehicle_polygon( + vehicle_state["position"], + *vehicle_state["dimensions"][:2], # length, width + vehicle_state["heading"] + ) + new_masks = generate_shadow_mask_polygons(center, vehicle_shape, radius) + masks.extend(new_masks) + return masks + +def apply_masks(center, vehicle_states, radius) -> List[Dict[str, Union[float, Tuple[float, float]]]]: + # Test that vehicles are within visible range + observation_area = gen_circle_mask(center, radius) + remaining_vehicle_states = [] + for vehicle_state in vehicle_states: + position_point = Point(vehicle_state["position"]) + if not observation_area.contains(position_point): + continue + remaining_vehicle_states.append(vehicle_state) + + # Test that vehicles are not occluded + occlusion_masks = gen_shadow_masks(center, remaining_vehicle_states, radius) + final_vehicle_states = [] + for vehicle_state in vehicle_states: + position_point = Point(vehicle_state["position"]) + # discard any vehicle state that is not included + for shadow_polygon in occlusion_masks: + if shadow_polygon.contains(position_point): + break # state is masked + else: + # if not masked + final_vehicle_states.append(vehicle_state) + return final_vehicle_states + + +_vehicle_states: List[Dict[str, Union[float, Tuple[float, float]]]] = [ + { + "position": (1, 1), + "dimensions": (2, 1), + "heading": math.pi / 4 + }, + { + "position": (-1, -1), + "dimensions": (1.5, 0.8), + "heading": math.pi / 2 + }, + { + "position": (3, 2), + "dimensions": (1.7, 0.9), + "heading": 2 * math.pi / 3 + }, + { + "position": (-2, 3), + "dimensions": (1.3, 0.7), + "heading": 7 * math.pi / 6 + }, + { + "position": (0.5, -2), + "dimensions": (1.8, 0.6), + "heading": 5 * math.pi / 6 + }, + { + "position": (-3, -2.5), + "dimensions": (1.4, 0.7), + "heading": math.pi + }, + { + "position": (2.5, -1), + "dimensions": (1.6, 0.8), + "heading": math.pi / 6 + }, + { + "position": (-2, 1.5), + "dimensions": (1.5, 0.8), + "heading": 3 * math.pi / 4 + }, + { + "position": (4, 3), + "dimensions": (1.7, 0.9), + "heading": math.pi / 3 + }, + { + "position": (-3.5, -3), + "dimensions": (1.3, 0.7), + "heading": math.pi + }, + { + "position": (-3.5, 8), + "dimensions": (1.3, 0.7), + "heading": math.pi + } +] + +if __name__ == "__main__": + _center = np.array((-1, 5)) + _radius = 10 + + center_geom = generate_circle_polygon(_center, 0.1) + x, y = center_geom.exterior.xy + plt.plot(x, y) + + circle_mask = generate_circle_polygon(_center, _radius) + x, y = circle_mask.exterior.xy + plt.plot(x, y) + + # draw vehicle center points + for vs in _vehicle_states: + vehicle_center = generate_circle_polygon(vs["position"], 0.1) + x, y = vehicle_center.exterior.xy + plt.plot(x, y) + + _vehicle_states = apply_masks(_center, _vehicle_states, _radius) + for vs in _vehicle_states: + vehicle = generate_vehicle_polygon(vs["position"], vs["dimensions"][0], vs["dimensions"][1], vs["heading"]) + x, y = vehicle.exterior.xy + plt.plot(x, y) + + masks = generate_shadow_mask_polygons(_center, vehicle, _radius) + for mask in masks: + x, y = mask.exterior.xy + plt.plot(x, y) + + + plt.axis('equal') + plt.savefig('occlusion.jpg') \ No newline at end of file diff --git a/examples/occlusion/occlusion.jpg b/examples/occlusion/occlusion.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6079877421d01e9e1e2ac1bd96c357a5bec2d1a4 GIT binary patch literal 25665 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 literal 0 HcmV?d00001 From 5ffedbd60004e57bfba3709c8dcb523b92b29cef Mon Sep 17 00:00:00 2001 From: Montgomery Alban Date: Tue, 22 Aug 2023 20:08:08 +0000 Subject: [PATCH 003/117] Push background improvements --- examples/occlusion/occlusion_mk2.jpg | Bin 0 -> 11422 bytes smarts/core/local_traffic_provider.py | 47 ++++++-------- smarts/core/road_map.py | 69 +++++++++++++++++++++ smarts/core/utils/math.py | 8 +++ smarts/sstudio/heightfield.py | 74 +++++++++++++++++++++++ smarts/sstudio/tests/heightfield.binary | Bin 0 -> 65536 bytes smarts/sstudio/tests/test_heightfield.py | 68 +++++++++++++++++++++ 7 files changed, 239 insertions(+), 27 deletions(-) create mode 100644 examples/occlusion/occlusion_mk2.jpg create mode 100644 smarts/sstudio/heightfield.py create mode 100644 smarts/sstudio/tests/heightfield.binary create mode 100644 smarts/sstudio/tests/test_heightfield.py diff --git a/examples/occlusion/occlusion_mk2.jpg b/examples/occlusion/occlusion_mk2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b529f5ef39911ca8f8e4bfdb228283e7a2f0f021 GIT binary patch literal 11422 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 H5y$=)3WE`O literal 0 HcmV?d00001 diff --git a/smarts/core/local_traffic_provider.py b/smarts/core/local_traffic_provider.py index 61bc8a058a..df5f10f764 100644 --- a/smarts/core/local_traffic_provider.py +++ b/smarts/core/local_traffic_provider.py @@ -50,20 +50,17 @@ stopping_time, time_to_cover, ) -from .utils.math import min_angles_difference_signed, radians_to_vec, vec_to_radians +from .utils.math import ( + min_angles_difference_signed, + radians_to_vec, + safe_division, + vec_to_radians, +) from .vehicle import VEHICLE_CONFIGS, VehicleState MAX_IMPATIENCE = 3.0 -def _safe_division(n: float, d: float, default=math.inf): - """This method uses a short circuit form where `and` converts right side to true|false (as 1|0) in which cases are: - True and # == # - False and NaN == False - """ - return d and n / d or default - - class LocalTrafficProvider(TrafficProvider): """A LocalTrafficProvider simulates multiple traffic actors on a generic RoadMap.""" @@ -137,7 +134,7 @@ def _load_traffic_flows(self, traffic_spec: str): f"vehPerHour value is {freq}<=0 vehicles may not be emitted!!!" ) freq = 0 - flow["emit_period"] = _safe_division(3600.0, freq) + flow["emit_period"] = safe_division(3600.0, freq) elif "period" in flow: period = float(flow["period"]) assert period > 0.0 @@ -823,9 +820,9 @@ def _angle_scale(self, to_index: int, theta: float = math.pi / 6) -> float: # we need to correct for not going straight across. # other things being equal, we target ~30 degrees (sin(30)=.5) on average. if abs(self.radius) > 1e5 or self.radius == 0: - return _safe_division(1.0, math.sin(theta), 1e6) + return safe_division(1.0, math.sin(theta), 1e6) # here we correct for the local road curvature (which affects how far we must travel)... - T = _safe_division(self.radius, self.width, 1e6) + T = safe_division(self.radius, self.width, 1e6) # XXX: This cannot be an assertion because it could happen for map related reasons. if abs(T) <= 1.0: logging.debug( @@ -844,7 +841,7 @@ def _angle_scale(self, to_index: int, theta: float = math.pi / 6) -> float: + 0.5 - se * math.cos( - _safe_division(1, (math.tan(theta) * (T - 1)), default=0) + safe_division(1, (math.tan(theta) * (T - 1)), default=0) ) ) ) @@ -855,9 +852,7 @@ def _angle_scale(self, to_index: int, theta: float = math.pi / 6) -> float: se + 0.5 - se - * math.cos( - _safe_division(1, (math.tan(theta) * (T + 1)), default=0) - ) + * math.cos(safe_division(1, (math.tan(theta) * (T + 1)), default=0)) ) ) @@ -1008,7 +1003,7 @@ def _compute_lane_window(self, lane: RoadMap.Lane): rt_ln = RoadMap.Route.RouteLane(lane, self._route_ind) path_len = self._route.distance_from(rt_ln) or lane.length path_len -= my_offset - lane_time_left = _safe_division(path_len, self.speed) + lane_time_left = safe_division(path_len, self.speed) half_len = 0.5 * self._state.dimensions.length front_bumper = my_offset + half_len @@ -1097,7 +1092,7 @@ def _should_cutin(self, lw: _LaneWindow) -> bool: self.speed, self._max_decel ): return False - min_gap = _safe_division( + min_gap = safe_division( self._target_cutin_gap, self._aggressiveness, default=1e5 ) max_gap = self._target_cutin_gap + 2 @@ -1247,7 +1242,7 @@ def _get_radius(lane: RoadMap.Lane) -> float: if l != self._lane and abs(my_radius) < 1e5: l_radius = _get_radius(l) if abs(l_radius) < 1e5: - ratio = _safe_division(l_radius, my_radius, default=0) + ratio = safe_division(l_radius, my_radius, default=0) if ratio < 0: ratio = 1.0 self._lane_speed[l.index] = (ratio * self.speed, ratio * self.acceleration) @@ -1352,10 +1347,10 @@ def predict_crash_in(self, veh_id: str, bumper: int) -> float: final_range = window[-1].dist # the exponent here was determined by trial and error - if range_del < 0 and abs(bearing_del) < _safe_division( + if range_del < 0 and abs(bearing_del) < safe_division( math.pi, final_range**1.4 ): - return _safe_division(-final_range, range_del) + return safe_division(-final_range, range_del) return math.inf def purge_unseen(self, seen: Set[str]): @@ -1755,10 +1750,10 @@ def _compute_acceleration(self, dt: float) -> float: time_cush = max( min( self._target_lane_win.ttc, - _safe_division(self._target_lane_win.gap, speed_denom), + safe_division(self._target_lane_win.gap, speed_denom), self._target_lane_win.time_left, self._lane_win.ttc, - _safe_division(self._lane_win.gap, speed_denom), + safe_division(self._lane_win.gap, speed_denom), 2 * self._lane_win.time_left, ), 1e-13, @@ -1770,16 +1765,14 @@ def _compute_acceleration(self, dt: float) -> float: and time_cush < min_time_cush ): if self.speed > 0: - severity = 4 * _safe_division( - (min_time_cush - time_cush), min_time_cush - ) + severity = 4 * safe_division((min_time_cush - time_cush), min_time_cush) return -emergency_decl * np.clip(severity, 0, 1.0) return 0 space_cush = max(min(self._target_lane_win.gap, self._lane_win.gap), 1e-13) if space_cush < self._min_space_cush - self._min_space_cush * self._impatience: if self.speed > 0: - severity = 4 * _safe_division( + severity = 4 * safe_division( (self._min_space_cush - space_cush), self._min_space_cush ) return -emergency_decl * np.clip(severity, 0, 1.0) diff --git a/smarts/core/road_map.py b/smarts/core/road_map.py index c1e171a2c8..0de1644437 100644 --- a/smarts/core/road_map.py +++ b/smarts/core/road_map.py @@ -36,6 +36,7 @@ from smarts.core.coordinates import BoundingBox, Heading, Point, Pose, RefLinePoint from smarts.core.utils.math import ( fast_quaternion_from_angle, + lerp, min_angles_difference_signed, signed_dist_to_line, vec_to_radians, @@ -860,6 +861,74 @@ def dist_to(self, p) -> float: return np.linalg.norm(self.pos - p[: len(self.pos)]) +def interpolate_waypoints( + first_waypoint: Waypoint, + second_waypoint: Waypoint, + start_relative_offset: float, + interval: float, +) -> Tuple[list[Waypoint], float, float]: + """Generate intermediary waypoints between the given waypoints. + + Args: + first_waypoint (Waypoint): The initial start waypoint. + second_waypoint (Waypoint): The initial end waypoint. + start_relative_offset (float): The starting offset to generate the first waypoint. + interval (float): The interval to generate the waypoints at. + + Returns: + list[Waypoint], float: The resulting waypoints and the used offset + """ + assert interval > 0, f"Instead got {interval =}" + assert start_relative_offset >= 0, f"Instead got {start_relative_offset =}" + base_waypoint_offset_delta = abs( + second_waypoint.lane_offset - first_waypoint.lane_offset + ) + accumulated_relative_offset = 0 + out_waypoints: List[Waypoint] = [] + normalize_factor = 1 / base_waypoint_offset_delta + while ( + accumulated_relative_offset + start_relative_offset + <= base_waypoint_offset_delta + ): + normalized_relative_offset = ( + accumulated_relative_offset + start_relative_offset + ) * normalize_factor + out_waypoints.append( + Waypoint( + pos=lerp( + first_waypoint.pos, second_waypoint.pos, normalized_relative_offset + ), + heading=Heading( + lerp( + first_waypoint.heading, + second_waypoint.heading, + normalized_relative_offset, + ) + ), + lane_id=first_waypoint.lane_id, + lane_width=lerp( + first_waypoint.lane_width, + second_waypoint.lane_width, + normalized_relative_offset, + ), + speed_limit=lerp( + first_waypoint.lane_width, + second_waypoint.lane_width, + normalized_relative_offset, + ), + lane_index=first_waypoint.lane_index, + lane_offset=lerp( + first_waypoint.lane_offset, + second_waypoint.lane_offset, + normalized_relative_offset, + ), + ) + ) + accumulated_relative_offset += interval + used = base_waypoint_offset_delta + return out_waypoints, used + + class RoadMapWithCaches(RoadMap): """Base class for map implementations that wish to include a built-in SegmentCache and other LRU caches.""" diff --git a/smarts/core/utils/math.py b/smarts/core/utils/math.py index b6abc3affb..0631989acd 100644 --- a/smarts/core/utils/math.py +++ b/smarts/core/utils/math.py @@ -220,6 +220,14 @@ def lerp(a, b, p): return a * (1.0 - p) + b * p +def safe_division(n: float, d: float, default=math.inf): + """This method uses a short circuit form where `and` converts right side to true|false (as 1|0) in which cases are: + True and # == # + False and NaN == False + """ + return d and n / d or default + + def low_pass_filter( input_value, previous_filter_state, diff --git a/smarts/sstudio/heightfield.py b/smarts/sstudio/heightfield.py new file mode 100644 index 0000000000..b4a2493d35 --- /dev/null +++ b/smarts/sstudio/heightfield.py @@ -0,0 +1,74 @@ +# MIT License +# +# Copyright (C) 2023. Huawei Technologies Co., Ltd. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +from abc import ABC +from typing import Tuple + +import numpy as np + + +class HeightField(ABC): + def __init__(self, data: np.ndarray, size: Tuple[int, int]) -> None: + print(data.shape) + print(data.dtype == np.uint8, data.dtype) + assert data.dtype == np.uint8 and ( + len(data.shape) == 2 or (len(data.shape) == 3 and data.shape[-1] == 1) + ), f"Image is not greyscale format." + if len(data.shape) == 3: + data = np.squeeze(data, axis=2) + self._data = data + self._size = size + self._resolution = data.shape + + @property + def data(self): + return self._data + + @property + def size(self): + return self._size + + @property + def resolution(self): + return self._resolution + + def apply_kernel(self, kernel: np.ndarray, output_dtype=np.uint8): + # kernel can be asymmetric but still needs to be odd + k_height, k_width = kernel.shape + m_height, m_width = self.data.shape + k_size = max(k_height, k_width) + padded = np.pad(self.data, (int(k_size / 2), int(k_size / 2))) + + if k_size > 1: + if k_height == 1: + padded = padded[1:-1, :] + elif k_width == 1: + padded = padded[:, 1:-1] + + # iterates through matrix, applies kernel, and sums + output = [] + for i in range(m_height): + for j in range(m_width): + between = padded[i : k_height + i, j : k_width + j] * kernel + output.append(np.sum(between)) + + output = np.array(output, dtype=output_dtype).reshape((m_height, m_width)) + return HeightField(output, self.size) diff --git a/smarts/sstudio/tests/heightfield.binary b/smarts/sstudio/tests/heightfield.binary new file mode 100644 index 0000000000000000000000000000000000000000..de70c0d0925ad4fbe62de6408ef440dba4ec4f68 GIT binary patch literal 65536 zcmeI5(RLd*3`G6^KkYhpEK39-43>LG+{S&02!S*AZe*n=edycU&p+=A|NNv}^wom< z*VT)9e_=1%{|UJ66F5cxvQOYF`#(7s{0y9_f4wJgvi+a9D}4q4{YyOp$p12*0m}a> z4*>JO$OGW~ukipt|4aNqfcjtHBf$Fa{}G`5cmD|B{+oXU4E|ex1RVZ5KLCsW#y6_8)~iJ%C^T7d(NDJ^(MU-|7e8CH@kcL84DH#aw`XtOy*JB! z!R(G`@-hXQ>~=?Kw)Kr?)K5X4U6kH?nr?gZ32Mdg*Ol|^iY0CQ3r?G&b%~&9?Kq6A2cyRr z`FybNv}*(C;oKodKOSy8=i(#iLgr(Tep;wJmO5$UZd|IhI;qC+HQr<(7epu>U zzkCn6n06o4c)i%Vc>NA^F-iT4zq`iIm#ejF_wQ)dfg*1z1p z1D*T3|M8pE`F+3b!oSJR_?uJbg%gnOs=ec9gl2N)2mh!WSDb)!SFjTXG?O!5&NC&eY^Z(54JRGnHQLo@p2^uz`;Hqv!V7KH=J~Q*JxLt zc_wE=?K^Hb>G-bEu0Hcj&W74|+;GzIU87xn=9!EQwQkrj((zTnt{m`8&W2JqEI8@- zuAo;AcqV5xK;{9^Mt~>H*H=EU0zE zh7*tO3Uc*;MzZGDx?#i0N0$Y=dO#yN^K09<;pC&cqFp_qnVk8xZQOA3!Cg_Vp1?@f z_}VsZSOM9xC?`xtxMI z$#qS{#1Y42Ocq@yYeq<}YT~7iI4EDT>N?r;L2^wKEqTOI`I2SXxafoAnxd6H;izoM zx@_FEL2^Y=sxjfPT*(dDxaxugd!kfh0&7&( z2}ov%Zpp@F3nN()m0A-L&5_-bjmr*1vLhPxCM267yC)mB4Txk#6zWY#HbeGYR`~xs z{Jm&EBrE3njVTGoXE#LWt2`pwFqhJ&C>$TIi_SNBLbPEnrB6{fK3o?~HhDy{A(7I@ zBpjcudnTJaBH55g>0=Vkkgba*n+8U(B9YR^Ae$jt_e?eoj9^6~rH?^2L$vOhY#JEB zibSe02I2VVhG(+MGm;I7ls+cm_-x%X+2j$)hD1sqlW=^t?wM`!j9^11rO!b)K3dnz zHhD&{A(Lv%K{`CTp_#4XjATJ3rO!z^JX_byHgQCqSP7F zh-7}^`LF!J|Er%o0ewt&d2|_{`{d_`ENTDqt+Py z`6T08p4l=9$Yy6otvQQGrnfY+WfG9h&Wu`f7LiPEX=ckLAe)^TwdO1$ncmXOmPtT3 zJ5y@SVMa2(<(Vv#d~|lA)EU!=Xnsd@zKi1F;d7_P6ena08m7}#mX1%KO6fx$5N^;_ zXPYpbA%12h&kTHYh3q<6q}d$#6D@V*z{5LK*|>+JSqh?;II+<2C8BLu Date: Thu, 24 Aug 2023 15:53:02 +0000 Subject: [PATCH 004/117] Demonstrate more of observation conversion --- smarts/p3d/renderer.py | 30 ++++++++---- smarts/sstudio/heightfield.py | 21 +++++++-- smarts/sstudio/mesh2bitmap.py | 57 +++++++++++++++++++++++ smarts/sstudio/tests/curb.bmp | Bin 0 -> 56538 bytes smarts/sstudio/tests/map_convolution.bmp | Bin 0 -> 56538 bytes smarts/sstudio/tests/map_drivable.bmp | Bin 0 -> 56538 bytes 6 files changed, 94 insertions(+), 14 deletions(-) create mode 100644 smarts/sstudio/mesh2bitmap.py create mode 100644 smarts/sstudio/tests/curb.bmp create mode 100644 smarts/sstudio/tests/map_convolution.bmp create mode 100644 smarts/sstudio/tests/map_drivable.bmp diff --git a/smarts/p3d/renderer.py b/smarts/p3d/renderer.py index bc52a05e30..f740b18960 100644 --- a/smarts/p3d/renderer.py +++ b/smarts/p3d/renderer.py @@ -348,17 +348,14 @@ def _load_line_data(self, path: Path, name: str) -> GeomNode: np = GeomNode(name) np.addGeom(geom) return np - - def setup(self, scenario: Scenario): - """Initialize this renderer.""" - self._root_np = self._showbase_instance.setup_sim_root(self._simid) - self._vehicles_np = self._root_np.attachNewNode("vehicles") - self._signals_np = self._root_np.attachNewNode("signals") - - map_path = scenario.map_glb_filepath - map_dir = Path(map_path).parent - + + def _ensure_root(self): + if self._root_np is None: + self._root_np = self._showbase_instance.setup_sim_root(self._simid) + + def load_road_map(self, map_path): # Load map + self._ensure_root() if self._road_map_np: self._log.debug( "road_map=%s already exists. Removing and adding a new " @@ -372,6 +369,19 @@ def setup(self, scenario: Scenario): np.hide(RenderMasks.OCCUPANCY_HIDE) np.setColor(SceneColors.Road.value) self._road_map_np = np + return map_np.getBounds() + + def setup(self, scenario: Scenario): + """Initialize this renderer.""" + self._ensure_root() + self._vehicles_np = self._root_np.attachNewNode("vehicles") + self._signals_np = self._root_np.attachNewNode("signals") + + map_path = scenario.map_glb_filepath + map_dir = Path(map_path).parent + + # Load map + self.load_road_map(map_path) # Road lines (solid, yellow) road_lines_path = map_dir / "road_lines.glb" diff --git a/smarts/sstudio/heightfield.py b/smarts/sstudio/heightfield.py index b4a2493d35..8c778e4bfa 100644 --- a/smarts/sstudio/heightfield.py +++ b/smarts/sstudio/heightfield.py @@ -27,8 +27,6 @@ class HeightField(ABC): def __init__(self, data: np.ndarray, size: Tuple[int, int]) -> None: - print(data.shape) - print(data.dtype == np.uint8, data.dtype) assert data.dtype == np.uint8 and ( len(data.shape) == 2 or (len(data.shape) == 3 and data.shape[-1] == 1) ), f"Image is not greyscale format." @@ -50,7 +48,7 @@ def size(self): def resolution(self): return self._resolution - def apply_kernel(self, kernel: np.ndarray, output_dtype=np.uint8): + def apply_kernel(self, kernel: np.ndarray, output_dtype=np.uint8, min_val=-np.inf, max_val=np.inf)): # kernel can be asymmetric but still needs to be odd k_height, k_width = kernel.shape m_height, m_width = self.data.shape @@ -68,7 +66,22 @@ def apply_kernel(self, kernel: np.ndarray, output_dtype=np.uint8): for i in range(m_height): for j in range(m_width): between = padded[i : k_height + i, j : k_width + j] * kernel - output.append(np.sum(between)) + output.append(min(max(np.sum(between), min_val), max_val)) output = np.array(output, dtype=output_dtype).reshape((m_height, m_width)) return HeightField(output, self.size) + + def write_image(self, file): + from PIL import Image + a = self.data.astype(np.uint8) + im = Image.fromarray(a, "L") + im.save(file) + + @classmethod + def load_image(cls, file): + from PIL import Image + with Image.open(file) as im: + data = np.asarray(im) + assert len(data.shape) == 2 + return cls(data, data.shape[:2]) + diff --git a/smarts/sstudio/mesh2bitmap.py b/smarts/sstudio/mesh2bitmap.py new file mode 100644 index 0000000000..ac2bcb6b36 --- /dev/null +++ b/smarts/sstudio/mesh2bitmap.py @@ -0,0 +1,57 @@ +# Copyright (C) 2020. Huawei Technologies Co., Ltd. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +import argparse + +import numpy as np +from smarts.core.coordinates import Dimensions, Pose + +from smarts.core.sumo_road_network import SumoRoadNetwork +from smarts.core.vehicle_state import VehicleState +from smarts.p3d.renderer import Renderer +from smarts.core.sensor import DrivableAreaGridMapSensor + + +def generate_bitmap_from_glb_file(glb_file: str, out_bitmap_dir: str, padding: int): + """Creates a geometry file from a sumo map file.""" + renderer = Renderer("r") + bounds = renderer.load_road_map(glb_file) + size = (*(bounds.max - bounds.min),) + vs = VehicleState("a", pose=Pose(np.array((*bounds.center,)), np.array([0, 0, 0, 1])), dimensions=Dimensions(1, 1, 1)) + camera = DrivableAreaGridMapSensor(vehicle_state=vs, width=int(size[0]) + padding, height=int(size[1]) + padding, resolution=1, renderer=renderer) + renderer.render() + image = camera(renderer) + + from PIL import Image + im = Image.fromarray(image.data.squeeze(), "L") + im.save(out_bitmap_dir) + im.close() + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + "mesh2bitmap.py", + description="Utility to export mesh files to bitmap.", + ) + parser.add_argument("mesh", help="mesh file (*.glb)", type=str) + parser.add_argument("output_path", help="where to write the bitmap file", type=str) + parser.add_argument("--padding", help="the padding pixels", type=int, default=10) + args = parser.parse_args() + + generate_bitmap_from_glb_file(args.mesh, args.output_path, padding=args.padding) diff --git a/smarts/sstudio/tests/curb.bmp b/smarts/sstudio/tests/curb.bmp new file mode 100644 index 0000000000000000000000000000000000000000..f541c728ea05bb7762a632ba2bf8d82c016e7398 GIT binary patch literal 56538 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 D3>yug literal 0 HcmV?d00001 From 6b9af721823a399408c45b05f680cc72aa108352 Mon Sep 17 00:00:00 2001 From: Montgomery Alban Date: Thu, 24 Aug 2023 16:02:24 +0000 Subject: [PATCH 005/117] Fix heightfield.py --- smarts/sstudio/heightfield.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smarts/sstudio/heightfield.py b/smarts/sstudio/heightfield.py index 8c778e4bfa..520b96ad10 100644 --- a/smarts/sstudio/heightfield.py +++ b/smarts/sstudio/heightfield.py @@ -48,7 +48,7 @@ def size(self): def resolution(self): return self._resolution - def apply_kernel(self, kernel: np.ndarray, output_dtype=np.uint8, min_val=-np.inf, max_val=np.inf)): + def apply_kernel(self, kernel: np.ndarray, output_dtype=np.uint8, min_val=-np.inf, max_val=np.inf): # kernel can be asymmetric but still needs to be odd k_height, k_width = kernel.shape m_height, m_width = self.data.shape From 1c444dd61c6741fe4a0440f241aafc8dc2491d4a Mon Sep 17 00:00:00 2001 From: Montgomery Alban Date: Fri, 25 Aug 2023 15:52:23 +0000 Subject: [PATCH 006/117] Improve performance of kernel --- smarts/sstudio/heightfield.py | 38 +++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/smarts/sstudio/heightfield.py b/smarts/sstudio/heightfield.py index 520b96ad10..f927fc24a0 100644 --- a/smarts/sstudio/heightfield.py +++ b/smarts/sstudio/heightfield.py @@ -20,7 +20,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. from abc import ABC -from typing import Tuple +from typing import Callable, Tuple import numpy as np @@ -48,8 +48,11 @@ def size(self): def resolution(self): return self._resolution - def apply_kernel(self, kernel: np.ndarray, output_dtype=np.uint8, min_val=-np.inf, max_val=np.inf): + def apply_kernel(self, kernel: np.ndarray, min_val=-np.inf, max_val=np.inf): # kernel can be asymmetric but still needs to be odd + assert len(kernel.shape) == 2 and np.all( + [k % 2 for k in kernel.shape] + ), "Kernel shape must be 2D and shape dimension values must be odd" k_height, k_width = kernel.shape m_height, m_width = self.data.shape k_size = max(k_height, k_width) @@ -61,27 +64,40 @@ def apply_kernel(self, kernel: np.ndarray, output_dtype=np.uint8, min_val=-np.in elif k_width == 1: padded = padded[:, 1:-1] - # iterates through matrix, applies kernel, and sums - output = [] - for i in range(m_height): - for j in range(m_width): - between = padded[i : k_height + i, j : k_width + j] * kernel - output.append(min(max(np.sum(between), min_val), max_val)) + # iterate through matrix, apply kernel, and sum + output = np.empty_like(self.data) + for v in range(m_height): + for u in range(m_width): + between = padded[v : k_height + v, u : k_width + u] * kernel + output[v][u] = min(max(np.sum(between), min_val), max_val) + + return HeightField(output, self.size) + + def apply_function( + self, + fn: Callable[[np.ndarray, int, int], np.uint8], + min_val=-np.inf, + max_val=np.inf, + ): + output = np.empty_like(self.data) + for i in range(self.data.shape[0]): + for j in range(self.data.shape[1]): + output[i][j] = min(max(fn(self.data, i, j), min_val), max_val) - output = np.array(output, dtype=output_dtype).reshape((m_height, m_width)) return HeightField(output, self.size) def write_image(self, file): from PIL import Image + a = self.data.astype(np.uint8) im = Image.fromarray(a, "L") im.save(file) - + @classmethod def load_image(cls, file): from PIL import Image + with Image.open(file) as im: data = np.asarray(im) assert len(data.shape) == 2 return cls(data, data.shape[:2]) - From f65f7d2bcbbab3d3f7482bea1491bae0f48595d5 Mon Sep 17 00:00:00 2001 From: Montgomery Alban Date: Fri, 25 Aug 2023 15:53:01 +0000 Subject: [PATCH 007/117] Format --- smarts/p3d/renderer.py | 4 ++-- smarts/sstudio/mesh2bitmap.py | 24 +++++++++++++++++------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/smarts/p3d/renderer.py b/smarts/p3d/renderer.py index f740b18960..afdd802704 100644 --- a/smarts/p3d/renderer.py +++ b/smarts/p3d/renderer.py @@ -348,11 +348,11 @@ def _load_line_data(self, path: Path, name: str) -> GeomNode: np = GeomNode(name) np.addGeom(geom) return np - + def _ensure_root(self): if self._root_np is None: self._root_np = self._showbase_instance.setup_sim_root(self._simid) - + def load_road_map(self, map_path): # Load map self._ensure_root() diff --git a/smarts/sstudio/mesh2bitmap.py b/smarts/sstudio/mesh2bitmap.py index ac2bcb6b36..6b0dc74ed3 100644 --- a/smarts/sstudio/mesh2bitmap.py +++ b/smarts/sstudio/mesh2bitmap.py @@ -20,27 +20,37 @@ import argparse import numpy as np -from smarts.core.coordinates import Dimensions, Pose -from smarts.core.sumo_road_network import SumoRoadNetwork +from smarts.core.coordinates import Dimensions, Pose +from smarts.core.sensor import DrivableAreaGridMapSensor from smarts.core.vehicle_state import VehicleState from smarts.p3d.renderer import Renderer -from smarts.core.sensor import DrivableAreaGridMapSensor -def generate_bitmap_from_glb_file(glb_file: str, out_bitmap_dir: str, padding: int): +def generate_bitmap_from_glb_file(glb_file: str, out_bitmap_file: str, padding: int): """Creates a geometry file from a sumo map file.""" renderer = Renderer("r") bounds = renderer.load_road_map(glb_file) size = (*(bounds.max - bounds.min),) - vs = VehicleState("a", pose=Pose(np.array((*bounds.center,)), np.array([0, 0, 0, 1])), dimensions=Dimensions(1, 1, 1)) - camera = DrivableAreaGridMapSensor(vehicle_state=vs, width=int(size[0]) + padding, height=int(size[1]) + padding, resolution=1, renderer=renderer) + vs = VehicleState( + "a", + pose=Pose(np.array((*bounds.center,)), np.array([0, 0, 0, 1])), + dimensions=Dimensions(1, 1, 1), + ) + camera = DrivableAreaGridMapSensor( + vehicle_state=vs, + width=int(size[0]) + padding, + height=int(size[1]) + padding, + resolution=1, + renderer=renderer, + ) renderer.render() image = camera(renderer) from PIL import Image + im = Image.fromarray(image.data.squeeze(), "L") - im.save(out_bitmap_dir) + im.save(out_bitmap_file) im.close() From dae00d0e95a9622e4a52796453def9eb671b83cb Mon Sep 17 00:00:00 2001 From: Montgomery Alban Date: Fri, 25 Aug 2023 15:53:18 +0000 Subject: [PATCH 008/117] Add edge generation file. --- smarts/sstudio/bitmap2edge.py | 58 +++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 smarts/sstudio/bitmap2edge.py diff --git a/smarts/sstudio/bitmap2edge.py b/smarts/sstudio/bitmap2edge.py new file mode 100644 index 0000000000..e1a251255b --- /dev/null +++ b/smarts/sstudio/bitmap2edge.py @@ -0,0 +1,58 @@ +# Copyright (C) 2020. Huawei Technologies Co., Ltd. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +import argparse + +import numpy as np + +from smarts.sstudio.heightfield import HeightField + + +def generate_edge_bitmap_from_bitmap(bitmap_file, out_edge_bitmap_file): + hf = HeightField.load_image(bitmap_file) + bhf = hf.apply_kernel( + kernel=np.array( + [ + [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 0.5, 0.0, 0.5, 1.0, 1.0], + [1.0, 0.0, -1.0, -1.0, -1.0, 0.0, 1.0], + [0.5, 0.0, -1.0, -256, -1.0, 0.0, 0.5], + [1.0, 0.0, -1.0, -1.0, -1.0, 0.0, 1.0], + [1.0, 0.5, 0.5, 0.0, 0.5, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], + ] + ), + min_val=0, + max_val=255, + ) + bhf.write_image(out_edge_bitmap_file) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + "bitmap2edge.py", + description="Utility to convert a bitmap to an edge bitmap.", + ) + parser.add_argument("bitmap", help="bitmap file (*.bmp)", type=str) + parser.add_argument( + "output_path", help="where to write the edge bitmap file", type=str + ) + args = parser.parse_args() + + generate_edge_bitmap_from_bitmap(args.bitmap, args.output_path) From ce31381be1457b490f186b5d85825ba15f2d4fbd Mon Sep 17 00:00:00 2001 From: Montgomery Alban Date: Fri, 25 Aug 2023 16:04:25 +0000 Subject: [PATCH 009/117] Show minicity. --- smarts/sstudio/tests/minicity.bmp | Bin 0 -> 2753358 bytes smarts/sstudio/tests/minicity.edge.bmp | Bin 0 -> 2753358 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 smarts/sstudio/tests/minicity.bmp create mode 100644 smarts/sstudio/tests/minicity.edge.bmp diff --git a/smarts/sstudio/tests/minicity.bmp b/smarts/sstudio/tests/minicity.bmp new file mode 100644 index 0000000000000000000000000000000000000000..afa374ab05c358a9a291c109c66eefb8ecf4150b GIT binary patch literal 2753358 zcmeGF1=u!A)2@YmWD_*FOM=7RxCcmrY#{i?U4u)21P$&E!QI_m5?n)qli+~_4Xz20 zK!Bf~>8h!!p4RD}neO|(<~aVhyQ@pCI%j(3eV(<}_y5RWX>nC&9PwuXt z!d*Y5yM8Kn{nYOIY25YGy6b=JuK$Ut}M;&+M+B#a%zEyM8uz z{cv~v2zUML?)o|0^>e!G=W^H2?XI84T|ck8em-~o{Olbp@FYK=Wsk?p= zcm1O7`o-M!KXcdr++F_*cm3k-`X$`;OS8@YPUB9-wejRuHy6*b*-1Y0b z>o;)MZ|JVy$X&m&yM7aQ{ig2v&D{0Ba@TL}uHV94zool=D|h|Y?)q)q_1n7Zw{zET z@2=m$UH@x${f_SXo!s?1yX$}BuK%sOeiwKBuI~EX-1WP=>-TWi@9D1pox6T7cm3Y( z`hDE>`?~A*bJy?hu0OzCf1tbmAb0)2?)pRA^@qCa4|CTa?yf(=U4Nvz{wR0-(eCyLBS|K44Hyu1Dccm0X(`jg!CC%fxUao3;fu0PFPf4aN=40rvR?)tOb^=G^5 z&vDnE>#je~U4Op2{sMRXh3@)`-1Qf`>o0NFU+S*E%w2!EyZ#Dy{gv+etK9WhyX&uU z*I(tAu#|HEDX zPj~&R?)ul<^{>0@-*DHz>8^jvUH>n4{oC&Pcii>wy6fL_*T3(s|G-`Up}YPgcm2oi z`cK^TpStTmbJzddUH>0<{parbFWmKCy6gYzuK%CA{wsI=*Y5iNyX(Jk*MIA-|IS@M z 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 zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAn>~c{tw4p B8>0XK literal 0 HcmV?d00001 From b0d920d848571c8d34e131911adc265f55d524bd Mon Sep 17 00:00:00 2001 From: Montgomery Alban Date: Mon, 28 Aug 2023 15:25:04 +0000 Subject: [PATCH 010/117] Update bitmap --- smarts/sstudio/tests/minicity.bmp | Bin 2753358 -> 2687398 bytes smarts/sstudio/tests/minicity.edge.bmp | Bin 2753358 -> 2687398 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/smarts/sstudio/tests/minicity.bmp b/smarts/sstudio/tests/minicity.bmp index afa374ab05c358a9a291c109c66eefb8ecf4150b..6d39ccfd3961e8debe58bfc904330e29feb7917b 100644 GIT binary patch literal 2687398 zcmeGF1=u!C)8~b~8({Ip9fF6&eFGr@vJjjEhv2%n#|a)hxI4jJgS)%CLy&|JBq6vg zJ=0ZPRXwfKJu^M$`JdzX?y0UW`PXmkxvuAa-tR~Ls(=0u`8j{E9Y5m7{J{@?xI6!- zAL{?_hy38j+5NxEfBVCK@b~<%AMF44gCF8t+y8ARcl;0B@ng8-$8^V!<&Gcfjvw0{ zKaM+oTzC9G>9lwA(enEHqLhks5-SLaK;}>BROSt2I>W=@JJAO%b{8H}trQPvAcgK%($1mfKU)CM}3wQi-?)c^1@hiCFS9Hg( zuXcj$hp!zlJ-0O?UiS?)bIc@$0zb*LBCQ=Z^oiJAQq4 z{08p$4c+k@x#Kr>$8X|}-_#wynLB=Scl;La_$}S>Te;&$x#PEX$8Y0~-_{+!ojZPe zcl-|S_#NHxJGtX`cE|7Hj^EWCzneRLcX#}6-0{D4$N$b9|9f}*AKdYObjSb69lwV= z{?G3CJ>Btpx#RbC$M55g-`5?#pF4hkcl=-6@dvo$4|K;Les9e;>B{!n-PVea_9 zy5kRb#~0}~m$>6Eb;n=k zj=$U;e}y~#N_YHK?)a+q?cl;gh_&eS4ce&&5cE{i2j=$F(f1f-4es}x>?)V4Y@ejGFa>u{tj{mni{(X1+f86mOxZ^)`$A9FG z|JWV>Uw8cf-0`2dp0`i@?qZ@jF00@8p2z(g<`OM(QnJ>Ha7#9RU00eF!fbYyL zn9&3TKmY{3l>k07-+JXSHwb_L2;4&e-|1XF z%nbq{00I{hz<1_CxF`(*AOHd&@B{sw!4EXJAwU2GKmY_L6EL5dAB_*qWV|Q`0w4ea zUr!+V&bZ~*BLM&q009sHfr$i;-x+*rCgMdY5C8!X_;v!x&&=lhb}*P91V8`;Kwt`i z>~{vAnkjry1Oz|;1iqX==`*wKeK{VC4+0h?2kSVX2XImf-1V8`;K;VlBWIrRap{y?kh0#F(1V8`; z&JZYmL)502XSyH<1V8`;K;T;m)V?3GudQ#Tg}Ffh1V8`;dI`waBcCZTV&$W;0|Fob z0w4eafq;BC%Kx2=iX$_WfB^y^00JNY0$Bp;`;m>I4HdeZwRr4<00@8p2!Me4cC^4y z;pT5ax8x!Q1V8`;K;R1rs1HZu^peq-fG`jM0T2LzFD4*gjq<;qF^DM1_^<#05C8!X z0D%Mn|H;_@|28LfGcJ5*GGO2a0T2KI5Qqry7sH*SozjxCN-@|20T2KI5CDN6>_5l2 zPt5k==)mE>GaU&C1pyEM0TB370`$c=^O@=SFnuXqj12-H00JQ3zcbsP9V{rRBLkrz z00JNY0^do%e=)XSoAu03Sv@I;1pyEM0TB2~0;j$+KB?==^p$WiGzfqI2!H_nHGu8I z(E$VBnGRS81pyEMf$t`;e=_iEv+uqMFg*x>00>-1fPON;k2BXHMr9BH0TB3V0^vK; zLxGZdQV1VG?Y z0`@D@_45p+UMdg8K>!3m00iDmApXqsd}w^`yXS{`5C8!X0D&tB9KSLhzc<5=Ggn?3 z)CK_%0D(^+koe5tJM#$_7BheV2!Oy61X5oa{Mu}ZO9K%g00JQJ2?XYRW;%ZU`2=W~ z0R%t*1VEsXK>91w|Kkk4GmXFz1_B@e0^da-_nGPVZ1@u2g$>h!00@8p2s9DMeq}m- zo}n5|{SX8KAOHd&@Kpo~pBcB+hyvf4Mo0w4ea zH3ChanLVgjsrh?Utb$Dt009sHflnjQ{+aQSx%u&($&rB{1V8`;zM4SqXD0Wt!Dr^H zZzBv30w4ea83O0NGO2G$%9m*hHwb_L2!O!X5E%N-=)Z}^g}#Oy1_c2S009taA;6!9 z^XI*bq_;Fh%*_N^|7QBlvd|6$K;Rn)$oFBA^$pP8H{*73-=`XiK>!3kfxx7Xiz@R8 zR6cJ8xd7$yP%5Lljo`aqa};5GiP#quM6qd;{9zj1ub3<4nVAOZFMN&i|!2Q=Cb zj)T@20&?jx0dRu=2!Oyv1myi=ews1ebWEFV(y>^8fLyl)#6SWFfWS8qkk?QCGebOd zXoLMt6xW|sF4+27p%4T>;G+o0>!OlYmUPnM)Kk0ut zlNw0n)Xh`@`0ghlSL*)W=m-KJ@XZ9|?bH65*?FnNs`<@;SD9Td(khCe0|Y?eI|#_z zr|q|9hKf$E*(MQ-`w7Sey1zF%f&d77GXZ(~bpAL)&{Tfi{ASRP&n}neaVZc00wC~B z1mxv&?lZHqQbnrfH^E(MR=F}u$$}UV0D(^@ATOU2zctfvbfKE9^I+daK(5MN9nl8_ zKmY_B0eSfh{5ZoTRk51MDLCIoKrYE`Ezt-BKmY{her7hF@-nMhz<(v|@4w&es!=OL2WKbN~Sm00AZ-@1BXDnXR}gTrpV+&KDDq>!2D< zzU-czKmd$~&keVPM zwDo4%t0Q2800@A<00DW)-1eE-)T*{+b6_;2#smbl-bs6P1Z)rh0T4J(K;AL8{}&Xx zb009sVidp2x8Ja}vD%+<=|Hec?si#kSbp&h>009s< zO+a2T>-;!F!zgJL^Yrvzmnb0h=xMKxfDHm500L(T$Qx#@A7^MDEw5sqCGb^w!qAMJ zahn({KmY_l;1mIQ!7TZi*=EubEA}Y_UzH>P_1I~zj(`mUAOHeq3CJ5}+3$=SO{=Wf zXF+^Pp3u_+r@cA?HVA+K2%IG#ZjvF@?AOHd&FoA%) zcozT8xLK9fnmK{YN0tz7dc3q(N5BRF5CDPG1YY)v5xG_CG?GtF6l!|Pv{y&K1_2NN zfzt%u_lgn4RqHgBPfZkJX2Oiy#9#peAOHd<34~Y7$^1vsg6O*Oh`wc;3NI}&?bQ*m zK>!3mV1NL>WClt+k;<|g&QHi&w5QP00@Gd{0UHEB00agI@JnW(#51WZyyg6i!sWUO zDkCl9HZfR$00@Awq>0GC+aMGI6UL64&1V8`;MhMVbW~9VJx$=JOupZL7L|egR6x2op1J#%*G-s1jKJf3~SQ0s=tb zA_DZ1xv2W3WpmQyy;-p?RkvVq!C}N@+$IK#DuE4SH3$J9@RbDUCG*DFz4WAVnyP+E zW`C+vaOersUL66ug#dAE2}KMDd>H}%bi8rs%5yER&x-ZN*-vQ}4kkV0HZfS#33!h6 zI7EQJ*AbwX%p2#fOP4oj&3fbf-I@i0NzJ%T3>H-ags~cj01)^-0xy0#y!6T?lb2}C zsucQwZ6TnCNqcn!>=pvVu_Y8SAn;`b{L}Hqp_`v;d6CwvH)3elEYq8ujN8OuQ77Oz z*5eQX0$)dfUNUc-yFI3r!&sWs~ZFTIRxhRe833>I|)o?|@@ z5g_n&1n4F6#<|Z*m-lMLdLxvQW*OH+W!xqPiz)%aSdBvf2z(y_|8%@^?g8oYYOPqW z1d|c1M%5AG)?V1X1c+mA8sb6V^9j88;TV%HZ`Z2zDR+SkY9`9KO$-)w0-j?%4iO;m zbp+@o^TxTyrOO+(X1$TmL9+~LwlZ!LgGH49VXVd>00h2|fPXq(IrkLl@{+AtuVkb} z%YfSZgN)n6U{NPP9P5FI0D*5K@ZyJKnsj;5)~t8m9WtGnBjYwPSkws+$9fT`t$hb`m7F7a-u^NW}5coa<{^@w-+>@ot>$YmW5?A*3V>0eL z=UPNHVO&HFWPrdz1YZ1bTp(TExK(SRYuGA9W-=M##{Y*d1EzD~Id&!?90b0B0KH`1 zIO;Xh)myh_z73kpW0YsyCI*Wt0m4{~LjVYT9|8Y#ymIc#q|1x9ZoP<{3}ZzHzjb5P zM}RQ)B_SFFzJb7tAC7CKhnH{Nc*}hvlNiMrw~4``PQY`l#~}g)zK#IBWY(B_6VtBb za_Q8d<H-ags~cj01)^(0!uv{{K9Lz3O>9s_+%JMYB-fH3wYAsPg}fxuD^M|j~mqYnQz=~`CBuB(19LbMwZ8MleSqE5hbtj8e& z1ip>{y=2yyTi$rPRS|Wk^hjB0SyBDqwx~8DGHw%tMU?6CIr8AW7S81F!m)y(cx0yr<#ZimairtH}+aTuxnk~Rni zR;icBG*KD1iNT^yz;mp}6(ZzPY*rxMW=H9 zAp1YzY=W?;5g@v?u;RX4A!ijMu?YfiB4F<9ZLyU2gF1Gox8t*dSy03IS)qzpbd7`b zrv<*dKVcjiB3z2i7^;M15Lk(TxwC1pl0NlM+bO9lJdJ5xN$;a%MUjz_ahn({>I6K; zdR!qwF2!aQ024Zl+$IK#DgnY+jVlGnrEpd$5PKl-DgyD-VeWKZtThp< zilwikGE!Jt-Y8mR*rvg6-B|SzAdG!UQFOQzn-T3{2?FmWka#-G&CZLpCS+CHc`aqE zMk}n@oOAJ6WSB-7w~4``PQY`l#}y*vQfyWs5L+PdDgtz8$C~X8p9zYSZe5GQTibRu z6OC1?tM18Q5n&2s+$IK#DgnY+jVlGnrEpd$5PKl-DgybZ!`$<{SZKBdB_-&v%7$|y zd#Xz$*s{TI-B|SzAdG!UQFOQzn-T3{2?FmW;P32=eskONA`^SNdo?{-04%iOoUJiq zL;9O)8MleSqE5hbtj851EL0}~UEl-EJ`+4#F5bG#uW5Igs=eByiQPS6D z2ETQG*J^_>HZfrwDiSWmxSSy!NCttq1pJ*{t!W+rUR1NL4Om1*&yXy+e(tH-7%NRp zLdI=kK7TYqD-q~>I^>n4tf$5i2~R0F+gFq;>+(;H^s>5x z-@3nRMGyvt9yc*&bdSyN@T6jQx-vn6M(n0SJ1ec`7@+8GQP zw~6`ug{LquCt)0@5PfHcDj^vJRw8ir>5!L`vhE#BHD>c(0W-R>^6GiKnY6IAg5SEo zYef(Sh90kg@5}&xq%KXsKOLtehWC>;PE|UWq}z&puGW)TqP=1bij?Z6P{wUyK7T5eki{OIT|or{L(HqUl(++oRPN z?SaZBRhk(0mn}SnfuRZGK!xZ#GgJx5Ag~gF8BYhzBkwD1C5H9eiH$xNcTrjFGH11) zHz#SzH|W_h@=J@JqUvAv*tF2Vy1#2h5C(=GuYm8&0Dhz{O~5}Lvm}OBmNDY$VKd(7 zTXPwk#a?r^A*odePi;Qn3wmlsyEdt0ax!ic^Z5&+FfgdEFi;@+%&hYB_0U8}27!&h z_~R9Gl-HKFOjLHmL{%4A?Ye%jE9FAmW>jMD+BTXBi$*S}{G%~=P;wh45Lc>kewEGxHekSD1& zIQXsmyH*5YVCeA*_|6RAN9xi9_$4!2B-gcP-^Kd&)tUBGCYzdQlmC2l1!r4cvXPXQ zaMqejiiym)P0Z&nh{C|2zQRC(=rgm*Kj{ojgk%ud2~2o8awO#irY#q(mtyD2Wc`$y z-QPB(ys}amYTKBp*!z7(Qejb4CV3_-<2Es$zwi_W<|K>*6{5R!s1lMvU?l=Go{qvi z@(ydV3YCsqT=BSLJsfAwHpH#WZnQWAKjDZpWtUlPl3_!F-@3nRMGyvt9o@0>Yyy+NK2Gpv!8LBn9pAjg@HkR zg@FR`oi|hp$sn*2feBAXeH?j}X=}^V>tNRl?hzE<7af}HhUD5}xhRQ$%CgGxtAsuY zHk%o@iTV76r!X)lVH~IsJq<&ZkPHGV5t#9GG|eM#vtUtPSR12Wl*8+h9KjjpY*lcm zdFI8rgk|Ix7Lizqv>U;1-QTq$2m?cpS1|Wn{x7TyXhbRqJVRi{)6uFtywJR%(xRO< zQEgGG%Vs7!$%c(S)xnmyXq6lz;neMATYD7|d@mzu=akN?I{dQ zO&A9%;K!LEct~EE!0_{R&2aMaQ z(Y-jJ1*ssg7J(U0$3+v#3s70A*F5Rz`l{6{Of^N#)bmKJ_I{g96b8oj6$T1KpPASG zBhL^5B!4D>@#pJGF7ggk7Bytgoc_MroLbLSVJ5Y+Rw%LB`)&5{^(Tx&+~iVh)=()V zgTP7z{H?u`qDYH<_KvG4{QUAmp6nx`lt*EbZRPwnlOPO?JzfDn&kW#4>e2*eJRR2$ zD6hh!b$$2ObvQygcw{EECC;z2h{C|!zQRC(_%nl_XNF)Rc_jkl&(}@UsMn!2Z|eWD zHkMIh#q;Pb_I=^mV;C5mI1W_6cV-A4l2;}${CwRwoPH&WeWQSPwGu>0%MW9=-ZkG$ zwS-}yj1je7Q+vgz3e7e2=%NjDLrt`~Ynl$b^7%v-bj$FrOd(96N^JE7KWPhBIYbGH>eUJdGOsEx*tm|1H%v82qZ@v?Uz@qnj@N{K zwWl^F5kMIbxQ+nbuh%uWuJVheUk9a7S-qOVzlPAhq+O`@QCoiafsu&bK!y0L5=z+% zlX3?i3=mk7z>LS^p}}4({Sjj7btV0kGiOTh=UU_U(s+gVhZjv-u8sEU4CBWF1lA(p zZ{W2wHL98LWH)yDj4*jug&$|)e}q;c#{3Kbg(=*$tNq$6R_iZF?8T?%Km?BU2+-SP zJz;f4FP2^(?urNk=1#i0c*~Z~`8?atJ}?)-8>kR}^ADx+8r79MWWfOf&l8yOcsw-4 zi={t9Ox{Mizj*7G&ig2P{9YQbpno!P)e?O79tr>En$SN}8Ez05Cg5++;WAGYc(L>+ zaPgaH!>0OsitT@@)DJQ@CYDR@aGqdqmWj6)!EDiDi%9vsue_Vj!wv{sOn`3fi@RJ> z{>9QS;ZZG0z@oR2^0u1QPVWowqYvmNb^{f{k0hm1+g_ou^Dg8q5aRZDB}ZPI)2g21W-UVPuaSo$M(gXgvV zY1)gs(=t_FzSy9|VERV#@cMG1Xv;s^q-BUnZ^H`$D-xjFc13A5O)r*S8||9?@QTWQ zXSlCKRxD0<{n^hsFb07dsL=FlGZQq_49OsHAAuQ<$9-x|rx!~%bKJEcUfapE6u)+h zw_@p}*V;7Wfd26cO}{qV6{;&Tpcttja2tUMkH>9VqefnOD9Huq*+(UzgRF7xrG|`I#==kyn#xBkuS+bP2wf&$3cbP*7s~Y7xYwpre z=fw>daIG!b4lOFNBMYG*a2Ek}huXK#T>{Scnek+w@BY3_xzt8`#%*F~A)z%ZmA$mj z4>TZ=hzwLX|C!mEPUt_P9l0P-B4A$_rO4Ix@L=^_5p|_aqWFzFw~+9Pl`F8MpJo}* z<|_;o2%n16TDHU?0Z0aciwMw7EvJk6%r8rl=NJCaigJnV%P9Dp=MEV)qq*Yafi%f^ z9m54&Ym4)g7JF$=l|T{*OebJ(?HLctbcwlwUTkg`{+NJVYO|AZo0#K5vMSawbxDt( zVn7;U7^pDgGc(d2xgc;Ef!tf-vWC+NPk6AWX?aBMQ}RI}RZ-5KQ-4|JrF2P)t*GXf8}OB2XF9;r9Q zT7%@2ucdM!HF8O{sI*r{^w?6ZX7yCPK9K=UJEioU@-!f$HU(FeznR373r(U zTtGcy7Yxl0qMKOU(U#S$acr7t0K84+?J zwWPFHN1U{!aK$=Ve`*>@9H{9l3>3hRGehu@yflHP$0PNkczh}r^|+9?2w-6Le`qo7 zoimfvu2^&04ODUZwjU?XSD*pU7jT&t(oiWRgTP7znja7Q4EWWvgRr7!RlKM>1G8__ z;I-~qb4mG%HLKydI$qql+&zn?8>kR{XND>v83dLh(DQhtUK9@w6XZOo;Z3arFY`f3 zd#BDNEh^U3u3g1QSXYh>_7$wJb7kptCLnRKfCOH656u`cPJ zD(ZElb{c&&NMm$5%)m&8zzYIzBrx!Jn5V)nZXsb?#;aQ-ysC*1(z4TD9dV5A z?W3xsA@cSteTANkL#zdH*oFfHUQ1x$@vx6YytY-MB`qU?^(QP>wQg@_tn zoKL>kl!~&clutEXSNz&+Dp3>z0U3ZSUW)nD~1PG)E@UxuStNMI$K8%aYIUn1d3?wOfg%C_;1)wBZXRC~1I4M>$qGj)wNK6KzeF;!FcaU}<0+kGQ%38ue9^8H z8%(OKvvXx8>&!(s2&_wB#?#R^oq3kFMPIs#9@c)4a#UkNRPR@sGK|O<-}wt6)h@M^ z)UtU(1r0zgr6L*xRwgj~e4QQ6JX5DsP=&JsbY4PC%B53Y zXv;`JytrQR;|%H6sw;Mwv}{n7a!_&CS15+mHti_2XzYW)YY2=#U*|`)kJYy7sx?{q zQO(iQrEj@lHBZo%@`cTn4JEv0wv6Fw;MZm?pb!HBCkW6pdLna5O8koGDLP+ztmd%p zk+)u~8i&OxSKmjT3p{z&;%jzIr_ZlN74}I$A)>xzhNy=l0tDVdVEFkO9n?HqT|d#x zc(M=bBRO4y4#n1T=+RhN%Ex7Vp%(N{-fCck#Q@8=mmgqfkT&^V0k^6+ajLj(&Dm`8w~%XtOQRno7A)(VSA zZ^0dxghvK;C%#!pRZXX%QMzmamJI~ z+Uo=21hBJc9^+%@J7=|{lvl?IDgL<8?C}+v!;^tVbut1@5O^bj@#kya)Zr;>E4h;N zHpP!d1-iRIQjGIac{7@uX)24TA4Nyrj^%Ix*UL)oXpT@2Sew9%$79}v{Gc^eTuXYB z?|dz03qXPis%?G6Oy( zgkXh}*AbSx@szgNeeG1m6}RRfUiY7Uh5kI9!7BE%-hd4PuO>iu_Bu1P3u=#CXS&Cf z5G*P5o_zyYJB0->3gCPH&zPSAg~Yty0aHj6n=Y9)3l=Wn&xNr&Fd>H0_fm*_g`zy zvX%K7tZbFa29>TvmA9?Dax8X1;6(&xJRZ}>Z4=cNHC^2M3fk9~|F7O---pA@jGJgBYMo+i+?p{oniHez}uRJF{?(mB&yh*rxUCy zy#pHrUQJ-e<8cLm23-vyS15a3&CJ_tcOQPPdEIoqf-Q~Gs;@Ft>Pw2Ejhbi=OAvT5 z0e@?+Hvm6!1!Xgy>_Yhu*fDab7iX#cUj%sx(HY!>p2Y47?!lLIN`$kBi2x zNvrK&BYx@An-Z@GaiqNhUTX(SAJpX zIm!3>8K9iA{To8Exi8+3v1?X!NME2DRtzvAijmj^fmacj@pxP{Fh6$b`m~$gg!k|- z_%~izER4DklFfbhhD=_yN`q2zDWtk*1ysWk00M6zFyryKZdQKqk{#BTo|Jr}lhN68 zR)Bv(q$h&O#svEKk7S+RMrePu@}ClqdUG_7gmTTGlvBDUpY*laBoF z=uQ^AFioa!vyM_I@3_(7vAsJI5efop6PWRMTsfgUdWSBnOFsy{%OT8)mX#x+)_;2S zs(;ZV(>Gfd45wLd=ZcH$=gwS&gTTTB=+<6Wp*(w$M&5|rU%zB74QI_tg=_a|d#iUk z`SwILeTS)JQkL?ZFiqd3P4@BQe@bR=2!oORpI}a* zVSfBWM_4o9R8p%i6l+a*I*tTu8DWMVLl@|_O{4B?B!IxO1QO5JdRoo%7cbV6`t6z%Fp8uVh_TlOutSN)0Z;F-Q2U=$7RbxpPX7k(g5D5Z{6X<)q78-`1$%Q06 zB855F^C>A4N+kM*s)@aYTwZ2}pfFdH(Nx$}YRW(m2)u#--P*6vYDDrgX`J7;U<~Gb z7Q>VxhvuQ`VP_!+iR@DpCTlcm)lHdNF!n*O344jUlwHUeiKujl7{ukv~9qBqmN9I9>#4plPAT-G?( zT6l@4H1Tv@=R_x)p9p{p1YSyj?(G+|}AuSfL1 zSNR-Vhj-bWvaX7*Jgq2KomX&fB|r3dO$~3z9+!d&Ag~I7S&!HK^SoF23|7Zi*o>;a zhN(TRELWXYaB3k^H=!oanK|?KHnT162~to31lAxxxAhugx>USZdDobkV0j%~!NF9| zDCl={)&9&IGA3f=IrHbHZ_N!uqXh`uLtx_Lb&ufC<-N+o2GXbJ1x9=M|bLjZ68z`xjPc zjCu2+5(qp=z~B8(DmdAj9@~@IuTDF>u`Za#^q5wE-HXQaP8juAialq}69l0I2s})H z?)-;UoN51FP%GTO6~vt#fswwC(gDIRv_>?0(95E zPB;JE+ZPHSl^nmQM(gGBb)Q^Jx1Wo4CtjSux@P=`uCCVhojEF&Cf(Mt7(5{G9s>S` ze~;dvl%CYE{ubl#hPrHU(`j0lMX#G0c68LORQfyPE2~yr=BO^@gTPY+=th64{XpOM zDjyh{e~Od$(@?QWvUG7)CAN8+i#8|R6Uegsd8p?GYb#SM;`{XeSuBZ75LlG}-RP^z zE9mmd3jrUw6~CCS9ny50)ryPGsyC$$i<0yCvaUwy#~EE%+BI7`9X1HOgMh!i-=Wp0 zr03H3K7SFvjjo(yj6=<&)M z0zW7udJEk#nQ1wxA=jK#ZbliFlsfm;cQv|xobmNjoy)#nU5E#PrwI5v`Kj&$ed!S# zsPMkj=(Tgt0H*1rmg`+SGv#s7HMdK@=K4x5O{_FJyFjzAL{yE<)_D{k@V-xo|F-+rQl(3*xmpw`-!L_JloBwdylF`ydiy=G->u}) ze)jcqn-tS_QrFe)yM!JywqLXjpQzQ6nCRE+YN?MH5O|D0&+~J$$iqWs`qQrQefYuv zxpUSF8gt1z$0+qm-%hMjpG#Hzo{K*5YqKrI9>@Pw%I@1$T^Axi;3)$BUVW;2rmuZ~ z%qnD%H>^M3NOQPl?h9J4b^Y>c%;@8r>i^LhD4kB zrA@;M1ePE`H|(QY8XuZ;*rUqtY;MNCv+>^Rg6>rE_EC}zy_n?IasG<(%67I1<>jQ9 z?b0IK02?6i5P{rHeVv@r6QcIg0#pE*>A27Hn#ms+PxqhGo-59&HddwOW@5eiob1|C zES0DWM?cO`xQQq&Qsvgk$Wc)4n7(%BGuX4Nu!^0Kj9FdJ~!1_^0z$IA7Yvf0&M%tvybKR0CCgu<$! z7D7PaLIQMiUf3a&cCCUv&j?S~yprox3PWzjlk&8XDLSa&lv?MD@K}8nI4gJVs}}vd z-MWM5#=4qd)8tA|Q+zGR*Q-Tcy3ZpGG~p8V+*Qz|c4cy~sZd&Q0?r_C2LZYlZ)$aY z8})2m-|U_aY9wdg)3ew`3n~USZc@F*=u5)pNYG$TRJ7@5=d@J{tFsM|2Ljy$PCO3X zJt)DoI-A;+ryi}YyhVf6ICl}Okx-Iqp)LDVt|j!Um}wFen%(RXY;$`uqgY$0u!{1q z1c8eP_?z&e;->7@$v7@ts7LFXm`%XnfwQZo>bXuS_fayDD!s^jV2fVavinQ#s;_UG->PQU3ax zYJdmu<>wP!`IzP%D%Ko7J@6s{eRsSd-K=Rd+Onn9w3a9Y0+xWk?X2&b)yzkyOQCwQ zy7HC?R^sQqd1g$egpHS@V&jFP3axMJtNKTBDocgbnU&zKZCkmt>MDz15NIPnw_IEB zSk&Z4r%Q}_vbyq~4_;UKc0EbmIHqZZloW-o_R_why;9O(zSN=uam69k3{_dEQTsvfMq#J1?!FNcfewhfhwnkkNI)uZlf5Lz!%kBHh7m-T9h0D(Gz`yQ~ZQ(ey;5#hnQpxNXpH)bUF0v_$8|DL`CAD1`|FNrU8g(RwDsV}sx7)B ziVAmR6hm3(Qt(9aOnFnuDPdVt##rQ2eo(3uUSJ;Dq44hn*uFq=h0u0eNd~vB%C_Q2*StT>HnAtlN?KTclyDRi296IJ5y`>Qk0z%-v z2W;ykeV4HO@KdEs=1Jw&L&wlW;PA!eQe1lE%(aZD;8cch!j6%a6LMKbI8UfqEfJd4 zjcP3ffIymnzq!(TbG@$9+=3IT&7Yng)(P775>#$Qb~K_W9KF0;X#%@!Dc;DOC$t_Y zaTGOBtS9x@IP2*ti&zjK0(3v!!Naw>qfK9reg3|baH}&1x9D3&+H>yIb4vTt- z-X1%F-lS~2=Q(RosMC$L@y5t>eqlQiyY-b6o1qbtL71=jEUv@3<2TdcB>1 zzmM*i!gac%O@EIaL4R60V=hl$ZTmCbZ4Ixe9F$3g+Na8NW_PU+$C-02>AHO*V_RI; zs!;i$BI_s=!4?Q;0(1{)*H!jY&rN-v4MIJtDPk^9sy0tv(+u4~B6AR9H$Bx^UqW`* zC*eqYuIF76VMVyrC0!bd9)x5a4aE=w0{n0PZXmJUsyDPb(_*4DdLYlJNaRqpb;*(D zSvtGvNn>yMzZVd^38V*C2#$2ILQNzy(ianbyg-vlg(1viBH-ltsd;j0{7ms2MIm;uZcZK$~vy; zkE)+RfNq-`hS@sZ(B@nVkKtUd$(qZPs;x|prk|y>lb^IrS?0=A7pV%nubMe4;Gkeu z;h{PQRawVS8zg@+0e{cjF`?^pN1Ky9_}Mv`9@3~zSPvO2YH4ybp=cet%$@vvxRapT zi`fZZ5)W2qrIX<&FVer#sr5?QwWw&Z(s`XI0od(PaH=t|qDVWg163;uaPC_nXem*^RYceFX%!#*y&>aOM!yVH^hEW(|W`-?dz$?YPT z3Kku`fH;%$cpaU2d-^%*v+89($P~wPBq;b11n3UAVV14a4Q)=hkY^>bx++p`S57uq zgk(dO+L)u)S7{t98O%BwYe-lkkzLVQawb|)kCmU7gH&=%q=8Z&M8Mx3cMRk@-O=WB zkKB{9`P++9mG*=}q*7FfT4+lIkBIVB+A5@RvyQeJDym$L%ci4LnX_ippy$3j+j1c9 zpmuW%)I;j$5}>3eM z6jPC=iPE@xD(E)lJlc&7VGF4TNK6|Nttc$=o?A-G#mTAhM6+`Cn(YwNku2h5-!g439-Vu8 zrQ)NKt3NP$1d^^@ut9(c+<1GqR@`;X^UmTRjR-}jLl`@J9IwXCs^?gt8?#08KvOEx zP$3ssCdD zx?i%{icS$dppJ?(R7kdCXG6XXY44l+U#PM5I#;YaoICTM565@r`D?JG0)I>2A5%jYTfqb2|Ka2&agH|BOR-JCpxNjuJi4zZs)yCl`;M-2!}Ka~k)t=jQZ7psnLp zhX^=8;Ee?6&b~wX`j5>9qdPFiZ31*>-yre@k4;@7;X0fGKiUcF5yNyDDRghH$R6q2 z3X;3=FD!Yzo%8*D)M1~J5B{=)vZ7NtC%qe$C=8I!hZh9aB;fDtJG8k@ceEMlvB9Y4 zdt~vSlt=D*m4*o0q9I|C5Yc@?5MO{+kkagE<=cl?6Vlq#B<+h(<zJvd1KEi*h)2 zLEt3>=+3@F?F$~8=0}^bMJGp*Ju`rEEjrIAc~1=yUhOBL!Q!0uu|sNPaHYgqN6L14 zOUV&S*9^97H&`KyjfNbAfWZ0$=!U*Q=+^0mHX|+iBoeyxX+#F+s>=KKi~Z}LgYvS} z5M~U{Atx`(XH$U}`4o=eGey!epI6)Adgfe9l6{l5Eo2K82)vkpzq9Wc-~~@j_ml1E zrT&~jRMma!cc%2BRO4Bb*^!r*wX-dtYjsDPksce3?tDTRow~~$6I4a|ecUl-QIAN^3zV4H;vDkxvf*qi6%uS!_oh&+FJZmfbw%0*9P(ICeqcB?SDPeTUfULw1LVN{@|3B_y})L8?D< zfz5tf%deV~pAHo986^^Mv_cAR1xJg)Nu^6EF)6F1OG`|uc1e}`I#X&(7sPI81Q zon5Op&^WI#eyg0Xu{{*ec3^Mre$s4r%_a< zM#jyhGuzG`mF0xUozL&uiK_E5RfG5VoQi=D1YSqL-_Uo+-a6gUXQamjjUH(Db3jd~ zv2&BvK*>8(Yl3ONBB?DZD#EQJw^|;{a*jKzxLKyEuFXSvy}8+k060M4jRgFSeTVWl zJT+4uZI3kkd75pg@R8pcnyyBtG0c{!C;5nE)uzL0t zS3jO5_^>Biut4Cw1n9=TVSugE4Q<9+OcP05!|8;qkh^hH3um6Fc7KYJoN7+nsV(hm z4AUurmUZe?x+*Kyk@IY>o;>?D$E|toQ3(W|BjE4sJNmm$ceEMmvC$YRpprdV^{3iv zGIgr5ceAO$!$C@OLJ93AcC4#4PG{9~(h+H|t~_E>^}f?cL*#7xP6DU^z99Eh+My@yYv6bDie`WrBnT+DzYlMkXTT&UfnBDHo^R#HptTVnJX< z0_A&us$$n_YQ0N}Z9Fb3Ot8%<-%N$=-x>33vpsE($QM{)#|&Wv(T?#Y7cTJJk28e} znQQL-Ng3nLTvMt{+lkY7Yg7P%M+sE!{fXMPP7}*rRO%{~#5r-w4kEEGgceb-_eRd8 zmNGZ4&koT9c>1C zY&-@_B-1_T)St<4=Txy_aftOn2lqM-nIhIiJF)w?ZVn8o)r?#~&L1j|81>>5kv@&I zMlJ|EN}zu4Pm||bO{;ZTp`FJS)%o4wYxAnqPQ~QEGxRmOLh+=UVT`z*--x}(H5WMU zWIdFU-RE!kA)r;$A+g0#RmHM+;={S63t~WEJp%Q6f0pL0)2v$8)wxV$44T&aDLsxv zxcxX?Qt~?z^Q0BVh(t8&c7faYQF?LdYZpRt&8vxpnzb$JSsH{x3g=oE?1R991n7>w zLD|;nhBkvOE)(fN8+G2b{b}5^kX^S;i&PwMruUxrhB+cB#gTMub6`lSX5<2L{!n?u zXedr0mD7j_k-QRq-rKRI)45uCm!lp!hdHAD-XA$r z%l_%A8M%OFO(~r zM3JkupU=E}C(L0xk=r^`D;Idtug#9#uEfY3j$OsWF>>DaWTh?1f&~JL6W|;7dYN0N z>${A0xLD+oK=uOg#;%AKh3V=Mh2%@O!XUOwv*6~yP`{dy3&{CHG#zbHN0xJ@b8~W<^>)vTa1Xh!iX&u+E_!`(w?Dc~D z%0?VklydMt?2t*ckY=&Xfl}S4$U3&NC2NUsp`JB0E#F=o#OFf;-Z1Aw6dWM16ajO) zUipgkjh31{CC152xv%xnMX*ie$~b>A!p85b*0@CKbuKdrw_zu*^XLAVsu|e;zmeB6 zvXgD9i&9WH={>f?rZ#vJXAoGAfWA}7zDVS?)u)MeGN;vQFO-5qJ})R0kSxzx$<2qH ztjUk!MFd}66NT0TLqs(r7m)LZ$|FWoaS95jOvA9RjZ7@uAn-H+eVdAXfhsP3LFuU_ zozAKC+KMIUu*(bbtEOU{*c5zA5G&fwTSL9B)28Sir9P#Q5fnr*)x;>iYuPkNP*#nO zBlmTeAOwTJO$3rR>lJq_H@a!Avu!q+XLCpL2#+ekz;->yZ50`tAv4~1Y8?cnjH;-v z+4pMo3?;<$_kQD=wy3MxS}A3_S!^E%*E5Rcun7X!5J=vr!8x<1E4n{JGizQ@Ym@oN zLC{0*a1r{yGpj{SRo;^o)|*=jke-eS;O5JC+zEfb;tmL z>j)%oQth18daH@=Oo1jtrx0Fl*xcclh4jN#C~(-h-4UdujhddbvzO`~l=$HOR;4D< z9`%g8@iJBx@2A#r&O`sGl#&J?2=MDm{-Nn`!|sk5q+B82Zbq>SYwS8Nte-EPX7BaT zUOqXsBL!2tH~K_K#wu#*pS>yLD8;Gp&Z3;tn@y@%f~afkCkdO?n1nD8xP<`UovInT z>{$hzGxwW+t9dT{uB-z}(Nyb!5}b9Ab(#T?)Tksx}nS7a_Mxs z%;kws3fu`F|M1v0|Jmt7&9eo@@Y%5$|5l(k z2k{_qB>}#v(>-|CoYSE-?^a@qp;ImVv3=J0jDW5C;n<{*b3j!nJ5b|nYUu5aP$u&8 zGVFVU+>y7m?9AZ4;asYHey>qgP{GEDj`+@;fQFRo2vqNVzS-q`PRy3SW%Bu4mFu%e z=Jkzo9X3GraFOK5<+S;wYFqrYC~3S~rf#$smMVyR%2P9aMlDM3hrXMkHzwNDqgK&K zxlT<@2KGT<9)YHN-`@G>nr}6>Og^8ha(x!byuMMs!-hy7E|Qk{oW>m~+n6vROnQ3j zSTc^FH3jnSF)!z_`MIdr&wZ}?&a|o$9o~v{VhsYXBXHv8KQ-glXHVQ4o+@!q66?ID zTc*nniT~JQ$j*d!xw-6BuTv{Vy0K;V!-}`_=MY*os75s|4&dIgf6ls96|3O$obIRs z0?!d>z4teTJ+X(0wq)-V>kzbnV-0niig0XH{9+QHP?;~uq`Jp4s#7qJQS1pJX@kS+ zXP;k>OGNCc3I7BaO;xQFPhU+y00=Bjp!MFTG0y+y+BISnTTix^JFlT_L&V31i0p~9 zxcYUMLOK|$GJ}b=i%Ot3T>n>0i6$FF80D; z`Lgn%@YW~22;LpgqO!`@)<`8Nvn}^BT8-^9VKhf( zSKMk|Z^{-d5O^hl)_Z?=IM+yOY+Yrwl(mSoO$Hqs9%W9a#eJq+5-H{^B~|>&SurI? zTa~13o5C9+Zw>LX>MixOyIoH~1PClm;I2n<>!UzKOSSW~X>~rOX5+)hrh)9M3>=UfU!<+h*ldsz+L z?UeY=G$2FB+63-;B)2}6#L;8-pII%UYLh|7&OzIkg5j?IoNs008svq9e9g*Es9=m# zQiGgS+Qq&ORc6BY!MRu_%7egk0v-4MSZ~)TDzLSVTnjAM5Vf(P!!t39t1)rwu5(3{ z)T#s)x21}<4k@&G@IUM5QKiRQ@iBRpB)Y$iK+nBDGTYWC&QJN`n7h|&Xxdcp;R*QF zjWoD@QqC^0aD0VI*B&4YX#fOYExonJ3KjUH4p^?s}Q*Bk=**kGpBrU%-!pR z%)2GHej6D&e0Q_BO%Q9So*NWNjfUV#h}1Gx$Rcl8uVHklGJ_qSoHYi53J_=|;P2Y7v9(Y6pYpAtXH!83fv~Hm=p6cX$l`(K zUhYseX&m%E>ga$aKa%;RM|Gn)2n-YGy7>pXxjw1vy?tuqA>XFwq1LMHPR0L0-c8mL z(v(Vh85(DLAtR;t&wHiv!8%{`icFH%R@%85y+1I+)+d?13rOxf;mpdM zAf~vvpZ%Lq3OIg*ViXj0R~pg^;kuZgz~uB!q#$ zngsmqe7Ux*O|D64FPC$X|57Piad*_E`#2L!u6pjh5$&>Mrt1_+4{Kf5v8!@BELYY} z&~VdqNkK3O+)AM9-XBo5^~t6eH?vt+Y+R~jEAEb}ZXaf2$yd$2H-MEkbmh>7`5UTb zL!^zhvI#eCctwp3*OT8U9AO}EBtWFp7znIMz~9c-Yjb@{O*R>&{d@Ly7?-u$ zt2c~EaoZ_qY0V7@_ZaQ6C{oXKkwocqv@UAdR+i+n1>4`7HRd1;1lA( zHyx$@TlRJs*LB*<*QfMhkruba-)e5VG>Tu+Y^!oX6sc*eY^As5APNK)CD3*656s~D zl(RP><%r97cNW)m*~>Q!Npagr#CWHy*RWV>T@6Q?q3UTTB2=fWd7|ui3ae?W#L@oT zmV+n|Sd;+W&X=omeJVXRC6$nCw|5lRwb;uy%*b&jl$_V8J6E|~mP~c7Q+rnE#3{jH z4Box(%d#k=5RcRdP&MLMsS!LW|lGcV+GF3zHPzZNQ6ydGtoQS-_C0$#pOSH3E5)cCd z>k{y{^9}m8M%6aEnrhS~0ZsbOcity!M&P4WH%eEY70l+L^ncubweT`3mTb>gYufAU zmi2}@y8htQ>mdRJo+Cha^Bn@VR<%A}PA%$+{T6j2ef?xr0J#_P#%}w+wGJApK^8~e zFoJJY03}+qRY;h#rJL0;^hM86h$IH-^)>2^)}5SPNw?9JU~GfH+64UVe3M4| z?4%#HTLp!=_pV`efkC5JD=S1gwl!VnTyL}3hE5!szUU1FnnPMqi6U(^x9JbmZJb>$ z&=p)Rg0uxr@e91-1XjbZb@5>C%4|jiUZwQ?{3S;rMDllS!}&M zN7||Cc_$)#tENOzrLCsa{vh3Av&$8t=yEW2L11kHbUWW9GJ1H_QVY0O)7E+Ks3lCd zTW883q2H!Wmo-?hb*kLIbQ)}*OmEk;rz_yvOqL#V>hhaitkxA=tb|Pvc%Fd2pKsI= zKR|lTG9D4d%`Z9gl-1%K=*~Kp+}gE(&0-s*aHt)tA+bB88YZXz*? zu7xKmzy$)!5TM)nUOn+MWY?P(@3~FY*6!M7G-9<0#T^8-=2sg`4PdqPq8xcOXQ#xs zs!LK4qAs#j%&^I&+X`_spWCt!1p-SFpxgLaZTu`9&Ns>0`d-_LC#!bhz*rFZtNHf^ zw5!U^HD7PLCe>Ty9W50$WcCR==ospaWDt0ifWMs|l@OXA9xdkxn->~e-wVrcrD?Qk z7m7P5Vt=*3tpOdXIP`MT&8Q72k(ahi@X3X*+?afj(U^xY5Ll1^-Oej1i=VK|wQUVA zZo)Iw+Hl-K5pC4+Z{BCQ^|l;&Icff+*Cm+<(U-MM{D}n>Zp=K$Xv{+x2rNjT@8-X2 zfaoE+w(ZvJ+7A5gtG7{uTS)ZEVrR8hu+4zL6Zt$dF0|{ z>a4PkW@$WM?3k1E96BeX-~@qJ5TM(6RjvAIyGrBM+L!6demqBwpsXjlWzo(o3=6o`{3dxcgO?<_n~jtfdK-qBS5$F(z?SVcZtfa`Xz-` zQJz4#k|xI;CHb9X(t}RY+n_)uYX}|+Y1gFNL|Gy?XX#{b>&WA7_>`r#5SK94#7`!0x1_E?Dzd&ku@aAgW%FeBrsK(k8TgJt4M@_V2 zqMu)|-UcNcdOdC5sX>wsiTP&MGKC2U?!9DK*&EAb=-x?NiuC0ri@^y3&k}gkO&lJ* ziO9B^6U(JbvGDY+@^au&liyLHOPH*;E`}qIlht!OBTk_recX!W@;dng3kQXBD*E6P zN6`vJ$tVV669m>K;P2wKHHtcU_{2A4Z3Tx4G$gl+mdIEX?KE_|Glcav^yJXna5reu zAzokb9C^zCIV&XZMu-Y-?+MF_5%S5Xgku{77AEkzn^--56R>X8CX^|a=nz~8rL9t< z2liNSLu(GbocGY*HVcCsdCLG9E93^l2lDb*l6O+)Lz7exd?4@+0)03CA~S_&a8%D$ zXtYK-KS*t9rGn$Cv=zG_Ubm}~(Jq(lTXnXHCpi`g6S&ImrU^?i5-qn)c2giPD`zR| ztx7nyL11M9FTIK7DI9|9$_(Y#l11ibbwtOZR48^oyyo#5WN>JmLPN1)$T?I|RyLnxKd1dk-=3{C*u0}0nU|$q^t5!(Oz9%Z^?1)>>Lq8%a2bpsj=d zSqBSlP{E;B0{1e`p^CDi{Q z$kwbq?%Ky!32RbSil@D%I`;*!;)aeK$}io9l#?O8Q)hC_H&G-Gu^njFoVJMFv4@uP zZ8iCqL7`wAfHerbhd|%WzwTV&aomh%nLV-1MMGfF6g)*Egr^4Zo5lPGHc4_rXBn;` zcr4@;s(6w_kvJq)N&Csu7F)}=^$un1HdY|;CIbF;ev{(7R`Y1)!(?YmkkxF9m*y6=hsQMaMcIN{ik*ug39ZRW@iC>d z*0I1P9+uotoI|e!?q!@q6=g-sy>iNzot%PGr)-Ydh%?P579j8{0$tC}t0wbeno|p9NIi?JnHFCCDYxYcx%?zhUIaVU-QbJDaJYrE3SDs7jk4P&XOHi zAn-N_veg; z(o;erz|nGV!6WqcSA=(N|m_4 zN0M7Ahv}~4-6A6w!}54P#hYVJOb}A7!QE148;Q?MiV=KoAwYNYTjWmBdDj!{`!q{t zS*e6YFH^fL9&Y9L<))G0d%e8c&oY99nSjbd=Zl?7k_fVLf$)RC`UJl7CXOHCORke| z(p;J~B@@=XOdYCtx^u7SB$F$g{GCZnCL`?Dnf6hMR2MFL2;~i&LEwD^{O$Zc-J^=* z$9S|}BEJtU3rZAnuD)978uPuRxur0VxA=F4M@jLP5!mABt}`c_^Ra^2c8g;KJRtBE z0(3XOMeanM@pC-=LGDCb3@>g@gwk26T^2>UQ)i2Z!o6P8Tt+aKiD_Jz0=zJ}?3AO>o zDHOJYA$zbu;B5r_ZTvRXQ}l)>SQ%3a`yy1ewIYj1$NSy%-gDlL5qZ2`_Q_8)musA<5>DHV#qJ90P{s4T zt|U}!ELDm3 z+l{qu3+tf8^D*(;G@fge;vG*bBWdeYKQ2)E)SN1eBoJ7EK>X~ipy@UZ+wj~hJn55& z^p+{dmv?!FyU(O5Ff8=vPyt>DUSP}XwL%UTL58xHO>10niR`DQu@1sOU_AndXJ!O|(-N1qIJuuk|^8E8p(%;RV>dQ#@oQkRVC^cC= zlj>74o5{aqn~S~A-!UeKrjg$#xv>+;HPHzlPepOO+|DMoZ=uT=yRQtQL0}mI{yttt z&YeQG(bN6t;pX3-Wunr#yO#=dBy!7i(eiGb)6q6g?OS)qVj?-@eT^@V_Hu2T#I$+W z*fkJZv1KJ;1p==ika$pDp?ii%H+!}WbK%E48<^ZUk;M&@_4tFA-i*AyQslg5Sr)B( zGLZsu9sanTf_U_$=I2SrM&K%`^H^nMgTVa+QcueLDxT@+W-l~mGW?_$LgTFyDV1N0 z`HFF$^qRYuhD&Gmdbv|W9)}i@H`KW)gyfoT317n1^^XLmzF7#bq-A2U0D;vB_`7&@ zm6zz-MlTlTC%pI75%P-F?Iz_|XIPbYLzp+X{dSJFCNDc=iKxjMt|{l`+S-X}8^dg! zrj_u@SxsdS1Oh7%NIW|$$ht*?o4wYDpYfhA4d>LW>+amvs)x zRIy#fyk47f^rhzKNo{WLimQ~*y;Ttp0?!agJt@y9xxcHMz21}`^!6_eXEYR7?R}PV z7_+=k|F8(VK+OgWmcEq42iaEP#9P+Mdh1$yipwXB#wU)gg;zG$Nm)?|hY%+{CorW!oge zY(U#e6e#QX!|Jx#RuEAj5D46T&(J*_`hSzr@q{uaK9?|2Oy`v>S1#{bHQe8xZOo)q zyDSkisrAKWM6a`aFLtTU8z@)o0TR-0T;#+hZJ;qU5^QED4F1NCs>A=O)+vQ!GqheXgcD6xtR;pF4 zph&4juCXtA50(<>_msn#6mOmVE7LZWZUQDXP4$8A0|}^`=a%Wd`TlgXcQR&Ld`_m* zW@qhU$)0yt)IM4!6`yvNMeDLGqZ_#{a;GhV50=PC&ClTyb#LyxW3O5KS z0`|^P8yA`1d~>?lyQwlSJ|7FvPH*XaLD!LB5|ZmW=oit} z3T4S1)|-*?nSi!MrsE;m#`)DD2o4ai1P-^2-JZVs;u~`t{RB^Yg^mSy|F~1~P*x_S zylav&?axeV>ZTSaWSv5u>V1=saYkp~ot;KY2NaVREx7i6j`pIZ37ynFYJufv5lG!K zS3a8Gd{?^J&)q!sB1JWLGji9KR^sJwj5ZS?aZ zJvjPPl?i_3YcP+6bW(X&M-Kkmfj%JpvRsBy`=$j=n>y(+I-uyZ*fwqA&D`1~y_a-u zJox7mu(u4aX7{1Gv&+7so|}D0Cts8O%$3;5>((>nWy1Y#X4AUMg>39`wPhc@IZsC~ z3hgSNYx|sErid&hiFTCdlxZ4tR8V;xSqS}N0_v7g=2Re5cWTYI6mzo=N>x{dim|7= zFeRq*iknf2kBywo%brd>KRQuecWRchYM_i_ESAeoUY|U38Gr68Lb-iOi2h~*_IBgd zJR)aq<9Xd5t+b6kEP$^_eC{nw`I)rxu1V?$HF>n~>8YKBucH@*x>KUg>s&I8w)`06 z8J$TNKEZ5DAC-XouOeXXI9W_#K;@>?dRvh>Poi89ZFRFKUkJb3RJ2^ER-!MvBbq|p zsV3ni`!bNWoOoJ}j-jibV|FfUR5$WpOu*c9vKXIe(nB#WQGS$%PX@Er=t!p8Xffo2KnDSH@5!R0 zLLACPV*fX+x7laS$sGCIU6&HmdBx2r#m7d@_GMRkhb{_rr*beJc6gN!#c%Ct#GP>T+^g5bdTnt+yl8Ci+!hx{prP ziG5Vpo#LI(S<8$Q#++L0a~NZiTM3xEP%U~zNNR89>*Kf4=MEt-`wLTUMv&jlY#MjD zjtNaJ+BiS7Oo^)^~F5}OG#gGmHBLwWtD68h0lJa%;^EPlZ zr{+Kb+MKcna$Y)%cGH{I>qD)tW7W~gRc&uZb=|2$%v(eEVF$$vuZJBaoh7!*|uy0}Z zA(#Gh$1t~~S~N_oqLtZ@`2G+#? z&I17<251L3a6Cl7+?9G!)}te>UC#S}-EG`!#t@M0^*JYOUy}JpRJ5w(TLUh>CE+oExYa92XDTHKm14_xnmv?nid!)`1yD#5I zOLpF(y6%*Z!Hyyzz`#slfw=+!b93rNMw|{w+nL1oySH&Kn?hK&wxEo3IG0QB8gH?V ziA*nietPfdZI0#%E@XaG_iB$2bJnXTf%uOkU~W*gNDUjdx6QDKja26AecO=N4Iv2I zdT@L?ns(Eh#@ilg(q!Qa$hvGbN0TmhDi_2q5fEUT1uP)2A_04shSfnT?}QC@=yTZo zBx4)!%6SA}Qx^_T1{XJN28CK@$Eq{mhd0#c5w3;aAml9}0?b)&5e=Q+N5I^uYN1K6 zTl8$C0&YP;4cIs~9a`SiITWc~eYP*qn$z5lC-~5tsg+lI zoB-Rb_B=#_z#|0g4a+Mp#jXzWD%*$nH#xT1uGY)^8X9qES`zK1H;uPF(xin&XMS@y z1-esc1*1ejfPqz1(s>KY~v%*4@lW>>p?r1tdL?Va|z zt?j6+JN3!=-e@5PXy1Dmyl--I-$skdG@tlx*a%d{p0OQ3SBi05CXBW-yUN`hsB(l4V;ayK}fLxw{!!l8RJF}_XR7bn| z?B-6sY->2_a;H8yUmGpJ!0c;pf)@{N?q6QKc%GBex5-bYcBV1oayyR76!+ViP3>+D z)Je)F9m-QS8~agNcPf{|E)x)9fW}O4eiZ?83vY{8sh=bE#<2tLl5z^lh4}5KPj$r6Yqd6_ zx~=^v&YgM%eQCS^1G6u^1wLbJeItLyL_Je%)Az)W#Rk^dG8~Z$@cX%4@wdiFMr3ss zAl*@s!;-?>>97Syl7J8cv?L%n-$EeV%5M=oQRmGMZxuBKWGD3d*=^pamEpMTxwk-L zJcYSawlg*~0RgsIdIvTLyo>Cg~XcI~XzMJiG)u{o1Hq3BO+*yjEs@fwqnmc z9E5?ungsmayr#AbRc&KmSUyvFhaLSzB7Xsrf7&V(Vx5OoTht*<99oHZi&jfdDO)Us zO(r0~HjBMDgTNaJ(B1q-=|h^Id3L2Mac?;Bm>kOM^qHd4n@wKs(^07*RH`V&@cBn46yRZDF(`i^>PiJVc2;}{K~6puY2 z<}Ba^5_;{7<45XPNm5yy%bW}%L*vuHFOPS3uUmS2n1l8q5LpG z;C%$>ZhoKeLB)?eyTzvAN{~@H<%bVd@*$O-Qs3PBuHIFuR@!5m2naD}feHw`nt;EX zUp>MZ@!QyE@`iGXP5p%kqG(w_)W*xTS0D%_~ zpu71+iswju!<`T&G}G{b`O4WNWS=B6$l70XBFbG1p@06 zsJ|fApW%$cC!XDnbzW=sO3+63q)TRt=%BKFERpPNiyV{eKL14l7Z+_{nIT}PXJX(6 zfp-w_ck?^6PE@&#J+WL{sdCTamGGPSKS@9cXcLr-q8ia&sH_c%NhirZzB7tNlc_mB zaIZFLL=XtH5vaZ&+RD5x%FTVd=8bi}Y15UUpz0~#rn-~Yk?P9j@>vui$((|7k$?bm zRxuKrAh0@t>ic2!0nX{$#y*#MKC9BR=Som){&Zd?|KO3XaO_BNHT9C1E(~u>K!`aj z-ozRNUPZv)&1*`&@acNu(cMrNK=)n=AD{WN(5JRV74u=XCB@aUBq?7QJBok++bp#K z69isIfbQlsbzk^^J@DvOra5&bDCu|_xS%aUq#-w|WgRm(6XzrW0p_e^1e_r776P@` z!=rOtCvK~J_h^-#XNRS{_;h+YE>tTJ>-Fng7FWF=drr~nej(r4 zXA+>hdClSMqc-(fd*IQnwe-`Ty%G^CTAr!Km3ni_`nf7znT=cpn6nyl5C#Hk5}>t0AnBX?)rcXTjchBjnnR=h^7Glo&{Bbei zM-wQ%93GzBJZZ9+q3VH0x7N}RI69nQQdU>dvw8H_p) z0xu&#ck|M!%@Ze!5zP-gy0w-x*vM3pE0nY)`vprUc)Jj6wo1`b)udpNB_PC{m5ss% z2)uzn>D{oBe)H6Y#c752Kf0UdqFfrP7}K*!^`cX~LX^-U%ZH{rNY(T{yfFbG=B#)V zYY=!70lJxAA=x~5vN)rC%RZBLKBwN1COY3Dkx4b9QzB4YQLI`@Ova+vpLLG)pn&%qG>1PWehvpk3zE_8lLb3X(FZ zUHFa!gqX9A+wg$EiwNZ349gB-9>B2ZlY9H4yXh=T^plihPVV~B@t^5pany00&fC2{ zI29meQoHaS2?#M~9k<~Df%g!goB2J0y;AcG%A$FUEu}elN?^UCA7e_hR1sf3`ZE#8 z5wyiidrsu-E+3WJmHgB$d+cWy;^A z+hr5cIeqN2AvVvib16Z$@^VX(ltp1;s7Pbx$te&NJFHxS`AmV=C{X$?yk-C- z%ARF)s*sKK&#q^`N{1@vO1(H7G{{+HIG!Elm8J+qQGsm>3IxRttB_-EQ{WW}z-4{~ z*E&h|G|$aV3CX?5(hA*kxw<$)S`FK9hzPNH3qX>iywVh*A}X+LUV$LkY2|awYYMzW z0l3ZYAlt%{KhMhhB*`t<{W)i&N;Pn)WIYfjB2cr|33KB-=g)i3SRAo^UIEniTJtI9 zH3c#X?D)joZO)K=u}kzqN%C_epG|7$jz}%*nK%)FnAKj{sq%9K*ea?eTnYrmvND@W zra(b~^X3#ntK4vzSG9ktFN}39^&TX*N|me^hEeO*CmQk}c+)3%O+z41OM5a-Gzg}+p(~Bb2Jj-J zU)cu54(nHjwmB6Ppf^VWP6fhoQi0kG#H-!R%U7ts>l3*~!*#D^Jsu|_cvIFiJBY`s z>L6?O-Rz*)VSRT@n@n8+c60W)J3vW&)GYuzh9gI$IKqiqg>$W|X%iBN2;LO5%?{#$ z>Ou%weK<7;c3K}E)JD@*fM100J}M1BgWAza5OX#x5DZjPxo|Aw5lwbs-u$T>o#_wB)@vCkS?0@14V#uTp^DAirBe2f8omJ*BA|u(Opvo3VF( z!c-YRuWH`xgrI@9Y7{b~_}aPEN~WoSZ{OY`8s>$yvMiD8MdK z*i0P&+D`2`x0%9(qi1v0*N1jp>UnE2f(G6y6UmI?s~VIj1N%sT)4}t=+ZbfR!`z0J z5qYHo{5JXBv{|6zw0;X3sf_4PrsKt5wbj8@XjZ$7Bm@n-Re*DG8uS$%`cWLT1Kwew z^HVFE@S7uk>b$lehF>VZo5LI0&1tr#i`Iz#WTcP&EUb_2;OluyGlB-*%JE5O@#zgp z+k(&J0^U-e_S1#TgOmSlb7>it6bOyPmf=gGhj8 z$|#)$b0xy1xZV@syyauxF#KGX@r{{miVYOt7t8OSWrl5@?XngfXB7N2+z|F?tzXQm z;06#vfLl*opFt!*Ga}{O#EE&WqLI?F89+~~ocGGer-ysxiF}AOzg)O`Zb0ntwMWVo z)1K1f9R}}|*lr)wdgqlBu&F4L^R;`!61XFi?+{{#$=TO?0$vK zGju%uGw{2h>W}FW594;qEAci1f)24IbCVn@0oZI5CQL|HXa69yI@fl-s-$zrksNn4d!x0Q(OoVZ(&P2S`2& z{s7-5$S~AtHI-PBDIivW-!t5aVeShM_WL*4PkJwiIO=h85<;*E)a5p%Zk0p@i0wc$ zM1oJxdKO)ervxd?bXbx?%QXdL3b3mdHZqXg>_IAOsw~hD8R2A?lgu+tfyYT21hlFFzhqmI)Wd} zX7;Y6IeovxFf*}`W^kcLdxZ|#u*>j*Vu!Vig*E;$1=zLon^6%w&`;dtFzqAb5_mKP z=i^EQ1skT~*mS*U630`tp~X}1vvG-HhdH~u_4{E3_|;?Ys`DZe#GlYL%=_TDeNEVL zKFIEA=rDc3dWrzHdkTLtE{@~Y$<3|Zk1N1$AK!II6977jUs-|^Z%5t{+m4o)5DHve z#fXgs*sw8u_cR>mT6ZUF{Jy6EyMSyXpEZ=rYhPLcBX7sv@!F17520|YGFA^@Q_Zdi z+eAJ|;>smqbC?1X6yUee@1&i5;Sc=goJVX?2fHt`;}D5o?9tQgD)JHBl}8 z>k9CT*!Rc+#_y=0-OfYjcw$QmLEhR-t7tQ-s{#4`8lqfHT@ycArVlvj=6i5^h+|ZDkpnTQ= zGw(K^qqQ3=Ej~9F&4-46YBoLDE)BgZm(c}bMW(=`3N+tQlK3d0t-#&TTTwd6Y)VT> zr*PA9fId3*Q}ZPWy(E{B6U}_4z+wejFDc1e%y?dVn0a2qwoaSUY9n9Gs$VppG4NC4 zFsfu;k>K^Xj8{-Ll0TK4vNwy^1v}~9t3fO@Uhl_+?FRYlz>%d@2Yt?>3X8wHqrfKH;JrmIO2u z)_-as_xKa5q{E)MVeZq~lcTXR1wa9QUE}*oqQ9dU487UFd$Lj!iQKf)l;Qf~%1;gC zxxX2ewb(A(&wLr%(KAA(08`-hzLFp-`t-&Pz1xUz6uZ&V;zMp)m;Oop;fT3mj{h}^ z6W+APVchyA=En6W6}Y*uB=kGdz|gx5yeTaunaE8;Q;dv-bY&nIz~31beAxzPaqG*- z8{J=2pnPRXwK^0>7h* z8+x~S;V5>arNt+@X#;0Kki6+w`Yjq-zMb5HLsbl_Gm-r~AX46#^4YrjkZetqd~8Kv2cVd&XyYyCE*RioV)4>v6;I0BJp zU>mwHYXEUsDH}jhqGbbFoHu^lfRLgAuCct;@ejBP_BYK>to zsHWt#C0a0!wfs2+q8seDzaj(-yxq8t*LJjY2>Dx<{HPoeofZTobR!mtzrZBKpHS!p z3K+$gE5NU?-@SaQX8JI2bN-~nO=&4j?{8W1qjE-+noyX~kXSTfbDOY!Mxf2-H+t_^ zfZt)PzL@=Qzv7(%9w}kRz0&P3I5&MP${1U_N z8>7{y*mPV+t4{xw8R5bu^p8;DQ*(sA!BPW%5-8BUtS4I;wkhzG0?{@8rMrxyKP7E1 zuH)5Py?Gsqp7~8VLQj$por(2iLmg~F_B3@s4aF3gtUz>+f9NjbrO<-r8J9&(j&3vo(6AKwg399-rHM;^(}6^1UVlT6>YwV&gSWZ`m2rYIBD} zD4=qf`kMk>3Pkt#+;-u-u80o46M4sLCq{}~i0Cou#EVB*pc%8-Wsm%D z-G!I&Fa<;k-~}eDsQ$IdWZ=`>We%XV3ms)1MD!SW>KPCo-i!%tvG?r2*n*UiFa@Lv z#25M8OEF%VpANpo7(i9K)Jw7cz)12vWMVRN|4WmLf54V-V6K2yTl5(|tQ=q6oe38SxSn`QLn3GuR zCj&C;i9Eu9NPU^Ui3|Ac1S6(G_7l3dwjiwLOVmoz@=SrM0?AGONB+N}saC%?A)Wj1 ztRDwxttavXgPi79pDXZ0$1-M)OYoKJ=0*Y|u;#Y6Zl-{e0?AE|97=7rgNep;+x0AW z;qizPSTOp8!jyr==?J@3RzhnPkth1X zaMyzP=)?W2HPaVeY@Nj?--l5-H~BR4ngW|Eklf^=WAj0T^k7U@wZSXS(PA9mydhVM zjdA$de!>Q+M6J-x)+lG@mhm_?GkaSvQ$SAvdXo=Sx=n4pwyTj~w$(I}{*G7T{)U5G zsMQ0N&!3PC<|4X*K$-6%YSz{ikSIW|vMVEwoGHQHICs-`yD2T5gCy5U2XFx8R%k*r zm;=qaOGEctzTNm%XbMbHfLvwlNL*R-?*o5)-}K#XN(*ns*h((b7|?iiRcFFAnB#qg z2%)vJgyoiQ3hbhQzsj7Dcb5#F{oqcph>~k0s(T{2@%#zpU_QYoj~RM4^3B7T z*A!T-K)A{|CLvm~a#b(zZTfCErKNMA}Z zT;LQEidLa=V>gbn8%5x?8!a6^DEhJL0QRHEbSA`u+26dmGBlI%ZEj$Rrobcx!d)&m z3^_%sT)bsu*LUl9Z7JC>DROs)u|@&J=TFE7bCgA`K6DcEtwCGd6qu@jzsvVseOlSL z2iPi#Lu^IrAOpO1qoujz>W%pt6XIlQp;8q zWRCpQ-`Jz($GUtV;L^i`j1kNppn6TfAK+VWV;QEv;|ln@+}g<(+!(D`%kq%> zG6MO=Kr0`7yB9S-*43j7>P#jfrv6X_{4(`B7@{dKMS*aYMeRaa(GuZJPWGfH_pP-9 zUbVD$#=YpT|D8GXC&N%v^<*gUWvikam?!T z>Q3~=xDe6DfX1sebtYpGbDU%5ujVvB4Z{>zpg?#U!shv>8sH*Ji2iUoC--nO0eoIm z0l?0wLG82AhIVd-5e>i;SfhZy%hL8xm?`s+v60DL-)lgRjsOaf-0wNlKM@xvJRbL&1{k2(LDa+Vgf$$onM4_@?7Fuwt zUin-GXF_++^=v=}A`O`@Od%=@+51XiT`^r<=M&I(^K?sw&%8I1^80j)ngZJ@5bm;+ zqN{AI3T?R6SgxIhBmft;=c?UGga<@KHLpnyDoZJcN~QC0fKnPa`6plqQ@#Z|B$utE zw47=YQ($Wa{9Tr^gu?bR-zhTM5%e-s@`03I7det+A+LKwMNpW0k(-EsDaf0y%Kq9cua0?Nq(FE8QqoWoD!nO$;OT(Eog=#wkkr#H^eQZ*C^3_gB*Pr0z&jKOcUj68Dy3za{~KqABnKL( z$hYhsX@ChUT~2_pQQp9C$07v|mCTaD_S0G#yZ)ML~gcc@;cj@0=p^T z@3NE_6iUlnzV8|teQ5Hk68Vx}-l4C;_3x|Qy^0*QkSeK+O(7Db14>_Uw(3A6{u7^U zPZL^}mMGh8U2-VRCYjR|*k6Hg@1d1O*)9e+eB>CNF1t!99o z6H(h^719i{5R707(T?;0D6h>{oPZ?2cNl=Kr3KUcnk4#&8K%Iy6bN@&${Q-BWh_5* z=N3zPV&mFnkc)wk+mI5HWfrI)D|$;d40kM2#!Qv~!`u?g?!sb|1Chi|e6l4bbS^F= z)&ClXWEQoJDexWzx-T&n4v&gJ(K?KK2LQb?DOV)p53ay7__QpCt%bH3PPcGS7{&=m zrxpCIRsz^sSj^)z_%14f=EcRO=fV+?ZB2pKDB$n2lra=a%d+{NL}X->HJmr(Yu_zS zQG-mtxSFsy(b_^6!Hh%H{|K}BHJZmn9b>Q-q7kq+^8(*c1!9=i{k}Z3huZ%-FFwJP~bTc zLy+%+pIX2{w9tC9O@TKl;4iw6G}Z~ris^`#TZ=`#0cg@!o-*vi$y5#T%HVC~3cB6W za%nW>MwK%}Q`_ttz&3y+i}PqC1vJ{1q^&tjfww4t*SwE!$1Be_LK=lNU)1Y`CY|Lu zik(nVnM018AK4Ps?k4hSAqiZ;!K{uOcn`?X8#gCnNM)Pg&RIaEZOH+c&lGrt0&vAw zb8UEOdK8Ce&aoY*H%x1s!gB~gvfCaZ4Zqyzxh<0fACTEW0*P}Y-~)6T76GWGngV+% z0QY+}DST$Y1Gmwt!xBM<&=7>ILwH9qK#jueSs!$|$Xf1d_rc5dD;>_{@?+m zxX3^)+Z5PH0l3wx8KpEz&uyG(+N%#U!>|tssvO=B#J0smt6PpFFEVe-B*8~y9wr+B zb6BlORU>ELGT%w zBf0`UAvMBCw;|OmQ{Y_+xZAv%GrXw`jr6sRGDgHqvkn)c(X|8SC;^1N;@zu)JXNM4 zm0Q)qwuA>|_I%rzWU@R$*2ol?%M^Hn0uR1A$@sT4vTyEiN*a({gd?so69LKE1L(?o zD)+AuN<-4AsWRuIGGE|BH0ivtJp^pUrocJ{;3}^p;5yf6#4pb8JBZhMbwJ{uMLey; z5W~1)aoH;hf-tRgLj|*1%Zqt{R*WwXuyOfjIX5F<3iK)9E^=S3VpYrQ=Wj0Tgfy^F zSXNC(T(VYcXadwx*LUn7ieRQt#4G_qCUtw6*{snfGmp7Uf&CTO<<&Lvh@M^83Y5ko zK}l;WLX)+%^xOY>rc01RI#S2Xc2$#1hm*MXaj-$-%|0}Zi7C*o0NmsDf`>BOUw{1a z{JxbL7PRJz@(`S?t@W;?HTzw8K@K7BP#9Z6AWR1s+-|tWgU0&}DH|nI;9dcDiSKhJ zL}jl(etBWvLRHqQ1(D|jHs0b1`Q6jB@?9r+y%N%YYZVGJRuB38WzGy5yLtw<8dG4I z0=v9AIgj}1;l3(mb7B>#oPa&ZT26)thcoL1>~CN#@r+~7&6J(f=fXg42YW5A}sumbKL55tTCD82st ztK{S`hkGC2VcX)Q#lYj#CNv1sOPh7b5}KVBZ`c9H0cPy@0B+~{<|4#5gPip+1;h%# z9TnGU7tpsfgiRhDH3{ajktv_UCX_C78Lybg1N$(#7~GYL%0jnP)6^q^o|7C8z`Djk zvS)d=F$K0!V3TL3M}xe&$VAQcdLd%_$|>8+t&IKNf0+0CV7556gdLTF-f}ke>0o}z6Q%f0j$`TspEh&wu z`3dDr_ax_ZWb({q3anQEZtHR)j)w*fn5e#JH0#3P)I0>Z{r*cv7+E}(D;1X=1)*ui z>H(Zq6Z0)Jj??UCrXZBLS1SNl^+PoL<8w3lZDK5(nR5Xm;9N-Sxz=G|aSvB2E^`H; zZ)|k}PAQAI-u!;>)G6$&i76mfz}-`EnRWp@7Y$f^c>xPO(HasKSP_@7UBG2R%l`SG zvY%sU&8>dK$16F}V|Uw;WZ&jl&=gpu0Nl}4?R{Uz!*2%+e03ZGy=>(vvv-V2*vzIe zrQg7KP&!02v}e{3=99&Y<*}*uf`V$EC71$B6xif~D$*!IL4YkwH1|yz72Npfmkb=P z;gcDU?Mh>>cpn&0OAIrmfHJ)7mab=FOP=MJ0`nDcS9*TmsH3By@=k7`AjFo4$mA`f za&0CPnA9%JDQyUq(z0BBAVIBM=3*bEciD}6RNhZxFH1881PZt-Ehu;UMl@X+EYr}|Qimp^#c2f|@5bGv?dWg`{pMLr@*3cBFew7;~I-f&hYBmjC zRyHPd)}bIHT7+#>(+L$-+-<vEFh$RJ4&nH}*souc=O@XNj zz?B~DISMmcPx!Y%K~{DlVDn7RWM0dOo&0pYzcUrCfM3bVh66QXWizKa2@z*b>uilo zfkzZjy2tP`x+yBrIQzFk0p#StKPf{hwJ!cLTP0{msLr+3kQbOx~q6D zMj2f8bFB>76qum^TL5{=sBYAa(x zgGyE{9B6W@R;L~3-FrmSW@LD#z>os&N)JJt#e*>Lu!d>$Qi&fn->cB7f@o?`Z8kX} z=qYa8CX34wgU1DdXKclpPwwO1_Q#ng)i&%23c!^f?KBEAT2J_QLP1$!A^1<3*!d~^ zrMNg;$3L1w={^0XqZbccq8B55mC18m4gqj8Fj{g++y4 z5kymiVv|LIAgGu?n=CF%44xDqQ3&9ctx1u#gLOMM+6@fP6qu_3TOZ|Gzz2moJOfIDFCdnu+-s=q6WiUlmUW%a$u;vFKkM>hj7sfP#A<* zEx58A0)CmYYRfhSc2mIJ=wVi)Fr)Qk07a-1^@Ia-hs^(%G#)h_@F>cb^+7W^y(U?j zl3IE<0EJnsI*j5U_%AqLXR>Vg&D0U{1u@HDw=@K7K{z9&k`RbH&{;e zk|H(9(v;NFxeG~f$~_nHo{ zw|eV3qLr8@)ZW)MCEY`~Xgd&@DVQxST5Fi!sOI!HB@&gyv|D5Wd@*)XAO<3n1v7yaI|9~WiL0%^6xd4v zyw8KI0Hzydw4O9pgd(U}6UB?xY;J?o!89bkFNG*1B@dd^ttNDjm!|Ty%$q3oCdGP$eI3!|-sh=FrvntmBi8){QIyo#?@XkPZC|JW zyU?(akI`KStw!q!V?`)}DlvgUwA2w?K|Sw<8IcxzTbZXt767auHH5W+M3V-7on-;Q zEK^`71@Jn4&5c>BEbhB!O?4}0TBXh!nOvygkYIz3cOK) z;m0&tOLa|2rDF4&0=p?tdskcnsI5(?J+ysqdzrzr~En{vC7 zvg0L4EGvnc!xVU#0!r`7!F12A#NzC)2-Q8#O(D>`TW+e~8VcjyOc0WC)=i=2p}W?% z&4z=y@uGj0V=2Q84ZsvwtboqDf@je^%V<4mtO!L=HBDexTr_)af)!@HClvA$>$VWG zZ*!W0YCx54$#|zD)bMcdn`H{TQUSQoqufVfT>U7Et6mXGg-;d)^vW;Uig!E1p!GRI zF1PL~UFKazV+>k0W{;)u@yG~KV62N(n*!?^D2%ID5l9hAg-;y>#PdtN z;&mB*HuA3^>O+JoVr9!*JR6cZp^>a;IGc=@Gl%gFz!X@kfYQ5iFx{glvAFsVQt6&y zs1O8rCHIEG!*~tJEG1MDi)EY}h$Vix!y(D*hAYT;i8%~z0H(lN1$5pOyo~NqM(asq zMJR$g!vyB^zdD-Hc190Bn&^)+z$_FKi?fCRclPYmfCieADVNge8Nq5yft&(L7kL!M z)#nI`eWO&w4fP6ude665kHjNLI9cy+Xs9PvU<%IQ=(hBb`Y4d`h}nl_Ri?l$3MjoR z2h%;25{s+7FYXGD%~?^6uz4LjQ}v$vD_rJg#uJ+wISSP0p?xG^RaZWaoL_{Z5>R3q5?|q z%E1)7)B;K@t~P^IYE++%YYOo!QxQ6hbu6N?QgVQctWrU{9{}469?6Wxy0(urGEh@s ziUKVu~;j5UC{u$)r29Okk>u&P42~9ITlspr?S& zyMnjSO-qNx)qa#p_Y69Pic07Z(m;VTITsB$he1GtISLO*qcEfOVW8L=MYeiVV1WWk z?`jZcu$<}Uu$b#jo0rqiOAY6HEctk^H{g1!7YgbCXAot$+>etrhT#ps6lhgI=gBI) zD+kj`J;_sIapEdMB{XL^29=yaQQiX%!_> zQ-Sjajw|8r@hA?whHe-g7FYXGD%~?^6)I|>MQIoZ4&_*ep;CYV?yWSb(E|vL*^j09 zLGFylx*M=55EM{(5-K40hls#UYB?Ixs%*X@R2Khn=j#VZ6@puKENM)|6B>A{4;RY& ziuJ1e6g5Myr6HLDIR)qq%*ES$O7F_Sw6)A+DX}<_6`?XjXSfEnoIz3A0}ka_q?PUY zp@+BHi+!f6_1jg3AK@~P1^40(qqdp?4=8}w4A#yLuDY|>myK~y{c#wj;%8cB=p4y1 z`nkq%D94hEs`)}2w4~5bCoR*?NBSw9D3T^gCvS;bK$WQGfn-nqGU5h2in}<=_NIV_0(igpDny22VO5gu zU=nw$Ly5)NP7$h=y>{LQMu;SViH;=-Jh2VUyw%>um9*zSlnK~MWM z3JqC~-xQL~Z3+x1;ICI~v|_rt*6dQ=D9UI(;iU*gQ0JOon1L$h<~jeDdY`pJPqbS4 zL2gUxlQ~G)tv8)`BJOSqEMy9FDuA~uSsU=6rXlk-#lhUB+y#|bTrCEv+|isC`@#%V zEI8j|q29;s&=##~OGvEdJ)D4i-Fn}Q=i=_Z#-gS`j{dw$6VLlhn4#eV^N!hYo|aFh`b43*x5_;rrJOJ);+bAXTTfoI$sldiE$eLx zWG~y{EX|>G9UV-mN!72!;_5RMH#IpR288J>U7hMF}>|W4dGCZ<)H?3 z*g%0;X_*VA{>dJ~QK%WK^qa}_t=*3(;4fHYB;&hy;ubnaQAXX-6AW`Ki>U-6#G;(QO9QIpjQz?mG&Y9?3zK!;d=CpW)e&C?S(jR7(Y=h_T_S*a;-uRwa; zxaYpQ9(8E-yg~+$DMV%NK`OFlPiAY1@+8j&Y#8NO8j`1^1V(vl3W;(PPO6;O65&|e zoIne8%Xy&!(S2jv!Epeq8)dYfG**Nns4L9xOcMT>u+vu#^vy3T4m|YaoPxjGB7of( zR%i;eDnRZVGh6Emc@C=(Y;cd(lNK-*@x0ai&LrV?X0NjVg>%bFqA?#GE+4v1I)WI= zqYA{g_}q^+beP>JK&iW)77kLOP^<0Fi~{F-EUP6=`v-2^N;9WLaSk?$x=^E%!t5Wn>m~wEoW~)6q%opD1y4m{Kzyg z#<8ptvbAqu8m!h@rM%D>EG1lnF$GpBfOmSZzk}%q8Lj7?Pc-g%?am4F`e|T{cbrQg z8?2cZD0BsDW^?Oh3Ot|y-swST2h$Cr|DIm|Wd<$vmFYgDfkM1xule~8go8COzpNC` z99zq(E!z~>PXWBsW6VZTM(fAeZ(Z%A*_vXV9Gvg5)N^;q2%Lj8gny#%K3LgA9cO3)mJY0;m;&n*(7DPErGJXi`u@&usC>UVaLbP64SHud`T@fK zGi{HJ;(LLSp<^yn;9Uyn++~N-J-H5v?)JME4ywC;JUHKDSb5r2t&&K~jScLWjiQ3_F(( z>brV0INxJg%|xR=nZ}zMxQO9F!9c&Qrod|zaCdo-{^)}ktskVnfBDM=0{X|Yztl|( z$v|i})wLucpkG^xEXNesSpm4rgA^S~Kgei(f9ID}>KxOuVS)a!ETf>_ILw5WQVWE` zRSDK$Oo4R@z-1mJ;840jbVzi!e?#G`B?9ut@&>8fIfl73k0(ZL=VO_sz@`egOFc+# z^p%a)57K`_`Ku)Y^2hQ9sYM*aXj&(vk0=_*l1%}91#}*VL+NIRFRL5i7YcPwYK>BO zz#sgb`6K^4Sdl5PlLGEi4>FRzs`w>I>j&w+wj6bP z*#JoUSYO6mPM6Gjnd1oG*G#UFRlH0Acou`K9ZD-m{1kEDTK~g&I>$9zKs?|d_?bDR z4bwVHs`hBTw4ddh0*@;ImwK>|>_Np33HO5}exdx8QX%PM{e?3c{iPvtUFL6SW>bDz z0e7hfM}(KrisB#AQQ+;vXs!R{Jk;w=8X)H%I^i%fSncOEP}<(aGEIS*3W#4pmYhS$ zhH}oRDL$-Rs`(-XUMLn)KGtZMFK@}zXrALb`)+W|#`P}OVy3_=6oAV-$hH1>XoI+? zJt(S9&3>O+$oN=m!+k1F=FXVKQRCcVq6JKWwI<=7S zvHsY}k;$`WR*obyn`KT@;6)0+r5OtBLr4=OUnK)XJel!pCddXKC*&gf9ofnz?#$>W2c`RxhQ{asX zxLZBQ9G*riO43tU-`eN9d9M--$ezo0PoyvznZ05HKqjjIZEjQGH44DB9^@-Tap|OI z;vg|IGYWvX7ks)s(-&~nzd`BM zCVI4)`lJle6qu_(`V4yd3sGD;X_Pof%*?z3p!xP6Z_jgkrg@zQy)ZsUA)2(9yx4Z8 z!0QyqJ_GR-4yCm$>6tiMk$yT4RNMUX?O7hi4<1+fYExnE?H`oQM*f%r?uL&JB|}NF z;hBxH__g{|w)5W{Z#_4h?ZtI#qK}Zn>GR+it*rTC^O^#$Q2=iEAYUPhOD8=O2Z@_wAcTZ=lE>IPhXzUrxcBHtwl_McPIdtdyuR{X$47oCXQC5pU(s3_WctL z59+lbBfn$)<>RRjPlSri zUlh(}{*(f6r3YscqPTR@GjWiZnYRj@(p~?@eYaW5g6?Fm|6RsmVPijj69=Eojiy>l zG6gnP0B-akLx<7|lJra*tw@&V{{J%B_J;;e_F8`Mu)_Fl!-srowbfddDX^~s?mmz5 zlc6Np@Tf*v{Am5D-mX71aIzQ0A3PpEe(UVMfEumEmS+lVssLQ)L3TnEmri;n4iYo7 zssPBp;lBX!%nqYE#`hA!_|3D05^puvTB0eisRD4B2ieI`(ro7$B=N)Lpy+nra?k5D ze(-$4{O!Ys8noJLEz=a(Qvr9EN4d#Rl5BWTqbz>79u(Z{WA0g<#t)uOm|rk_C<04R zYpJHdmI^3cWe3wbVUn%HqP71A^FYC4*=V>xYA;^XB=Q1CI{G3sB*m6%3hbx=+~q-P zGL$sic?L=Rb~%W8EZgW1DDA{*qC8#zQBPlmhN#+-O@R#+aCdo>m<%P!h6gpu;CAgHU%$$u(7X0Ls)O= zroeUzxVt<`ONNqU!-E=SVf7&7u`JgjP&uvTbmkNA0!Ul?LNufRmTwAdrT|>!QC1G7 z6(z}5V$s_F!+D_Ou`C`k5IL>IWLC8I0!W+tLNufRmTwB|rU2aKL0U4DG~0OwNm%)* z0El}mOZ5mePHQQZHO+$n(*B_mEGdBHn*zHj;I8s0E7^lcvJ=NBpI@#AG0$b041~i{ z9?Jw6`MHn8TX>A?auL-7yEceVHArO+@^fi+OuF?@e8+AF`3=@sZ0$k(FLfng=4 zz*Y*lyF5w>UPLQQ{D6ezt!;ic4+UQGCkfvijh{OQ9K7#Oa-kZmpVQ9<{+a?xH`&3o zi-S+eRq$Oqie(lRKuH(;(D>HgD6;%$zz^P~ey9fPqbk{0Kcs-tRdz7#x{A^DD-RUarQpKSnbz77^^Y`_E7*X^C%$)BSP`dC>XpR{oHH2b_M1uh#gC7JNFl7 z;_#g#V7XsAajeV~*hT?&nMdislaRsqcZ3EnNAI=rknP$OKndHj6|%75&8pC4a|j&1 zmnPQxwHL_hOo2@lfV(`(#=!_t{5wK}*Q3|3JZ!rL1yH+&RD~4mR#_D~Z4CkA_i{|s z>jknpQ(zYb2HymZ;b3qlSlOfEbu5G%o?^S20uyz^R$&El!QrhM?Kj79$le*S-mkqt zR%Z%qq5$0GQ8oiG{xuy2r$Hmk=4rOOQvij#%TbA8qp)(=;CB{}erSh-c8`Pre(grG zLQ`Oo0{L(GC>eMXJuvjy596klfU&-We(i^L4s9%nwVtO+oVs35fk|}JeyG`<-w^ZyQ@YOxJ&jS~F>}jP;&{LNQGr#v=E!Ah2WPnbR z63h(}7p%YF#~Q&JioGSMW~m+^7%YBn25xzRm32VxY^=o@xQ`;Wbh8{&KwklNbCU~w zIQm*LSUE(Fi1*du2D{fAd?5q%l+J>6EvppU=V!ouOkiYS4i^JBQLvY-bR~803#t z37i81w;WkgG1#O)UBbX}O@XBfL{A{O(&&(qbam1y%#XU_mamwcS;x9(0Ke!0HEW}B z(c5=5+=h74tf7XdIE2HOKye4JQr=;!PFO4tYbTJEnF6a6fXnOKhszvWKBdKoVOwfQ zPFfzbNi%NCNzhDGz-frP>{^h$>du1oIHOKd2s&Z}#kNvhQ9gDO6@_Fh4{L~-WeU7P z0e5)=)o__JR!FN^P+UtZ#k1uZLZ>T(;W9G;b5R9AQ0gK!L^~D&qG2)yGQem;hQv2A zTv>L+LROslqnH%H@=bx&3b;2ASn$`E?n36R6~o>pr@>Nr%IEUL0HyLc@5lF`W>$rQ z(hcq`+@LeGl>sFa1|Vk1P^H-k3mE`odTwOpmTd|wS0H`@c&9I7xQW&V(lKm92~D{x zkI48fslO{HX=Xa1GCFuw1x5x&(S<~0km-PkLsuE5JR5q+3!#E?J?(BFD>MbxDB!Me z=nYpoIP(7jmBh1V3X@GMIV-Ec7AYUXw zNmQD4=Ft7)cAjdbZKeoZWT{}>gbB!HmQo?F6t4QCKGl3nFa`EfAbtUOqf?d`p=+82 zo*1^6m=83TQz|(-4{qL|Ku+k4lA&OoVG}OiA7Zi@*NfpthIrbj6|l0jdyNj zh&($1;|`w;Zoiir1z0JJ<(mSF6yP`5?}}`E1~t-bh^B!yk1KD>&HwwO3!xFuCgYMT3KL$I43K9>P|4P3L&Wc;21k}wTfQlwh{@RCG^`4pU5Ix`5%96~*@L|}vPU(; z6nKjQ{0if)&K@)4^{PZ?9VVaQ>hrN1FSd==n+gkYsl9UB2?NYzys|}p#>ltUP~$;6b~73TdEQ61m*&I>4m<($jV z7p0fU3+kxWUa|dnBQ+7Td=YxDRfHFkDMs)H3*zX&bleM9EO)E0*wRgbtrQ@)S;mVL zGE;^^vd7;O;}JHbhnY?R5a--@oi^3xvtxe#}6v}*`hcBgL=Ik z!rbx+B73cN@GywD?*9mWU(eDa1M zcrnfutvu=dyJ);)+b~m7)KK%16dWz3TaKi;c@H8KB=+GJBi|u-8AfoMWeU7g0ld(I z?3=!Cnyefn z37f+dc$ortqu0^~7WyP`ylB;Lv;;Al%5AGm;;L%FdlLL;DP;(y0WFX3Ej2O(I7BAF zT&BRQ6i|PDm4E8Xi{n`2W20XFX8mpyc744cB{FKvgy}W7o#KA9loW*0fSSiQml_EJ z4v>V+VG6uW0p;iC;G`lblSte1hwFD~;+s5vjL4|XAWW~p?Gz8AC9EKn_#bct7L8WS zftSTm+nWM!Qvh$Y7H`Cp{iz13v`A!eJTq=&bKl|QgM?j;eaJkmTK1dbbh4PYi^bj< zd&(+nCnR`Q5;lh^@G=G9Mys)AFQggORW+ygCNgqi(+jt_E*$_o6<(q4v?|H(3iHwU zY%aEXo`_+d6i-@B+4`FT!wSHa9>zfc_u&c;1^u_HHi^4tff}>!N;Zul|3I%zN33&e zsQ!S(M>}_ZCe8 z<04TsG3#2<`Hhv0h8sWH>F}E!3}Bd0LFU(*M9pCeyiNgkrPXL3Z~==vm*C7<$|Q0v zVjtl~%{Xn}J+h_@!AD)GjfHMa<1hB`(a6rvL~f_|tuugOOn?wS%s6U$Q{Z(96mEL= z9Lci?Z>Ef?O`_b1MFKTuv7Bu;NSP6A5)vz~m6gAK!$ylXI}QgFV``jv9JReE@Hzzw zH@$a`11>Ek&n69?9%T~wCRs0`#>{N;PEOC3k!ljsm!1YIfBlAymTtD24=BdG81p!2 zdsED|NMJ&W*sB6tWy-kIA#4Xv5o<-L&Qv9e5(BrWE@QVi;io9y^(-n|CS^2NVJ&IjLkEXMig6;Qs+2V6~3=y)!Wik@2K^KoQy ztcBY0L?L(w%uL&UDgd`x3-W*y zK;ctztDx}dR3!FvpALMacE1*ZKwf0Xiuw9+-WT>df@O`X>riO z*_&1PM_}ZctdR^!+&QAGmv3RnZ%pxxVP1X~Mqft(?XL|yj_@69pt4li zQDj7aK|+5Y6&RuV6PBC&<)iT9d-*U%-xN3$fIF?L1$ihfz>jcfXaie zGjp==89C#k$pf>PPwE51P3rbkn@=CnQ=%E})(W^gtxu7@l^XiCUk4nbHo&ZS6CX@U z*NY~1&tg8Q4-7Y{+e2+WeL@duX0UrJ@Z`g!@8wp7CrR8kt_E?0YT}%PR-uqKu9O}6 z+)5)Kus<=>r%&hum&`_xD*$&|Uf5Vc-b}ILX%5B44FTlekUAm7v1w|A#Ltx#&;XCH zv{!CmwpVfwq}d65?TEsdX8n)??oK~CFnKolK3jhskbR!|T(3+hWX^wQg7>uM@_)P= z4EK1SM;mu_w^z)6_e+k9gP2|8Ex9#@%cJ&Aqvj>bGs5ZG)W_@ESc0?=XwBDwGk^=5d zD}hyE$O|I5yMG-{euVBi(+MT*e^vP+hk^g=-QO@^talHCXXDm)&tmLNfm4C`50kti zI0E$Sdm>x?%*cQ8E`cMl=O6rx<8@Qb==5L@d=H-(=0Tkd`aKG)`P}fAw1$J^jO3qo z33_wxA=L2?2F>Xq@lx1rx%46B6W0DWsYPaXL@foDV+w4pfV5Xu z?S76Ge*B0k$rd&RUZ4Qn>19mGn_9-*&t0yH*1bUOdqt1&y521fV29g`4{LOmuh%=B#->EAcR2U4NpjVnn2H}! zZcOu;0xwg*UFx-@Kk;>VUP2X__($w(fBCN>(eo#H-{IRwbU(XAzp20u4-?oDVQxXVKU1*x&u{aGQrO5#nD)A53s$m}L>xO#>d=e}_pvrC%Cu?I03@HHD zcnD*(7@yK8&bRB8R6>{?4qpAhJ~32uLibyB2@TK`ct8Pniyr_MK;lahl>A;QiZuE! zR6NdQd`w3e?$uNA1A^m@oMHRwQH}hsD6qxD+=9gBCyrm1VVVf!)?v840KPC(`G9!j z3$yNZdyLIv3c%HU48H{!pHEBf&*o?y6pF2dx7C4sVkmY(iM%X&Y?1_Xm;(DL;I8dj zUifs@ve>&jXf#d|#opoI$ES%9)KrRaXKot~h^EY>X1z>-P6c-O+ z^UHaNw8O!dS$0OgFcdqWP93bw6xd1uxYSEI;lo-=V(;dP5+RgZ_a0l!?h8Y)0}?A> z1*X7;3c#ga$_yXYQWASN*E=Q@+pT*~EoP@Dleo27!KV*MO(g?*mjXL{Zocq!c=pus z+oRA0p>{ZUg>g8<7j6Y$Oo4YQu*1W|hxJYcXRy{(2(jEcgZ;!FUl@uV&_wO5 zl_~I;0&uAx!*2n`ht-n%lR26KA(mS|CMOK{>Zv|`K(9U-Bj2yU4xgJZd>#5vprH~! zJq@YV6vW!$;HzY%317HL?0}>KSiUK+qXJtz%q>Xlcsj^QQy}&k``Z7FpBoNkd*{jy z=$#`NYg2$Lp!o&k$n86PSnU-*mZ>QaV!8EWLc(ybp6b&F^y-r_^8E_z@VWWI*P;Ie z8Y(pf`t)Z^Q>cb>c_f7$&?6lT)D)Pkz!nd43lfus7q!zAh<(QFugyf~FeRBC(3FnW z#1wc~0nIO1FI9Y4z4f23Q#~Y9`&vIHovKiav|;D-wSNv+q^Y%Ct$@4LYgv5Z>+q<8 zngV_LGo~rjqbGU;&JO4%&qAiaYZTbxVQxWU=Ofb;h<(Ps_K(YMxSfx(%I(wVQ=Q%t zzNvub7pzwyd|AEqpRZFrBvjk2-_lN1s72Cz`Fs{hYHgP*u*28p3ttDxL5lwnp()U( zKVzCgNlsKVmmQEMuwj`3s}$JcVQxWU;t5>yO8RLE1X!Aol2M+`byGdt<6-nqpU=bE z8T_sa?C`n4m$j=#>b!8^)<4&%9+Gc<8S1kw1ymJk(Ij6!pGA^d+vN(lTfLUX7rqV> z1=*LRrBG8K*1YwHu7%_dIhsPPn&;C8v`SR#yH+`M!KU zizKzS%N5w+W$wUX>Ot^NN!XQ0s0tL?9agF1JN-D?JJ~zdID=c?Jc)5P1yBLF)wo@= zZb4%9==^&Ub~zrJ0)&0X6-m{}YiC*#=b^O~Bc7TlzjaKY){G~t6u)$Q6 zS_6WI?bbCMtg9)Ys{q_;T~I0779^ykwe$J+CA(8;$&pncw*dLbTpt-@iz{Iywow4C z^-?}Na9An;Hs{}%bccCED}x*w00^k`H$6RPiT)u`wp~v^J)|vkJhiezr*seG3vbk~8D%TSGSrBq-c# z|Divl1E0(9GMQVuJn_renyQgA1zHt=Yu%duNZt+{9vN%|lz(shZUoZRdZ^PFhuaB( zjTSaLQLJ(av`?#=ZV9Hq3lzXxy_71DSju6`=6E`M9i+;@2C?=lXVdx3emqNzJmt$M zWtra;c$ETht=Dqig2Y-0irx8l$M1^y)qsb%jB5G|6ZnL0BXH%Eb@wU06f>BHE*iVq39?OC4$8S_^#Hj?`)aNeeg?27I1R!`)T zwgM7qz&u_7Jg8{(@pgkDw3odtla1*&+fU({UdHxxjo{u2z;&8M5^rzPZ!(Xh|K-?% zM4sAKUOYv<3Mmd13wte3=fk?)a#FVhIOE$?3z`BI1?X+6q-um|JNCyY3}`gz#@K>H zH~YDTs1;u&9QrFIUG~Z4^Sa$W>=Gu7ZW1+zDIigR-KOXN1}$nA8e%}gT|E~_sN;SW z5D$&5&BOLpHN$V1$R_ri4T&CCh0RkFgboGksm5)%K&ma-vQUBe zEYW|z@~ZpXuSEIGbhq7vl$`y}Y)HYggj!N9hbzF&l7~vW zj*=48Yy52Hc(c_MoZME_jLd5l;I|5QkBx&3lJ&8UO~62>Dc6!>1;Sy*k^Da7A67o) zb6z%cy4h%6Ms6csM&<1au$$#KPfg_;FypCiZMZ(Kd2Y)HlOl}Mq@LF1#}r_f z%x@kN!Q&ssLoFI%fk|Vwr41=SkA3yQ4-FzJ=2M6J9{JC$2v<9q^U+2(JW~J^;1>;d z56Oe@TfD7@W;9r?fIsuo;GysC*wE47No=JooXmF*#3oy>0KaRvdxF=K*zJ6QMSFo| z4k&g48Gfjaf6kzwwZ?rohur{s?4_L^GEW1wuJaV`8 zVZ5)3PmMb=2fElw;scb%sUv544YLVTiO&1`x@X5S^tUOHz5CtQF@0ML z^l&5=H2%ew@%{M;4WgmL%uyh{iPeOFrDDbXR6q^H6zEVOzKiMWXa*f9ZSGM^gmG$V z7S~W9y*nDHyJO%L!e=ec>AM9x7jGgq#aYfw zQ6PV3qOWSE?%l3v>dY`v25w0vy4XtMIwnIuH#)F}VhW5XkX*~l(T?cq+w-5ugc+WI zHq2Oo{Dl$TnizEZJzgn{ppZ+JeMm z(`^Qvzbxq8jI0_Rykc%G!=es+4f)*fcOhZa@{nkZ0$RN(pr-)dO1{?dA-|sZWQHU0 zWCz3c3S@5xb^6Q?893ix{i`}H>bdSuif37P0ST{u(2Uz?Euv5KzYcc%Q4Lm;FkZFSjF0LwQ8rYVrz z*5Z|QnbU}68v)yF%$(W^u)9$LCrPE0SNX|2rzzncmHO?8;WvpP=|FSUfGDWhrodwg zBscbQMC~9c@=o4vL1OaE%i8g4aYKV7-ekQbgjdY1Qqn|vVc7xR$~fG zRUmWu4;P_;3B7GfZbgUJ5cjLwV*e!YTzS28F>i=E)K6j_cb zuv&rS;$Dv9pTrJgA-0qy&{)dhcbbPoKdgqaNq$52rYSf?|L+WaEf?A~smFD5t1OJ9COFMregwurfP>(Xlwgwh zy%|bU`4lC$HnlEDx4riU*4ijmTn35LuSerJx!FSJVmz)jV_hHOpK zVh>9{H*tdPO@TKkkX&T%SjQeHtRwJCo&9-VhIn#PF0NfzKxm)lFcU-o+$>(y(`~bv z!I{*AkXfd{s}xA?GB}nEvAX}V!B;fqr{BYXAoP^4s6om)f1Du`IAG$4Ol-{7D2HxY z-npScvrU0_DUe*}%du(($7WUcAM4AHzIS+n(hD)U&fRe3s|GUMjzXjgW~m}%IIEOr zepBEb3dA>h-Mt1T?~v{7ETdx|7>6JYpiC@12y6d&rt#_$se+lEJcONY7Bxp423v&o=aY z6@@3T6NeGEA~Y{k3=kDKyvSMG#w70cH7tvp0{bg~H~eCX8@A4v!8M%G$$GHE4I2$% z0-DC36f_uRFbGL7GfB;^Zitjd!P88|5>0_^6-eGm?zTV8J|XdR!(YbF9q{SX(S)Gu z0IH)9hQaLa0uWvGq5YlJ1#Ly9z*Y+6-bwD(KT0}B;?agb44yk&=hG5}bkKrS#vu%Y z+1F!Gy3oF8_3^SQQ(z|r3hyL$>z|`tAn{zoA4bldEcoPr2 zEjcNxFa>r~z}@W}tK6;6<&FEG(>RbJ)D_4btM}E*n=?G7*5AlAcWzB241?KP40%u} ztcue^`-~MQ+ujs-odWmoBy;PP{u-YNbx(q&+GbP%ex?T+bBv<1dV0Ju&!$b(`MW5D6u(cqSarzlT zr3N2DB4=u}Fbq>*kpk{YSDWW!B`7GsPtpTYw|A-;1YHeN2voVPop-Ra zEXSQ_R4{W@<}(Fepn%|=WG}zUhyoHS{eBsQpCVO)M5tTKei*(=^Xz}0RL@B3-BhW+ z!{eZ8|JwmjmY(#Sr7#@d@S2YZuXAvFc~5i(dBVgaqq;|=bJLi4+n<3EYG z4=2$k(4;Ewpz7S(`Ev7`0{bf9F0_DO_5}#)GpPWXiI_`W0e*fQp2T=SZ%0~4zv+V{ zT<1ZMxE#ib-CcVsP1Ww|U`3|D8U^~^N$wR4@b4or(D0W_+1VvR_-GPQboeHRp$K~q z1x@dh#8HPTF3T2BSpwUPHw3dd<}?L%Q=t3G=B|J5a1N`t+Ug_<@N-KmeLM|mdVHJ1 z(8MicLC11JPec=xN|NGcqNl5ewAGjbvlVdHx36pN>h~Z4PEV=TNEP6RmZ`>sOi0;< zoz7JmIs@mrWdb8E7-0m$*8&zlf`H1$L{qvF@KK(*QJ+BB!PC29&4>rnccxtJx%kBrwQf@PTk6$SL(N%rDb zx4(z?bHOEU$gDxmpJ zkT|{f-o{{VeS$=;kNFM-{E3{#og(v2CG7;BbGf4^iKR^>)umibRKN;LscFWq$s+@A zE>mDgfrsvAcq_yz5_LJnumuzqAm?$Icfgo=m!lJdP8RaFa_SFfaW{NPoBJGUYQ|>l7@*6nI7f#dlIBn7$zPQ)92HES-8JI*VKU zSqJ0#+)^QbgLa=sqWm9cTAGmJHd9j}zzRzn17IN-VG-9o7kn*uMwLSBFA{6_*j-iPPSYgqjXeg$@as@QsNo|<$fbv$Y-r@=h zWTY>nPP!d}HiUkeHbxjO+hE4<>QIMaP5?5RBB}~C12F~06qtOYlea`2W0P2QlLAz5 zZk+P*mgX`ArYNBKP8ta(&&fL) z0W57q0k3vsWHBKp8`E=kbRp!+JQyz9lxu_$O;j?IGlg6%-4xhW0nK;PK4bEt*3f7t z{GH5_^p`O&`V^1ko%k=(Hs_%K|yDHO=vil_h;7C9TMFa`Ehz}@Nv+`@BW)&eHK z)sm^5+YmW0Ok9tcu1^Ov5- z7{?0Q6<|siHx3WO?dYAEuF+8O2@wMTf9GbKIJ0}Ni3(U@>1JhxrodhbXugx4$-<*z zRu7cbv?#!2ZrilL4&?xiehe}P1!1^sL$ii#MN~3`Glz&-u_>^T0z2I3sG*2TCQw8j9nk7cfpG=kZjS>EA|!9jUfQ6d zh4M(~kQD{UHsm~IDIIpi8Mlr#?372)L`A-SRpx4Nrobu%G~dbK4E}j>V-VHKxdL3= z=-+5WLD+JD2X>l$G9x&~noWWRil_V|+tB*}5w37%Af9mS zGC9gFXsLx7PvCH!SE~o&D5A!+CkT&I*lG$qssP;WM|()YllOKyq#%}GP=Kjh$O-@N zpOg}G{f?6+CY$oQJmAr6a$u>Va?*C^mCwrH)+wO+PV~lzU!2?P;r}iYSN2YadEdEb zE+L;3cXtza#8jyxM_fDjScxgHqXOCI9IiVueHAAZ@>(}x4xIGauwmUsxrr+E zn65HcgEIvdDWLjH^k;}4-nG|n^Gk?K(oF_;oSq@W<~=sLT>xDP^jWS-Bn`$C5G$bj zPQ>jS3gWkS?HlSWC943JGn+Es=}0}+_raL~T8TO*s{Na&MABeP0kHxPzi=_1Y(f0| zUO_rL$$BT#ay^}k0dRVj4INyslP-12@wD}L8j>lnPyyX%^57ux3v~Mj8-5j<3AxFT z({3RdUT1V==7gU!byymTDX>-n<#+PzFv%-C9nZG>96HxIb?_c3Jn2G0qKMw z+-6Fm#NJ>`fsz7myUxi=yd0(J%%3R01Wcl99KdN>bE3g$PhIMSm@`M|S-mN+g95tG zWX?p%W4s)5dcVI5Q*V=T7TiK2!;lCLX9$866IQywq=%WNz;p%RVo&co*f4pImtzq0 zC(5~Un~dy8%_c*n=xz-d-SxbXFj^xCr(-))KuLiYU+3geo(?5hz6--t+hk1Ow15p! zqp!OzbwbCPeWa|)6xd4v-Dfg=w&Y!2j_EYs)R0NG3Gt=3kO zr!a*ulWI!Gh9-_wL*i2@Oclw^fxzMR0Sf)T;?}>RuKU!)#N)6nIjB_?5c-lO5lO%{AJDKag6^#9X_fcOe_h}D-NCeLRCnuCWKUv7JAa4*`|Ogu%!aw!BT5Ws*{Gi?b71YN_^1;Wjw5oxV7F-`r2MMm_ zvCDOq;5Gr~nwZZNFafE)rZ#vJ09>a0!4j1B_XwfGO~D1(NrDIbJ?go<18jpEBDE zlxDY$`gO5jYDOD}kItxDev8R|&8L~y6fgx|s(^pn)OhJEH?-+=d;Gg7V06QIN~nhh z6Z3x4G(!y0RAfn}fGO}M1>$G!_HUY?%9W2;O`nkflxDQL>4C!Bq@zXHiqzZ~zM3nyUnp>yd9jFxgZns?Dii1g9-`Xq1MWn0V?Fa^G$fPe7Jc=K%A4FZIgYud%b6_vO%t;420y_9KwQ@|AX zm;&JgL9DmVNJco!4W`b?z5^$=;Ofs|;;j2mTK+f16dOaW8iqYC7{0b6{f#d@KXz_fD_9mb1x$fYE0Fz6Y&S7uxttxad4z|ABw$3WfYfFb8H@=0fQnooBP^e1XfIl-1l2obf41@#op~}1E{5#0;a%M z707=owwadGTTKhtJVJwG^SS*lbk4X!uw?NbrK|?O?=CSKa4p3YFak~?$FPjs zYDz%n85$0pVzb%9=1d7Y(SL3RWwc4BO$cxk@woTgVZ>Hbz!dmV1=7#L9$yB=YyH_= zbRMArgGShF{QM@WxZOI0+myy&o(umiiE}GR z3DujBM=3YY@10?Bvfa>QBs zd)`-y&#TE!3iNzFkZW!fhPg_@mRJdxv`GTs9i)pheZ&k?z!WeAx)n%1EtjJkuC0(Y zZ7U&J{u9Vxyq9DyH-TX@51c3zpogs?d{`J^&b|#o`Lz$ms!Rb>z!ZoT@ShcG#7T;K z+D86Ybx`g2aHwmiNOTy=(QAicvte0gMygu225UuY(nwTo$)D>gJk8ZDiM&Hg1T))Ry>@BRR8Ns=iA6&}X3Eo5LX`LuXi2f7}Y@fs_dC?v2=RhDE5m;$Cip90A@=W_I6MO7R+3RbsJUCiU? zdaR2LZvu|XO+p-MFNnsBfqM245s)4sPf*j0x~9t>D&=KXLjOPnJHijm;w?7l5fxHkN{+IIc6r|*5#^iQ;s0-aqVg) z`f(u94%}NXdLoWtqFFm}%QOW{0aIW^f#maZIrt(!++tsTyGn%RTrYl%R z&8ciYWQHkV3YY>*lVO zM=}XVkW`+zP%SLuJ+GY*L6%PYwO97d){cLlNjW?FKHs9IfGJ=KJf=YUK{`Fn?Ra@} z86-lrw9NlN(e84P+X@Oz?Asa^?4FIG^lk`cXZ8YFohe`nm;xFKBp;>I(F7b-Hr0?M zS56!PGirTq1=Y3G47zjG3Vj?9{C=vD(x2MinwbKofGLnFkbam>Pns8bcv%#zZlSuG zS4!aBuU#os=+7Xds}Tv(8?&|3kZf4BI~blRU<#N5as|RSiCXtKG_&DnDFTD)$Sc|M z{%$9!&*$b)gD+nbdm%q|Pud5zYk5o>*V>o@rof97NWM>}qs%`_FDK?Bt~?)W_C_48 zZF6xhF$Wm=a%GVZDkAT!ZN&HP3};cYKBj;vU<#lD$tUV`U@%&FZWOF;p}Lw^P2e=# zu3A(`$YJGtg>rOb3GOGa*xs*``&&Cxz!WeA?iKJ~CuU@7SiJOOl&Nzrs4m7O0nWtj zB=wM+z<7)#QvC6~N+8{r&o*MZv-?{=Q@|831!@Y!-zm3`s-mPQTHR(bt5wB>h)oYV zhlo1yUfC zgsWC4%2?HE{e%n)`<>C3*$_QMO%tY>RJ^%?Kg_<&{vM1RVBhL@q50;Yf|AXb2X$kJUM5Nhg)su?L$=ee5r z;6O`{L5u-7S?SgDEFsMgQwCz$rhqA63T&YO|B&T(_e5RIea<7%JXz`;YfF*5JqFoW zeRaEXec#|}#IQ6|z!WeAHc^0o$cno%TPP_fJQ*qSb%DXw1@uAGhVrwqOJfuoDlNqn zFa=D3?G#`ivinV*JJjTZ6TEkv2iupS2Z3wlXX7h}GpLnW+!QbcOo0s*;2$#oeT)9R zfX_-Nz)%{Q=s^hsk`S4GQ&V4;Pxztw6%urhqA63aBW+zGK&h!=~{l2@`nPnjLcS>nIHb z0vz13b+kvW{%mmhStt1E$rYH-6fgx$fo&DwA2R&BF}g{Lb3hJ8S;@K$(z(`Q8h}P{ z7(Q-DT*o|tFC^@6tvc9-VhWf7rodbU*oW-gWZNfMsUusr#_7oow+AGSS^@SU^Pjg&*EliSXDZgYklQc=2b98K1HPttot_i+Dt!pQ zla`g40;Yf|(4heTkm2X80F)#XN19Xur0+DFa=D3sS5B98GPO943e_TQLmeo0sKbW zHNs@o80vi@o&XGa2+@j70aL&fSfl{^km1*@iAz#>IhsnJPjcjj`@oD1ILd0AaA#Kr z+d#uoOaW8C6xdDy_926hTQkYH*zKFkpGyQ{!wqBu<>ffMavmqtQNLV@U0ru2glqn`UG*q1P&e<|GRABO=1Tv{7L9+r*s5H_}SQ@|83 z1=JLXzGRBO1_|=vP@`P~Qu;6}z;GFAyrVcTo+n>K!?vb?DPRf=C=h+gbbksG@WU~{ zRZ!|W3kve73NT!Qe4C5Rz`tb2PPuu4uiqla*tN|?Bt9T7DM@m< z07>}XF;sjHZBbLe6fgzmD8N5t$L@i)NsnjRQ0CB*x_WE{m}qz*3tlZOwscd#6fgyL zP=J5Pj@>h)k~XK~nN}An^c(HqV1`hD2`(}$tb$cmY}uxODPRh0p+NK{d+_6*bUGbR zY2ccTq66h27{KU*8Y&*5ZN;X5DPRg{DZsyE&wcnWzHzf_uQdt7ah;f}V*`9UDnkjM zIry8bq2i_vmShT;0;a&j3h)ovv3s~*?*DDb2b#iIqr*6uQ4~6}5Q`s=u-MW~0aL&f z*g*mQAv<;xNF_Z_hi+eJF$k)Ia*^nRf~vma!Qrjk6fgx$0UZVSm+aW-z}8Tbwx^?3 zB#1kFK|wYZSY~5#XUB*@K$nM{xmB0~rhqBXuK@p$9lL%gab?n5uRTDEDMbYiCUTB! zrSfu#Mmk%qDPRhi0*e&jAF^XNmq*fGi2>ja4x@uILW1ct0%WzOfGJ=KtWtn|$j;4l zA_)Tx5&$|lj1I~G39iimkd>MOrhqB1N&)^MJ9bNmBrJxBIKGIBVhv*@4R<&J0kq4~LFsA@MNEqkAgeV6OaW71l>+QTc5YS?VSN);Qf2_aK;;`9 z6nWoJ!Gs8IvrGX~z!Z3o0_;O}Zg!!b5EGGe)uXfMpbW6!A`AdosVQIzm;$R5;2*MM zw~9!vZ$j>Lqr&10b_pnQ8<~IdQ0aIXK1)>kx z#-Fl;>FFp53(2K$qhAN5u~{w+2>2zJV?I;B6fgz$R=|J4(Ab(TlB8>vuuI5>1Wp|k zLBlwe&Ux8!g6&NKQ@|A1UV+zr$r8ec<9~a1yW}9M1OW8?-+GdW8Kq640)C!fDniqJ ztZH_$xAq3*G%1WP8>kay*`DLsd9mZSo(K>iZ~}q6k;RsMz#>A@kAZQTX~uYP@l%~B zi?A+RDNI?AqSfz0_D`j#4vPs8xUoRq$VPt@9N#6TKOQNoVE^Vm zuI6MPrwrd}0tBuikT^ZPVHAPsortaiWL*4MA5g=nRx-#HxQ5j0RpWB@cnA73D?`7x{I>pbh0dx=ee z0D(3Fc_;hTd)s8ONz_p4bKu*~-GXm38ovt}H{MTp0t5)u7r0p`3*|lsKB=b3pI&b; z9@5=lPg@WmK%lO`{W@8w_&G3%nr2SE+h#E2y3MwBAwYmYMS)v(vQYGMAfl#e@x^8% zd7_(bY$E~$2vifeYbVR=em##>`zhnmEuZ=f-q$TRw-*5d1gZ$UJ6L~HCF(hX^d*n3 zgVg)+!O+IHeFpFA#{1ij009E!0`Csi-;{?uRfN9m;WZV|5A9e_pF)4#F%?@AAV6TH zK;Oao>&h@^Ue=fX>AGKSA*20Lu`>Yz1Xc>@WG}eDFdSG(TVdHSi`RXHm_iUBKww(| zovil`67PY2#`f2D3h8G14D3jN0D)2goopbOWAx91DVyH*`@gT7?rt*z1PD|Sc(<^0 zQzht$gXA8&vV>$#3@dd41nw%Jlf^F|OkM+VUi*=dN&7ABK!5;&$^v;Os~rBU;c}Ml zdFyII7F#D^KLP{@lndmotUTgnBIGo$=S`~%8Em?{%?J=6P(wf``>Ggt9s^$&)O{JY zuNz)80t5(bAfS`|LJmUP9W`O=U%7fufB=Ex3FNKpco`lcqg-jDqb6*71PeJ3AV6S| zfKE1-D@bkd16tT~ZnEYPAVA?SRHJ7Vc24Nno$A-2pm{ICoA|k0q;3b z5HBnZ8-y7K2oNA}bb-8+9X;P;<(KQF=UPdI@U;SqLx2E*%>;C^BI>~R9w-XiFMdbs zZ~7Om1PBl~jX>YP-q+J)euzZhY*RPo8HT9kAw?iSfWXEAc_-U=`?GJC^X1QF_2tp( z{=1*D+^i-*fWSP3_m%(w0tXb($;v)T@|z42Y@Y*@Gd~T62%jbzCqRI}VFh%uvQLxz zJ_QN9&w)>q!+2aBrWhbVfWXlO@>X{Ad=Hji;`^3WF8q4_w&4F=T>Agc9RUIa&LI#w z**VfaOqR*-S3ZIHG4N~6<9%2*V~r^U2oN}yfKFESJvzTRF@p4S;QPY3Dp1-V(^S?~?iU0uuhZG2%?2uU=H>u<|KfwV09Qd?6O#U>{ zH~|6#4lAIOm3^AdZ&{3B{v4PL5oS)#GDv^`fg=m(WJO;m@hy%K*q;M2N|+X>7$HD_ zz_A51va;`!{MG~s^v{8Dpg3jx-V*@=1dcBdI@$44K2(OC-|CbC|6?Epn|js1TfLu! z1PBn=Tp)C_%`-UlhKaAFhVTWx4U}wTEdc@q_7Dg?ZI2{Qyk~`T=23n43ZDi}EG2aU z1nw#j8roeUR@UA5tz0}@7Cyw}z;K0o0t5)0LLhXrQ)GRZBokkqe8RVg19dhMg#ZBp z+X;kDw%yj3*s1C{^AHK&BOAB`nj#1gxRpTG#@_#1r&}Qu6x;a~1c*z+Cm9XI`9=s3 zAaH1bQ4f1Q96H;>C71YW=M}!n|3K}n#3Mj}KwE+T{?*^L-S2AAlUnt%`mZr@t-hCl z1PBmlDG>Tt%grtryYs7GSoki3f%?0NNPqx=b^?R;)v9H-OMd^ziLXH-;lm6E8tf+| z0RjZt2n?H7ci(28t42+J4a$pOW<1hhOCbpmAkaWy+`Ar64feQl$j+}th2hIg47Au+ zOacT5)D;NLt8VzKM@xJy$_!s-dZ5MDViF)gpq@bNUG-w$A=3Wm%rk>KNUMgJmhr`!r!zH;~2hNPqx=y#!*H+AEXI z_8pX5zGn(n9wN$s3X^X==F+eK@Vbe8CkAN#`W zhM6@fS5N{3t}QTVQr9l@QQe@{{&s!MDZ=^yUsm?ny{}*9cCX$uM>jv0nLvO5flUPZ z*0jlHdv4MfI=-&VChi>NPTFsW}7)5NIzjx0$uiq}>i58u7}~ zyJ$_a4T;X(B`j>1DDyG64bvZX@ua6F-I*5HxJxA-@G_y{3i$iz-{XoB0F?5FjuiFwu&;p^3SZL(67Q zhWIoXa{Dy#+jth_+f?re5FkLHjX>6l{~u>;mnP4cxqQlhBHi8c2;GWdoV78mBS3%v zfii(%FCO0iikjyBnzrWsFpby!njrm}hI#f|xDp^hfWUWw(AWEcZ_Bzl-)5|S*Khy6 zu8!0#e8wpZVL1T;1PBxgynA|f^C@ha_UU!ec$PwqGonU}qM9rwK!5;&$^TlwtL0DG zG(2bWW5yXV^#P0#AVA=x0-?!&I8eIbCPju6n(QJd0RjXF>?IKT{KQc+F;p$xeE({J z1tLIz0D;2@yMw;MEtR4yust?$9%5|5FkL{^a7#v{}0r!?LT(9 ztG|Va1PBlya5#a`{riFHnf8JEYxNBTBtU=wfny5vjX%3qPBx3~XS2$_!Vw@q;Lrl$ z5aK-*A{NX_)NPqwV0+j{AQIH0zY!iZ4i7E&I0t5)0 zNg$jB?}73v-l6)N@{l4BAV7e?$prc%VDeg6OCGZ@oaF=v5Fl_uf%jSP>HkTfpr&{1 zbW;$@QUU}B5ICtoe-@j#@D%C5+Fc; zz$FFJQ7~Csc1(PmI=MdovuJvfQ33=A5V*2HcX)iRaPqAAJbnCTymVUryrF;X_+4xDNvK!5;&u|PTs#)I>pvXf+d)MPK`M>UfG0RjXrBT#tGJRGvq z6Cgm~jsmrhnWy20qvnphY9>H{ z!0iQEoHGy9siWrh)&K|)AaF;4M(50fG8{E`={P#?gEd(V%fB=D02smd>@tGt^fB*pkBLRQU zj5s_HAV7dXWr5K-Q#rP91PBlyaC?E#G1KOkx!W59AV7e?odujTcmDcnCqRHedx6n8 z(|$WU5FkK+z`X=U$BduN?)C9iOMn1@4FpE#%m(|}f&c*m1nwo^oVnNcRxJSn1U42J z9W#D5+gRUr1PBngzQE|5xqi7SBtU=wfsF;6GaG~3jsO7y_YxQ#Gk!L^*T+{a0RjXz z5Ez{^8|-Hb0t5&UxR-!)=3d`hwFC$d*jQk6%=p=CV}08ZAVA>y0;6;0`sJ#S009C7 zwiOs1Gya^}7T<0J2oSh|fOF;sA6bb62oTs&V06yxn1`(i5FkL{k^-Y+#?NM#{KkqR zK!CuW0?wH|_3cf70DRE?uDF z2oNAZU~d8E%-&zX{sagRAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk t1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PGi+;1A5>Tz&um delta 67697 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 diff --git a/smarts/sstudio/tests/minicity.edge.bmp b/smarts/sstudio/tests/minicity.edge.bmp index 38d455527fcb627cb1be381e355f694f49a70ab4..04f01337b5e89ef94fb7b768311b08fc6c6b2acf 100644 GIT binary patch delta 81237 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 QuO2Eciie7~s`}{v1A8m{5&!@I delta 85004 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 Date: Mon, 28 Aug 2023 19:08:10 +0000 Subject: [PATCH 011/117] Improve kernel padding. --- smarts/sstudio/heightfield.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/smarts/sstudio/heightfield.py b/smarts/sstudio/heightfield.py index f927fc24a0..8e2fba1264 100644 --- a/smarts/sstudio/heightfield.py +++ b/smarts/sstudio/heightfield.py @@ -48,7 +48,7 @@ def size(self): def resolution(self): return self._resolution - def apply_kernel(self, kernel: np.ndarray, min_val=-np.inf, max_val=np.inf): + def apply_kernel(self, kernel: np.ndarray, min_val=-np.inf, max_val=np.inf, pad_mode='edge'): # kernel can be asymmetric but still needs to be odd assert len(kernel.shape) == 2 and np.all( [k % 2 for k in kernel.shape] @@ -56,7 +56,7 @@ def apply_kernel(self, kernel: np.ndarray, min_val=-np.inf, max_val=np.inf): k_height, k_width = kernel.shape m_height, m_width = self.data.shape k_size = max(k_height, k_width) - padded = np.pad(self.data, (int(k_size / 2), int(k_size / 2))) + padded = np.pad(self.data, (int(k_size / 2), int(k_size / 2)), mode=pad_mode) if k_size > 1: if k_height == 1: From 2badd941b5c1305592108e23467a7af560177c15 Mon Sep 17 00:00:00 2001 From: Montgomery Alban Date: Mon, 28 Aug 2023 19:08:52 +0000 Subject: [PATCH 012/117] Remove default padding from mesh2bitmap. --- smarts/sstudio/mesh2bitmap.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smarts/sstudio/mesh2bitmap.py b/smarts/sstudio/mesh2bitmap.py index 6b0dc74ed3..15552d8a43 100644 --- a/smarts/sstudio/mesh2bitmap.py +++ b/smarts/sstudio/mesh2bitmap.py @@ -61,7 +61,7 @@ def generate_bitmap_from_glb_file(glb_file: str, out_bitmap_file: str, padding: ) parser.add_argument("mesh", help="mesh file (*.glb)", type=str) parser.add_argument("output_path", help="where to write the bitmap file", type=str) - parser.add_argument("--padding", help="the padding pixels", type=int, default=10) + parser.add_argument("--padding", help="the padding pixels", type=int, default=0) args = parser.parse_args() generate_bitmap_from_glb_file(args.mesh, args.output_path, padding=args.padding) From e7eec62b7d07a83093e258094d4ae03e1eea051d Mon Sep 17 00:00:00 2001 From: Montgomery Alban Date: Mon, 28 Aug 2023 20:50:19 +0000 Subject: [PATCH 013/117] Fix perlin generator. --- smarts/sstudio/perlinbitmap.py | 144 +++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 smarts/sstudio/perlinbitmap.py diff --git a/smarts/sstudio/perlinbitmap.py b/smarts/sstudio/perlinbitmap.py new file mode 100644 index 0000000000..aaa40a4432 --- /dev/null +++ b/smarts/sstudio/perlinbitmap.py @@ -0,0 +1,144 @@ +# Copyright (C) 2020. Huawei Technologies Co., Ltd. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +import argparse +from functools import lru_cache +import math + +import numpy as np + +from smarts.core.coordinates import Dimensions, Pose +from smarts.core.sensor import DrivableAreaGridMapSensor +from smarts.core.vehicle_state import VehicleState +from smarts.p3d.renderer import Renderer +from smarts.sstudio.heightfield import HeightField + +@lru_cache +def table_cache(table_dim, seed): + p = np.arange(table_dim, dtype=int) + np.random.shuffle(p) + p = np.stack([p, p]).flatten() + return p + + +class PerlinNoise: + """This is a performant perlin noise generator heavily based on https://stackoverflow.com/a/42154921""" + @classmethod + def noise(cls, x, y, seed, table_dim): + """Vectorizes the generation of noise. + + Args: + x (np.array): The x value grid + y (np.array): The y value grid + seed (int): The random seed to use + + Returns: + np.ndarray: A noise value texture with output range [-0.5:0.5]. + """ + # permutation table + np.random.seed(seed) + p = table_cache(table_dim, seed) + + x_mod, y_mod = x % table_dim, y % table_dim + # coordinates of the top-left + xi, yi = x_mod.astype(int), y_mod.astype(int) + # internal coordinates + xf, yf = x_mod - xi, y_mod - yi + # fade factors + u, v = cls.fade(xf), cls.fade(yf) + # noise components + n00 = cls.gradient(p[p[xi] + yi], xf, yf) + n01 = cls.gradient(p[p[xi] + yi + 1], xf, yf - 1) + n11 = cls.gradient(p[p[xi + 1] + yi + 1], xf - 1, yf - 1) + n10 = cls.gradient(p[p[xi + 1] + yi], xf - 1, yf) + # combine noises + x1 = cls.lerp(n00, n10, u) + x2 = cls.lerp(n01, n11, u) # FIX1: I was using n10 instead of n01 + return cls.lerp(x1, x2, v) # FIX2: I also had to reverse x1 and x2 here + + @staticmethod + def fade(t: float) -> float: + """The fade function""" + return 6 * t**5 - 15 * t**4 + 10 * t**3 + + @staticmethod + def lerp(a, b, x): + "linear interpolation" + return a + x * (b - a) + + @staticmethod + def gradient(h, x, y): + "grad converts h to the right gradient vector and return the dot product with (x,y)" + vectors = np.array([[0, 1], [0, -1], [1, 0], [-1, 0]]) + g = vectors[h % 4] + return g[:, :, 0] * x + g[:, :, 1] * y + + + +def generate_bitmap(out_bitmap_file, width, height, smooth_iterations, seed, table_dim): + image = np.zeros((height, width)) + for i in range(0, 20): + freq = 2**i + lin = np.linspace(0, freq, width, endpoint=False) + lin2 = np.linspace(0, freq, height, endpoint=False) + x, y = np.meshgrid(lin, lin2) # FIX3: I thought I had to invert x and y here but it was a mistake + image = PerlinNoise.noise(x, y, seed=seed, table_dim=table_dim)/freq + image + + # print(np.min(image), np.max(image)) + image = (image + 1) * 128 + # print(np.min(image), np.max(image)) + image = image.astype(np.uint8) + + if smooth_iterations: + hf = HeightField(image, (width, height)) + blur_arr = np.array([0.006, 0.061, 0.242, 0.383, 0.242, 0.061, 0.006]) + blur_arr_u = blur_arr.reshape((1, 7)) + blur_arr_v = blur_arr.reshape((7, 1)) + for i in range(smooth_iterations): + hf = hf.apply_kernel( + np.array(blur_arr_u) + ) + hf = hf.apply_kernel( + blur_arr_v + ) + image = hf.data + + + from PIL import Image + + im = Image.fromarray(image.squeeze(), "L") + im.save(out_bitmap_file) + im.close() + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + "perlinbitmap.py", + description="Utility to export mesh files to bitmap.", + ) + parser.add_argument("output_path", help="where to write the bitmap file", type=str) + parser.add_argument("--width", help="the width pixels", type=int, default=100) + parser.add_argument("--height", help="the height pixels", type=int, default=100) + parser.add_argument("--smooth_iterations", help="smooth the output", type=int, default=0) + parser.add_argument("--seed", help="the generator seed", type=int, default=87) + parser.add_argument("--table_dim", help="the perlin permutation table", type=int, default=2048) + + args = parser.parse_args() + + generate_bitmap(args.output_path, args.width, args.height, args.smooth_iterations, args.seed, args.table_dim) From 8099205c003414284fe857778e262a640edd544e Mon Sep 17 00:00:00 2001 From: Montgomery Alban Date: Mon, 28 Aug 2023 21:03:41 +0000 Subject: [PATCH 014/117] Update perlin with shift. --- smarts/sstudio/heightfield.py | 4 ++- smarts/sstudio/perlinbitmap.py | 52 ++++++++++++++++++++-------------- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/smarts/sstudio/heightfield.py b/smarts/sstudio/heightfield.py index 8e2fba1264..ad4b8477be 100644 --- a/smarts/sstudio/heightfield.py +++ b/smarts/sstudio/heightfield.py @@ -48,7 +48,9 @@ def size(self): def resolution(self): return self._resolution - def apply_kernel(self, kernel: np.ndarray, min_val=-np.inf, max_val=np.inf, pad_mode='edge'): + def apply_kernel( + self, kernel: np.ndarray, min_val=-np.inf, max_val=np.inf, pad_mode="edge" + ): # kernel can be asymmetric but still needs to be odd assert len(kernel.shape) == 2 and np.all( [k % 2 for k in kernel.shape] diff --git a/smarts/sstudio/perlinbitmap.py b/smarts/sstudio/perlinbitmap.py index aaa40a4432..75efbd043e 100644 --- a/smarts/sstudio/perlinbitmap.py +++ b/smarts/sstudio/perlinbitmap.py @@ -19,16 +19,12 @@ # THE SOFTWARE. import argparse from functools import lru_cache -import math import numpy as np -from smarts.core.coordinates import Dimensions, Pose -from smarts.core.sensor import DrivableAreaGridMapSensor -from smarts.core.vehicle_state import VehicleState -from smarts.p3d.renderer import Renderer from smarts.sstudio.heightfield import HeightField + @lru_cache def table_cache(table_dim, seed): p = np.arange(table_dim, dtype=int) @@ -39,6 +35,7 @@ def table_cache(table_dim, seed): class PerlinNoise: """This is a performant perlin noise generator heavily based on https://stackoverflow.com/a/42154921""" + @classmethod def noise(cls, x, y, seed, table_dim): """Vectorizes the generation of noise. @@ -71,7 +68,7 @@ def noise(cls, x, y, seed, table_dim): x1 = cls.lerp(n00, n10, u) x2 = cls.lerp(n01, n11, u) # FIX1: I was using n10 instead of n01 return cls.lerp(x1, x2, v) # FIX2: I also had to reverse x1 and x2 here - + @staticmethod def fade(t: float) -> float: """The fade function""" @@ -90,15 +87,18 @@ def gradient(h, x, y): return g[:, :, 0] * x + g[:, :, 1] * y - -def generate_bitmap(out_bitmap_file, width, height, smooth_iterations, seed, table_dim): +def generate_bitmap( + out_bitmap_file, width, height, smooth_iterations, seed, table_dim, shift +): image = np.zeros((height, width)) for i in range(0, 20): freq = 2**i - lin = np.linspace(0, freq, width, endpoint=False) - lin2 = np.linspace(0, freq, height, endpoint=False) - x, y = np.meshgrid(lin, lin2) # FIX3: I thought I had to invert x and y here but it was a mistake - image = PerlinNoise.noise(x, y, seed=seed, table_dim=table_dim)/freq + image + lin = np.linspace(shift, freq + shift, width, endpoint=False) + lin2 = np.linspace(shift, freq + shift, height, endpoint=False) + x, y = np.meshgrid( + lin, lin2 + ) # FIX3: I thought I had to invert x and y here but it was a mistake + image = PerlinNoise.noise(x, y, seed=seed, table_dim=table_dim) / freq + image # print(np.min(image), np.max(image)) image = (image + 1) * 128 @@ -111,15 +111,10 @@ def generate_bitmap(out_bitmap_file, width, height, smooth_iterations, seed, tab blur_arr_u = blur_arr.reshape((1, 7)) blur_arr_v = blur_arr.reshape((7, 1)) for i in range(smooth_iterations): - hf = hf.apply_kernel( - np.array(blur_arr_u) - ) - hf = hf.apply_kernel( - blur_arr_v - ) + hf = hf.apply_kernel(np.array(blur_arr_u)) + hf = hf.apply_kernel(blur_arr_v) image = hf.data - from PIL import Image im = Image.fromarray(image.squeeze(), "L") @@ -135,10 +130,23 @@ def generate_bitmap(out_bitmap_file, width, height, smooth_iterations, seed, tab parser.add_argument("output_path", help="where to write the bitmap file", type=str) parser.add_argument("--width", help="the width pixels", type=int, default=100) parser.add_argument("--height", help="the height pixels", type=int, default=100) - parser.add_argument("--smooth_iterations", help="smooth the output", type=int, default=0) + parser.add_argument( + "--smooth_iterations", help="smooth the output", type=int, default=0 + ) parser.add_argument("--seed", help="the generator seed", type=int, default=87) - parser.add_argument("--table_dim", help="the perlin permutation table", type=int, default=2048) + parser.add_argument( + "--table_dim", help="the perlin permutation table", type=int, default=2048 + ) + parser.add_argument("--shift", help="the shift on the noise", type=float, default=0) args = parser.parse_args() - generate_bitmap(args.output_path, args.width, args.height, args.smooth_iterations, args.seed, args.table_dim) + generate_bitmap( + args.output_path, + args.width, + args.height, + args.smooth_iterations, + args.seed, + args.table_dim, + args.shift, + ) From 6d4a96aed85ea0dcc67ebf4bd7976862f92b8f8c Mon Sep 17 00:00:00 2001 From: Montgomery Alban Date: Mon, 28 Aug 2023 21:04:35 +0000 Subject: [PATCH 015/117] Rename perlin bitmap tool. --- smarts/sstudio/{perlinbitmap.py => perlin_bitmap.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename smarts/sstudio/{perlinbitmap.py => perlin_bitmap.py} (100%) diff --git a/smarts/sstudio/perlinbitmap.py b/smarts/sstudio/perlin_bitmap.py similarity index 100% rename from smarts/sstudio/perlinbitmap.py rename to smarts/sstudio/perlin_bitmap.py From d1ffbb7df4084269f5981c9a4dd5de483e48b27e Mon Sep 17 00:00:00 2001 From: Montgomery Alban Date: Mon, 28 Aug 2023 21:05:20 +0000 Subject: [PATCH 016/117] Constrain perlin tool table cache. --- smarts/sstudio/perlin_bitmap.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smarts/sstudio/perlin_bitmap.py b/smarts/sstudio/perlin_bitmap.py index 75efbd043e..35d0e12058 100644 --- a/smarts/sstudio/perlin_bitmap.py +++ b/smarts/sstudio/perlin_bitmap.py @@ -25,7 +25,7 @@ from smarts.sstudio.heightfield import HeightField -@lru_cache +@lru_cache(2) def table_cache(table_dim, seed): p = np.arange(table_dim, dtype=int) np.random.shuffle(p) From 03cbd538138e316987ae98e6927cdad4507f409b Mon Sep 17 00:00:00 2001 From: Montgomery Alban Date: Mon, 28 Aug 2023 21:09:34 +0000 Subject: [PATCH 017/117] Move graphics tools to sstudio.graphics. --- smarts/sstudio/{ => graphics}/bitmap2edge.py | 2 +- smarts/sstudio/{ => graphics}/heightfield.py | 0 smarts/sstudio/{ => graphics}/mesh2bitmap.py | 0 smarts/sstudio/{ => graphics}/perlin_bitmap.py | 2 +- smarts/sstudio/tests/test_heightfield.py | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) rename smarts/sstudio/{ => graphics}/bitmap2edge.py (97%) rename smarts/sstudio/{ => graphics}/heightfield.py (100%) rename smarts/sstudio/{ => graphics}/mesh2bitmap.py (100%) rename smarts/sstudio/{ => graphics}/perlin_bitmap.py (98%) diff --git a/smarts/sstudio/bitmap2edge.py b/smarts/sstudio/graphics/bitmap2edge.py similarity index 97% rename from smarts/sstudio/bitmap2edge.py rename to smarts/sstudio/graphics/bitmap2edge.py index e1a251255b..c945cc3497 100644 --- a/smarts/sstudio/bitmap2edge.py +++ b/smarts/sstudio/graphics/bitmap2edge.py @@ -21,7 +21,7 @@ import numpy as np -from smarts.sstudio.heightfield import HeightField +from smarts.sstudio.graphics.heightfield import HeightField def generate_edge_bitmap_from_bitmap(bitmap_file, out_edge_bitmap_file): diff --git a/smarts/sstudio/heightfield.py b/smarts/sstudio/graphics/heightfield.py similarity index 100% rename from smarts/sstudio/heightfield.py rename to smarts/sstudio/graphics/heightfield.py diff --git a/smarts/sstudio/mesh2bitmap.py b/smarts/sstudio/graphics/mesh2bitmap.py similarity index 100% rename from smarts/sstudio/mesh2bitmap.py rename to smarts/sstudio/graphics/mesh2bitmap.py diff --git a/smarts/sstudio/perlin_bitmap.py b/smarts/sstudio/graphics/perlin_bitmap.py similarity index 98% rename from smarts/sstudio/perlin_bitmap.py rename to smarts/sstudio/graphics/perlin_bitmap.py index 35d0e12058..6db692a40f 100644 --- a/smarts/sstudio/perlin_bitmap.py +++ b/smarts/sstudio/graphics/perlin_bitmap.py @@ -22,7 +22,7 @@ import numpy as np -from smarts.sstudio.heightfield import HeightField +from smarts.sstudio.graphics.heightfield import HeightField @lru_cache(2) diff --git a/smarts/sstudio/tests/test_heightfield.py b/smarts/sstudio/tests/test_heightfield.py index 8aa9119c97..be59cfd134 100644 --- a/smarts/sstudio/tests/test_heightfield.py +++ b/smarts/sstudio/tests/test_heightfield.py @@ -24,7 +24,7 @@ import numpy as np import pytest -from smarts.sstudio.heightfield import HeightField +from smarts.sstudio.graphics.heightfield import HeightField @pytest.fixture From 4a6ea80da721a01296925b2944db0f9bdc404215 Mon Sep 17 00:00:00 2001 From: Montgomery Alban Date: Tue, 29 Aug 2023 15:00:25 +0000 Subject: [PATCH 018/117] Update terminology --- .../{bitmap2edge.py => bytemap2edge.py} | 16 ++++++++-------- .../{mesh2bitmap.py => mesh2bytemap.py} | 12 ++++++------ .../{perlin_bitmap.py => perlin_bytemap.py} | 14 +++++++------- smarts/sstudio/tests/perlin.bmp | Bin 0 -> 11078 bytes 4 files changed, 21 insertions(+), 21 deletions(-) rename smarts/sstudio/graphics/{bitmap2edge.py => bytemap2edge.py} (79%) rename smarts/sstudio/graphics/{mesh2bitmap.py => mesh2bytemap.py} (88%) rename smarts/sstudio/graphics/{perlin_bitmap.py => perlin_bytemap.py} (95%) create mode 100644 smarts/sstudio/tests/perlin.bmp diff --git a/smarts/sstudio/graphics/bitmap2edge.py b/smarts/sstudio/graphics/bytemap2edge.py similarity index 79% rename from smarts/sstudio/graphics/bitmap2edge.py rename to smarts/sstudio/graphics/bytemap2edge.py index c945cc3497..44179b8298 100644 --- a/smarts/sstudio/graphics/bitmap2edge.py +++ b/smarts/sstudio/graphics/bytemap2edge.py @@ -24,8 +24,8 @@ from smarts.sstudio.graphics.heightfield import HeightField -def generate_edge_bitmap_from_bitmap(bitmap_file, out_edge_bitmap_file): - hf = HeightField.load_image(bitmap_file) +def generate_edge_bytemap_from_bytemap(bytemap_file, out_edge_bytemap_file): + hf = HeightField.load_image(bytemap_file) bhf = hf.apply_kernel( kernel=np.array( [ @@ -41,18 +41,18 @@ def generate_edge_bitmap_from_bitmap(bitmap_file, out_edge_bitmap_file): min_val=0, max_val=255, ) - bhf.write_image(out_edge_bitmap_file) + bhf.write_image(out_edge_bytemap_file) if __name__ == "__main__": parser = argparse.ArgumentParser( - "bitmap2edge.py", - description="Utility to convert a bitmap to an edge bitmap.", + "bytemap2edge.py", + description="Utility to convert a bytemap to an edge bytemap.", ) - parser.add_argument("bitmap", help="bitmap file (*.bmp)", type=str) + parser.add_argument("bytemap", help="bytemap file (*.bmp)", type=str) parser.add_argument( - "output_path", help="where to write the edge bitmap file", type=str + "output_path", help="where to write the edge bytemap file", type=str ) args = parser.parse_args() - generate_edge_bitmap_from_bitmap(args.bitmap, args.output_path) + generate_edge_bytemap_from_bytemap(args.bytemap, args.output_path) diff --git a/smarts/sstudio/graphics/mesh2bitmap.py b/smarts/sstudio/graphics/mesh2bytemap.py similarity index 88% rename from smarts/sstudio/graphics/mesh2bitmap.py rename to smarts/sstudio/graphics/mesh2bytemap.py index 15552d8a43..3c27fd0836 100644 --- a/smarts/sstudio/graphics/mesh2bitmap.py +++ b/smarts/sstudio/graphics/mesh2bytemap.py @@ -27,7 +27,7 @@ from smarts.p3d.renderer import Renderer -def generate_bitmap_from_glb_file(glb_file: str, out_bitmap_file: str, padding: int): +def generate_bytemap_from_glb_file(glb_file: str, out_bytemap_file: str, padding: int): """Creates a geometry file from a sumo map file.""" renderer = Renderer("r") bounds = renderer.load_road_map(glb_file) @@ -50,18 +50,18 @@ def generate_bitmap_from_glb_file(glb_file: str, out_bitmap_file: str, padding: from PIL import Image im = Image.fromarray(image.data.squeeze(), "L") - im.save(out_bitmap_file) + im.save(out_bytemap_file) im.close() if __name__ == "__main__": parser = argparse.ArgumentParser( - "mesh2bitmap.py", - description="Utility to export mesh files to bitmap.", + "mesh2bytemap.py", + description="Utility to export mesh files to bytemap.", ) parser.add_argument("mesh", help="mesh file (*.glb)", type=str) - parser.add_argument("output_path", help="where to write the bitmap file", type=str) + parser.add_argument("output_path", help="where to write the bytemap file", type=str) parser.add_argument("--padding", help="the padding pixels", type=int, default=0) args = parser.parse_args() - generate_bitmap_from_glb_file(args.mesh, args.output_path, padding=args.padding) + generate_bytemap_from_glb_file(args.mesh, args.output_path, padding=args.padding) diff --git a/smarts/sstudio/graphics/perlin_bitmap.py b/smarts/sstudio/graphics/perlin_bytemap.py similarity index 95% rename from smarts/sstudio/graphics/perlin_bitmap.py rename to smarts/sstudio/graphics/perlin_bytemap.py index 6db692a40f..0dc785749b 100644 --- a/smarts/sstudio/graphics/perlin_bitmap.py +++ b/smarts/sstudio/graphics/perlin_bytemap.py @@ -87,8 +87,8 @@ def gradient(h, x, y): return g[:, :, 0] * x + g[:, :, 1] * y -def generate_bitmap( - out_bitmap_file, width, height, smooth_iterations, seed, table_dim, shift +def generate_bytemap( + out_bytemap_file, width, height, smooth_iterations, seed, table_dim, shift ): image = np.zeros((height, width)) for i in range(0, 20): @@ -118,16 +118,16 @@ def generate_bitmap( from PIL import Image im = Image.fromarray(image.squeeze(), "L") - im.save(out_bitmap_file) + im.save(out_bytemap_file) im.close() if __name__ == "__main__": parser = argparse.ArgumentParser( - "perlinbitmap.py", - description="Utility to export mesh files to bitmap.", + "perlinbytemap.py", + description="Utility to export mesh files to bytemap.", ) - parser.add_argument("output_path", help="where to write the bitmap file", type=str) + parser.add_argument("output_path", help="where to write the bytemap file", type=str) parser.add_argument("--width", help="the width pixels", type=int, default=100) parser.add_argument("--height", help="the height pixels", type=int, default=100) parser.add_argument( @@ -141,7 +141,7 @@ def generate_bitmap( args = parser.parse_args() - generate_bitmap( + generate_bytemap( args.output_path, args.width, args.height, diff --git a/smarts/sstudio/tests/perlin.bmp b/smarts/sstudio/tests/perlin.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d42e179157eb7be5d69a0263f432ca0a9dbdfaa2 GIT binary patch literal 11078 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