From c65ce817995bf0c12c25217438412f3c86d7b1af Mon Sep 17 00:00:00 2001 From: Parth Kadav <60675406+kadavparth@users.noreply.github.com> Date: Wed, 2 Jul 2025 15:16:45 -0400 Subject: [PATCH 1/3] Initial commit for all the SUMO <-> CARLA light placement scripts. --- carla_lights/Roosevelt.net.xml | 5036 ++++++++++++++++++++++++++++++++ carla_lights/carla_tl_locs.csv | 12 + carla_lights/gen_tl_pose.py | 134 + carla_lights/spawn_ue.py | 43 + carla_lights/sumo2carla.py | 39 + carla_lights/tl_locs.csv | 12 + 6 files changed, 5276 insertions(+) create mode 100644 carla_lights/Roosevelt.net.xml create mode 100644 carla_lights/carla_tl_locs.csv create mode 100644 carla_lights/gen_tl_pose.py create mode 100644 carla_lights/spawn_ue.py create mode 100644 carla_lights/sumo2carla.py create mode 100644 carla_lights/tl_locs.csv diff --git a/carla_lights/Roosevelt.net.xml b/carla_lights/Roosevelt.net.xml new file mode 100644 index 00000000..57725322 --- /dev/null +++ b/carla_lights/Roosevelt.net.xml @@ -0,0 +1,5036 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/carla_lights/carla_tl_locs.csv b/carla_lights/carla_tl_locs.csv new file mode 100644 index 00000000..0f1c1edc --- /dev/null +++ b/carla_lights/carla_tl_locs.csv @@ -0,0 +1,12 @@ +1375.4974524064373,-1067.6701523048437,182.3,0,0,-91,1356.73,-1077.3400000000001,181.88,-1868_0,373 +1375.4974524064373,-1070.8701523048437,182.3,0,0,-91,1356.73,-1077.3400000000001,181.88,-1868_1,373 +1375.4974524064373,-1074.0701523048438,182.3,0,0,-91,1356.73,-1077.3400000000001,181.88,-1868_2,373 +1375.4974524064373,-1077.2701523048436,182.3,0,0,-91,1356.73,-1077.3400000000001,181.88,-1868_3,373 +1348.71,-1057.2,181.84,0,0,0,1356.73,-1077.3400000000001,181.88,-1871_0,373 +1351.91,-1057.2,181.84,0,0,0,1356.73,-1077.3400000000001,181.88,-1871_1,373 +1355.11,-1057.2,181.84,0,0,0,1356.73,-1077.3400000000001,181.88,-1871_2,373 +1338.0,-1086.48,181.46,0,0,-270,1356.73,-1077.3400000000001,181.88,-1880_0,373 +1338.0,-1083.28,181.46,0,0,-270,1356.73,-1077.3400000000001,181.88,-1880_1,373 +1338.0,-1080.08,181.46,0,0,-270,1356.73,-1077.3400000000001,181.88,-1880_2,373 +1361.5598476951563,-1099.4874524064373,181.95,0,0,-181,1356.73,-1077.3400000000001,181.88,-2001_0,373 +1358.3598476951563,-1099.4874524064373,181.95,0,0,-181,1356.73,-1077.3400000000001,181.88,-2001_1,373 diff --git a/carla_lights/gen_tl_pose.py b/carla_lights/gen_tl_pose.py new file mode 100644 index 00000000..800f6267 --- /dev/null +++ b/carla_lights/gen_tl_pose.py @@ -0,0 +1,134 @@ +import pandas as pd +import xml.etree.ElementTree as ET +import math +import numpy as np +import csv +from sumo2carla import get_carla_transform + +xml_file = 'Roosevelt.net.xml' + +tree = ET.parse(xml_file) +root = tree.getroot() +tl_loc = [] +carla_tl_loc = [] + +junc_edges = {'373' : ['-1871', '-1880', '-1868', '-2001']} + +loc = root.find('location') +offset = [float(l) for l in loc.get('netOffset').split(',')] + +new_dict = {} + +for jn in junc_edges: + + new_dict[jn] = [] + + for j in junc_edges[jn]: + for c in root.findall('connection'): + if c.attrib['from'] == str(j) and c.attrib['dir'] == 's': + entry = {"from": c.attrib['from'], "to": c.attrib['to']} + if entry not in new_dict[jn]: + new_dict[jn].append(entry) + + for child in root: + + if child.tag == 'edge': + # go through the edges that are at junctions and are inc_lanes parents for ex [-116_0] is -116 child + edge_id = child.attrib['id'] + if edge_id in junc_edges[jn]: + + fr, to = child.attrib['from'], child.attrib['to'] + nxt_jn = [n for n in root.findall('junction') if n.attrib['id'] == str(to)] + nxt_jn = nxt_jn[0].attrib + jn_coords = get_carla_transform(offset=offset, + in_location= [float(nxt_jn['x']), float(nxt_jn['y']), float(nxt_jn['z'])], + in_rotation=(0,0,0)) + + for n in new_dict[jn]: + if n['from'] == edge_id: + to_edge = n['to'] + for n in root.findall('edge'): + if n.attrib['id'] == to_edge: + lane = n.attrib['shape'] + to_shape_start = [float(c) for c in lane.split(' ')[0].split(',')] + to_shape_end = [float(c) for c in lane.split(' ')[-1].split(',')] + + for l in child: + lane = l.attrib['shape'] + if lane: + coords = lane.split(' ') + shape_start =[float(c) for c in coords[0].split(',')] + shape_end = [float(c) for c in coords[-1].split(',')] + + dist_start = math.sqrt( (float(nxt_jn['x']) - shape_start[0])**2 + (float(nxt_jn['y']) - shape_start[1])**2 ) + dist_end = math.sqrt( (float(nxt_jn['x']) - shape_end[0])**2 + (float(nxt_jn['y']) - shape_end[1])**2 ) + dists = [dist_start, dist_end] + min_idx = (dists.index(min(dists))) + + # fyi, in rotation[2] has now been changed to be yaw instead of roll initially it was pitch,yaw,roll as output + # now it is roll, pitch, yaw. The traffic light asset faces you at yaw = 0. So if you need the light to face the + # end of the lane, it should be oriented the same way. + if min_idx == 0: + # This means that the shape_start is closer + bearing = math.degrees( math.atan2( (shape_start[1] - shape_end[1]), (shape_start[0] - shape_end[0]) ) ) + shape_delta = [to_shape_start[0] - shape_start[0], to_shape_start[1] - shape_start[1]] + carla_coords = get_carla_transform(offset=offset, + in_location= [shape_start[0] + shape_delta[0], shape_start[1], shape_start[2]], + in_rotation=(0,0, round(-bearing)) ) + tl_loc.append([shape_start[0], shape_start[1], l.attrib['id'], jn]) + carla_tl_loc.append( [carla_coords[0], + carla_coords[1], + carla_coords[2], + carla_coords[3], + carla_coords[4], + carla_coords[5], + jn_coords[0], + jn_coords[1], + jn_coords[2], + l.attrib['id'], + jn] ) + + elif min_idx == 1: + # This means that the shape_end is closer + bearing = math.degrees( math.atan2( (shape_end[1] - shape_start[1]), (shape_end[0] - shape_start[0]) ) ) + + shape_delta = [to_shape_start[0] - shape_end[0], to_shape_start[1] - shape_end[1]] + + if abs(bearing - 90) < 5 or abs(bearing + 90) < 5: + carla_coords = get_carla_transform(offset=offset, + in_location= [shape_end[0], shape_end[1] + shape_delta[1], shape_end[2]], + in_rotation=(0,0, round(-bearing)) ) + else: + carla_coords = get_carla_transform(offset=offset, + in_location= [shape_end[0] + shape_delta[0], shape_end[1], shape_end[2]], + in_rotation=(0,0, round(-bearing)) ) + + tl_loc.append([shape_end[0], shape_end[1], l.attrib['id'], jn]) + carla_tl_loc.append( [carla_coords[0], + carla_coords[1], + carla_coords[2], + carla_coords[3], + carla_coords[4], + carla_coords[5], + jn_coords[0], + jn_coords[1], + jn_coords[2], + l.attrib['id'], + jn] ) + else: + None + else: + print('No internal lanes found') + else: + pass + +tl_loc = np.array(tl_loc) +carla_tl_loc = np.array(carla_tl_loc) + +with open('tl_locs.csv','w') as file: + writer = csv.writer(file) + writer.writerows(tl_loc) + +with open('carla_tl_locs.csv','w') as file1: + writer = csv.writer(file1) + writer.writerows(carla_tl_loc) \ No newline at end of file diff --git a/carla_lights/spawn_ue.py b/carla_lights/spawn_ue.py new file mode 100644 index 00000000..030df4f6 --- /dev/null +++ b/carla_lights/spawn_ue.py @@ -0,0 +1,43 @@ +import unreal +import csv + +actors = unreal.EditorLevelLibrary.get_all_level_actors() + + +### Spawn Traffic Lights and TL Group according to intersection + +bp_path = '/Game/Carla/Static/TrafficLight/Streetlights_01/BP_TrafficLight.BP_TrafficLight' +blueprint_path = unreal.EditorAssetLibrary.load_blueprint_class(bp_path) + +tl_bp_path = '/Game/Carla/Static/TrafficLight/Streetlights_01/BP_TrafficLightGroup.BP_TrafficLightGroup' +tl_blueprint_path = unreal.EditorAssetLibrary.load_blueprint_class(tl_bp_path) + +jn_spawned = {} +id = 1 + +with open('/home/arms/carlatlgen/carla_tl_locs.csv', newline='') as csvfile: + csv_reader = csv.reader(csvfile) + + for row in csv_reader: + + if row[6] not in jn_spawned: + jn_spawned[row[6]] = True + location = unreal.Vector() + location.x = float(row[6]) * 100 + location.y = float(row[7]) * 100 + location.z = float(row[8]) * 100 + rotation = unreal.Rotator(0,0,0) + actor = unreal.EditorLevelLibrary.spawn_actor_from_class(tl_blueprint_path, location, rotation) + actor.set_actor_label(f'BP_TrafficLightGroup{row[-1]}') + + location = unreal.Vector() + location.x = float(row[0]) * 100 + location.y = float(row[1]) * 100 + location.z = float(row[2]) * 100 + rotation = unreal.Rotator(float(row[3]), + float(row[4]), + float(row[5])) + + + actor = unreal.EditorLevelLibrary.spawn_actor_from_class(blueprint_path, location, rotation) + actor.set_actor_label(f'{row[-2]}') diff --git a/carla_lights/sumo2carla.py b/carla_lights/sumo2carla.py new file mode 100644 index 00000000..6fd09d56 --- /dev/null +++ b/carla_lights/sumo2carla.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Thu Mar 20 13:43:01 2025 + +@author: arms +""" + +import carla +import math + +def get_carla_transform(offset=0, in_location=(0,0,0), in_rotation=(0,0,0)): + """ + Returns carla transform based on sumo transform. + """ + # offset = (801.49,264.53) + # in_location = (1223.40,331.17,181) + # in_rotation = (0,0,90) + + # From front-center-bumper to center (sumo reference system). + # (http://sumo.sourceforge.net/userdoc/Purgatory/Vehicle_Values.html#angle) + yaw = -1 * in_rotation[2] + 90 + pitch = in_rotation[1] + out_location = (in_location[0] - math.cos(math.radians(yaw)) * 1, + in_location[1] - math.sin(math.radians(yaw)) * 1, + in_location[2] - math.sin(math.radians(pitch)) * 1) + out_rotation = (in_rotation[0], in_rotation[1], in_rotation[2]) + + # Applying offset sumo-carla net. + out_location = (out_location[0] - offset[0], out_location[1] - offset[1], out_location[2]) + + ## Transform to carla reference system (left-handed system). + # out_transform = carla.Transform( + # carla.Location(out_location[0], -out_location[1], out_location[2]), + # carla.Rotation(out_rotation[0], out_rotation[1] - 90, out_rotation[2])) + + out_transform = (out_location[0], -out_location[1], out_location[2], out_rotation[0], out_rotation[1], out_rotation[2]-90) + + return out_transform diff --git a/carla_lights/tl_locs.csv b/carla_lights/tl_locs.csv new file mode 100644 index 00000000..84bf5b2f --- /dev/null +++ b/carla_lights/tl_locs.csv @@ -0,0 +1,12 @@ +1337.6,323.1,-1868_0,373 +1337.54,326.3,-1868_1,373 +1337.47,329.5,-1868_2,373 +1337.41,332.7,-1868_3,373 +1349.22,353.8,-1871_0,373 +1352.42,353.8,-1871_1,373 +1355.62,353.8,-1871_2,373 +1375.09,339.91,-1880_0,373 +1375.09,336.71,-1880_1,373 +1375.09,333.51,-1880_2,373 +1360.07,311.69,-2001_0,373 +1356.87,311.66,-2001_1,373 From ac51a987c9a880a6788c44c36457d7a73952c3fa Mon Sep 17 00:00:00 2001 From: Yunli Shao Date: Fri, 3 Oct 2025 00:02:10 -0400 Subject: [PATCH 2/3] Moved to folder Carla, following convention of CarMaker and VISSIM --- {carla_lights => Carla}/Roosevelt.net.xml | 0 {carla_lights => Carla}/carla_tl_locs.csv | 24 +++++++++++------------ {carla_lights => Carla}/gen_tl_pose.py | 0 {carla_lights => Carla}/spawn_ue.py | 0 {carla_lights => Carla}/sumo2carla.py | 0 {carla_lights => Carla}/tl_locs.csv | 24 +++++++++++------------ 6 files changed, 24 insertions(+), 24 deletions(-) rename {carla_lights => Carla}/Roosevelt.net.xml (100%) rename {carla_lights => Carla}/carla_tl_locs.csv (98%) rename {carla_lights => Carla}/gen_tl_pose.py (100%) rename {carla_lights => Carla}/spawn_ue.py (100%) rename {carla_lights => Carla}/sumo2carla.py (100%) rename {carla_lights => Carla}/tl_locs.csv (96%) diff --git a/carla_lights/Roosevelt.net.xml b/Carla/Roosevelt.net.xml similarity index 100% rename from carla_lights/Roosevelt.net.xml rename to Carla/Roosevelt.net.xml diff --git a/carla_lights/carla_tl_locs.csv b/Carla/carla_tl_locs.csv similarity index 98% rename from carla_lights/carla_tl_locs.csv rename to Carla/carla_tl_locs.csv index 0f1c1edc..af90d7f7 100644 --- a/carla_lights/carla_tl_locs.csv +++ b/Carla/carla_tl_locs.csv @@ -1,12 +1,12 @@ -1375.4974524064373,-1067.6701523048437,182.3,0,0,-91,1356.73,-1077.3400000000001,181.88,-1868_0,373 -1375.4974524064373,-1070.8701523048437,182.3,0,0,-91,1356.73,-1077.3400000000001,181.88,-1868_1,373 -1375.4974524064373,-1074.0701523048438,182.3,0,0,-91,1356.73,-1077.3400000000001,181.88,-1868_2,373 -1375.4974524064373,-1077.2701523048436,182.3,0,0,-91,1356.73,-1077.3400000000001,181.88,-1868_3,373 -1348.71,-1057.2,181.84,0,0,0,1356.73,-1077.3400000000001,181.88,-1871_0,373 -1351.91,-1057.2,181.84,0,0,0,1356.73,-1077.3400000000001,181.88,-1871_1,373 -1355.11,-1057.2,181.84,0,0,0,1356.73,-1077.3400000000001,181.88,-1871_2,373 -1338.0,-1086.48,181.46,0,0,-270,1356.73,-1077.3400000000001,181.88,-1880_0,373 -1338.0,-1083.28,181.46,0,0,-270,1356.73,-1077.3400000000001,181.88,-1880_1,373 -1338.0,-1080.08,181.46,0,0,-270,1356.73,-1077.3400000000001,181.88,-1880_2,373 -1361.5598476951563,-1099.4874524064373,181.95,0,0,-181,1356.73,-1077.3400000000001,181.88,-2001_0,373 -1358.3598476951563,-1099.4874524064373,181.95,0,0,-181,1356.73,-1077.3400000000001,181.88,-2001_1,373 +1375.4974524064373,-1067.6701523048437,182.3,0,0,-91,1356.73,-1077.3400000000001,181.88,-1868_0,373 +1375.4974524064373,-1070.8701523048437,182.3,0,0,-91,1356.73,-1077.3400000000001,181.88,-1868_1,373 +1375.4974524064373,-1074.0701523048438,182.3,0,0,-91,1356.73,-1077.3400000000001,181.88,-1868_2,373 +1375.4974524064373,-1077.2701523048436,182.3,0,0,-91,1356.73,-1077.3400000000001,181.88,-1868_3,373 +1348.71,-1057.2,181.84,0,0,0,1356.73,-1077.3400000000001,181.88,-1871_0,373 +1351.91,-1057.2,181.84,0,0,0,1356.73,-1077.3400000000001,181.88,-1871_1,373 +1355.11,-1057.2,181.84,0,0,0,1356.73,-1077.3400000000001,181.88,-1871_2,373 +1338.0,-1086.48,181.46,0,0,-270,1356.73,-1077.3400000000001,181.88,-1880_0,373 +1338.0,-1083.28,181.46,0,0,-270,1356.73,-1077.3400000000001,181.88,-1880_1,373 +1338.0,-1080.08,181.46,0,0,-270,1356.73,-1077.3400000000001,181.88,-1880_2,373 +1361.5598476951563,-1099.4874524064373,181.95,0,0,-181,1356.73,-1077.3400000000001,181.88,-2001_0,373 +1358.3598476951563,-1099.4874524064373,181.95,0,0,-181,1356.73,-1077.3400000000001,181.88,-2001_1,373 diff --git a/carla_lights/gen_tl_pose.py b/Carla/gen_tl_pose.py similarity index 100% rename from carla_lights/gen_tl_pose.py rename to Carla/gen_tl_pose.py diff --git a/carla_lights/spawn_ue.py b/Carla/spawn_ue.py similarity index 100% rename from carla_lights/spawn_ue.py rename to Carla/spawn_ue.py diff --git a/carla_lights/sumo2carla.py b/Carla/sumo2carla.py similarity index 100% rename from carla_lights/sumo2carla.py rename to Carla/sumo2carla.py diff --git a/carla_lights/tl_locs.csv b/Carla/tl_locs.csv similarity index 96% rename from carla_lights/tl_locs.csv rename to Carla/tl_locs.csv index 84bf5b2f..0aaadaeb 100644 --- a/carla_lights/tl_locs.csv +++ b/Carla/tl_locs.csv @@ -1,12 +1,12 @@ -1337.6,323.1,-1868_0,373 -1337.54,326.3,-1868_1,373 -1337.47,329.5,-1868_2,373 -1337.41,332.7,-1868_3,373 -1349.22,353.8,-1871_0,373 -1352.42,353.8,-1871_1,373 -1355.62,353.8,-1871_2,373 -1375.09,339.91,-1880_0,373 -1375.09,336.71,-1880_1,373 -1375.09,333.51,-1880_2,373 -1360.07,311.69,-2001_0,373 -1356.87,311.66,-2001_1,373 +1337.6,323.1,-1868_0,373 +1337.54,326.3,-1868_1,373 +1337.47,329.5,-1868_2,373 +1337.41,332.7,-1868_3,373 +1349.22,353.8,-1871_0,373 +1352.42,353.8,-1871_1,373 +1355.62,353.8,-1871_2,373 +1375.09,339.91,-1880_0,373 +1375.09,336.71,-1880_1,373 +1375.09,333.51,-1880_2,373 +1360.07,311.69,-2001_0,373 +1356.87,311.66,-2001_1,373 From 44efd615e321d4d4c5e1eaa6c906dd6f69416cd6 Mon Sep 17 00:00:00 2001 From: Hetian Guo Date: Wed, 26 Nov 2025 15:20:34 -0500 Subject: [PATCH 3/3] Supports VirCarlaEnv to be Built on Linux git config --global user.email "hetianguoml@gmail.com" git config --global user.name "Hetian Guo" --- .gitignore | 12 + Carla/carla_utils.py | 58 ++ Carla/dash_view.py | 88 +++ Carla/disable_carla_synchronous_mode.py | 20 + Carla/extract_sumo_tls_as_table.py | 269 +++++++ Carla/trafficlight_helper.py | 141 ++++ Carla/unreal_scripts/placing_tls.py | 90 +++ Carla/unreal_scripts/test_placing_tls.py | 33 + Carla/unreal_scripts/visualize_tls_table.py | 38 + CommonLib/ConfigHelper.cpp | 120 +++ CommonLib/ConfigHelper.h | 29 +- CommonLib/ConfigHelper.py | 120 +++ CommonLib/MsgHelper.cpp | 30 +- CommonLib/MsgHelper.py | 605 +++++++++++++++ CommonLib/RealSimPack.m | 4 +- CommonLib/RealSimSocket.cpp | 2 +- CommonLib/RealSimSocket.mexw64 | Bin 30720 -> 872448 bytes CommonLib/SocketHelper.cpp | 24 +- CommonLib/SocketHelper.h | 9 +- CommonLib/SocketHelper.py | 146 ++-- CommonLib/TrafficHelper.cpp | 239 +++--- CommonLib/TrafficHelper.h | 23 +- CommonLib/VehDataMsgDefs.h | 9 +- CommonLib/VehDataMsgDefs.py | 67 ++ CommonLib/VirEnvHelper.cpp | 81 +- CommonLib/buildRS_2024a.bat | 2 + CommonLib/libRealSimDsLib_2021b.a | Bin 258114 -> 263214 bytes CommonLib/libRealSimDsLib_2024a.a | Bin 0 -> 281252 bytes CommonLib/libsumo/CMakeSettings.json | 15 + CommonLib/yaml-cpp/CMakeSettings.json | 15 + README.md | 36 +- VirCarlaEnv/.gitignore | 28 + VirCarlaEnv/VirCarlaEnv/BridgeHelper.cpp | 298 ++++++++ VirCarlaEnv/VirCarlaEnv/BridgeHelper.h | 114 +++ VirCarlaEnv/VirCarlaEnv/CMakeLists.txt | 166 ++++ VirCarlaEnv/VirCarlaEnv/DebugHelper.cpp | 44 ++ VirCarlaEnv/VirCarlaEnv/DebugHelper.h | 14 + VirCarlaEnv/VirCarlaEnv/RandomUtils.h | 19 + VirCarlaEnv/VirCarlaEnv/defaultConfig.yaml | 81 ++ VirCarlaEnv/VirCarlaEnv/mainVirCarla.cpp | 709 ++++++++++++++++++ .../VirtualEnvironment.vcxproj | 13 +- compileExternalLibraries.bat | 4 +- copyCarlaDependencies.ps1 | 48 ++ copyCarlaDependencies.sh | 43 ++ requirements.txt | 22 +- tests/VissimSpeedLimit/speedLimit.inpx | 146 ++-- tests/VissimSpeedLimit/speedLimit.layx | 668 +++++++++-------- tests/VissimSpeedLimit/startVissim.m | 2 +- 48 files changed, 4107 insertions(+), 637 deletions(-) create mode 100644 Carla/carla_utils.py create mode 100644 Carla/dash_view.py create mode 100644 Carla/disable_carla_synchronous_mode.py create mode 100644 Carla/extract_sumo_tls_as_table.py create mode 100644 Carla/trafficlight_helper.py create mode 100644 Carla/unreal_scripts/placing_tls.py create mode 100644 Carla/unreal_scripts/test_placing_tls.py create mode 100644 Carla/unreal_scripts/visualize_tls_table.py create mode 100644 CommonLib/ConfigHelper.py create mode 100644 CommonLib/MsgHelper.py create mode 100644 CommonLib/VehDataMsgDefs.py create mode 100644 CommonLib/buildRS_2024a.bat create mode 100644 CommonLib/libRealSimDsLib_2024a.a create mode 100644 CommonLib/libsumo/CMakeSettings.json create mode 100644 CommonLib/yaml-cpp/CMakeSettings.json create mode 100644 VirCarlaEnv/.gitignore create mode 100644 VirCarlaEnv/VirCarlaEnv/BridgeHelper.cpp create mode 100644 VirCarlaEnv/VirCarlaEnv/BridgeHelper.h create mode 100644 VirCarlaEnv/VirCarlaEnv/CMakeLists.txt create mode 100644 VirCarlaEnv/VirCarlaEnv/DebugHelper.cpp create mode 100644 VirCarlaEnv/VirCarlaEnv/DebugHelper.h create mode 100644 VirCarlaEnv/VirCarlaEnv/RandomUtils.h create mode 100644 VirCarlaEnv/VirCarlaEnv/defaultConfig.yaml create mode 100644 VirCarlaEnv/VirCarlaEnv/mainVirCarla.cpp create mode 100644 copyCarlaDependencies.ps1 create mode 100755 copyCarlaDependencies.sh diff --git a/.gitignore b/.gitignore index 41d7e0dc..348f1c65 100644 --- a/.gitignore +++ b/.gitignore @@ -170,3 +170,15 @@ CM*_proj/**/Release/* **/.vs/* tests/DelayedConnection/coordMerge.xml CM11_proj/tmp.obj + +# CARLA dependency bundle and local CMake build artifacts +CommonLib/libcarla/ +VirCarlaEnv/build/ +VirCarlaEnv/VirCarlaEnv/CMakeFiles/ +VirCarlaEnv/VirCarlaEnv/CMakeCache.txt +VirCarlaEnv/VirCarlaEnv/cmake_install.cmake +VirCarlaEnv/VirCarlaEnv/*.ninja +VirCarlaEnv/VirCarlaEnv/.ninja* +VirCarlaEnv/VirCarlaEnv/Makefile +VirCarlaEnv/VirCarlaEnv/compile_commands.json +VirCarlaEnv/VirCarlaEnv/*.cmake diff --git a/Carla/carla_utils.py b/Carla/carla_utils.py new file mode 100644 index 00000000..addc7790 --- /dev/null +++ b/Carla/carla_utils.py @@ -0,0 +1,58 @@ +from re import T +import carla +import os +from CommonLib.ConfigHelper import ConfigHelper + +config_path = os.path.join(os.getcwd(), 'defaultConfig.yaml') +config_helper = ConfigHelper() +config_helper.getConfig(config_path) +carla_server_ip = config_helper.Carla_setup["CarlaServerIP"] +carla_server_port = config_helper.Carla_setup["CarlaServerPort"] + + +carla_client = carla.Client(carla_server_ip, carla_server_port) + +import carla + +def draw_axes_at_location(world, location, length=5.0, thickness=0.1, life_time=0.0, persistent=True): + """ + Draw X (red), Y (green), Z (blue) axes at the world origin (0,0,0). + """ + debug = world.debug + + # Red X-axis + debug.draw_line(location, carla.Location(x=length, y=0, z=100), + thickness=thickness, color=carla.Color(255, 0, 0), life_time=life_time, persistent_lines=persistent) + + # Green Y-axis + debug.draw_line(location, carla.Location(x=0, y=length, z=100), + thickness=thickness, color=carla.Color(0, 255, 0), life_time=life_time, persistent_lines=persistent) + + # Blue Z-axis + debug.draw_line(location, carla.Location(x=0, y=0, z=length), + thickness=thickness, color=carla.Color(0, 0, 255), life_time=life_time, persistent_lines=persistent) + +def move_spectator_to_location(world, location, pitch=-90.0): + """ + Move the spectator directly above the origin, looking down. + """ + spectator = world.get_spectator() + rotation = carla.Rotation(pitch=pitch, yaw=0) + spectator.set_transform(carla.Transform(location, rotation)) +def try_to_spawn_vehicle(world, location, rotation): + vehicle_bp = world.get_blueprint_library().find('vehicle.mini.cooper_s') + vehicle = world.try_spawn_actor(vehicle_bp, carla.Transform(location, rotation)) + return vehicle + +world = carla_client.get_world() +settings = world.get_settings() +settings.synchronous_mode = False +world.apply_settings(settings) + + +# draw_axes_at_location(world, carla.Location(334.887, 18.39, 0), length=100.0) +# move_spectator_to_location(world, carla.Location(334.887, 18.39, 100)) +# try_to_spawn_vehicle(world, carla.Location(334.887, 18.39, 0.0), carla.Rotation(pitch=0, yaw=90.0346, roll=0)) + + + diff --git a/Carla/dash_view.py b/Carla/dash_view.py new file mode 100644 index 00000000..f6984df2 --- /dev/null +++ b/Carla/dash_view.py @@ -0,0 +1,88 @@ +import carla +import os +from CommonLib.ConfigHelper import ConfigHelper +from dotenv import load_dotenv +import cv2 +import numpy as np +import random +def process_image(image): + array = np.frombuffer(image.raw_data, dtype=np.dtype("uint8")) + array = np.reshape(array, (image.height, image.width, 4)) # RGBA format + rgb_array = array[:, :, :3] # Drop the alpha channel + cv2.imshow("Front Camera", rgb_array) + cv2.waitKey(1) + + + +if __name__ == "__main__": + load_dotenv() + config_path = os.environ["CONFIG_PATH"] + config_helper = ConfigHelper() + config_helper.getConfig(config_path) + + carla_server_ip = config_helper.Carla_setup["CarlaServerIP"] + carla_server_port = config_helper.Carla_setup["CarlaServerPort"] + carla_client = carla.Client(carla_server_ip, carla_server_port) + + carla_world = carla_client.get_world() + carla_settings = carla_world.get_settings() + if not carla_settings.synchronous_mode: + carla_settings.synchronous_mode = True # Enable synchronous mode + carla_world.apply_settings(carla_settings) + carla_blueprint_library = carla_world.get_blueprint_library() + camera_bp = carla_blueprint_library.find('sensor.camera.rgb') + camera_bp.set_attribute('image_size_x', '800') + camera_bp.set_attribute('image_size_y', '600') + camera_bp.set_attribute('fov', '90') + camera_transform = carla.Transform(carla.Location(x=1.5, z=2.4)) # x is forward, z is up + # Wait until the ego vehicle is spawned in the carla world + RANDOM_SPAWN = True + ego_vehicle_role_name = 'ego' + ego_vehicle_carla_actor: carla.Vehicle = None + ego_vehicle_carla_actor_id = '' + while ego_vehicle_carla_actor is None: + try: + carla_vehicle_actors_in_world = carla_world.get_actors().filter('vehicle.*') + carla_vehicle_actor: carla.Vehicle + # if the ego vehicle is not spawned in carla + if RANDOM_SPAWN: + spawn_points = carla_world.get_map().get_spawn_points() + spawn_point = random.choice(spawn_points) + vehicle_blueprint = carla_blueprint_library.find('vehicle.tesla.model3') + vehicle_blueprint.set_attribute('role_name', ego_vehicle_role_name) + ego_vehicle_carla_actor = carla_world.spawn_actor(vehicle_blueprint, spawn_point) + # set as auto pilot + ego_vehicle_carla_actor.set_autopilot(True) + if ego_vehicle_carla_actor is None: + for carla_vehicle_actor in carla_vehicle_actors_in_world: + if 'role_name' in carla_vehicle_actor.attributes.keys(): + carla_actor_role_name = carla_vehicle_actor.attributes.get('role_name', None) + if carla_actor_role_name == ego_vehicle_role_name: + ego_vehicle_carla_actor = carla_vehicle_actor + ego_vehicle_carla_actor_id = carla_vehicle_actor.id + # if the ego vehicle is in carla + camera_actor: carla.Sensor + camera_actor = carla_world.spawn_actor(camera_bp, camera_transform, attach_to=ego_vehicle_carla_actor) + + except Exception as e: + print(f"Error occurred: {str(e)}") + + + camera_actor.listen(lambda image: process_image(image)) + latest_image = None + + try: + while True: + carla_world.tick() + if latest_image is not None: + cv2.imshow("Front Camera", latest_image) + if cv2.waitKey(1) & 0xFF == ord('q'): + break + except KeyboardInterrupt: + print("Stopping the simulation.") + finally: + camera_actor.stop() + ego_vehicle_carla_actor.destroy() + camera_actor.destroy() + cv2.destroyAllWindows() + print("Cleaning up...") \ No newline at end of file diff --git a/Carla/disable_carla_synchronous_mode.py b/Carla/disable_carla_synchronous_mode.py new file mode 100644 index 00000000..021c3bd4 --- /dev/null +++ b/Carla/disable_carla_synchronous_mode.py @@ -0,0 +1,20 @@ +import carla +import os +from CommonLib.ConfigHelper import ConfigHelper +from dotenv import load_dotenv +if __name__ == "__main__": + load_dotenv() + config_path = os.environ["CONFIG_PATH"] + config_helper = ConfigHelper() + config_helper.getConfig(config_path) + + carla_server_ip = config_helper.Carla_setup["CarlaServerIP"] + carla_server_port = config_helper.Carla_setup["CarlaServerPort"] + carla_client = carla.Client(carla_server_ip, carla_server_port) + + world = carla_client.get_world() + settings = world.get_settings() + settings.synchronous_mode = False + world.apply_settings(settings) + + diff --git a/Carla/extract_sumo_tls_as_table.py b/Carla/extract_sumo_tls_as_table.py new file mode 100644 index 00000000..b57f124b --- /dev/null +++ b/Carla/extract_sumo_tls_as_table.py @@ -0,0 +1,269 @@ +import math +import xml.etree.ElementTree as ET +import os +import pandas as pd +from shapely.geometry import LineString, Polygon, Point + +class SumoTLS: + def __init__(self, id, x, y, z, heading, link): + self.id = id + self.x = x + self.y = y + self.z = z + self.heading = heading + self.link = link + +class SumoTLSGroup: + def __init__(self, tl_id, x, y, z): + # this corresponds to the junction id in SUMO + self.id = tl_id + self.x = float(x) if x is not None else 0.0 + self.y = float(y) if y is not None else 0.0 + self.z = float(z) if z is not None else 0.0 + self.traffic_lights = {} + + def print_tls_info(self): + for tls in self.traffic_lights.values(): + print(tls.id, tls.x, tls.y, tls.z, tls.heading) + +# ------------------------------ +# Helpers for 2D/3D coordinates +# ------------------------------ +def parse_point_token(token): + """Parse 'x,y' or 'x,y,z' -> tuple of floats (2D or 3D). Return None if malformed.""" + parts = token.split(',') + try: + if len(parts) == 2: + x, y = map(float, parts) + return (x, y) + elif len(parts) == 3: + x, y, z = map(float, parts) + return (x, y, z) + except Exception: + return None + return None + +def to_xy(seq): + """Map list of 2D/3D points to list of (x,y).""" + return [(p[0], p[1]) for p in seq] + +def get_z(pt): + """Get z from a 2D/3D point; default 0.0 if missing.""" + return pt[2] if isinstance(pt, (list, tuple)) and len(pt) >= 3 else 0.0 + +def compute_perp_offsets(lane_width, count, idx): + """ + Given: + - lane_width: total width of that inLane + - count: total number of markers to place across this lane + - idx: zero‐based index (0 .. count-1) for the current marker + Returns offset_along_normal so that markers run from left edge → right edge. + If count == 1, returns 0.0 (center). + """ + if count == 1: + return 0.0 + span = lane_width + delta = span / (count * 2.0) + # center them about 0: from -span/2 to +span/2 + return -span/2 + (2 * idx + 1) * delta + +def parse_sumo_tls_from_netxml( + sumo_net_file, + offset_forward=0.0, + apply_linkwise_offset=True, + extend_back=50.0, + default_lane_width=3.2 +): + + tree = ET.parse(sumo_net_file) + root = tree.getroot() + + # 1) Junction polygons (for type="traffic_light") + junction_shapes = {} + junction_xyz = {} # (x,y,z) if present on the junction element (strings here; converted in SumoTLSGroup) + for jn in root.iter('junction'): + if jn.get('type') == 'traffic_light': + shape_str = jn.get('shape') + if shape_str: + coords_raw = [] + for tok in shape_str.strip().split(): + pt = parse_point_token(tok) + if pt is not None: + coords_raw.append(pt) + # Use only (x, y) for Polygon, ignore z if present + if len(coords_raw) >= 3: + junction_shapes[jn.get('id')] = Polygon(to_xy(coords_raw)) + # store x, y, z if provided (SUMO may omit z) + x = jn.get('x') + y = jn.get('y') + z = jn.get('z') # may be None + junction_xyz[jn.get('id')] = (x, y, z) + + # 2) Lane shapes & widths + lane_shape = {} # laneId -> list of 2D/3D tuples + lane_width = {} # laneId -> float + for edge in root.iter('edge'): + for ln in edge.iter('lane'): + lid = ln.get('id') + shp = ln.get('shape') + if shp: + pts = [] + for tok in shp.strip().split(): + pt = parse_point_token(tok) + if pt is not None: + pts.append(pt) + if len(pts) >= 2: + lane_shape[lid] = pts + w = ln.get('width') + lane_width[lid] = float(w) if w is not None else default_lane_width + + # 3) Connections by TLS and linkIndex (this replaces traci.trafficlight.getControlledLinks) + # build: tls_links[tls_id][linkIndex] -> list of (inLane, outLane, viaLane) + tls_links = {} + for conn in root.iter('connection'): + tls_id = conn.get('tl') + if not tls_id: + continue # not controlled by a traffic light + link_idx = conn.get('linkIndex') + if link_idx is None: + link_idx = "0" + + # from/to lane IDs come as indices; reconstruct lane IDs as "_" + from_edge = conn.get('from') + to_edge = conn.get('to') + from_lane_idx = conn.get('fromLane') + to_lane_idx = conn.get('toLane') + via_lane = conn.get('via') # usually present for internal links + + if from_edge is None or from_lane_idx is None: + continue + in_lane = f"{from_edge}_{from_lane_idx}" + out_lane = f"{to_edge}_{to_lane_idx}" if (to_edge is not None and to_lane_idx is not None) else None + + tls_links.setdefault(tls_id, {}) + tls_links[tls_id].setdefault(int(link_idx), []) + tls_links[tls_id][int(link_idx)].append((in_lane, out_lane, via_lane)) + + # 4) Build groups & compute positions + traffic_light_groups = {} + in_lane_links_total = {} + in_lane_links_placed = {} + + # Pre-count links per inLane for lateral spacing + for _, linkIndexGroups in tls_links.items(): + for _, triplets in linkIndexGroups.items(): + for inLane, _, _ in triplets: + in_lane_links_total[inLane] = in_lane_links_total.get(inLane, 0) + 1 + in_lane_links_placed.setdefault(inLane, 0) + + for tls_id, linkIndexGroups in tls_links.items(): + # ensure we have a group object + if tls_id not in traffic_light_groups: + jx, jy, jz = junction_xyz.get(tls_id, (None, None, None)) + traffic_light_groups[tls_id] = SumoTLSGroup(tls_id, jx, jy, jz) + + junction_poly = junction_shapes.get(tls_id) + + for link_idx, triplets in sorted(linkIndexGroups.items()): + for inLane, outLane, viaLane in triplets: + shape_pts = lane_shape.get(inLane) + if not shape_pts or len(shape_pts) < 2: + # cannot compute heading or intersection + continue + + # Use XY for geometry, keep Z from the lane end if present + shape_xy = to_xy(shape_pts) + (x1, y1) = shape_xy[-2] + (x2, y2) = shape_xy[-1] + end_z = get_z(shape_pts[-1]) # Z from lane end if available + + # last segment heading points "into" the junction + heading = math.atan2(y1 - y2, x1 - x2) + tx, ty = math.cos(heading), math.sin(heading) # tangent (toward lane end) + nx, ny = -ty, tx # left-hand normal + + # extend backwards from lane end (reverse of travel) in XY + reversed_extension = (x2 - extend_back * tx, y2 - extend_back * ty) + + # IMPORTANT: build a proper XY list for Shapely + extended_coords_xy = list(shape_xy) + [reversed_extension] + extended_line = LineString(extended_coords_xy) + + # intersect with junction polygon (if any) + inter_points = [] + if junction_poly: + inter = extended_line.intersection(junction_poly) + if isinstance(inter, Point): + inter_points = [(inter.x, inter.y)] + elif inter.geom_type == 'MultiPoint': + inter_points = [(p.x, p.y) for p in inter.geoms] + elif inter.geom_type == 'LineString': + inter_points = list(inter.coords) + + # pick farthest intersection point from lane end; else, use lane end + if inter_points: + end_pt = Point(shape_xy[-1]) + intersection_pt = max(inter_points, key=lambda p: Point(p).distance(end_pt)) + base_x, base_y = intersection_pt + base_z = end_z # no Z from intersection; keep lane end Z + else: + base_x, base_y = x2, y2 + base_z = end_z + + # If lane had no Z, fall back to junction Z; if missing, 0.0 + if base_z == 0.0: + base_z = traffic_light_groups[tls_id].z if traffic_light_groups[tls_id].z is not None else 0.0 + + # lateral offset across multiple links from the same inLane + L = in_lane_links_total.get(inLane, 1) + i = in_lane_links_placed.get(inLane, 0) + this_lane_width = lane_width.get(inLane, default_lane_width) + d_perp = -compute_perp_offsets(this_lane_width, L, i) if apply_linkwise_offset else 0.0 + + # forward offset along the tangent + bx = offset_forward * tx + by = -offset_forward * ty # keep your original sign convention + + px = base_x + bx + d_perp * nx + py = base_y + by + d_perp * ny + pz = base_z # keep Z constant (no vertical offset) + + traffic_light_groups[tls_id].traffic_lights.setdefault(link_idx, []).append( + SumoTLS(link_idx, px, py, pz, heading, (inLane, outLane, viaLane)) + ) + in_lane_links_placed[inLane] = i + 1 + + return traffic_light_groups, junction_shapes + +def tls_groups_to_df(traffic_light_groups): + data = [] + for junction_id, group in traffic_light_groups.items(): + for link_id, link in group.traffic_lights.items(): + for tls in link: + data.append({ + 'junction_id': junction_id, + 'link_id': link_id, + 'x': tls.x, + 'y': tls.y, + 'z': tls.z, + 'heading': tls.heading, + }) + return pd.DataFrame(data, columns=['junction_id', 'link_id', 'x', 'y', 'z', 'heading']) + + +if __name__ == "__main__": + sumo_net_file = 'test_scenarios\MLK\MLK_final_elevation.net.xml' + output_path = 'test_scenarios\MLK' + + traffic_light_groups, _ = parse_sumo_tls_from_netxml( + sumo_net_file, + offset_forward=0.0, + apply_linkwise_offset=True, + extend_back=50.0, + default_lane_width=3.2 + ) + traffic_light_groups_df = tls_groups_to_df(traffic_light_groups) + traffic_light_groups_df.to_csv( + os.path.join(output_path, 'traffic_light_table.csv'), + index=False + ) diff --git a/Carla/trafficlight_helper.py b/Carla/trafficlight_helper.py new file mode 100644 index 00000000..5d60e2bb --- /dev/null +++ b/Carla/trafficlight_helper.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python + +# Copyright (c) 2020 Computer Vision Center (CVC) at the Universitat Autonoma de +# Barcelona (UAB). +# +# This work is licensed under the terms of the MIT license. +# For a copy, see . +""" This module provides a helper for the co-simulation between sumo and carla .""" + +# ================================================================================================== +# -- imports --------------------------------------------------------------------------------------- +# ================================================================================================== + +import collections +import carla # pylint: disable=import-error +import math + +# Conditional import for unreal module +try: + import unreal + UNREAL_AVAILABLE = True +except ImportError: + UNREAL_AVAILABLE = False + + +SumoTrafficLight = collections.namedtuple('SumoTrafficLight', 'junction_id link_id x y z heading') + + +# ================================================================================================== +# -- Bridge helper (SUMO <=> CARLA) ---------------------------------------------------------------- +# ================================================================================================== + + +class TrafficLightHelper(object): + """ + BridgeHelper provides methos to ease the co-simulation between sumo and carla. + """ + offset = (0, 0) + + @staticmethod + def set_offset(offset): + TrafficLightHelper.offset = offset + + @staticmethod + def create_sumo_traffic_light(junction_id, link_id, x, y, z, heading): + return SumoTrafficLight(junction_id, link_id, x, y, z, heading) + + @staticmethod + def create_sumo_transform(x, y, z, heading): + # heading is in radians, convert to degrees + x = float(x) + y = float(y) + z = float(z) + heading = float(heading) + heading = math.degrees(heading) + heading = (heading + 360) % 360 + location = carla.Location(x, y, z) + rotation = carla.Rotation(0, heading, 0) + return location, rotation + + + @staticmethod + def sumo_transform_to_carla_transform(in_sumo_location, in_sumo_rotation): + """ + Returns carla transform based on sumo transform. + """ + offset = TrafficLightHelper.offset + in_location = in_sumo_location + in_rotation = in_sumo_rotation + + out_location = (in_location.x, + in_location.y, + in_location.z) + out_rotation = (in_rotation.pitch, in_rotation.yaw, in_rotation.roll) + + # Applying offset sumo-carla net. + out_location = (out_location[0] - offset[0], out_location[1] - offset[1], out_location[2]) + + # Transform to carla reference system (left-handed system). + + return carla.Location(out_location[0], -out_location[1], out_location[2]), carla.Rotation(out_rotation[0], out_rotation[1] - 90, out_rotation[2]) + + + @staticmethod + def is_unreal_available(): + """ + Check if the unreal module is available. + """ + return UNREAL_AVAILABLE + + @staticmethod + def carla_transform_to_unreal_transform(carla_location, carla_rotation): + """ + Convert a CARLA transform (meters) to an Unreal Engine transform (centimeters). + """ + if not UNREAL_AVAILABLE: + raise ImportError("Unreal module is not available. This method requires the unreal module to be installed.") + + loc = carla_location + rot = carla_rotation + + # Convert meters to centimeters + unreal_location = unreal.Vector(loc.x * 100, loc.y * 100, loc.z * 100) + unreal_rotation = unreal.Rotator(rot.roll, rot.pitch, -rot.yaw + 180) + + return unreal.Vector(unreal_location.x, unreal_location.y, unreal_location.z), unreal.Rotator(unreal_rotation.roll, unreal_rotation.pitch, unreal_rotation.yaw) + + @staticmethod + def get_trafficlight_group_transform_from_trafficlight_unreal_transforms(trafficlight_unreal_transforms): + """ + Get the transform of a traffic light group from a list of traffic lights, by calculating the center of the traffic lights. + Returns the unreal transform of the traffic light group. + """ + if not UNREAL_AVAILABLE: + raise ImportError("Unreal module is not available. This method requires the unreal module to be installed.") + + # calculate the center of the traffic lights + center_x = sum(trafficlight_unreal_location.x for trafficlight_unreal_location, _ in trafficlight_unreal_transforms) / len(trafficlight_unreal_transforms) + center_y = sum(trafficlight_unreal_location.y for trafficlight_unreal_location, _ in trafficlight_unreal_transforms) / len(trafficlight_unreal_transforms) + center_z = sum(trafficlight_unreal_location.z for trafficlight_unreal_location, _ in trafficlight_unreal_transforms) / len(trafficlight_unreal_transforms) + + + # create the unreal transform of the traffic light group + return unreal.Vector(center_x, center_y, center_z), unreal.Rotator(0, 0, 0) + + @staticmethod + def carla_location_to_sumo_location(carla_location): + """ + Convert a CARLA location (meters) to a SUMO location (meters). + """ + offset = TrafficLightHelper.offset + in_location = carla_location + + out_location = (in_location.x, + -in_location.y, + in_location.z) + + # Applying offset sumo-carla net. + out_location = (out_location[0] + offset[0], out_location[1] + offset[1], out_location[2]) + return carla.Location(out_location[0], out_location[1], out_location[2]) + \ No newline at end of file diff --git a/Carla/unreal_scripts/placing_tls.py b/Carla/unreal_scripts/placing_tls.py new file mode 100644 index 00000000..3f8a4232 --- /dev/null +++ b/Carla/unreal_scripts/placing_tls.py @@ -0,0 +1,90 @@ +import unreal +import sys +import os +from dotenv import load_dotenv +# Add the script directories to sys.path +script_dir = os.path.dirname(__file__) +sys.path.append(script_dir) +sys.path.append(os.path.join(script_dir, "..")) +sys.path.append(os.path.join(script_dir, "..", "carla_scripts")) +sys.path.append(os.path.join(script_dir, "..", "utils")) +sys.path.append(os.path.join(script_dir, "..", "test_scenarios")) +import pandas as pd +import typing +import importlib +import utils.trafficlight_helper as trafficlight_helper +importlib.reload(trafficlight_helper) + +TrafficLightHelper = trafficlight_helper.TrafficLightHelper +# TrafficLightHelper.set_offset((0.06, 328.61)) # this is the offset for the CARLA town01 + + +load_dotenv(os.path.join(script_dir, "..", ".env")) + +TRAFFICLIGHT_GROUP_BLUEPRINT_PATH = "/Game/Carla/Static/TrafficLight/Streetlights_01/BP_TrafficLightGroup" +TRAFFICLIGHT_BLUEPRINT_PATH = "/Game/Carla/Static/TrafficLight/Streetlights_01/BP_TrafficLight" +TRAFFICLIGHT_HEAD_ONLY_BLUEPRINT_PATH = "/Game/Carla/Static/TrafficLight/Streetlights_01/BP_TrafficLight_Head_Only" +# load the tls table +TLS_TABLE_PATH = os.environ["SUMO_TLS_TABLE_PATH"] +tls_table = pd.read_csv(TLS_TABLE_PATH) +# junction_id,link_id,x,y,z,heading + +# this stores the trafficlight groups, key is the junction_id, value is a list of trafficlight_unreal_transforms +trafficlight_groups = typing.DefaultDict(list) + +for junction_id, group in tls_table.groupby('junction_id'): + for link_id, link_group in group.groupby('link_id'): + position_x = link_group['x'].values[0] + position_y = link_group['y'].values[0] + position_z = link_group['z'].values[0] + heading = link_group['heading'].values[0] + traffic_sumo_location, traffic_sumo_rotation = TrafficLightHelper.create_sumo_transform(position_x, position_y, position_z, heading) + trafficlight_carla_location, trafficlight_carla_rotation = TrafficLightHelper.sumo_transform_to_carla_transform(traffic_sumo_location, traffic_sumo_rotation) + trafficlight_unreal_location, trafficlight_unreal_rotation = TrafficLightHelper.carla_transform_to_unreal_transform(trafficlight_carla_location, trafficlight_carla_rotation) + trafficlight_groups[junction_id].append((trafficlight_unreal_location, trafficlight_unreal_rotation)) + +for junction_id, trafficlight_transforms in trafficlight_groups.items(): + trafficlight_group_location, trafficlight_group_rotation = TrafficLightHelper.get_trafficlight_group_transform_from_trafficlight_unreal_transforms(trafficlight_transforms) + + # spawn the trafficlight group + trafficlight_class = unreal.EditorAssetLibrary.load_blueprint_class(TRAFFICLIGHT_GROUP_BLUEPRINT_PATH) + trafficlight_group_actor = unreal.EditorLevelLibrary.spawn_actor_from_class(trafficlight_class, + trafficlight_group_location, + trafficlight_group_rotation + ) + trafficlight_group_actor.set_actor_label(f"TrafficLightGroup{junction_id}", mark_dirty=True) + unreal.log(f"Spawned TrafficLightGroup{junction_id} at {trafficlight_group_location}") + + # spawn the trafficlights + for (trafficlight_unreal_location, trafficlight_unreal_rotation) in trafficlight_transforms: + trafficlight_unreal_location.z = 300 + trafficlight_class = unreal.EditorAssetLibrary.load_blueprint_class(TRAFFICLIGHT_HEAD_ONLY_BLUEPRINT_PATH) + trafficlight_actor = unreal.EditorLevelLibrary.spawn_actor_from_class(trafficlight_class, + trafficlight_unreal_location, + trafficlight_unreal_rotation + ) + trafficlight_actor.set_actor_label(f"TrafficLight{trafficlight_unreal_location.x}_{trafficlight_unreal_location.y}", mark_dirty=True) + unreal.log(f"Spawned TrafficLight{trafficlight_unreal_location.x}_{trafficlight_unreal_location.y} at {trafficlight_unreal_location}") + # add the trafficlight to the trafficlight group's trafficlights list + current_list = trafficlight_group_actor.get_editor_property("TrafficLights") + current_list.append(trafficlight_actor) + trafficlight_group_actor.set_editor_property("TrafficLights", current_list) + # show the available properties of the trafficlight_group_actor + + + + + + + + + + + + + + + + + + diff --git a/Carla/unreal_scripts/test_placing_tls.py b/Carla/unreal_scripts/test_placing_tls.py new file mode 100644 index 00000000..0515396d --- /dev/null +++ b/Carla/unreal_scripts/test_placing_tls.py @@ -0,0 +1,33 @@ +import unreal +import sys +import os + +# Add the script directories to sys.path +script_dir = os.path.dirname(__file__) +sys.path.append(script_dir) +sys.path.append(os.path.join(script_dir, "..")) +sys.path.append(os.path.join(script_dir, "..", "carla_scripts")) +sys.path.append(os.path.join(script_dir, "..", "utils")) +# Asset path (relative to /Game) +blueprint_path = "/Game/Carla/Static/TrafficLight/Streetlights_01/BP_TrafficLight" + +# Load the Blueprint class +bp_class = unreal.EditorAssetLibrary.load_blueprint_class(blueprint_path) + +if not bp_class: + unreal.log_error(f"Failed to load blueprint class at: {blueprint_path}") +else: + # Define spawn location and rotation + location = unreal.Vector(32341.009766, 20203.007812, 100.0) + rotation = unreal.Rotator(0.0, 0.0, 90.0) + + # Spawn the actor in the level + actor = unreal.EditorLevelLibrary.spawn_actor_from_class(bp_class, location, rotation) + + if actor: + # Assign a custom label + custom_label = "TrafficLight37" + actor.set_actor_label(custom_label, mark_dirty=True) + unreal.log(f"✅ Spawned and labeled as: {custom_label}") + else: + unreal.log_error("❌ Failed to spawn actor.") \ No newline at end of file diff --git a/Carla/unreal_scripts/visualize_tls_table.py b/Carla/unreal_scripts/visualize_tls_table.py new file mode 100644 index 00000000..e171c611 --- /dev/null +++ b/Carla/unreal_scripts/visualize_tls_table.py @@ -0,0 +1,38 @@ +import matplotlib.pyplot as plt +import math +import pandas as pd + +def visualize_tls_positions(tls_data): + plt.figure(figsize=(10, 8)) + + for index, entry in tls_data.iterrows(): + x = entry["x"] + y = entry["y"] + heading = entry["heading"] + # Arrow parameters + heading = math.degrees(heading) + heading = (heading + 360) % 360 + + heading = math.radians(heading) + dx = math.cos(heading) * 1.5 # Arrow length + dy = math.sin(heading) * 1.5 + + # Plot arrow and label + plt.arrow(x, y, dx, dy, head_width=0.5, head_length=0.7, fc='green', ec='green') + # plt.text(x, y + 0.5, f"J{entry['junction_id']}-L{entry['link_id']}", fontsize=9, ha='center', color='black') + # mark the heading in text + heading = math.degrees(heading) + plt.text(x, y + 0.5, f"{heading:.2f}", fontsize=9, ha='center', color='black') + + plt.xlabel("X (m)") + plt.ylabel("Y (m)") + plt.title("Traffic Light Positions and Headings") + plt.grid(True) + plt.axis("equal") + # plt.show() + plt.savefig('tls_positions.png') + +if __name__ == "__main__": + tls_table_path = 'test_scenarios/Town01_with_ego_type_as_blueprint/traffic_light_table.csv' + tls_table = pd.read_csv(tls_table_path) + visualize_tls_positions(tls_table) \ No newline at end of file diff --git a/CommonLib/ConfigHelper.cpp b/CommonLib/ConfigHelper.cpp index 9c43740b..255513c7 100644 --- a/CommonLib/ConfigHelper.cpp +++ b/CommonLib/ConfigHelper.cpp @@ -385,8 +385,128 @@ int ConfigHelper::getConfig(string configName) { SumoSetup.SpeedMode = 0; //printf("\nXil not specified as server or client! Will set Xil as client!\n"); } + if (node["ExecutionOrder"]) { + SumoSetup.ExecutionOrder = parserInteger(node, "ExecutionOrder"); + } + else { + SumoSetup.ExecutionOrder = 1; + printf("\nSumo Execution Order not specified! Will use 1 as default!\n"); + } + + // =========================================================================== + // READ Carla Setup section + // =========================================================================== + node = config["CarlaSetup"]; + if (node["EnableVerboseLog"]) { + CarlaSetup.EnableVerboseLog = parserFlag(node, "EnableVerboseLog"); + } + else { + CarlaSetup.EnableVerboseLog = false; + printf("\nWill disable verbose log as default!\n"); + } + if (node["EnableCosimulation"]) { + CarlaSetup.EnableCosimulation = parserFlag(node, "EnableCosimulation"); + } + else { + CarlaSetup.EnableCosimulation = false; + } + + //if (node["EnableEgoSimulink"]) { + // CarlaSetup.EnableEgoSimulink = parserFlag(node, "EnableEgoSimulink"); + //} + //else { + // CarlaSetup.EnableEgoSimulink = false; + //} + if (node["EnableExternalControl"]) { + CarlaSetup.EnableExternalControl = parserFlag(node, "EnableExternalControl"); + } + else { + CarlaSetup.EnableExternalControl = false; + } + if (node["UseVehicleTypeAsBlueprint"]) { + CarlaSetup.UseVehicleTypeAsBlueprint = parserFlag(node, "UseVehicleTypeAsBlueprint"); + } + else { + CarlaSetup.UseVehicleTypeAsBlueprint = false; + } + + if (node["CenteredViewId"]) { + CarlaSetup.CenteredViewId = parserString(node, "CenteredViewId"); + } + else { + CarlaSetup.CenteredViewId = "ego"; + printf("\nCentered View Id not specified! Will use ego as default!\n"); + } + if (node["CarlaServerIP"]) { + CarlaSetup.CarlaServerIP = parserString(node, "CarlaServerIP"); + } + else { + CarlaSetup.CarlaServerIP = "127.0.0.1"; + } + + if (node["CarlaServerPort"]) { + CarlaSetup.CarlaServerPort = parserInteger(node, "CarlaServerPort"); + } + else { + CarlaSetup.CarlaServerPort = 2000; + } + if (node["CarlaClientIP"]) { + CarlaSetup.CarlaClientIP = parserString(node, "CarlaClientIP"); + } + else { + if (SubscriptionVehicleList.vehicleSubscribeId_v.size() == 1) { + if (!ApplicationSetup.EnableApplicationLayer && XilSetup.EnableXil) { + CarlaSetup.CarlaClientIP = get<2>(XilSetup.VehicleSubscription[0])[0]; + } + else { + CarlaSetup.CarlaClientIP = get<2>(ApplicationSetup.VehicleSubscription[0])[0]; + } + } + else { + CarlaSetup.CarlaClientIP = "127.0.0.1"; + } + } + + if (node["CarlaClientPort"]) { + CarlaSetup.CarlaClientPort = parserInteger(node, "CarlaClientPort"); + } + else { + if (SubscriptionVehicleList.vehicleSubscribeId_v.size() == 1) { + if (!ApplicationSetup.EnableApplicationLayer && XilSetup.EnableXil) { + CarlaSetup.CarlaClientPort = get<3>(XilSetup.VehicleSubscription[0])[0]; + } + else { + CarlaSetup.CarlaClientPort = get<3>(ApplicationSetup.VehicleSubscription[0])[0]; + } + } + else { + CarlaSetup.CarlaClientPort = 2001; + } + } + if (node["CarlaMap"]) { + CarlaSetup.CarlaMapName = parserString(node, "CarlaMapName"); + } + else { + CarlaSetup.CarlaMapName = "Town01"; + printf("\nCarla Map not specified! Will use Town01 as default!\n"); + } + if (node["TrafficRefreshRate"]) { + CarlaSetup.TrafficRefreshRate = parserDouble(node, "TrafficRefreshRate"); + } + else { + CarlaSetup.TrafficRefreshRate = 0.1; + //printf("\nCarMaker Port not specified! Will use 7331 as default!\n"); + } + + if (node["InterestedIds"]) { + parserStringVector(node, "InterestedIds", CarlaSetup.InterestedIds); + } + else { + CarlaSetup.InterestedIds = {"ego"}; + printf("\nDefault to track actor with id ego\n"); + } return 0; } diff --git a/CommonLib/ConfigHelper.h b/CommonLib/ConfigHelper.h index 4720ada6..f6c36e73 100644 --- a/CommonLib/ConfigHelper.h +++ b/CommonLib/ConfigHelper.h @@ -109,11 +109,37 @@ struct CarMakerSetup_t { }; +struct CarlaSetup_t { + bool EnableVerboseLog; + + bool EnableCosimulation; + + bool EnableExternalControl; + + bool UseVehicleTypeAsBlueprint; + + std::string CarlaServerIP; + + int CarlaServerPort; + + std::string CarlaClientIP; + + int CarlaClientPort; + + std::string CarlaMapName; + + std::string CenteredViewId; + + double TrafficRefreshRate; + + std::vector InterestedIds; + +}; struct SumoSetup_t { int SpeedMode; - + int ExecutionOrder; }; typedef struct SubscriptionVehicleList_t { @@ -178,6 +204,7 @@ class ConfigHelper XilSetup_t XilSetup; CarMakerSetup_t CarMakerSetup; SumoSetup_t SumoSetup; + CarlaSetup_t CarlaSetup; diff --git a/CommonLib/ConfigHelper.py b/CommonLib/ConfigHelper.py new file mode 100644 index 00000000..25835f3a --- /dev/null +++ b/CommonLib/ConfigHelper.py @@ -0,0 +1,120 @@ +import yaml +import os +from collections import defaultdict + +# Enum-like mapping +class TypeNamesEnum: + ego = 0 + link = 1 + point = 2 + vehicleType = 3 + intersection = 4 + detector = 5 + +# Map to associate the strings with enum values +s_mapTypeValues = { + "ego": TypeNamesEnum.ego, + "link": TypeNamesEnum.link, + "point": TypeNamesEnum.point, + "vehicleType": TypeNamesEnum.vehicleType, + "intersection": TypeNamesEnum.intersection, + "detector": TypeNamesEnum.detector +} + +class ConfigHelper: + def __init__(self): + # Initialize the s_mapTypeValues + self.simulation_setup = defaultdict(lambda: None) + self.application_setup = defaultdict(lambda: None) + self.Xil_setup = defaultdict(lambda: None) + self.CarMaker_setup = defaultdict(lambda: None) + self.Sumo_setup = defaultdict(lambda: None) + self.Carla_setup = defaultdict(lambda: None) + def getConfig(self, configName): + path = os.path.normpath(configName) + with open(path, 'r') as file: + config = yaml.safe_load(file) + + # Simulation Setup + simulation_node = config.get("SimulationSetup", {}) + self.simulation_setup["EnableRealSim"] = self.parserFlag(simulation_node, "EnableRealSim", True) + self.simulation_setup["EnableVerboseLog"] = self.parserFlag(simulation_node, "EnableVerboseLog", False) + self.simulation_setup["SimulationEndTime"] = self.parserDouble(simulation_node, "SimulationEndTime", 90000) + self.simulation_setup["EnableExternalDynamics"] = self.parserFlag(simulation_node, "EnableExternalDynamics", False) + self.simulation_setup["SelectedTrafficSimulator"] = self.parserString(simulation_node, "SelectedTrafficSimulator", "SUMO") + self.simulation_setup["TrafficSimulatorIP"] = self.parserString(simulation_node, "TrafficSimulatorIP", "127.0.0.1") + self.simulation_setup["TrafficSimulatorPort"] = self.parserInteger(simulation_node, "TrafficSimulatorPort", 1337) + self.simulation_setup["SimulationMode"] = self.parserInteger(simulation_node, "SimulationMode", 0) + self.simulation_setup["SimulationModeParameter"] = self.parserDouble(simulation_node, "SimulationModeParameter", 0) + self.simulation_setup["VehicleMessageField"] = self.parserStringVector(simulation_node, "VehicleMessageField", ["id", "type", "speed", "positionX", "positionY"]) + # Sumo Setup + sumo_node = config.get("SumoSetup", {}) + self.Sumo_setup["SpeedMode"] = sumo_node.get("SpeedMode", 0) + # Application Setup + app_node = config.get("ApplicationSetup", {}) + self.application_setup["EnableApplicationLayer"] = self.parserFlag(app_node, "EnableApplicationLayer", False) + self.application_setup["VehicleSubscription"] = self.parseVehicleSubscription(app_node, "VehicleSubscription", []) + + # Xil Setup + xil_node = config.get("XilSetup", {}) + self.Xil_setup["EnableXil"] = self.parserFlag(xil_node, "EnableXil", False) + self.Xil_setup["VehicleSubscription"] = self.parseVehicleSubscription(xil_node, "VehicleSubscription", []) + + # Carla Setup + carla_node = config.get("CarlaSetup", {}) + self.Carla_setup["EnableVerboseLog"] = self.parserFlag(carla_node, "EnableVerboseLog", False) + self.Carla_setup["EnableCosimulation"] = self.parserFlag(carla_node, "EnableCosimulation", True) + self.Carla_setup["EnableEgoSimulink"] = self.parserFlag(carla_node, "EnableEgoSimulink", False) + self.Carla_setup["CarlaServerIP"] = self.parserString(carla_node, "CarlaServerIP", "127.0.0.1") + self.Carla_setup["CarlaServerPort"] = self.parserInteger(carla_node, "CarlaServerPort", 420) + self.Carla_setup["CarlaClientIP"] = self.parserString(carla_node, "CarlaClientIP", "127.0.0.1") + self.Carla_setup["CarlaClientPort"] = self.parserInteger(carla_node, "CarlaClientPort", 430) + self.Carla_setup["CarlaMapName"] = self.parserString(carla_node, "CarlaMapName", "Town01") + self.Carla_setup["TrafficRefreshRate"] = self.parserDouble(carla_node, "TrafficRefreshRate", 0.1) + self.Carla_setup["InterestedIds"] = self.parserStringVector(carla_node, "InterestedIds", ["ego"]) + + def resetConfig(self): + # Clear all config settings + self.simulation_setup.clear() + self.application_setup.clear() + self.Xil_setup.clear() + self.CarMaker_setup.clear() + + def parserFlag(self, node, name, default=False): + return node.get(name, default) in ['true', True] + + def parserString(self, node, name, default=""): + return node.get(name, default) + + def parserDouble(self, node, name, default=0.0): + return float(node.get(name, default)) + + def parserInteger(self, node, name, default=0): + return int(node.get(name, default)) + + def parserStringVector(self, node, name, default): + return node.get(name, default) + + + def parseVehicleSubscription(self, node, name, default=[]): + # Process each subscription in the list + subscription_list = node.get(name, default) + if subscription_list is None: + return [] + parsed_subscriptions = [] + for sub in subscription_list: + parsed_subscription = { + "type": sub.get("type"), + "attribute": sub.get("attribute", {}), + "ip": sub.get("ip", []), + "port": sub.get("port", []) + } + parsed_subscriptions.append(parsed_subscription) + return parsed_subscriptions + + + +if __name__ == "__main__": + config_helper = ConfigHelper() + config_path = 'defaultConfig.yaml' + config_helper.getConfig(config_path) diff --git a/CommonLib/MsgHelper.cpp b/CommonLib/MsgHelper.cpp index a917b095..eb850069 100644 --- a/CommonLib/MsgHelper.cpp +++ b/CommonLib/MsgHelper.cpp @@ -117,6 +117,15 @@ void MsgHelper::printVehData(VehFullData_t VehData) { if (VehicleMessageField_set.find("activeLaneChange") != VehicleMessageField_set.end()) { printf("\t activeLaneChange: %d\n", VehData.activeLaneChange); } + if (VehicleMessageField_set.find("length") != VehicleMessageField_set.end()) { + printf("\t length: %f\n", VehData.length); + } + if (VehicleMessageField_set.find("width") != VehicleMessageField_set.end()) { + printf("\t width: %f\n", VehData.width); + } + if (VehicleMessageField_set.find("height") != VehicleMessageField_set.end()) { + printf("\t height: %f\n", VehData.height); + } if (VehicleMessageField_set.find("lightIndicators") != VehicleMessageField_set.end()) { printf("\t lightIndicators: %d\n", VehData.lightIndicators); } @@ -218,7 +227,18 @@ void MsgHelper::printVehDataToFile(const std::string fileName, VehFullData_t Veh if (VehicleMessageField_set.find("activeLaneChange") != VehicleMessageField_set.end()) { fprintf(f, "\t activeLaneChange: %d\n", VehData.activeLaneChange); } - + if (VehicleMessageField_set.find("length") != VehicleMessageField_set.end()) { + fprintf(f, "\t length: %f\n", VehData.length); + } + if (VehicleMessageField_set.find("width") != VehicleMessageField_set.end()) { + fprintf(f, "\t width: %f\n", VehData.width); + } + if (VehicleMessageField_set.find("height") != VehicleMessageField_set.end()) { + fprintf(f, "\t height: %f\n", VehData.height); + } + if (VehicleMessageField_set.find("lightIndicators") != VehicleMessageField_set.end()) { + fprintf(f, "\t lightIndicators: %d\n", VehData.lightIndicators); + } fclose(f); } @@ -360,8 +380,11 @@ void MsgHelper::packVehData(VehFullData_t VehData, char* buffer, int* iByte) { stringVehDataToBuffer(VehData.linkIdNext, "linkIdNext", buffer, iByte); numericVehDataToBuffer(VehData.grade, "grade", buffer, iByte); numericVehDataToBuffer(VehData.activeLaneChange, "activeLaneChange", buffer, iByte); + numericVehDataToBuffer(VehData.length, "length", buffer, iByte); + numericVehDataToBuffer(VehData.width, "width", buffer, iByte); + numericVehDataToBuffer(VehData.height, "height", buffer, iByte); numericVehDataToBuffer(VehData.lightIndicators, "lightIndicators", buffer, iByte); - + // packVehData: add new vehicle message field here // go back to the first byte location and parser message size @@ -412,6 +435,9 @@ void MsgHelper::depackVehData(char* buffer, VehFullData_t& VehData) { bufferToStringVehData(buffer, &iByte, "linkIdNext", tempString); VehData.linkIdNext = tempString; bufferToNumericVehData(buffer, &iByte, "grade", tempFloat); VehData.grade = tempFloat; bufferToNumericVehData(buffer, &iByte, "activeLaneChange", tempInt8); VehData.activeLaneChange = tempInt8; + bufferToNumericVehData(buffer, &iByte, "length", tempFloat); VehData.length = tempFloat; + bufferToNumericVehData(buffer, &iByte, "width", tempFloat); VehData.width = tempFloat; + bufferToNumericVehData(buffer, &iByte, "height", tempFloat); VehData.height = tempFloat; bufferToNumericVehData(buffer, &iByte, "lightIndicators", tempUint16); VehData.lightIndicators = tempUint16; // depackVehData: add new vehicle message field here diff --git a/CommonLib/MsgHelper.py b/CommonLib/MsgHelper.py new file mode 100644 index 00000000..f1624408 --- /dev/null +++ b/CommonLib/MsgHelper.py @@ -0,0 +1,605 @@ +from re import M +from typing import List + +from numpy import byte +from CommonLib.VehDataMsgDefs import VehData, TrafficLightData, DetectorData +import struct + + +class MessageType: + vehicle_data = 1 + traffic_light_data = 2 + detector_data = 3 + +# VehicleMessageField: [id, type, vehicleClass, speed, acceleration, positionX, positionY, positionZ, heading, +# color, linkId, laneId, distanceTravel, speedDesired, grade, length, width, height] + +class MsgHelper: + + def __init__(self): + self.vehicle_msg_field_valid = { + 'id': False, + 'type': False, + 'vehicleClass': False, + 'speed': False, + 'acceleration': False, + 'positionX': False, + 'positionY': False, + 'positionZ': False, + 'heading': False, + 'color': False, + 'linkId': False, + 'laneId': False, + 'distanceTravel': False, + 'speedDesired': False, + 'accelerationDesired': False, + 'hasPrecedingVehicle': False, + 'precedingVehicleId': False, + 'precedingVehicleDistance': False, + 'precedingVehicleSpeed': False, + 'signalLightId': False, + 'signalLightHeadId': False, + 'signalLightDistance': False, + 'signalLightColor': False, + 'speedLimit': False, + 'speedLimitNext': False, + 'speedLimitChangeDistance': False, + 'linkIdNext': False, + 'grade': False, + 'length': False, + 'width': False, + 'height': False, + 'activeLaneChange': False + } + self.traffic_light_msg_field_valid = { + 'id': False, + 'name': False, + 'state': False + } + self.detector_msg_field_valid = { + 'id': False, + 'name': False, + 'state': False, + } + # DO NOT change. These are predetermined message header size + # specified for Real-Sim + self.msg_header_size = 9 + self.msg_each_header_size = 3 + + + def set_vehicle_message_field(self, vehicle_msg_field: List[str]): + for field in vehicle_msg_field: + self.vehicle_msg_field_valid[field] = True + + def set_traffic_light_message_field(self, traffic_light_msg_field: List[str]): + for field in traffic_light_msg_field: + self.traffic_light_msg_field_valid[field] = True + + def set_detector_message_field(self, detector_msg_field: List[str]): + for field in detector_msg_field: + self.detector_msg_field_valid[field] = True + + @ staticmethod + def unpack_float(data, index): + value = struct.unpack('f', data[index:index+4])[0] + return value, index + 4 + # Helper function to unpack a single int32 + @ staticmethod + def unpack_int32(data, index): + value = struct.unpack('i', data[index:index+4])[0] + return value, index + 4 + # Helper function to unpack a single uint32 + @ staticmethod + def unpack_uint32(data, index): + value = struct.unpack('I', data[index:index+4])[0] + return value, index + 4 + @ staticmethod + def unpack_uint16(data, index): + value = struct.unpack('H', data[index:index+2])[0] + return value, index + 2 + @ staticmethod + def unpack_uint8(data, index): + value = struct.unpack('B', data[index:index+1])[0] + return value, index + 1 + # Helper function to unpack a single int8 + @ staticmethod + def unpack_int8(data, index): + value = struct.unpack('b', data[index:index+1])[0] + return value, index + 1 + + def depack_veh_data(self, byte_data: bytes)-> VehData: + veh_data = VehData() + byte_index = 0 # Index in byte_data + # byte_index += self.msg_header_size # Skip the message header + # byte_index += self.msg_each_header_size # Skip the message type header + # Helper function to unpack a single float + + # Unpack fields based on vehicle_msg_field_valid + if self.vehicle_msg_field_valid.get('id'): + str_data, str_len, byte_index, uint8Arr = MsgHelper.depack_string(byte_data, byte_index) + veh_data.id = str_data + + if self.vehicle_msg_field_valid.get('type'): + str_data, str_len, byte_index, uint8Arr = MsgHelper.depack_string(byte_data, byte_index) + veh_data.type = str_data + + if self.vehicle_msg_field_valid.get('vehicleClass'): + str_data, str_len, byte_index, uint8Arr = MsgHelper.depack_string(byte_data, byte_index) + veh_data.vehicleClass = str_data + + if self.vehicle_msg_field_valid.get('speed'): + veh_data.speed, byte_index = MsgHelper.unpack_float(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('acceleration'): + veh_data.acceleration, byte_index = MsgHelper.unpack_float(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('positionX'): + veh_data.positionX, byte_index = MsgHelper.unpack_float(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('positionY'): + veh_data.positionY, byte_index = MsgHelper.unpack_float(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('positionZ'): + veh_data.positionZ, byte_index = MsgHelper.unpack_float(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('heading'): + veh_data.heading, byte_index = MsgHelper.unpack_float(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('color'): + veh_data.color, byte_index = MsgHelper.unpack_uint32(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('linkId'): + str_data, str_len, byte_index, uint8Arr = MsgHelper.depack_string(byte_data, byte_index) + veh_data.linkId = str_data + + if self.vehicle_msg_field_valid.get('laneId'): + veh_data.laneId, byte_index = MsgHelper.unpack_int32(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('distanceTravel'): + veh_data.distanceTravel, byte_index = MsgHelper.unpack_float(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('speedDesired'): + veh_data.speedDesired, byte_index = MsgHelper.unpack_float(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('accelerationDesired'): + veh_data.accelerationDesired, byte_index = MsgHelper.unpack_float(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('hasPrecedingVehicle'): + veh_data.hasPrecedingVehicle, byte_index = MsgHelper.unpack_int8(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('precedingVehicleId'): + str_data, str_len, byte_index, uint8Arr = MsgHelper.depack_string(byte_data, byte_index) + veh_data.precedingVehicleId = str_data + + if self.vehicle_msg_field_valid.get('precedingVehicleDistance'): + veh_data.precedingVehicleDistance, byte_index = MsgHelper.unpack_float(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('precedingVehicleSpeed'): + veh_data.precedingVehicleSpeed, byte_index = MsgHelper.unpack_float(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('signalLightId'): + str_data, str_len, byte_index, uint8Arr = MsgHelper.depack_string(byte_data, byte_index) + veh_data.signalLightId = str_data + + if self.vehicle_msg_field_valid.get('signalLightHeadId'): + veh_data.signalLightHeadId, byte_index = MsgHelper.unpack_int32(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('signalLightDistance'): + veh_data.signalLightDistance, byte_index = MsgHelper.unpack_float(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('signalLightColor'): + veh_data.signalLightColor, byte_index = MsgHelper.unpack_int8(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('speedLimit'): + veh_data.speedLimit, byte_index = MsgHelper.unpack_float(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('speedLimitNext'): + veh_data.speedLimitNext, byte_index = MsgHelper.unpack_float(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('speedLimitChangeDistance'): + veh_data.speedLimitChangeDistance, byte_index = MsgHelper.unpack_float(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('linkIdNext'): + str_data, str_len, byte_index, uint8Arr = MsgHelper.depack_string(byte_data, byte_index) + veh_data.linkIdNext = str_data + + if self.vehicle_msg_field_valid.get('grade'): + veh_data.grade, byte_index = MsgHelper.unpack_float(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('activeLaneChange'): + veh_data.activeLaneChange, byte_index = MsgHelper.unpack_int8(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('length'): + veh_data.length, byte_index = MsgHelper.unpack_float(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('width'): + veh_data.width, byte_index = MsgHelper.unpack_float(byte_data, byte_index) + + if self.vehicle_msg_field_valid.get('height'): + veh_data.height, byte_index = MsgHelper.unpack_float(byte_data, byte_index) + + return veh_data + + def pack_veh_data(self, byte_data: bytearray, byte_index, veh_data: VehData): + # Calculate nMsgSize based on vehicle_msg_field_valid flags and veh_data field lengths + + + msg_size = ( + round(self.vehicle_msg_field_valid.get('id', 0) * (1 + len(veh_data.id)) # id + + self.vehicle_msg_field_valid.get('type', 0) * (1 + len(veh_data.type)) # type + + self.vehicle_msg_field_valid.get('vehicleClass', 0) * (1 + len(veh_data.vehicleClass)) # vehicleClass + + self.vehicle_msg_field_valid.get('speed', 0) * 4 # speed + + self.vehicle_msg_field_valid.get('acceleration', 0) * 4 # acceleration + + self.vehicle_msg_field_valid.get('positionX', 0) * 4 # positionX + + self.vehicle_msg_field_valid.get('positionY', 0) * 4 # positionY + + self.vehicle_msg_field_valid.get('positionZ', 0) * 4 # positionZ + + self.vehicle_msg_field_valid.get('heading', 0) * 4 # heading + + self.vehicle_msg_field_valid.get('color', 0) * 4 # color + + self.vehicle_msg_field_valid.get('linkId', 0) * (1 + len(veh_data.linkId)) # linkId + + self.vehicle_msg_field_valid.get('laneId', 0) * 4 # laneId + + self.vehicle_msg_field_valid.get('distanceTravel', 0) * 4 # distanceTravel + + self.vehicle_msg_field_valid.get('speedDesired', 0) * 4 # speedDesired + + self.vehicle_msg_field_valid.get('accelerationDesired', 0) * 4 # accelerationDesired + + self.vehicle_msg_field_valid.get('hasPrecedingVehicle', 0) * 1 # hasPrecedingVehicle + + self.vehicle_msg_field_valid.get('precedingVehicleId', 0) * (1 + len(veh_data.precedingVehicleId)) # precedingVehicleId + + self.vehicle_msg_field_valid.get('precedingVehicleDistance', 0) * 4 # precedingVehicleDistance + + self.vehicle_msg_field_valid.get('precedingVehicleSpeed', 0) * 4 # precedingVehicleSpeed + + self.vehicle_msg_field_valid.get('signalLightId', 0) * (1 + len(veh_data.signalLightId)) # signalLightId + + self.vehicle_msg_field_valid.get('signalLightHeadId', 0) * 4 # signalLightHeadId + + self.vehicle_msg_field_valid.get('signalLightDistance', 0) * 4 # signalLightDistance + + self.vehicle_msg_field_valid.get('signalLightColor', 0) * 1 # signalLightColor + + self.vehicle_msg_field_valid.get('speedLimit', 0) * 4 # speedLimit + + self.vehicle_msg_field_valid.get('speedLimitNext', 0) * 4 # speedLimitNext + + self.vehicle_msg_field_valid.get('speedLimitChangeDistance', 0) * 4 # speedLimitChangeDistance + + self.vehicle_msg_field_valid.get('linkIdNext', 0) * (1 + len(veh_data.linkIdNext)) # linkIdNext + + self.vehicle_msg_field_valid.get('grade', 0) * 4 # grade + + self.vehicle_msg_field_valid.get('activeLaneChange', 0) * 1 # activeLaneChange + + self.vehicle_msg_field_valid.get('length', 0) * 4 # length + + self.vehicle_msg_field_valid.get('width', 0) * 4 # width + + self.vehicle_msg_field_valid.get('height', 0) * 4 # height + ) + ) + veh_msg_size = round(msg_size) + self.msg_each_header_size + + # Pack message size as uint16, 2 bytes + byte_data[byte_index:byte_index+2] = struct.pack('H', veh_msg_size) + byte_index += 2 + # Pack message type as uint8, 1 byte + byte_data[byte_index] = MessageType.vehicle_data + byte_index += 1 + + + # Pack fields conditionally based on vehicle_msg_field_valid + if self.vehicle_msg_field_valid.get('id'): + byte_data, byte_index = MsgHelper.pack_string(byte_data, byte_index, veh_data.id) + + if self.vehicle_msg_field_valid.get('type'): + byte_data, byte_index = MsgHelper.pack_string(byte_data, byte_index, veh_data.type) + + if self.vehicle_msg_field_valid.get('vehicleClass'): + byte_data, byte_index = MsgHelper.pack_string(byte_data, byte_index, veh_data.vehicleClass) + + if self.vehicle_msg_field_valid.get('speed'): + byte_data[byte_index:byte_index+4] = struct.pack('f', veh_data.speed) + byte_index += 4 + + if self.vehicle_msg_field_valid.get('acceleration'): + byte_data[byte_index:byte_index+4] = struct.pack('f', veh_data.acceleration) + byte_index += 4 + + if self.vehicle_msg_field_valid.get('positionX'): + byte_data[byte_index:byte_index+4] = struct.pack('f', veh_data.positionX) + byte_index += 4 + + if self.vehicle_msg_field_valid.get('positionY'): + byte_data[byte_index:byte_index+4] = struct.pack('f', veh_data.positionY) + byte_index += 4 + + if self.vehicle_msg_field_valid.get('positionZ'): + byte_data[byte_index:byte_index+4] = struct.pack('f', veh_data.positionZ) + byte_index += 4 + + if self.vehicle_msg_field_valid.get('heading'): + byte_data[byte_index:byte_index+4] = struct.pack('f', veh_data.heading) + byte_index += 4 + + if self.vehicle_msg_field_valid.get('color'): + byte_data[byte_index:byte_index+4] = struct.pack('I', veh_data.color) + byte_index += 4 + + if self.vehicle_msg_field_valid.get('linkId'): + byte_data, byte_index = MsgHelper.pack_string(byte_data, byte_index, veh_data.linkId) + + if self.vehicle_msg_field_valid.get('laneId'): + byte_data[byte_index:byte_index+4] = struct.pack('i', veh_data.laneId) + byte_index += 4 + + if self.vehicle_msg_field_valid.get('distanceTravel'): + byte_data[byte_index:byte_index+4] = struct.pack('f', veh_data.distanceTravel) + byte_index += 4 + + if self.vehicle_msg_field_valid.get('speedDesired'): + byte_data[byte_index:byte_index+4] = struct.pack('f', veh_data.speedDesired) + byte_index += 4 + + if self.vehicle_msg_field_valid.get('accelerationDesired'): + byte_data[byte_index:byte_index+4] = struct.pack('f', veh_data.accelerationDesired) + byte_index += 4 + + if self.vehicle_msg_field_valid.get('hasPrecedingVehicle'): + byte_data[byte_index] = veh_data.hasPrecedingVehicle + byte_index += 1 + + if self.vehicle_msg_field_valid.get('precedingVehicleId'): + byte_data, byte_index = MsgHelper.pack_string(byte_data, byte_index, veh_data.precedingVehicleId) + + if self.vehicle_msg_field_valid.get('precedingVehicleDistance'): + byte_data[byte_index:byte_index+4] = struct.pack('f', veh_data.precedingVehicleDistance) + byte_index += 4 + + if self.vehicle_msg_field_valid.get('precedingVehicleSpeed'): + byte_data[byte_index:byte_index+4] = struct.pack('f', veh_data.precedingVehicleSpeed) + byte_index += 4 + + if self.vehicle_msg_field_valid.get('signalLightId'): + byte_data, byte_index = MsgHelper.pack_string(byte_data, byte_index, veh_data.signalLightId) + + if self.vehicle_msg_field_valid.get('signalLightHeadId'): + byte_data[byte_index:byte_index+4] = struct.pack('i', veh_data.signalLightHeadId) + byte_index += 4 + + if self.vehicle_msg_field_valid.get('signalLightDistance'): + byte_data[byte_index:byte_index+4] = struct.pack('f', veh_data.signalLightDistance) + byte_index += 4 + + if self.vehicle_msg_field_valid.get('signalLightColor'): + byte_data[byte_index] = veh_data.signalLightColor + byte_index += 1 + + if self.vehicle_msg_field_valid.get('speedLimit'): + byte_data[byte_index:byte_index+4] = struct.pack('f', veh_data.speedLimit) + byte_index += 4 + + if self.vehicle_msg_field_valid.get('speedLimitNext'): + byte_data[byte_index:byte_index+4] = struct.pack('f', veh_data.speedLimitNext) + byte_index += 4 + + if self.vehicle_msg_field_valid.get('speedLimitChangeDistance'): + byte_data[byte_index:byte_index+4] = struct.pack('f', veh_data.speedLimitChangeDistance) + byte_index += 4 + + if self.vehicle_msg_field_valid.get('linkIdNext'): + byte_data, byte_index = MsgHelper.pack_string(byte_data, byte_index, veh_data.linkIdNext) + + if self.vehicle_msg_field_valid.get('grade'): + byte_data[byte_index:byte_index+4] = struct.pack('f', veh_data.grade) + byte_index += 4 + + if self.vehicle_msg_field_valid.get('activeLaneChange'): + byte_data[byte_index] = veh_data.activeLaneChange + byte_index += 1 + + if self.vehicle_msg_field_valid.get('length'): + byte_data[byte_index:byte_index+4] = struct.pack('f', veh_data.length) + byte_index += 4 + + if self.vehicle_msg_field_valid.get('width'): + byte_data[byte_index:byte_index+4] = struct.pack('f', veh_data.width) + byte_index += 4 + + if self.vehicle_msg_field_valid.get('height'): + byte_data[byte_index:byte_index+4] = struct.pack('f', veh_data.height) + byte_index += 4 + + return byte_data, msg_size, byte_index + + def depack_traffic_light_data(self, byte_data: bytes)-> TrafficLightData: + traffic_light_data = TrafficLightData() + byte_index = 0 + if self.traffic_light_msg_field_valid.get('id'): + traffic_light_data.id, byte_index = MsgHelper.unpack_uint32(byte_data, byte_index) + if self.traffic_light_msg_field_valid.get('name'): + str_data, str_len, byte_index, uint8Arr = MsgHelper.depack_string(byte_data, byte_index) + traffic_light_data.name = str_data + if self.traffic_light_msg_field_valid.get('state'): + str_data, str_len, byte_index, uint8Arr = MsgHelper.depack_string(byte_data, byte_index) + traffic_light_data.state = str_data + + return traffic_light_data + + def pack_traffic_light_data(self, byte_data: bytearray, byte_index, traffic_light_data: TrafficLightData): + # Calculate nMsgSize based on traffic_light_msg_field_valid flags and traffic_light_data field lengths + msg_size = ( + round(self.traffic_light_msg_field_valid.get('id', 0) * 4 # id + + self.traffic_light_msg_field_valid.get('name', 0) * (1 + len(traffic_light_data.name)) # name + + self.traffic_light_msg_field_valid.get('state', 0) * (1 + len(traffic_light_data.state)) # state + ) + ) + traffic_light_msg_size = round(msg_size) + self.msg_each_header_size + + # Pack message size as uint16, 2 bytes + byte_data[byte_index:byte_index+2] = struct.pack('H', traffic_light_msg_size) + byte_index += 2 + # Pack message type as uint8, 1 byte + byte_data[byte_index] = MessageType.traffic_light_data + byte_index += 1 + + # Pack fields conditionally based on traffic_light_msg_field_valid + if self.traffic_light_msg_field_valid.get('id'): + byte_data[byte_index:byte_index+4] = struct.pack('I', traffic_light_data.id) + byte_index += 4 + + if self.traffic_light_msg_field_valid.get('name'): + byte_data, byte_index = MsgHelper.pack_string(byte_data, byte_index, traffic_light_data.name) + + if self.traffic_light_msg_field_valid.get('state'): + byte_data, byte_index = MsgHelper.pack_string(byte_data, byte_index, traffic_light_data.state) + + return byte_data, msg_size, byte_index + + def pack_msg_header(self, byte_data: bytearray, simulation_state: int, t: float, total_msg_size: int): + byte_index = 0 + # Pack simulation_state as uint8 + byte_data[byte_index] = simulation_state + byte_index += 1 + + # Pack t as float + byte_data[byte_index:byte_index+4] = struct.pack('f', t) + byte_index += 4 + + # Pack total_msg_size as uint32 + byte_data[byte_index:byte_index+4] = struct.pack('I', total_msg_size) + byte_index += 4 + + return byte_data, byte_index + + def pack_detector_data(self, byte_data: bytearray, byte_index, detector_data: DetectorData): + # Calculate nMsgSize based on detector_msg_field_valid flags and detector_data field lengths + msg_size = ( + round(self.detector_msg_field_valid.get('id', 0) * 1 # id + + self.detector_msg_field_valid.get('name', 0) * (1 + len(detector_data.name)) # name + + self.detector_msg_field_valid.get('state', 0) * 1 # state + ) + ) + detector_msg_size = round(msg_size) + self.msg_each_header_size + + # Pack message size as uint16, 2 bytes + byte_data[byte_index:byte_index+2] = struct.pack('H', detector_msg_size) + byte_index += 2 + # Pack message type as uint8, 1 byte + byte_data[byte_index] = MessageType.detector_data + byte_index += 1 + + # Pack fields conditionally based on detector_msg_field_valid + if self.detector_msg_field_valid.get('id'): + byte_data[byte_index] = detector_data.id + byte_index += 1 + + if self.detector_msg_field_valid.get('name'): + byte_data, byte_index = MsgHelper.pack_string(byte_data, byte_index, detector_data.name) + + if self.detector_msg_field_valid.get('state'): + byte_data[byte_index] = detector_data.state + byte_index += 1 + + return byte_data, msg_size, byte_index + + def depack_detector_data(self, byte_data: bytes)-> DetectorData: + detector_data = DetectorData() + byte_index = 0 + if self.detector_msg_field_valid.get('id'): + detector_data.id, byte_index = MsgHelper.unpack_uint8(byte_data, byte_index) + if self.detector_msg_field_valid.get('name'): + str_data, str_len, byte_index, uint8Arr = MsgHelper.depack_string(byte_data, byte_index) + detector_data.name = str_data + if self.detector_msg_field_valid.get('state'): + detector_data.state, byte_index = MsgHelper.unpack_uint8(byte_data, byte_index) + + return detector_data + # the primary level header of the message + def depack_msg_header(self, byte_data: bytearray): + + byte_index = 0 + sim_state, byte_index = MsgHelper.unpack_uint8(byte_data, byte_index) + sim_time, byte_index = MsgHelper.unpack_float(byte_data, byte_index) + total_msg_size, byte_index = MsgHelper.unpack_uint32(byte_data, byte_index) + + return sim_state, sim_time, total_msg_size + + # the secondary level header of each message + def depack_msg_type(self, byte_data: bytearray): + + byte_index = 0 + msg_size, byte_index = MsgHelper.unpack_uint16(byte_data, byte_index) + msg_type, byte_index = MsgHelper.unpack_int8(byte_data, byte_index) + + return msg_size, msg_type + + @ staticmethod + def depack_string(byte_data: bytearray, byte_index: int): + + # Read the length of the string + strLen = struct.unpack('B', byte_data[byte_index:byte_index+1])[0] + + byte_index += 1 + + # Initialize a string of size 50 and a uint8 array of size 50 + str_data = [''] * strLen + uint8Arr = [0] * strLen + + # Read characters from byte_data according to strLen + for i in range(strLen): + byte_value = byte_data[byte_index] + str_data[i] = chr(byte_value) # Convert byte to character + uint8Arr[i] = byte_value + byte_index += 1 + + # Convert list of characters to a single string + str_data = ''.join(str_data[:strLen]) + + return str_data, strLen, byte_index, uint8Arr + + @ staticmethod + def pack_string(byte_data: bytearray, byte_index: int, str_data: str): + # Get the length of the string + # str_data = str_data.encode('utf-8') # Convert string to bytes + str_data = str_data.encode('utf-8') + str_len = len(str_data) + # Pack the length of the string as a single byte + byte_data[byte_index] = str_len + byte_index += 1 + + # Pack the string itself up to str_len + byte_data[byte_index:byte_index+str_len] = str_data[:str_len] + byte_index += str_len + + return byte_data, byte_index + + + + +def test_pack_simple_message(): + msg_helper = MsgHelper() + + # Set fields to be packed + msg_helper.vehicle_msg_field_valid['id'] = True + msg_helper.vehicle_msg_field_valid['speed'] = True + + # Sample veh_data + veh_data = VehData() + veh_data.id = 'vehicle123' + veh_data.speed = 88.5 + + # Allocate byte_data buffer + byte_data = bytearray(100) # Pre-allocate buffer size + byte_index = 0 + # Pack data + packed_data, nMsgSize, byte_index = msg_helper.pack_veh_data(byte_data=byte_data, byte_index=byte_index, veh_data=veh_data) + + print("Packed byte_data:", packed_data[:nMsgSize]) + print("Packed message size:", nMsgSize) + + msg_size, msg_type = msg_helper.depack_msg_type(packed_data) + print("Unpacked msg_type:", msg_type) + print("Unpacked msg_size:", msg_size) + # veh_data = {} + unpacked_data = msg_helper.depack_veh_data(packed_data[msg_helper.msg_each_header_size:]) + + # print("Unpacked veh_data:", unpacked_data) + print(unpacked_data.id) + +def test_pack_string(): + + msg_helper = MsgHelper() + byte_data = bytearray(100) # Pre-allocate buffer size + byte_index = 0 + str_data = "Hello" + packed_data, byte_index = msg_helper.pack_string(byte_data, byte_index, str_data) + print("Packed string:", packed_data[:byte_index]) + + unpacked_str, str_len, byte_index, uint8Arr = msg_helper.depack_string(packed_data, 0) + print("Unpacked string:", unpacked_str) + +if __name__ == "__main__": + test_pack_simple_message() + test_pack_string() \ No newline at end of file diff --git a/CommonLib/RealSimPack.m b/CommonLib/RealSimPack.m index 9283920b..fd0b66b2 100644 --- a/CommonLib/RealSimPack.m +++ b/CommonLib/RealSimPack.m @@ -72,7 +72,7 @@ function setupImpl(obj) % % try % initialize ByteData - ByteData = zeros(200, 1, 'uint8'); + ByteData = zeros(1024, 1, 'uint8'); % parser ByteData [ByteData, nMsgSize] = obj.packVehData(simState, t, ByteData, VehDataBus); @@ -98,7 +98,7 @@ function validateInputsImpl(obj, simState, t, VehData) function [sz1, sz2] = getOutputSizeImpl(obj) % Maximum length of linear indices and element vector is the % number of elements in the input - sz1 = [200 1]; sz2 = [1 1]; + sz1 = [1024 1]; sz2 = [1 1]; end function [fz1, fz2] = isOutputFixedSizeImpl(~) diff --git a/CommonLib/RealSimSocket.cpp b/CommonLib/RealSimSocket.cpp index 4de866e4..efba51ab 100644 --- a/CommonLib/RealSimSocket.cpp +++ b/CommonLib/RealSimSocket.cpp @@ -39,7 +39,7 @@ #pragma comment (lib, "AdvApi32.lib") #define RECVBUFFERSIZE 1024 -#define SENDBUFFERSIZE 200 +#define SENDBUFFERSIZE 1024 // s-function parameters diff --git a/CommonLib/RealSimSocket.mexw64 b/CommonLib/RealSimSocket.mexw64 index ed035f5dc2402ba6ebdbcab110f915ba50fe8f9d..a4f4ab4a3bd39b923af4e190be0e23b14e16f792 100644 GIT binary patch literal 872448 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
pZ5Q^^B9mJ@HwW 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

3ePs@fSI(Jmok&kXyt4mR78jF-L@GFy&J!L$-dP z^?oqk!+eLu(>R*~rrbwT7;u;I$7t1b33i}4S@YVWQOF*LY+o>d$WchE^|m9wg;mz{ zTMVl_5mtFBtnw<9HLUW?sbqeg7P%+6S#ep>?l(K5W#quHYIt>L2AzR{7OhU*^ua+7uE}eRy zR-6c%jXIHkL^g%HqYB?6E`dbu5rSm#il2Ej?FBg=O?((>O^ z`JlTS=!iG}Z^!vO|L<@qN*Wy5j-#s#*`i;72=C%f4p#$W1M`8OWl_uk(zs_Dm=T~H z3mtxoRQXZrcY^wztbV7cU$_9#wnqP|AqZ;%wL;*M?KBpP|F!beK>vU9fA-|Rdpt4h$>(30 z_Tw&7$VG8p1Im#-d00JX(X+K57;nD}fdxhg!zpwZ0lt>}{cN5m`2oba z<@wf$(Obk%BPVu?ILVAe;CNMM{6f+g&_eMG9MVuFg47z;78f8tW=m;Dj(j=l3UfBk3y~?WAvAPf6eX z$d92fEnB{P=yH?3$EiN(D@RroeGT+qDcw|n{u@Ir2Hl^38BO1@G4wTQJbl-Wa?-c^ zEJ?xw{jBqvc@}avCWQeJ^tI>o#hQ`WN{z{Mw-8ecnWq zUqPym@+HV>oIHHLM$*?x($^DAa@wmVG4$;{zR~oJyU>@sUpYzEb+U3;8kh^-%gO zCYbc?ruv|7GqN1|ykZNX&-48nmU*SmuRIc?&ku7^SD5t|rb}1POHuF0^?4%S+~*S8 zq`bcaAWnIII!50A-gte!c7&5(*D`JBU*yN|%h2a{FERP`A=L-J{(-E<$wMjM)ra|q zl=sg!N7J_~M&93Qyu1g`chVPB`n(zWG4vVwymh=u-&a&0^sPiz6nzco^D~uF-cOM9 z?fX2MzVF&c%ljteG*aGQ9qy#>Ri)3rB0q*cL!S?fGwC}-^+De*WJS@}fIcr@De3Di z^|@UPeNAHM+nds8`qmXW>077tIVB!_hCZiS^mS77xefY^@p;l`@%4H812OuX!$mE9 z&Q#Bh)90p&UrL`x0*F(eH(`UwY2TM2r;+mT_%J8G41L~({1|yK^jVBCvAeE2KOqefDpPrf=_Y(e!W9Vx@pYxYH z^!dJx(exb~Ltm4|)Av=OlRiVAPX*mE{b%TN28dC61>K21=)aU$`Wn#ZiOU@N{0{Dy zcgp9P$42*G7vwau{|@<_^cng*0CdODXXvvw+N7_L_yhWSA&ceH(C22rH{ST%`ra6Q zu97QXb9`Q{o>`ysE^_Q3PiB}Kz4{h${$67w4vKahT$ZOmM38jZf+k_7|}VnjndktrgGS(e)E+8>Ul8 zLINq_0kmg5WD+(y@%0w=vRjGv`w6lSs95{eS7X0=BI0tc)++O_H#V$2cL&JTiK0c0 zn4!s(C66mIB8vu4mUC;n3tTait;nK09HeC5%5J5$vior~QI|x-3$3RuV)=Y5J-=){ zH=*Zw*7M#Lh$p%XTe8lOq1(-Pq5`DwJut-zr6OtDpAP?km5oJn<~_QNkm9t9!oL>P~APr47s1`P!6=Jt0Eq`=(% z-hMZ2f2+`=Px(PbC@sT-MsFaeVgVk+8xP{L4r;}0g7?JxaueS-S51U(p>1pVo%wR{ z6I~387^Je1xJzJ}fn(%DBZZxDoXrl4vQ#`(fz9nlYy=b$^Uq`G-RUGA)N?WOAxD+R+-lY+jaHF zG~vAlfu(Yosqrs7A_)nhyb1JEnRmUlb;kC({`Oy!i{SrY`*rQN@4SopiTB&9I9V+= zo{urc7+=}}v)MDQS7VGn+X{wygo>M+?RUv1wb?#XK4~&EY6=5Z3&+xd81anwR`~C* zJdO|lTnGGa4)`ZI;3wPRpCaMcJ)V6x26zWkdXr5%g7K_W+P-?mvu~eb^I7+Jmi#0a zXlOjkIbLc~uCm*y;)+0=@odw*b&Y2k5|M_+vyJU#JJxtsduN>S>?*V)&3}=E+t7G6 zL&3Giv*#sT=XiFk33rv`OGD#XX9d?9&xT33&hhNMzZ>}GKEeF1dpz^V0(FgNPm+WL zQabdD8P5j(iy;5+8qdymImfg9^lTf?&ZKACc-95a|F4c`(-PERL*vGkkOFf&YmIOP zb3Cg>(4!gKwU;6wjq!}`(-u20;M6&u9cMJ*9M4XaHb%Tt*x-1!QLlSETTrVa$c|(@ zn@5F@YCM}M7p4Ef@udFo?66!k{s-HyYdmX*3y{@#){>Le!sWA#XOnOec^owe( z$TJu2WTvgRY|R`K(OO7MGh4gnQRbu^6W=tKaMl{Hw=5vX#Ourgw8o=_z)vGdJ5t=) z=9uWCkY!%x<<*`K?3|;bj7s+Dw_ufbv$e{@QD^`Yy~?|SvYe~D0?Kl(@;b+?^6ZPe zRlI~U7Il3OA|m-yYZ2FJ8lGRVo|EWVx1JA`AYz%0cCyYZrS)88)cWoBsOQz@GYdbj z)hNEX1+U)Z3QtBek5f6c!jm}&evett{mon-`mh?5Yd?yP{+)>96{Zg*24t!5Vskyl zVaRgHH=;(3Ff>FCgix46WEio1=BT)xAJlg!pYj6&qp{Ky%kUsR#298mw=J=D`Az65 z0@}7%TNU%twoZK6co`nZ>psLkLmO#{c?EXk>JV0kB*cGqfq1iXfmnb0>p%EUw_n$Ix?(1E60Z*zbFx~zSzsGadjhlBGj2v1 z4#u{v59NJ_#>X<(Q02f7HJ*-_Pij0ZV!&#BI5FEXo__v*UGO_f7%CXMwFCa)+qg9a ze-Aww<8@OBzwYt$_Ms>pOnH>tc}Fsye#d@4K;$8dx))bL*wc3Eu+U% zx_>)nJbk0QuJQB^_W7v~C+i+hKP^A9@icU+eci|-+zQcTx-r5%BwK4}JiS!4*3fu5 zTDImKPw$&%w02PPu%YqvmoiCPL*r@W7N*TPo}Om5Hugd8vAW08uChQ~=NwNzq-WcB`YN9PJI2$dpxkt!?uSsA*xmlyhX`>76KA z|9C2HKHBm0q=obo+IUr~c_A2t1x%$;oPQXC%+jduwQSdFL0WjV&vXWyv{{u+GDXuU4yYRN@i;Ts5o;cp&k)gNuI-zT#wSk=D=<;?m$7n$up{8wB1x5n0Q$wfgw%9-^? zTJ=ZU>-UMRpQ-9++3TmXWHbM-Tx)Cp4}T2(H3t1CXSQEp)z7R+NO&)i=DG$GLKYCj zcXg0T6n3GUS-&T1w(S2iY*lZys3;`QeiiTHrh5A1-Uo9{n6OpUj}^3Igw>KSb;cJeFR8 z-&5bfKe%$BP+#ZO_jx`#h@*^452Sg@ofn-nFk4R`ievQDSLyb zY!j{J6;OXiV||MYGw2-husH791GTg&e4tR@;iF3ps-v3>C!mN{zQ3d^(DIbg)gfBY z*DFDSh{7+te8&MSqVaN%PhUd~EJFrY#0BQHk(KIx7;Vnd4M0%zEN~^vz9}2!EB#%8 z_5h-+*nbTEo#ZKRk1F#9U{|@gmankDH5TD*v_`J*1^en-Nk5m0ye+u&10PT09*cLo z17=~)0Z%z}nz(R5LiRHMhk3JSX5$PI$SL?=Es|{&x*8P%whDKt3KeLIDtxoqY5~SZ zw(uxb$Q}T=UKFFA@Z8-GDOL9hB;UIUWeC8`FKTMJmw?RxRbUhq7^Mn~GYW(W82I-d zA%?1XSp8oPF1$ySspoV&GpoRt!{AF3FaDo5;4tNZUA19+>0bLDA*w1|fC~DC@CyKK z*kDJrM-P_PSK>))NZ;bscWapumekWAOTJ+G36NI*nS+C^|ALP7w}qRxqFC=ah;NL^ zSzhuB9Pys=FVH?jiS9KTC#83}>U1COkjfB`^mipNRp@#|l>pV+q9Px>J{iS%IWA9G zN3?}*H5lQ1c?iI%&k2%2siQ>sc+jks9zv&(3xEKr&af5BYvL&j*&(U!h$`|diYQ_| z!Qi-n z%NNX(DERacQ1AtBH&GxAWUhsPoPXf^?Bf_~HF>JM))+O6`N_UFjq#oDpDX`MLc(ku zP~>lesZ$TR-8~1D%pvnW6dE`F%E8^j{B0*a7W8 zEsg*z`Mz>sYC_gF|ws z#rl2Y9|2dzF)&(G_dRkD^Bq9HCzr_cpmEa}ns7xPwd8^6<3qW4_B1j*8yz7Jd%2WJ z#&PX9&_|@7hUkX;R3;D?-wLut6u>5LrL*A4`LCRX^AWNVR*HlrUOkm$qY9@FB{MW0 zMZ#aO)YGvTA7&Dpt8mRtvZfy=hN4x_CeA(+Q)T`$`eVf#j{f+S;0D|?RdxA+z3^~# z)u(%}ram?5mpSV%koC`V)MxU-Yw*gVPu344m32Y;!4!n&C5Vh>Iv6hNT*IJ2hx{-ym&QcG*x)4QP7U!X_&>Okvx`YNE7vHZ8COVE8K zJJciETelU9)!dT}ski8jp5K7UVQkg-0%!UHS0#qrQ=WB^WFq6TWO=TEdo;3Gn6_kX z^69-UrpI7XK7PdbT?q+$O5NvCB`uIN>=e)txFu2Shs=VTCv(kqAvDqsjfC81V(LZE z737ogD6Tq%WWs$4(g1ZFl>n%b#0~=WvIMmcp!gd+hIS#M@qoi6$jsUla*v_*32D9i zSZb2R#hr(w*nap>Ex`7n5&+xjWCeDl1ltMu7Fdr2n}JLMn@*J&?5U?BslXnCq!`fT zFoAVb34q;lk^+0^b0+);MBiyTqj~}pJ_8vx!i({U>hwd^=NiO*B&!dys{ip9;@ic} z>hvDf>4&OMHmc8()ibQ>-MRX}GqDZXHmDOKFJ|iDYItfV}2nkV7 z-@!fIPSqJ;)M+j2{Q8th@Jpw0-{hktF|i-j00b>?9cI!q)3m^}48_SbywddUnfMXU z{@{S00{A|{>6Oozp#SN%gM4(k zg4T^hHkfn)G6~z^REe||0Q(C*CS?qdkzkKQz6Ev{b&2F3 zf$d0@7;LW-kW^q3kQ4!g_5s`9K_G#B#Q^*ECMJBlMfkT&ct0vgprnv@!y~HG4^=NT zi1l;zq$IB1nlx}3S5I?Rr}wB%KUDn;qk1pd`p-|AZ2u*l*!~nUY^~poM^vXDsy++a z#XQ-+k&sWi9{DUjUL7a|lm7Jt2!81s?&*IbO?6rsb(T>b`3%#s0P5{RB@Y*{BjFU9lJnCY=WYDSMjA9xt<7 zsO(Er_8^&Eq_Q=Y-9u(~P_VO9b_bdLw94+NvYW{4t5tSWl^r>qG5K6&|8$Z>@N;C7 z)sM3G*}lND=})pGu3enUzguv#jZa@EzMBME0__oM9a2}u2HfjOj6;KxQ4n<2NSSLP zuK0$!a8M%k-x+iM$=Ub5-2NPc&KEWbqZv<^xz$2kE0Ya){z z4KOi2z~O&b0C%M-fUOB2@ds3g#C!s1XJ99bN&}Zi4B|Gfw^yAQUA0MU)mcW>2OL#1 zqN|=m)>-n_X!Uc5I;-Xws+wjXy!$f60W28=7U2|VAFi@`cbrizovM+*Fr5o!H3zA0 z!FI&yhP68^Xryn9#Flk-Xp;f0E;0Fu`a+4xloOm{lG~BMLGOt0%=)eV{z94y|KQT5Vg2!^2|{tHExe4_;h zCzfm#r_fX2B8(MFwbDLc!a?^MRlpITEh*}VydGFxQ?r@7WV4GIpu7;;x*s%v`_M}J zY)vRxv8Qw(Sx`LdJ-0^aN-g*ULBNaH{}CfEcO?M#vaXoeBd_FnnxBZ1eqduimrC4T z3_5Y&_f<%5IsLcVFkSau0qn(1YYbGeFhfTWw&mwDpn-{dN@>^y9i`MyJ-_snQ5=WN zWmHy$dvVdePff$;QDn2lkC#9}gYKgKR0XHc@{E#y zkhcLP%cx}OGF+Imw4|Fjn`Ahc^f7jVNhTg-16CzYPABrfL(06Y8^Nd&#~{;^fT-~- zgIx&g;f?i_xoCl`Zxl0DQ$>7KfKzaB3?g-IX#`~Wf)kth0@o$V0431q85-<^1q^Ij z&I&C=OQ>3(XV3u(o>?#sm<5Jn(HbIQ=;#X!Ow3wB{?I_XB|JH%E1_}w>%Y7?pG@nh z1)EWj(l==pxFDVWpvs9FuC#^ow8j^hmMSIzAb^m|!+)YLFf=u56Zf|_&>CMrwBA6x zp*wK@RhYA4TF1dbv=a1fC3v*bB-R1m#*#g7$@%nR;58H9bqq|EN6vmRmUb}JrsWzu z>?s{UqBSs43-;MchX#`<%_TU2lsoZNpHhSL$n_-MV$dpZjCA0zY)a{Xr|e@qi%j{p zT=2H8u_LN?k2p3=&V0`*1Kx9wp z!&8zoK6x6BZf(64q=#O0t zxCB?%yP$TFHJ1M*cJdZz5z%e$5$&cgtp&CU1yA`5^m`;^__OKGdyv>OWRd899|3aY z0{<6GVhnZVT~J>l5eDw82gCOxAPx%p(JHi9)5hjTQ2s9%+(LXo z$i|oIo^1AC>2e4H9k49sfL>pqDPEU^0hBIsTwakkQk@8rhBH>t6}W92S5@M+K>qWP zpCM;M0WM}!*Hhz{W*r!2^V0Y?*m@=ZN`2KlgI0+|7$K~E%OVp+hY+l2>ERwF3l!Jk zw#WFoR3y;%5Ri`-FkcnV@HAq%XvM;V`wvfIGaF@JN9k>;OK^TPHs{D>`w*Y61@ECl z2Q__FvD4mdDA|J(e_?czPNkS_vzWsu%0j6qw4|I0!OILlru;=%wQuM!BKMP>J-c1;qpR%dOhba$A6rhLI(dvUsAv7U4m9?@PI_OV0m z?~q4`Xd(AE>hMLL#D&~jjYr+R7)e0f+ZJ{=q`*21&T#j>C_*`$;C@3Q6f6>@BnYA7B!ef&|ciI`x=d6>^`71j7iVvT2>6ySLHHvt{jJ7>cqsp%*LNC724JV0RyWi}jSt@sou;iKOk!=X3GM4TRk1P(fn3 z+r=nF30^5;YTdHAn*i~2)V0}qX^uBB>jPg z&x|Cnt#ogqCvfmZ{L&X0?j=ZoU@vt|$i2`g9CE*HCEqZTl3=QCc_V=EF;#3+#&oh z#lfUE2xiFrp^+1Ezh@;E8A)Q4?k4?4*%yu6ko!3+`HYpM7#ap2azAb*AF+}TTFLvY zjf!@(L?C$x2>o zCC6LIF;;SvmAt@8o^K_GSxKLj^jb;MCq+fRl_Z@~xqYqVxmJ>NPZj8CC9|yL8CJ5Z zN>;kNQA!NM*98~>v=%J7_uRljDjxoY#p*Jt!P_v@vFL6=f|^2w<6D}d`vG#r6|%+- zDY~nT8Y`?CCC8XGUZNVks75g9@b$)Ep3N~#%hKVrNHxgWHW_Zdml4!Q4EPnGT#&`0R( zIJC+L=@8!89#?93%N%l!7u_TgF&>iEB%lw z*2o&)%NjnT#vrRkwpF7$)p$tO$U>iC|6-PcEbT%!Jc>nF6{8oHH0RFhfGn^VM&o39 zd9kd0FT@8+W718-)EA-WL+ESbS1Wl0=O!CTG*jumoSp#iJp6*Y(;;smw@rfv z8>K_;K}J$`&C%!!_T?0iO7{Rt!R}do@(6Rj?=#dV>*e6~pqmMwt@>p09`2JjNd|(w zXntZ)JQF2CZi?Ac6xSfBWNN>WWQu>GCs6zeenIj5=#r58E29YJQ&w`bk(3m#Hy%Uo zwN`SKm0W2hm#JjPy+oxd-Jek^hd8a-V_(6B#$@8paZ!4K?C3{)PGp*!btzzatB9Lhk)Ys2a~VHEV3A8W&NGU{Ws9a@Z>VJ8RMFaM1xoh6EvcNWfuf z;op+E75EY6Pqr+tGy5yBny+CsYH+kfZ@;pYBgj^Xb>5 z+`0Z-~kNYbuj)&g>tB;5)AnY)giWZoT|r*<7%%Dg7E zaKf3pj{Dw08~*0jgaut;J`svw)tLpa$1TrRRQwRuzO}F6@{Ky`$qjePXz(4p-uEb2lj1QFY zNGTt<1Qx@RqMK3{a9gwXdhf#M<3Q*`*2#pprn^uLl8 z1PJavH1RgdiG>G^m@8}^RAHWg2?E|daXUzP38Yy5eFf5NG`jup?*nY!$chTHpaP-1 zi}>W0_Ju^JFCkR#wjpJ~-ev)IXCkZQ?#vuQJm7xp4-$j+S|DRjX%o1taW&LfG7T6d z;l!*GW8Wk_PC4Zr6vJcRoi*4}D#@Xp9(dc9Cu=!XxKOMZNXgBgZfglVLaZqSyGFdq z>^T5-u$nH%{>;eq9$BkJ&$r>DT`X>+O^#sSv&R`*Ew>KD$~x%Yl|d-eR?F|?u1DYJ z4@DEk-pIh?=yjF&`51Eb$z7GbVh0IO)F1VhIKGN3n|sRd1R^OD6L8#9CE!NGqq`$L zn*FZnZ5=Gt0!!A2^#g zPuctEmCD@CXTT06SLSxxm>O- zPa}|8D7Q%FT!s`tDLb($6;BX?3x-)B2v0jvh z7aXLFUr9(PH(OQ6Rll10l>{j4L%9hI21 z37`Lz{+_mv^eskzPe%4p>F<{F2wu|1Fy{Zu^>_P(I`#Kk^0`AdRyRFz{S7K`arF1^ z3f#?ha7QH1*$QYJ{q3uOo@xNK^leF8d-c;LlHNG_TTKph&|B5y$mxAtfs3QRPb+YD z+QA(Wy_y0VM}G?y&|U^mrH?WC+pZ7k3+r7=PU8G0s$=T!i2W$gu>NkRJpu`5BPXlH zVwa6SG5Wg}X5>BE>|ERp|6pXoq9Q-JSl4L36(ey{$Cn5*4I?p+rq)Otbi4S~zhgkY zU=Jx^j6x4Zwp3_ieNmj}`A81P#k#M*H6s5grzRDPXM+mSyf=YMs>OI-uRf=NGE57| zl+sB3=LTdtOaucm#VU}clz$D$_pO)-(||H5b^vX=Ps(>q?Qa%93trsusk;J~5({n_ z`PQK>FWJEzk$i9EX{bvqi5>K=RX{H=fLi!1iL1|dDOfmFCwi>wtYEb?U=ar`cya0N ztH7Na3vLs6|3UA2hi&XL;ng=Di!riKHpGs{w<(~P8$cy~vEy+;Hfas(a}Fn~MHbaj zI>cKDEupvLR-;O7XlxcZ#Mul^nSOt;X-(dU`SJ{o;K`y2w7 z)DPqP|8jjk@!~r5IghptAds1V*!r&l`Cd0#f{UZid&yr8a9{pz19wF7eUkzjN1q>8 zK+6rF7Jl*dxtoF&N1ul)SUCo)BhcrsMoD_(=yMYV?w$&M`m{RYsw z^x5B&w1)NYN>1YZ3#w!4^JhP!K*RdnhZ|%#S*q<0M%%<6EzmNYhz2N4e_Eie7Q|{f zXBoNiHimyX%l0up-bckRWt)Lrv$Vhm=}*$QhIpocH__)ppjf4rxk}3kdFEaS|CJVK z>eUYwX0G%F^OFY$yJh-v5H%Tqi;F_Vyg9-{M@qpv(=*u%?~-e;H}i`;&;2X3oWq{` zm*sW-+?TUz+Vum5>n03Jv^? zwTO~zj$&RahA6yhF#?5v5zbdntZbG6thZuBcSclme4A^jH)r*99dJBl`-wbYbNg;e zFwpHt0V2b#HZl15NgORxw$nhu|9}~P<-~kFYTGeihSUZ%t3bAp=-(i9Lw#4=3UkoD8nK zdCkLrVAS?3Y%p zJb}wK+xKOzr%(R<=Tanh8+qCRvHufP0WZ!25Om_%-poDT(gQC4iSQ$M%4l*T-XfrM zaJ#}bvO&TgM5rxnLiqPV5;MlFufaR@*|+QheHSgy(lR${bFiAMoi!^dn2WE0=|qFs zp2DT@55h@dcfiH?R2^pr-K8%+Iva-{A!xo1QVfKayCAyGlBF79KkfGi+qyQPamm2k@=3{7ip2KEf~Q z5uIto?_#fqE^8F006%iSWoUYHO}`K-yH%r;GM0*($4RpoG~PHttM9x22k zqmKYT{&=7GSJILslJ|6orL8c8vb&W6GA>Fa%RAZ5F<*+*k( zrDyIoyu+}qVHCyrIE9%j3SFNd*xXZA!7uWYeK|XByaJ;}hBtGmKi!+N$A7Zs3gepx zm*%SWmeyb_EJx8oeU%vS2z5*=GR~ zt5V>e$IdUdWJHj{Im!`Z-O9fz@|r<^n9jnH<#Xp@Z>Lq{Wn+Dfu0#2Guu84`4}@o+ z9OU`q7f2p3v|>J@ud<6n#Q@JoOTu&ErDSV|_t<~&VfPZ>c1&$Ww#>DG`vOop6O^Ci zu%JrQ{02LnP1R-#a`~C&JOxc^sUhA+SY?e0_$b7G9^m?d-eg~(i7$9QW-3el-3oJ- z`2wSp{lk24ZsJ%04z|xr_URYHtoBFDKbnCD+^6?XT#mAIAw>V=Up&|6C41WTM=_UA zKUNju3XzSHKPYlOijXJ0iBE4Cc@5jKiRkYBiT(_1VL%{&#_&}CAQT)7IQ0MdsRYT> z)+-^+g?UC%PuVTtCW>7Qc%%6hVMH5Fq5cT4f=?g!)*BF*4?vb!s6Gv#*A;kn@IU&! z9RFkhji!I5b?w08&X*z|+h6qImW$?9iDNk#sp9AYv>+eJ} z1CKXzV`0wHLeIdZB86JuDJboCSvJqg3nq2=2gN#Uz@B9QDRC@55+-?d_K!giCL;Lm zX^Z&jekk~22m<}h(z*^w^y*9K(-eGnKpU{KbHdzyFzEvVtZya2>W}RmO{(Y*_4CkI zOQy5E3-6#1^kC9lsx(qn@5(v=Co~czmv9 zgbkU*`xsVAZ@?-9=E0<{&jRWhU)xY&j2Is<0pJ3;)~9Asm<^Pe?IsxSePM@z`q^GI z5E!0FrlbH{ifJ^R@zcf!761-mM~kxmp!_7Pv`yI-mWmcIK3IXvd^v0Uxc>^&;j4`D zO}+r!9J)r2^qcJOsp-f0bUcLerN%*Wc}vq8|Ecl_*b4f(k+v3#pwO7`EsLy`-@oWI zcF3L21fnW%9Pf8VUSW2~^&oaejsE`QUYcL#qnE1@-%r%h%zq%ca(Hb3L(i$EDYd3$Y{>8=@0^tLUQ&2oHAe< z^B`%^Q>@WmbZ{``4?Kvz7~C!9B6URcEaI;pl&y8rL;VAMz=YK{Iz%~YNHiR+S@TEC zJxJ_6!}(9*g?mV*hGL9eJN+c?Pp@7hxj_!0FgZ$$r9&{KCliIw36my235u@%(m@g9 z1LhD{Qs`JR#aZ!;ghH~B^jB1brIUQwNl;ETpcwTF14YDO0t3T>_%mYeB{mq5Cu}gD zBpBaT0Ta~EC=85BEQA*TF(ySmOl~qam`3SKz?|NRM5@rW5p#;^r!$=exN(fE)M0X= zKz0GHP_HT^W1Mt58WQDzjr266At};Iccn(Jp+;?g2L3>t`eb^Fy;uH4J19yvy4vwy zOKo&k_)~wfd}S^r^4r_FI1UJ!;-yvESa1p+#MgGy&RCJX_BDl;uJY+Ll7QSWnJNQi z3*QYl9yg6=SZX@Xh*oHsM2EDa&`IXjGI1IRQD{W1pLz1`p~<_O=gZ->e{;^?$qQhA z|BUlJ^&ci)m|%^hTi`ZmU0s+r`1CIeGuHqYd~AqMjFw<`)2o@loQRNbp-Z;T!kC!*2O>Sg$XzYNgXhb_S&mQ%DdNv0dSc!K@xE zTchQCCRw(6`iXR+99b$aT?tt&JVX>)rU*!~*`v{*7lR<;5FbO+6Q{b+d){(f0Sgf3iFc zvg3Ob0l&ot983Xx)!!Wov6!nHZD|aFJIEIg5Ome$I|0?~@)T+!)z(CT=OgyPfE#TK zAnjQ5EeSu5(NcBD(bCsW(zko5tv?RnK|K1o#XPi8m%RA{Mwe~-adtWqa6mCqpTCnbdtAWSa7e_GOM(lYRxmS8WR@yG03bLHVu>M8j(%7*v#7P z50RMBjAh}2z-aMC8^uQdWAUQVJYk8?GZ1T-O==0W`v)Q`X(sAn(C3v)%2@y>{0c}^ zf5(8qp#U)R;vWP@_Hj~{9oP?q(O)c#N z+w{yrR~3zuh5DD?%uVn>V3~7Y!eq)ALgg{MP+h@427l0RV`(-O#icd{AWx3K$MOiAG{OLhMP5oGf%Muzs{YNO z6%E_Vk+|L`XU$YtPQEy4jTY#w1*gL8cGy$)IwmS|?`VTRM}rT3dM+jaH}=L$f2J>( z=c3t$r|bn3qXl;>c2HM~QJDXe93*$3J+`wXFEGLx{&xg7SBZSyvFeQ*fDwq2=)*Pw zPhE!5)a7(7=Qr9Os}bu`0RmonROw357&ch){90}@EOy<2aOBnShpGLQ!B|c6`VLn! z;oxR+mC5q-jG&Hjc+dQm{Y}$7T1-LSF*Futu44AI^rw;I?gX!EwdUH$=yk@JE~cO{ ztWpVYEprdhg8P&<3)u}ryD98$qt}sdl&6Gd@msk>0P>_yMdMl2IIT-?9<@|O_$I2He1+js;#%PXuc1~T+F8?HevQbE`Rlfr+85`7MD z9koc#a@%q?cE2`Imi{Dwz&Aub5MSmJFmY(GXY)e+Q(y2(c$7bf3$-wFpRYGtiVRN~ zmL1SCc)Dq;f>a{|LP89HCh99`cNIr^mpy}0V6NH&`W0TTLTtVMRV)2~+e^R~Kq^Tm zYGVM5sR$_XW|>04gNfE9mea6=^b+Cb?bpmK-~D9SXqD# z0d%RFXooObK`9d8TW1~N4<*i`z0N?>$SSEIA4u_nyrN^^O@>!D2)}a95`T9ri~ofOM|3IA|^_=oe7BcCzEI^i)K1MU&PBPWg)>u*-$mpWaB zkf&p^vC{_cn#+&5`$my72Sa(VSySFxz<{j|+7DlfZ?myJT}>!@;pW#};h~h}_+$Ky zvu$)&B|^yU>R{AIWjMl#J(zKOT}#3%6eI;d=KZtZ$(C53CC`aMU*K5shql93d=peH z3^tRhx!`-67o=>hpz#ylousjUgOXmd+BtXv^Z4*iB6!eE<(B|tFhoKgBO%W;AvYn& zZUb_o;kA49^FH|(I>>A3%> z^QynK`jejL5J=nmEMWHEDBq)J#+UCoHhw7izK*gSe@83dI~630zfto4jch5t{KUxj zW^^Uw`#{i;?_2MJ)XY+YkPYMb@amE8TO{Q9Cgd&z`BVdPqv3Ux@UArBZ9>G6*o-r% z7|Xikd!NCNM#%S`uN?B-mOxni4nGz3JRF!||Hc__b!!`EyjAr3u~F~q+@GK=wadJi zrTx$CPfXwwX6oOc7<&t?)1vn$o~wd5$tj{ub|`7?KQ!gYcG^sI9HCF|F^n2Jt{6Fe zIA2mzk1Qb(Hn%kVsbl^z%$R?i7Bl}~%HW8w)lbH3Y;t_6Anvmly48S#W6jweJ6M5z%^_^XO192!iQ@q}=Y@tUwO zXNTwZ@$?YvS;X;#2N6%0>$!g=7H^0r?7W%638&=fD^3SvS%OGV)uyuP+ z8MaTIq+EdNMm1`!&aHCT=6%!A@cmqSHUK3k=si$D?U#P)%ls5^rrwQ* zytvlJ-Tx7j!=0s{3^bl>h zvzt_Un+_ek5Nk6j|Fl*9KN){$d@o#jumw+}5j|L-hYIxN(|eKWD&OSqh#40xVg@jO ziuDsUUSsC0DftC&^a~S<_0~mfR_XjmTI9+2!;ZA{#e<6Pi@dGsXGc~kU8f&=ydln- zTuE98P#2>XX?3-n#^dSkru%-xCC#B3k@L~sFShBVg~^gKkY*YC~6}b)Z28 z;S~r^_Kz#pyYiZqJ3n3)KJ+iZpg?~?M7kb?*AT8tkwza|g5ypm4@+XKt; zZ2;?E8F>lg4fBKDJ+i-x3-m6Lm#py;CLRHZ+b}};?+Z_(0S)J-;-n5y`Zfz&Z2aM( zI^z#YyNZqlA0diQu8C)7K?hsw2oKP4A zRQzb1_(Q}kDThL_?$B*wAb4jfE1pppOs~7V^fxIlH=ImHd?H3Dk-(>|IYShczn$is zEy+iUc^AcYWv<7$#a^1yZ#+mVs}r!ziYbqG;{owrTN)UeYA%va3Ut);5s7r>Lb7@$ zw9UWz@R`Dp{wzMHHwquQex&)ej8Dvg3qMYL;^t%!$qNK4K2h3OD>s<*+brHLf@9#y z*%19H3**@9sQ$C~E!R^!uYu(^;uZUu@ru#wDaI$5bQd*Kg>4{{zicmQ5=MWhZ;w}e zl86W`69D^`HRS=M3q#tczh41RL|X44u@_HVPRnNGMme>etbq6rb3i_lC(_!U1r-0T~i}BDzy{ zZ0FlZUgU7V{SobMK+RreP2fAgvuH_Fd?I$7SYhciBL5lo3aK9OwG$U3474Std( zLpvD!qT&;&^6_<421kgWM*NtHPsCguVPsZ_;+6IgMLOFV`yDbAuL=+1k+*E>7B@aI z9zA7sgeWR}n3RnN?ZI&8#|=?b^Lw7281ad3OeUGCGd}TQXM7@^J}r0qwOc^W+Bfaw zsQ!%;pE$x6Tj)VWlPN0*O1S}r>47xGjZgI0V645_24gnC$Ril25Bq~Xa|9?B1~kCI zcOa{L6nd}~antygV9oTCh6P&}k;qbj;$L`+$Ous6?@NOzCjg#|PMm~h#E);V;Twgt z8J(C!O|HiaOIIjm;Lq`ii=yHaKeojuwzA{@GPN>?fT{k}hy{pG#Avy(CMHU;g*{5~ zX$~q=5_TINM79kpnhfDu44M`N+YQF)369af{&>Z9(~@X%U@iw>$Pivi0gK9zS^k%woFwgKJstta@uGlZe^7?>1STH))@dX)+*cC_Ho3V6bZvtb#fj=jjzJEh|*|NR& z(S+IFPt(!f^>N#)EB+BgMiFL@g8Yo4`M3jvDZ{xX71DP*wd6KhGWTEU<_ijeRPm2@ zO_DYOApmClBO0U-NC;@=8Z&S-HVSgIYT1Z_{0t4ssI(T;^qn|^&SL7nqyL1Ay}KIF zO@2N$4NaZwXo?%9_9&jz9#|NUk!Dn6Kmu>Wz!eMo5%6WWu0hU!{;d3E$R=I}R1^R0 zI0aZ-!cADrLW=B#jE9YhkBmo#BT90K3Kyi%R65DojFRMY^Y^|?^mrB(P)sC+M`D7K z!7vYo_tOw(^6$^mn=NArmp){p_Y*vb>lp-dwPnRCGd@fe;frfnMplKwPff-OZhX*2?{++hS&pVm{x(WJBQj9X&%l*@&LZGl7`P=bG4Ye}EEHh8IpuIAF%P~13ZXJj8-g>_;9)@_A(Ol^H6S(GbX|aRR2Cac#kQ%wn`1E25v|!-uggPJHE8 zyVxT$AN4TdlJS)z08X@1K%(R!28@cYyr1C6(IaWN9awV$7JA;~lU$EB9A9}l=3t{6 z4zTRR_@_L{O{xIPjZ@I%NHmGH=t`uSFbc4|nYh#2!i9Ro;7@^PQ3LUnU3e5unrc9# z_{t1|7=F&A&WzX2P`hg6p+Bmyv4pF)?kD(W$^5c=q5lIY^%l>>G!5 zJOU(N`4=tA&I0e@8sV=9s6lKN;haRQ6zhzyJS-!;uBGbr#aCkf#Vv-#?PxJlnI|27 zw5`SdLC>NV#X15kUsdZ@enx=h1Qa0t%KoP5Dma4hO1OENV2SSwwDM-+n^fBFODhbv z^U}Nz`$fb3XHWniyqB%e97?GmOZwI>pWKw~@+7IodKv!3V~h2+k!{o%{*)(*+M{^O z+Y}n|CH^(mcf98bw-Uu#BJvV<*KM%kEzh8M%M^H2HJ*+R0ZO8DEV<0F{YYVr#d^Cb zaxqL%mqyGbuN3fsN0lhXP96$JHdf@l#|~pF-cq9bu7Qy0E$#tNBroGPQw*CU-trc# zML6E_EZROJmZi|P8pm8-PeSnH7{aYL`Em)jX4AnVBjnPEDwF}2g(OP0fXi!l%l?PF z_Ex~b=w$ypk;kP!SN3;gju|gXyNxX(_Zj%JeYN~a2$RcMHT^uq$xZ7@9htLa>M8K& zO-t3_=YXe{|7KGchR;OP6t9Y)+a-utOpxJMClW%zq+hRrVoiA5rdX;$T5Z^uC^6^d z)Ej?!DdI0TbNuD6zTTb5HPLYVrP__A_)F%HJcPr4u?)b3<{1H)8Ag%9mo`b^JYt1q-?-i1sK&k+x8p8nGH%)}*88qps9B;GQ!I zQ?7}yiF$G__G?)mRRCr#;-N|Y!fA%SLSIn86~0L+25lbMgz3u7D(jCDb&05g@Z5cbrr`^=UfS${@@9xPP6@xeJtI69Pdf-YyAn5{Ft4<8ZcW)nBxIcMt*)b z8DK9rz&0A*`=ARrW}5K+PViC;c*GBbQ8GqT@vBtvgK)2h-^3^Khfrs|@r@&X?M;eL zv-lm(B8ax~^UiQ@`ex8Yln2 zj^zIeDgT%ihz}n7v+^%tjt5L7|Cf{e8(S9H(^yEhc7IkiI$q*oBK~?MbKqyKG;>AhZ4QNSRw-~yW#d=G2>pFN*McvBkPaX zjN0EjO@jMsBEX$)2iIV{X1+0BIU#z!!i3j1WtpRbG%Mwla$&I}|yK zo6~Gk|M{2aJP$585jV$|823%6!=mJThriv!`p}OScs=q@S}ium6S?2%dJ1`)F3wUs zg)X)5F(y@9o+g`PpZ^V*;j7OoaVfv57G7kTHr7Gk-*BZ8=1BqiK24IS=)3R{lfEIi zsL4s+%nPFFyAC;xr0+hoV9|FPp5oJY4P%1)G5EJe-1?kJ-yF`W7FQxGK7Fs_wzIhX zH|=4QzN>Mwnv=fyBctiN8##@n?;W&Y(KirJ@#(vZF{u(%p8D^xf0*<=#aX!j0a@|s z`xN(3#qGZb9x~|*G>xY3qY=^cy@s4d()T%9u;?qsQ+)bfVN9w7l_&Z>c-EwEDQ8uS z7m;PsC+%aCfeFfAR)z2sgzp;VS2)Y}vX>i$2crR_{C&>yZhQF* zTX~1RJb_Aa<>|BsO@5ETm0?bKIw?k9+B9BYCZPq3-}@h^i{E`1lPW>wiQm3wOnwjN ztZI>iEQ1}k`_N(UK8CKxm8XGdPuaU$a6OrmzVl-A<&4JbOBq_Q=xbjmePbDuDnaFm zzH6Q~>AQims>Ntz#i#EZ=z84#E56^P?@?TV=A>_YjJ^zQyuLh(7A*SC##4NKxs@@g z5>%e(yXz^FzI!+e_kSQOK7F;&^|<|a$9*P!@7F@t;ajA!NRC%C&yThT*CD5o_Fx5C zu;{xGPx0w{j4`PaRG#R2_EmImFA z9d@wS9PN1?Fc39j`Pv$-Narto&rIL$)A$brEPgh}6Y*2|i1iSC^%-;zW2BpkK@wYW zJ^$8-i=Hq!h`@lbR%_8~!+&9+9slDb{@V}LgZ~|-<|I9-QyMf8JpWf1|%fa#eGD7@#0rD}QCb72z}|qkOuve2TqXHXfqoVIRzZ zO@4OWW0QwOTX`El&mLyy=e?4jpZrk|Kbxb*5%O~q5U}K7e??q=&SIpSigP5k;u8L? z5rZCg@Usqih?3`%S)N5@NbQn`qCESo*LgsbV-?WcnZK*XIX* zm;7oY_4x`waL%zh#>o3IMQ!ne@Ful|kP_$TH|N z^tl~SR{Fe}#a`+2HS1&aIs6L~8-9xP7y4YKp6{V&)??}A!mBn6)xJUMeE+koYI;lY zJq@`7&HC#bc>h|=dxM^LEc>*0E|IP1d2C$_J-V_-_n;inGebSkp=T#P^JCg`zMt8^ z`|%CDKQHFJK~I52PxuZSJ)e9MLr({V|5B7AdRnUIH|g23NAdI(Ge~0!^~=vvq_o0bdos}lHb=l=1;+LK&SZ=&t0p;Iwhi;ksl+{X=*&$dXFj6 zUr~LC^h#v0NL%#9(^ngP$0_>8P>Vr#`rc^ze(M)a-;c;?Bz>=zIqBQYvREyCMScu@ zxoZ44P+`({i0XsBUC4@}uYvwMYq#vbTd2jLyP!InzT;!)YteZ6)|EQxOH%Zu#G`M5 z8b4Ak`Z_84+_CgE(0?O-lJq@F+7NV4+7nIRIp;<9-(Qf^$o|`XyOX}|tb5h}AA4^C z9#xTr4R=Et0vJ0eQBc%Ig9c?uRFtr2nk3LI9S8;l6om*0L?MZ!!y*X5PLONc4!EM? z2s7%8}+2+0TS*Ar2^{ZxB?^Cu#okDr{pnDkF4w};uY!n2zF zJ&=$4CmHTc;h?@ZqYn?)33**Xwc&fy05RHg`yrw7IySh~@_J{nQC{yzd$vH1Ve*QV z_8k47Ca)NhH{^B17pCvc=))U_1%D%iJ#U418~M8o+!!B;&TTz^pOqN-`%LP4Pw*Ya zU!t_<1TZ6?0{f7Bz+YTAf6cVthkn7|ox+~KhIt$L8$KwMziScGN`3!hk&(YYq`s$v z?=b!{r9C?y(D=(B`GCLvhzjvn&9vVyOz`Iw_8b+)-?V|D{Eb6QEBU)1gue?Ue>sQ` zzOD55E@jlJ@*HK#cObc0j1SE<;Q!<#oZ`MtQ0BoP+o< zd8zh1eTgQonN%L~8jGmb>BBEy8SFVKjK6W$hVnNYF|Fip$UGx|sy&w>K8!!ro|ocl zB(i_@QF-uJjHnR)nz84zC4bVM z&yv5Fs66<46j34kHDk|LeQB`gG`KG#e~u&2VZG)jK?;xFYc9Gan^$TMW&~- zo}Mm2;Fi$yvGhhS6>Dth=$R(z8Py0q7>_(607yu*zQn>y)UZC{D&7~xZVbLJnrh7d zF|SvSp^hVYv`}mOXwtXVveaB-P*ar*4_*L!W z5domKPZ=*!!(I|s(VolJ1>19~G5=V7zPSj5w&&Hx{5|#g9lHFg{6pl`U-Fl6S0wqj z=V%S=r+dQqQ}IIN^-Zmi*B^zE@YeELp#P2Ih0yn?#Cs_s-ZY6fs&Tv!`qCxdtr79g zm3V;#Vf?D?86^PJ_I!)u)UeOQRkUY0&O1``fAj?xh?>7lpYNXtgtq6i#{6UT`R9h^ zr_=c9_3ch;DGm+6E84iIo>X6EtOK7?cT}a|WIaUVzB0uoua3SV?CkCETKeB<#wn>- zOoh)uoPi8ku}fWTZs7Z>JjdgU{m9ZLQkHy~w{w+h)2b~xclj%IB<3auRk$L z)(@KS=~Et;Vxc&Gn9zFKdd8}8SdzmVGXYz0t5Tv7V*=%3HG#?jPR{2XD6w=ZSW1G- zlqjzQ%ziL=}(p)qtnI2iW^aL5&2yt zvDW?(#%~vib#h*-`0XPRbHWif&lLRr%YdlT*C@XS4hnwH4o57Mh~ssL0uRl~u)YHt zNL?D5(SJ40Ym#H`Ui`L!^`K%hzt^&5ChGB&lSbgpAx;>EMeT66!~TH)KEi z@KIm`zinVOb9EvT_O7!>(rkw}?xSgd_gyfvhuI_)c)VtoRVj|Xrrt2WHc5Mz<>G@9 zXT;_zu1uH1vl*ZM_$|J;4&_Txp65_AJdpVaA&Wfc6*GW$2RMvE*qSmPYxXWUo1&EQ z0}!n@w`vq+*{>62F~8-v#N3)QHZTE9Q)S6^y3k15-!9Ocy^T6R)R|dTxGq0(r_h!K zb9BOmlT`JE^x0q^!ruP)R3H|IBMy~_mm3gOyhio!MTvMxIAZ-Bg2w%`gEXpm5$$b~ z#M&3G%g;)z2Xt7}C+P7a@Eao$%fb#A{JvcyBzRRgqDdmM;!u9W?QQET zqy^kg*7Ms2_8Juv^`kqPatG>Z-rgR_)9h_Azs3FsUG;b$3{JGiwvmE(!~1J}df%{g zwSVryQ~2{}H(rk%3!hXE5|SM>hUWhLTtfba>Et!>zFme7QP@b&g<(@%+_I(k)l zzUC>M9tF7C`|=s#^sJZlXG?lskm1qc^!ylBpOK#3Vd*M8Z}JpQ&xvU|dJeu6_Pnmh z`u89oe?KO}6%;ns_h49k#`OHKbd{blJcZMfr>DmiPERjczg^PPO@@=g>FFC*pOKz3 z!_rlHe%(h(!Re{V)yZdL$Pq`-mmNH-+5Z~yk$l$6@M;Ph>)S1oboyaTe>p5&rRNcz z!s&79>FFI#PoAv5hoonM40oomhR0uDi}uga@pmxfNF(r*$FrLKdyr2n|7NiKdVTqo z;pG)sez{gY@_d0Euh6Nh=JN$xrxH;ZSMu?sG*+GeB!8!Sezl0Q?ABm0b+G5PES*lk zIDrMjXXR|xfz#W-8VZB{D{Or65l$nL{%!}qZD19;{65RWcp)yw7Bm4x87s#r( zBWx?jDl0fql}J8CqlO?Qi+DlrF@>9(kl6+i?VD;uvkz&bB$E_ zd7cKgr=SV>yosZZqzJf?zRKK3I6XkH=#EBVVIKk|XRPa(gA|>G?IgRrDN@ zt7m+{Vmf+;OM3b>LJy4gO#wg}O6vIy$Ejg4yrk?4>v0s3>JLhd`QH-xx%K(?BVgbc z_+yOu%k=sG8Ja(`d`3$MZtovWZk2rEL|Ha7SWG9M%Q!XozVXb~v{!}jQ$l~zg1{}A zA1o7P*=Lh9Hgxnn&cPbkq8X9tfjrY><+8o{^Aa`eR&f>Wkb;Ar)b{FP%x}@>OF$sB zy}lMN!Bu_unA0is;5Y(meq(?1qbSvAf3-U-U8V0$p2GW=C-ikKcrJW=Awc|h5g8E0 zJQ>cWu#uk6!|F4pZwgCS>3No?aC$oE>G}TIFnZMb58Wo{$&>W#p|G*OaQ=ih zBSCuR0aqIjP7J3jh^>$?vSb*bVd6l z%la#jkHYGDi`OWu;<<-HcBJl$Kk|qHu#Vt;NKVFEtSsqn|)8QKhNo{s`{5Yb%4bbTMJ+^A-adCShQ2e#`;c^7Z_Ab08&38i}X|EIC z|8xRPJs-&7^%6-gZ&YWO5*6!pb&ghCvC)Ks!y$@mWjf7WjBzCU-J|%SQLHCuk!Lb( z^Y?&cRJ^KGK4<1X4sp?XP;V+1S88`9)n+Z-gILVz&FPMF3fhdK^RMuQPyZniyPRUb zA8BlF^*m;8|9fx72TRvnSaQPbjw(G++)*CPK%aNDNWhTb`~5DB<Z0Hi3MbfRM8eImJ96}$qR=;+ z!#e@r;5~pNewBUhE@?Euto*E;2xQ^BtMidi{5|gyN%@otHf=SgzwU)osXN3c&~ToZ zg`EXl76UucyD$0u8ymdJdYVIbDErcsN_Ocp#BCN%IGY=-6vkGi;FBwqh+0!|tQtSJ zLUe+1zC+oK8AVXIqxh`43mx8W?AgB}KM`ExK64%HF;H)UcN9m-o}^*A=eeybf{pYU3a({UV>#pUfe5r^7Un#}gV zM-J}=f5EDSBne%998$#i#xhK9=tV??D2E@hT&Yn_PC@VL$r)_D8r*!@x>_b z?bDanm=Vjion@k(?Nwz|2mNxDG6Hw_GVn^r@)*gvsw`MXnOX;8HDF&RzQtUQy2@g; zy2hfKxH*~BOzCLhblwE)Xb-CXf_KS}_(nvtVWN6(+^v+e%2P`u;Fqg-h#)TYGt@pE6Y%dqn$YIlbu8SDen;N+z=Lzu$gQW^>!_ygfYC1+J!N! zAnE=IV{qKWje+}DZrk`WN}7`DAj>cq#6`rgQc1=Dn`pH`)Q-g`>DF^IQ~GhMKsBQr zWFx{TJ{U>(TmMu162jjg@mRyQ9%oF`qG6hq(eU=8B3^z6eW<3^l|a3VIhCFQrNNpIz(S5(HV+QHI&M- zpGB>jnqW#tH3?N+911syM>0s!HO(>DjLuMgxQuGO;1hD3WGEMailn`j9?o8_^02TD zu;z`skq{La32~@d5S2nuRpFM|%N*1S-(5)l6HmXJ zZ>iLinnag_mUp1j_FD3}Kci{1anWow5seP~gKv;aM8k6l5XiAy6zbi&GgJ%?3!66po_O@-ugCl9o7`T4H+(Mp_3%j=X7!G z4|eWefguf{`^)6&2;;!4zG(?5rn^ur6O$C(a=BJuCV`|?w8z-g>^XjjGF)jJdq zeBHf6ZFuZM-UJ-B3I{^icC1NIw$m-1kvh^dl7+Q<6hW_t$NI8T95`Hgm_vD(hm|FC z@p{Vfzl#5l#+|Z+!VcfVoM7LB{NmZ_AOZQW1<~sH1j@@)99D|OT6nC$uWCs-?g)g= zKk@QfTs`(V%$ptFj`$=SRC+-?dV{q1MC5^2YC{)#k{pnxfNSq#gy>LQ^p!go$@Ppj zUR)Jd8$1W%4fc={q!&NuzYUd%@o|a+2TapZbuQn86c=8V;y%{py8!|tKsqSY9-9Wq zAsp+qcTIx?5$vuE?dr96N2ohOHf3mcJWV5HL-7PBC;2@dx1lgwMv{_#O8UBP6x~9lvA&AmLZ5LZHA+GIYyolZ zYeAU%N|(Z^bts&E?_#PX&3iAuC_JR_K;3=n^D>o9!PgYuE~wqsOik8&uO;wicG@@TJDuaSn53T6_wW0m?!eGXNMSd^ndf(3hIw zdvFSLOnx$T(AY~#GI2sLcp~W)65aa5-joPy&2;!~f?PsUAjB^K#WU_3krJp;+bJFFxCx2T+u6@waToSpRSjR}B4hi@FOpio}{o~t+% zBB_E0;!7w(SI1n3;^)slh-yI8RWd5k;n{+y z8bsMB%4d0EBhB5+gbn0C|I3eFhUO~9zM239!)MO$ zWikvI9bVu`ZF`$*+pt*Pj!?JB#Agin1eK(CnHv9eGak4m_RTHC+PPeZaYU-iI~+K=Lb-kvC&VV=MFY0Z_hf4!v1dbK}|VLwZAm#>+W&T*Q*-W*WpOgya~L_Kd#iZ z({d`D1w~bTD5-O5P={Z}ExuoYCo+?N6YinUr6|vK3?d4ousz$437 z8!J&j%}ZB^wgb;<_Af?0ZT`_`xmZKM8`^00)j3GTh=z{H#W)|s1i02pcG3m{Jykdu zj5@vRKqgCujcHW~dNA0>looNq5&Y+9R8TrzrC8p4i|FO&i{WFi+)dLAr_q%K%$zeeN1tffu@_4hefAWB!}uTd!o8JitM`1%%MpWMS4yd} z+vtK|g1jcuwaPw#E_gnwqAOS|$E@pdev1!3_|<{j;)-g-RoUyQ8vna#&LAKC<_`yIwrynsP(hR1{oeAxs~5f-*>DbdUyAUI9(L57;ge?m`% zy8bR?efzdOT->S zJtbbBhhh@wg*Mqly=CefJ`X6=6Tc*1>|`f9tS9 zDt(Redtj&FH^P1jn?#J(AqqS+Ysh|zuNRX&@b%p_{1)r~hC@s;zt_?>1@-V{d(?$C zx}W0TgGeqMXEndY`R|0I{)GMN?2$jWVm}0)4za%>qaH68QfwflmHR2KM)~IUQ=I$> zJXRU@Q~W|vjqIoBOmgtWyocxIKWA(a_EK~Vw8Y*!hVXhfkOX!57P-Z#C{{_ z-yb^!Vubw^KPL;sPt)~?&FbHa5;4Mlid7PEsSZ)ai)e3?Bvyp|6k{aTU>#Nq>@7wj zM%Yi$Mj{?gYZbq5Zx<4bu%F`90YZW+bcl`Fn|mQC9=DS`e%rvZshDPOf5($!3+!z$ zuan~>$?Ci5st;MOHc}9;o76Y159=G2uJ*TGcnTjq@4y6w_N4Led(@G(uyFV|e-)RI ze>L*a^G}ToFQ>4vzB9w>Gp7G2it6Z9>G_DKaC(yU^mGrW=LK1RXGzZ!GHec~XLneA zMtWWjOIPW6gr{(NUbsdlp9dC%$tO?NzZm&QJ`-g4E(#m#%MYv1m_9NrU8U!0p2F$r zrl;rR{4jbt$od=l3wlmeiuOB1VHK}S5HAml35@Ic)&@bT{bhMO@-0(FclVCA`TMt( z)zbH&I*hiJjqYA-!6-0c3%ePk8nt&&#~=I+5I#rwAzLumgm2BbUG%sXn?W|S1YHC! z_&&__Jn1^RKQf9Z(E}s}mte{ZrLLs=^F$K84y6k5-pNtLG3ddrZVdwbv6BK@>3MXC z`r@>%8f4-9$9@jFoGx3`=l7EJhY&gFNU@m4{fNAC`aA;zBxg)cQzyRcd#N zbtrEzT(DqJ%8PK-p8@}RBYp}^(s-9}c~$X?faCR9*DR?;a4D}50TKX6p_=HoluIPM zLPLEYd}ZLL`j7v6_0bzh_7~3IW7VLK9@i&ReL-=K)>ZF)SZK*(bg`~^xRw_&F#Z_D zA&D3_NMY$?B8p2yXs9Y}`F`26o{PzS7R*K&Z7ZfVVF^ONJnxz7{4_I$r4g)Om^!HM z2WS#V`Ot+~GkW{<5OKt^F>xnfJUjleqOhMFe1do4c>e zH)Q~_VE&oe2*BG`WDI2Dh07t_vkts4#*dV&Fwm;5#C0fJ>N=q?uIvq->Sr(VE4~*z zgm=UI`*GgIqB_jiET=o`Bb%*j_Dbf3+W^bU8^FZic%ubq-@8dvzi0c2wbWt83*URo zf#mXK<9+FOp5xKhzpO^A!<&y)d_TA?^`7)DX7N64-acYWEXz$kq|OMvF`Mh_c7V{2 zJWD+?rgO;-YOf*3#$kKV>Oj1x54ASQa3)_XL}j1h#xH3S~yq`q|_wsew+g1b)Rj0h~wj8`cS^ z?`R4?2?V^ux+C73Wm8hSvjWn1Z6POp$P4_vEd1LK*3xzmXvsYTKt?4Iv*w-&DN8wB zmE79RDzRmF%K-_$s1@9W>{QU5EghpDLm9krPlMp5Z0C!wrxw%wW97(6bHAR$X6w@H z$=~2E!W^RKH>|yujcYBt2pRqK5A6ZIyVj6@#fw2-T*d+Z+5yT^?e<9D>c=!R=I3So zivL|3DrH~o*9vtF7P6LhL(X79rOF?T2-Y8ExDj_k=QjW*q*}DpXl+De@Ndu1e5B8^ z9}oC=1rE7my-_5Gt@E3>B{9+ux5vdD-KxD9JA8t=b=mWY5$AVQ56t|hWc|>WlPLOo znokzAxQLcukHHC&-3Fpru)e0LK>cDHje*}+Xdc#QVVnM&{Qh=4jNfB?zPEt|1~ks^ zC4!cTM9Y7XUv>Nx#d+l8u{<&R%thj#G0W(`AdZ@MNE~Lr9r1MC@jZQmd3|Z z9fN~0w5Td?^k;lL^}toZ@sy41D>$CI>zd$r$}*fMkv@@Ic&vYLJazdnp7dWDPYL=; z)_+NwB!*Mnt!w#kDpyg5Q#5E(*WY**;Wl=-Z8*z;TV5bDv(iHVW@8cd3dS?4;mNBi z546N5tlt6BKe6NoTvo$FB$W%O#>Pf^)rd4qGT>ii#4jX&)#&(W?UGusAZ-f+Bw|Qs zVoN!P(vE{n8R~oGQv*My|BLnU@lgTiPa7XCGmeiIH#$CAYZxD?jH?4AV%#W(rH@fu zL<#WmLJP)6Q~mJa)^L5$jTb`4NA}A}ntY*~IzD=EKce6`k5ZBtA3fFh_{c=L!pBE` zUKr;m@M~k^qlbB_pLzMUhNWKJ+VRm{@XoCJ`9>4a@tX{XKxWX|@zI3c#8&9|=;4`M zU1=mkKk^#Y$oStJACVHYdVItSS=Y+((Q`n^6|2NU$456NfGxxLD5V#*@(C8ruY7#; zl74)YxvM4PqX(tGvX=gpULaW?t1 zmXH{Ue?iN?>AnB|MgGFIHW(=$QVZ3Krd z-$T-)$Z%&0Z-|8x_P5hY=}6%kCgvY3ap!|4Z#4TO;kfqb#?!M(7GN2-UD@kScPcyI z-u3?b@7J|OFioj;dg{!_zQRq#;kIeMGagDe??~&l-L6#FJrz-Q&u<-u<1D`D^rfBV zeBe;FyL#=v1^WZilee8)$kA5hXfM*!Oi`5K>$*oZPbF>y{Z7z-gM(8K2Hpoq zT?Z^V#Pa}BT!IzHv9ECF05dKylVRTB>b2boF4C=QT&5^u<3p8=AQOX)OgOrgJ3O`Z zPTv?)7lBXUL3T25*3+7(Hbm;Tb+3VpWg=Z=2I*i{W9BdT{=6pt;m95;|2ECYf9)BL z+;pYWoZYToc(&f|*mL}rEkWY1F%lo%0&RjVur?|Mdvn?re_8h?=m@R{4mJidi^f=+ zmJ-eLepRSeGHU$z7ht4fR50v?*>Nt}4(7_~hh0tUDGXuX*9K9v-yR4>!GpCduwLbVh+(Vl0HteZ}o*$@d>r&|EjE>IaooP#5(Po#= zX)ZqO8-|G|Kv*|HzcJN^tsZ6!5m3z<7M<0R|OL)dde4=(+#pf%cQ@d-cMt(~z0CHc79Qi5sL zfzGO^c;ePxm2Qf{6{B^Ot=&a6Hn8oJ(8pt_%RkIY+s<|R_Omtif>o$0*V=dgoR0W! zxgVj~n{ur`?fBWcdAk`I;^y!S2^G24F?({YVXy@oI&2zTigvyq;LpI`wuj zuF%QDVU)*EP92xWvG;@W7y)7p^0=Au`QnPqTpnle5Z2h^aoy#^o&TMay-W2%K>xT+2#D_v69Q80?LeO=QSlf4 zIcFZ|Q-Zsi9S8iM)y#gU=Es^HUo?ESfA)n3`bp@P*xdp^+TW~5?w2OR{;&oQ_m z9^y&QmcuTcd_wf)Von^F&%T{O`CI{74e}Ytg%_8F2|Tp<_dKiAm!EnG(Ios5qA&J{ z`tmB3g*aB++PJ>_0)3f^sz_ZrKwHM(es(!&%P*uYNRG2pazX`k1*!r~p~`id@^DZT z*Ixor41@s$`yBK)d7X{@%>)Xo{SDIRVM%~C%;O1`TrJ9Q{z9V5*MIUJ>?tRka4E;g z8uvPthxjf&HuSn<0cDH+ZHd@S zix&{r0ttPa@H!{LE=!83+KBjwt}HtVrO0i5F&2YMu}8(=H)Q z*nB78)hU{Q?Bfg^I$XXPv8o+g z$9t;pt-fCo?_Jn+@prG{#uKn%OJlryoOAIA*__w$fYK|4qZTSFdlh_6UFj`D!r5y5?Bj`MJwdmSR_y+8#fk zJu=ZAok#}W2hMIydrSc_Vr1bJD>BN;X_rodwe&aH6bU7B;Zm=ILKIF&TgsIJ4Jh9Q zk|Ox`^BH37{eoZ}Z5>QDbu>Xw=Y1&F^kD+l1v{DY4mPrR+rhIx@$T_}eUpvXlEUBI zt>&)*X!k}!pxUlf)-BWeW0&{&dgRO~``SI(4jl(Yy`Y*4;?;MPdXh4k|07gOa`*oO zw87?B-A1aHwr|GSP%(cQ2;zCY8+pCR6{yB$sh8RH@EdF({_)|0Qc-+9d;ew=pL!l(wjrZm`*JOk?AEp0kg<2&Womzjp;`il$ZZ_hR-C4= zT-cm@5P1S?Df&5xhMN~TK-CXmmyQ`v1-;=3f|f?*kg0fE&>Gq>ZVgx-!<^>*cCUj> zpmZ&$aH%zRG>>weq--s%K`w{q2ei-|WDMagv=hXoDPI~I2=&*M^ZoC^`R>0HP;kCm&TreX zSCHHQ(FFg)-MN1YbXl&K3UdeDzJ)u;eP_umn10D9;O(H4GY?o8&1NcYw`0IFTNt}1k1^e<~ zwx#F6Y`;LHKUZ(IyAVTWtNm#HX?-*i^!iw;CuTnE(B-py^eUPHUrXRm1b9e_`}+`V zh08~6T2X$3@&jm`+mHQhL3s?~wV_XFdb>u_W&Kx*`tKC=$J3iHef=L^hx&hn*9ogX zAp`rnGrT6Y3VhIWM8cNf5N<&?$YBmdD2pK*C!a^Q@8^h({ zJ(J5Lp1~dJ>G`T3=(#N-J!~AL>`jU0AHJ5jD%J9RSaAO|21mQrCsG3>QH5yAC%S_g zU)@j=r(br7^hC z9S6V%Q`nG<$VPYTW8Mq}4{N*icV4b-Jlz&6PTyED8VsW|&J1qgFOyLi3|1l+?PZ)r zQ9jF4_tI#+24|CjJDALru2^Hjjyz2=9|4*-vlCEMSis&p#5PM`+|ooebrE_`-A?|W zVaUdv{AsZJkiF8S$V97$V2@E`#SqB%=g_cO-5f1w`+|Lv3A5Z^_pQhbD$_AcB)ZYMt$X!rV9(uQ3m1X}8Y=e8}Z z!16}`oGxvra{6FjaH>q8Jba1wNU}+Im1{t?Kn%gV$AI?=fPgo?y^41m;Ux$0PH`1) zVBf~6c*6cr4eTYvRCt9U^~D(K>vuk{Z$B=OF>Hp{w*%HE>3>kxH(RSO1n(V^qb84M z1fHY2ir1IupBKctPU2nK7~V_+o)til$2tw~R3G5=3gZ2kCFJ`_7gZkWc`Lq&@iygy z^)_m>t^l>uf=Oa=ehKG}O-X~s%JWJt6DDB`9!*g;61jYqg^Ngy8kB`Fp?07opD6KJ zt|bg#+%iz(P=(Psk%j1?ft$DM<~LS z_Bp)NY3#|X^`XP_yLsUtEI8)V1SjYT$2=_7Va5p+ zTdaSxCU0??h$y-U-T62?!i`HTx^XEc<%ZM49#TEqa7E7K zPm9hI{vVOaAI^RqRo5+5`(qV46VSz(V!0@7fu_ZUbbhIIO*Jir#?g=B!SGpRu~%aD z3d*VG!#E)62T9#KDs}z~VE>#D5K*^8m62XP_{dVS9Wuhh@JBc}iR5El@+}Exttlx$ zgQ4O<{^bbM_}@k6x*c-tIfao9iOAQ*@SCyuokukgz!-=7<82nLchUoja}bVUD01au4;AJwo$$68A7g(vGCKxkbuGHhx)ws*i~)02 zEXTpaCf0xsO6^+o4CvxiJ?DV-1^KtGtrip>f{=KImyn?{9Te#@sn4^5#>~3EL2RJa zPvaw1Iy7Hzb_8s?ur?mKm{#9=V_s~}``<^fgU!(Yo_z&O>2ug)uq@q$*!O2HfN1u8 zef%lzpL+5!5-i|z0(pWPHTQS7ar13p!#b<>7=q_B;1v{byslViC5-dO-oSGP@y?WZ zM`KmIEQjyr08M+ll6N|-!)xe$5pUxK*e3xng$RJ?!S<=s&Os@)9(s*x850n=-ZX#0Rz>t8qbsK$Fh zZG4Jj_xKT9buSA!a(;0%(nOlk-AyCAOTik8`-GkbG06Co{p(%QbEwfeG$cQEls5I# z`D1j(7H#IgjBn<@a`Q>PfI>ZaONUR;qCXlkLf<~49^&#mj*F1z=OoV)H&PznKAWUV zdfuwa6OH%;K2_#-W6^7*_P;@o|I^bPf5l%7_)i4!Z!~ zC%Tl30qn~)aEHESbh@v@Vx|9h^T@h)!fcu^Bf-&YD-4(9XhUxD-7Lw5vvFf#w`@44 z3TI8B7p`RfINnPA&bN63L7(wW7A0 z!~7lzaPj79s*bg#VMq;2IgjJOhqLFRs1fmXDone1SGHr^o51XoQ@hUTR(D5GKS%`~ zv?x5ex+u%K1{OIk(YmJmXw*=f8?_?An+2a+Jqza@OG_s|h8Y%s(|lTkm*&&ju)lvm zMASn~Xmvh(Z7J#mJ*p3*Qh%c(F$84YgR;qg=fpR#H)1&R5&8YV$nWtsg5OuWNq#HY zTZ96?F8FP4;PGeTQj`Xg#?G@XKDfmfRANsjO$ z871>E-E@IskF@J$VvOyj+i#{tH6~Z`%zWshlrn{l6(lGfdmv zG*%5%TQ^nLy~7SQz)_3!5NdUJ5`REex5Ir2l#XLyJuHf$S73iVMLJAX;@pbmSP#lp z5{T}XwAY`9^<7#Fg;7Wg`v-weEwpTze*{o;VP(7V`7$&t=v8p4Lrl`W(EaYO5p$g| zu7{^h9vwTo7q${(Yr`3P=#joV#zY&s(-|>4V0Wu<$41chE%nLG@F@mPg$}=AG4MCO z+8q9;8h#4l*O7~95&mn0Ke1W-yDwDfuf;o1=4~;4HsPOqr8)WsYWO9De?^P&I}`rO zX7PW!K&9VC_&dqjwMae{CBPrtEdHk&e))O8zq7^ocM<-C z;AZg$YWU??ufpzZF@E+u;2(UkfAF8p z$>%*heu(kIWWw*%V*EpQ1AjrY`1fo0Cc=MlSj*&t{i=lDy;=MlH2hU(1Ajz|@$H1a z@gL2}r=y0SLilwwP0%9$)f6UrqQYpKp%-`!)O$!oQ-$ z_;(Th%4YHJ*6?kFzca0+^mG3?xLN$0HT-fcRAG0v7=I7>w}a0$C!c{D{$#@M)MEU_ zgukF!{NFB7+t)<+FQ&FsK1tmFH;cbP!(WA00&GN!@ej=b{TrWcPCid+_$h>6H?*bn zFDLwo&Ens!;bXZr^uNXUcEUgT_vYvysNt6o{uM38Zxyz zgPX;_T*EKNt2}mRi}6Pj{=vUBC!fO?tNJ;a@H@2_-%R)mn#KQ@hHoPL7gL&)54}&p z8nm|#BNz4)%sd`4fuMVS?OcTVPp&5Z&UPdZ#Z1l((X%hdqj3d28u!4X@iTY>D7v;X z+_6MawYw94zTd*iv2KPPxYjTQtHZCD1^ksw;V;tgdlG*2^_(>ge=_0EZxsJ7!XMle z{v-{5+Zn(w48b=M{`rmK_aOX(tD2C{^%{N-;m3yHufhf+_VzW6$!E`9z+cc5{xfKB zA%6?uzj~cfJ}HEMOQZOU3BP+&_>(mJ=ddJ;WrpC_egXX7`!_~^65(%rrV066q~WI% ze*F+5{UwC|RHOKZ3V}bdDg1yY|8F`1e_05=jqnFGiocxjPyV$D`oGZd%LqR)1i$=q z;2*fUG5OdDe`Qnn&uI8P3BP)M)6k@ z{y};%-k5*5Uc=8J{MZouRi6R>?W-D-&uGG5&=mef8oq__UmawWPYU7R(kQ-}@VhsK z{{^f{*w=H>z|Rc9uRRF-->+zj0*~@_9zXPbd8PfkygE2>+=@@v{kkVpI5& zH2iPymW(Y6!M73qphoc*=K=rZQ%%qxY~M1%PYl5?$98;nAgM9=BoY3~rtpL9+mrCC zla2D3O!)H~#XmG1_=B6m4`}k))(-fEA^0Z3Kfh7@<%ECm$tL6z)Sn!}j}5_Jh2s&} z+lh_I$4>YQn!CSokk1ErpcnR)PWbicYVqi&_3tHw|5T&+*@Qo_Dg0M7{BNRwzbpjbM)-po z#b5jl@K3I2g8m>reeabehTxZDjT$@9w=wx75&p`i@C!8hdlG&%x^lgICKLYrM)2`` ze+TdfH-+C%!{62x_=O?(Cc;0zQG7e$AAGzC`TT?l3DLeegdZD%zY4Fp*xP*~%f}bf zK>lGtQ~0lF_!h!{6y?0~uk0$($ zk2N8mej0u{;n$<9)ze=>_)j&8ZzlYSP2vB92^As#Z?L$TEepZ75&ob?@%NDbIr(T4 z^nan@ml1wq2!8p;z&~(BWAa%{_$!;je^mqv3DE zo*z~if^Q=H^BcuKME>*OBTdL>l7^o{_^~1Qt3Cq$+m|;cpXG$Vpeg)|G<*x;zlyG0 zFP{{`zok)pJNN%h;Ri6`B*#Ai(2^N~U;82OfA7^8{SCP&v+?03cm#Z2b;(r3jtF z#aFfj7m}FS%`fSbBjOD=;N>-q*RgrLV-M-+>((^hhJWkn!+gvDu_|~eedUBcb;9;< zM-I7Cp5|+`bga7?gB_#mL^>@;UlytS3VnG6OJ+K_ymssdDYtjX>}p&dv5fW~dOJ9# z?8UMNtQQ#*9c|1Y(vR&`5qg9mgq4qtRGvz&$Lx>^M0kFScE@>s>&QPS>+Y1a!}D9L z^^uB-Lv68BrK{)5w>rFMSF~ER?@7`U6YR~v0k`;);cmI5%zZYt#>hh*#X1&jMh_kV z=}zXSICheIyz2If^A`WfzjepYTl`ER^%c9PYBtzFAr553QMS8STdYTdd?V`5E6WV+ zz0=U3M5taL55J*L*6o+YL7&iaoV|e)uh#RL_pq0MOpCbJoy6KX{I16q9_xL6q>k|Q zj;F&S>n`TI$DGPGcQzIdSvQ>{7A-x{zMe2>&(U(+IDIqvoN_63Sl@20yF9pliPjo< zwqQkPrP;daCgPo8&5l~uJptxK%XO0La&edh_I=m7#0NXCevh`F`PpDpFP0|3_-Iuu zc4KQMDAq5T*|FD&Wm*y%%*0;D=~R5}&tY@%H7qS2IH0BNT&C?byN-R1&WgQ&9v7?6 zAs4D}XAcTtmH*FmTiKbi6yK$D$}UOikPaSxsNs?UqZ@ICB7n$)o_*g zhCJ3BM&s+IEU_IR`KnViH@^6XBWjZ?=UhSSEJ=xL*fTikfPX3w5Z-gyG6coeI&I~) zFQ(Vi(4?cZ7?DXikTN%X^%D0HfdDQ zi)xY|yK>Uj2w$d|C0dB;tmqW$rU16tfMe{6w%OO4(Y&lJcBJTNc!Xrdw-xeJ6*MAt zfr#mnh{-AuDzmt1?UTsq*h9ZzuR3Wj8?`)?W1O16x;=j~kY?Sq4PRfR#;suv zoY5!=+QkL1AI4{B21ti$zev`;?@NtmP5w4sIo4xp_R;Nr^h&B_kV%l&tV}A0&E(Pw zUGvW@zc*T4wUFy0SjZ233>NY^f?*bNA6dvp?~|?tE#&I%LUDTsN#$D8xP4$pIX)L0 zl}THwj>b{7bgVQtkZFc$HQgiwdH;M-&(=diBx-v=-K9Bj3qiBw;*-O|H1gm+dT|TM zzk;aFingxBhwZ63(DGy>)G9ZgYoOsP5>+DxGF%dIy(FTA_Az&$W=^@DR&DGa1RRrH4Qi%oAhAD^YE(1x?=mQ*OR;k=-RJPR;;%)&!`{1zA7*hax~X&=MSeZh zPF;#WK(oa~r1|EcE&CxQw9#!2qYbKCI4vky?_i@KW{CqKw5@(Bv$BG+mA+##_sILkwlw< zXfF}1Pw&+L&w~T4HamOmbtUg{T1UO-!0B(+2j8Gdd_&C+^B#Pc(7NOkgmIL@jpkGW za-Zejh6tP=XI&G^V~TO86}AQ>SIqg|sZ=?8?aNS3Sj+xR)tNtVnNPWr%N_7aR?qts z1uEB=tPhMs$IS`FN=H*=doD733xdn5DlIM+Sxv=VHbmhf2HE~jqit;ZGb9?EcO^cL zPGeGeWJZcdz?%*5Q=kPs zqRJGV?G}YyR{ov_gllyO4x+CQBAiM9p9zusAp8TVfZQiOfc?;wBm>oGJDqtlFg#Aj z@OTDWg7Hhz(K?JBFh0Tm8n$&WsTBrBzajoz_Lf?X?;`(68~o=7qTTGVOV81KGr9+QWP#cgU&M>j!wl? z+kUoNc-u#D7y~lVF!sq0PKg6opp#DT$|$3^#T#fkZ3HJZ%~*IUDF8?2&dIfVPQlq? zNdvb<9O0&ZCdZGjl9b}89gg9t#ACSFX^B%wW}o8QEftV-(=>MUL6L*y)P`8$R=7@%vz1%3*Yw!cvGSA1)d zhoEz-+7TlsKbGu!ll))U*Wm=Lq$E}-)7&OEy_|a z0meN}xI#OMTG)IP#r|?|R2Hz7;h~5(uJC8*R{^qxRZ%kh*`$3i>l?Tq+rnO#kvAYR zXwi-Nvq#?IdI*2khdU)c%_997Hb5tj?m9bOYwFQrXDx>5?SjqLA zpI%ZuoOiX}!v%fYS7%Y-P~UbB+!EU^lfr!4Buc%Rd#){PGsI6qxcL(Z;VlIGlc{+i zo`1@e6r=Vq>k*l3-bWZ*do8cO zM_EUt2#QmqS@wG{NuTA){X|9Tan21MX?&JyPH-x*`w~Wf4j(_eUzFpYxMrV}lBQuO z%C{!&k5Rc5^G!BjOiYpFHbrVbN$P$5B&oYU zrJz?xRg>o+mB8lY*-;WX^hQZ!FG1w29U=1UEQo9qCQn500-Kva;P4cG9-2hMS7Zchbp?82&rkMi396H@=jR7kDAT&M}03Hda5h@VPy!uYuZ z2_snFlUjXCMSZfI*}o3ORDp%mmp)jl&o_c5Rp7_?=gEWv}}4eb^F0?_aiX`Idys_vt;VeCv3lgwiYI8@Q)A`IZIg^;%Ym_6@h!wZPGw z$OeqgRcp}O&p_S`a8#D@gcHGD3jq@%ud(|2ZKD35yze_M%d3Y<-*}b2>jiyF%R}UKnV@go2chzMkhgqfdHwC~2=a;}7ODNX z=U+>J+zX})6$kU*oUCL{A>sF#UHb7Kv&_GjUxf!`TmJjTtqeO zs~Kum_ay=qvpF2qcQ4OF&)mB6mmtgNAo?!$Hr8!u=eyiV_@j** z|Ml8BM_U|K2OsvEd3HBwM)3%jVxmb%gFd8rv-WQw^-1fsmp)ab?6Lc9G~2C?JxbPo z&vblXCAq?l^ZrIuqqM`DdR&xeZ&nI1i29*-%1(DzmQOsa3le}c=8v0aTi6ohc6di@ zXMb!mXuEDb1s+s(vc6mf^msg?+~K{GIi?gHba>})=ZCj46HZViwTVV9b_v`!zG`zc zB@^F(Sw#v{oI$hPHoSAh_hyv+tn=GgOXhtfz7W}+3J%(?CBvvgERLHVgc$x7hR%%q z?f_)FS0r3Ur;y$RGF@I<-ODuHhXygRH}Q{(yEbDs@LCL+M590b2Qe0R={nwMR(?d8 z&U79m;0gKx7PU7U2Z7VM_+@+D7abj%i7{#$$k|l9nal?V|;Df464Zs@cNDs@lXY9TkWaWkI|W=9doYmj!r1sJGToN=T&pl zmC*^D2tNOc_s+#XV)-IYX*1P*gY|=+icIbM&RY}wgCP$bX=&r}a2KH7pFlEtcq=Cc zgV1@jG$OfTb{9umOR=~wiuPx1J4WYi`5(?RXaw>*DbHg6Dk2)iI-}TivY5r+9mV{U zf@K_D`*Hn>OPp&pAr*7A&u$TOv!VV}ou7)!+D^(u=V0v^3IRsZl2~ud1-)^<;+|uH zvhw1Ym8t0PeQ_Nqr!VGS%JvzpboIu3dj;-0&*s_eYS>)D!*tRgUzqFb-w*45g`O1u zj<*gz%jcg_rHKIjm7eLL%Y$LIY|bIH-cbC5y5VIGYmX@i>W8sthveUp;dDXL{JMJf z{=3FGXZ?E0betf%##~xXwsF@!YKAo z6c%1|5OT^X8Dw%-Kv?S$&puj6m03&qD-Yig3yv-jk{aq?0$*V3C2_RCa6|$jDWxjoZwgq8rE$Rs}d#Io-eq-*%Rp6 z$h7a;1kq~xaaARyl7769g3Mpjl2>ocAH8rtcRp|ELa85qs3fx8j%<}}&1{3nxrK86 zSj2OZitzB~LbG%#a)w6ije^*>4^X|NB75k`AB=Y+V#k13c9Ec%ROD;)1O^p(19B58 z^1?eh72*E5YB9aKfUr;m&jQQI&$yJu80`hvh$pFBY6;u>Fuz#}|9!<3si|W}4o7r3 z#^EolC5lqFJA593fmZ2`eG~qO1}UmPx_kx5jmrhO%gV$35vPY?NeHAF?MaC?lT+#! z?v!TRR4?P3fUcp2dB7E2J3&nB8XzB=kWlxfJm1mA`Pzq7PwaPCn!{6)50xIE&@%TXfb)B>mx>=~$)-`n7a)B_`;2eH%r+*k=)7o8ArOi1-)E21_Ch z@xH;k0{3DXa_i2A|BAYTk&vHm@PJ$SK6yGlSK*^y-pqQif_0xREdR$Lm0rhjvP76-))VA{+ zZ&$pVSB-k1N1~iTAdn}F-qLd&wLn_Djm=*N`OD1!$O%JB9s>U!4`)RM5k4^(;V!x` zUR3&{w6J9Y_C_Py&&cLbEOnH74VI>eYV~~w#e{~(%F|78NNEC{TS|wOvT=Cv2bvOZ z-Lg!k+fYIJsW#Z}1BXWUyN?7|Z21w~Te|(x##Cjo;(ub_#J(Wm_{lb=b%}jJjxXl> zT}J}Bisb~NDlNa_f1;zxasXG@H)6iR9UiT>+HUo4e)kAyE*a8|RH3+ir6m?O=I}5- zLY2~A73n+F{N*A%K@De$aGn~TEW)Aqeygmn7B}Wl`IHQKK}}yp>EYpI6+cnnJJoQC z2-m3Pt3`QZeI-MlP}7%*^gJ~@nZn`pJaML^cNuO#PiVL~`GnHDL#?k|)E`Q3o?72z zQD12J4l2K7!=PuqiubC(bE@GK3WxLK$J;;N-nFO!4q1RhH)wMYnAEZSYm}@M-xAqOg8T zu`I+5^? zz7oX?v)?BXRdkj!_8~CeM2rg=I{m-?4JofiM3Ip`-Zmp=cFv3|ZCQPCi}R&$JJ9FF@qipO|{doI?!eowU8`Z@W9UW~dSa<6!`c%@DnK^TB%9&LJ$h`b% z{bpw8=jG-Ux%=KxRFL1(xAV-+w%GK2^>HzEwWBdtU#Hz^xs3 z%-FsD;rZikSg~->l!n+vZycR{-cM)dPW^cO?E|iP>AE8i-TCofHV!#+Nc#>k<8Hhn z`+=LDX5*he@7oVfjoNX8v(3qK-g9*A{b5Y%%8dt(*wUUZPVvU>tWNJ()8>kbx^A)W zfBDWkn=kq9;uF5-53q|eN3@TQn)b8%0g(JE{)j1DV8@|Mk*_l{l{vzUE;}d!Jr0S$ z_%oI@2t)uOdn45fAnIH`#-9-=bA*M4d^mf(jj0S*>>iiDVK;l}0?3?$g)P68K+`KyB|!jrQ5O>Hgz?fv3|no|eFA z37nR|X$hQ`z-bAbmcVHVoR+|837nR|X$hQ`z-bAbmcVHVoR&aKC9rCuaelWxB-~P* z)A>$I;IsrzOW?EwPD|kbWeIFMYb@y##Km6Z&(ryxu0SQ{;7; zyxu9V1@c-XuXE&ezPv7ySC71^yx$^Tgu9gkHAX?7SH{Q%&hN-Z<*U zfwo9VlA$8L6GrB@&B=35x8=;5RWNIyt>+AYstCNZirt09 zZtUxrI%5>SEwTyXQw#F*bEdd+rgGwQ@~2X1nFX|s9XVp;sBt50l7lJPGtjWpba_-3 zI}T~&XDT9X$maWg+>kvu%I#<>;*=E^PR(}bnDX*LTLgM~n{x8AZ=aDPX{4P)Bw_lE zF7u9Lw86ZO$ThL17U}G@gG< z&a9bv`Di}12*=OJnOQJvo(*bJFh#UES7Y0p=`aLaVKz2vf#9SfH{EB?%z;#?8q>_V zFikiJN^Q0T@*5DS?RC4$W)=hf_8eO_+KB@q|Cs4{v!({?Y`g?CJbRWc56w+&l9xX< z4}9blfq@+Nbi@?QvgH?`afJTOD41p|L>;g!@yp7A>insSxFadZwV^ht&_t}NdG1-+ zxw&~$Y%_C;in6EW*i5(QOv}p$oq2APkQ-S$mu-vW_DUOKDbseLjpVVrxeUWwA+?_dr`rRVyKn7U`EcY?EEP?HV{yp)0b1w zdcW_?=k(t=W?W`=-mIGlYRtUCoL0Gglj+aaI}*Cy$}0aW{HDP#<x)#*H4cg3D95f$BzVD_?!ILk-$s%)8Fqw_$2;XPnW*^;c@;$1^CnT+T{qRm9nuv zaU{?ae^c<+27lkII1+dRfAx@4*03r0+#a)X+-^9|BHR2wsi%;S#A+3p_n1ugJar^M zf8+6&fWPBU9tpgIzZLkKj=ur;TL=1AAnnF+1+(rnIr;xg{{PR}7eU+v*HJL5^;Y(0 z+ErI?@l3Sue=?B$@6`VvDc8v2nLUfraxiAhDKe>dP$3ecX}ozcbD^(^Ag0{r1XCZR*inUyyM zX;Z_}T2-uN4;d=cjb1TScB1FaLkD>`hJOWx+0*!-Co{Wsc{6V>n2|R{%O%AZR!@YCp-|Z~3uolecs#stXi|_l3`S^F5LSdnDY^tb zLo%gEmeH_M3y6TZS$Wg)vuA_>8dGJm4%Uz!hCPhN%tVtcNS4Lhkmn5QVk!oq&`XTv zct-xP3OS`t&zW*(a0o|fV%Sf2X)vwXP~X{b2mgVc2lbXl^7OQiakEivo6$`&v)22= zV7*Yd{}1bxoqk)1!!r3aEet;ur3;31}q>YYU+3*a{RQxO$yvYbvd zosw@dochrMy0z&e>XOuM!(=-6+>yY<=Z^&bjlb2n--y5OpT*b^*WG`|IPxFj?8?x@u$Wu0NzIAIjGC0riEQ4 z9hta(ud9#pxj?50w5Vn7$CxORJk^maCfAUh#h=RTQ>Ne<3&(Tt$3N4Y>{)d5N#ypB za6E^J&M3iIqb54~gN_fQpL*Vf2!;Nye^;h2 zQd1hHf3@_j<6mDV!nLX58k>Uas*SxT+hfNZ3l!pSHU3`3ABFpjHU3p2&W5;hnJzHI zf6O1qSqPe%!Yme^A&W7|fD>ot(F{yjdUh_N@Nf;wp}B@^dUnQS6g_6*Ir%cvWn$hY ztQ<|r(X0##WaAJUOakSocG%Hm!}P%aVeft5q^j!w{{v!SQB8`5MS4xp1^F}lQ4s+z z0tyN^1u81Jv+OSH>asiTAO0xnsHmu@lVVa)UX>J;Y)bot<)-N?X=m;_%?PId%{-ZRaSCXl)E2Ft*v~oP}7aJ z?52J|ytDm)lDLL>?-ho0qxHL~-&Rt$t*SGZo{8$JM!im}n``x*xR$#5g{$|h|V&nf5T5F1H2DL1g}_FL7q#HnOQ zujQtFxP^o}rMzl!`sNmz{mpH!XUvJzLoRn8E!@1+bCR^Q&EuLz4X>$PG`x))VKq$) zRgF2JHic4F+#!rzNo;*Jhk=k=Q5*|5Luc-aQ2Gz#a+|2QRG5=OIBUV9oG>OVz-sV+YPK|Bf9vi!rQR*j}i+ zpuNz3VS8b7Lwn)hRh=44UB$dkU)QxezAoET-CkHx(_WZU8;-pnU+4XsQ(oFfMLm5q zwio&}(H>PKI&A^KQ* zA^rsXWqTpN5kB4?dM|x9jLv=?qeW4E^#roYi% zIR7v0g^&GLd*RtXw-**|32)D4ea`32$9Zk@$ByO9x3+mc2R+_4uHj9n*0Ez3RxPP) zsBK)(TE}S*XG8jQs`!pk@kmv+eZ6^GsrWuC?|@y@rqAlRmhg06_I#;}e(QOoOWz;j zY^}PEH`93QUBAsJ&E&t!}8TYVNEt7B!Xhp|3<{R4(8m zt8#Hub4^R>8^ZFLh~3BUvLd9T?p|8<^>wALa%W*GszANb60~a0&O$4ijYgxjsJs1e z)i2*IBp!RWpf3Ig`?^d$Mcl96Ekrkk>#oGtc{5IVX&=#F z(C&$M3m)xf{U`icXAWIn8e6n~&N$I7<&48G8N04e>#@;)^5~s~xr28W8V12*b{57} z>@2M8zq3$xIP-QG^q9*p?kv8pL`RGqHTu}&jvsS^S%GHzGiRa2ZA4D(_jSF6^L-fC zB_HKwMd#&-bC$X1*BiUJY|=9vo)5EoGuvIfpC67a_4sg({@8@QSa5R6WywdpKQ3w5 zS(t;ypnhltT3)-eP=h9;0caKKZhy@EgKaziZXx(5+wK3nTe$Dk}W!{c=3wc!9-hbQVy#kh&m)iTk!+wK;ci%1i5v6x_#_ICYSZ)9Fy>|)8^FWcC0$qO2@d;b+*jfUA47knmW!(x7Gbx zYWqGuxANN(y@9REv;t9S{odMc{@u0D(4Ur#>8kAyOX^GG^jNLGH?+&D+vwb->Z*S? zcSTiWQ{&QwO>LZb^CnO6HpL*e%MEMztcasc_`3W)kz2nvzRt5Z@ujg{wJles$6DHU zPi>vg&1uU@%WWAudrM4JH>eu!;IyiX+T=ytYpCa(p7)_S5U8rQ)+TNtRyXK_L5248 zRI8!i+fmpPtz5sOP)^Izrf%E!cN88(I&KYY5Zi4x?gysN>9p%FZO0M2?Lpq#Lw%6j zMvu`gv;KPO_Cz|~jk7sQ>z0+tH{c;YpZ37s>ofb%=FdMg{VZj!?#4bGRY}{HaAx-Rp))RxQmZfi(2)^=8NwH zsk3I!Hb%!g68f^fG-7Cd<4{#RKj4!+Cbq-V2W6*dJ~u0Pi%D_d9=fQ$xwVZO2Ca3x zFyT<|ejN(_A~hw)h^a*IK)fPg7U%2I!H>bWm4cQ&Y=3xDEAH(j_0L zZfw!-=rSqQ4NZ-*w0hynR8`L6llrQXkK%BjyplKMxkEn0Q%#Jdiq9Z+7@n%CQ7z}H z1ubeqg{ohoys=DL?P5>0HK+z|z$1C1Q@`g~oC`ic-PG31jiiplv{#{q4I8E|;f=9{ zM=Jduom$Y)G|$|mF;{j?%`M)AwM%*PTdx4At>K4I^krYT@{)$Ch4X5vD%7AO)g^6> zdhODRR|6*KJhS+`XZ{+;;olimzPh7u-77l^?`+;tScuL+PrkmRFbzHR2Y%lN4f^Ab z!m+s>g$GdlIbvSgQF!G=h+cUCqF0`W=oRW;dYPZ-DbbbK<@Acqg>3yTzu!@~3>`|p z70)u3EaxrH81{r(C-7rwk30?08usCzKDDE8FZ%g!b`&bv|8-d}Y)!2Rzc!lmB%c96 zPi|tFf3>4<0J`o8h_3skiTxy;LH%tTcNEsq_8sO*kL?lK*)g`hx1;bm^zWTJ3U8oi zvDxf8-|;N`ZgP{+k63}V-u`wshUqkW0U!C0d>WX_#AbVGItG^c&dJ3 z6`%Om8#RZ6!HV}`7ZpGITA@bo_jY090Uy35e~g@H^2bq$J)8cn)qSE~z1}X=?2k>% z7VM4McE)mcPgAx)*E@CpTmEF}cXDsWfY`k%^!|kgsmfEQpK6QAVNdCI|JWTPL zO1|O3{@!WH#a8DxDnhqT%(a-gw_>l$Izz|lyTN>wNMFBcvy!c%zO|)TJVDAkdNQTn z1e2zooV8U8iz6->f)wvIF)7R)0h^=PzNs@|Nj@pvvwSv1u{}41?FdWq+0s2rXrt|l z5!x@_-1oG3j*tG_lKyjjQ`-4&m6+RKGVSbd5V`(-FPr)UBz~UoQ&KL!v!-1CaH;Pj z@%HnqL!|tZQa(ofQ^a@MajI7QyWGi_5`To$KPJBZu|56QWT3K6yPVVRz|Cg)Y&-cl zk@B4KsQ4o#Z?*V#-l}G*qsFVMS&DzE)KRLcQB}3FYw#%wK31iwE>_jm9K$%?nL85| zgH$yyn-rRZ&X z!D^VQS)_)m+B4Mo<5g{wI$zaZq{fd|^QWu%Us3aUeQoC3PHMtqXqv1IeyEz{*X_~K(Q!Ul(^Spe> zw3rG{wOp+DsEB#7XkBa!Pp_)pubTDyNumC1pVp_v|E$m+=MEBo{)?uajsN2F#y_Ma zUbpEderdUG^93nCOsGF+sN;_=Q$ASAhYIzl@N}M=WWOFG<#s$Lia$YU$M1_jsia)j zO%Z>p(B?T^{Fy?%pX>NJ;-4qf`>}3QC;o*(9jmoa{De?{UQ(AY5&sgQ?e}Z4T$f3? zj@5NZ@vm~quNHrW(B`>8{F|Kkl=!zg@n09eM%Jf3UTS@#O!=BF%5~p&lqtVU%D*eL z<2+LOYkanIyVA?NPU0RA+Ibix@i&&l>s;THxU^7@U6(&B{*Q&W--n+u{ryDB^>J7C z@r3wKI`L15|BTR%=UMSzaN=JU|5c~__u}V-HqW2LFWr9hSpO{LTZOtzxA~j+{}AfW zg`$Q zS|NEZmvVdjxmJ9){CX+BQK+{o{dcSQUl;1ne(Pl@_oqK5$t9#dV^#B-ni`7#)bi?Y zO8C0Es%dKDVxCW$@wo-D`2+@M2bGmYju<&cwecO*&P4kA)Ey?v!$|)i7$Lz8KfmaiguJ`>U&Jm|tAX z5yw@w7L8FOF*@$A>hDh{TAK%zn>theC$m4=^FihKeZ<$F#n*qI6<@DktwWvq!yNxe z@rys-NqniVUy}z*z3so$*Y(Fqz1==aeO*6J>dmL-!@jORRqE~erR$$5^?JY3f2F?O z?#_{VdmcSse4Sfw_uc(9NxYrEQeXGkD)n}JrM_-+Wl4X!FW0|8>g{!a>+3cj<=?lZ zf4hEM|8A+b=jpEB-PnF8?d|-P`ubS)W2x8MqW*KY$Dd2Rj@5sq^RLJJq|_f+tPT5m zn=L(0(IKw?nv>u4|I4X&{k+uM?br2pO1)kFQeSU_>J7917VR$l1Dtx-KTzuJ_T&0x zzZX*Stq|R9*|^a6N96tBj&H8m+YmK;^viy!OlRx-E1P#8`!AbsUUO4bjlR??`BDtS zC>y_+yCdPy;-C|4%{(tc?n?7`k-8>coVagNE6pBS2fCZQ>4 zBATiFDYMlyT?S8s#lP_9d+e7N_WgT5;ZM*PKRZ8hhKjMEe3X{AoM!MvV=%j|wng*o z+8UlFP%NqAYk1l?rMX^%H%;1_i$+_cZl#;(aGuQ5rekz~I<2aacYtV9JFmHD%&2Ov zu2U2F-a><#L6+0nxcPEgTf+u9nuy2GxEKGO z#dp*iiLX*RdIopiI=$J&@2|CV)Sk^Z*lMV+<-2UQ#cWkaRC7tmDR}iA^|Q##Ni1cy zh3V1u#j}lyy(nd}YhPzn%H-j@p~VbJodz4JsUnvi>nV(bV_HecjAC6i?e#JyisNV~ zE|poj(}>lh*SXsGMxM?x5o-ZzVU)TrzGZ^NH|fb;O9rLRP}P()b@(%}7lk4w<5h=B z%vkLh^|I?myiwoj!@UrL!Cl{ z#ofe4{R9ftvXp0lEiCzbRh51Rwvs!6@?mmf^m-DodNY?c8#=Y z*IU?dw(+Au*ZJHeGx#9q;-QO=8|^i>HR{K&6`$6{i{w~y#xv1Av?<}$@s?;~lc(Qb zsvX+GdrJB%=AL(!d8PbvTP<%nna^$)-%A}>W1calpIg@P=% zo&M~-7hN)tr;2!4Gw$8;)$zal>WMde=azFnRr|R=(cjE%l!e-#&LVBECI;KSX>9SN+9LhDP1# z=(t0Wy`N+659#ssL;4y=Ut8*H8GQ|;uaoq(tnN=!muc$lTG#38a9gMI>b9DnLAnn; zZe6CY7xXogmM%X6>GEU6pD4aQU(@w5q}zN2={Ws5rg=8f`OiVRZ+*1a0_@Rt6mNrpG11hR|v0!y8bGp>z5;)=WA#X`i}T_LOq_fNcVRy(s4gVdVIe{y8dOP z>-#Y&dVchuKDRSg=f92fmHtBaQvHV0ma%Ua`i|SZwx9TR!Bux{_OxE--P72~68mS^ zxino{dYjVQk={P^oa_1cG}7~R5IPv?ZSC_&udBn+5$H&C6skaj(NHuTjX%^!q%FP&P@*(@J_H?X~5Z!~h{+lBp+U3W^gpHwxesrue)pF8QHP4OElu7BdBolEbC9W?p* zlX|^->9-FVx@z3Wb5A`}`=*WEP6qhK?=9>v>?rd% z)Z6``h)2xr=Fc71IeszNzu9obY@)8u9#~!E@|SNfvi9kxHNDE9=gDyE zqN&Gg-nHuU3!(q#HPO3Z>adNEz63`fwd2A*lT?p7r%e-gY?I#YyZ)2@Ki9bbkAAe_ z)>C%8bJAb;J7dg@kzb6yGj;Km=Z^b%%jLg6<6wO`(BtBCAu`S`XBjX^VLN! zoNV7bkEf_`ZkH%Nx`Nv}vpW|-OtT16$Lk6ftn_c#u;KjQ(p){9$Htg5<4$X6L;XBH zE?8gNGMtCQB+QswiqXxB^$o9K)izf}MTIGGVO~QAc@QM$c<&S;}KKqWa}gP2@32&Be1`bBaCIs~FfaXh`u(o-D)=KF7^R z6ZO-NN!z)=ot|0dlgG0%n~UqttikEdBzW`8`H)?X==`wnJAQI$xIX9j{>9>Pe04>5e3^fT$CG}L-;CN$nu->@G$IP52?!hZ6IA>sB7VLy{{{56h$Wq7>) zRbfB(oD=WVXB|K1_>oV9=ihVv<>CIKj_*5u%<KbQ0 z9N%;NsN?&NA9MV;<0l+H|C{i5lTLlg@dL+CJATITbJvEKPhA)Gz3aoie?!=huMGRi z8^eBZQ`nD0!uwbB{IH*Pe04#%KH>N|$B$hYj?XoPeJ>IAbB-UqC|sX({G8+a&Efcj z;|GqPb^KgQxP7!W>?a*R?f70>I6me0YEig8?f5yz&o2(gdrQK8%<*%MA6XiXPdR?% zl5l<8@zahUTpEs7mxcYD<3}zJ*QXpmdqucjT^aVHjvsgYq~iyUpLP7a<7bzL`^!6i zO*<7XXT-5PH1IexQ}8IN-A`}cPIh~s;XpOE(t>^ZN#Fzm~gI8w<-O5&%7afcxhRwZK^x(>%C(NI_?*g#%kM* zxAz8ZoL-jDpIe|8wB)aJS#@zAJpmcuu|3U2%>}LwfF4oc_|HknOe) zRpPkyh4;e|Z~pY>p#uB9c&M<%ar2c_70q4hor2uQ!~2&f=R5Yi*q&b|<-FIIdV5}+ zwC6{19vF!4iEppJd}(j5zhd@0TH*uoqvG51aC<(RlKPm`+w*XHJ{Ph5Nqtm&dwmy| z_V)TNA$~;S)8f1H=lW$gbP05~Pq)3jp0x89m;UW_rCqLsEq4-RXJ$rp* zyA~#;JSl$M);sN;-9t@s>fOVWb2w3+6R(fayZdwdb7S3l_jv01-L>zozL(pfD%&-m+Yr?bhwT+;ZD|mgVB?IBouN%RNTMX<07L9ba&C*Yj=1 zWmzuH&6lX?I-gw*JKyEvY=4&J;_Q6byw=Z_SspttmgVBIHj%L0dWp(>Tb7G+^Oc)N zo5!+TTt8=g<>I!=_$*@=o0oRUXIU=JT_5GPL%SX<%f-3*%JpmWSeA=Z=b7y@ zGs-X}eop+fuwz=J-Wwf`kBgu08{Xb+zMz}>oYZFy>$<&ntSK*7AMd6>49|J~Gk$D4l3wU3vn&&&D>q+YK_{gUWMO+Neb zn3Z|&>FiLpea>m0IAZVGdt*B1P4^k!%l_j|`_x|cA2{u!Bg%~5V{j#Z9n0^uPnYZ8 zD`|{r+j}R3mp`$W{l}g5`MvBvaN4KK^m&+IwTe%b(rL{^L&j*k1M@ zIPLT0`gcws?fT0(?GxqtFVo&TF}(cIk!9wuO#8UgKE0Ry2TprWjzhcb|7H5mIqma% z*}pd~y!`%N_8)iJN8~(qPsblP?c;mdf6i$i-OK*H@!{o9?q&aRr+sWM`wyJrL zW&X^kA@7m{__KCgh-#aP1 z{IR|4Kkl?o?_vM;{4TKV&okr5IDSrid%RPAc)Yp8!t<4M)}MXVv+cbP*xvtu?c@8{ zJ|**$l=k*K$1b0(52W6nhq(0_ski3|ZoQgl=F`58yY;@*N98!{)+ePtR;E59^@%d| z-pQu_bea03)Z6{s?LQ;+c0Y9M)g+VO?k8@&FZFgicI%T;Z?`+QJ}6Ufx4(?k>vsAW zXY<(Oos#SF4qrO3?Q{Fs-fkaivRQuHucTMD-YZjY`}d_@x9e*Bf%E!d^V{~pKDM{x zQ&V<7{&+X_nQrR6Q+A&}DfOA7Oq^XlJH9~b-RmK{{28g&bEjqRN7(gkudjQSIp4`j zd)=?TrYWwK!`0Rhc z_VEwcKDm$W?feDOzTEzm>83s>_3rj#^XF~7d;d<>hni~EkB#@lj}Py9d-bJ0C{rJo z`mCH66gMvZvH6qT)Cb+vXQVz-5guRi8sq1rK5=BY-uADineuY;9qJ)R(OnqGH?R_S< zeNyV}eIU0!ka~A}wd*4z_10H2%y{kc`{GCCI^WG7m-dPIkGTpS#byKfm zvOWhGy36lLy}gcf>wT%W*LiMzT*=5`A$N% z6MKBLfj7|LfKuu*^Bj13m znWDn=#}li6t)Wu?WB|`yoZmD>Ps(oo!tGBe=C9>ZkDU)3+kJ*m`;m;brGBr55Nel3tu_2a>R(^>-n8b{bg4k(%f3Rps9K3ZWq99KXQb5a?GCQ*rokQ zc>>KICYZ^TFKBGjt9ZmH9=^`#<;O**RnKZ2F{0#A^V6!QOxa~wcGG^b+kSC3?Z=q@ zTb4Ff@9`i?`|qlKcY`QtKXNo%FW((*YcBpeh<;Alg=Q9aS?bOWdN=JmpFp>V?T-uh zU;1RevKdPIXH}Mte_r^Bd0nR%Jd?FFirtQ%|8A{psjFYu;%v|(dBP4qNKsp?)Z0Mk z!ejk!w`UvrK>hE1`%(PrSPPFlYUy$Ux?lbexxKRhd)@!ux91n$i_h-a*X93k+kepU z?|pmyRIEyVHhEu{|HEznLC3$>?ME-DEcI!<3-r5@2HShY3lVw0cV#ZMnpTeq-oVMiMy#U4zgUm zoy6VL@6vv>J(HQIe>tYMcrH`g-mTYrN@@ME9cKb12|{NhyE?mVAKn#rZA?k1ea9>5 zKKAdn-`oB>Ude3#oI9Q%zYI06ZGL6(r$qThxvnoA+)bmnyrJcD^XrrMF7tPJR^M&@ z<2$#%O1lK5`*K$+pmcm)x9{AS_MyGqjJs;O%lvfFKkfIp|Knxz51qr8EMG@`>1I(< zKgMqUr3t#MFG)~ZZ#Tbk?K|qrw6~i_ar5eOyXf+gwae|oPI&3~I`V%A+g%s=Pv|(2 z`VbeOWc(%hKfDFlH9sdZX8cX&N89#s$CnA}I)8EeUFF~N9ltaG7#`(Y$rF2PkJpdR z;?cGzA6tAqDsC6_ze|1T1~aS1u1UjLp{LXEoJ{*eY7)i~E2@89z4!yEwAFrf@otzN zf$`0D;P}N8EO}Wh=~B1vJZ$ND_V@Dj=6JH(`d!*{(@SspGJw+L*DxFHq-^8hX)BMWfu$|_5c}AArk?W$KyC-@Jla0#>p#3PlJ(Tt;#I${FFNceLXm4NFy4pbX z^2w92yWD`NA8nonUO#_dCa{b4do=+i?e}Q{I@>pW!0~sq-|O*r93SKeP+i}7kkR9F z>KE@?Z*EZ9bGpvf#r=QR)B5oCJDMK^Xy%uu7I(FR>Hk=>emh?6_G%C5s{P(fkZ#|( zeeQaQ?5e)>5UK0!c~!?rZ^;C8RqwX9=S3auX|(63UnP^>g{k{@^XvKPGJjVSSF$W! zq}Ru9lV9I|u^Wia-__Ygm#2?iW$i5MDt~eOUFF}$@$*X>Wj9dz=aRf*4OdrH*Xaw} zjsbRAU$TOAeSKr`!K9V^Vtm`eT7FxteMkG^+cM@1sI7JWnBuF< zw8?UeqkY%)EoL2-tG6?3>N)?=ryrefyLPO>S*`j_QF{cXe>N9==4l5|zTOO=Y`qLX z*X#3}GCyy@`W?ynqdCK?n#VD;s@j|g%0^ng-gH1c=T~<8;S7`OOJ4~(7CB_>wtdS7 zYhT@cbG`g!#~*qj3yr$dp*?T9+vP8AKfA8P&hTBVZraOMwo9{)g59^bTVY4|F2=0Z zV~Z=_9+Nu!j_rrr4#k~=EwYRGJ^d(7AoU%-o* zlsuvKdVrx%Y?RzcbNaO|?aN)77DK2vw=4E>4+*v3hZWe-ejit0sQo^yK-w3#KXbQ6 zZ|^5`e6~qX(2^GOxvVh}!?gzf4lfzt7$(~m=IQ6Y|1xFo;ja2ep0wj zm=#tCm2io)j|tZarygkXv`d^P{w85wxLTMHwoCi0u;LPvCnj7X4212%eg~O2U+66} z{#0R|l&6FVDPJwzAmuq>@4lveRJc{*GD17Q{Vp|eb0jV)^rgH`xK7Hm!jzQTJUJ=1 zzGW;HejcYSx6g6$K5j$!@)!}xLLdF__@;ifzhHS~p9VQhpcw|Oli2b<-xzGb=b z*w3dYWjryV9fzemp1Aa%wj9~@czhX8M)IciFuylSmit)4%!ys+k4ygOXQf`48fX0I zeTISf!TrYfg`UvPQ&RH9B#$qQjt}RHiQiqmK=NfJPsZlm$9x$(pNE?9B!tNe%=7w# z2E*t@^8Ef5!&tpxc9E1XG)ycu^qS1`_k%X$`%Q*vX>aEzXZ!!6^e@caXyR4MFtJMV zd|mRa6#tusaf!=|A6aVp&#yN1iCYZw(%$y34l&zza)9YSCX6?l_BmM&{|Hl`w)Bke zw@RG&nJ=00jQC0MJ!$8QZ~OP8|JY#D&J)I$NM2cv>`~I+(T3T9hSAGRoRa!jg(=TT zeMJ1E)Mur=?cbOFbJA~G7|8Zy<1FJ6?;T_M$=h~i;*$~|m-whKQzkx;`0Ox~KM-ci z#AhU44U+AkLe}#|rhTkg_^+d#cT{AFK4;c{OxmZVy(jH*!pOf(9y;99{J|*q*b{x_!(JJHb(RKTbw2vQS`p-$8%p%h++h&*--;TS3{mk;G zq`fChNqj`wtHmZyM>{cmY3~m){b!_oW{LDK?egNg?UT|zA?=kgCGip4@6xXO&)EKl z%KY1LEErT=-&xD~##iD;h3jNse0j+i+uzK8T&Q{(KPC)>Za!b~#fQoKNZw4n zjL))8#wUJM=;ljGzCiLtEPI>rc*4xbj34>9j9cjD%h=@|F58dfOJ5?}jm&#Qn3eMM zGFiVDJL~21X8tmgFDlGPyST(BC7&;Oyh}|UU*cjXn{m72^(B80HRDynXwtM#TxOV( zd@(7HUSY~(mmAu=Ny(R!JTaj!?Q)V&2{Te2NWP5Z^DpUoycs(mBg}X`Vg70}j_C66 zc+?ln{Hc*9J|XeBYfN0^%5c0d@i~e2g_#>nT>iRnd{W}QQ6_&%;?pZlT=v>(}qbY_oX~9epVR&t%-{XJNgmBm;SslX8HW%4Rc?WcIO*cZe@dR8Wya}t-e@lJ=n z^cO$T^p})=<25FKRv65aeyuM|2xCIO+QdbLPIoFP{bi)Ty!02mX4=JmZy0~o(3f&0 zYJ17c^U}O}(_g;MF!hev&a&^y z_V#Z>yWTA$o;m(T7s_~rDT&X%Z`#GmoKHukz29WoM}+B~=Jh=(%m{72mN97`yU4Wn zgt`4p`?N4GwCyYt(mvj1+DC=^dj6TR^RZOsLm1h|^To8}Qx}_jS;-gsv{}CVCuBJf zFjNN`di@NeeGJQ;-(@9#R`Lfz?{sN*s$ph|VRELSI@2&W)v(<8SYGl6mznV=gdf%M zA##M-9urrZ{(Rv_b$p0QfBrS5zliXoIzGgtzsU8bzua|(AJy?8A^jz9F#W`YdwP6G zN&D!Hro9sG>G2^g?bXeuefB29Jv~0;rF}MK+6BTrJwDjy3?^2Y_P%gmj}P{_gt^;g zIfVOqe6Y_k3|5JQ0qMNqpj4CciI?zG~vKuY}_h_PJdDY2vew z8pdnn{(^m>5vC+QDe-Y(%!zj%*Q(NXT$Sd122W_8%b%C$?%TNR81w!`QfQy=Z)xL# zaVE|e+Tl8n|Lb^8VD47ae;~B|c2LF{9dGjHB(EK(&2OK-mHM&C7ZbKSzaL=Z0?8K_ z+B`9NzK#7o-uHWo)q7r{I{rSR=>Ut_A&jC!lW%`Q=?e>tC`rJ-apAp*ntkm1zTMp!Rm$P#J z+QwPtZ9e%u=Cm-ns_X5`ljj|!KP%Ul!qfvMJ}Qg|)AyV5{PzsALhnJzZz%)vC4cTf zlRpr~e<1DChEZwfe_woIPRg^wq|N_B6PJ-ZdGRAcJ0EfB-~JwTaF7{Cx%o>3;^V@U-2bxkV(CeI z_DYjCY5BkO{+=)W$L}%yM}!~s`+J-11PJ3Yj@*yTIHE%PJ1zG0!p3DzFs~O8VTHU7 zSlYPc1QVBaUI*O%lhS|cm!|*RMnkuM8y7jz?H(trLP z({Ea6m)p|D<$RMjC3Ige?ei$(Uoh`KdP4X0(#FLmntTyq$2jFVr}p>YhUwQ6+TR(nv~iIsGCz{v z&6kyY`EyLZxX|XYv~kf>Ouj(!+HvJ2PpVS#2$Okp9vc%{KQ4Yk7zk~-&1)Hv=h_C< zCVxVh|7SSACw^M;Ma1{tGI2R6w|On2l0UJ)%e`NmkoKttnLnYszu57nBtEjp#OKyo3FG zhZ0{&yJU-rv;B8GM>uK9vzHsXpKr)4Gvzs z-}axD<@c{NaS>s%)?5$8g(;zJXPK4uvE`<{Crr!x$thvRzQ1f63iHxFzQVMR3N!Y7 zX-nI_oA;+9gXR9_N|R3s_x1hcsN_>OntWNw7c`mq@f+m2@j}B`i(#WPv2(ZlS12nUg~4tGWDL&)<=#p>o2oL`V*ErUyVw_H}c87I{-%FK;uxC%!MtOI$|kZNHW&$sd>eQK7dwoIiDY*ZBj9OGv%VYnhh( zf#gkCej}VeFL`zuzrpds)Z^!?g z@c8|2mzkeCq+IIlxGg=&AD8@5VJ2|$i|@{lf2ZV^dYjkMm;8a`O$fca!ubQ6$Ju@Y ziAzeo&1)H#{5i>+7Ura#jk8Qjy!9>Z`_CU0Z9kd+m-|=FbC2z~_I0^!drSAZ%(nc) z%I`kc`NPhi`H1I7$#dYn=VgDE?KQeKygx+lmi@}vAN=o{@_d=?+mrlp$sZL)?g{5l zNgj89PD)%t>h1hm`jS78ya~G;_lEOlC6Ak5$>-L;3;to^qOx7sd9%z(eziv4|B?I|iMRP< z;=B1hx$Z5OUq#LNMpp6%!lbnOpx5vAx%2sNoAGCaAJ+A|FXIpHF!>Y0J-vR9OZ(WJ zroAWJ)9d%7wD;~Z?eo$;b!|oQ^UCpC482 ze{Zd!f;RTPo$-N=9i{j zO1Q80C$f?+`lQLHg!_7bA}{&!Hjgma$NLlZcYKn+Hsgy4_xb+BNV7deeq-|GBwyM4 z6A~Xtd_q|E{)EKmB`#y*e;3~F?e>(F_~?r=|CSPvx8wbTjQ95vC-wGs2z;rJ3jNo+ z?#~-#mOmqLDPg2t;@=Lp^Cdp^y6M*wW)C#)k7gr=c6s6wpOd(>Fme|E8!t`>!;^S*r8DQ`DaQXWO$(|A+sbI%(2auVTrV<0_9EJv7nOQom$q zOKsiI=GsNkA>PSt^$o4wyrtfZ`o>ew9(wk1qrF6P(*?EFt%JNV!$u5?D)m9z{~td6 zO7VtgAEe@aR0I}2t5h#+b)Ztm9Hdk~>?ph(RbVIK%_xeUf@{!d>;T@0#$cym7LCK! zd=~lGIoPwWQj@VGa3q?F?ZfSdC^a2heNL&%cvEmLb`t*RFr`*tXJGblrJlmpY(7G% z_jC-r6ZNU0U-&4BU}xZ`zob-O>=;a;P1u?*qZhDqaKJJAW-oRWCeSu) z&Go1qI}Nv>Ui12>JRC5D<-(4_3s8UT1iT+rV5i}KqtQAZ4j#&!>v(tpny%yF{b-Jk zhyOq|Ivx%j#yE65tU=3kJY0`f=yY|hilPl z9S`5szK(~(k5ekG<6#4ORL8>y(Iy=a|AAi6@o?DjY!5mfHlS@f9)1tC>v&y;desmQ zM~q<}uzh$j>W`g-zd#k(S@_u#SX68eo{xO&IQ$-(j-7`8Msu*$Shg8dgB^uQl)%>f zJ6eXFhhIIB?EyOuUqq|0bMVY@Y!A8|zKGWAa(L!=wg+7fUql;qIoyG=*lGg%y3ai5 z7<%RieYEr+^;G%TgSkj z=d)bc5%@!t#LmE{(K_sOCHr!mJi|YwJlKS$Vkh7>G#xt+msXJ%I|+}Ur}u$RvA=O_ zM6K8<_&c-=I|rxobeZMYF?bKpon48YhM%rw4zVNf@CD2vwg>M(>#+lvLmRL)zf#Ax zgdK-Bqm9@pm_eJcH7C?_oW%Cw0T(E>89M^+xR8AfJAi&ObE{)CQLiY=1tYD@Ew<(; zGyvO&KUm5#gf~{HmHtP{P0dGgkumkuanlq7jc*?(csl<-K zCe(nPfTy&xUFmW-^&Pe=ZNtk^3OfnkLaVXWyGrec)?!CsU$hR}g9Ffd>?r*APS&-K ze^05OzRx0S&fUSA| z{yo$X9Rq)hM(c9;Co~2-uggBxLyg1s;nT?1F>vz7=^Hx+Z$h)NQ?P*MVyoVa2i0Kv z@LAM=orBjL&_lKAcz7#Xrpw{6pXi~IIv&nNE3o5m8A@R%;c~PZI|Xk;Yp?_O01B|v z@JDDZb_PC))?sJi>u5c84u0a3JyaSy0uMqPust{kJ&GNLBR^Qs;ZPzjIyQm#I4L=@XydS~(HLD0 zzmCRX2k;)`W2fP*2eA%xxn^J11$GPuXtpkghabZDuswJUs>4pfOF!2`Ex}I0&1fZd z4)#5Q`PA`nA=-eQfN!FW*m*eoOFh(6*ikt6NZM-~-ix+jr(t9O^MI{+FjAAr2_Hbc zu+wn*K;p1taMjU0RDbLMPOe~^)8+7gkdLhfv0l)0>?k}I&BpfO8Z-wxfZs(m*l9R- zFw2V_hg*iSy6=fE|PEU@EK2;h$#oP&w>8 z{MF1JYAbdYe(VgE9XkT2p*(gBKKW(lLC3&9f2D`&GljNr(Ci+{!;ZpPXR<$H$6*VK zVkhB@V7ejSH9u>;ycij`fc1!^19Qy<>auJ+uv5HS|#5NA1{Y zcxEH(`V^K6K6nx98aoZwE@C^^HvIYJEEjeL=Fx0y&DJFA4?79hpgQaTj=PfO!uH{l zx3m9XXW{Ds3CRw59<^=0Y~1;dc^kOm1sM53SPaA zWz#l%3-vygWxTJ4x(`LL)9@waVdr3v2Usrb2)u4RW5rIvo4&_(t8MsO6vxiO@!w~C zVf*luG|P+~gLOaPc!!;Ux1tr;0lfW(Y`5BmCp^URV*Btal*UfMH_*e_d0qZ6>rR)$ z4Jd=1fqz6BvDJ@zsDWq`b`-Xwr*!#-9;ykwhMj;nqpjF!c?HixFL^D%R!=bIUoltM zF?jToY#Z27I0kLO_TlMhtB!%Uqixs$d<<>J&cbQGW*&76{5ew7m~*)8H|+b^c{ulJ z<^($qKl@vj7u$nt(P->6+=hG|4~IU(F%dfoPe3tjAD)J0W5?hHXbyG)-hk#}r{I5} zICcj97plR|!*@{~w#u?EqXujb4n_&=C_D+ZV*Btkv;;c_XQ5@-aZQxOPQqKza_j)! zk5*u(;U=^aI}5LVmg6mU3Z~H-9RvG5$MR!)@PX$!{^)Y}{tIlo*y_a|>c?m!b_V_x zWwG;c{YxB+bUbW)nd38d0`5e4Y_++EI_?$rWo#ebfcl)q7~nTvrEly2e*ZPr1$G*? z{DF0korKq-xQ>S-UuO=neK-lVV#i>BmSAgsA;+9xd+?+`vb;JTzWgWRuygQ7Z?K?3>t8IPlLbm$u;vXe+i4&qUj>?Hhe zG*`#NAODSQ3_AnQ+s6E0$6+m6j-7zlpcU9Dm_aLbJp2<%Vdvoie`o*2j=;~O)z}_9 z1+Br3!E;f79fwQNTI?je9<9Sp!Ed7V*a5s3rLoiSC+K194Ez<^fSrYt{=qQ;I|d&| zPw8^#|C3`Qw&tn-!@AHh@QJtB#&isPdOPz!9UH!k`eNtcUr|5oJp9WJjsx0;JKko_ zvDLqNsBfWh*a3VOP1WV?J=B*`3_A|*Ky!5rdZ$&T){SKR`}b5m z&|2&WybaBs&-Fh1HyVJgKGswH9Zkm0!^FpXs=3&j&!H%G4tl-mYeAnPTModcJP98` zIqVF43iTr<3tvU6={E=eh*n|e;h~@CsUGFNfd_}94cJjQ76ruka3WfR9fM0zoSaE` zGn$K?f{&ogD3%>QgC51s!epeUYS3eYJJGfaSjNw?tf*o zjU9&%qkhC>;4jfS%CqoUv<5o|#~#EOxaRfYseOB@t=KU*>foNL&uGfwxhTW3#Noy0 zQS2mq2}Ov>!BL0wRQWpYO~Gks`$OEXgXf@j>^Q7NdF%x2|2gIj+k;P`I_xa`I~s$X zhim%vzt~f?V#nY@RD+#>8<3~R1Jz+H?++Od z^if~>()=}g^Z?cc%pQ)k4PQiY^5o$6yq+qCoraH~IC(PgRWubl2M;-dv0{60G}?si z!|$O4b{dZVQctx-m&3)V4m$}SMsu(;@Q)~lorlAZWUlBp3hzL@u><%z>Z`{F&lu2C zy~i@f;4(B?=Y+STD0Tohqj5SO{u!-e+4Jxh1AD6F*je}rsv$lHccK;8>ZqQo4W)EW z_$1nZorU9%rax>SK8-f(a`^Fzo+^zUfv2K%*fH3Q0_-Gw9L?4J!ij?z8+Hudil$-* z@Uw#%Keh*_BVXr%3(z?11YD02#H8U1=ry+a9DEaP#?He-k72#Ak9cr6+K3&6v(Z*! z;;;#A!A`)}hcHgIfgJqSFqW6&Lja#dFVHp%Uq_p;bMQ06d#YX+vb^vlw2g8f)}jb@ z0$z+}AIN?RuSeUj;Ftryi6Z)bAiN*>D_9oz6BHvp1AmS3#Ao5Fs1NZu_}^$8@p*Vc zl>Lk2o(~(*3)l&`39ZM@!c#`D?AS3_i5|v|!~4)mmN5Gs3IF3HBQ*brv%keFM!^ZbiOZ2f3jzKFqzWHz}T7eyd-$I+Q1Go-l znEy1~pvAmp;3l+@@+{np9;Q48-$P@rWc!@JHiAZ9#XbVBLPM}qa1DxL2k=?sW9MMx zB#tlGnrEX3b{saKe%J}P1XW-s;d1l>eWl<}(Gctm%%eJDG$;5R6R>?a9o1mR;1#G9 zI|VZ+hOK$%L|z}UJvanS$Bx2QG#5Jw??C~5rQxHfLH7%Pg)+os;VWn(b`Jg>ttTcA z-$To=)yZtzD2<(fttg9~)MaQZw&taim|tBESE4Q0DflYdj-7-5jasquupORoYt5e8_JnRU38m07n!ZD|k6WfPlrm_ub z8}^>Y++s)I2DA)21D`sLWyH?HKcOT!^Y9C&^IC@O!I5Y*whyPGRoF3j9!g=yVGZh! zoq$Ww8tf#z8cqK#%LP}Vnitrf;aW80eU=e!Lct}B0jlYYX&K81ThIpVBwUF$VW(gQ zZN}EjqjlJt^JdTob^=bg2zC;t(Q<6f{QWMx*s>AFPfzL_y^=+=iq+lFuz+^cW@LM zL%9#DQ3N{ym!SL`%pqKXwqd8>A5c{1fy2(FZ|o?Xh5BO0;ZzBUf2nEE6US0fRCfiI$jgK$2fEFuV_1V z9v*Z)%S((0C!rj644#A9iHXAp(RMu^_&nNhFzXTSSIPRuj==NLYV0_?3RN7$c?En3 zr76$AH_!^~JZwjGoFl0?#|Bh`9f9Ygbvh4x5Czz2_&i#PorC*TvCWV_0{fvjZ9O;$ z&B2bsStv$K9A1T{>hZvDpt-~Z@E<6p#{&lo|lZ9`g zm6WUMp6WM{}{& zeAX3e#ZJNT3mE^2EEl{I)#-A$7S&*<;g~wcfbGMHX!GY;7FdIx!cM^DD2ttfe?(ib z^RQPvuM5}_xEgK44&WIVa2%)K7`z4LbUAz&y@s8EQ!iv2#*V>h4ftPY8-}MXp3e=)}s%H#02Xfx$mIN=h#oNNQ|L9~JLH2f** zMg9!@4a(_wIAIyKIS;YLn*RElm5}$)lT}z!_Uijv9Y*)0+!ynwhF^BjJd~hZE9r0=S zog3Lchza05H!%j*V;cV8W{!<|Y;ahL*9+_@{0a zQJ+_sAJ`Z5f1Q5e05pAnj!W=Zw2b}Bhf~nDA2a{(9JC!f4r@`}PguWjDN0}`;nk>y zF{I!(Py==Vzl(Cjq~RlID|QC{67~Ni`!#$KMX_`6&!``E9_~OMwz`e+qtVzAcrY4* z?ZL5V<0lw1oPzR{$KaW$S09emuoi8jJOSI#cI+g)8ucb71#d$NJAgkytBJ|L=g{l~ za|dhB#JWzA71bsZ2C>W;11?Tj~Vt4Sl8Gd9Es-Yc=#i2N>oRD3V!?^#!PtxUXF$kpM>ktILg!TF_a)a3*Wq#*9&6u z@SSz6Cv0^e?a*}MqwqGgLEmG6huly6IJQH0JX)pi$-r-+tvUuifKu3L_^AiTa~

4TUZNu!sX5VWTmx}sox!6d=kh@W9v2l51EA`vC=oZw|* zUE8Yh4Ed=4<_Iu{t;oPY(N*Z{1^beZoU9ePfHZQR`VZi@C}JQFmwZCc7WxCBKNXs1 z%}l2!kR>*p$n}4wFcuO)e=hVnp*v=n2zL-6-$UGs^@8v#JZt#35W)W&@f|#sBcknW z5W0|vk?}GSB~tl0_Wy;Ld=Q|Z9ua~jMDVW_eqZAIn1+FzwMLR&jRObL$kBMxD7i<4 zo=O@c=u1S{TQ0bnSPw5J3VrE0&i_!TkO{$?aDa%2O$FN#7of<9aNtHD6TF!;5*#k{ zU8E835y9z#uMlDXJ;5zNHufE)kK({W7d;)wf&h&s2FONJmoyq(3&9?Oy#)sejuw1C zaH`;&L?rYskO_TBL^{QSF=#J5zDw{*pn+f~;v5t;@dwl;aS;xq1#*POsfqy6TCripy1;~WZ+GqPYHS)6OX^X zWd?2%940t}_&mDU2g3MOFwSKnv=QtpI7;wg!7RbWf-432n?*WgM;SZq1XBdZ2tG*U z`ahQeL|7$)1A@hZb=+b|@H)ZqM8xC&3}p`A72G8Fwcrne(P%T&Z%u^$D4>4+_n0tv z*(e3e1h)u&BX~;CjYdbk8iL)4Fg#A^22yq11&0Y@#irvuE2xmZW-J%Re--f|k!K0M zDj11}nOWOuDA+@=v0yvFfkZfp<%QPg{?l^iW4|v9Y<@I72B=3i($i72#B9sjLc|b! ziTDP32igqv_zOGgJuhwO9l--c#5+qwJl&QSVC0mxGTF<(LU=@6gz1wAg_nsa;)TS8 z7($7Qu|gt3zKaO?KH@^mnncLIBfg0f5~0rs9qD#ANJe!@VJYU-MTsTWPzsPEl#b33 zCOn;^e=w&=ND1=YCFbZj5jnb(IfFwF6QTD6aiMuAO!66g$FaxE8CZIB9h=5y#Qd=;tOrmaaNf$^Y8P1~BVKx&s_xYZ8 ze|_gYUSHUDlFRS@&i$V6_x#Q|@1ApS@8v3kNG8eBR6|r?7mG@)2yc=Pp>GKYyCOnQ zOv`*EAHILd!slB6zLJPizG37gw=lD8d#UAi|TfwCj8o=wfim z5-~3__$KsSfbe1Y2p^M0=!7gnugOy3d=U$u30S}XD~A-j$^S znx<8OAX4A-mj&tv5s}uZ#_#aAUs)nuEz4kOmZgF=yFDu(p%-KkIx2fbk*0ZayEc`# zZwcciMS$=tvcKXFhO$KbmMj%GBTEHn6kmZa$fubATeus=gkpSNQZXIKT2LH9cW-DQNcHjvGP0RkKi(* z2wTa$C#>?f$sfh-hRAE5=^W{ZH8&xxZ1&;1Tek zGA8h&!OGXu;`;LU$B|$4Y5Yl?*|9oaFMkTNe&n~xNBGx~-zT5b{>PDDMVZ7j%42Il{A)}#SP|@(e=Ez0$nTXuizy`XN7H?YZ*VIK zD}0;$*$kb?*Tdt9J2*CjSx2_^Oe&O(@UnHmV2mr_ zj8Zig-q;Sdb!?0=zvbd;$v50x1#q(i+~Uh{I%h;_5!MLrW`7{zWdZJ<0=R|%w`3rk z^mV2+;iUrs$$vP&?JR)X8sP3NfNSAc%7mXP0Nlqh!#!O9cO<~6%s?&JnZc!E&lLck z&H!Wk3*dSJ-0uqD&IdTni-R<0sFt~dOVhqZe9Qy$<9MW@AJ<+0r^^xJ>j-hFoYAkB zI1H#}8mI{?16)@DoKE4!cQOx7!<7d2U<&dxJO#V?5j9Ox-%S3+`c~ePAg9NmiVZ|?Deirmd~DcA5V@- zEL!g_%D%c$pJ*L*Rrf~bM|WFCa^%=^)$thfx~Ci$)vO4s-!jUv!AuZJja%GSiYBma z*pf?>+e^Nxa)W!nBUzScdfW|p8OY|xT{U)WD;G^?;Shw0*at1@3FL*;u^p~S<*@s( zB~4S}{smr@t9EBzhWh9ZcS(@;9j>wy>NX&?92SH*yPtX*wGFACXm%^XCt8}_c5KNd z%9TdtYTRp`P@ijdy@K>LyP;iB51E=?REc^2VegDWm7}S0azD`F)Y+Lw2gnY$Mk(pll`<<8x|0xGp z3Q#9kOD6m}xKOwgVXXwzBlFozc!(BM_!HTbMl%uK)z8OiMElyxBA`Xw^o-z{WEK2j z4sJ8JqJF~k3oI(N0$f&vi$!qLtB$%MCn3x!uAJQtKAUczP(ui}~~ ze(BJFCY%Bn3U>y=-wuQuxyTBIANx(jWcnt2{F-cF3&0!mMEnxCPUuV7>O)`5=IeRhn9?@VO~o!S z!-c|U0qPc~B@@=$0-^ABge559AF!G5u<~ragD)6U+FHQ1Ulz{o?@kuGr%xrX9Xp+j zP+$-%t6IuPU_75Kp()4JS|oG)3q428D_5jO_HrPpT@jz4OWX=}m{-*7qZp8?bYZsG<&mhhW_@Y+DwKk|-mgLU+= zfQ?-fo;D#z7@S^+wPeCm!1;jF@$($@O_`?tIcRI@2bl1~K~vLiRB3C%k9{>8R|_tu zseOS>;KG(pO-HzvLpncfU^C%e)!Bp%$2k}z6Mmc9QDFsz%h%Lrz=gtV(z+=x{0PJ* ztPk9Vg!LVPD!V3pWNJ390i50?wq#9x5L_tShOnJK9<>YbB1+Avi3lTxxt%Ptj16mq zw}T4_D`&=I<2kMt{3V+Oa&N?!Bv0u<_;k#Y-&g#O`R}t^2Eu9FTRnyqx?T|DuoaL delta 44262 zcmce<3s{s@*FOF{&oF|=fjr?E@vNw5mZFxJnpSFfMl%m(ie^b=X2(HcglU|@CVWh# zFs-btEDu;p;^7r5D=RBgD=I4|ElEvDO@8;i_ZkH1d%ySluJ8Y!>tgP`)?RDvwa=${ z9$wFi+*$0(ZtRZlc4b2ME3fVu6B8f9PsQ(;nC{(r#&=izDK!kkSZ)|&9{WH2bN^o( z{2$tL|F3dmu3m2Z-~74%YeUwMg~tEqfA0T368VQT9G@LB_}3&9_y@G_dD_ur!^c+r zUiMY}9QEw98yvkhjPLt(BZtwoYoPzwHi4wE)dSPVj*XB;eC5&?%m&V0SM})GJ@D<= zcBZi*d|dWGGcB-eMO!l?uzf`nGb?Zy--`q1R}Nj%dH9_)=M!*K;u7TiG&U4Z`V{T&~P(szLse>B>k$ zz;o8+`MkDa_;L;+zFVQ!a|F02%rg9*Ql(uI_;F=yLUu^|DW_JGNl1ao1F_Ac5O~y3^L0z4TRs5if^wc z1>e4{+299OKHDN`WvG~bv&5NgC@&V%@|tvp;&f&

LyiEtLI(vf;*{H2Sm-w0BSz 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

BD*rg{auoIb>;Jh+m z^Br$p9iTM>wXk6bjdy58Vkl7_k7N8)1~iS&y1blq+19 zUx}jsQ}~4%Q0_{FFEQ{6g)cX7S(YY?=U?3GYQ>-6Ag(tmyw1QkDf~JEr*&b+nJm_K zxK~Eu|I9&LU$5}H3_Ppw-3ETM!pjW2Q{g``aQWzCvh%!we@^iqHSjwWe$2qXEba?( zbyj=dt#Ey>-EW8sR6c|5#XZ$&lb!}}8Y`dF77@LOWA->&4U!~AJh=Q54x66SQ2}iD zOdtGZA3Y!N;a}*3(<_1$erjuobUR0nE^XmSEB-RUJ=mt+=)+I{jJN5z+Xw%F5B@T6 z3TKb9t84xM@UvL`740f`{t3f9o84W&NzX2&huT%5-9G$}``}Oc;Q!@=pNT=UEj+V* z@N0c=+C#>shyImo!yg1r@zwv9741FZ`(q#eXMOO4N)IjI5sAJ4?wdaR#O3L#W_+wxRNdU{G$yz3Pd)La8|Hb6uP&KUqZEM_#h2ozNb#i?(Fvd2#h2nE zy!g^Zbi&7Z@uj773gdG*oCRlip12kQVIdJ-K!`YngDx#H%%E*#f!$3;-xDR@us?HI=w7v+xuT5`p?5Cel`R)@%^j(i;c+L;zS~Ysr{A&X76>GO$o6S!QzoCh7NwrRo&1` zPNr!yIgp^ls>m!#B&yrm@X%r2#;TT7bpn2=#=2NFzVZ!MZ>mZsGU=*RrUkzw#Rs_6 z(I|aqT8-&`CK+AR(BL#A8>*YP9-k_Frb|DgYOb%UPDUFV5by>W!g}e{oPgSzR7-Oc zelRmwl5#5)PA$@<#YrSmElt&>rHPi7>Z-=tT;2~^>TqiDacbkj`A%(hJ=9ss*ZiTg zjVKjE`r%NR#ys@gh3I@7vvFV=BuJ0L2tSMA^KeZ>_<1-q|78S%F2F&48o!1>5Mkt} zaXJ2x`1={&fomdk1L8TE=Kr)nCI4JpYkaT5iT`AV|4iXzH_Y%pg%dxGLbaY(6>jp= zc!P-eX;h>6`QA!g|1|WcM8rP@hvuK9a8rK~{+Cp!A{l1+@Ne`0zi(^wV=_&HtDW|1*rA<}8~3 z=RW-UnZKF8QwRW=`E|C!P5!w){7V@>&4qM$^uM-AKh-IXzvRRJd#0cBpN#PX5$U-I zht@NX;qw_z5B`XVe*q57zmwrb4F3|t3mN_=hI6|!F+L$8{R?qu{qq^Vh~cXkUc&Ht zhI9UH4Ci+LmEqj(cNot3pJq7c{}sbIf1X-sG2_Me7MRAuulEoj{tq(z*G$jF41bH^ z#SEv1K}3}OG>6vdxk%xppSOpXFn(II(frF9|0N8kclU`%KehRqKf(C9{>=nIIib!c`Cm7JVqWgsCb*x4AVs!c~(X@G5a0rTE^(a0);54Mb%Or||3b zsu;tGpYnmIhT)`N&kJcyl}Ovw^SrVDYv1-Oeam0;TkY1u(y zKlGeOq@R%hWwWKk1|>-4hw6fvel#y3`)2(6i5av?I=Qo!CmEs#l)Ro#NEA=})dXAf zYuvp54&-g&@0l$nbUCN+(>zYgYy8*BzV1)8oz=>|?(a1Yc0td*bNr3LjWtf)WK_iK5b zem2`A*-VKIqWAlVXbk>d9H#uqz|6J-kh5J4C>B!S7#YzKZMRK6bhZ?lV + --> - **binary 100, integer 4**: Application/Xil will connect with the Simulator and in wait mode until the specified initial simulation seconds (parameter **SimulationModeParamter**) then sync This is suitable for simulation environment where users want to run the SUMO simulation at fast pace without running a Simulink model until the a specific seconds later. @@ -83,31 +85,35 @@ SimulationModeParamter is a double variable that currently only used for mode bi This section is about how to build the source code, and then how to dispatch a released executable version. ### Prerequisite -Several libraries need to be compiled first. You can use the ```compileExternalLibraries.bat``` to do the following steps automatically or manually execute the following steps. -Build libevent -https://github.com/libevent/libevent/blob/master/Documentation/Building.md#building-on-windows +#### 1. Download and install Visual Studio 17 2022 community version. + +#### 2. Several libraries need to be compiled first. You can use the ```compileExternalLibraries.bat``` to do the following steps automatically or manually execute the following steps. Make sure you have CMake installed and added to PATH +* Build libevent (Currently this lib is not used, you can skip)\ +reference: https://github.com/libevent/libevent/blob/master/Documentation/Building.md#building-on-windows \ +Note: libevent source is already included in the CommonLib folder. Using the following command to build +or "start libevent.sln" and build with menu in Visual Studio. ``` cd .\CommonLib\libevent md build && cd build -cmake -G "Visual Studio 16 2019" -DEVENT__DISABLE_MBEDTLS=ON .. # Or use any generator you want to use. Run cmake --help for a list -cmake --build . --config Release # Or "start libevent.sln" and build with menu in Visual Studio. +cmake -G "Visual Studio 17 2022" -DEVENT__DISABLE_MBEDTLS=ON .. # Or use any generator you want to use. Run cmake --help for a list +cmake --build . --config Release ``` -Note: build in Release version if also compiling Release version of TrafficLayer.exe, CoordMerge.exe, etc. build in Debug if compiling Debug version of TrafficLayer.exe, CoordMerge.exe, etc. - -Build yaml-cpp -https://github.com/jbeder/yaml-cpp +* Build yaml-cpp\ + reference: https://github.com/jbeder/yaml-cpp \ + Note: Build in Release version if also compiling Release version of `VirtualEnvironment.lib` and CarMaker executable. Build in Debug if compiling Debug version of `VirtualEnvironment.lib` and CarMaker executable** ``` cd .\CommonLib\yaml-cpp md build && cd build -cmake -G "Visual Studio 16 2019" .. # Or use any generator you want to use. Run cmake --help for a list -cmake --build . --config Release # Or "start libevent.sln" and build with menu in Visual Studio. +cmake -G "Visual Studio 17 2022" .. # Or use any generator you want to use. Run cmake --help for a list +cmake --build . --config Release ``` + ### Dispatch a release -The source code uses ```msbuild``` as the default compiler, command ```msbuild``` must be known in the environmental variable before dispatching. The path to be added is ```%ProgramFiles(x86)%\Microsoft Visual Studio\2019\\MSBuild\Current\Bin```. +The source code uses ```msbuild``` as the default compiler, command ```msbuild``` must be known in the environmental variable before dispatching. The path to be added is ```%ProgramFiles(x86)%\Microsoft Visual Studio\2022\\MSBuild\Current\Bin```. Additionally, python >= 3.8 is required. It is recommended to create a dedicated conda environment and name it as ```realsimdev```. diff --git a/VirCarlaEnv/.gitignore b/VirCarlaEnv/.gitignore new file mode 100644 index 00000000..5f3b165c --- /dev/null +++ b/VirCarlaEnv/.gitignore @@ -0,0 +1,28 @@ +# Local build artifacts +/build/ +CMakeFiles/ +CMakeCache.txt +cmake_install.cmake +*.cmake +*.a +*.o +*.obj +*.pdb +*.ilk +*.sln +*.vcxproj* +*.ninja +.ninja* +Makefile +compile_commands.json + +# CARLA dependencies bundle +CommonLib/libcarla/ + +# CLion/VSCode etc +.idea/ +.vscode/ + +# Python cache +__pycache__/ +*.pyc diff --git a/VirCarlaEnv/VirCarlaEnv/BridgeHelper.cpp b/VirCarlaEnv/VirCarlaEnv/BridgeHelper.cpp new file mode 100644 index 00000000..aa2839bf --- /dev/null +++ b/VirCarlaEnv/VirCarlaEnv/BridgeHelper.cpp @@ -0,0 +1,298 @@ +#include "BridgeHelper.h" + + +// Default value for offset +// Town01 0.06,328.61 +// Town04 503.02,423.76 +//carla::geom::Location BridgeHelper::offset = carla::geom::Location(0.06f, 328.61f, 0.0f); +carla::geom::Location BridgeHelper::offset = carla::geom::Location(0.0f, 0.0f, 0.0f); +carla::geom::Transform BridgeHelper::map_transfrom_Sumo_to_Carla(const carla::geom::Transform& in_sumo_transform, + const carla::geom::Vector3D& extent) { + + carla::geom::Location in_location = in_sumo_transform.location; + carla::geom::Rotation in_rotation = in_sumo_transform.rotation; + + float yaw = -1.0f * in_rotation.yaw + 90.0f; + float pitch = in_rotation.pitch; + + float x = in_location.x - std::cos(yaw * M_PI / 180.0f) * extent.x; + float y = in_location.y - std::sin(yaw * M_PI / 180.0f) * extent.x; + float z = in_location.z - std::sin(pitch * M_PI / 180.0f) * extent.x; + + x -= offset.x; + y -= offset.y; + + carla::geom::Location out_location{ x, -y, z }; + carla::geom::Rotation out_rotation{ in_rotation.pitch, in_rotation.yaw - 90.0f, in_rotation.roll }; + + return carla::geom::Transform(out_location, out_rotation); +} + +carla::geom::Transform BridgeHelper::map_transfrom_Carla_to_Sumo(const carla::geom::Transform& in_carla_transform, + const carla::geom::Vector3D& extent) { + + carla::geom::Location in_location = in_carla_transform.location; + carla::geom::Rotation in_rotation = in_carla_transform.rotation; + + float yaw = -1.0f * in_rotation.yaw; + float pitch = in_rotation.pitch; + + float x = in_location.x + std::cos(yaw * M_PI / 180.0f) * extent.x; + float y = in_location.y - std::sin(yaw * M_PI / 180.0f) * extent.x; + float z = in_location.z - std::sin(pitch * M_PI / 180.0f) * extent.x; + + x += offset.x; + y -= offset.y; + + carla::geom::Location out_location{ x, -y, z }; + carla::geom::Rotation out_rotation{ in_rotation.pitch, in_rotation.yaw + 90.0f, in_rotation.roll }; + + return carla::geom::Transform(out_location, out_rotation); +} + +carla::geom::Location BridgeHelper::map_location_Carla_to_Sumo(const carla::geom::Location& in_carla_location) { + + carla::geom::Location in_location = in_carla_location; + + float x = in_location.x; + float y = in_location.y; + float z = in_location.z; + + x += offset.x; + y -= offset.y; + + carla::geom::Location out_location{ x, -y, z }; + + return out_location; +} + +std::string BridgeHelper::map_Sumo_vClass_to_Carla_blueprintId(const std::string& vClass) +{ + static const std::unordered_set carlaCarsBlueprints = { + "vehicle.audi.a2", + "vehicle.audi.etron", + "vehicle.audi.tt", + "vehicle.bmw.grandtourer", + "vehicle.chevrolet.impala", + "vehicle.citroen.c3", + "vehicle.dodge.charger_2020", + "vehicle.ford.mustang", + "vehicle.jeep.wrangler_rubicon", + "vehicle.lincoln.mkz_2017", + "vehicle.lincoln.mkz_2020", + "vehicle.mercedes.coupe", + "vehicle.mercedes.coupe_2020", + "vehicle.micro.microlino", + "vehicle.mini.cooper_s", + "vehicle.mini.cooper_s_2021", + "vehicle.nissan.micra", + "vehicle.nissan.patrol", + "vehicle.nissan.patrol_2021", + "vehicle.seat.leon", + "vehicle.tesla.model3", + "vehicle.toyota.prius", + "vehicle.ford.crown" // Also used for taxi + }; + static const std::unordered_set carlaTrucksBlueprints = { + "vehicle.carlamotors.carlacola", + "vehicle.carlamotors.european_hgv", + "vehicle.tesla.cybertruck", + }; + static const std::unordered_set carlaVansBlueprints = { + "vehicle.mercedes.sprinter", + "vehicle.volkswagen.t2", + "vehicle.volkswagen.t2_2021", + }; + static const std::unordered_set carlaBusesBlueprints = { + "vehicle.mitsubishi.fusorosa", + }; + static const std::unordered_set carlaMotorcyclesBlueprints = { + "vehicle.harley-davidson.low_rider", + "vehicle.kawasaki.ninja", + "vehicle.vespa.zx125", + "vehicle.yamaha.yzf", + }; + static const std::unordered_set carlaBicyclesBlueprints = { + "vehicle.bh.crossbike", + "vehicle.diamondback.century", + "vehicle.gazelle.omafiets", + }; + + static const std::unordered_set carlaPedestriansBlueprints = { + "walker.pedestrian.0001", + "walker.pedestrian.0002", + "walker.pedestrian.0003", + "walker.pedestrian.0004", + "walker.pedestrian.0005", + }; + //Note in the Carla Beprints, the emergency vehicles are not separated by type + static const std::unordered_set carlaEmergencyBlueprints = { + "vehicle.ford.ambulance", // Vans + "vehicle.carlamotors.firetruck", // Truck + "vehicle.dodge.charger_police", // Car + "vehicle.dodge.charger_police_2020", // Car + }; + + + std::string carlaBlueprintId = ""; + //std::string carlaBlueprintId = "vehicle.tesla.model3"; // Default to be passenger car + if (vClass == "passenger"){ + carlaBlueprintId = random_select_from_set(carlaCarsBlueprints); + } + else if (vClass == "truck") { + carlaBlueprintId = random_select_from_set(carlaTrucksBlueprints); + } + else if (vClass == "van") { + carlaBlueprintId = random_select_from_set(carlaVansBlueprints); + } + else if (vClass == "bus") { + carlaBlueprintId = random_select_from_set(carlaBusesBlueprints); + } + else if (vClass == "motorcycle") { + carlaBlueprintId = random_select_from_set(carlaMotorcyclesBlueprints); + } + else if (vClass == "bicycle") { + carlaBlueprintId = random_select_from_set(carlaBicyclesBlueprints); + } + else if (vClass == "pedestrian") { + carlaBlueprintId = random_select_from_set(carlaPedestriansBlueprints); + } + else if (vClass == "emergency") { + carlaBlueprintId = random_select_from_set(carlaEmergencyBlueprints); + } + else { + std::cerr << "Unknown vClass: " << vClass << std::endl + << "Currently supported vClasses are:" << std::endl + << "passenger, truck, van, bus, motorcycle, bicycle, pedestrian, emergency." << std::endl + << "Defaulting to vehicle.tesla.model3." << std::endl; + carlaBlueprintId = "vehicle.tesla.model3"; // Default to be passenger car + } + return carlaBlueprintId; +} + +SumoTrafficLightState BridgeHelper::map_Carla_traffic_light_state_to_Sumo(carla::rpc::TrafficLightState carlaTrafficLightState) { + + switch (carlaTrafficLightState) { + case carla::rpc::TrafficLightState::Red: + return SumoTrafficLightState::RED; + case carla::rpc::TrafficLightState::Yellow: + return SumoTrafficLightState::YELLOW; + case carla::rpc::TrafficLightState::Green: + return SumoTrafficLightState::GREEN; + case carla::rpc::TrafficLightState::Off: + return SumoTrafficLightState::OFF; + case carla::rpc::TrafficLightState::Unknown: + default: + return SumoTrafficLightState::OFF; + } +} + + +carla::rpc::TrafficLightState BridgeHelper::map_Sumo_traffic_light_state_to_Carla(SumoTrafficLightState& sumoTrafficLightState) { + // Map SumoTrafficLightState to carla::rpc::TrafficLightState + if (sumoTrafficLightState == SumoTrafficLightState::RED || + sumoTrafficLightState == SumoTrafficLightState::RED_YELLOW) { + return carla::rpc::TrafficLightState::Red; + } + else if (sumoTrafficLightState == SumoTrafficLightState::YELLOW) { + return carla::rpc::TrafficLightState::Yellow; + } + else if (sumoTrafficLightState == SumoTrafficLightState::GREEN || + sumoTrafficLightState == SumoTrafficLightState::GREEN_WITHOUT_PRIORITY) { + return carla::rpc::TrafficLightState::Green; + } + else if (sumoTrafficLightState == SumoTrafficLightState::OFF) { + return carla::rpc::TrafficLightState::Off; + } + else { // SumoTrafficLightState::GREEN_RIGHT_TURN and SumoTrafficLightState::OFF_BLINKING + return carla::rpc::TrafficLightState::Unknown; + } +} + + +SumoTrafficLightState BridgeHelper::get_Sumo_traffic_light_state_from_char(char c) { + switch (c) { + case 'r': return SumoTrafficLightState::RED; + case 'y': return SumoTrafficLightState::YELLOW; + case 'G': return SumoTrafficLightState::GREEN; + case 'g': return SumoTrafficLightState::GREEN_WITHOUT_PRIORITY; + case 's': return SumoTrafficLightState::GREEN_RIGHT_TURN; + case 'u': return SumoTrafficLightState::RED_YELLOW; + case 'o': return SumoTrafficLightState::OFF_BLINKING; + case 'O': return SumoTrafficLightState::OFF; + default: + throw std::invalid_argument("Unknown SumoTrafficLightState char: " + std::string(1, c)); + } +} + +char BridgeHelper::Sumo_traffic_light_state_to_char(SumoTrafficLightState state) { + return static_cast(state); +} + +std::unordered_map> BridgeHelper::readTrafficLightTable(const std::string& filename) { + std::unordered_map> trafficLightMap; + std::ifstream file(filename); + std::string line; + + if (!file.is_open()) { + std::cerr << "Failed to open file: " << filename << std::endl; + return trafficLightMap; + } + + // Skip header + std::getline(file, line); + + while (std::getline(file, line)) { + std::stringstream ss(line); + std::string token; + + std::string junctionId; + int linkId; + double x, y, z, heading; + + std::getline(ss, junctionId, ','); + std::getline(ss, token, ','); + linkId = std::stoi(token); + std::getline(ss, token, ','); + x = std::stod(token); + std::getline(ss, token, ','); + y = std::stod(token); + std::getline(ss, token, ','); + z = std::stod(token); + std::getline(ss, token, ','); + heading = std::stod(token); + + TrafficLight trafficLight(junctionId, linkId, x, y, z, heading); + trafficLightMap[junctionId][linkId] = trafficLight; + } + + return trafficLightMap; +} + + +std::pair BridgeHelper::find_closest_trafficLight_id( + std::unordered_map>& trafficLightMap, + double x, double y +) { + double min_dist = std::numeric_limits::max(); + std::pair closest_ids = { "", -1 }; + + for (const std::pair>& pair : trafficLightMap) { + const std::string& junctionId = pair.first; + const std::unordered_map& linkMap = pair.second; + for (const std::pair& pair : linkMap) { + const int& linkId = pair.first; + const TrafficLight& trafficLight = pair.second; + double dx = trafficLight.x - x; + double dy = trafficLight.y - y; + double dist_sq = dx * dx + dy * dy; + + if (dist_sq < min_dist) { + min_dist = dist_sq; + closest_ids = { junctionId, linkId }; + } + } + } + + return closest_ids; +} \ No newline at end of file diff --git a/VirCarlaEnv/VirCarlaEnv/BridgeHelper.h b/VirCarlaEnv/VirCarlaEnv/BridgeHelper.h new file mode 100644 index 00000000..d1889b28 --- /dev/null +++ b/VirCarlaEnv/VirCarlaEnv/BridgeHelper.h @@ -0,0 +1,114 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "RandomUtils.h" +#include +#include +#include +#include +#include +#include +#include "carla/rpc/TrafficLightState.h" +#define M_PI 3.14159265358979323846 +#define SET_CONTAINS_ID(set, value) ((set).find(value) != (set).end()) + +struct SumoActor { + std::string id; + std::string vType; + std::string vClass; + carla::geom::Transform sumoTransform; + carla::geom::Transform carlaTransform; + // The extent of the actor is the size of the bounding box in Carla + carla::geom::Vector3D extent; + // Additional properties can be added as needed, e.g.: + // Indicates if the actor is spawned in Carla + bool spawnedInCarla = false; + carla::SharedPtr carlaVehicleActorPtr = nullptr; + //std::vector signals; + //carla::rpc::Color color; + + SumoActor() = default; + // Initialize an Actor with all required fields + // (vehicle id, vehicle type, vehicle class, transform, extent) + SumoActor(const std::string& _id, + const std::string& _vType, + const std::string& _vClass, + const carla::geom::Transform& _sumoTransform, + const carla::geom::Vector3D& _extent) + : id(_id), + vType(_vType), + vClass(_vClass), + sumoTransform(_sumoTransform), + extent(_extent) { + } +}; + +// Sumo signal state +enum class SumoTrafficLightState : char { + RED = 'r', + YELLOW = 'y', + GREEN = 'G', + GREEN_WITHOUT_PRIORITY = 'g', + GREEN_RIGHT_TURN = 's', + RED_YELLOW = 'u', + OFF_BLINKING = 'o', + OFF = 'O' +}; + +struct TrafficLight { + std::string junctionId; + int linkId; + double x, y, z; + double heading; + SumoTrafficLightState state = SumoTrafficLightState::OFF; + std::string carlaTrafficLightActorId = ""; + carla::SharedPtr carlaTrafficLightActorPtr = nullptr; + // Current state of the traffic light + + TrafficLight() = default; + TrafficLight(std::string _junctionId, int _linkId, double _x, double _y, double _z, double _heading) + : junctionId(_junctionId), linkId(_linkId), x(_x), y(_y), z(_z), heading(_heading) {} +}; + + +class BridgeHelper { +public: + // Global offset between SUMO and Carla coordinate systems + static carla::geom::Location offset; + + // Convert SUMO → Carla + static carla::geom::Transform map_transfrom_Sumo_to_Carla(const carla::geom::Transform& in_sumo_transform, + const carla::geom::Vector3D& extent); + + // Convert Carla → SUMO + static carla::geom::Transform map_transfrom_Carla_to_Sumo(const carla::geom::Transform& in_carla_transform, + const carla::geom::Vector3D& extent); + + static carla::geom::Location map_location_Carla_to_Sumo(const carla::geom::Location& in_carla_location); + + static std::string map_Sumo_vClass_to_Carla_blueprintId(const std::string& vclass); + + static std::unordered_map> readTrafficLightTable(const std::string& filename); + + static char Sumo_traffic_light_state_to_char(SumoTrafficLightState state); + + static SumoTrafficLightState get_Sumo_traffic_light_state_from_char(char c); + + static SumoTrafficLightState map_Carla_traffic_light_state_to_Sumo(carla::rpc::TrafficLightState carlaTrafficLightState); + + static carla::rpc::TrafficLightState map_Sumo_traffic_light_state_to_Carla(SumoTrafficLightState& sumoTrafficLightState); + + static std::pair find_closest_trafficLight_id( + std::unordered_map>& trafficLightMap, + double x, double y); + +}; + + diff --git a/VirCarlaEnv/VirCarlaEnv/CMakeLists.txt b/VirCarlaEnv/VirCarlaEnv/CMakeLists.txt new file mode 100644 index 00000000..fa68414a --- /dev/null +++ b/VirCarlaEnv/VirCarlaEnv/CMakeLists.txt @@ -0,0 +1,166 @@ +cmake_minimum_required(VERSION 3.16) +project(VirCarlaEnv LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_POSITION_INDEPENDENT_CODE ON) + +# ------------------------------------------------------------------ +# Paths to external dependencies (CARLA) +# Looks first for CommonLib/libcarla (populated by copyCarlaDependencies), +# otherwise uses CARLA_ROOT (env or cache) and searches standard layouts. +# ------------------------------------------------------------------ +set(FIXS_ROOT "${CMAKE_SOURCE_DIR}/../.." CACHE PATH "FIXS repository root") +set(DEFAULT_CARLA_ROOT "${FIXS_ROOT}/CommonLib/libcarla") + +if(NOT DEFINED CARLA_ROOT OR CARLA_ROOT STREQUAL "") + if(DEFINED ENV{CARLA_ROOT} AND NOT "$ENV{CARLA_ROOT}" STREQUAL "") + set(CARLA_ROOT "$ENV{CARLA_ROOT}") + elseif(EXISTS "${DEFAULT_CARLA_ROOT}") + set(CARLA_ROOT "${DEFAULT_CARLA_ROOT}") + else() + set(CARLA_ROOT "" ) + endif() +endif() +set(CARLA_ROOT "${CARLA_ROOT}" CACHE PATH "Path to CARLA checkout/install or extracted dependencies (include/ and lib/)") +if(CARLA_ROOT STREQUAL "") + message(FATAL_ERROR "Set CARLA_ROOT (or copy dependencies to CommonLib/libcarla).") +endif() + +# Pick an include dir by probing common layouts +set(CARLA_INCLUDE_CANDIDATES + "${CARLA_ROOT}/include" + "${CARLA_ROOT}/include/carla" + "${CARLA_ROOT}/LibCarla/source" +) +foreach(dir IN LISTS CARLA_INCLUDE_CANDIDATES) + if(EXISTS "${dir}/carla/client/Client.h") + set(CARLA_INCLUDE_DIR "${dir}") + break() + endif() +endforeach() +set(CARLA_INCLUDE_DIR "${CARLA_INCLUDE_DIR}" CACHE PATH "Directory containing CARLA headers (expects carla/client/Client.h)") +if(NOT CARLA_INCLUDE_DIR OR NOT EXISTS "${CARLA_INCLUDE_DIR}/carla/client/Client.h") + message(FATAL_ERROR "Could not find carla/client/Client.h under ${CARLA_ROOT}; set CARLA_INCLUDE_DIR explicitly.") +endif() + +# Locate the client library in common lib locations +set(CARLA_LIB_CANDIDATES + "${CARLA_ROOT}/lib" + "${CARLA_ROOT}/lib64" + "${CARLA_ROOT}/Build/libcarla-client-release" +) +find_library(CARLA_CLIENT_LIBRARY NAMES carla_client carla_client.lib PATHS ${CARLA_LIB_CANDIDATES} NO_DEFAULT_PATH) +if(NOT CARLA_CLIENT_LIBRARY) + find_library(CARLA_CLIENT_LIBRARY NAMES carla_client carla_client.lib) +endif() +set(CARLA_CLIENT_LIBRARY "${CARLA_CLIENT_LIBRARY}" CACHE FILEPATH "Path to CARLA client library") +if(NOT CARLA_CLIENT_LIBRARY) + message(FATAL_ERROR "Could not find carla_client library. Set CARLA_ROOT or CARLA_CLIENT_LIBRARY.") +endif() +get_filename_component(CARLA_LIB_DIR "${CARLA_CLIENT_LIBRARY}" DIRECTORY) + +find_library(BOOST_FILESYSTEM_LIB NAMES boost_filesystem PATHS "${CARLA_LIB_DIR}" "${CARLA_LIB_DIR}/.." NO_DEFAULT_PATH) +find_library(BOOST_SYSTEM_LIB NAMES boost_system PATHS "${CARLA_LIB_DIR}" "${CARLA_LIB_DIR}/.." NO_DEFAULT_PATH) +find_library(RPC_LIB NAMES rpc PATHS "${CARLA_LIB_DIR}" "${CARLA_LIB_DIR}/.." NO_DEFAULT_PATH) +find_library(DETOUR_LIB NAMES Detour PATHS "${CARLA_LIB_DIR}" "${CARLA_LIB_DIR}/.." NO_DEFAULT_PATH) +find_library(DETOUR_CROWD_LIB NAMES DetourCrowd PATHS "${CARLA_LIB_DIR}" "${CARLA_LIB_DIR}/.." NO_DEFAULT_PATH) +find_library(DETOUR_TILE_LIB NAMES DetourTileCache PATHS "${CARLA_LIB_DIR}" "${CARLA_LIB_DIR}/.." NO_DEFAULT_PATH) +find_library(RECAST_LIB NAMES Recast PATHS "${CARLA_LIB_DIR}" "${CARLA_LIB_DIR}/.." NO_DEFAULT_PATH) +if(NOT RPC_LIB) + message(WARNING "rpclib (librpc) not found alongside CARLA libs; set RPC_LIB or adjust CARLA_LIB_DIR.") +endif() + +# ------------------------------------------------------------------ +# Third-party: yaml-cpp (use system if present, otherwise the vendored copy) +# ------------------------------------------------------------------ +find_package(yaml-cpp QUIET) +if(NOT yaml-cpp_FOUND) + set(YAML_BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) + set(YAML_CPP_BUILD_TESTS OFF CACHE BOOL "" FORCE) + set(YAML_CPP_BUILD_TOOLS OFF CACHE BOOL "" FORCE) + add_subdirectory(${FIXS_ROOT}/CommonLib/yaml-cpp ${CMAKE_BINARY_DIR}/yaml-cpp EXCLUDE_FROM_ALL) +endif() + +find_package(Threads REQUIRED) + +# ------------------------------------------------------------------ +# Common library (shared helpers used by the Carla bridge) +# ------------------------------------------------------------------ +set(COMMONLIB_DIR "${FIXS_ROOT}/CommonLib" CACHE PATH "FIXS CommonLib directory") +set(COMMONLIB_SOURCES + ${COMMONLIB_DIR}/ConfigHelper.cpp + ${COMMONLIB_DIR}/MsgHelper.cpp + ${COMMONLIB_DIR}/SocketHelper.cpp +) + +add_library(commonlib STATIC ${COMMONLIB_SOURCES}) +target_include_directories(commonlib PUBLIC ${COMMONLIB_DIR}) +target_link_libraries(commonlib PUBLIC yaml-cpp) +target_compile_definitions(commonlib PUBLIC RS_SKIP_CARMAKER) + +# ------------------------------------------------------------------ +# VirCarlaEnv executable +# ------------------------------------------------------------------ +set(VIRCARLAENV_DIR "${CMAKE_SOURCE_DIR}") +set(VIRCARLAENV_SOURCES + ${VIRCARLAENV_DIR}/mainVirCarla.cpp + ${VIRCARLAENV_DIR}/BridgeHelper.cpp + ${VIRCARLAENV_DIR}/DebugHelper.cpp +) + +add_executable(VirCarlaEnv ${VIRCARLAENV_SOURCES}) +target_include_directories(VirCarlaEnv PRIVATE + ${VIRCARLAENV_DIR} + ${COMMONLIB_DIR} + ${CARLA_INCLUDE_DIR} + ${CARLA_INCLUDE_DIR}/system +) + +target_link_directories(VirCarlaEnv PRIVATE ${CARLA_LIB_DIR}) +target_link_libraries(VirCarlaEnv PRIVATE + commonlib + ${CARLA_CLIENT_LIBRARY} + ${RPC_LIB} + ${DETOUR_LIB} + ${DETOUR_CROWD_LIB} + ${DETOUR_TILE_LIB} + ${RECAST_LIB} + Threads::Threads +) + +if(BOOST_FILESYSTEM_LIB) + target_link_libraries(VirCarlaEnv PRIVATE ${BOOST_FILESYSTEM_LIB}) +else() + message(WARNING "boost_filesystem not found alongside CARLA libs; add it to CARLA_LIB_DIR or system paths.") +endif() + +if(BOOST_SYSTEM_LIB) + target_link_libraries(VirCarlaEnv PRIVATE ${BOOST_SYSTEM_LIB}) +else() + message(WARNING "boost_system not found alongside CARLA libs; add it to CARLA_LIB_DIR or system paths.") +endif() + +if(UNIX AND NOT APPLE) + target_link_libraries(VirCarlaEnv PRIVATE dl) +endif() + +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) + +# Ensure the executable can find CARLA shared libs at runtime +# - prefer a relative rpath so it works from the build tree without env tweaks +set(CMAKE_SKIP_BUILD_RPATH FALSE) +set(CMAKE_BUILD_RPATH_USE_ORIGIN TRUE) +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) +file(RELATIVE_PATH CARLA_LIB_RPATH_FROM_BIN + "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" + "${CARLA_LIB_DIR}" +) +set(CARLA_RPATH_ENTRIES + "${CARLA_LIB_DIR}" + "\$ORIGIN/${CARLA_LIB_RPATH_FROM_BIN}" +) +set_target_properties(VirCarlaEnv PROPERTIES + BUILD_RPATH "${CARLA_RPATH_ENTRIES}" + INSTALL_RPATH "${CARLA_RPATH_ENTRIES}" +) diff --git a/VirCarlaEnv/VirCarlaEnv/DebugHelper.cpp b/VirCarlaEnv/VirCarlaEnv/DebugHelper.cpp new file mode 100644 index 00000000..ae7291be --- /dev/null +++ b/VirCarlaEnv/VirCarlaEnv/DebugHelper.cpp @@ -0,0 +1,44 @@ +#include "DebugHelper.h" + + +void drawCircle(carla::client::DebugHelper debug, + const carla::geom::Location& center, + float radius, + int segments, + float z_offset, + float thickness, + float life_time, // 0 = forever + bool persistent, + bool fill) { + + using carla::geom::Location; + using carla::rpc::Color; + carla::geom::Location adjusted_center(center.x, center.y, 0.0f); + adjusted_center = adjusted_center + carla::geom::Location{ 0.0f, 0.0f, z_offset }; + + // Adjust center Z level + + for (int i = 0; i < segments; ++i) { + float angle1 = (2 * M_PI * i) / segments; + float angle2 = (2 * M_PI * (i + 1)) / segments; + + Location p1 = adjusted_center + Location{ + radius * std::cos(angle1), + radius * std::sin(angle1), + 0.0f + }; + Location p2 = adjusted_center + Location{ + radius * std::cos(angle2), + radius * std::sin(angle2), + 0.0f + }; + + // Perimeter circle + debug.DrawLine(p1, p2, thickness, carla::client::DebugHelper::Color(255, 0, 0), life_time, persistent); + + if (fill) { + // Fill with "triangle fans" (radial lines) + debug.DrawLine(adjusted_center, p1, thickness * 0.5f, carla::client::DebugHelper::Color(255, 100, 100), life_time, persistent); + } + } +} \ No newline at end of file diff --git a/VirCarlaEnv/VirCarlaEnv/DebugHelper.h b/VirCarlaEnv/VirCarlaEnv/DebugHelper.h new file mode 100644 index 00000000..f4d35b7a --- /dev/null +++ b/VirCarlaEnv/VirCarlaEnv/DebugHelper.h @@ -0,0 +1,14 @@ +#pragma once +#include +#include + +#define M_PI 3.14159265358979323846 +void drawCircle(carla::client::DebugHelper debug, + const carla::geom::Location& center, + float radius = 50.0f, + int segments = 64, + float z_offset = 0.5f, + float thickness = 0.1f, + float life_time = 0.1f, // 0 = forever + bool persistent = false, + bool fill = false); \ No newline at end of file diff --git a/VirCarlaEnv/VirCarlaEnv/RandomUtils.h b/VirCarlaEnv/VirCarlaEnv/RandomUtils.h new file mode 100644 index 00000000..7ee2455f --- /dev/null +++ b/VirCarlaEnv/VirCarlaEnv/RandomUtils.h @@ -0,0 +1,19 @@ +#pragma once + +#include +#include + +template +T random_select_from_set(const std::unordered_set& set) { + if (set.empty()) throw std::runtime_error("Set is empty!"); + + // Random number generation + static std::random_device rd; + static std::mt19937 gen(rd()); + std::uniform_int_distribution<> dis(0, set.size() - 1); + + int index = dis(gen); + auto it = set.begin(); + std::advance(it, index); // move iterator forward by index + return *it; +} \ No newline at end of file diff --git a/VirCarlaEnv/VirCarlaEnv/defaultConfig.yaml b/VirCarlaEnv/VirCarlaEnv/defaultConfig.yaml new file mode 100644 index 00000000..3edaa2ba --- /dev/null +++ b/VirCarlaEnv/VirCarlaEnv/defaultConfig.yaml @@ -0,0 +1,81 @@ +#pragma once +# Global Simulation setup +SimulationSetup: + # Master Switch to turn on/off RealSim interface + # if turned off, VISSIM will just run without RealSim + # SUMO needs to run without traci + EnableRealSim: true + + # Whether or not to save verbose log during the simulation. skip log can potentially speed up + EnableVerboseLog: false + + # Simulation end time + # if NOT specificed, SimulationEndTime will be set to a large value (90000 seconds) + #-------------------------------------------------- + SimulationEndTime: 250 + + # specify which traffic simulator + #-------------------------------------------------- + SelectedTrafficSimulator: "SUMO" + + # default will send all + VehicleMessageField: [id, type, vehicleClass, speed, acceleration, positionX, positionY, positionZ, heading, + color, linkId, laneId, distanceTravel, speedDesired, grade, length, width, height] + + # by default it is false + EnableExternalDynamics: true # use this so that simulink will control the response + + TrafficSimulatorIP: "127.0.0.1" + TrafficSimulatorPort: 1337 +SumoSetup: + # set the speed mode, in integer. default value is 0 + # check Sumo documentation https://sumo.dlr.de/docs/TraCI/Change_Vehicle_State.html#speed_mode_0xb3 + + SpeedMode: 32 # 31: default mode. 32: all checks off + +# ip and port are server ip and port + +# setup Application Layer +ApplicationSetup: + # turn on/off application layer + EnableApplicationLayer: true + + #-------------------------------------------------- + VehicleSubscription: + # Application from where to accept the vehicle data + # 1. Receive data from FIXS LAYER + # 2. Send data to XIL LAYER / Back to FIXS LAYER + - type: "ego" + attribute: {id: ["ego"], radius: [100]} + ip: ["127.0.0.1"] + port: + - 430 +XilSetup: + # enable/disable XIL + EnableXil: false + +CarlaSetup: + EnableVerboseLog: false + # whether or not enable Carla (default: false) + EnableCosimulation: true + + # if true, ego state is sent from Simulink. + # if false, ego state is sent from User.cpp + EnableEgoSimulink: false + + # Carla Server Ip and Port settings + CarlaServerIP: 127.0.0.1 + + CarlaServerPort: 422 + # Carla Client Ip and Port settings + CarlaClientIP: 127.0.0.1 + + CarlaClientPort: 430 + + CarlaMapName: "Town01" + + # default Traffic Objects updates every 0.1 seconds + TrafficRefreshRate: 0.1 + + # ego ids should be a subset of the vehicleSubscription ids + InterestedIds: ["ego"] \ No newline at end of file diff --git a/VirCarlaEnv/VirCarlaEnv/mainVirCarla.cpp b/VirCarlaEnv/VirCarlaEnv/mainVirCarla.cpp new file mode 100644 index 00000000..7a32aeb7 --- /dev/null +++ b/VirCarlaEnv/VirCarlaEnv/mainVirCarla.cpp @@ -0,0 +1,709 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "BridgeHelper.h" +#include "MsgHelper.h" +#include "SocketHelper.h" +#include "ConfigHelper.h" +#include "DebugHelper.h" + +//preset delay durations +carla::time_duration timeout_10s = std::chrono::seconds(10); +carla::time_duration timeout_1s = std::chrono::seconds(1); +carla::time_duration timeout_50ms = std::chrono::milliseconds(50); +carla::time_duration timeout_100ms = std::chrono::duration(0.1); // 0.1 second + +using namespace std::chrono_literals; +using namespace std::string_literals; + +#define EXPECT_TRUE(pred) if (!(pred)) { throw std::runtime_error(#pred); } +#define SET_CONTAINS_ID(set, value) ((set).find(value) != (set).end()) +#define MAP_CONTAINS_KEY(map, key) ((map).find(key) != (map).end()) +#define SPAWN_OFFSET_Z 0.1f // Offset for spawning actors above the ground + +static void show_usage(std::string name) +{ + std::cerr << "Usage: " << name << std::endl + << "Options:\n" + << "\t-h,--help\t\tShow this help message\n" + << "\t-f,--file PATH\\FILENAME\tSpecify the path and filename of configuration yaml file" + << std::endl; +} + +double periodicCosineSpeed(double t, double T_period, double v_max) { + if (T_period <= 0.0) return 0.0; + + // Time within the current period + double t_in_period = std::fmod(t, T_period); + + // Compute speed using cosine profile within the period + return 0.5 * v_max * (1 - std::cos(2 * M_PI * t_in_period / T_period)); +} + +float lowPassFilter(float currentValue, float lastValue, float alpha) { + return alpha * currentValue + (1 - alpha) * lastValue; +} + +int main(int argc, const char* argv[]) { + std::string CarlaClientLogFile = "CarlaClient.log"; + + time_t simStartTimestamp = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()); + char simStartTimestampChar[100]; +#if defined(_WIN32) + ctime_s(simStartTimestampChar, sizeof simStartTimestampChar, &simStartTimestamp); +#else + std::tm tm_buf{}; + localtime_r(&simStartTimestamp, &tm_buf); + std::strftime(simStartTimestampChar, sizeof simStartTimestampChar, "%c\n", &tm_buf); +#endif + std::fstream f(CarlaClientLogFile, std::fstream::in | std::fstream::out | std::fstream::app); + f << std::endl << "=============================================" << std::endl; + f << "Carla Client Starts at " << simStartTimestampChar << std::endl; + f.close(); + MsgHelper msgHelper; + ConfigHelper configHelper; + SocketHelper socketHelper; + std::string configPath = ""; + std::string trafficLightMapPath = ""; + // =========================================================================== + // Parse Arguments + // =========================================================================== + for (int i = 1; i < argc; i++) { + std::string arg = argv[i]; + if (arg == "-h" || arg == "--help") { + show_usage(argv[0]); + return 0; + } + else if (arg == "-f" || arg == "--file") { + if (i + 1 < argc) { + configPath = argv[++i]; + } + else { + std::cerr << "--path option requires one argument." << std::endl; + return -1; + } + } + else if (arg == "-t" || arg == "--tls") { + if (i + 1 < argc) { + trafficLightMapPath = argv[++i]; + } + else { + std::cerr << "--path option requires one argument." << std::endl; + return -1; + } + } + else { + printf("Check options\n"); + show_usage(argv[0]); + return 0; + } + } + // =========================================================================== + // READ Config File + // =========================================================================== + printf("Reading Configuration file %s\n", configPath.c_str()); + if (configHelper.getConfig(configPath) < 0) { + printf("Please check path and filename of the configuration yaml\n"); + show_usage(argv[0]); + exit(-1); + } + else { + printf("Read configuration file success\n"); + } + // Set the simulation end time + uint32_t simEndTime = configHelper.SimulationSetup.SimulationEndTime; + bool enableVerboseLog = configHelper.CarlaSetup.EnableVerboseLog; + CarlaSetup_t carlaSetup = configHelper.CarlaSetup; + + std::string carlaServerIp = carlaSetup.CarlaServerIP; + int carlaServerPort = carlaSetup.CarlaServerPort; + std::string carlaClientIp = carlaSetup.CarlaClientIP; + int carlaClientPort = carlaSetup.CarlaClientPort; + //std::string carlaMapName = carlaSetup.CarlaMapName; + double trafficRefreshRate = carlaSetup.TrafficRefreshRate; + const std::chrono::milliseconds step_duration_ms(static_cast(trafficRefreshRate * 1000)); + // If the vehicle type is used as the blueprint ID, set this to true + bool useVhicleTypeAsBlueprint = carlaSetup.UseVehicleTypeAsBlueprint; + // Enable external control for interested vehicles, if turned off, the interested vehicles will be controlled by the Sumo + bool enableExternalControl = carlaSetup.EnableExternalControl; + // centeredViewId is the id of the camera that is used to render the view in Carla + std::string centeredViewId = configHelper.CarlaSetup.CenteredViewId; + // Enable traffic light synchronization + /*bool enableTlsSync = configHelper.CarlaSetup.EnableTrafficLightSync;*/ + bool enableTlsSync = true; + std::unordered_set setInterestedIds; + for (const std::string& id : carlaSetup.InterestedIds) { + setInterestedIds.insert(id); + } + // This is important for the reveived data parser to work correctly + msgHelper.getConfig(configHelper); + // Setup Connection to the Traffic Server + //void SocketHelper::socketSetup(vector SERVERADDR_UserInput, vector SERVERPORT_UserInput) { + std::vector SERVERADDR_UserInput = { carlaClientIp }; + std::vector SERVERPORT_UserInput = { carlaClientPort }; + socketHelper.disableWaitClientTrigger(); + socketHelper.disableServerTrigger(); + socketHelper.socketSetup(SERVERADDR_UserInput, SERVERPORT_UserInput); + // =========================================================================== + // READ Traffic Light Table + // =========================================================================== + std::unordered_map> trafficLightMap = BridgeHelper::readTrafficLightTable(trafficLightMapPath); + + if (trafficLightMap.empty()) { + std::cerr << "No traffic light data found in the file: " << trafficLightMapPath << std::endl; + return -1; + } + + if (socketHelper.initConnection(CarlaClientLogFile) < 0) { + printf("Connect to Traffic Layer failed!\n"); + exit(-1); + } + // there is only one traffic layer server + int sockId = 0; + try { + carla::client::Client carlaClient = carla::client::Client(carlaServerIp, carlaServerPort); + // initialize carla client and world + std::cout << "Client API version : " << carlaClient.GetClientVersion() << '\n'; + std::cout << "Server API version : " << carlaClient.GetServerVersion() << '\n'; + carlaClient.SetTimeout(timeout_10s); + carla::client::World carlaWorld = carlaClient.GetWorld(); + carla::SharedPtr carlaSpectator = carlaWorld.GetSpectator(); + + // Enable synchronous mode + carla::rpc::EpisodeSettings carlaWorldSettings = carlaWorld.GetSettings(); + if (!carlaWorldSettings.synchronous_mode) { + carlaWorldSettings.synchronous_mode = true; // Turn on synchronous mode + carlaWorldSettings.fixed_delta_seconds = trafficRefreshRate; // time step of 0.1 seconds + //the time_out is of carla::time_duration + carlaWorld.ApplySettings(carlaWorldSettings, timeout_1s); + if (enableVerboseLog) std::cout << "Synchronous mode enabled.\n"; + } + carla::SharedPtr blueprint_library = carlaWorld.GetBlueprintLibrary(); + + // Map the Sumo Ids to Carla Ids + std::unordered_map mapSumoToCarla; + // Map the Carla Ids to Sumo Ids + std::unordered_map mapCarlaToSumo; + + float simTime = 0; // Initialize the current simulation time + std::unordered_map mapSumoActor; + // command batch to set the transform of the actors (non-interested actors) + std::vector transformCommandBatch; + + if (enableTlsSync) { + carla::SharedPtr carlaTrafficLightActors = carlaWorld.GetActors()->Filter("traffic.traffic_light"); + + for (const carla::SharedPtr& carlaActor : *carlaTrafficLightActors) { + carla::SharedPtr carlaTrafficLightActorPtr = boost::static_pointer_cast(carlaActor); + carlaTrafficLightActorPtr->Freeze(true); + std::string carlaTrafficLightActorId = std::to_string(carlaActor->GetId()); + // Convert Carla location to SUMO coordinate + carla::geom::Location carlaLocation = carlaActor->GetLocation(); + carla::geom::Location sumoLocation = BridgeHelper::map_location_Carla_to_Sumo(carlaLocation); + + // Find closest TLS from map + std::pair trafficLightId = BridgeHelper::find_closest_trafficLight_id( + trafficLightMap, + sumoLocation.x, + sumoLocation.y + ); + std::string junctionId = trafficLightId.first; + int linkId = trafficLightId.second; + + if (junctionId == "") { + std::cerr << "No matching traffic light found for actor " << carlaTrafficLightActorId << "\n"; + continue; + } + + // Assign traffic light attributes + TrafficLight& trafficLight = trafficLightMap[junctionId][linkId]; + trafficLight.carlaTrafficLightActorId = carlaTrafficLightActorId; // Store the Carla actor ID in the traffic light data + trafficLight.carlaTrafficLightActorPtr = carlaTrafficLightActorPtr; // Store the Carla actor pointer in the traffic light data + } + } + + while (simTime < simEndTime) { + std::chrono::steady_clock::time_point loop_start_time = std::chrono::steady_clock::now(); + ///*********************** + // RUN one-step simulation + ///*********************** + + + // ========================================== + // Receive data from the traffic layer server + // ========================================== + int simStateRecv; + float simTimeRecv; + msgHelper.clearRecvStorage(); + for (unsigned int iServer = 0; iServer < socketHelper.serverSock.size(); iServer++) { + + int simStateRecv; + float simTimeRecv; + + if (enableVerboseLog) { + printf("receiving server at port %d\n", socketHelper.SERVERPORT[iServer]); + + FILE* f = fopen(CarlaClientLogFile.c_str(), "a"); + fprintf(f, "recv server: %d\n", socketHelper.SERVERPORT[iServer]); + fclose(f); + } + + // save received message into Msg_c recv storages + if (socketHelper.recvData(socketHelper.serverSock[iServer], &simStateRecv, &simTimeRecv, msgHelper) < 0) { +#if defined(_WIN32) + if (WSAGetLastError() != WSAEINTR && WSAGetLastError() != WSAEFAULT) { + printf("ERROR: receive from server fails\n"); + } +#else + if (errno != EINTR && errno != EFAULT) { + printf("ERROR: receive from server fails\n"); + } +#endif + socketHelper.socketShutdown(); + exit(-1); + }; + } + + std::unordered_set setCurrentSumoIds; + for (const std::pair& pair : msgHelper.VehDataRecv_um) { + const VehFullData_t& tmpVehData = pair.second; + carla::geom::Location tmpLocation(tmpVehData.positionX, tmpVehData.positionY, tmpVehData.positionZ); + // The grade received from FIXS is in radians, convert to degrees + //carla::geom::Rotation tmpRotation(tmpVehData.grade * 180/M_PI, tmpVehData.heading, 0.0f); + carla::geom::Rotation tmpRotation(0.0f, std::round(tmpVehData.heading / 5.0f) * 5.0f, 0.0f); + //carla::geom::Vector3D tmpExtent(tmpVehData.length / 2, tmpVehData.width / 2, tmpVehData.height / 2); + carla::geom::Vector3D tmpExtent(4.8f, 2.0f, 1.8f); // Default extent, can be modified later + carla::geom::Transform tmpTransform(tmpLocation, tmpRotation); + + if (!MAP_CONTAINS_KEY(mapSumoActor, tmpVehData.id)) { + mapSumoActor[tmpVehData.id] = SumoActor(tmpVehData.id, tmpVehData.type, tmpVehData.vehicleClass, tmpTransform, tmpExtent); + std::cout << "Vehicle Class: " << tmpVehData.vehicleClass << std::endl; + } + else { + //// Update the existing actor's transform and extent + //carla::geom::Location prvLocation = mapSumoActor[tmpVehData.id].sumoTransform.location; + //carla::geom::Rotation prvRotation = mapSumoActor[tmpVehData.id].sumoTransform.rotation; + //carla::geom::Transform updatedTransform( + // carla::geom::Location( + // lowPassFilter(tmpTransform.location.x, prvLocation.x, 0.5f), + // lowPassFilter(tmpTransform.location.y, prvLocation.y, 0.5f), + // lowPassFilter(tmpTransform.location.z, prvLocation.z, 0.5f) + // ), carla::geom::Rotation( + // lowPassFilter(tmpTransform.rotation.pitch, prvRotation.pitch, 0.5f), + // lowPassFilter(tmpTransform.rotation.yaw, prvRotation.yaw, 0.5f), + // lowPassFilter(tmpTransform.rotation.roll, prvRotation.roll, 0.5f) + // ) + //); + mapSumoActor[tmpVehData.id].sumoTransform = tmpTransform; + mapSumoActor[tmpVehData.id].extent = tmpExtent; + } + setCurrentSumoIds.insert(tmpVehData.id); + } + if (enableTlsSync) { + for (const std::pair& pair : msgHelper.TlsDataRecv_um) { + const std::string& junctionID = pair.first; + const TrafficLightData_t& tmpTrafficLightData = pair.second; + const std::string& tafficLightStateStr = tmpTrafficLightData.state; + if (enableVerboseLog) { + std::cout << "Received Traffic Light Data for junction: " << junctionID << std::endl; + std::cout << "ID: " << tmpTrafficLightData.id << std::endl; + std::cout << "Name: " << tmpTrafficLightData.name << std::endl; + std::cout << "State: " << tmpTrafficLightData.state << std::endl; + } + // traverse each char in the state str + for (size_t linkId = 0; linkId < tafficLightStateStr.size(); ++linkId) { + char stateChar = tafficLightStateStr[linkId]; + SumoTrafficLightState sumoTrafficLightState = BridgeHelper::get_Sumo_traffic_light_state_from_char(stateChar); + carla::rpc::TrafficLightState carlaTrafficLightState = BridgeHelper::map_Sumo_traffic_light_state_to_Carla(sumoTrafficLightState); + // set the traffic light state in Carla, if the traffic light exists in the map + TrafficLight& trafficLight = trafficLightMap[junctionID][linkId]; + + if (trafficLight.carlaTrafficLightActorPtr) { + trafficLight.carlaTrafficLightActorPtr->SetState(carlaTrafficLightState); + } + else { + if (enableVerboseLog) std::cerr << "Carla actor for traffic light " << tmpTrafficLightData.id << "Junction Id:" << junctionID << "Link Id: " << linkId << " not found." << std::endl; + } + } + } + } + + // Check if the mapSumoActor contains vehicles that are not in the current step (vehicles have left the simulation) + // If so, remove them from the mapSumoActor and mapCarlaActor + for (std::unordered_map::iterator it = mapSumoActor.begin(); it != mapSumoActor.end(); ) { + std::string sumoActorId = it->first; + SumoActor& sumoActor = it->second; + if (!SET_CONTAINS_ID(setCurrentSumoIds, sumoActorId)) { + if(enableVerboseLog) std::cout << "Removing Sumo actor with ID: " << sumoActorId << std::endl; + // Remove associated Carla actor + std::string carlaActorId = mapSumoToCarla[sumoActorId]; + carla::SharedPtr carlaVehicleActorPtr = sumoActor.carlaVehicleActorPtr; + if (carlaVehicleActorPtr) { + carlaVehicleActorPtr->Destroy(); + if (enableVerboseLog) std::cout << "Destroyed Carla actor with ID: " << carlaActorId << std::endl; + } + mapSumoToCarla.erase(sumoActorId); + mapCarlaToSumo.erase(carlaActorId); + // Safely erase from mapSumoActor and advance the iterator + sumoActor.carlaVehicleActorPtr = nullptr; // Clear the pointer to avoid dangling references + it = mapSumoActor.erase(it); + } + else { + ++it; + } + } + + // Get the Carla Actor Role Name Mapping + carla::SharedPtr carlaActors = carlaWorld.GetActors()->Filter("vehicle.*"); + std::unordered_map mapActorIdToRoleName; + std::unordered_map mapRoleNameToActorId; + for (const carla::SharedPtr& carlaActor : *carlaActors) { + const std::vector carlaAttributes = carlaActor->GetAttributes(); // Ensure the attributes are loaded + for (const carla::client::ActorAttributeValue& attr : carlaAttributes) { + //std::cout << "Attribute ID: " << attr.GetId() << ", value: " << attr.GetValue() << std::endl; + if (attr.GetId() == "role_name") { + std::string carlaRoleName = attr.GetValue(); + std::string carlaActorId = std::to_string(carlaActor->GetId()); + mapActorIdToRoleName[carlaActorId] = carlaRoleName; + mapRoleNameToActorId[carlaRoleName] = carlaActorId; + break; // No need to check further attributes for this actor + } + + } + } + + for (std::pair& pair : mapSumoActor) { + const std::string& sumoActorId = pair.first; + SumoActor& sumoActor = pair.second; + + + carla::geom::Transform carlaTransform = BridgeHelper::map_transfrom_Sumo_to_Carla(sumoActor.sumoTransform, sumoActor.extent); + + //carla::SharedPtr carlaWaypoint = carlaMap->GetWaypoint(carlaTransform.location); + //carla::geom::Transform waypointTransform = carlaWaypoint->GetTransform(); + // ======================================================= + // [Optianal] Get the waypoint of the carla transform + // This is to ensure that the carla transform is on the road + // ======================================================= + //carlaTransform.location = waypointTransform.location; + //Use the waypoint's rotation to ensure the vehicle is aligned with the road + //carlaTransform.rotation = waypointTransform.rotation; + //print the sumo and carla transform + + + // ======================================================= + // Spawn the Sumo actors that are not in the current step + // ======================================================= + if (!MAP_CONTAINS_KEY(mapSumoToCarla , sumoActorId) || !sumoActor.spawnedInCarla || sumoActor.carlaVehicleActorPtr ==nullptr) { + // Add a small offset to the z coordinate to avoid collision with the ground + carlaTransform.location.z = carlaTransform.location.z + SPAWN_OFFSET_Z; + + + std::string carlaActorTypeId; + if (useVhicleTypeAsBlueprint) { + carlaActorTypeId = sumoActor.vType; + } + else { + carlaActorTypeId = BridgeHelper::map_Sumo_vClass_to_Carla_blueprintId(sumoActor.vClass); + } + + const carla::client::ActorBlueprint* vehicle_blueprint = blueprint_library->Find(carlaActorTypeId); + // C++ API does not allow modifying a blueprint after retrieval. + // To work around this in C++, we need to make a copy of the ActorBlueprint, + // then modify the attributes on the copy � not the original const pointer returned by Find. + carla::client::ActorBlueprint vehicle_blueprint_local = *vehicle_blueprint; + vehicle_blueprint_local.SetAttribute("role_name", sumoActorId); // Set the role name to the Sumo actor ID + + if (!vehicle_blueprint) { + std::cerr << "Blueprint not found: " << carlaActorTypeId << std::endl; + return 1; + } + + carla::SharedPtr carlaVehicleActorPtr; + // If the Intertested vehicle has been spawned in the Carla + // Note: For the interested vehicles spawned by the extrernal control script, its role_name should be set to the sumo id name + // And their blueprint should be the same as its vehicle type + if (SET_CONTAINS_ID(setInterestedIds, sumoActorId) && MAP_CONTAINS_KEY(mapRoleNameToActorId, sumoActorId) && useVhicleTypeAsBlueprint) { + carlaVehicleActorPtr = boost::static_pointer_cast(carlaWorld.GetActor(std::stoul(mapRoleNameToActorId[sumoActorId]))); + carlaVehicleActorPtr->SetTransform(carlaTransform); // Update the transform of the existing actor to the sumo position + if (enableVerboseLog) std::cout << "Found Intertested Vehicle with Carla Type ID: " << carlaActorTypeId << " SUMO ID:" << sumoActorId << std::endl; + } + else { + if (enableVerboseLog) std::cout << "Spawning actor with Carla Type ID: " << carlaActorTypeId << " SUMO ID:" << sumoActorId << std::endl; + + carlaVehicleActorPtr = boost::static_pointer_cast(carlaWorld.TrySpawnActor(vehicle_blueprint_local, carlaTransform)); + + if (carlaVehicleActorPtr != nullptr) { + + carlaVehicleActorPtr->SetSimulatePhysics(false); + sumoActor.spawnedInCarla = true; // Mark the Sumo actor as spawned in Carla + sumoActor.carlaVehicleActorPtr = carlaVehicleActorPtr; // Store the Carla actor in the SumoActor + + if (enableVerboseLog) std::cout << "Spawned actor with Carla ID: " << carlaVehicleActorPtr->GetId() << " SUMO ID:" << sumoActorId << std::endl; + if (enableVerboseLog && sumoActorId == "ego") { + std::cout << "Sumo Transform:" << std::endl; + std::cout << " Location -> x: " << sumoActor.sumoTransform.location.x + << ", y: " << sumoActor.sumoTransform.location.y + << ", z: " << sumoActor.sumoTransform.location.z << std::endl; + + std::cout << " Rotation -> pitch: " << sumoActor.sumoTransform.rotation.pitch + << ", yaw: " << sumoActor.sumoTransform.rotation.yaw + << ", roll: " << sumoActor.sumoTransform.rotation.roll << std::endl; + + std::cout << "Carla Transform:" << std::endl; + std::cout << " Location -> x: " << carlaTransform.location.x + << ", y: " << carlaTransform.location.y + << ", z: " << carlaTransform.location.z << std::endl; + + std::cout << " Rotation -> pitch: " << carlaTransform.rotation.pitch + << ", yaw: " << carlaTransform.rotation.yaw + << ", roll: " << carlaTransform.rotation.roll << std::endl; + } + // convert the carla actor id (uint_32 to string) + std::string carlaActorId = std::to_string(carlaVehicleActorPtr->GetId()); + mapCarlaToSumo[carlaActorId] = sumoActorId; + mapSumoToCarla[sumoActorId] = carlaActorId; + sumoActor.carlaTransform = carlaTransform; // Store the Carla transform in the SumoActor + } + else { + std::cout << "[Warning] Failed to spawn actor with SUMO ID:" << sumoActorId << std::endl; + } + + } + + } + else { + // ============================================================================================================== + // Update the existing carla actor's transform (except for the Interested Ids, which are controlled by the user) + // ============================================================================================================== + + // string to uint32_t conversion + carla::rpc::ActorId carlaActorId = static_cast(std::stoul(mapSumoToCarla[sumoActorId])); + + if (sumoActor.spawnedInCarla && sumoActor.carlaVehicleActorPtr !=nullptr) { + if (SET_CONTAINS_ID(setInterestedIds, sumoActorId) && enableExternalControl) { + if (enableVerboseLog) { + carla::SharedPtr carlaActor = mapSumoActor[mapSumoToCarla[sumoActorId]].carlaVehicleActorPtr; + carla::geom::Transform carlaTransform = carlaActor->GetTransform(); + std::cout << "Carla Transform:" << std::endl; + std::cout << " Location -> x: " << carlaTransform.location.x + << ", y: " << carlaTransform.location.y + << ", z: " << carlaTransform.location.z << std::endl; + } + } + else { + // If not interested or the lateral control is not enabled, update its position according to the sumo actor + // convert the id back to uint32_t + //carla::SharedPtr carlaActor = carlaWorld.GetActor(std::stoul(carlaActorId)); + carla::SharedPtr& carlaActor = sumoActor.carlaVehicleActorPtr; + const std::vector carlaAttributes = carlaActor->GetAttributes(); // Ensure the attributes are loaded + if (enableVerboseLog) { + for (const carla::client::ActorAttributeValue& attr : carlaAttributes) { + + //std::cout << "Attribute ID: " << attr.GetId() << ", value: " << attr.GetValue() << std::endl; + + if (attr.GetId() == "role_name") { + std::string role_name = attr.GetValue(); + + std::cout << "This vehicle's role_name is: " << role_name << std::endl; + } + } + } + // update the actor's transform + carla::rpc::Command::ApplyTransform applyTransformCommand(carlaActorId, carlaTransform); + transformCommandBatch.push_back(applyTransformCommand); + if (enableVerboseLog) std::cout << "Updating actor with ID: " << carlaActorId << " SUMO ID:" << sumoActorId << std::endl; + if (enableVerboseLog && sumoActorId == "ego") { + std::cout << "Sumo Transform:" << std::endl; + std::cout << " Location -> x: " << sumoActor.sumoTransform.location.x + << ", y: " << sumoActor.sumoTransform.location.y + << ", z: " << sumoActor.sumoTransform.location.z << std::endl; + + std::cout << " Rotation -> pitch: " << sumoActor.sumoTransform.rotation.pitch + << ", yaw: " << sumoActor.sumoTransform.rotation.yaw + << ", roll: " << sumoActor.sumoTransform.rotation.roll << std::endl; + + std::cout << "Carla Transform:" << std::endl; + std::cout << " Location -> x: " << carlaTransform.location.x + << ", y: " << carlaTransform.location.y + << ", z: " << carlaTransform.location.z << std::endl; + + std::cout << " Rotation -> pitch: " << carlaTransform.rotation.pitch + << ", yaw: " << carlaTransform.rotation.yaw + << ", roll: " << carlaTransform.rotation.roll << std::endl; + } + sumoActor.carlaTransform = carlaTransform; // Update the Carla transform in the SumoActor + + } + } else { + std::cerr << "Carla actor not found in the Actor Map for ID: " << carlaActorId << std::endl; + } + } + } + // false means that the command is not applied immediately, but in the next tick + // true means that the command is applied immediately (i.e., advance the world one frame) + carlaClient.ApplyBatch(transformCommandBatch, false); + // After updating the non-interested actors, we can now handle the interested actors. + // We use another script (another Carla client) to control the interested actors; + // these are the ego vehicles in this case. We want to get the updated positions of the interested actors + // by sending back the updated positions to the Sumo server. + // Note: In the control script, the control commands should be applied before the world.wait_for_tick() function. + carlaWorld.Tick(timeout_1s); + + // Clear the command batch for the next iteration + transformCommandBatch.clear(); + + //The posions (transform) of the interested actors should be updated by the control script, so we just retrive the current transform + //of the interested actors + for (const auto& sumoId : setInterestedIds) { + SumoActor& sumoActor = mapSumoActor[sumoId]; + if (sumoActor.spawnedInCarla && sumoActor.carlaVehicleActorPtr != nullptr) { + carla::SharedPtr& carlaActor = sumoActor.carlaVehicleActorPtr; + carla::geom::Transform carlaTransform = carlaActor->GetTransform(); + carla::geom::Vector3D carlaExtent = carlaActor->GetBoundingBox().extent; + carla::geom::Vector3D carlaVelocity = carlaActor->GetVelocity(); // This will update the velocity of the actor + carla::geom::Transform sumoTransform = BridgeHelper::map_transfrom_Carla_to_Sumo(carlaTransform, carlaExtent); + double carlaSpeed = std::sqrt(carlaVelocity.x * carlaVelocity.x + carlaVelocity.y * carlaVelocity.y); + + // Update the Sumo actor's transform + + mapSumoActor[sumoId].sumoTransform = sumoTransform; + carla::geom::Location sumoLocation = sumoTransform.location; + carla::geom::Rotation sumoRotation = sumoTransform.rotation; + VehFullData_t tmpVehData; + tmpVehData.id = sumoId; + tmpVehData.type = mapSumoActor[sumoId].vClass; + double simulatedSpeed = periodicCosineSpeed(simTime, 8.0f, 20.0f); + double speedDesired = carlaSpeed; + // if (enableExternalControl) { + // // If the vehicle is controlled by the external script, use the speed from the script + // speedDesired = carlaSpeed; // Use the speed from the Carla actor + // } + // else { + //speedDesired = simulatedSpeed; // Use the simulated speed, this can be further changed with desired speed like from the Eco-Pilot + // } + if (enableVerboseLog) std::cout << "Speed of the Sumo actor with ID: " << sumoId << " is: " << speedDesired << std::endl; + if (enableExternalControl) { + tmpVehData.speedDesired = speedDesired; + tmpVehData.positionX = sumoLocation.x; + tmpVehData.positionY = sumoLocation.y; + tmpVehData.positionZ = sumoLocation.z; + tmpVehData.heading = sumoRotation.yaw; + tmpVehData.grade = sumoRotation.pitch * M_PI / 180.0; // Convert to radians + + //tmpVehData.length = carlaExtent.x * 2; // The extent is half the length, so multiply by 2 + //tmpVehData.width = carlaExtent.y * 2; // The extent is half the width, so multiply by 2 + //tmpVehData.height = carlaExtent.z * 2; // The extent is half the height, so multiply by 2 + msgHelper.VehDataSend_um[socketHelper.serverSock[sockId]].push_back(tmpVehData); + } + + if (sumoId == centeredViewId) { + + // Set the spectator to follow the centered view actor + // Note: The spectator is a special camera that follows the actor + if (enableVerboseLog) std::cout << "Setting spectator to follow actor with ID: " << sumoId << std::endl; + static carla::geom::Location smoothedLocation; + carla::geom::Location tmpLocation = carlaTransform.location; + tmpLocation.z += 100.0f;// Set height to 100 meters above the ground + smoothedLocation = 0.9f * smoothedLocation + 0.1f * tmpLocation; + //pitch = -90.0, yaw = 0.0, roll = 0.0 + carla::geom::Rotation tmpRotation(-90.0f, -90.0f, 0.0f); + carla::geom::Transform tmpTransform(smoothedLocation, tmpRotation); + carlaSpectator->SetTransform(tmpTransform); + //drawCircle(carlaWorld.MakeDebugHelper(), tmpLocation, 2.5f, 32, 0.5f, 0.1f, 0.2f); + } + } + } + + // ======================================================================================= + // Semd data to the traffic layer server, to update the positions of the interested actors + // ======================================================================================= + uint8_t simStateSend = 1; + + for (unsigned int iServer = 0; iServer < socketHelper.serverSock.size(); iServer++) { + + int simStateRecv; + float simTimeRecv; + + if (enableVerboseLog) { + printf("sending server at port %d\n", socketHelper.SERVERPORT[iServer]); + + FILE* f = fopen(CarlaClientLogFile.c_str(), "a"); + fprintf(f, "send server: %d\n", socketHelper.SERVERPORT[iServer]); + fclose(f); + } + + // send data to the traffic layer server + if (socketHelper.sendData(socketHelper.serverSock[iServer], iServer, simTime, simStateSend, msgHelper) < 0) { +#if defined(_WIN32) + if (WSAGetLastError() != WSAEINTR && WSAGetLastError() != WSAEFAULT) { + printf("ERROR: send to server fails\n"); + } +#else + if (errno != EINTR && errno != EFAULT) { + printf("ERROR: send to server fails\n"); + } +#endif + socketHelper.socketShutdown(); + exit(-1); + }; + } + simTime += trafficRefreshRate; + + msgHelper.clearRecvStorage(); + msgHelper.clearSendStorage(); + //const std::chrono::steady_clock::time_point loop_end_time = std::chrono::steady_clock::now(); + //std::chrono::milliseconds elapsed = std::chrono::duration_cast(loop_end_time - loop_start_time); + //std::chrono::milliseconds sleep_duration = std::chrono::milliseconds(step_duration_ms) - elapsed; + //if (sleep_duration.count() > 0) { + // std::this_thread::sleep_for(sleep_duration); + //} + } + + carlaWorldSettings = carlaWorld.GetSettings(); + if (carlaWorldSettings.synchronous_mode) { + carlaWorldSettings.synchronous_mode = false; // Turn off synchronous mode + carlaWorld.ApplySettings(carlaWorldSettings, timeout_1s); + if (enableVerboseLog) std::cout << "Synchronous mode disabled.\n"; + } + } + catch (const carla::client::TimeoutException& e) { + socketHelper.socketShutdown(); + std::cout << '\n' << e.what() << std::endl; + return 1; + } + catch (const std::exception& e) { + socketHelper.socketShutdown(); + std::cout << "\nException: " << e.what() << std::endl; + return 2; + } +} diff --git a/VirtualEnvironment/VirtualEnvironment/VirtualEnvironment.vcxproj b/VirtualEnvironment/VirtualEnvironment/VirtualEnvironment.vcxproj index dd363ccb..b4577d97 100644 --- a/VirtualEnvironment/VirtualEnvironment/VirtualEnvironment.vcxproj +++ b/VirtualEnvironment/VirtualEnvironment/VirtualEnvironment.vcxproj @@ -44,26 +44,26 @@ StaticLibrary true - v142 + v143 Unicode StaticLibrary false - v142 + v143 true Unicode StaticLibrary true - v142 + v143 Unicode StaticLibrary false - v142 + v143 true Unicode @@ -133,7 +133,8 @@ true WIN64;_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_WINSOCK_DEPRECATED_NO_WARNINGS;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) true - C:\IPG\carmaker\win64-11.0.1\include\Car;C:\IPG\carmaker\win64-11.0.1\include;..\..\CommonLib;..\..\CommonLib\yaml-cpp\include;..\..\CommonLib\yaml-cpp\build\include + C:\IPG\carmaker\win64-13.1.2\include\Car;C:\IPG\carmaker\win64-13.1.2\include;..\..\CommonLib;..\..\CommonLib\yaml-cpp\include;..\..\CommonLib\yaml-cpp\build\include + MultiThreadedDLL @@ -156,7 +157,7 @@ true WIN64;_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_WINSOCK_DEPRECATED_NO_WARNINGS;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) true - C:\IPG\carmaker\win64-11.0.1\include\Car;C:\IPG\carmaker\win64-11.0.1\include;..\..\CommonLib;..\..\CommonLib\yaml-cpp\include;..\..\CommonLib\yaml-cpp\build\include + C:\IPG\carmaker\win64-13.1.2\include\Car;C:\IPG\carmaker\win64-13.1.2\include;..\..\CommonLib;..\..\CommonLib\yaml-cpp\include;..\..\CommonLib\yaml-cpp\build\include false diff --git a/compileExternalLibraries.bat b/compileExternalLibraries.bat index 24ed0f43..55787e4b 100644 --- a/compileExternalLibraries.bat +++ b/compileExternalLibraries.bat @@ -1,7 +1,7 @@ cd .\CommonLib\libevent if not exist build md build cd build -cmake -G "Visual Studio 16 2019" -DEVENT__DISABLE_MBEDTLS=ON .. +cmake -G "Visual Studio 17 2022" -DEVENT__DISABLE_MBEDTLS=ON .. cmake --build . --config Release cmake --build . --config Debug @@ -9,7 +9,7 @@ cd ..\..\..\ cd .\CommonLib\yaml-cpp if not exist build md build cd build -cmake -G "Visual Studio 16 2019" .. +cmake -G "Visual Studio 17 2022" .. cmake --build . --config Release cmake --build . --config Debug diff --git a/copyCarlaDependencies.ps1 b/copyCarlaDependencies.ps1 new file mode 100644 index 00000000..9f43268d --- /dev/null +++ b/copyCarlaDependencies.ps1 @@ -0,0 +1,48 @@ +param( + [Parameter(Mandatory = $true, Position = 0)] + [string]$CarlaRoot +) + +$ErrorActionPreference = "Stop" + +function Show-Usage { + Write-Host "Usage: .\copy_carla_dependencies.ps1 " + Write-Host "Copies CARLA's PythonAPI dependency bundle into CommonLib\libcarla." + Write-Host " Source: \PythonAPI\carla\dependencies" + Write-Host " Dest : \CommonLib\libcarla" +} + +if ($CarlaRoot -eq "-h" -or $CarlaRoot -eq "--help") { + Show-Usage + exit 0 +} + +try { + $CarlaRoot = (Resolve-Path -LiteralPath $CarlaRoot).Path +} catch { + Write-Error "Invalid CARLA_ROOT path: $CarlaRoot" + exit 1 +} + +$src = Join-Path $CarlaRoot "PythonAPI\carla\dependencies" +$repoRoot = Split-Path -Parent $MyInvocation.MyCommand.Path +$dst = Join-Path $repoRoot "CommonLib\libcarla" + +if (-not (Test-Path -LiteralPath $src)) { + Write-Error "Dependencies directory not found at: $src" + exit 2 +} + +if (Test-Path -LiteralPath $dst) { + Write-Error "Destination already exists: $dst" + Write-Error "Remove it first if you want to replace it." + exit 3 +} + +Write-Host "Copying CARLA dependencies..." +Write-Host " from: $src" +Write-Host " to : $dst" + +Copy-Item -LiteralPath $src -Destination $dst -Recurse + +Write-Host "Done. CARLA dependencies copied to $dst" diff --git a/copyCarlaDependencies.sh b/copyCarlaDependencies.sh new file mode 100755 index 00000000..7b7798f6 --- /dev/null +++ b/copyCarlaDependencies.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash +set -euo pipefail + +usage() { + cat <<'EOF' +Usage: copy_carla_dependencies.sh /path/to/CARLA_ROOT + +Copies CARLA's PythonAPI dependency bundle into FIXS CommonLib as "libcarla". +- Source: /PythonAPI/carla/dependencies +- Dest: /CommonLib/libcarla + +If the destination already exists, the script will abort to avoid clobbering it. +EOF +} + +if [[ "${1:-}" == "-h" || "${1:-}" == "--help" || $# -ne 1 ]]; then + usage + exit 1 +fi + +CARLA_ROOT="$(cd "$1" && pwd)" +SRC="${CARLA_ROOT}/PythonAPI/carla/dependencies" +# Script lives in the repo root; use its directory as FIXS root +FIXS_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +DST="${FIXS_ROOT}/CommonLib/libcarla" + +if [[ ! -d "$SRC" ]]; then + echo "Error: dependencies directory not found at: $SRC" >&2 + exit 2 +fi + +if [[ -e "$DST" ]]; then + echo "Error: destination already exists: $DST" >&2 + echo "Remove it first if you want to replace it." >&2 + exit 3 +fi + +echo "Copying CARLA dependencies..." +echo " from: $SRC" +echo " to : $DST" +cp -a "$SRC" "$DST" + +echo "Done. CARLA dependencies copied to $DST" diff --git a/requirements.txt b/requirements.txt index ad88712c..55bd938f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,18 @@ -vissim = 11.0 -sumo = 1.13.0 -carmaker = 10.0.1 -matlab = 9.7 \ No newline at end of file +# External software (not installed via pip) +# vissim==11.0 +# sumo==1.13.0 +# carmaker==10.0.1 +# matlab==9.7 + +# Python packages +easydict>=1.9 +matplotlib>=3.5.0 +numpy>=1.23.0 +pandas>=1.5.0 +pyyaml>=6.0 +ruamel.yaml>=0.17.0 +sphinx>=5.0.0 +sphinx_rtd_theme>=1.0.0 +# SUMO Python libraries +traci +sumolib diff --git a/tests/VissimSpeedLimit/speedLimit.inpx b/tests/VissimSpeedLimit/speedLimit.inpx index fdf941b9..d2000bbd 100644 --- a/tests/VissimSpeedLimit/speedLimit.inpx +++ b/tests/VissimSpeedLimit/speedLimit.inpx @@ -1,5 +1,5 @@ - + @@ -533,7 +533,7 @@ - + @@ -541,7 +541,7 @@ - + @@ -549,7 +549,7 @@ - + @@ -557,55 +557,55 @@ - + - + - + - + - + - + - + - + - + @@ -1052,7 +1052,7 @@ - + @@ -1126,7 +1126,7 @@ - + @@ -1139,7 +1139,7 @@ - + @@ -1152,7 +1152,7 @@ - + @@ -1165,7 +1165,7 @@ - + @@ -1178,7 +1178,7 @@ - + @@ -1191,7 +1191,7 @@ - + @@ -1202,7 +1202,7 @@ - + @@ -1213,7 +1213,7 @@ - + @@ -1225,7 +1225,7 @@ - + @@ -1236,7 +1236,7 @@ - + @@ -1247,7 +1247,7 @@ - + @@ -1260,7 +1260,7 @@ - + @@ -1271,7 +1271,7 @@ - + @@ -1286,7 +1286,7 @@ - + @@ -1301,7 +1301,7 @@ - + @@ -1316,7 +1316,7 @@ - + @@ -1332,7 +1332,7 @@ - + @@ -1348,7 +1348,7 @@ - + @@ -1364,7 +1364,7 @@ - + @@ -1380,7 +1380,7 @@ - + @@ -1396,7 +1396,7 @@ - + @@ -1412,7 +1412,7 @@ - + @@ -1428,7 +1428,7 @@ - + @@ -1444,7 +1444,7 @@ - + @@ -1926,63 +1926,63 @@ - + - + - + - + - + - + - + - + - + @@ -1995,7 +1995,7 @@ - + @@ -2004,7 +2004,7 @@ - + @@ -2015,7 +2015,7 @@ - + @@ -2028,16 +2028,16 @@ - + - + - + - + @@ -2054,84 +2054,84 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -2238,39 +2238,39 @@ - + - + - + - + - + - - + + diff --git a/tests/VissimSpeedLimit/speedLimit.layx b/tests/VissimSpeedLimit/speedLimit.layx index 60e8b734..956cb9fa 100644 --- a/tests/VissimSpeedLimit/speedLimit.layx +++ b/tests/VissimSpeedLimit/speedLimit.layx @@ -1,5 +1,5 @@ - + @@ -29,7 +29,7 @@ - + @@ -41,9 +41,9 @@ - + - + @@ -51,33 +51,33 @@ - - - - - + + + + + - - + + - + - + - - - - + + + + @@ -97,26 +97,26 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + @@ -124,27 +124,29 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + @@ -175,17 +177,19 @@ - - - - - - - - - - - + + + + + + + + + + + + + @@ -256,23 +260,25 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + @@ -373,11 +379,11 @@ - + - + @@ -534,7 +540,7 @@ - + @@ -583,27 +589,29 @@ - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -618,18 +626,20 @@ - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -654,27 +664,29 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + @@ -713,7 +725,7 @@ - + @@ -733,7 +745,7 @@ - + @@ -769,21 +781,23 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + @@ -807,7 +821,7 @@ - + @@ -828,33 +842,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -878,7 +894,7 @@ - + @@ -893,54 +909,56 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -981,7 +999,7 @@ - + @@ -1040,7 +1058,7 @@ - + @@ -1057,7 +1075,7 @@ - + @@ -1081,7 +1099,7 @@ - + @@ -1118,17 +1136,19 @@ - - - - - - - - - - - + + + + + + + + + + + + + @@ -1154,23 +1174,25 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + @@ -1186,32 +1208,34 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1230,7 +1254,7 @@ - + @@ -1247,7 +1271,7 @@ - + @@ -1264,9 +1288,9 @@ - + - + @@ -1289,15 +1313,15 @@ - + - + - + @@ -1314,9 +1338,9 @@ - + - + @@ -1339,7 +1363,7 @@ - + @@ -1347,7 +1371,7 @@ - + @@ -1364,7 +1388,7 @@ - + @@ -1402,7 +1426,7 @@ - + @@ -1425,7 +1449,7 @@ - + @@ -1433,7 +1457,7 @@ - + @@ -1450,7 +1474,7 @@ - + @@ -1488,7 +1512,7 @@ - + @@ -1511,14 +1535,14 @@ - + - + @@ -1577,7 +1601,7 @@ - + @@ -1592,7 +1616,7 @@ - + @@ -1656,7 +1680,7 @@ - + @@ -1680,7 +1704,7 @@ - + @@ -1709,7 +1733,7 @@ - + @@ -1748,7 +1772,7 @@ - + @@ -1768,12 +1792,12 @@ - + - + @@ -1787,7 +1811,7 @@ - + @@ -1797,7 +1821,7 @@ - + @@ -1896,7 +1920,7 @@ - + @@ -1930,11 +1954,11 @@ - + - + @@ -1959,7 +1983,7 @@ - + @@ -2018,7 +2042,7 @@ - + @@ -2037,7 +2061,7 @@ - + @@ -2047,7 +2071,7 @@ - + @@ -2061,7 +2085,7 @@ - + @@ -2090,7 +2114,7 @@ - + @@ -2129,7 +2153,7 @@ - + @@ -2153,7 +2177,7 @@ - + @@ -2168,7 +2192,7 @@ - + diff --git a/tests/VissimSpeedLimit/startVissim.m b/tests/VissimSpeedLimit/startVissim.m index 2b5d4eab..7c885045 100644 --- a/tests/VissimSpeedLimit/startVissim.m +++ b/tests/VissimSpeedLimit/startVissim.m @@ -5,7 +5,7 @@ function startVissim(netName, stopTime, configFilename) %% Connecting the COM Server => Open a new Vissim Window: % vis = actxserver('Vissim.Vissim'); -Vissim=actxserver('VISSIM.Vissim.2100'); +Vissim=actxserver('VISSIM.Vissim.2200'); % access_path=pwd; % vis.LoadNet([access_path '\TrafficModel\Headquarters 11.inpx']); % vis.LoadLayout([access_path '\TrafficModel\Headquarters 10.layx']);

zN23AQQFtR7hn<4=A`d$a$E;^QSFnum!0$0X*dDwY#a9v!vuFeBT5}s(PfQ-Zg(hRG z2RY85wYn`l5>3U9!b{O>^p%9aKVfc%EN=>Mbe8w4vb!Z%R0=}-xiOIn;o?(C2@vsH; z!%o6YXg&F}a5EZ1+Z_BWiel$=S(f!mj1O0!4cIC84K$jV0Dk6K_DOO^;3(wZL_DlU zZA*iN1(oQ1|v9*0*Ug`I+{(QKU`u0t{GG(7xy_5or%cr)^JJbVcC z!p^|nFECc}M_@lRowgnvgeGH0;Sv-OlZ2blD(ozL1x+O;2hVtsT;zoP+w)HV*4iU+e_jfHo78fxTa0f548wLs36sJa{wOM$Qy`2u1E8 z9=?J4VCP}wtBhHX2d+bL@}%MOs5db=xZm&CHi(J9erSx&4=d1U>?phgy+=#{Kl2)| zi8>yRLN8$Za0N<{KLuB#C~X6HAF9Ak!*;Zs81;MR0j1^u(R+5wCyvTOTgYamW@0S*cYwD_FxQcBwq6Yl-4=nqbQ?u!aT}iYkGfVyT#VL z1+Bym;Ci$MI}NvMA6xy2`!*=^DaH)Ppcu9fXQ0=xV{i_t!;ZsEXftEZ!WYn1J$@K@ zgJmG6=4O=F5NE}{lO5He)xBISEKpYL^jKG*fVzTf}g+v~db{>brsopWC2 zbzZNT-JMP3JojQyE^rx>^dEfmyVgQZ@k}J-H0O|%gS#**^uu?fJ@mtmqD3z9KJS^2 zuZxpB4Jp?p#ec?#eu}*L`{p3Wc`52P*Uks7weRI5{~hH}&lh}PUF0lZk2YiFco}l~ zFY+qnzgLzjE(+{VnqI*r>h4rH!ta_m;sM zFzy!5|Npu#5Xmv#6YXBFlYBC&wWoPLqJ8wwOTV$UUN4ILJnFQUcrTe_*@|WSya#U3nHKAWl@CjHVr+GdKa*prCa=E}|q>L5( z4rVy73V(_gIjS}ntiIN{b2rw?`Ctso72dL@DjK-aYds%|6>^GyinKYW`5erWGyEo2 zswwlawbm!p^J7>e7rAb9Rn#7?1-GCmr@1d67x*RQ|DYePs&ftG7;lSd<{#%>&@3nT z4)m$X^JZhLRjB97P?WQL7kY2fKfgcL+e49{N?7ZksNJdtoo{`F+mQ2 z@axT0QIA~aza6PQ)bI{RRYhHLoOePhtS8@q9_=~4@EGIDS^n{H_P?Cq=tOIx&)}n4 zs(gKEEPnIcs%SwNi=WKci|R|fxV|Fd)Csh8LfYLdMFukD$T`3@{npXYC}K#nf0 zicUwboaQ61H|MZEyx;9r(G)q!_o3$o*O#}uLya8g4f(35p<6$9Rz=f)Z#~1YJp7-%x%BNuqPe>ksu9n05ZmYm~L2HYEJ(){|9_JCaGy`Hj9ZZHSF9R)eh-=N-} zkDjiIwtvQc%juJU{(^lgXE^q%`%8WBndmfDhMz}PF7fWKnRA~t=TWO&Q#r=Zt*MH} z%O$?x)mW4fH=L(wd!xQJHA z2JcW&f4*b+SWMEM;?t1d`#VvZXQNln@I3U%S-uTDa-IuVA_uQV-fKabt3NfK9OErf zP!s3(u}FJ`58U9HDJOXdf7d$jUWl!C zzI+6#uHqyz#55D4{+2+S;P?`(DR+ zA9Tn`J_Gsia~!@3S?xLQ9bFyO|28}WtD|^*bu`_+4W1OQj^=7l^6aMSs9$@ATlTGv z2DPVo#bMRa)LZQbKJ=LCXwiss;k`~){~yQlL#J0qYqb}7uh!})At(8T^Q)t2U)s;S z_~PoQPtNnZmsdyYzOa}0*ele0q)&bT9xH=Dn);(Q4@v}gHsbZam3{$174Mmfn_-dPS4|xujZ>ybG zp+_$9#CT1#L{9Jx=$CW69=&pf+kQ|JrS+fTb?6J@a@&qIQ6aSRI>h7(x9wEp7g@FQ zI;7oD?}8a^~>{k5m~iD@-HV{RYvxWj6qOxW{$6k6mIUyrn$<2TSMmwErg zYof+57T<=noae96DMv?`KZQo;bxrxaR86!dWPa^<{f~Do_>&nm z(ImOT11G9?Y>BV=sXd`R#}}V!Ps&+dj532#Z2H?{TK{m6JRV%hY6f zDK^SQ9>I7u(X5(i3Z{p8ZpL_DbEWu1)cGCZG@pg3;pZbf7x|ApL-_aTl?%KY3*<6a zomCTc$T8jvSvkokW09QZOVF~fx$%6&y&mQGMvRy9+>3@rYr-$0Q7-ei+0JD<>%)6t zSWfbp7?Cr46{^+e_&%hKRp5uv?X{`MkE2H}@di|k8=YMf?Sv6I!6zW{dYb0>X!+1Q z`60}di~I~?>P!48>g6);-fCPm3BDAqa+aS*MlSINO!3(UUuZ--AtNXF1hmU(o{v(4 zbK!?DC>Qw|bcXr!t5_tLdH0{&6KWECDavw|pT}Cc#2c_;o%21nCfcXXTD!lJe9u+cZ`DtD9pt-voUir*58Up4lS@4D4(-NG@C{fg=XgEV$rau* z?|EoH#QDBE?QhTF0`Gs9=d+yT?e4a3w^zfLVTSrF&qtT_%<+26)L!A2`#cBKm-*WJ ztfzY?$4C9iy(Xvlwg>GQ{pY#yNqaav|M{OQTt_t}zU6sy^L>Uq-&b<2!`%437wwsl zd9#>tfAw{2}t;+tp z^CGMX_1uL8p`QPQr1zW!UWN|sMP7ldT;f3tKVv@pJ}PpBzr`C7DpU=I8>GII1qO;kH#-PFYR+%K({oZ;VB*ZO;gtPj7v zS#8uB-kcaQX_`LesXh?mApFo$fO1%44wb3Fu!PleN zYjlp^*rqlbCzrWv``Reyy+@vB>|7hw%V~ZHnR4vE(QdD+yPjUN%TE9ag z^GOqHqbYKlCr_^R_c7U@d>H!A_6*?@&?~3;OyuPZ--{)3fmfmB3iIbdESqnhyaxSp zg?HGeHX4!Ryb#GNofrQX>lRw)DYelxn01wQ{@%XMMUL|X%+!B^PsVgP%~zpW&haCd zAs6|5q~r=u+^;q&7%Rb#qGN#?-f92ZXh2Tz6wFkUfHsK^x_b)>x^$9OUZ*NgIh>dcdS7KN$@rPJu+zS8rDCe&|!LLlW zE^?W_LP3s>u8oezGC9rnq2Sm8|KJ$+fHg_*d6*(+_!dlaE_wdwSbMdxj1NP*niMZa+Oc_lALG?j_$SA^MskY(fa!992QfbM$=jUZ z*{h#8Cow|~J_FV2Gkg;!sn7F2FjISpzcZsY%Bqj?38+?+=7pH6CdW@Aqo%}LpJ*)e zjPu!O4E^&nXbOGuE+<(BIl(i~82aSjAg!M~7cpH9ej6M0S>Y{C){pu)AA%YBN%6Uu zWz92uEz)w1@5FMsz(d&R+LifTbc8-R*5Vq4eaKVMB`5hD#N`ZkBNo=5@5X9#EAV58 zv=@2npSpkKI1gfArLnmB6xUjg@g_6G=+ZB?iVbPi(GYvK8K9OC!FcJykedCu34V9|8gvEILkSziDuiM zXS5(kt|IO#niosWU z&U){Z?WET-2Aj`UZQ?JY$^5)kbY{@P0RXKC4gi zhp3k;y!a;PCg*v-o9%;8!?O{SGkgnXh8q4i);wnpJf_QhmeH7#hZ@?5e zx}`SyKBmcWJ^)kYB%i(5ez4{lz7Q+zjVxb@<*sjzZ$YE>Jl~DEa)BSlfa_l5ExR3S zt>U~h`t6eh?~QR`|L|d$C8xOjTYFV~@Vl59_8WhWdVNN>dc8oK9OL6|b5H%(9^n6A z-9|M%wb9?v`L#Ll{l9Y!v={ig+dcc_9G`KAd8*0qgL%&d{S`QYDs zmde3t#N^=n(4n6KKi}*1Wt8`>{N_FO>bK5?zv;7{+M_>sA9A1TE+_by`;Db0#pgZX z+~o{k|De4T`Ff52^pN{bF7Vy`ayS=0{$bb7xM_X{z1mBB-cox;&Ts`w7-!G2-t`DpT?c9k0{pa{T^veZ)76rM)A7Qy%;Y}YkmK@__kug?^S7Pd=>Uqz{ ztec$VW=sz?d_Bf#&v8FS%(=)jDSP{XfbmR#mNOP&LAlCMR^u{j>~g6kK~k&nTM_7u;> zl5j5k?-$L-IhJ{!m+Vj1F3D$MTDb1~5C+1y{2mf=g}*asPlo>aq>vq(=6kSOF7W7= zt-l=Ovr+BX3@^rzoae_-ub(29F-Z>I) zSLC%=8Ro{HqeqTjx6iRW%#(kPm_9Rn@M?R>_uEtaD@^r$#Vp?t+T|SIij}`GfBy6h zW69CKJ#Vr6J$s3NgJC((>##ts@RT>rSx)j*7?N|m8m)4fV`bx>XKvhrMmfz7zGcmg zRph$2Jzw5e!zZI8r+Ep|a)C$CAxH1jMn|AuPH_*W$$2gz(tmKn8rMkwalYbR{bpin}o^=lOj!sj2YPkF3A;Bxlg6&){Wfm5aP<#X9V7{(Lz~ zeh!%9lRxzuv(6m&VRUOR^5&nZm*f0C*2xtd@xz{1`b_Yx zBaSt0oA@8T2{~G=*7diHg_lVBdW6QiACAq?X{?@u&U~Sn`Flss99_B+)FQ@oERLccEev{GB zl#J`bTUU*ahU7T!R6RP1)Fk)~WaTpdx@L6Lt^X|Fk3sbXUWYYmD*Q<8=xDiIVQN2d}^yxx^DT z9UXPb30{CMImi9z4fXsLigGk=bTkL!~!2a2=Rys8FGP_qbKyqgJ{-X=FgFleHbyi7434Kmm)0}`F}Pa9kpI< zZvwaGW97w9bIyo7oea%$9G_foae+guH&!l zXD&84|Gf3#)b~dF9b$W)%iB2@?ZNkd-@0ip@M$~PC)(3|_zy-$O&6=@?RIi4wa5AF z@ve*Z3@_c;J$tAAdGwFWO?!+_nqVH<)BFJD&eK1Ci)Fua5AHHLIs%Q_Q~VpWYR~g} zEYM!zgLX9^?Mc20!xy@y{4XT5m$~7`_PzQzx1d>jnsb;N>bZ!a9`oc8G^vl8JcrN{ z`sWN5sSnPhs6KcNriJht_>bZ9U0_IubH>f<~c_2!e| zrAVtU@;B&JAMH6hIuK>`NnVI*^*Me86V#V^`@QTj^>IE8CG}~(2jkQi_zN_sk0$98 zJ?fKuDf-lB`6*0NU*fIzc8{o!^J(Z(pXS@KLVcd=CR<1KF>XgreU{4@P#>J!$9<|j zxDT_!e7IqX{U7@0ELN%yE~8F+aPz*N1L{+}40-KEj_+sBs}Ig%B+Q@JVy5~Ex9smZ zpgzq-tX3Z!pX$B{cqIo?pfi?PcD0fbraq(ShMPWS_h5V%(He z6Ygt1@L+S$p5*5+MSF>lImAA^!@2Mqn5n(YryXj2!hOvd3~3L}qEmZt4y&~X=dnn8 z@MGw{$UON?q;A(Ie~TXN{!;yD2h7kO=f5H!>OFzu2DgOFsdszR`F{7g+Q`WFu zJ2xHg`e{$_#WQ5}S)O^4Ifr@jp+B`gp`LF$#eA%1p68!t|7p+h>uG&zFZ1_)=Go=* zNO3+MEpnQFj+~#fXZU<%=ctoNW$&mw5_W^5nfoFAjKB&*|0gK%ia+23#wOrx#-Cl!2<~?q;m-LzBw@{QT zJSOkH(r1kCxzlT(`T|$orCpBkJ-x;a?Ob(_XO6Xs@eE9V$~?IT-OeS?tI-+Gi%;+K z9R7zIz878gXMz8N4mtXRxnMw_!CzsV>l^*i+)xf<@x1%=FK4;-e&abd#*6=?{!!!d zOApv%u6vn}e$cg3pW^%fY|X>C{M~-nMSYAXJZui?6Z`^7#x3)&mU>3WS>EjtYbYmp z7!6_0%j_AWlkq;dH#n5n(UyZ_DF$_ZY&+#DQRpys>nG0VVdQn|#?K7d+j5Dwe${!c zR>QBq<~c8yd8^g#0X1ncYc@Bj6aL-!jpY%SQzxv1;P4Rwy-RNk;$Hp~Q z^ohLQ^Dg9y*K5S&6#rp^byi>C7l-Wu{g-+3FU&iP#e4q8{iQz1pJH%GKO^=t;@S&* z)R*>K=#%H6q$bOEqcPO*C#XEmg&GX%8(q7<)u|O{JlNfZ}OT5!J)?Ysf-Wvn*M(Rh8vcq?>-eZ}XGs*8H7y%zJfo76>ha-82l zub*L+`MIh(-;?ll8Q))B7tNFld__&2|L$upexbH58gXoyj~#6+ImM5mQ7&@4t}aT3 z{yB>#Irv$0>!-wbjIE2Nj1v*T`6W!&Y@s-my78eVe+dT78;NZE&plr+Lh_b-wT7YgNvos6BY+@6|;; za)KYk3c1LyVrEzq-hk!WqwVT^X4CxTIG=?0*RBO$jz&4hcOmQ80?%lyi-y&w`AjU( zp5g0|lXHAOIzv4_j2>%J6Uf?0D&|c=Xn54bJpCi&|w1a(xS#pf;LG=~(GoK!}A1=2Jd?#9c zU0>i0sQ4aT^n z_;$6;+{2$DE!h9yy zMMq+~oZ>AK&d2Looc{-_y;i3A9JFcA@Uwfk*W?oKxR>kX^)A8lCz+@E9RFr-=lHle zbMItp@)zUs@Ak3B)aUv7DRohEsOL%hI#zv>SE1xJvBW3u=bn|*{4(moYbD>azrFGg zee&$7*1_{L!#xMoMT_J-|Moz8BV@kmAlEx&z9i{cBxgB(uyykpp5VV=lJ+8xImEo5 z_3Yxqke5?@8xo-({^_B0Q9(}gy;x*F6!n~riWVQ=si(>=Sw-ryaMc8%1> z`Ce3vTi}VusF4%=J4}%CJmXmRra7niUbNW{1^x;%!ahmWMSsQ$*S*MJVU24S9cQhu zMth7;INmjo(|p$nby2@-UEmEftVyUp(cVLoYZskV7rl?U>MQ)>$)0uU%lwZP_nrC@ zpZ-(prasN@qi7FQc+UT*ku&@ThSisO@hP5<=A7p#Gd=%(-!jRsBIo;=Wo|!J4&Tq@ zhSMO&`7dZyQ{(BMCJ;TlC)3sCmF&G8*rE$8`Tl*W4Y^1;8* zubko&(d_SzOY>Qn9{%1r{xv3qzjuzW!&EuPlh5;-D<}C-RJ=~5xCP_2r}<|nYtL{y zri6a@K8zT*z>i>~T;!TLuBnH{w3C^&+Eriec?3z8;Z2bG#TM+VlKAW@xYQUKiRYa+0q?D%A5!h{ zABy@g7N3F<^=bYYsNwO@SXlNiOm?SS?4ts*6UWEXVj%wCX3#FJM4> znb)9BdxdYm*!wr_dEWFA^D$P8*I`kp;arEcm4hEbzxpD-h;iD>{25|$^lN(rLu!KC zuuRVIJd9V9{ud^gbD4L#%svdq z@!IUsowl3NdO>&&~!dx{;zCN@&Hply2ZrqPOueceJ=W2?-!V>M# z71k0PS>MO0=hh7W#oQ3XjIm17>$}w_^cj@$Ol@mMznKhotJO>SOhA#`*&%3ky z)2n4agHH3l*EkoaI}QQIqGTXwqKfHE3{N75)}Q z=jDgo(Po&WCdPZ9YpS*4pJA%kz6@W7nfu%G+>do$?~1$%Ys1$a{Aic@iuWPB%`KjX zeh(|o7a=caxq!?Z=gylfwrAuRpMgF#8E(1N7+#ChybO)@Qjr^OL)cfGLYHHMe~(3> zPu`@*wNn%0J&+3L!aqZOI2XPS4dGn4AAR9mcoi0fbKw=Y+mqJ6#4GaJL*`+0hW&P@ zb;H!K-*^XfsflyLUG|>!jB~@?_Hf8N4NMK|1{6RI5iobevdt{)_HN$z4n!y z;BkG3UWa1%ybZ7XlV^MQ9X($1fH{ZH?eL<4y&>ngA1j=1kyjxr zm-tOgacr5FKd67X$UT2{jGX6=hs;^d^2~ny%4uGJl74c0NBFax=LfJ_O@Xibi|hEQ z`;M#rYJJ}`f1ZzKImbn`{=&KQ_y6X7mmKF`Bc&$Grxx{TZ>RYs%+y}y6CSr#a+-6P z=GfqmF;%Yc(f`n=niSvpwCfl*Hy*#j`g@<8;9eBNduA@9;Mm{;p0PjWB>xU8!h3A~ z^m*g%;Qn3Zd4NIfSsq47_RS3cwxzXlZ18nhAm{jF45_Jb{R`GTe3phMqEk-r4D`rp zo`ZHd!(AxLd42$^?ehP$v%&hrCU zD;M}xtoA+9GOx#wT;ckc>_0Veo`{^B;2BsVr+E&ta)!GwBIo%549f+67!CR?^5dwN zOFV?eFfOk}JdDfTuh<*I`r*Yx`rOfV;XX{bTA#f8tDdWJf*(LrXy<>Tqto+*$Gv7x z$}zqN=^o#za-<+S~J)kHP{u#j{arb&a?kIqg}Vk8U}~w_v53Jl}~Ga)BS* zWK6Wq9E$uA*2oneMtvB!YD}~#Vseb1M8BF6e~D74sUG9|h5D4!{BX^fXi}R#xvq9h zR9xg(J{co&nwOwcE`&Dp%F*aC(GgfJr?>}ga-K`*ZZj@7)HzQ%&KHgu6E(?MUV$ao zso`zLIu|+4ZI~-(co}kXkw(ITfg7yhiz;2}(v%Y68E#zf2I6n7)nYi|5L zR>&2e`d$6VN$$j4ImiFP61mJxo2io%oJRZ?#^pXla)Gzr+&UX8&aLRU+x+>F&@LBw z+!kZJE}B2LAT6i)UUbU^-iQfuwB;E8riV4rXK*_P=1i)q>m{1^&ykv~M- zxD}qZz4Hm{%on3|U;XnS=E`M0Xb1aVO_Hafq@NUbqY%d8=g=pYcs07^GVc_(hH`?> z#tJ#ZH)6Uz^Ss{=+^eB~J|BZ}mV2-~)bLV7a*@BYqji>JoWM#sIEAzvyb$ejj-NnI zE^+-%_NzI>`6T3=W125VR?hKz$f&7s(|G$h^v@X#%fatrQmEm?&i-4d;a{RNtRY{I z8P+Pt-I%E+&*jiA2d_c1YhB?@e`pQm82=bc!hYa|Xf{@k-$P>I~zkzaC2i|qJF;TVl1V4lx=PD%L0XW=v6&=Uo%dCG^9uVTGD9AH9dYEvNWIOqbJq+n&x>&hr2Ya*6ldOaI17 z^0jCP*DaxMhpNsl1A1NO@ zo`z~QDQ?3O{bYC%y5$_dh_!N=o2Gajl@r{7I{jq12UFxc_hX~AEpiFt!W{TbEC~JZ zdL-3X_*)EWkM{NK#RTZ&wT8GI8R1XsNq%&XwUF(!=J-G;d`-M zO@T*3wr8UK%?mwpjE_J`PVv(yt1s~oI(IQHe~tyRAL>TW9_T!OtcKTPNPC4pM<&!9 zWL+`5oBp{T>*P3(M@3HXB&?N_{4f?dw#Wx3-M_n=55It^a+xnb*fUnn@g9fRe{zx! zL#ty`d>ZD;X}$_8i|g%W*yjeY;vizI~cGILAEqqDM`E|AOw& z55I@i>MOhvX*oK~a~tdA7=I5LInF;g+%;%&?mP)C+LL@72IMqfhe^iG@jFP$75@Ga zu8U_&oPUXRa+cphQ>fu#tkF-@>^X`R#!B(8QIxa12n9LEgIFe)d7GcO7IK^q#w>lN z_zg75W#0TqU^&wnr_cvBs^DnA=<`$QMW1or6RlzWxfyfS zr1(a($$9R@%y8ZLUsx`edGxW?Q;zWkXf;-r-$t`s;pr*!mQ(yRy5th?d7OPEC;0|6 z$vOTE896$BOmsS0cceJ=KtY?-#K($=q zs-Id5H8Ji+uVeGv@;~k!YnbN8(IJ=kWu(J8bK^|=O^)+n7?4xE4AuH9@}{R+Lu1AG z0!#{X;K#Af^P$A=pe$Fo_B8#5dfp9lwI}#!q~#Rff_^#A>o5?G<*BFJ^Kz0;#fY5d zd8iNLat`C=;5#rq^urGznrJWaW9ZRdoG-5g;!pp{dzULq{AHK0x$Ztb&zx1cB$73ITMUU=9cFN z&>|Q3F|1KjCkqSdsa?zW2bey*E;h? zEYluc?RkJY?PadM#=g`~jCVj%j`Kvcs7df_jM)Df{xb&UB7cF399`>c7A%ufoW*cB zU+%-2u%0}GnESoVTQAa2xJUR56yyxwgO%aF;Lp${N7p$I44GSS3s%T!?!-DZIeroS z_Enj8yxw(^6MO->Yf6ymKH@o*SCEWXb3uef9ejkhE z3h&$H8p}z}pl*&eE^^IpthF5DlhG=t z`41TBGfysKx;}#^blb0Tf)7XD^C!i#(G#9y+=YH?o973xAnXTz3?(&1egz$W)F*#| zb~*a3xuZK=cRmQMa*~h55;ZBFjob~!;)Pfw=eQp|#wzkEbjT%s6TNE6`~}kXd338i ziJ9Sk;c3VkE5)ZHEvI=7=Bml?LM#bm@jd913p|KkW0iS5vT}vLMNv(3o3YRl#^T9n zmy55Pv7VXhqG!_hq1>pthvBnOu; z?EC7$yZ%m}a)M{0O-+W2NXfw!#N^;3Z+D*RQ@juxKQT9c5kqpBx4uLFa-7e=ayi3! zOnKLS;1!r4mv{vA>&-uJO)%HzwUT@VQgV);LYrLTE$;M8l;fO2A^cpG+mV;E+=oSK z3j7q}9~q0^L!(^b`rkWdjd}7!Op+6P5T>h1@=564*83%%hb}qGy{Py;LxCT|61m8$ zFrcQy?_ow5i)-&PS2@O$kTq74kHr)@#iyfPO`7LnWf+SWV}+dO0gM={#BZV?mw7!Z zYAU>KuWRl7aGWP%f}G%o?{@Cb+CTiGKIh_RC<$JGCha+X7BRWRoBzRmA;&xi}T_eW^_ad>6b>PP_E*#5^e|8URk8|oF=cPTk(r=&3!KXiBfBKwrnn(WP+8y9M z=U<)ca&>ZvhcPL%|J~k3LXL3@8V`0XUyOP=%O#AHgO7XEv(Z>-z8D!f%l|^FT;?4g zb3Pwi2fhFkN+sA3l%4V^&z7@L3B! z5otNi_o7=a@Ryh%N6)x!X!KkPZpTLbXL&IO)|oReMNuyD8g#oaD*P>`$slBq#ycP>$9W?9 z)Fk+D)Q7QnHezyyyHID`JU@VC#x3w;h^r~`2WWIZR`^>q$k9q)tD>;Nxcnn@$qD{D zV$YZ-uflTeB|h^x*G|sx0A{Eu@!roHS5ETX=#~pSd6j!LwDSe%bZnM)FS+-%C-^K3 zgg$xWi{`04ddWEVMm#&Ns$8pjD3ZL~PW5g7?FsJ-rU{!RU}vJR5Bv=#v+sRnBog()MbRSD{HR z@ter1Df1UtLzNk19B6bU)Yo#@`nx$tf1lJk7gNBUZ%hR<7X z4Zm?L@4UhFsxcOyiAhgu=lN*cR6l$dlH)vE_#HH7&qJ6a@~K-)oXE#Pr)=bX}%9J`?J80qh5W9w;QqF)WrE*bjun38~WuU z&-&8qc=+5McYfv1`tu-ICZ~3KYtouOb)Tpt3k5E0|f|P5K z=X)_#dx0N8i}oTviKO-tzl@pM%lr;jhxa+WA>@_LYm>3jafmOrw)`MA-fyjV^Qy5v z3u!(1e5})+L05^|NJ1bp?}_dv$4@&=%3F=d+48Ez(DAq_lS*+ zT0{SQBbJB$`BS7r|C?KH#Lm_a&%@gAeNKJ_d-%bfsxSv*80a_=%1IO zqP@slZ{zxg{&^lcKh;0Kg29UZd2)lj7qXt0@%qg2E9lW)=E>WQjheJ4c`))W&KQG3T&_92Hxncf0=pPO0)4UXI+Kaq(-1XHS=XsbG z`sY`$*7=rs@((;Kv?qBn%G&c>33yfnCwFum<=`AP%E9+zwOrumuu?AZ#~73=yva^u zqZx9HcS2fD@HDi@DLxak0M%t<@y&?IdG1G@T;!KfFPHgy zQ#|M8IA4Sj{bc!{81ULu;_7`JFUNQpVt%K!$p5pSYg05X*X^&}>t>Aqh>oZ1CH@M7 zj*X_eo>(F$`9>_4^Sl}bxy(O2Kwr;WTTWx-IsNnPNcbJ_Jg>k6xx~LZP`~Drdt1)&D~R-8=Gej3R{z1rV2VCd+>RzW%Ud6!UjK3a6Bg;ez=t1d zKj<^X|Hh&)7Vk05{TR-XJFra7@^=sO9MeyX7o$TzdEWhS{ad#LFGZVvioE?1?#;g$ zmoLS%aE^Q>@_V?a_!d;o(huK_VY$E$qt|=LB0q^fxx@!FTOT>e-B^=!ukl(;+0*^V zhyTPgO-}KA%#?Hd1ZK%4KKe-OW~>x1z}!&7?ME4Rwt4a+SfahiZ=v6~6+Ume{iG(t zx1d=~o}WQe=$~K4i2lpG4vp$7{5j%sbhPur_;6kvKi0WBHh3*&hOxLg<-YJbo8t4a zM0=K3VTSe+A9|d+P{Z@lrk@<&e7tk9&UyYThKyU}l^ASwEU!lS=jO@l(67G2V^1)* z@I5Hr9C`0=%x|C&NH@a=!U-FBZXuH2{l z@MvP^VbPD;r$zDBL!)i0HXn6;G&V6NU6&bMtSMEM|4$#IZ>##<=;5*dyO(U}Lm1Th^}EDd|l34#w@=p9ZP>ddZZ+Z zl+q+yX+^ioAG7QXg9kca^T)imqiK!ni_XJRWBg{?9Iu(b#VG$-q>0v!Ue{~8BXz@U zbFFIA(c!IL9p;n6YbM*{wknI*ZTIp#zI*bT-R(*I3g#{C(LHKkmA%NXEZLH^9@}DG zd-*#<^_B1ni-}U6?b<22o`LHyPH1wiEXpO=EMc~l&GV^mo_mBx|8#w_?X!{Zg}Pi~ zh$YUI*097aGh7>lXHk6H8IvMx5}&52k{9ky=neH-1CC$F;Az+JTktmMx`=2<=A99k zMCvI`o8gPr4*4Rd{GNRB0V13K)h!#|aewua~5{+gk8tFWS&KH08 zw;0{CwrEUY&xFK7DeQhB-bi7$B#2AKv!@fD#ofUq(K()d5)n_0XYVJA5682=j}uo< zU|UnbgxBa_)p-1CrGLMrfA7%0brbOK_6ayConyP zh}%8ZEf(lUd1^Reju*1c%gWY+cj3IY(ffJoQzR>adP@qzQ-*40*kNZ z_TM?*&cz1HzT6U~0O#6m3s?a!5tjn~2 zGm#2iH(5k8?VBc3`m(8_XS&@q^*O5W`t<9-57#c~{%IaddMI0?`8p--Yd3H{@4K5h zzlIAWqZ~rw2(_*+<<#|xT28;j_ZmNqv6ID%V1;;>^L8?(eVmeS@yQwq=&0M*FivK- z^KtvyhqAAu{%q0};UuvK+u#4*sO#$XHS}p`)VMxP-C^2y$N9OI*~KHR>!YFn zsAXgr9)1=$M$^~Pl=&?BGI|`A#VEogzww#>wBO!YX!c3tFm=P5rfafQi&V@^*M|R* z_LJgS@)Pv|aJ2`AZkJ-$(xKQ@uB({WW;;}e;(HCf@gU{TRrd*UguB^jSC=e(OoY(T-?JV_h^9L&edb=u0>V`i)ohVb~aEJO9>+ z;$|$wbMZ_v`x_VcB(n!C(VWa~qwrbt@EQOGw;wRq;#}RF?*?R%$}NwYUlA=?R!G(DGG~Sc_o@WspMri zNb->sVo7|8qtm(`p8BpIF2~yp#&BA=@kc?6v44fI$B5YbkgiXMl&|G~~@mb{f z;+Hx5C&!2|{*lW5;uX$5Qe{b(Uv_j^;Y!Kc?=(EGI}LP_=$zPOq%x8wX_6)iPwL70 zZQ$%G1mhfA9w?3(MHycj&QN^$H$YDu92eKQ{*HKz{;9DCmeb`&3%%{fT~ER}b44jE zneWN8MNoa%^9C+1v{}1F|L?KHWj0%5Q~FMt%8;B)z?n=u!%v>}L}2`}#ab=;f2So@ z+iXy#+f`kXO*wBe?4oLSzp1nF+E>PJY}U$c#_r@94K_R5Lh^De<31b5IYS3C$nGsN zCE1;OWTzj^SaHV3HkK+-={cUUA;cP}{$p0gOX!HbFFtb;63DF&B_KoU3H8VDOR6s^ zd!X6@DZgUtOj%aGE3k~mhO2VfQ|B>udd7nxb{F;QF`jXMh^?i5)ms@GLu?x*2d#{r z5WCI31f2??&yM2>rq%3ptc#zSafQG}BDDTjo^hjKH&aLcXl49Cux1;{C+&>q1zQ)o z6Me!Y6D6J&0yke23CJIo7oQD&@|UH~dXJ_#+2L>4CG337m(i3VzN{Vc%L><|!+`7O z_IisgPua%75jmzED68eig`~?{l+6Lm*nJ$^y#jj1C;6|(;pxaFc#^{|wtn4dvxi7U zGNzAX(_yct6=4sdzs*j&ghSA;wpQ~8ZS2ibIyo87-YXJOC(TbUC#=Na>bTuvvGc51 z#Je3WPjoit!`u0_{7NEOy(L=G*aKD(R-$YXO=Iuc;-NIQCUg{IFNDO4ND3+@#LW{~ zk2o7{{;fpOF_B#!7FSJVP2qDvzsHlrF zEUJM!`6kqVc)WNZjlDHqbfn>MlQpQ{lq$|iV-Kf_mr~htsn-)n;2ZsZ(x+wS>pSt?TVfo>_M!9j=Ma>q>v?6vFQ3|?ew%Q{2yvQOp4u~iX8#ChDeSIl zSK9dvDLk}~I0(}?`R6OsUfOuaVYXqWsUP0DURwH<@z$X-COv4p)Q;vS?gzvKDf`1# z9<|r0II~Xq0S|wauN$`q%FWn&AuA&vW8hZz!v~3zS?+%5hdFjV77d5H=k33)GZGvI zr;PPh`^I{y#p}V)b(Z*-g`@ZON56^ZS}#bRJamvUqs#c+BOd7cl%}7_YcoC4m~?$} zYzECGZe2!0C9|$B>HNb7-TdVF-P?`f#Z5JZsZL}!X#=6KC=-h92LLS?-7bUknW z&eS1Xy5A=MOx#{w)a7+QhJ%_;JL^AmeY0;tX}_}6H@|!nhu25a__Usoozd4+N81~d z2Kv62PG))C2VKu>-%L|~sXxZt&(%wc#Z10XS&h%k*KKL2X+UG4JPpYP=rU$L-KRSG zXZDZEm3{{P!%Hh_%WTI?(>*VbbieiZsf%48e(wr)iS{uD{y6{P9lIWjh9lkgjz!lS366kwxV61gn;;F17Co)~ z*B9285TA*ciVlkIBVKDA7^$8v=fdO!tPOqDT^qvwJQm^mx%S@YnO=A=aX9+{;tP#K z%F}GUy5z3Yj8BI=oigb{&bl0da&?i$NOr!&fL^|Ouc?lrNl<&VW>7o{n+4Tkj@zDB zkIZXtJEPrC;;pC0q@N*>UGiJIH`}H`-X$~K6&CVHr{C2j3rhsYHe%@xQV}Q^QbMh*z8qW z_9StTe{wBgZtOD(bFSd0mj{TM>{uQ5&yHEM4-a?mE8@_=JqE+w`?5HM%?fBw-*e@A zM`;f#=(_)>#!7Z2-Z!UaiyqD{<$K=3*?m}&clJsB8_E$+0^)}+R3EkMNc*rw#fStA zxr({B*16~GtK8Fn9d|<^|LIB4(zmSR-WbpR9NHFYAJ5K77PzQM7DzWIi!~E?^EmOh z@%;92DEaa@y7|F4x_Mp79Hc)M1sB`!mz7MDIBGrd= zspvzG=$k-`rntCx9HpDaiH=m>lp?N9<+sre!r!OR%{Nl$=GyV!Mf#)hl#WiI{F^6G z`k@JFNMDwU;w`D-_EdI%s?ne6DQjr0n)d9vJ5JqQ`mVoETXHYII>aurm%MM|X#!B; zPtv#)v9_WAI+n~5hp{;U_G7qv`-y|uQ33UayQgiEUtjb+S3ZpX2KkmCJvc}_K)Sly z7LKPb!|3W*mvhHLd@z6H`%Rq)x~4khk5|Y0G%oiaPl?kL?(75CJO5lMamw!-UtZ!l zC_dlpuS)yzZ7=aPc0_fgla9-EnV^`|iGeZqYII`Y(Ux=Z`m`5> zV|S=r(Ih-3xnlUX;>sDau61)Xv~y!G)koQ9BOMnjdgi~Xt<*1x`#B!;P1?xWy;5KP zUFE#A)?@jcp)Y^2Pj~lY5Crf|*l@!+whrSPJY3*`=6l3#qCNe^tRDoulOc8PtMNKV zy6zLdN*mypFY&}b^9-~NvV6R6b^P7*xc*4_*l;92gx)uMk&D-+VHM`l#QS^k?X+z1(w_5>y=J;tH=W%u{n#OTj45upKLTIzHs1DAGCi(_U&8Sa_CcDZ zIM0WZ@O(JlUTPgU8iR=P^R1h0eCC_#NLpq1(_}l(J!udee?Lh)oX)C}e}p5H#=Su4 z7bc#`*awqrB+s1!lr>Y1MzVS;p7P%|^(Z8-n>L=YN2gJNH`3j9T(9oFL81C})baSn z7~Ueeh;N^UZ#)7GHALx&|3n8~n|uV)y;G3?_bEpq`P@{XUo*`{vX;=RaSVgMR^flk z#s8Q<`Z0G6XbFt|Ezij${wS3D&`V4A=aOw6nBs)7?`}#iBHTJ`0$UROIu#UC2 zyN;#gcUrUT$3vs)hm0?_#>|^jvJN~0XHA@eaE_!I@=U(+<(M+5Cme`Z3~IQ*|1DI^ z7tcXwvT|`IyKFc-2Vq0Q)m-5JO%l%(oU4ksI|cjxhMwTN@pj~A3t{~$opq3mk;?x3 zb9Fwpy%#_EL55jF&C; z4kbV48T}S}o_5I$^DI;DTPw`?#KJ*OsPtQ&alOs1puJc(TN&5dY&|Ui)!G8NO?Cn@ zw602dS{);EDbrEyYkQZ+%B5eKeNG>eIsb8eo%XGjW^~zj>kn8lWqHnKtEpd?S{Z#d z>!suiR>re7+hBj2bl|hXL+hjd&wXdnzO~ac)`zfmjMiV`8TW;-bdTgCR>oZ+b{Xwk zyVcIPC4}vMN5Z*<1d{iJ1nxZ$NTTmavmvQ@nhu^XnvI=bnhPzL6d@@eX zCLIMF#Wr3Ktl0Z~PFt%r&3($|;N~yvKF-eA=R*!@q_SFWTuA!8McH@2jFd#!l!<;e zCG{*&?iId{V>4(}#vv0E*~B88NdX(Ap8@Nb<=1HJW0c)w5uY`E>iYk+Yy5}v zug@0^A?%D7SP6TRwSK7*Y{leX{?U~tp gP*#toXh_k*6ByvF7^q;DN3>eFZy{o*wK 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 KU(f$^3;b`Hkg^>B diff --git a/CommonLib/SocketHelper.cpp b/CommonLib/SocketHelper.cpp index cc7fd3ba..1d6bd4ba 100644 --- a/CommonLib/SocketHelper.cpp +++ b/CommonLib/SocketHelper.cpp @@ -253,7 +253,7 @@ void SocketHelper::socketShutdown() { #else shutdown(selfServerSock[iS], SHUT_RDWR); shutdown(clientSock[iS], SHUT_RDWR); - #ifdef DSRTLX + #ifdef RS_DSPACE close(selfServerSock[iS]); close(clientSock[iS]); #endif @@ -265,7 +265,7 @@ void SocketHelper::socketShutdown() { closesocket(serverSock[iS]); #else shutdown(serverSock[iS], SHUT_RDWR); - #ifdef DSRTLX + #ifdef RS_DSPACE close(serverSock[iS]); #endif #endif @@ -401,7 +401,7 @@ int SocketHelper::initConnection(std::string errorLogName) { printSocketErrorMessage(WSAGetLastError()); #else printf("Unable to connect to server! error\n"); - #ifdef DSRTLX + #ifdef RS_DSPACE close(serverSock[iS]); #endif #endif @@ -439,7 +439,7 @@ int SocketHelper::initConnection(std::string errorLogName) { WSACleanup(); #else fprintf(stderr, "%s: \n", "socket() failed"); - #ifdef DSRTLX + #ifdef RS_DSPACE close(selfServerSock[iS]); #endif #endif @@ -470,7 +470,7 @@ int SocketHelper::initConnection(std::string errorLogName) { f << "bind() failed! error: " << endl; f.close(); } - #ifdef DSRTLX + #ifdef RS_DSPACE close(selfServerSock[iS]); #endif #endif @@ -495,7 +495,7 @@ int SocketHelper::initConnection(std::string errorLogName) { f.close(); } fprintf(stderr, "%s:\n", "listen() failed"); - #ifdef DSRTLX + #ifdef RS_DSPACE close(selfServerSock[iS]); #endif #endif @@ -581,7 +581,7 @@ int SocketHelper::initConnection(std::string errorLogName) { f.close(); } fprintf(stderr, "%s: \n", "accept() failed"); - #ifdef DSRTLX + #ifdef RS_DSPACE close(clientSock[iS]); #endif #endif @@ -684,7 +684,7 @@ int SocketHelper::initConnection(std::string errorLogName) { } fprintf(stderr, "%s: \n", "accept() failed"); //exit(1); - #ifdef DSRTLX + #ifdef RS_DSPACE close(clientSock[iS]); #endif #endif @@ -698,7 +698,7 @@ int SocketHelper::initConnection(std::string errorLogName) { } /* clientSock is connected to a client! */ - printf("Handling VISSIM client #%d %s\n", iS + 1 - N_ACT_CLIENT, inet_ntoa(clientAddr[iS].sin_addr)); + printf("Handling VISSIM client #%zu %s\n", iS + 1 - N_ACT_CLIENT, inet_ntoa(clientAddr[iS].sin_addr)); ClientConnected[iS] = 1; } @@ -747,7 +747,7 @@ int SocketHelper::initConnection(std::string errorLogName) { } printf("recv() failed with error code "); //exit(EXIT_FAILURE); - #ifdef DSRTLX + #ifdef RS_DSPACE close(clientSock[iS]); #endif #endif @@ -797,7 +797,7 @@ int SocketHelper::initConnection(std::string errorLogName) { f.close(); } printf("send failed with error:\n"); - #ifdef DSRTLX + #ifdef RS_DSPACE close(serverSock[iS]); #endif #endif @@ -992,4 +992,4 @@ int SocketHelper::sendData(int sock, int iClient, float simTimeSend, uint8_t sim return 0; -} \ No newline at end of file +} diff --git a/CommonLib/SocketHelper.h b/CommonLib/SocketHelper.h index 2f54f927..3843307a 100644 --- a/CommonLib/SocketHelper.h +++ b/CommonLib/SocketHelper.h @@ -39,7 +39,9 @@ #define SOCKET_ERROR (-1) //extern int close(int __fildes); +#ifndef RS_SKIP_CARMAKER #include +#endif #else #include @@ -147,14 +149,9 @@ class SocketHelper std::vector selfServerAddr; /* Local a ddress */ std::vector clientAddr; /* Client address */ -#ifndef WIN32 - std::vector clientAddrLen; /* Length of client address data structure */ -#else - std::vector clientAddrLen; /* Length of client address data structure */ -#endif + std::vector clientAddrLen; /* Length of client address data structure */ std::vector sendClientByte; std::vector recvClientMsgSize; /* Size of received message */ }; - diff --git a/CommonLib/SocketHelper.py b/CommonLib/SocketHelper.py index 43e595f0..2e4494cd 100644 --- a/CommonLib/SocketHelper.py +++ b/CommonLib/SocketHelper.py @@ -1,36 +1,44 @@ from struct import unpack, pack +from CommonLib.VehDataMsgDefs import VehData +from CommonLib.MsgHelper import MsgHelper, MessageType +from CommonLib.ConfigHelper import ConfigHelper +import typing class SocketHelper: - MSG_HEADER_SIZE = 9 - MSG_EACH_HEADER_SIZE = 3 MSG_CODER = 'utf-8' - def __init__(self): + def __init__(self, config_helper: ConfigHelper, msg_helper: MsgHelper): # empty constructer aa = 1 + self.config_helper = config_helper + self.msg_helper = msg_helper + self.msg_header_size = self.msg_helper.msg_header_size + self.msg_each_header_size = self.msg_helper.msg_each_header_size - def packHeader(self, simState, simTime, totalMsgSize): - buffer = pack(' laneList = Lane::getIDList(); + vector laneList = traci.lane.getIDList(); vector vehClassList; - vector vehTypeList = VehicleType::getIDList(); + vector vehTypeList = traci.vehicletype.getIDList(); for (int i = 0; i < vehTypeList.size(); i++) { string vehType = vehTypeList[i]; - string vehClass = VehicleType::getVehicleClass(vehType); + string vehClass = traci.vehicletype.getVehicleClass(vehType); vehClassList.push_back(vehClass); } for (int i = 0; i < laneList.size(); i++) { string laneId = laneList[i]; - string edgeId = Lane::getEdgeID(laneId); + string edgeId = traci.lane.getEdgeID(laneId); - vector allowClassList = Lane::getAllowed(laneId); - vector disallowClassList = Lane::getDisallowed(laneId); + vector allowClassList = traci.lane.getAllowed(laneId); + vector disallowClassList = traci.lane.getDisallowed(laneId); if (allowClassList.size() == 0 && disallowClassList.size() == 0) { for (int iC = 0; iC < vehClassList.size(); iC++) { string vClass = vehClassList[iC]; - LaneVehClass2SpeedLimit_um[make_pair(laneId, vClass)] = Lane::getMaxSpeed(laneId); + LaneVehClass2SpeedLimit_um[make_pair(laneId, vClass)] = traci.lane.getMaxSpeed(laneId); - EdgeVehClass2SpeedLimit_um[make_pair(edgeId, vClass)] = Lane::getMaxSpeed(laneId); + EdgeVehClass2SpeedLimit_um[make_pair(edgeId, vClass)] = traci.lane.getMaxSpeed(laneId); } } else { for (int iC = 0; iC < allowClassList.size(); iC++) { string vClass = allowClassList[iC]; - LaneVehClass2SpeedLimit_um[make_pair(laneId, vClass)] = Lane::getMaxSpeed(laneId); + LaneVehClass2SpeedLimit_um[make_pair(laneId, vClass)] = traci.lane.getMaxSpeed(laneId); - EdgeVehClass2SpeedLimit_um[make_pair(edgeId, vClass)] = Lane::getMaxSpeed(laneId); + EdgeVehClass2SpeedLimit_um[make_pair(edgeId, vClass)] = traci.lane.getMaxSpeed(laneId); } } } - vector edgeList = Edge::getIDList(); + vector edgeList = traci.edge.getIDList(); for (int i = 0; i < edgeList.size(); i++) { AllEdgeList.insert(edgeList[i]); } @@ -240,7 +244,8 @@ void TrafficHelper::selectSUMO() { void TrafficHelper::close() { if (SUMO_OR_VISSIM.compare("SUMO") == 0) { - Simulation::close(); + /*Simulation::close();*/ + traci.close(); } else if (SUMO_OR_VISSIM.compare("VISSIM") == 0) { @@ -364,12 +369,39 @@ int TrafficHelper::addEgoVehicle(double simTime) { // if is empty if (typeStr.size() == 0) { - Vehicle::add(idStr, ""); + traci.vehicle.add(idStr, ""); } else { - Vehicle::add(idStr, "", typeStr); + traci.vehicle.add(idStr, "", typeStr); } - Vehicle::setColor(idStr, libsumo::TraCIColor(255, 0, 0)); + traci.vehicle.setColor(idStr, libsumo::TraCIColor(255, 0, 0)); + } + + return 1; + } + else { + return 0; + } + +} + +int TrafficHelper::addEgoVehicleFromXY(double simTime, std::string vehicleId, std::string vehicleType, double positionX, double positionY) { + + if (SUMO_OR_VISSIM.compare("SUMO") == 0) { + if (ENABLE_VEH_SIMULATOR) { + // Map the x y positon to an edge for spawing the ego vehicle + libsumo::TraCIRoadPosition edgePosition = traci.simulation.convertRoad(positionX, positionY, false); + // Create a dummy route for the ego vehicle + std::string dummyedgeID = edgePosition.edgeID; + double lanePos = edgePosition.pos; // position along the edge + int laneIndex = edgePosition.laneIndex; + std::string dummyRouteId = "route_" + vehicleId; + std::vector dummyRoute; + dummyRoute.push_back(dummyedgeID); + traci.route.add(dummyRouteId, dummyRoute); + + traci.vehicle.add(vehicleId, dummyRouteId, vehicleType); + traci.vehicle.setColor(vehicleId, libsumo::TraCIColor(255, 0, 0)); } return 1; @@ -384,9 +416,9 @@ int TrafficHelper::addEgoVehicle(double simTime) { int TrafficHelper::checkIfEgoExist(double* simTime) { if (SUMO_OR_VISSIM.compare("SUMO") == 0) { - *simTime = Simulation::getTime(); - - vector VehIdInSimulator = Vehicle::getIDList(); + /**simTime = Simulation::getTime();*/ + *simTime = traci.simulation.getTime(); + vector VehIdInSimulator = traci.vehicle.getIDList(); // check if subscribed vheicle is in the network for (auto& iter : vehicleSubscribeId_v) { @@ -412,7 +444,8 @@ int TrafficHelper::checkIfEgoExist(double* simTime) { int TrafficHelper::getSimulationTime(double* simTime) { if (SUMO_OR_VISSIM.compare("SUMO") == 0) { - *simTime = Simulation::getTime(); + /**simTime = Simulation::getTime();*/ + *simTime = traci.simulation.getTime(); return 1; } else { @@ -422,7 +455,8 @@ int TrafficHelper::getSimulationTime(double* simTime) { int TrafficHelper::runSimulation(double endTime) { if (SUMO_OR_VISSIM.compare("SUMO") == 0) { - Simulation::step(endTime); + /*Simulation::step(endTime);*/ + traci.simulationStep(endTime); return 1; } else { @@ -452,16 +486,16 @@ int TrafficHelper::sendToSUMO(double simTime, MsgHelper Msg_c) { // //unsigned int id = stoi(idStr.substr(12)); // //if (idStr.compare("flow_0.10") == 0) { - // // Vehicle::setColor(idStr, libsumo::TraCIColor(255, 0, 0, 255)); + // // traci.vehicle.setColor(idStr, libsumo::TraCIColor(255, 0, 0, 255)); // //} // //if (idStr.compare("flow_1.9") == 0) { - // // Vehicle::setColor(idStr, libsumo::TraCIColor(0, 166, 255, 255)); + // // traci.vehicle.setColor(idStr, libsumo::TraCIColor(0, 166, 255, 255)); // //} // //if (std::find(Msg_c.VehIdRecv_v.begin(), Msg_c.VehIdRecv_v.end(), idStr) != Msg_c.VehIdRecv_v.end()) { // if (Msg_c.VehDataRecv_um.find(idStr) != Msg_c.VehDataRecv_um.end()) { - // Vehicle::setSpeed(idStr, Msg_c.VehDataRecv_um[idStr].speed); - // Vehicle::setSpeedMode(idStr, 0); // most checks off + // traci.vehicle.setSpeed(idStr, Msg_c.VehDataRecv_um[idStr].speed); + // traci.vehicle.setSpeedMode(idStr, 0); // most checks off // if (ENABLE_VERBOSE) { @@ -471,7 +505,7 @@ int TrafficHelper::sendToSUMO(double simTime, MsgHelper Msg_c) { // } // } // else { - // //Vehicle::setSpeedMode(idStr, 31); + // //traci.vehicle.setSpeedMode(idStr, 31); // } // } @@ -489,17 +523,16 @@ int TrafficHelper::sendToSUMO(double simTime, MsgHelper Msg_c) { //} try { - vector VehIdInSimulator = Vehicle::getIDList(); - + vector VehIdInSimulator = traci.vehicle.getIDList(); //uint32_t color = 4278190335; //uint8_t r = (color >> 24) & 0xFF; //uint8_t g = (color >> 16) & 0xFF; //uint8_t b = (color >> 8) & 0xFF; //uint8_t a = (color) & 0xFF; - //Vehicle::setColor("flow_0.0", libsumo::TraCIColor(r, g, b, a)); + //traci.vehicle.setColor("flow_0.0", libsumo::TraCIColor(r, g, b, a)); for (int iV = 0; iV < VehIdInSimulator.size(); iV++) { - //Vehicle::setSpeedMode(VehIdInSimulator[iV], 31); // default speed mode + //traci.vehicle.setSpeedMode(VehIdInSimulator[iV], 31); // default speed mode } for (int iV = 0; iV < Msg_c.VehDataSend_um[0].size(); iV++) { @@ -520,7 +553,7 @@ int TrafficHelper::sendToSUMO(double simTime, MsgHelper Msg_c) { if (ENABLE_VERBOSE) { if (!ENABLE_VEH_SIMULATOR && find(VehIdInSimulator.begin(), VehIdInSimulator.end(), idStr) != VehIdInSimulator.end()) { - double speedOld = Vehicle::getSpeed(idStr); + double speedOld = traci.vehicle.getSpeed(idStr); printf("Set SUMO id %s from speed %.4f to speed %.4f\n", idStr.c_str(), speedOld, speed); FILE* f = fopen(MasterLogName.c_str(), "a"); @@ -540,17 +573,17 @@ int TrafficHelper::sendToSUMO(double simTime, MsgHelper Msg_c) { // // if is empty // if (typeStr.size() == 0) { - // Vehicle::add(idStr, ""); + // traci.vehicle.add(idStr, ""); // } // else { - // Vehicle::add(idStr, "", typeStr); + // traci.vehicle.add(idStr, "", typeStr); // } - // Vehicle::setColor(idStr, libsumo::TraCIColor(255, 0, 0)); + // traci.vehicle.setColor(idStr, libsumo::TraCIColor(255, 0, 0)); //} // otherwise, move it { if (ENABLE_EXT_DYN) { - Vehicle::setPreviousSpeed(idStr, speed); // setting speed at (k) will be reflected at (k) "immediately", i.e., be considered in the next integration + traci.vehicle.setPreviousSpeed(idStr, speed); // setting speed at (k) will be reflected at (k) "immediately", i.e., be considered in the next integration } else { @@ -559,7 +592,7 @@ int TrafficHelper::sendToSUMO(double simTime, MsgHelper Msg_c) { double positionZ = (double)Msg_c.VehDataSend_um[0][iV].positionZ; double heading = (double)Msg_c.VehDataSend_um[0][iV].heading; - Vehicle::moveToXY(idStr, "", -1, positionX, positionY, heading, 6); // keepRoute 110 => 6 + traci.vehicle.moveToXY(idStr, "", -1, positionX, positionY, heading, 6); // keepRoute 110 => 6 //bit0(keepRoute = 1 when only this bit is set) //1: The vehicle is mapped to the closest edge within it's existing route. If no suitable position is found within 100m mapping fails with an error. //0 : The vehicle is mapped to the closest edge within the network.If that edge does not belong to the original route, the current route is replaced by a new route which consists of that edge only.If no suitable position is found within 100m mapping fails with an error.When using the sublane model the best lateral position that is fully within the lane will be used.Otherwise, the vehicle will drive in the center of the closest lane. @@ -573,19 +606,41 @@ int TrafficHelper::sendToSUMO(double simTime, MsgHelper Msg_c) { } if (VehicleMessageField_set.find("lightIndicators") != VehicleMessageField_set.end()) { - Vehicle::setSignals(idStr, (int)Msg_c.VehDataSend_um[0][iV].lightIndicators); + traci.vehicle.setSignals(idStr, (int)Msg_c.VehDataSend_um[0][iV].lightIndicators); } } } + // if carla is enabled and the reveiced id is within the interested ids + else if (ENABLE_CARLA&&ENABLE_CARLA_EXTERNAL_CONTROL&&find(Config_c->CarlaSetup.InterestedIds.begin(), Config_c->CarlaSetup.InterestedIds.end(), idStr) != Config_c->CarlaSetup.InterestedIds.end()) { + + double positionX = (double)Msg_c.VehDataSend_um[0][iV].positionX; + double positionY = (double)Msg_c.VehDataSend_um[0][iV].positionY; + double positionZ = (double)Msg_c.VehDataSend_um[0][iV].positionZ; + double heading = (double)Msg_c.VehDataSend_um[0][iV].heading; + string vehicleType = Msg_c.VehDataSend_um[0][iV].type; + // If the Intertested Vehicle is not in sumo + bool vehicleExist = false; + for (const std::string& vehId : VehIdInSimulator) { + if (vehId == idStr) { + vehicleExist = true; + } + } + if (!vehicleExist) { + addEgoVehicleFromXY(simTime, idStr, vehicleType, positionX, positionY); + } + traci.vehicle.moveToXY(idStr, "", -1, positionX, positionY, heading, 6); + traci.vehicle.setSpeed(idStr, speed); + + } else { if (1 && find(VehIdInSimulator.begin(), VehIdInSimulator.end(), idStr) != VehIdInSimulator.end()) { if (ENABLE_EXT_DYN) { - Vehicle::setPreviousSpeed(idStr, speed); // setting speed at (k) will be reflected at (k) "immediately", i.e., be considered in the next integration + traci.vehicle.setPreviousSpeed(idStr, speed); // setting speed at (k) will be reflected at (k) "immediately", i.e., be considered in the next integration } else { - Vehicle::setSpeed(idStr, speed); // speed set at (k) essentially will be reflected at (k+1), not considered in the integration - + traci.vehicle.setSpeed(idStr, speed); // speed set at (k) essentially will be reflected at (k+1), not considered in the integration + std::cout << "Set SUMO id " << idStr << " to speed " << speed << std::endl; /* bit0: Regard safe speed bit1 : Regard maximum acceleration @@ -595,12 +650,12 @@ int TrafficHelper::sendToSUMO(double simTime, MsgHelper Msg_c) { bit5 : Disregard right of way within intersections(only applies to foe vehicles that have entered the intersection). */ - Vehicle::setSpeedMode(idStr, Config_c->SumoSetup.SpeedMode); // 000000 most checks off - //Vehicle::setSpeedMode(idStr, 0); // 000000 most checks off - //Vehicle::setSpeedMode(idStr, 24); // 011000 - //Vehicle::setSpeedMode(idStr, 8); // 001000 + //traci.vehicle.setSpeedMode(idStr, Config_c->SumoSetup.SpeedMode); // 000000 most checks off + //traci.vehicle.setSpeedMode(idStr, 0); // 000000 most checks off + //traci.vehicle.setSpeedMode(idStr, 24); // 011000 + //traci.vehicle.setSpeedMode(idStr, 8); // 001000 - //Vehicle::setSpeedFactor(idStr, 1); + //traci.vehicle.setSpeedFactor(idStr, 1); } // change vehicle color if needed @@ -610,7 +665,7 @@ int TrafficHelper::sendToSUMO(double simTime, MsgHelper Msg_c) { uint8_t g = (color >> 16) & 0xFF; uint8_t b = (color >> 8) & 0xFF; uint8_t a = (color) & 0xFF; - Vehicle::setColor(idStr, libsumo::TraCIColor(r, g, b, a)); + traci.vehicle.setColor(idStr, libsumo::TraCIColor(r, g, b, a)); } } @@ -624,7 +679,7 @@ int TrafficHelper::sendToSUMO(double simTime, MsgHelper Msg_c) { for (int iS = 0; iS < Msg_c.TlsDataSend_um[0].size(); iS++) { string idStr = Msg_c.TlsDataSend_um[0][iS].name; - TrafficLight::setRedYellowGreenState(idStr, Msg_c.TlsDataSend_um[0][iS].state); + traci.trafficlights.setRedYellowGreenState(idStr, Msg_c.TlsDataSend_um[0][iS].state); } } @@ -763,8 +818,8 @@ void TrafficHelper::parseSendMsg(MsgHelper MsgIn_c, MsgHelper& MsgOut_c) { void TrafficHelper::runOneStepSimulation() { if (SUMO_OR_VISSIM.compare("SUMO") == 0) { - Simulation::step(); - //traci.simulationStep(); + /*Simulation::step();*/ + traci.simulationStep(); } else if (SUMO_OR_VISSIM.compare("VISSIM") == 0) { @@ -797,8 +852,9 @@ int TrafficHelper::recvFromSUMO(double* simTime, MsgHelper& Msg_c) { VehIdInSimulator.clear(); - *simTime = Simulation::getTime(); - VehIdInSimulator = Vehicle::getIDList(); + /**simTime = Simulation::getTime();*/ + *simTime = traci.simulation.getTime(); + VehIdInSimulator = traci.vehicle.getIDList(); int nVeh = VehIdInSimulator.size(); // number of vehicles @@ -830,7 +886,7 @@ int TrafficHelper::recvFromSUMO(double* simTime, MsgHelper& Msg_c) { double radius = 0; string id = iter; - Edge::subscribeContext(id, libsumo::CMD_GET_VEHICLE_VARIABLE, 100, VehDataSubscribeList, 0, tSimuEnd); + traci.edge.subscribeContext(id, libsumo::CMD_GET_VEHICLE_VARIABLE, 100, VehDataSubscribeList, 0, tSimuEnd); } edgeHasSubscribed = true; @@ -869,8 +925,8 @@ int TrafficHelper::recvFromSUMO(double* simTime, MsgHelper& Msg_c) { double width = 0; // width float width of rendered image in meters double height = 0; // height float height of rendered image in meters double angle = 0; // angle float angle of rendered image in degree - POI::add(poiName, x, y, color, type, layer, imgFile, width, height, angle); - POI::subscribeContext(poiName, libsumo::CMD_GET_VEHICLE_VARIABLE, r, VehDataSubscribeList, 0, tSimuEnd); + traci.poi.add(poiName, x, y, color, type, layer, imgFile, width, height, angle); + traci.poi.subscribeContext(poiName, libsumo::CMD_GET_VEHICLE_VARIABLE, r, VehDataSubscribeList, 0, tSimuEnd); //pointNamePoi_v.push_back(poiName); i++; @@ -886,8 +942,8 @@ int TrafficHelper::recvFromSUMO(double* simTime, MsgHelper& Msg_c) { // ------------------- // get list of all vehicles entered network - vector vehDepartedId_v = Simulation::getDepartedIDList(); - + /*vector vehDepartedId_v = Simulation::getDepartedIDList();*/ + vector vehDepartedId_v = traci.simulation.getDepartedIDList(); allVehicleHasSubscribed = true; // only able to get vehicle subscription for vehicles already in the network int i = 0; @@ -901,7 +957,7 @@ int TrafficHelper::recvFromSUMO(double* simTime, MsgHelper& Msg_c) { if (find(vehDepartedId_v.begin(), vehDepartedId_v.end(), id)!=vehDepartedId_v.end()) { double radius = iter.second; - Vehicle::subscribeContext(id, libsumo::CMD_GET_VEHICLE_VARIABLE, radius, VehDataSubscribeList, 0, tSimuEnd); + traci.vehicle.subscribeContext(id, libsumo::CMD_GET_VEHICLE_VARIABLE, radius, VehDataSubscribeList, 0, tSimuEnd); vehicleHasSubscribed_v[i] = true; } @@ -915,8 +971,8 @@ int TrafficHelper::recvFromSUMO(double* simTime, MsgHelper& Msg_c) { //while Simulation::getMinExpectedNumber() > 0: //for veh_id in Simulation::getDepartedIDList() : - // Vehicle::subscribe(veh_id, [traci.constants.VAR_POSITION]) - // positions = Vehicle::getAllSubscriptionResults() + // traci.vehicle.subscribe(veh_id, [traci.constants.VAR_POSITION]) + // positions = traci.vehicle.getAllSubscriptionResults() // traci.simulationStep() @@ -935,7 +991,7 @@ int TrafficHelper::recvFromSUMO(double* simTime, MsgHelper& Msg_c) { // GET SUBSCRIBED VEHICLE // =========================================================================== libsumo::ContextSubscriptionResults VehicleSubscribeRaw; - VehicleSubscribeRaw = Vehicle::getAllContextSubscriptionResults(); + VehicleSubscribeRaw = traci.vehicle.getAllContextSubscriptionResults(); //{ //int i = 0; @@ -989,7 +1045,7 @@ int TrafficHelper::recvFromSUMO(double* simTime, MsgHelper& Msg_c) { // GET SUBSCRIBED point // =========================================================================== libsumo::ContextSubscriptionResults PointSubscribeRaw; - PointSubscribeRaw = POI::getAllContextSubscriptionResults(); + PointSubscribeRaw = traci.poi.getAllContextSubscriptionResults(); for (auto& it : PointSubscribeRaw) { string poiName = it.first; @@ -1033,7 +1089,7 @@ int TrafficHelper::recvFromSUMO(double* simTime, MsgHelper& Msg_c) { // GET SUBSCRIBED EDGE // =========================================================================== libsumo::ContextSubscriptionResults EdgeSubscribeRaw; - EdgeSubscribeRaw = Edge::getAllContextSubscriptionResults(); + EdgeSubscribeRaw = traci.edge.getAllContextSubscriptionResults(); if (edgeHasSubscribed) { @@ -1106,7 +1162,7 @@ int TrafficHelper::recvFromSUMO(double* simTime, MsgHelper& Msg_c) { // !!!temporary fix // if doing vehicle simulator, e.g., CarMaker, only send limited number of vehicles if (ENABLE_VEH_SIMULATOR) { - libsumo::TraCIPosition posEgo = Vehicle::getPosition(Config_c->CarMakerSetup.EgoId); + libsumo::TraCIPosition posEgo = traci.vehicle.getPosition(Config_c->CarMakerSetup.EgoId); // sort distance, pair distance to ego, vehId vector > dist2ego_v; @@ -1143,7 +1199,8 @@ int TrafficHelper::recvFromSUMO(double* simTime, MsgHelper& Msg_c) { //================= // remove vehicle from list //================= - vector vehArrivedIdList = Simulation::getArrivedIDList(); + //vector vehArrivedIdList = Simulation::getArrivedIDList(); + vector vehArrivedIdList = traci.simulation.getArrivedIDList(); for (int i = 0; i < vehArrivedIdList.size(); i++) { VehicleId2EdgeList_um.erase(vehArrivedIdList[i]); } @@ -1158,8 +1215,8 @@ int TrafficHelper::recvFromSUMO(double* simTime, MsgHelper& Msg_c) { //=================================================== // Retreive DETECTOR configuration for the scenario BEFORE simulation starts //=================================================== - vector detAreaAllId_v = LaneArea::getIDList(); - vector detInductAllId_v = InductionLoop::getIDList(); + vector detAreaAllId_v = traci.lanearea.getIDList(); + vector detInductAllId_v = traci.inductionloop.getIDList(); // obtain detector ids of the selected intersection and subscribe to results @@ -1168,7 +1225,7 @@ int TrafficHelper::recvFromSUMO(double* simTime, MsgHelper& Msg_c) { for (auto it: Config_c->SubscriptionDetectorList.pattern_v){ for (int iD = 0; iD < detAreaAllId_v.size(); iD++) { if (detAreaAllId_v[iD].find(it) != std::string::npos) { - LaneArea::subscribe(detAreaAllId_v[iD], detSubscribeList, 0, tSimuEnd); + traci.lanearea.subscribe(detAreaAllId_v[iD], detSubscribeList, 0, tSimuEnd); } } } @@ -1178,7 +1235,7 @@ int TrafficHelper::recvFromSUMO(double* simTime, MsgHelper& Msg_c) { } libsumo::SubscriptionResults DetSubscribeRaw; - DetSubscribeRaw = LaneArea::getAllSubscriptionResults(); + DetSubscribeRaw = traci.lanearea.getAllSubscriptionResults(); vector tempDetData_v; @@ -1210,7 +1267,7 @@ int TrafficHelper::recvFromSUMO(double* simTime, MsgHelper& Msg_c) { //=================================================== // Retreive DETECTOR configuration for the scenario BEFORE simulation starts //=================================================== - vector sigAllId_v = TrafficLight::getIDList(); + vector sigAllId_v = traci.trafficlights.getIDList(); // obtain detector ids of the selected intersection and subscribe to results @@ -1218,12 +1275,12 @@ int TrafficHelper::recvFromSUMO(double* simTime, MsgHelper& Msg_c) { if (!Config_c->SubscriptionSignalList.subAllSignalFlag) { for (auto it : Config_c->SubscriptionSignalList.signalId_v) { - TrafficLight::subscribe(it.c_str(), sigSubscribeList, 0, tSimuEnd); + traci.trafficlights.subscribe(it.c_str(), sigSubscribeList, 0, tSimuEnd); } } else { for (auto it : sigAllId_v) { - TrafficLight::subscribe(it.c_str(), sigSubscribeList, 0, tSimuEnd); + traci.trafficlights.subscribe(it.c_str(), sigSubscribeList, 0, tSimuEnd); } } @@ -1233,7 +1290,7 @@ int TrafficHelper::recvFromSUMO(double* simTime, MsgHelper& Msg_c) { // if already subscribed, then get signal data out libsumo::SubscriptionResults SigSubscribeRaw; - SigSubscribeRaw = TrafficLight::getAllSubscriptionResults(); + SigSubscribeRaw = traci.trafficlights.getAllSubscriptionResults(); vector tempSigData_v; @@ -1302,9 +1359,9 @@ void TrafficHelper::parserSumoSubscription(libsumo::TraCIResults VehDataSubscrib // if does not have this vehicle yet if (VehicleId2EdgeList_um.find(vehId) == VehicleId2EdgeList_um.end()) { - vector edgeList = Vehicle::getRoute(vehId); + vector edgeList = traci.vehicle.getRoute(vehId); VehicleId2EdgeList_um[vehId] = edgeList; - //vector nextLinkList = Vehicle::getNextLinks(vehId); + //vector nextLinkList = traci.vehicle.getNextLinks(vehId); //int aa = 1; } @@ -1364,20 +1421,20 @@ void TrafficHelper::parserSumoSubscription(libsumo::TraCIResults VehDataSubscrib //================= // get preceding vehicle //================= - pair leaderIdNSpeed = Vehicle::getLeader(vehId, 1000); + pair leaderIdNSpeed = traci.vehicle.getLeader(vehId, 1000); CurVehData.precedingVehicleId = get<0>(leaderIdNSpeed); CurVehData.precedingVehicleDistance = get<1>(leaderIdNSpeed); CurVehData.hasPrecedingVehicle = 0; CurVehData.precedingVehicleSpeed = -1.0; if (CurVehData.precedingVehicleId.compare("") != 0) { CurVehData.hasPrecedingVehicle = 1; - CurVehData.precedingVehicleSpeed = Vehicle::getSpeed(CurVehData.precedingVehicleId); + CurVehData.precedingVehicleSpeed = traci.vehicle.getSpeed(CurVehData.precedingVehicleId); } //================= // get signal information //================= - vector nextTlsList = Vehicle::getNextTLS(vehId); + vector nextTlsList = traci.vehicle.getNextTLS(vehId); if (nextTlsList.size() > 0) { CurVehData.signalLightId = nextTlsList[0].id; @@ -1454,9 +1511,9 @@ void TrafficHelper::parserSumoSubscription(libsumo::TraCIResults VehDataSubscrib // for following information, need to get them one by one rather than through subscription CurVehData.speedLimitChangeDistance = -1; - if (AllEdgeList.find(CurVehData.linkIdNext) != AllEdgeList.end()) { - CurVehData.speedLimitChangeDistance = max(Vehicle::getDrivingDistance(vehId, CurVehData.linkIdNext, 0), -1.0); - } + //if (AllEdgeList.find(CurVehData.linkIdNext) != AllEdgeList.end()) { + // CurVehData.speedLimitChangeDistance = max(traci.vehicle.getDrivingDistance(vehId, CurVehData.linkIdNext, 0), -1.0); + //} //================= // grade @@ -1467,11 +1524,21 @@ void TrafficHelper::parserSumoSubscription(libsumo::TraCIResults VehDataSubscrib //================= // get lane change //================= - //vector bestLanesData = Vehicle::getBestLanes(vehId); + //vector bestLanesData = traci.vehicle.getBestLanes(vehId); CurVehData.activeLaneChange = 0; + //================= + // get length, width, height + //================= + tempDoublePtr = static_pointer_cast (VehDataSubscribeTraciResults[libsumo::VAR_LENGTH]); + CurVehData.length = tempDoublePtr->value; + + tempDoublePtr = static_pointer_cast (VehDataSubscribeTraciResults[libsumo::VAR_WIDTH]); + CurVehData.width = tempDoublePtr->value; + tempDoublePtr = static_pointer_cast (VehDataSubscribeTraciResults[libsumo::VAR_HEIGHT]); + CurVehData.height = tempDoublePtr->value; //================= // get vehicle indicators //================= diff --git a/CommonLib/TrafficHelper.h b/CommonLib/TrafficHelper.h index db44f357..a0746554 100644 --- a/CommonLib/TrafficHelper.h +++ b/CommonLib/TrafficHelper.h @@ -10,8 +10,8 @@ //#include "TraCIAPI.h" //#define NOMINMAX -#include - +//#include +#include "traci/TraCIAPI.h" #include "SocketHelper.h" @@ -23,7 +23,7 @@ class TrafficHelper TrafficHelper(); void connectionSetup(int nClient); - void connectionSetup(std::string trafficIp, int trafficPort, int nClientInput); + void connectionSetup(std::string trafficIp, int trafficPort, int nClientInput, int order); void enableVehSub(); void disableVehSub(); @@ -40,7 +40,7 @@ class TrafficHelper int recvFromTrafficSimulator(double* simTime, MsgHelper& Msg_c); int addEgoVehicle(double simTime); - + int addEgoVehicleFromXY(double simTime, std::string vehicleId, std::string vehicleType, double positionX, double positionY); int checkIfEgoExist(double* simTime); int getSimulationTime(double* simTime); @@ -71,13 +71,13 @@ class TrafficHelper //====================== // This is for SUMO //====================== - //class Client : public TraCIAPI { - //public: - // Client() {}; - // ~Client() {}; - //}; + class Client : public TraCIAPI { + public: + Client() {}; + ~Client() {}; + }; - //Client traci; + Client traci; /******************************************** @@ -139,6 +139,9 @@ class TrafficHelper bool ENABLE_VEH_SIMULATOR = false; + bool ENABLE_CARLA = false; + bool ENABLE_CARLA_EXTERNAL_CONTROL = false; + double tSimuEnd = 90000; diff --git a/CommonLib/VehDataMsgDefs.h b/CommonLib/VehDataMsgDefs.h index b5d9072f..38946a21 100644 --- a/CommonLib/VehDataMsgDefs.h +++ b/CommonLib/VehDataMsgDefs.h @@ -3,7 +3,10 @@ //#include #include #include - +#include +#ifdef RS_DSPACE +#include +#endif // MESSAGE IDENTIFIER 1 // Full vehicle data structure that will be shared between SUMO and other simulators // !!! This does not necessary mean all data directly communicated between simulators @@ -43,9 +46,11 @@ typedef struct { int8_t activeLaneChange; // 1 to the left, -1 to the right, 0 stay on the lane, - // variables not retrievable yet + // variables not retrievable from VISSIM yet float length; float width; + float height; + // variables not retrievable yet float weight; diff --git a/CommonLib/VehDataMsgDefs.py b/CommonLib/VehDataMsgDefs.py new file mode 100644 index 00000000..164484e3 --- /dev/null +++ b/CommonLib/VehDataMsgDefs.py @@ -0,0 +1,67 @@ +from dataclasses import dataclass, field +import ctypes +from typing import List + +@dataclass +class VehData: + # Fixed-size arrays for string-like fields (50 bytes each) + id: str = field(default_factory=lambda: ' ' * 50) # char[50] + type: str = field(default_factory=lambda: ' ' * 50) # char[50] + vehicleClass: str = field(default_factory=lambda: ' ' * 50) # char[50] + + # Floating point and integer fields + speed: float = 0.0 + acceleration: float = 0.0 + positionX: float = 0.0 + positionY: float = 0.0 + positionZ: float = 0.0 + heading: float = 0.0 + color: int = 0 # uint32_t + + linkId: str = field(default_factory=lambda: ' ' * 50) # char[50] + laneId: int = 0 # uint32_t + distanceTravel: float = 0.0 + speedDesired: float = 0.0 + accelerationDesired: float = 0.0 + + hasPrecedingVehicle: int = 0 # Boolean-like integer (0 or 1) + precedingVehicleId: str = field(default_factory=lambda: ' ' * 50) # char[50] + precedingVehicleDistance: float = 0.0 + precedingVehicleSpeed: float = 0.0 + + signalLightId: str = field(default_factory=lambda: ' ' * 50) # char[50] + signalLightHeadId: int = 0 + signalLightDistance: float = 0.0 + signalLightColor: int = 0 # int8_t + + speedLimit: float = 0.0 + speedLimitNext: float = 0.0 + speedLimitChangeDistance: float = 0.0 + + linkIdNext: str = field(default_factory=lambda: ' ' * 50) # char[50] + grade: float = 0.0 + + length: float = 0.0 + width: float = 0.0 + height: float = 0.0 + + activeLaneChange: int = 0 # Boolean-like integer (-1, 0, or 1) + + def get(self, field_name, default=None): + return getattr(self, field_name, default) + + +@dataclass +class TrafficLightData: + id: int # uint16_t + name: str + state: str + + def get(self, field_name, default=None): + return getattr(self, field_name, default) + +@dataclass +class DetectorData: + id: int # uint8_t + name: str + state: int # uint8_t \ No newline at end of file diff --git a/CommonLib/VirEnvHelper.cpp b/CommonLib/VirEnvHelper.cpp index 3d6b05e7..93ca9852 100644 --- a/CommonLib/VirEnvHelper.cpp +++ b/CommonLib/VirEnvHelper.cpp @@ -35,7 +35,7 @@ void VirEnvHelper::shutdown() { catch (...) { Log("Warning: RealSim shutdown failed\n"); } -#else +//#else //try { // Sock_c.socketShutdown(); // Sock_c.socketReset(); @@ -52,13 +52,15 @@ void VirEnvHelper::shutdown() { // Log("Warning: RealSim shutdown failed\n"); //} #endif - veryFirstStep = 1; - TrafficSimulatorId2CarMakerId.clear(); - CmAvailableCarId_queue = queue(); - CmAvailableTruckId_queue = queue(); - CmAvailableBusId_queue = queue(); - TrafficSimulatorId2Remove.clear(); + veryFirstStep = 1; + + TrafficSimulatorId2CarMakerId.clear(); + CmAvailableCarId_queue = queue(); + CmAvailableTruckId_queue = queue(); + CmAvailableBusId_queue = queue(); + TrafficSimulatorId2Remove.clear(); + } @@ -461,6 +463,9 @@ int VirEnvHelper::runStep(double simTime, const char** errorMsg) { } else { + // ELSE means idTs exists in previous time step and continues to exist in this time step + // TrafficSimulatorId2Remove contains all mapped ids from previous synchronization step + // since this idTs is still in the simulation, we need to remove it from TrafficSimulatorId2Remove set if (TrafficSimulatorId2Remove.find(idTs) != TrafficSimulatorId2Remove.end()) { TrafficSimulatorId2Remove.erase(TrafficSimulatorId2Remove.find(idTs)); } @@ -484,7 +489,7 @@ int VirEnvHelper::runStep(double simTime, const char** errorMsg) { // =========================================================================== try { // remove those ids that not exists since last time step - for (auto &it : TrafficSimulatorId2Remove) { + for (auto& it : TrafficSimulatorId2Remove) { string idTs = it; @@ -535,7 +540,7 @@ int VirEnvHelper::runStep(double simTime, const char** errorMsg) { // =========================================================================== try { // update state - TrafficSimulatorId2Remove.clear(); + TrafficSimulatorId2Remove.clear(); // we would need to update vehicle in current simulation step for (auto iter : TrafficSimulatorId2CarMakerId) { string idTs = iter.first; int idCm = iter.second; @@ -602,39 +607,37 @@ int VirEnvHelper::runStep(double simTime, const char** errorMsg) { return ERROR_STEP_UPDATE_STATE; } - } - - - // =========================================================================== - // sync traffic signal light - // =========================================================================== - if (SYNCHRONIZE_TRAFFIC_SIGNAL) { - try { - // loop over each signal light - for (auto it : Msg_c.TlsDataRecv_um) { - string tlsId = it.second.name; - string tlsState = it.second.state; - - // if can find the tlsId, then synchronize it - if (SignalController2HeadIdTrfLightIndex.find(tlsId) != SignalController2HeadIdTrfLightIndex.end()) { - // the unordered_map contains a list of head id and TrfLight index pair, so loop over each to synchronize - for (auto it : SignalController2HeadIdTrfLightIndex[tlsId]) { - TrfLight.Objs[get<1>(it)].State = tlsChar2CmState(tlsState.at(get<0>(it))); + // =========================================================================== + // sync traffic signal light + // =========================================================================== + if (SYNCHRONIZE_TRAFFIC_SIGNAL) { + try { + // loop over each signal light + for (auto it : Msg_c.TlsDataRecv_um) { + string tlsId = it.second.name; + string tlsState = it.second.state; + + // if can find the tlsId, then synchronize it + if (SignalController2HeadIdTrfLightIndex.find(tlsId) != SignalController2HeadIdTrfLightIndex.end()) { + // the unordered_map contains a list of head id and TrfLight index pair, so loop over each to synchronize + for (auto it : SignalController2HeadIdTrfLightIndex[tlsId]) { + TrfLight.Objs[get<1>(it)].State = tlsChar2CmState(tlsState.at(get<0>(it))); + } } - } + } + } + catch (const std::exception& e) { + std::cout << e.what(); + errorMsgStr = "RealSim: Sync traffic signal light failed"; + *errorMsg = errorMsgStr.c_str(); + return ERROR_STEP_SYNC_TRAFFIC_SIGNAL; + } + catch (...) { + errorMsgStr = "RealSim: Sync traffic signal light failed"; + *errorMsg = errorMsgStr.c_str(); + return ERROR_STEP_SYNC_TRAFFIC_SIGNAL; } - } - catch (const std::exception& e) { - std::cout << e.what(); - errorMsgStr = "RealSim: Sync traffic signal light failed"; - *errorMsg = errorMsgStr.c_str(); - return ERROR_STEP_SYNC_TRAFFIC_SIGNAL; - } - catch (...) { - errorMsgStr = "RealSim: Sync traffic signal light failed"; - *errorMsg = errorMsgStr.c_str(); - return ERROR_STEP_SYNC_TRAFFIC_SIGNAL; } } diff --git a/CommonLib/buildRS_2024a.bat b/CommonLib/buildRS_2024a.bat new file mode 100644 index 00000000..8195e05e --- /dev/null +++ b/CommonLib/buildRS_2024a.bat @@ -0,0 +1,2 @@ +start cmd /d /e:on /k ""C:\Program Files\dSPACE ConfigurationDesk 2024-A (24.1)\CFD_vars.bat " & ""dsmake -f DsBuildLibrary_2024a.mk output_filename=RealSimDsLib_2024a source_files="SocketHelper.cpp MsgHelper.cpp VirEnvHelper.cpp VirEnv_Wrapper.cpp" custom_cpp_options="-std=c++11 -IC:\IPG\carmaker\win64-13.1.2\include -DDSRTLX -DRS_DSPACE -DRS_CAVE -DRS_DEBUG" target=Dsx86_32"" " + diff --git a/CommonLib/libRealSimDsLib_2021b.a b/CommonLib/libRealSimDsLib_2021b.a index abf218b85d4f500c8844570451e6a8ca16717a4a..ad7f54dfe48a37f95ea97bcbe6b5e8cf115cfc14 100644 GIT binary patch delta 47780 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