From f1e66e450cef40e052cb5ba45ba9213390cc2e3f Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Fri, 21 Feb 2025 21:26:07 +0100 Subject: [PATCH 01/25] Add requrements and start-build docker scripts --- Dockerfile | 9 +++++---- docker_build.sh | 1 + docker_start.sh | 4 ++++ requirements.txt | 2 +- 4 files changed, 11 insertions(+), 5 deletions(-) create mode 100755 docker_build.sh create mode 100755 docker_start.sh diff --git a/Dockerfile b/Dockerfile index 75de8b3cf..fea23c801 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,10 +22,11 @@ RUN apt-get update \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* +WORKDIR /source/OpenSfM + +# COPY . /source/OpenSfM -COPY . /source/OpenSfM -WORKDIR /source/OpenSfM -RUN pip3 install -r requirements.txt && \ - python3 setup.py build +# RUN pip3 install -r requirements.txt && \ +# python3 setup.py build diff --git a/docker_build.sh b/docker_build.sh new file mode 100755 index 000000000..f9d56eb0c --- /dev/null +++ b/docker_build.sh @@ -0,0 +1 @@ +docker build . -t opensfmc \ No newline at end of file diff --git a/docker_start.sh b/docker_start.sh new file mode 100755 index 000000000..fc6e87176 --- /dev/null +++ b/docker_start.sh @@ -0,0 +1,4 @@ +docker run -it --rm --net host \ +--mount type=bind,source=/home/user/work/OpenSfM-ConePairing,target=/source/OpenSfM \ +--mount type=bind,source=/home/user/work/opensfm_pairing_draft,target=/source/opensfm_pairing_draft \ +opensfmc \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 0d50b21ef..7a00697b3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,7 +5,7 @@ fpdf2==2.4.6 joblib==0.14.1 matplotlib networkx==2.5 -numpy>=1.19 +numpy==1.21 Pillow>=8.1.1 pyproj>=1.9.5.1 pytest==3.0.7 From d4b0216af5041d168c18f7e395134ce97b549571 Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Tue, 25 Feb 2025 11:02:30 +0100 Subject: [PATCH 02/25] Update docker file --- Dockerfile | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/Dockerfile b/Dockerfile index fea23c801..7b27f80b2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,6 +22,37 @@ RUN apt-get update \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* +RUN pip3 install cloudpickle==0.4.0 && \ + pip3 install exifread==2.1.2 && \ + pip3 install flask==2.3.2 && \ + pip3 install fpdf2==2.4.6 && \ + pip3 install joblib==0.14.1 && \ + pip3 install matplotlib && \ + pip3 install networkx==2.5 && \ + pip3 install numpy==1.21 && \ + pip3 install Pillow>=8.1.1 && \ + pip3 install pyproj>=1.9.5.1 && \ + pip3 install pytest==3.0.7 && \ + pip3 install python-dateutil>=2.7 && \ + pip3 install pyyaml==5.4 && \ + pip3 install scipy>=1.10.0 && \ + pip3 install Sphinx==4.2.0 && \ + pip3 install six && \ + pip3 install xmltodict==0.10.2 && \ + pip3 install wheel && \ + pip3 install opencv-python + +RUN pip3 install jupyterlab && \ + pip3 install addict && \ + pip3 install fiona && \ + pip3 install trimesh && \ + pip3 install rasterio && \ + pip3 install manifold3d && \ + pip3 install -U scipy && \ + pip3 install pandas && \ + pip3 install shapely && \ + pip3 install tqdm + WORKDIR /source/OpenSfM # COPY . /source/OpenSfM From ba1c74ba4e558e94c7b0d1396c606749844604d1 Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Tue, 25 Feb 2025 11:02:59 +0100 Subject: [PATCH 03/25] Updated exif reader to support ypr --- opensfm/exif.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/opensfm/exif.py b/opensfm/exif.py index 6b4e76462..c758c4a02 100644 --- a/opensfm/exif.py +++ b/opensfm/exif.py @@ -464,7 +464,8 @@ def extract_capture_time(self) -> float: return 0.0 def extract_opk(self, geo) -> Optional[Dict[str, Any]]: - opk = None + opk_dict = None + ypr_dict = None if self.has_xmp() and geo and "latitude" in geo and "longitude" in geo: ypr = np.array([None, None, None]) @@ -503,6 +504,7 @@ def extract_opk(self, geo) -> Optional[Dict[str, Any]]: ] ) ypr[1] += 90 # DJI's values need to be offset + ypr_dict = {'yaw':ypr[0], 'pitch': ypr[1], 'roll': ypr[2]} except ValueError: logger.debug( 'Invalid yaw/pitch/roll tag in image file "{0:s}"'.format( @@ -567,7 +569,7 @@ def extract_opk(self, geo) -> Optional[Dict[str, Any]]: if m == 0: logger.debug("Cannot compute OPK angles, divider = 0") - return opk + return opk_dict, ypr_dict # Unit vector pointing north xnp /= m @@ -580,12 +582,12 @@ def extract_opk(self, geo) -> Optional[Dict[str, Any]]: # OPK rotation matrix ceb = cen.dot(cnb).dot(cbb) - opk = {} - opk["omega"] = np.degrees(np.arctan2(-ceb[1][2], ceb[2][2])) - opk["phi"] = np.degrees(np.arcsin(ceb[0][2])) - opk["kappa"] = np.degrees(np.arctan2(-ceb[0][1], ceb[0][0])) + opk_dict = {} + opk_dict["omega"] = np.degrees(np.arctan2(-ceb[1][2], ceb[2][2])) + opk_dict["phi"] = np.degrees(np.arcsin(ceb[0][2])) + opk_dict["kappa"] = np.degrees(np.arctan2(-ceb[0][1], ceb[0][0])) - return opk + return opk_dict, ypr_dict def extract_exif(self) -> Dict[str, Any]: width, height = self.extract_image_size() @@ -595,7 +597,7 @@ def extract_exif(self) -> Dict[str, Any]: orientation = self.extract_orientation() geo = self.extract_geo() capture_time = self.extract_capture_time() - opk = self.extract_opk(geo) + opk, ypr = self.extract_opk(geo) d = { "make": make, "model": model, @@ -609,6 +611,7 @@ def extract_exif(self) -> Dict[str, Any]: } if opk: d["opk"] = opk + d["ypr"] = ypr d["camera"] = camera_id(d) return d From 043a306d8d548409fb3d775912a7be112c96ae57 Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Tue, 25 Feb 2025 22:19:29 +0100 Subject: [PATCH 04/25] Fixes --- opensfm/dataset.py | 63 +++++++++ opensfm/matching.py | 31 +++-- opensfm/pairs_selection_by_cones.py | 199 ++++++++++++++++++++++++++++ 3 files changed, 285 insertions(+), 8 deletions(-) create mode 100644 opensfm/pairs_selection_by_cones.py diff --git a/opensfm/dataset.py b/opensfm/dataset.py index 12af6a344..7a748f32d 100644 --- a/opensfm/dataset.py +++ b/opensfm/dataset.py @@ -18,9 +18,12 @@ pymap, masking, rig, + pairs_selection_by_cones ) from opensfm.dataset_base import DataSetBase from PIL.PngImagePlugin import PngImageFile +import rasterio +import trimesh logger: logging.Logger = logging.getLogger(__name__) @@ -112,6 +115,66 @@ def load_image( anydepth=anydepth, grayscale=grayscale, ) + + def load_demmesh(self, dem_name, dem_hight, reference=None): + dem_path = os.path.join(self.data_path, dem_name) + # Create DEM model + with rasterio.open(dem_path) as src: + elevation = src.read(1) # Read the first band + height = elevation.shape[0] + width = elevation.shape[1] + cols, rows = np.meshgrid(np.arange(width), np.arange(height)) + xs, ys = rasterio.transform.xy(src.transform, rows, cols) + xs, ys = np.array(xs).flatten(), np.array(ys).flatten() + + # Converting TIF to topocentric coordinated + if reference is None: + reference = self.load_reference() + tx, ty, tz = [], [], [] + for lon, lat, alt in zip(xs, ys, elevation.flatten()): + x, y, z = reference.to_topocentric(lat, lon, alt) + tx.append(x) + ty.append(y) + tz.append(z) + + tx = np.array(tx).reshape(width, height) + ty = np.array(ty).reshape(width, height) + tz = np.array(tz).reshape(width, height) + + vertices = np.column_stack([tx.flatten(), ty.flatten(), tz.flatten()]) + + # Create triangular faces (mesh grid-based) + faces = [] + for i in range(height - 1): + for j in range(width - 1): + # Define two triangles per grid cell + v1 = i * width + j + v2 = i * width + (j + 1) + v3 = (i + 1) * width + j + v4 = (i + 1) * width + (j + 1) + + faces.append([v1, v2, v3]) # Triangle 1 + faces.append([v2, v4, v3]) # Triangle 2 + + faces = np.array(faces) + + surface_mesh = trimesh.Trimesh(vertices=vertices, faces=faces) + surface_mesh.invert() + + # Extrude model + model_faces = np.array(trimesh.creation.extrude_triangulation(vertices=vertices[:, :2], faces=faces, height=dem_hight).faces) + model_bottom_vertices = vertices.copy() + model_top_vertices = vertices.copy() + model_top_vertices[:, -1] = model_top_vertices[:, -1] + dem_hight + model_vertices = np.concatenate([model_bottom_vertices, model_top_vertices]) + + volume_mesh = trimesh.Trimesh(vertices=model_vertices, faces=model_faces) + return volume_mesh, surface_mesh + + + def save_cones_projection_as_gpkg(self, mesh_list, reference, output_name='cones_projections.gpkg'): + output_path = os.path.join(self.data_path, output_name) + pairs_selection_by_cones.save_cones_projection_as_gpkg(mesh_list, reference, output_path) def image_size(self, image: str) -> Tuple[int, int]: """Height and width of the image.""" diff --git a/opensfm/matching.py b/opensfm/matching.py index a96eee3f0..674a88cd2 100644 --- a/opensfm/matching.py +++ b/opensfm/matching.py @@ -11,6 +11,7 @@ log, multiview, pairs_selection, + pairs_selection_by_cones, pyfeatures, pygeometry, ) @@ -43,14 +44,28 @@ def match_images( all_images = list(set(ref_images + cand_images)) exifs = {im: data.load_exif(im) for im in all_images} - # Generate pairs for matching - pairs, preport = pairs_selection.match_candidates_from_metadata( - ref_images, - cand_images, - exifs, - data, - config_override, - ) + overriden_config = data.config.copy() + overriden_config.update(config_override) + + by_cones = overriden_config.get('pair_selection_by_cones', False) + if by_cones: + pairs, preport = pairs_selection_by_cones.pairing_by_cones_from_dataset( + ref_images, + cand_images, + exifs, + data, + config_override, + ) + + else: + # Generate pairs for matching + pairs, preport = pairs_selection.match_candidates_from_metadata( + ref_images, + cand_images, + exifs, + data, + config_override, + ) # Match them ! return ( diff --git a/opensfm/pairs_selection_by_cones.py b/opensfm/pairs_selection_by_cones.py new file mode 100644 index 000000000..58c69551c --- /dev/null +++ b/opensfm/pairs_selection_by_cones.py @@ -0,0 +1,199 @@ +import numpy as np + +from tqdm import tqdm + +import numpy as np +import math + +import numpy as np +import trimesh + +import math +from scipy.spatial.transform import Rotation as R + +from shapely import MultiPoint, convex_hull +import shapely + +import trimesh +import fiona +from fiona.crs import from_epsg + +import numpy as np +import trimesh + +import logging +logger: logging.Logger = logging.getLogger(__name__) + + +def extract_metadata(images, exifs, reference, camera_pairing_fov): + + # Extract all the metadata for cone matching + metadata = [] + for i in images: + image_exif = exifs[i] + if not 'gps' in image_exif: + logger.warning(f'Image {i} no GPS -> skip') + continue + if not 'ypr' in image_exif: + logger.warning(f'Image {i} no YPR -> skip') + continue + + annotation = { + 'fn': i, + 'lon': image_exif['gps']['longitude'], + 'lat': image_exif['gps']['latitude'], + 'alt': image_exif['gps']['altitude'], + 'yaw': image_exif['ypr']['yaw'], + 'pitch': image_exif['ypr']['pitch'], + 'roll': image_exif['ypr']['roll'], + 'fov': camera_pairing_fov, + } + metadata.append(annotation) + + # Add relative positions + for i in metadata: + x, y, z = reference.to_topocentric(i['lat'], i['lon'], i['alt']) + i['x'] = x + i['y'] = y + i['z'] = z + + return metadata + + +def save_cones_projection_as_gpkg(mesh_list, reference, output_file): + schema = { + 'geometry': 'Polygon', + 'properties': {'name': 'str'} + } + + with fiona.open(output_file, 'w', driver='GPKG', crs=from_epsg(4326), schema=schema) as layer: + for cn, cc in tqdm(mesh_list): + vertex_array = trimesh.convex.hull_points(cc) + ll_point_list = [] + for x, y, z in vertex_array: + lat, lon, _ = reference.to_lla(x, y, z) + ll_point_list.append((lon, lat)) + extent = convex_hull(MultiPoint(ll_point_list)) + + layer.write({ + 'geometry': shapely.geometry.mapping(extent), + 'properties': {'name': cn} + }) + + +def create_fov_cone(point, yaw, pitch, roll, fov, cone_height, cone_sections=32): + """ + Point: x, y, z cone tip + Yaw 0 degrees -> top direction, increased clockwise + Pitch 0 degrees -> top to bottom direction + FOV - cone angle, degrees + """ + + # Create a 3D cone + cone_radius = cone_height * np.tan(math.radians(fov / 2)) + cone = trimesh.creation.cone(radius=cone_radius, height=cone_height, sections=cone_sections) + + # Moving cone tip to 0,0 + cone.apply_translation([0, 0, -cone_height]) + + # Create transformation matrix + transform = np.eye(4) + + # Rotate cone + euler_angles_xyz = (pitch, roll, -1 * yaw) + transform[:3, :3] = R.from_euler('xyz', euler_angles_xyz, degrees=True).as_matrix() # Rotation + + # Shift cone + transform[:3, 3] = point # Translation + cone.apply_transform(transform) + + return cone + + +def match_candidaes_by_fov_cones(metadata, volume_mesh, images_ref=None, images_cand=None): + all_images = [i['fn'] for i in metadata] + if images_ref is None: + images_ref = all_images + if images_cand is None: + images_cand = all_images + + + # Create cones + model_diagonal = math.dist(*volume_mesh.bounds) + cone_list = [] + for i in metadata: + fn = i['fn'] + x = i['x'] + y = i['y'] + z = i['z'] + yaw = i['yaw'] + pitch = i['pitch'] + roll = i['roll'] + fov = i['fov'] + + cone = create_fov_cone(point=(x, y, z), + yaw=yaw, + pitch=pitch, + roll=roll, + fov=fov, + cone_height=model_diagonal) + cone_list.append((fn, cone)) + + clipped_cone_list = [] + + for fn, cone in cone_list: + clipped_cone_list.append((fn, trimesh.boolean.intersection([cone, volume_mesh]))) + + + # Find overlapping cones + pairing_map = dict() + unique_pairs = set() + for c_fn, c_cone in clipped_cone_list: + if c_fn not in images_ref: + continue + pairing_map[c_fn] = [] + for t_fn, t_cone in clipped_cone_list: + if t_fn not in images_cand: + continue + if c_fn == t_fn: + continue + intersection_volume = trimesh.boolean.intersection([c_cone, t_cone]).volume + if intersection_volume > 0: + pairing_map[c_fn].append(t_fn) + unique_pairs.add(tuple(sorted((t_fn, c_fn)))) + + return pairing_map, unique_pairs, clipped_cone_list + + +def pairing_by_cones_from_dataset(ref_images, + cand_images, + exifs, + data, + config_override): + print('############### Cone matching!!!') + data.init_reference() + reference = data.load_reference() + + overriden_config = data.config.copy() + overriden_config.update(config_override) + + c = set() + dem_name = str(overriden_config["dem_path"]) + dem_hight = float(overriden_config["dem_hight"]) + pairing_fov = float(overriden_config["pairing_fov"]) + + metadata = extract_metadata(set(ref_images + cand_images), + exifs, + reference, + pairing_fov) + volume_mesh, _ = data.load_demmesh(dem_name, dem_hight, reference=reference) + + _, c, cone_list = match_candidaes_by_fov_cones( + metadata, + volume_mesh, + images_ref=ref_images, + images_cand=cand_images) + + data.save_cones_projection_as_gpkg(cone_list, reference) + + return c, {"num_pairs_cones": len(c),} \ No newline at end of file From a01cf02fca87c0dd37f1b24a9a303b4d51976202 Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Thu, 27 Feb 2025 14:59:37 +0100 Subject: [PATCH 05/25] readme update --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 727f3af23..1238a0e8f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ OpenSfM ![Docker workflow](https://github.com/mapillary/opensfm/workflows/Docker%20CI/badge.svg) ======= +# Original README.md -## Overview +## Overvie OpenSfM is a Structure from Motion library written in Python. The library serves as a processing pipeline for reconstructing camera poses and 3D scenes from multiple images. It consists of basic modules for Structure from Motion (feature detection/matching, minimal solvers) with a focus on building a robust and scalable reconstruction pipeline. It also integrates external sensor (e.g. GPS, accelerometer) measurements for geographical alignment and robustness. A JavaScript viewer is provided to preview the models and debug the pipeline.

From 21a87a8303a28d7c24a87e41303f11be1aeec4ef Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Thu, 27 Feb 2025 19:44:48 +0100 Subject: [PATCH 06/25] Updated readme --- README.md | 73 ++- cones_config_example.yaml | 8 + doc/source/images/batumi_cones_viz.png | Bin 0 -> 66716 bytes doc/source/images/multiperspective1.png | Bin 0 -> 46213 bytes doc/source/images/multiperspective2.png | Bin 0 -> 21826 bytes runner_notebook.ipynb | 600 ++++++++++++++++++++++++ 6 files changed, 679 insertions(+), 2 deletions(-) create mode 100644 cones_config_example.yaml create mode 100644 doc/source/images/batumi_cones_viz.png create mode 100644 doc/source/images/multiperspective1.png create mode 100644 doc/source/images/multiperspective2.png create mode 100644 runner_notebook.ipynb diff --git a/README.md b/README.md index 1238a0e8f..7357aa798 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,75 @@ -OpenSfM ![Docker workflow](https://github.com/mapillary/opensfm/workflows/Docker%20CI/badge.svg) +# Naive Cone Pairing +**Jupyter-notebooks could be found in this repo https://github.com/aliaksandr960/opensfm_pairing_draft** +## Overview +The image matching pipeline operates as follows: image pairs are initially selected based on metadata and then matched using point-matching algorithms such as SIFT, ORB, ALIKE, or others. There is an attempt to enhance the image pairing process using metadata. + +Leveraging metadata such as yaw, pitch, and roll — allows for the selection of more relevant pairs, rather then brutforce. + +In such cases, utilizing Field of View (FoV) cones could offer advantages over distance- or triangulation-based methods, which are already implemented in OpenSfM. + +![Multiperspective 1](doc/source/images/multiperspective1.png) +![Multiperspective 2](doc/source/images/multiperspective2.png) + +**Field of view cones visualization**: +![Cones](doc/source/images/batumi_cones_viz.png) + +Image matching for perspective aerial images in OpenSfM is also constrained by traditional computer vision algorithms such as SIFT and ORB. Most of these struggle with significant variations in scale, rotation, and perspective. + +**While better image pairing can provide some improvements, it is not a groundbreaking solution — even when accurate yaw, pitch, and roll metadata are available.** + +Since I lack synthetic data generation pipelines or drones to test this hypothesis, the development has been published on GitHub as is. It has been a valuable self-education project. + +Special thanks to @Komzpa and the OpenAerialMap community for their ideas, data, and support. + + +## Usage + + +### Setup +1. Install docker and git + +2. Clone this repo and repo https://github.com/aliaksandr960/opensfm_pairing_draft + +3. Build the docker image by running **sh ./docker_build.sh** + +4. Change paths in docker mounts in **./docker_start.sh** as you need + +5. Run container by executing **sh ./docker_start.sh** + +6. Build OpenSfM by executing inside container **cd /source/OpenSfM && python setup.py build** + +7. Run reconstruction by using **standard OpenSfM commands** or jupyter notebook **runner_notebook.ipynb** + +### Usage + +1. Run container by executing **sh ./docker_start.sh** + +2. Build OpenSfM by executing inside container command **cd /source/OpenSfM && python setup.py build** + +3. Your dataset should contain **config.yaml** to configure **OpenSfM pipelines and cone matching** + +4. Run reconstruction by using **standard OpenSfM commands** or jupyter notebook **runner_notebook.ipynb** + +5. Make sure, due reconstruction there had been created **cones_projections.gpkg** file in dataset folder. It indicates - everything works well. You could inspect projections of cones to the surface by openning it in QGIS or other GIS software. + + +## config.yaml for the cone pairing +*Sample config file could be found in the root of this repo ./cones_config_example.yaml* + +---- + + **pair_selection_by_cones: bool** - to switch on pair selection by cones + +**dem_path: string** - path to GeoTIF DEM in EPSG:4326 (only this projection supported). **DEM should cover only your area of interest**, kind a SRTM 90M 5km x 5km, don't put DEM of the whole country or whole world. + +**dem_hight: float** - clips conuses by DEM and DEM extruded by this hight in meters + +**pairing_fov: float** - conus angle in degrees (camera FOV) for pairing + + + ======= -# Original README.md +# Original OpenSfM Readme ## Overvie OpenSfM is a Structure from Motion library written in Python. The library serves as a processing pipeline for reconstructing camera poses and 3D scenes from multiple images. It consists of basic modules for Structure from Motion (feature detection/matching, minimal solvers) with a focus on building a robust and scalable reconstruction pipeline. It also integrates external sensor (e.g. GPS, accelerometer) measurements for geographical alignment and robustness. A JavaScript viewer is provided to preview the models and debug the pipeline. diff --git a/cones_config_example.yaml b/cones_config_example.yaml new file mode 100644 index 000000000..3f6c3ce32 --- /dev/null +++ b/cones_config_example.yaml @@ -0,0 +1,8 @@ + +# OpenSfM will use the default parameters from opensfm/config.py +# Set here any parameter that you want to override for this dataset +# For example: +pair_selection_by_cones: True +dem_path: '/source/opensfm_pairing_draft/data/batumi_15pic/srtm_dem.tif' +dem_hight: 100 # DEM extrude height +pairing_fov: 60 # Camera FOV (degrees) to use for pairing diff --git a/doc/source/images/batumi_cones_viz.png b/doc/source/images/batumi_cones_viz.png new file mode 100644 index 0000000000000000000000000000000000000000..b1dc26d3816091ec9d5fdd8f1b2f0483dac2ed61 GIT binary patch literal 66716 zcmeEt3?VHg-3=lg3eq5*0z;2fCkslatvP$o6z&T8?%Gb)?p_~UfhaZ~oj^b?H%nI_@S~fpllw7x zrzG-6?2kW^a|M2Iw{!YP_udW!M9~9U(eb^adjqtf?y*Ekr+qZ1}K(@#W^Q#97;Z z3dbbU#-I~ppbOMc@hx8*(YF4XbEvi%9_Hn1edct4g-xzPXSBLmBb|YbN=c9YJqXou zSUIHIJoIaMzeKURm(CIGv_Vd4YG$f|$(`txzZBtB?vbw*P)AR1TO^Q&zA%L@3?Pe5 z9|mw`Rn%QV{db7`Hx$Z{@ZWjaXM`ld|NEQBd~C-5juYfC6zGtbJzhY~z>0?R-|=sN z458xVaLDtYu%o5_XS`SP8W=?X9si^c`Ts*>|35Q`?^^B{81>5kzFK$b>EnvjOFu5y zSF$6-RPo86$o-Y~bSEP3w3G)7oL+id$jDH~=@&?pxVoHJZdbkOkos;Cc*^Gghes-& zZ1GzB?~oZn;qP2?UHK8^=I!&uAWEY(6-jv&xG}Ct3f5!A@50_PDOe zs(pLQTHhe=oxtY)geeU0i>mW9VpeVo(@HXUm?h)Dv@84mxN&`P$SnL}L;Ybz$1DC3 zPyev@>m`3){!cgQcO(kWGPe_waW2QC!bI-O9tZ+8X zFF#>%bOZd-k?*i&83DU0_|{a}O>49g#7=*UJEi#^QO-&D58>^ulRV2Ieh-&ainXZn zNrK_#4Da^M(`3I={OU#-3%rb9i|xF|8)kg>cnNCXqbKa9l8HaupfFl#O25NV#9?Fl z%86p2l1`S8Ozq0wXI1}6-Tx0w+n(8-`n7svr_J;d%cDVk|L5t>a_=lznUnv-rUZr2 zV*r^jAa?5+7W{8II^!QsW*Rq2tFLwb<{kSyyc-KfTCO>x;594K+RM$q7ihazcL*ch zc~$XWqG;X|GX$5ILNZ%zlTaox_;<~_yk(H)vy%Det-Cqt?SFKx4`w@26Rixz>4Ltx zOV{AaB%%zc0HPTc_{mozXu(*$k1X)(<$T#|X>9u6>l-Y&Ug(l%B4!HwiYRO-irA6A zB;KbS7jk+OgdvPj!danzuC@3dJzJ4Qh@7Q*~mCcHUyibDSKYMb9J^@3rG6ue2V@P04!e+rlbLhoC{jZa*2`@=<&tkFR-{d+B`! zzZaTlbaCqUZb<*fN85Fg~ z@x2Dyj;iKQ_BA0b5L=`XA_C99sL;qEZ!h}Kr)qic2YA|uuI>+K6RjxdiVP&n$)$&T zOez3^>rZT4LJI*TO0xd|FKV9iNa=VRm?F!Oeh*s?3E^Rink}AC5)ZAx(j7S+DGkzE zqEA|bTF=zXSJ0#tbZTGk?*%DT>C!C_CWQx;4@#>andx#W5KEtoN1E{x+p1geUH zT*9BmYsrn^(G>hX_(&k2wS*$Q%Ye6d%p~5?!EK9(ov8B7>hN@3Jz#W;c_>2$@|v}t zh-h;#V!uRj(*9!jd4oHls)+DOpWb53Y+c3Ug394OMz)0TTJS)jsONm9L0c|8TCmns zs??j2&1na1Y~khfqk=l{q`{v|yLEExU`C|`{0Q&S$?AS8Qx}1NzleQbDVxVx&&$NQQZ(aZ<28{*=P?7DmlbsE0%RNw63|6_=7*X>y=x{`vYRHmr7dVx24-#qJED?Y5yN=+8~X>Fg9cutn*Y_ zd8x}a99Dl+p*4du<$yW3aJearxraAM8PebhfyNNL_juB<5JDs^Nn=^-hk9ch_HaGw zwSh1)4VAKreWXG%oPXknbToDh{EQAIQynvlC@7U~N?157hoT{$ET(z}9+nR>&~$1f z3F)oy1SftWKTiKnC@r~=eb3RmT75T4yDDII=lgq}7&+WN=6^WHd``w%TcJA+PNTyr zF_sv)?o7Mx$^ZhOxpY{U`ZDdXeCbSmW(s`zB#g1!8XG=SBs=~L4(AI-MuD{NoZR13 zaKB(IsH|q5`k(Yap**%s)2RvVc)ZX&NoDCBOOW()p6mH)FkZR|LUe{4xh}5x|CvYm z1JXRupNS;%g5)x2fP~s0z^;3_tHI5$5~h;q?((ZQvC=F2ih}%~2BEfA1gQ$B*amgD zdkvWM7}0j%?)tf&rM%|GGCswjM;{4A`)@wsRC%|b`Ok`?(K)jQ%qafSRzS?8v8#O*u8fNw$qx~7O=+} zHI_YWKo7R|r^~PKM?DRaeo3S8;>QbZ+a6qK3>%4^;S0@pvSC=b zpCnk>%f}o_pHvZ3?|meY7cA2D$GRo*kw;$dJVOR;E4#((&%UMD*~%r)vxkbCqYP*P z+_M@he|#x$+7As)x?Sm`2QYf;VRR@Y8(!hAajO z{Guu-I&=Kv42A!NW&`%BCTSEQmuY|xETdfkS7w?v+ppxME>eCO%m4GO3aWp=O&e5p zx_{-57zzw^=auItN0HVM?WpZi#UToTU3b}bvrsZI+8?&gys8MXUMH8Pqrflo?zZCX zK{A7T^rHiC1pf!R!Pqe$wTqUlPbuMsfag>@hNM(@JM8qDM*>_g*CORo6eKyAG#hmK z@J6=`n4(W5|4ft^i!Ape!9vz~`8qI2%J<<@Wj~T?WJxjq(Q9E+{AI#%{Gf>Tsot!f zb-`7dVekpIWDjn)wJU{(N--dXNI{ZK!K%SfH_Fnr5|+>D`umF}6BbKr{F>C_rJDGi zo|*b%P_nZ7FYx_(h3Faj*5F3TpqkBHFizB?_zADLfjSIqI%!A-0M!JYx`fzEC4PN+ zr7;~Z|N8Bwuo#5wD})sZ*lJgQ1I+=)LXgm!I7By5H=d=UvL;&C3v2uhZ5GGf zZCRK|-)UBq+AyzkD!YsSdW7!~cx83s|;+93J!lmB2 z#om?NAqf)JF{P~$eHlfAY0`=`87O&ttata=`gG$xjRXE8*s%XcL!BhXUs}tSB-F7f zu@&n|9typaVGe59R5dc=3JFWFoK@IMysfsys13pVtSaT;x)so#J{=v?Q ziv1HRZAzk8>uCR+QvoPRslyHJ)n7jv^Cx{&{k9ayNB_m~Pj}Z6{o`ut6_=Kg1!K{L0YQcPi_f5Yg@t-rG4IaWomWhzTs zHs0#P*UHoaMv};3(?Qfy!LuuW`TrsA{|cI)lGT^}c#<4Z5+etF^$hkgDAQis@RMc> zjn}l*vKuCvqT;Yg+^Wqs9++LK3RZ?_rG2cHRq@Je`A!PV`TmCz=l2&v$&1bE)jG3V zX71K=7w=!Y+DG?Dy+lv?AL}sfxCHa_uq)@saWcvqR#Vx=J{3&=KuL?;N}e3<-hbm` zfiVQebF$W8!^?MWMY1AFm|#T+up<8*^~UMBSbAkdl)cR~=ix`=Su=79OXgo2U$Up~R{ zgMzGtB{DHcG1;&=yo8aj*GY;J-UJyMTR7>##YNR*iYsl@?!$Xlb~S$~ zjFi&F8y+Iry<(HsIbPKxYvHTbQg0_3CFxIg}@*LIw%zQNP!BbDopAhCRm+k)mb z-jCE^>3%PR!irapo=R@dL3+&j`-pw{nU|kd%asF-GFmLmO2fs^%*Dr?edmv{LwNwF z0m;w)4gRfhV@XPS+Cv=+7uPkkqx)f-)BVl|>%SAXQU}LWkNWG$k__@L6)~@m+lWQl z_tFnsf{T<(DoMh)o{jH9+1h4AonA;cRm6|zw+k;I$@2BGe)pilRDkNQ*pWRjKe_q0 zhLKt#Bskgsg@cL|L*sk^fSserG{{8QgnmesA-U&zP$Zv)eopSQ`LtS+VD!(~TL*P& zbiobGOz{Y$`9l7&p6)v?Zh)b+26>v$+k>3RmRTmOZ$ceojh)zYZ(eKs^yI1u(Woke z+HHRB#Y>abBE{^uTk8Cg2VVd97;_Wkp6x&8dIoI1#`%hqrOuj64AH-s-kX}lU>ac8Q7Q;2GHjlSiIGSeQa z?&Ce9PvZ9(Udp@Se1tXcWA;O>^&jjCuh-E~r|hxNz&%)4P2sSVIMzlxw_C?*Vo`_k zB?%H(J0 zx||rO6O;}m&&WyD$pIX!81h-KOpHLMA^%c{Pfz~4db?2Mf%@oXk&IW|6(7a0Hf#aX z_*%ftm)~=t)?o&YU$Y*re>-e((qV~MlDjzEYQSXo#Mnd%p-LWRcnNe!7l?2a*rHb`PQ>Tx7a!0fVom*jLF{JEhFs^$2V z(N>~d9H*{nsdQlp5S)Lrcj!j4-`wIWir++r+;xnRy8tTv)bNr@kw8j4MhwC=8Zj<9 zDe$%(PtFW!y=5OB+CS5g{THHVLfE-ac51XT8h|*l4OlRoZhNWQF^i@y$UOJ>FR}~? z5^SWg`aDO3lPYLf{fMeWrW(y%Ij_3 zFX{XHM(a<|w^S`*cyYujgnZ#XAA4{Y;2g}BB*{^AvHpPsH}{;T03z}nsrc68cCyZU zr{$R0`&KEdVWhmH*7(nVo+h_1A<(iji0&^;pOC5h6?>RXfpRhvCVvPLO;5wcyV* z#moD~Mchx4YFpt^Nfg>^Wz5BWiOkQ$i9-X=@8iQR@{kL2y?jekT+bqT85|x-c)BQAv69N zlGBO!fO>?2PF;Z3yU$`CWx{x@g^rOu+Qn+q%i8it2FgsIX_7V?>GH8amx!p5bU^on z3om|PVO9f-TVl!?o4w$ME>t0-*mF72ShBB=n7WYl|NW9Sab9p4%FCb9Y^^&oYcB=P z0YK@Af?G5kjnt8gaZ(^}F19EwMvlhX8y1&IhqVKs!dAh|*9MuMc4nbA=LisX@ z6XL^9KVzQrVt#e~!50n%nb~Y}%GQoh?uM)<0c4+HbzT^Ch6g^(G^R5+?-4E3V=+JF zFtu?oH-e@#075>@E7~0P8)8mIG78`jaT$!&Lt-xo1+bY3Cn$wT>hBtX!{N?xGGn($$LZ7kC=YshR#?=iMvamtG9d`~ zTIspu$dzw#iDrL$V~LKM*M$oqc;A28sN+N&EUO_)%Fpgrl7cBu$c+I^RJX)bDA&>HikPS3<}9FZSIDnZgpD(@UNg5KIS1Cfnie4p><%(O=!O zittrJP$)wtdTfB4(NM$cfGJgu-!lCy0279(MgmM0`rr8<`Y_SlTEbuk%L|M2=tFO= z5#yz1Glyi`G`KxRm{i=*G`UO*jYQCk?*CQw2K=em^>h3X6hE*u!b zoT~(`>If~GO(NzTL#vv?06E{9x~$X2U48T%R_)i(Tb*dxFkWt8=xAkiREB)y6a8#W zRQQNx1#LF=$y#e%^t*QT>x^3^HjaXIVon83!3yxZ&rC{M?cC7}b7(unfxd6FO;|Gz z>v0%YJov)x$Ow01fx%0%W#4i-JC<1h@E%~v^C?e!_|47*yGfYiBpHOH@W+SD!;_zh zFHc{*{GE_^9RH3GTY5`D6=P6VR=4(ejP>dJx!U%u{oxDlE4UGghAkZ?sf{uQHuv8U3Y2;2+KPt&$kKXJ$x)thHE}$e)DDc!18tt1+yT z7|EY~YS@3f&s5WgiHrK7C&H*M3?Xk$FwU4u0BeWPFz)Ll#AMqc}aC4~Zj(h~nwdj}sh=O?tk(3Ljrr5@nmsHriA4NkFBj#8=%k)=u%fYSP&Qz`_>`m&=b!SD0>2^TeDjl- z@3r^_CJy~qmY#meOTKCY2Ekh^I6=Xyano?`gJ@;CKEoI3&&lj8mpeurrl;(PqfNrB z@Ig`G#=0(gi#9O|zqX3(qWfcGW3yP_bAN7aZJpk3YHfwv_OmcrYFdn^#?HjV#@_fZ zU_d)eJDos$Nn%?b?{62F%^jKSrh=CLil>SS!e?i*Z)5r`4-O8d;+%*_P|6M!iS>;0 zcZm$^tS^91F%VvOv2j41jujx(S25t2@m3$r@nmjet^@Hv>}D0~KX9H5kBRbcV! zIiz_0hGIKI4u)zSLG`{QY=b3T1%5uBFXf2U|n zXYPfA`S)YSVNEceGoFbXJ^40`y*HtJ%TA*KrUU%df0d-KRO@38f5*!6hUc!oys?zf z|7r~C#V_&*E*b0Cm#ra~Xku022)|#pR=}Z%iNNn7dvRN=Kg}2#3uUGJ2(@qSP)*l= zP1|xY09(9}B+<)ryo&$$L7)ETduEZ;`uUF>}PGoX^f6*U_b>;{cz~v?TQfF z`xtZgwV`{5>_xub!YGa#9kGTuY`$`WvOsHtG$GDtyDZ(IsqHV8+4wjvv9rAem1$)u zL@a8bopZmeU!QKstPrM?gC`)SVV!?xyb`{$A*CP6uRJCa{T88bVgYn+cry7qqNTAd zR?ot-u5tFhtc@;Bv(Ne74Z4*=y5}YTX>=FCckkS}$AK^7^&;$FWNLx>n>C=C;-%`A-AlI{8j! zJKyH5;7D6|pNpno<0CVRsLYOvV1UcmNds9(qzggAV(Y|8GJsFC?w+Z^FZYolEeL6E z=lXxQ>GJ7W#Lro=7C=FSJ=8|nYxV4-mZ0;T?b-@=VVND`L`l@$*R<)P_=K@0I20*m z!HuANs_eu`>owfxG2AW7PpUeyL;4z)+R%OT1FB1oBe;pcn`(~NJu%hPie@|OT$dEj zDMKAv65&K^tSbApJR1VMx8f=Ak4cQFtL_rzU>Ztfd`1W!dyvVly5-$c-}f6mH1skF zf+DjGU5V{Duc*H)QO2iwuSG{i1*06Z8iyi(JMEYTvG4p53_bRbU99`fNb zb@rrwtmZ1dUjIUSSK{#%NVRxt-DO#!#4JfT4-9(#E)VSo^*7TdXVfmo6GuZrlkJL2 z?O9)5@(L3uH7z&C*L#XRU0kq_(W&oU)^1*o!wr=8Nw07>xmaobMFoBMw`> z)t#PE(z9N(LM}x{*N&iD&KUMrDr{&X`#?eLnH__2ozAinInZ z+MQ5drmwY}Kg@Z90BE7z`NBa)5u27Y#^|m_oLaVysj4bFL+&m~MRpgvzsXC-o!=OX_wQ6CJ zy*_YE>+LGYn}(bK6QZG@qJ59LD22N-JPOfyP7Z0mwsKIm!ngv-2nT8FrSgMm>8$T} zYNmY0kmY*E*#3=$cIXkCNf-Kuyx_y;t=g86Wb86k&ON>;u!O@!MF%cD26Hk_7@+A8 z20!U&J(5wyfV#hMYzd>0b};{R-DTg2&VUj8QCB9P*&` zb(7riJQ&>6HoqP=vt*AoeEg@Fz!ZdT&?Uip74_E5ASUP>sDF?wtZcEu^lJFhaTCYg z#qP&uNU526w*FN0L)+{WP*prKq{gYnR*np^*Sb0M+d&!IvMzz`wB)#W*^4c9vezEF zUWzO=yOa$d)SrE|{P#OqN6^aO%9W2zVYn$DLmM_;$(uJY<)1kJ$KCudVzP1x>^ynrc=TCTjGEFVST4i9IxVx-%VD+mB?jNy zEe(_ldGTD!rc0B09p^0u`xVou?sV}xYE#6^Sqn=`bY!ILx8mmMb}gCsj2`ikzLf^}cRtV?t!0oToyu*F*x(L|h(Twq_v9%RvXTOoCmM z`X9-zmxx}lOr~*T{0Ik~HPIgx&{QWcSB7|syiX@b_Gy)byVNBPIZa*fUZITmxg#gp zr2_c)@uO}vQrj7T8tdwaJ-CtO3-%tr<+EHliTmewJTZ)NS6YP-pGP8EhuKj zh23RJ@Om}U*oayI?3}2LP56Y=+y&;`$9`HpDsh$;kSIrG+b=M;54Xec=*nAUcNCfl znq^|%?q~0chWb!P#Y|tCnC%-oT3t-C)y+10B z^YA-U{fAEa=L+!KDTzv{YJXy?*RNkEXs!1|5et1#OjN`+Agk?IqT03_Qzh8_cLhw6-_)D`@IFxL&+iNDrtXypQxtBC3#Pj zyAgONFt@l^VVX^h2jgttYp}bUQcA+`BajFh$L7iu)KK&e{wwW$a;3>SMlo?(z?H`CK^SNB zpO&|Vm_W^xJ6KDkaJ*hje}d1)23*n&zBe0Z*Xw#bs~ju$+*LlmHcpdgb9%Maj`iC) zr>=OFlKKSnu!En_c%vvKt^U0^YkIi9b-3lA_g?S8*+(|z4Y1bZULPeCgiZn{-qJc+ zxGas<5jaM%PMH}w=CF}?G`_v-7h#?mm4ESoOrcTU6*L`@c6UTk{v^MG4$0Q;_{|7^ zn_ekSqqvfkoYfG~t#gcF`>O)6FuIAUD(TMSPLN9?2sh=>j*RG8-PLW;2qsDbOLB}Tjf6-F0GUclPnoD8 zGZg~=U74JVeLg9AP4njhBO z&lbi~flEZ68F6y&r}j@81Fx=FUHuO1+E=nP%icPyIub*sM_T2si|SsW{M=RJOOw}I zK|^R5azjRCH3rdG7l=kV$JsL&Cy5B}EeD{;Jq>lyGB|X!@tP{58xF~Q9Tz`7IbWU@ zpRO01#1>23C`~(6B1Ya{wZGykgbDP&+&FErHpo+9o(4aR%Ms|nB~QB08;%D`wTsI- z-;tC7!vI7O?_<9equcO2FX@?2&gYdzg$ld*&Cm$*)?CSbXmbZ%(S?gB^~|CPs+UCp z&}^e4ZdPHZ0Yu!g%!0MhkdEXggpY>YuS}8WQ|^^cvxOGwKPiy zw#U2KDwCoMR+fN{@*pJfunqXSJm}b|^-#ENd$bkByo$3xS_(-o$7>d)g5$m5EunH# zN5?g4Qkmh*S0vKXm*Z(R`ftnWFz9{_yXLjVZ%328H}v&Bkk1s~Dz!PCRBvrDJZ6t2 zf{fJ31V+GX5oO17HJ1G-C^lnhh1}#`ir6?Z{wJZd2OjU2HiK;qd1M79daWvqJW<`j zm$w##F-S@!*W##Dm*pQ{ki62F2|p0i&{t3~jBJ>=?5JE)Sc|rqx?N_LM0`)vT4v_F zkc@rv#gH>cRdjTt=;>T#c!$HUG^Uvzk@@^in5s(HNt{<3dSmB9=$lgP{AA@4fNAi$ z5zokB$aE&B!bY0~x5Yy$UbpVmc+fz_GYWasbV$kAbD^9*yamn^>7-O{=zw_;nOWdd zWTa@`dkrO;%j~>@9m^NHWvU%y5Q|BAdU}=x?n%&xvG&}qJOtoyR^|VZu_9dm)sO?q zuWa=;jj_Ewho$o6b{A@x9=XB+Moh!Ggi=<$tOPCOwvyT#+ zegjq=#}^N9r{>Ye?!z{5cw*RN6=WlCQ=ZRC+&^^*x>=kgQJNtM-SgD6ILR8y4a)OD zc!=IMY3n3qz*K&A4VU-+eRi{W3>s5r5=&+*C7NPQ-0_Vlttce<6b5kVf8nM7)&f++ z>Wd|{BFRUM(OtKP>R)kd`cueb+7nV(?eGQiLs+CnG9LZ}bRlp7G7j-F;dGE(I4bw) z-DK#o)Fac%7LAEb#b^wP z7F&8*)v@!@K)7Z}VZ45#SpRdQSrPA4xN(fe`zwQ=Jz*Tn-^QBWvK8v`0G_6gGrkb) zyA(n)ZJlrHi^|}w=Qv~`S>IwigyW)OfH*QAjEA0GFUkE7Td#V$BXM%B{+0Z5OK{d{ z2x6_S5`?VSH6eZ}p9rXTlIl5FIK%E7pWNM;`}Os!V3i*9v@mJp%}uk=gBs*VDvFAP zTx@KL5#^@Z)I_c>2@-2K>iQnE6*yAHc1x<|I%FKW2P&Qi_YeRvgwpm?V&C+WA2kwzeF`n$>AkmF@xo2`rbqYiS}a8Q>u z95xa@$3(i_P#@6*Ygtq`89Hy03_n~x19w!7eFcS#x6zcDn!B~4$xfNbItZb29m1CN z;#3OIc!}a7W}h9@-nsJ}?)0q(6%FoNHW!Cp4B0DAjm5pS(l6Xd>2K~uhg8{^L z`I3x~%DxC9V&Ji;Z`Ok!02*?ieKi?dH8xhrrM<(y!B56TeJlTfZ!C1w5};OfCeT}y zLX04*#ie}GLRE`F*?5eUE0@+gR1Zy*)*>D#O4r=pI6Bs+r zbfs-z2sS<=mFe`e?U4sn=xDrupwR91gwO@?`^2mF6|5n|!FwS}wd5vmcn6=*we1@gN@#CgXu3o3yUc-&QZUGfSST?fEzZWU&cMaeD zq?}|W{9r-#xe4nJY!ehJVv>*RBb?g9kzE*<4gDuDz_r zq1g;6ezWtWlu}tUgGd%<@9HIKl4DT1aUho|;@k}-OBXRVW(+9D2laHz^Kgfg&066I#?Q`cuhWIow*ewZtu_8!k9OrW&TAFy zwS=BeK}Md(0>_6bv0X;iy!oB7=dRE0)6 zs@n~@y0e1W*+*YMlcN{Ras&%6&sLgFNG|qId;!YlLT3F7lIUW ztc1>s0A(3D+`4f!U@ZJ+Q$U{%PV0VvdW$bD&e%PCW&Tn2#!2f!=p1H|FC zFjypAc){bhC4o-TqVHNia6%<8dzxF{~t!iZ>xC`4C9MRti$yj4%7bNH# z^o1>T0C96&Th^{EnND!uCycn*JrK6z8no~GTd{-~j8=(bIj`!Yi5(+PSL0AnqQwb# znCOci?D{$WP%CMs5MxO~s%E$ZOuq$WE0QGhUDDFL9KgDMkbGeBKRgZ$O8@(_p=s+h zU66S&Wn3!|0xhYqMG7$@-HzkBS6IK46-(|eudXUhNji=TxEvZ^MM;t4Con4g0D^hR zr!Xv$or~BvI@x=7H)q@B!W}mwPP+S39mu9Ys!{2#^&mf4SkKGliz=_m;e!Gidof6^ z-E91X(8UcDVOuB6&Q}UiNFLYESBOmUG1ieYrL{u9B)K>3zeJw(}A!cdQG2i8h8pZbMM3C9%Pzoj6LLBSd!)H1iz4a zn6Yf2fNjCBEk4rgI~2RTSYLQ9E4tuvG%lK@n5r<}n0Go8Nrv15hLQjR(Zd(|ka^&D zbyKhBRV`N5Yrj~E+`R@Dd~hbdk(bTx`9bl7iQWDfHqLQq76-1pZ-osU0M1X-hTJ%Q zHy5`~vM7ac4)M~&QzhT^$Gs?DK0Y{D-I@5(;1QNUam3R5IjkuJ#)M-)0x~!_f09e# z#3b*{eg`;*fk+=)D^3q6`j$A3$Kd^ijP1`RRYCN(FGxkyax&a5Cv=s|lmjh@0GU^% zL(uuzcHq98A}x3bv~wzUCf+ZLp_`rI9%Wn?54*d#^AGLo=&}4MgyZ4Ve$=v`aC|s= zImBXUOjk5hia_Z|WSXkSiqJ=(RR&MS623GY9M0Zh#4u{dG;HDTQ~)FlBE)UJXVku! zln}f(L~e=B3X#$6Mr^YOyFNf!k2z)=bgtqxz+;KW+d6IecF!>|m|I&j4vyB#Tggsh zX~lzzja_l2&R%XiPj6W39-ew1fFW!Ss5n~C_8;AfLWtta8HDjl9p=UAO8mGk{YnuNy@#{zM#h5R zp3(V^eelw2NZS(=3(YYM>?urRM`qhDZq|!S@FvH(WupnitMhj0dfaRguPX+xXNpPV zX^NiRQ<4)1neuvk+}Lcseh*L|!w(QL8NoR-p$N&hXPIKRt-(%%gqz`uwWL|eF&bFo zNPUi@t@rMB$h-D#ySCHYSS04bbN^8E`8t4NP-kAUI@nD)7iCC!RWjuDH61#vi1RmJ(lFI`<^u(U$e86%pyMj+~8?k+~} z>+j|&7KkW(+vd)W5ELHGES686lrzkHC)ZLRYY5QEIMPK1ztDbU=WeV?a!LL|@Jy_T z?tP7F^njICFXlUeqbUm_)}C;$L%-Pf>xCU zW)|5?=`b zr2za&G4;o|(quimb2X1Z9xcLm_IfxKWa>1u*}-1eW6oProBa$6{owdm&qEVru*QZv zAY%iPH)k!daG3}*9P|$rkU%eZDq(Ka%bX>7{)rIovyZmmZe#EUEly#)QF&iRbUU=C z?KBng)rqjw`q(n>6~ax6EE=)mV_{=SBQ^mZUvwr!Kk>6HcpFG)79 zak##*;3psRm5W7qMa+=%2NNvVoF>?!J6(e@W&Hi7q=h9w^(xmVZpq_TQeVOPw}wB1 zma25=eVL5jEV=8FuV|)<;gZ_L{yDt!4t{;~@fC+tw6th#7+QdXdCBvS6Eo5%ZU(<* z-eQ-X?F@t#ZPAFu1Mt7$!mwpf0?0HSCMO5>9fRBxd_;6J<;NtC1WnyXo;Uq*Z^sWo z1ndla7(OAM%qkx5g%TMIt~1H&53n!&(Z84n^uZW~xgA%$+-iR|#zt{3o?rR;fl5{; z7?sL2ShHu-#QOUB-aPO0L7dxt7Wb*etrT8R2;nV zq1z^^zEY}$fyj2*YzyBWetAaCK>{w)CnJ`2a|Q_Px2rh1bkrPg7mSUmHe$!T`Lb~P z*e};#oSVarrWXk>@C`&}zpG=Cf3{D#3#_3D+&C7{%HSanJWMp=NG@gUh^7yH^*YU; zM(HtvJF%d0K3NDS#oO`A z-FFE_Y7yV|#zs93YAGH*P>C@SuEg!Bv#7i#iKy>6YaES)A=e5VUY;xC=jUhop=9Is zD5F5UXh*o(A$NOjVWDgg`r?%{DDOH$o z{!=)27*K_-9w%Lx!!dm$9QFZM7MRGN-Ws+6t;#Dukau*=0!AwuwbmT&TM(Aa3J6rj z4z9Z#Bi~F5yfzCQVnYixk=-vRvv_(AsU;OTQs{dE1t)uugm_$y`-GcAbjAT8RWHRV zLulx+Rl*m{S0!jAOivCr)Yf`u%|bcUb4r%9g*jU6WVE5L@ zy=2M!*fo)zqnm;~jJ*rA!jx%&udLC7d!_3v@Bk+eSUArQwjw6*^)1kkD;m1R?-1Rs zT|Br=h52%q>J--4uDW21p(vtDPips6+`ry{iigzUt7_A=b@hcu)$Cb5o@_eY!ffWv zb9hUIjVt`OoF3u)Y=c+BS+w5LdK?}JR9A{uR0cl{^z=Ni56=rv;g;Ef1EYM*T#X+4 zx-z6db{zQJ-BbPj1B6k=P&H!Ci???bGHNmp2%UyKb9y={_r1Po7x-LdIE)wJ0GxhY zE@nsL^>OQIhoNL%f+E%_mdx`jDk>_Sk=`}uNb#}qme?xC6J~CiouP;P2N>HJp#A7e zB{-iOxm#u8G8dqbR#YmaT3wlz%){}V4QC*dEO{{k?Rd2=a%}vsCa(<`-jTP3U(MzG zV37f+1wzrYfH;n0(zE&RR*Dbn8Vsl|I;#$Y<}dUtoG0eu2$R?9RKI1{t=4S+Ubt^5 zA6tjVFFeW8LG|2!_a!D++PxWDFW9TDbm4MF*u<~oj=GQv4V(Q1Drcd8nEey}Oy-zO zVx2d#jM5<`aqpLAZh7#2$}WW48#qCcd%sGR4W!kgi^$*8I(>lvIfziA(UO-;7(-E$ z2Elb5a(pzFf#PqFuf{sDSo+`5(sbdC<#ywZ=GFvk2c7VRA7xcqU``8k#T-s5bCs;b zR#tMY)U{Xs?_K~Bg$YHvFRlKPmvfdvBHGCb`topL(3r*ar^gz*v^L2CqD({g2hv~n znw`|p${g~gHo%44!!`vDMoUTMwMBbt1X9=C1Z87e-A`ySR^!?i=jVd~XviMOwBH@i zEB{EZwv88VvD}WKeGm{`Gy9AIC-;xq`W-hdp+v`~G_x3}`0vjP%;Ccz(h;cS6K(v3 zJ%e4LM*pz$30Uk!ah2kHehdkR?kV(<@T^~BQ&pxYTi22zx$X7 zw`Ahl-dJ|~8`kI=>7G0$h#w!A5_J3!d@2PcrrEPnTRs)?1qM}b*AUb}2&ehc zQMHSEo}4kT0>cwomiVT0f0>t#<7)^7JnI z97u?P`xE+>o|Wmh`)5M!l4W~Bj743US9j`0TdzGbx25T`b!9#&d=rz`q@#^B>|Oo+ zotv4=GZEypwqf=leB`$(9Dl}#%L3@; zMx2a%5l=ExrR+*LxCD=*j?~?#?}NEDsy}kafWx*Z^)rVt=Jp*4jmF%)yB6m)w4j!8 zt?yb_44R}$CUkojb_tfwj5FI`t7w02fIb9vlr6kl z7%>Wxn5%SWBkkU`Svs?_+NGgfE^_YB95UAJc828d=~cqagA_FQ+z35r3uDL@-y}VC zw%#WH*!D*W8K|OMbC|8%`N+;3FI0b*d-!VJB-nVT+oWXWPe8`@KPK&gsrdS51S+zU zp~6ES6lXMNf43`pmph2k#8+NC1D7~_kuTpz^!PTF_(rB1yDA+Dy&|tSMAKVym0!on zX?SMWA92&=eAAkZ+<^dd%p{}YtD*sg8PZx}0JATecpOQ80tlzJLO%M@euw6%!;S%~ zYKb4~_!sP*ck{k1j9N1tgwBl(ig)B*OZQ)8mUR~%pEX||=veW z*$bkW>Do1oY`{_@5KcF;J#qR!G+k9x8(q5&?(Rj36lrlU?z9wlm*N&YxH|-Ei$ifJ z?gR)XICV8z{CPriSxb1@gW%gmbD`*|PRa=KtMBWD2mSm^wO7hKROkgUb8{8`RF z>1O~=1NmC@D36ldH`bGKrAa-j7I2d)dgu#$?RWAExACSDcw*38U} zVd5w{^C?klb>g|+^G?svzXUr?+_~}9mvdt9B;cR=%JaoNQk^Ca<>^QgO|QXO#rN-P z(gXyJE*GD}-ah5s=u+oyoS9A9V;mhzMlF+Enb)sZV#4kttb5uQYLwqLrZC#NGamF7 zNRa6&WjJ@&*^;`Bi?bGTl=$bKi_X(Ag~Tb0x~2qk2dO%BJ$w4^buDkkU@74!CJ5Zs z$1H-HQODn>Kg8m(!QA@CS5@WO$vi6qP2oF0YzmL{fzZH*oHFA|s|W6@BtQdA z)vA->ij-llbalhTMfuB8LfQA(h4A9BZ4-9I=|(!->qDN?)3g(vFRm@V^`Jyu`hQne zI7VpF?79$yq6z7Lk5ZSjl}g#gZC7_E}wuG<7>TDn@0@k+G&No>MO@S=;G=c z+A_oJ??~DLai83z0%A0Ia2GdMm}FfmBDCpg1S*I@6w%#V)yRP`X9?hE` zCSob^${2l~&2z^$7TM{o3=ya>>VD=lO6_x*gKt#PfxJ=lM(76}w((#%xkSwty6pti zk^1Vx|9h9d{4^OzUB>h!@BmtI_G8}IYG3gVG>*Z0G0KRu}aB zosR3TTT@lp!Z!TFLA4epdLV3RvMPc&>Y2!h-aJRj0G8+a6U`qD=TbO}TV_Z2EwDFW zrB5%n@^3jb4m&ZR7MtwUr!p=URF@F-t|LbI?<5&of5-e_&C_trdS8kz65ud5tOa?55WzqYDtfhj>W#_ku(&a{w^~DvnNu!wh*7q>u0Rgq0eIk z?Ib;F)6Zn`_Khvq_PynlmW{3Rr4l-d1eqVd_fI0>Jpl)}A2?BUM;q~;y$oJ~XWP`a z?#+$*zdg8jha30ZNSgk+2jM)&^WNepKmCnVmfi6&F|3v?J^uJ9fyyqvRqGm8+2gCN zJG(&8+iSLB5BB58mggIogO~0oZ4uCLg{@PiawHG`46BL*i8sJ(l~K_Q<{8i=^RJ7_ z-@J~UlzBd`8$G)5W@}(uK zv>z)+G=VHzY#KkTZqIzm<6k4Nu+8hhDY0a)v6b^dws7QkQM}rDX{EIIV3TU)iI&Q{W-F(HbTr^5=Dymd%rwLjHW+|A21`gSxm zMGVsTVN1S878De$gZ~;E8?zTvgWi_U_Yo42TbL)lFWN60E3d=VNtBzq^%WT>dE8oWr#ExT_J*t2R!8uwIcya#woR0`IsI7TcU;w?9brNK z*A$}LS3?JjPIJqb1oj;chN&g*V+%@iyuOI;Z7MYEwReukxodKJ!NXFgi-a1clRJ=*janub zbiLSTBMN+-O}w51XXcMjPIRpJwA#P^`M3@TfwR8Gv>yn{)N}^HIOiu`U4CEf?I}*o zVC5Ejt>AVkI62IhX9XUeC7dn{>I+WE7o+>#C3SLSYv7P9KP+Kmp z;8XS3cFTp9&>25b|3VJM$LtN+~Yxr1R1BZ91>vDtJgp`kd1+R1a zLl#;R+KagEZ#5eaNYz)ybbgJM7B*`W%cbCGNp#j*R=d&rbCGMAlS)>}MovsmW@Aq> zBVR29Ovf&JRx_*SAOrr(mEAnh)~iX3S*`K~v~ZiSkq&7OH1rd?JsX*iMF=%C9Z9t) zQhAcZqY+#_Irh%qw6<*U8--4Jym0z%$QOm2OZ)_z@sCZd553LcR?DUW=#=e%w)uy@g zEv3N21coaz7HpwOgc|lbJwj}uR_-WUFXHgzhdGIdA@VF!zh#^`k5g>V(jfb<)E>7s zXQhF=IlQ;MDZfA|MDZRW$*${Y2Xx8CarfYO%_$@rpvH;%{8 z!VE8WiLZJb^zOSnRl$dSP`!7LE_eshab^u-N@VN{bLx#zErv!%YsJ-bLJ`MMP)6}F zkumys7*OqN*8ZG+BtCBy!r>W}-+bF@#O=y`%rK)zZPQA0RXy`~`pa1xTLN`uNHq{v ztudX#^8`&LEnOd@1}?CDhv3M-vIglFmc8jnrM%gCAY#&ZHI<<|TRQ6}@jHaMWhIuY-b?e4cL;jba_DMi!^>1x{YhFS%LaY4^RL?uDwJro|i! zYP~Mc`Wimv+lgsilY{C?)udgFt0FV*5n8O5EsUEvZlo%}pt{cxeI#ARxjFUls!Rbg z?H^!uKF?N8BMJfFLXIiqaIbJA@mpr=NoFaaHt6-r3ZexAo+Q`JDHy_b64|+kIs-7) zRpu4JSZo&xn?~*2){xAQF_j1~{s`n4A~p>nvc_S%Wux7x^XRqumi?>4hb?q0zBoBp z7B53)Y(WMCJ?QCcvK)T8K1y+=GM5KjF$iEQIj?vxTmB&AFt&K&5dp8Nc=XZ4o>RdF zz%>;zuEmaEM+Zu;z~jK>`=-b9-Ub_&O-&95QKT6M*lCg~`BH3ZR*mr^q9^NjU*`dy z%rM`zhJI2JTbUpyCr3v!o(wbi$B8o6z}9f`_QI&49}yCdchx6+;6KfG&D2uYp#$3^ z@;6p|yI=QHa^=7plWjV-;wr}OtJVmxYY6I4<3sgKGbvXCt*)*oDfu|VzOm!*uksSa(V&F$RZ48) zw`>|h-MyGmldUNFM1)*FCt|uHb~Pa^Z&bj+zWNkquyB+8utC-py>`DA)Fop?3;5i{ zZ@YA@r#N#_74ob%9Lg3-5LNb5)8p1ryN68-k^VnP#gFL6uurq#Own1iymCl+Yy7A`vfN4tSsGtLHHkSkEGxwZp|r6 zjGp!jxYa|2W1?aToSXdurzlTTd>{iu2JnQd$nVg-wtxoUK=Lp#o?&J(y zBl)zt+q$^Sr~TZMbmQ?)k64c6vh+k^dV5;bnrzft1twcQQtJsfX`<7)Jl&m}plsyh zheQR`c8&HlaQ-%P3?-|7scf*#j*=Un%#>*Sg1wld2~MXl?c?5IwB#Z=VEP|LEaSBn z=J=bMtOa*YvP$St{1UUr#QYhllKxxsgmn1&a=|W(2bYgxWF zeJ-u`PGLoErqBb#eV07Vd=}c!u*I$3fp<6RQ4yQd`d6pXxb+^?Z(ZzRg~i`I|5)DD z9MhkKA)QAhQMMM9K6E3Vvkw(18@pZu8LfF6di86=${kA&jK*HPgvc0CwJ&l-Cn!-4 z#zylwWK#0hejxOG@rcE`AY;Cu5^BuU-9~qi~f4=)C{k)l2d#VG~97 z=eYqYkhC4*XM|@nRmBVasAYmGewfeBHn2R9A~bDOgRE#6IipsQ%<5NqQe8UOupj!K zZ!r(pJIdrcdkA?5c>qmS#lQg)O2I0cJH3`_qj?VaIFRSHd_t<!FE`r%s{2=@6lQA}M!C0fL957me0m??x{PI&hF zt|RCXP20%qdkNglLkR=9Vf+NTaaD$Nv_>pFe03s*m5gl=H~#uHCZ~_A4I>q7y>Yrv zEYwGNtVK^%#*AjGpdMWGwCJCy;-nniKoQfCGD}s^0<@f$kGO26q%Gpj_OSLa(*s8w zht#D5i98$%IOs>Og-b+i=521;Pa=H%^WRtR&=r|-&{-e;@&z^|JTM(7xssX#`5wPs z4ouDO-^S(;=zJY1`e3%dQQRwLYT40o5X%Oks;N#hb8nuQ$EkB$a= z{sh&X_0@kCREppPd7C2EPh9Fng3j`mIrE>}w^I#WHs0&%`VPH;yYg^*@OKC?TOxkq zq)F;qeowc5r4e7%pNtuobs4<|u; z|Ara)*52~hhd&riwdW)w@=}xjbK4irS2gHQd#Fip7E?o`D_v%= zxB(!ZRGku9giJm3{u5pL&-&^f`Mt&uv)<Eu8 z^6WT$fgYvjnp{nE-~_KBb~*BzP-m^zcg&woe4_Cwf~fSDS?fo_C87crE^_QQz{BF? zQP2OTwvP#mxk=nbz}JI2>lN&X(-M<;ggtt8cCh%a9HgcitS>r!9YHrz$Qc4-oC{?; zf!-k-L#ty!w}a z5ggFvLiaIfBN@^;3Zr?mQ5=;z(tBXspR5bd5*l1_A|vFnsFlXV?>VdxhXNY=xG9Rx z`rgh#HBYk$!{COQT}xK(kLj^JQ8e(U(4uMjOhs~8)hBUlxxEo=eo8wLzpUAG(0~m9i6GI9?tN8)Gn?C?`*% z(64B2R<}n;X@0h{xBl^ke=d1cxD5UXhv(H}#v)H@yuv)aFyJXSZ+H#N0G5u9l%FBI z@8bEKd~r^olQHCx#vffbTQr0$yUGw1Fhz+o@1JX1V>7YbFPYA4j6>u#*weSP_ z)!Z`6QXS|R2EeKdv{vSKih^H!{!@saHAhn9Tpb)L4${h9(eri;%3mPY+`P`;Iqo=G zTE}nt(Yb9RiEBh1*?a*G;(AMeE8DDpvb@1V&Bs%DJ5u|Z+p?Yg|XoA?y4dw z3a!;bc=%$;rok7ujySB4@Xoanh97EsRp&-Pjs1onQ~7`MLR)apj=;%}ZrEGVL{^oY zZk#j;1RE8qDu}zXO2v7U!;_i8j20o@wE?rovI9{xv=}Wt-dVm-{rC5MUf;W3piwcS z(W-9=f5maS^_r1_%9X|4uxZP~;RoJ-;Gu?pnUj3|`S@d%g}_12{S*P$1yT+x5#}}I z8mE1vFS=^aCnbNIz26PT&!Tm%hqf3;Sz#A(hmQ>{H%kuZRf%g6j_xC6 zKb|=9-O(fG#vbARHLRYO73taYv6P#B_a-4`FiB`}t%hqT90ce975@w&D`XDbt}&Eb z1s-6?OyylMWs1hah*om!qS0LyaiGT?65 z^5b8=DkD~H3_u4u^ps+s5D8jgl39`hl5Yik`2NlnderYbuzzk@y<2<&&D{0ThIR{- zIn%&wl=%nUp-H%6Xz-nhb1c8>7Fc-Z)0U1AXr$jG^XR0~n_(s7(PN#U;Qv)3f0I_s zP*k`RVfZXyERJ3)l2L@;NVw^|4pZd zlnxFg=rd+ft~`fUKQW^I2r1{>BMrUxj`Me;u@jJlw#KUlKKk8lHFqUaj*E5@hFPs; zB3Z%Q+m9)BKOp9m*jY)foLT zjJ+vaOEJ<(4%}H^#-v%-zkL00v*2dVU%7l=2`XGVr?z8At33K4SGqxzczR`^Ms#z>5N1!0; zB)vihw{AmbNREv)BU`V8h-tO~Y`Rrngv*k%FrJ2)V`QS+jl+F;_}tas6*hn&^)J9- zMTQ(@y|7yDallnaieNdae%$nr&Av0+%EFl;$}eSf^mqD^j_#C0w7-8OzWtqO>WRT2 z0x|Y`;kalmHPrS{xBX3w&5=(&ZOTYI8@zfeVgVIhI@rs2b`%i^9=0zvx%KIYz?YKd z*78_#iPvKT+Wx;6z;5iLxcg82Obeb2T7~aRfyOmehb@?le=bC8`f3g);OVAgXUE5q z;z@q_gB5CzpZ)zj`YGBMd3x^xu6*zoX;On9^EU|N(YV77r0|^s@|QUu_PS0*EUjG| zIv^>W(O;=^^AG(^@2Yj-ZCoG>b~qP;W=!f+6UvfY4c8G@(+Al-mO@OHrAJEUdg#e# zeJyt;T^!7shGxXHVvD@MwD=Ar*$}eHDD%vZCI9H(*b->X7|X7>Mrr)v`LS1s$1udR zERnG;f+rC=l0e;)XnOO}$g|SJ0?UVET!g?DN?&4UKolA5cVtZzEa0UHGh0smQ=C2* z&j$u8zOVYR01@`}g&p`ij->RfNpvn&J1i5qjg5H=MzoI3r|yG(VO>L9olDy|)l{$G zJ&fT6BbTF|{?lLfFjM{-iz?Us+IUQ$7J*|6y#`u%-A8NJLjd;=*0RpBm$7YJXhK+u zc3pW9c7EM=2t||lgJ|MjwvAaUOI?M;JBt-fgf>`AtMZ?)>M?sq2b&etg9>l)QnWRm z>IjFqc`s+^vi2@X0@#}5d4H2v)a!)m7R71^EWH8l!UsF1_6r)@*u9Y-PNVQBz(3NnQtBhp$KBJu_V}Jp~G@~8FQq3 zS!Zme&C}6jjZY=R`_!!O;O(-HiK20i?pUuR-F}^J2x-)?0UR5eL|&0W0~v`2(pV@6 zyA~`BtAi2dwjdXd$xRXGR)_mlTeLAjfD6kS+Em4>ola7RnKi%X){-VB7zdQ-s5Qlh zW+kq(`QuTC-3|$(@@ZrQytJ-Y<5*{J7Z+H5ze$!vp2Uxa2Pal%5P!<8Lvb{S59ew) zo-+hvR7PE;VTOVsb(rSizXCh1&_4fR(@=s5A9|kFU_N)6K*-}(=B^p?hz_dXWcu9a zt-GUO{ageV0Z;Aw)2@A8PL4O^?=SUhj0agBR*2=>ek2h5< zv55*BRr@{}ZeFBBlz;rRh6g_t0eqKja+x`w>>2`~4e|Kc$Q130tAfDJ;j$Es z6;tnI&{ws@B&=F`^RB47 zJsP-lLT><*sO0{}WVM_>BBxcFT0&$AU#1+|z6e~lv*twanx6NaCBSgM#^6k!>%;ud z-Kx`jIVPHt0!A@7SE^>2r2V+?r5OnbA=hi%~Feya3y zXXb8BZ7W4o0b3*-Ccu4~70t+z5O;2HUFW~+(gvq_h8r;D-&d<_3sY(LMUOh{YQ;5+ zvlS%c4XO}dCjK9CMul=KgZHZ(f6Ek0ch|>zE=L*p0JAFVWsNva(AEgZahV{`bB$p0 zWPh>`dNaD`W$V#$VBf!Cn<+j@OBb@=c(ldg*!7qL`p6>?c8-Fk=ihIB_=L2ROTp`( z*x&*4F)=Mkc<}uT_G-Y|+P{;>7u<=qCk*c#Ic(25rq+#KX|%goxHm1m1KzO%uYWP|hnyX~TXWYLX z`9!c&J;jDoH15cSbj3B#!$0(0s@5>^5O1}+#oT9o|E*0gZTd+HvIT)@qt*eKZl11g&GRC#L@yaBf7u`B9S^ocwtX#0oDPM>-OWkI4|-NFv!eQ_hH zahitCN#+4XVPDeH02`09L(QR3qkg>OTr1?Z6T~e&H7l6AJsJ5va~H%q`=e~3G7_@c zO#S;BmRVxQPM0WrW69%c4aRBOfJD4uR0thiX0a5YEpnyKqP<#C0~02pf$$qX`-|@f zxF*#+_A{By-#55iSJjBORq6-COjy;$PN;RM9PY@|Tnk~S8s)J8?#y|AH-5?hX&_T> z3`2IC;Hr@MP28ajTSXK4c%ksN)+y)3qr@{ViTT$IyWf?eaQ>taVrKE$jmk(1rn(PI zc-PQ}r6Y~6?FS`qe@l29bV6X%>5eTZ{vVm_UitOd!1HfalD8FaMs$@VbTO6H&e)Kr zO-)cGmxR5DI^y&p(K3FKYt;9UjU#|Lk=nDR7vngq-@GJF6GMeU5P}ox2GS@ZI zKMPuK#*q;B>B7gql1nl(G@u-Klf*t`gr15m!)00dRVI|oAS9^;OwyXlc%Dz@)$#o! zgMH+5Vn)ubhqf0;*Gm3Q#&Rn@F3wBda;FN4W*l%j7Wa|)g5n&!Cd4fM*H`?_CSsZ* ztMvg7E3R%fAZ=2G8mz}AeDV|E`R-h7Ax2QCbZKSo-@q~;UN6XZk(N%9>m>a%ojHN> z^$`AbMH7nOwHOKJC6i9=dl|k5Qjs>jqYJBd;!k}jHW%dG;@?O%&39Spu(h#kzsaG5 z3#^k*bC}*teDbgi=Ts-2M%zA`u!>amg8jWMKGfC%^uS_yvAaZg^?4=aP!}Yf| zbm^U>Yg}H^_);h}>TE8-)=1?{Y2rQa0#aD4Uun|86oD-$wEsk?{pJP1#P2n4?A^mZ zMKTd9zr|4YO|g}ABkIPiWy%0hIsF=veJ=iRaLg8$w7(u5k&9MH!9ulzA@+~bibAMY zrk=WSK&u2#s|N15XgxL9ZXa8SV}_XF07kkZeN)a_kN43sF63#c<~h@AB7l@aAdOY( z^OqH&k!7RyIpZCGk>EV9N=c_@ez&U=&*0-pbKqg~nQGAKZJqnR+X$-D@%192M)LSk z&Pso)*n*@Vw>x#%f>vvT{{v5GJ_Vcc1A1h=vd&5?g;YiSKgT@BL1#kxzvu)=_C&0u z7MHz6EM!j<8rQxM)t3U4Fd)&Rux^HIt6>>XA48YQp!ClVY8lY}yQUMZ$`ag9Pck!pWu1F2kc_ddl^P3A%D|Qbca!1(BfSqncUtC|HR9mG!mdED3(g@oRf3Jk9+?QvW3Al-j&+q-F6vxwSf`T=CX; zK4^favmC3+1tY~mcAMwJ$K>XSV5`;yDuF?)(!d`PVw;FSiFDt=5o0s zg0C}34Gk>S;lgG5e?V5;$~=Q1yU=0%z!%la0Lue%%|RiR*(mfZ&Wz?a=18dcF- z^;%Tq6vY6eJTT6YjS*EYPGi|&ty53aZx{i+kjKNmiq&-L6fZSHv~`|c5N?!OLT_9Q z3Dr1yL5${cXwOG^{Mx!u>z^NZOF38x9&+64Tw0lM1D4rARvOK`HWCEz;%AFtBLz2U zqTTfI&B>TW{HcDNVW?F%TigD_l1VT^&CKojmw>n3?7@Hu60&oPZC=3LZG$MhsfKFz zvll^BpA0nAPL*guRjT+`(hQ(?XFkZF+Smz0Om!o|_f3ykoP+vjwT|VG3}Iefm{M23 z2%sB_vmFpTh{x{fDSgp&1=Luwz#k*rh495G-1O)>$#WU{o0? z$*5@YId8w|aH6zm-MEgdb?5}i=!>6=s}BZo)bgWdm9kbGGJAN=q<`w>JW-EMP}f}i z+!P=z@E3JbGgyvnFD*m&+?Z_Sedox~H$d?6Q%aWuaN8Y+_pWdoNAwfNQmpTY9aUw5 zkYrrlw&CDTrvJvIH|9ZmX3fOwkcUGy0H=a(FY1o_ne zX(KBVcTipqeB1hP0V@x}KGY9G?EaQi0+TgTLaAKqwDykjT*YEU4CzTY#2=zrRk;2} zFKMx}rbiMW-|;)olTvk~Lkx+nCkI!&>-=!ROhPkb;9Wy5TRvw56KF(VRQqq~wSAcZ zGoDGp;K?maJ4AspJq}X^v9B4@QJBPXqPa&mo+>2E!kUY0AQS*$2L19GkHJ`FWhMfctr@@G<|L&!CnfEN~|arJ}0>d zj0b67m(_IY&eqepCefY#OR8r|s>o8ha{YE)M^OGdIb_!6iFLdUgKV+g-tpLr`bRcD zG2qYG>wQz5MV6s2Q& zVNx?nO^qgF!HVafr~YVN@bj;tnR6alCS_4mM}Wzh7~cdq@VOd7#LhnAP}*ux^tF&T zg*W$`I-Y|t8XaKSt0rqIz5=z{Rvv(JaP?WGvq@#uNKa*Z73)dEI^5HE)k-?v`PLgRD^DX871RDC7 zn(aBvm-tQjoHv_-oKg1u+}%veBmjV?nz7x6EyNsljtzaI+ED3SB*Wd1(V6-LfMjYm zTanYN@QOnTMcXtjXu zbR0cQDE!~;4IP3z>I~i)D;Ob(7-U`YFfpVDXSy#bOrS!_Sx`Rz*|_-T>03#w0AHW+ zmTFmwj9N}FaT%gbWDIm_StLnEm{R|)n)$kgZk7+dgSz83pGtHeO9Y|h`t5uWe;u9O z^GZ4u8Qm45Ml8^n*F79Qsp*ttEsC#ORTGZH)@#!B1dZWfD+8~ltYX=(5TY(#CeJUW zU&n2pZ3dBOJBM-4>;op90#l8;*WSZR>>!d~e(d2c5jP$#l?>ax`Rr_Y2euopuB>yy zvoUrw8;4AInt&XlGlf;AgI80Q?GktfI(EJo;IsbMrg*lL%ty}*K8 z#4RuNxm9Be133z69@+Q}jDpT&B7pek6e^V9u=hu@))nu#OXP1$gr}!ECO)c0@@FLE zHUSC?vssMTdPm1Qh~^spm-o@1X&Rbv()?J+k*ZW&{96#iOuImM@T&$TjA;nx!rx=7 z@>FwvCv*StB*v}~NWX^Gj+vi)LsU#2oUxFz0nJ<@(pVKNk|t?73KbXs$E#>HHOj@0 z5(nf(=nG^p=|^~Je&9r?lw2qK6X?Q5mnWgmT_;Cr{nvE-LoK=6@~?~tCHA`R(MD%% zGPN{peMtYD&;8NuY@5?}9$d{}Ni!6$gH4Mn#Zvd5632eM1E}^7DpA;0NR;g8ypGZx zV?i;ezs^I2!JT`PUx`9yVnE-Fvfycko2eo!xSK%X|%Fht}CPKv${g zb1Z!tj_aY)l)Ub90gJGSd_fnf1xC}WN(hd$u~-1pi*m45j?YuF zDP$0uR)j(_sSZES81Glvt;jIo=vVN^upwIr?&*ErEo>N^mrK6twDtNiAlJx(WuZUh z{iq!*C7G+h*IzUP?MEpoeVaMyFl_Ozs4c1ONi0h2XEhyLu1exVz?9#Vrg&Sg?bz*} zQ_9#b5dtnL@9WeJ?XXTdP zCA=d;ALeRcX}in4)4+QbV2KoC(N>2W|JpSBy7x)q!#rxYTCS*kYsZSkjRES=oX&A3 ze69y>6Mi^u#*g~x8IFy7HAf(BFGxLD3&K|Z&TGMv#}n$a&^_=yS%@#!(6-|59!;h} zCg}A5Q%)T>8y){8Z|^6bGuafRI)mWd`UHzeAhr%M?FgfDn>w?@VB>5d!{k9xJlRux z(Di)Feg5U$vNA5}gfP)w`6*>HQ(B=isS&qRUCP*^d}}p}W~x;p|GV%jz2C`sIteyc zQ)I$BwBf-=uTMdwIu$4p#g7rkezjlfY=&YPvk8f-DFMPb)zuccm*jqjo~G%tIb(lA z`avecUsc=;PRM?==*iEY8Xa>DaX$5Ot~Uv;4U8AF;ybR-t;$vT*)S`z)b2R0!)Ptp|X+@8bD%B|5#2xDdAyMy}6gT8|7%#v|w{Eatxn{>4 zw2mzo3lJ#J^yMP$d?N4_PlPt9E!?RP&9gu%FW;rGp?M7r9Tm4_x;5f}-`X8(43!Hc zAP)!)2ORiJ*g_6zGLg_d2N8E3B_`9QP(o;_*|1G$;q@Knt&(*vm1z~7LB3`#coP1b z?-|Imkv?OkXeqRsA3`_q-xrHTvI%gg-ogZRCg!V;q(3ZCVd2UgJq&+Xr}K>KB_{`> zhA^)y<>x7FQ;5-vMOQx8aDI@qRGw4!N9&HIc#?LdUW>YRp(gomPWw^b^N(6CP+vpL zh;oR5d)J7@yAAap4{cF$HGf08yMPmeksGv*^vhrD`^UoDHK3%~@8NH=^D2)s#q^C< z9vu0Ry#O5wiQ?zTf(PHg0$riLx9T&7j6R>c9K#PF8J`A*-$3i-9woU7J5u~?x2_>N zhR4JT7Ljn6JUauil?c`e2p7KJ($6@Kq9Gnm(tl8 zH;A5qG_F(KZ7$;(HWu*K$3Kw6_vyz2Yw zH)=g}Cobm@dROaN-OErH;@c#%AgS*#or66h?=ow_9qO~R)+~p>)M{VSg6$dhL@l$y zgeMJ4izJzWr3i8l1Ro$zwnocyg_>ob*Cf7&A8flM&{z?a`)9}k4zJdrj{+w&RR8*) zS;ffI>nuZ`P7<&2hx&W>4~Bs=*M@YfR3*1idj`2S#eNZ)UHNi&ZkV?ykmZqu(=?y8 z0>+dW?|;hv+x%Qufy=BcD}Mdw_s~6=D>zQ{EAn+NHgJ|Uke`KZq4E4{_D{{ zXROpo1WZspMG?pPFLVKtQyyYV0ClJ~fJ+al9&$EkcIEf{{zZ_v z99DVh93w~`mJ7N7_&D-~JLJ>U-kzg{)@2A;H5o-M2y1=TsZE7cF;NmD%WN*SSDpJY zUb>M}gX2Q|3QJH!QS;>9ck3auvh2G9q=MU`L;s4il4BrC-8GeEUZa5fHKzN-@so{Z z$wYQtcGnS3+OGhD9NB|5x4C^UG&Y!WZ{H!&`Ivv%EvMMjPQ{`v2dG$MDjy3j-hg0N z2;t(@Wx;_{-n#M=bpUgvpfV9%=*!4#^~=noUN3D(uQfaO`%7Eq9JPi%{9RWuywFb=OxjQx4!~j z_tp`dj(!e;A9W457VJcHPL&ZfJS;Ft&=F-2Xo3ecIu+UB`~Z%ccZJKMEpt+#m{~82$nnYl|eAhXX$!s$aI9 zQD&=ZzH)5YR0R5@%plsyks++@=ShpcS3UIkMxMLXcRcL$tRw#G-+&%$pz=X~{L z6;8p1X^3Z^)zddo*av5Z;Aa)XZ*MxZry4rT|2ITBYfn_se+6B$ZzJO5=@w@6<>LLxgN@)N?K+26D;A@q$)c6a;@0^Uihr?x-P}K;-#5FBD>@?(r`I zyYyAzl~|Lec2j|ft@EgRKVWauTzvEPZ%afNocM2G-A1OO)s9La_k6Ajuur=XAjy|dan zTnPBcW}XC~Wme!ty8JG9zGl7uP`48Fz@$?hn1AX*_L=vY=7Vq>G`*c%to1PSL4{;t z7`&8qg?;Sq9wuA=>i((_ss8+#laK$hbnrK>4FP>!xbFNC=&BL`X>iM?<4N`rJvRGV zzS+Q@pMTOkwvfX=#}Vbf&1%{+-}y4uNb7e40!5b2U&$a8uEV912736}zTfhdNHu#?>e>8wO@voutT5NVAHIO7!Ef63Vh#CF zsUU?GK=Q*EY(N*HeDv$VWC_CM9nAc!>g58UD4k@W?65K};yzub84ZYh-5vaZ`+Owqk+mFB&? z8Y!@y*5Rcgd+=cDH`9+jj)`{<47H^|Evy?oy8KwM#^Nl#Rp7#50Gi{rVUr%2xs2$_|5XS8Y4ODm-p66nn znHPxfxo*yy7knGSWh{9ouYTn3Dxi%kE#}VDSIe!)^xcFKJ|eRWVUR}s5$3UUi{h~y zm_a57!Hn&Gsb)R(sXoavbKsll#kNT1{YE8}mgE~r4{r^>VcpYbR&AaPnYfQ7FnZfO znevi7(b(6Lcz;4`0g(FpC@;M%gH|5`RB+Zwvh8{>bPQJ4|KeKwn?efk;4PK-SgglU zx3DT#X9S>KSc6?7hAjz@qdqdJ*;bG_a6)oe1DP|x1^@2_;4V2;pl(Pj?}2IDMMK%L$5TP>;jajNuYwU|Bz(VKG>hk2=b~!{bQje9*WAUF->FA^_}pM(lS4$)QPPJG7Q2>vM#QGU*h(X<_Ay!g z7zBaU7YIF6*dGl2skMo(_sA>mjl2y&IuK`;Vn8Qa_rX6Unf1>KOQIh+I z4IOD2&;kErVcR$gB9HRxCw~x8>5{0@G<1O5qOiN}F9>dKJO_b0!(>&+Cq1k=fV%fh!s$keF5C3>o0VpX;uguZRJ%)>!k--&fkH zB2MebX)fST;z{{I>v5%wDG8cGRLGqsWfWJ+NoE>3*2vyGx^1+ZAU7S-ujc8hGVwX? z&Qo4yp{F$#m+OHi6>`jU|G#>mmw0E8q*-0lEK0~l@Ru}3V)Aj+8^S&oE1vog=>U5H zd`UPUY2}Ulz~REsrF((cBTh-~C`iD7epesrN!S}jKn$s6DZZ`DSDkjMHQW!Ds!_lc z59A=jN`|!om+P=m+$)4lujvSdI5eVY+`cy&K3s`0p#>;waUN~W+I-II6( z88S{_jVo3}zJDioSuoGORsMm$Hmcbr`n5t7S<(QXMNc|U;xmPCwEO*YPGr$rO{myAbpxF>2Id3J}!NrwHX)BOAV2#|PU*eBpp)+sLaj?vRF+pQLd8)kxCgB@I zi`27>LtrM6sIjuMOqL;+qI>q1nr|2a$gAm+92@{fj*XMsL|Xj3!-Jl5y(-OI&{>PY z?~%Q8;la9lKo#AQ7Is!Cc#vptcUoe{8bRh@nESi^vzjVx?q-4w;x*G_)_|Gv_fCc^ ztUPO)CW@=ZS8S2QiRoY62pg?ZRZ5J)^TBkqJj`Yy>_{s!Jlj4QyqfH?yPm?o7W#>I zj~aQxTDP~;Ob60BuNWCQ@b!*z4(omX`pjBmpa`$zzRlYBjrw6*Ngb=~LBAjaKwZgG z)2t?*IzD+DKZb6N6lyI{%YD>Y16Pz-8#r_(mH6)JLoQS`(8;De;%I}N+VjX7z8GAC zQL!;aa$7wqayxzP_~aE)Bj_;9H5Mn-by3ymp0|=+!yyj>qgYsNqj(TJry20VGriP>9Za!`e%*;6HxSBl(Z`WijJ9@AuogEOr55HWGSmeUtj_h za@T7l;66Xk9a+7g;P!m_`YG^Ju7wia5>DDCzwok)huC2O?F-MW zdh%@u0o1nvOVDg?VkYZC^2m6}e(61!c4fV->49AGVUsVA_4OwGLJ3_qLC`oTEQ$n3 zNuq`YN~+m%l42!`v;iysy{vMG2V85oFij-~GZ1fO4CvG4$hKyDnpI@^R63`34O*Y% z6W3SDoYGvd{xTZr-81gNHk9lwZT^L)5K~>n^YOLk8xXa#SnPgSR`;AWQ=M%QX>bG9=52m!VzA`YGr(WA;p>TMmNd?bK83ZUS z#WFPk+z_gKbA3(kSRkc0JhMQ;!v(btG_@`sH%yl8QFvj6jX>U!`T(|f=U2xErL`rM)>ZvB>Rq)_QrBe&N5?ll{Af<) z5*f1kZ_))vZq$jBelxV%2+V^i(&o%Y$aC;@aCiy`$#Uh4r7k}tZTY_Y?fZ7s&@>0# zkp>>4b$CEP5lSVfJI8FHyt(YLmFDY_p(XUHm<%BcGib6Uuq<_4KeeqcKZ#wYcV}ti3b%&C)-0^=bKr#jJRbC|*%Qu)97)*UMv(P~cAMc4nUOV%^ z@Wtt~>(>#D2(gRVqFY@)kvO1zxo?*1t%mu+ocCIBV)t4G;>Y{J?L9zr>ynJIOVWW% zq3fo;uyB?LiMyswsBFy8(Mc7hrokfMQ0R(vx}C{4Yz}LJF=Csu9$T^MnSht2 z0E|ATX6;}&Svj;&Fi}8>QWj0)Po@JYByp>92oSO`d0&~_N>K6)%dD^>a+oaejUiSA zf`MpnwL|rY$38nh&5^~U$SC<#D=HTLP^RQ&?c4fPXU4~zbRZ;53l{(i60%}9|QKks_bw{H^vdk><(;=k|g>^3*xe=#0bPlC8$v>qeSc z6vTf{3HxxCCEsEnBzuk`LE^#$tkRLBE(}XX3qe7aXrLZ|^F1T$fLk2Z4v8oj z-fb|@fQ~o}Or@UiVb{XdVq>TrpwPQ9gdi7Av2%HTP0y zCsSRgG4Ejml+|VKfLf@-i759OxP1K;ME|^PJtit-BwvC@E3axi>zH<#=;V1iv(?K0thFwAoKvvohfyHE3P-W!k~FV+?* z)-l17_2ngzyja7ix#b7Uj}s;P)-=Ro#Or+UwBGLbasVo_Fo1ABX*GJZ4|%LXmbiU( zz>_tG!x0h32HB%?ac5bTYB4Tj)vE5OC{JGO308|aQRJ+e7l$$is}1i^(f$tTXm^CQ zwe`BS@*B+?2NW47g6QKKSJCIo4Sg6oC2Krm`f*6;PkR0YJ__jTY3dS0cqrlz>Op&y zk>N&!Q{mFL>?^arF{SeEb!$DSO%@RZgj2{rj3snjWYPYrnsDYTA&1XY(b}>@{}wWN zFzbGYD$KPs62N@MW!kE$W4i82{JQFkvzYfbX2Y_g963B=-1e2eF|Uw2P)>jIcR;*< zQ@A>^HKy>LzWfV3kGwqX)@z6Fd)R>Od9`s#y;baWZ|r*8c}ShgQnVX&f;VLz0d@^m zeVnr$7m2IslyS{ZK#Y*+XP08$BgRQx)!$bSzY9jHeNX+~Y*)l_Gi%Y2f+%F7TruP;ba$|JO6Z9UQ^E>2^SORNpWl`>Y$zO;ev zk5X_VOAl%_@2013Vt};Q&Qt?CpTGJW>1*+4;iAScXUU~d=u>(*lIAl%AZ0h=%>VA0 z4--xYH8=IFtt>Q!#)mc^>{3s|`?rv(TzKlA-8K8bd%d6&8HHyr^J zsnJrN{<09_|CMJ|zHY-_Uq?P(j!LLlemsQji#(cE0(skBukT0wCJ2y?^x4@3&?ntGfJt6#Z{a^fa#qM)G_{WsEXacC+mpVXXq8Z@`m|zOA&y z6)IBu^p7eP=s2Vkn8|KJJf9$KnzAW5DqT(y3e(?uiqAetvxr~!eOdKDl3xUlUweni8XEJUGC=wWxb1!MP?y+K_dP;Aa>8Z$vETiABo6#_ zSk`aVmdoo`bhB5JPruNEj5qpmm1no3+&sT{JG>wyuU+aWcI$4}f35^S(cZ@obW;#8 z^8evb;e6)^X zFbKTN6dnH`t)Z!|GmGCbTo98}(;0mT0%do>>&gaYwxu8yhjDC6o`e?+fPWW(gi8wMw=V`gIC&H2s~Cfj@wHt4=ikvC+C ziWb@J_Z;h<&@akkR&_skk`o_U6#*@XmPu8>5$&(fgD` ztj^3%od|(Ud~ADkD?oJ>7n$lH1alU7PYF$M{ucA!$qL6M`?GL#hNMl)1^!yu%a5~n zA<=A;2LFs4ejru|J#p^+lSKACFE`g-vekMP_|iYeLDG7;mQ7vzd)PCHZd&4g;WoiNIRvzc3un4|-E437Icr06U_}5jx5c3Rzi8YfF zFuz^skht22M>eDWTz12*hXV6#LqU#7ZOM;WE!P};Fado>gjfUu?2Cj8RB_?+R#0<7 zleYzKpq_{y&!hF5IN&kN|g7r0P3M*QduY;dR%Kq4OUXmkm0?DeBCN)q`*^JfsK! z$0^EqL{mRa4)~HVKV%`|)&|GCuhFPCy{`ot{En7>CHzcHQ+5<`DSq)VTJT5t*rapK z9fQdxW~g@id5A1&+F`oLnTM#Y!q=cxap5Uzje54swQmm(X%j2W^+lf7;c1tnwn);O z#ICO}AjZDeKc}&+$QKtaH+3VhQ;w7_PpF;qXjnQl0j0ABVY#SjQE9*dU-6SE78TBJ zRTf7jBl39ugZpl4G_Ktz5rxrTR(opD0mZ-JSw*#n${WlY9}}sOb#J2-luCJ2{I79p z-ro@&m4VMfC!`CWnis(zGFY{up*fb}sTl7_gsEvSqE7(tUT4gF@V*4FimKd;-Vy-< z!pLb2?MPgyS43KCo@h_{?5dr5WufqYliWvdKyMxN&%aZyz+*8QuGL3*RjG9D=OMw$KY6p|yFdr`Liz zdEC9@tE*Ot*3%x1!F1k%CW<<(EG@X-`83kB(*mR)UH>>~I$91bkn-O}8iHFUBcU#DmUF`$2KVwA^64%n=DicDsx)e)&7L zEs;ctAZHJlQoQsd0a*U3KD4^SrNiTu(2N}I?k@X<(@!gK7b>|G6$Cv#PpngdMqF=k z{UXb5fGi~3>#Ya2p1#C|uGZFh>A*Ox1h{Wm#_(qYSy^*J!1rh1KJ}gEf?JJPAA7lL zg8`z$q?No$!C(-Y6(%^*W)OJX!81ewdQZAQfg=?q(87el)T+tj0{$K%>mZ7W=EawE zX(**eeek$}ronMV`Lo{i{m%Ch3H~2AhixuuT%wMJziOz@96r!3PNp}%w86FF&xxJ# zs1Zanb!X`n^KuVe5F_g^ViHMLvILKUoeEcoU=?@*+>{?~RW&}azF(ajg}ik$-nix8 zSSKLcIZ>jf-CutHp4eIee;D#!NFCou7Z&M;kAtw2B$EN1M;<4MUa62^B^O`E5)z?$ zAP3;u{P2|nHxH;z=D;7!$r?-3LYy9FypYmaHS%i$n+)nnGNmy zTi#R8IgS8EEQgOvd+HKg=F(C;<^?a~Q!D+SW|1D%8j%I+(oe`5wd3s(jTj&0659%Z zkCp-duq84_t)~Sw$jhH6?6OVBOfw*Vtut;2G=5dR=P~cspHGqyP_fS~tALs#gAQC)iOIs>0<<}G6Wdhr)JJW&#VW0gakz}J zCkk33yQn&yWw-<}s!hYFAd9obrRy}5??!w)$;>ZVvj$s7!>Nyl(SP;OF686KGgkgd zPyROTeRZ!Yh7EbM+!xX+%p0J&c=w$=MzfA{&8fH<%|alA_}UIUBy6OckbtUWXp~*M zs8)@cB<)wHMsxKTuITr?ZDk_e_8B$&Qrv868@49njbR%+F zFKroiO*tT%K`6KFBII?uG1azs+|&KSj_Dd(;yGPoLii3?Bl%?Nk=^~>t-lQ}!WOqt z6z{9G%Uz4|PZ87pzcGIDypYVNp7XI6b!bDVVU<{2;`b3tBI%iA#Zz_IPB3U)s#5UF zA03Mssm_%+2b%_8p~aio7vpQHSCx2=vjNtcW}ADB8^q0e&B)fH;55&MsEErct2 zjCbZ1B*NS-INA=mQT<0c?>>@3LM6X7EXopxJJ6H@rDvnJYhcG)f~lAT*ce*Ff#O<8bhaij&w9q zwUbdWYy^u-%jN7`wHS|fJ7JM#ccsHQ@Nf*(M7)i9uo;$Ij`?f&qGk7y~6`Qf18uLCl)hvlhch@TzrZJ=6F^YU*H>#)#t z*lrb)@h#)9^LC}Pw@#Kyk%l`oF5ZgoZd`@ep23;xKih!AaD{l5E9t9!7_GqQ0*O#u zH0SqWYGjzzV1^4dD#C9N_SV>;6qclzdG2tTS&eUq`cIQrov|KR%5|SjqJLKGQqVpw zVVl0Emv3W_X$)7NxGW2uSw{)fTvo& zce{%WJI`_oU!%i256%b-k_Cd)IEvKf(W|bF(47Le+JRn_yfJKMviUc8l=V4J&l86$ zBI48bpUL4z%Y93NC{aTyW6sJG$JVw-6U(xmO z;$OLZ2(KFo85T9{CnJ0p`D}$LHe`$y{Hj~5zqbb*OCAJUF6P1 z3Z+&Anuuv_I!lo&%3TjN_v?<3WZ1{*G)Kzs8_4$IU^+YV56Qf&C2XJKFlS)z!}z@L zCt-yxfvxlEdrf82${7}>PIHty>0CBQcbzepE->J!m%is0)fO0Cq~AOl?|gE{d5w)` zM@ke3oUK*+rdHPF5INnU6kYVBb2onD(c)(<*b!r$lpj&WkKM45CZ z%fJBx>VFu$<7JO_v5MfymsIk^tGYIg)>E^XWL_A&B#u0iz(#;`_W14@;TC=i$GcK5 z$@fQjeX&_d0d(!YUh%G9JOO}V)ncv>tMnrTV@CwT`(wHzi_fo5zN)P%Y;r9ydjXZr zFRVctDEo2o{ccs%r*-1l@}SLLnuTX@AH>j`%!*3P2GP8;nUg8Y%VQP!m|`Tjk4v+I z>mTi!(gt)ZKX1Y?QH)Z0HLTU<$`12h0IWf?N+^H*dW>m@OQzZpNb1gjq(6=oZYyiLP--~Ufil`ILzLautt@gG)QdKJduC2^?* zj%W8YKh8o}Gv7k)?J2B~xXtmn&$)f=Y`W<2+LZTz6Zp6itD_|YCsBRNdjM!UOm>Vt)* zdlAHPFw9B+)I6gjG#*rn=FjWxu>>s*#m3x|&gdCB00j9P^p;|hpLM@Re3KTy(`H{# z|Kx*RVBQ-4e_Q~ES`0^Xk}YmmfTVBad_ooFY6}RH)aEJ3Cbi|?CR!3h_xdp5d!|f7 z^m^+nQ{hnu^<+YNPwS(plv1}Kj1MGW8p)q9P5LV*_t5STTu9bZpF?K3ZU7(lo`zu{ z41K(>Jz234M-}(2AE^tXmoKxqRl%C~MwEqosZWok3;|~KD)eHd+}FyUr9jkJpbCb6 z1H++P7w_U1-s;V~34c+_LTvB-Z5Or8N0TE%k4I$wtNJ`?q2|0UaN8u*LX}#pmt#Cp zI13XqAm&Z&b5HQ}TJ@B>sxV4Acb;rh$_#LigG<+*VIJMR=C7_TriyflaJCJrl<{;b zQ*KTTmYaY#T5sOq%VEL-MnL7BZ}6S(#lJt>iw(Zd%rLc`kH)KdLYf6kL^C~%R!tEe z;%t0@eAb3h+{&v?eD99!v#+Qf#3P;$iB){_^?t*%HLu^uH7f)d2TsNKMDx~%mOh0y zb43qob179e^#-Cs=wK^0#K&;WAG^(!-uT`>j!u!#A_oNz>)Yu#(t}yl0)RS!XXNSmm0A|j)=*wzdi6TgA zy17%zvv@=uIr9Q@cmI_4-(Orh;heO-y53c0o+|hT1yz7A*>9Zox zLJ>sN($~7xg}tv!OlAG|!0|cu-`_TbaI6>ncyZWPuul1qW&Ae3z8D@rS%z0j^>?r#xu}2t1aQ( z&l6tI*&U@})&V`KWE_lYNVUQMk}WdlqF7Z_6IzvUs2rc3f}k)rmn~P^+Po~oUJG_F zt}^^SxA`NQUmk0ykr-rIX1ZmPX&1aXP_|KQF-M}>-c33@V*~_Sg@<1do)g!u{UQe* zaWKq@Puh+J{rlG@+W_lFYvdRB88s0`ruNXaO}`@pV@#Iy z_S5K^FG>i)7Es>GP$!yk#5QezV2#S(8CjdguQ}W|ibS#Pn~>x7!S1A5RqfH`{~zhf zEH>cC_Ur%Ue-}+i)Ol1TYf5d|&=c-qM+)w1+mswcK2H6G9CC!CnTK8JMVXjCI}Wj1 zw1^a{yg>|m@r{AXKcYP=s&jfuD1hD9OR}g$k5rcS{En@$EMO5h?HSdS3GsYY59tlJ6oOFBsBR#ZLlmSI=m65=#CH!>A_f>u-`&SSk(W2vznm zl?@aT2B$&WPr(cA!Z#`|UoV+-@tLL^#bmw~_i-CP7e&7J7o$S!m9kI^jRiH6d-1TU z(vda@ZJU$OZW#}Wx2q(&0ad7y33pc_j$pmvPTREySH2WKIe;UpQArmXr&L?-h5(>7 zX$uiX6%$tVk(T+<>bl<8yUpN&I#NjUS!S_`$Rd`&CS{L>u>gW9olUFcMU?fsm*oH( z9gvL6=IrLp?cO2PLy*;c{zOd_y$Z9AE{>KkHvSw^%qQv#%dV`6K;(MV56;0%aAH|d zq7Sqsd8FRGrMEEphxhW~nVmPPp8lV8!*oB*ANQxv3~SPuVSR~xTnfh6t>*g;WzB&Icqb4bb`9ZhKb{ELfLf{Kz zFo1ba8y|4rCAz@mb!>0}C6B|QTITc`i!WM}LY3it_O`>uCV~z9RNJNxNdn7L?Rg@b zz$973*l*PZPZ|YUMs}3vjE!gF@Y67nMJ2#t2Q^6sscNu5a_m$*2(i5RsHe?5dt!>D ztDjO+?-s1RL)Z6h6PqY(QNS>id+7Ss=#yEP2W7}3e^CQ5{rO^CrTB7-tU;~JZ zNZ%PVmt6_QkH4>LnJNkwx){Ywrid~5F-B}%33Kh<{rz%=c(_)B4);M&S%D0KE}PO0 zm^9mhbBxC9ekQMwXY?5r)zHN=q`g9hB$s#^mB9HTjBYLtE6q71#Lz6(Cu4@V5KIA+ zQ~D_`Gzk|P?+i7$5P`c{lMS#s_6-XRq+*hv*5RA-KFHT(UZ10Lg}(el#0!YHa4hj0 znSU#W>r`4TmbySpg}K&~T?H%|P-y0miRGh&g6{+B-d@`ibCW??SXPWku&M}vg12OEBS(V?mvIQ|_2?JxliA3+_60}v4@$Nl2>F+%y~EVEYr1@VBFdbj z5DQ*ni?Krnq1*2U$Q}Ap50h5}F>_S;djv7dNZCWW{Gz*l(#`mZ9`90_)zkr&7&B)_ z4Mkq&sE&$Zt_B}HNxyep6WbP%}{f z=7B?zX@%jDub=gBg@TIP@5b)$diw@%rv^?%MNU6CV+>kyYLc9!VXu~rsxM>tvzU?* zPbL}>MK$T9oVlB@m<|W9&rlZN_ra`RYW?JdR&GjcU#xoP@c7;7i{OyG@4_8e23TO= zUmDGPrb6;k_SGSdN`!XoP?eJmJY6M(Xvx(;uF=5qOO3l#&gu&HSD@uF$9dh~!@8Z@ z9^srD5Rg|!&&9RG#Km~I&vH8!#q0<1NUhUtN^?Uf{Yii&IgkUtR2*+Zh%o=jZMPUF z+jG@%PQ-bhSzg&v3?8#{^W78ghtEx=*t<3wZ6aVQIzLzb`+Ijw8jl_9XR7u1N?b+UUfb3VB-9!=dq;rpiSjPbBQcD3(ai(E$Di(MFHUA^ zo}ta$*S0hE^G!fs5wGYdwrXMW>X$h5`^ifne1Q6h3)Tu-2qzKPzn07>N#cKIv-}hJ72!tx5REX+~s)#8maC$l?`;38O})M zX(z$+#&MREVpF)ehbVN&H_XdGFM8>yxwV>C$n3pAM!J$b_uL!egFT8P_k(+qChG?Q zh|*|k)z4oSg9LtP<9krcMu%chT~8&|NIV+6L33pUI8I)ceU@-V*oz5}lQFwUeb~hS zIv11EJvos+T~qxt*=@m?X0I?(e0V%*yO!AF!Z{oy(a78oAsy=NX!-3H4f1w0F zRalv?AOc5Q8r>D0fjipm8G6WoRhyxUg^jBDde83NFS~lr156(-Q-{|3j)=>eKq-~W z*!HC2ry6tx%~GopF^3HuAMH<>IACT3SS>!o{hx@lF}|g|_fXepx{89^Z2B_7b{PgJ>`iOR-y?xG)#9JwH4Zl5&6OCc(a~naC8q zw!ySookb1xw0%xd0*t4hFiA1Y2s3SAX=S~5GDQ zB5VK$x*A>gM`JUP+}bfGoTGmUzs7)!I-nNlb+ULH=K`$;X2s$%@PLWjSkcN}h)05< zvjBOH)_U`N#Fv`$A9e3=+Rl1nJ|Al7lmML-V)i<&CaX>V9k=g-^dA9UrcJU|D1^i7 zH@g!AJ(TL=&}*}NSS0UPTZVHAa`5FaBie|Z45G=nJ?gge`)e4FiN02P;#H~KvsBr0 zD6B8^Ba(=O0S1ziU895nG&x9F+jja9)0Y!{Mc=qOe=ss!0V8XDlB@rDTU%zf0N*9_ z&kObNi(8;PdQ^Ppb=6U2Z7)TQthAFAESxz{C#o$esI7A{Q4~&jt>=VT#yw7e&)ian zAkd$z^u`f-wpamOIltu+x#yKrC+lstC0hrl$bN__FvaKJ!;BP^FYU;E>w+K*iR6F=5D19#^9>yXF+AG#YWwk+*>;F4NzjG)vMX{iyv zdMtB&CbmOSa6%kaVbq+8w-C04$Uvxj5~>?l>`L5@&6gWdzS`y>aL18}o>Vn;&>82} z)Hn=JiU%YUoS_Lo1VO(E2dJ0{@znF$4vqFzebr2nF;3g#4JjmDCDx=XngBuG5+g^G z#n1A<&Qu`qwk7H_l8)NmvMm=LXO9bmxJ_dS9;kc@Lw^AQakT34D4oZQ|GtP}dEC(Q z1o+5#L!hj13oRn`puG*!-hX!MRf~}~IWs@_=3Nf&&J9t6UZ&POGhA-4^^5BC@(=%m zNl~L1&^{xD2Z(Bl5oywRhnY_yxm#sBQfBO@yEi)!ZsI%lP)>K?_9=m9iZ{BB(48E)k0U&m=}NWTWXXHQIP4;OF1-V{x1W*-5mqQxvVs%H6OgoflPFxOiuy zf1472@UlPm$EY~dX?D=RGr@7%g`ZE7?P5eZxuo>xINMJzL3h2!fnf5oz-P5$6yCr8 z$*mZex=T)q243xx{k!am0?;`Ua+5XsNm^m+>K0Y8YrfLbB_1Te?-az~RNd+Xd>P(K zt1(Y}RU0Rz@aGrga7UGIRlNk;j8*D)gK&H-nI;Q9+Z8L@%`1hltRolvx zxUi*D_E$u4k$?Z*0K#@08)k;EJV<9hu^0di!q>#}G*V2V>mj$veZsg_N>3Z z^hhB;XyXuGV(*_ogT5a%M5z4hrwwYeK*4Ih2&IE--gR-(K+wcXr^R3Oormf)N8Pc;#{ii+Ih_BlOfC{kLS-*nbxKJd zB}o2;;SQlj?omj;H;PZu&3F&@pCf6?8t1Q%WmU-vkx6e)0-S$(=8k>#6tGzTa!zVy zZn~epQ7hEyKy183?e-*8KC7kkSMhAvsW{;w%cAgnpX%t$P^$ z&f6$(tebF~dYHd+Yx59c8t*Id->kw=>t^x-FQl|yKK^lvZr8ymFJuPPkFJ}bPa`p$ zlcZkX#_Img!jRh?t&b}bcY2U#3Gn6mV~Q@GP91>rK_i8Vde6jA3hAz>=u5MDl_7P! zut9>u3Lbc*apw?3Wyc_DMF|k?p8%S%sD+Vp)QaSlR(*xLFG;80FBa;cMIL&VqD0s;N0*LfrH=IRnj6m|T~9PG1__@EN?V-f-;M>#YChHoPqkfTc592S_mdt!->pxaUGeNL3M4?a zs4NKZ?H1SVfx_)9zy!sr`sPdENG&@{U5$&MKW5X_fxqcvL*a43$-V&kW|zu53(N^6AoB+K~xUFkyeGTJnw zk=zvHV_~`9-Z?LXht_oa zF@1)Y*URit;y9K*e$JK+;Vx&?Bx#)gDk03}#>zDpI2xHETZ&X7 z1t(5Eenvfyt4*tUoB2r2nihq9ivR#fTu~Z-i6=f-4A6K&x*zPB1&Z{E2(>!aK8# zu4)cNMye?8uYXey-&aikGiyr;x;tU=P*|HXkl953DQi9fq1o^qHC#fc#tlE{t)1wT zL4We&&%@xGvv`RxBhvFW^_tE25afRH;`Ofq&1)+1-k;9@lmJ^SJkSdtC-Wx}T=ONF zed@Xw=vjNW8Exq0v_Z9}viZn0z4dZ%qFF*N4+MEL_Bek;gn@vI#oJai<3YdW)P;6G z^a$NXwESCEm_n;C4xf1z6XXGZm{ZX?d;WXDn%Vx@#SN z@#WX^)+!`PQXQCF6HGy_aG$hq2i1Sg+G++Vv3I|w+A7m#%oOcI<(N)etw=WH@n?(B zTI&cdZI66aKnJhanfB~j{0sG|XRG52lo<%QA`L~SEv(RJ&%Tw;u;<(M_FZ-SgcfSz z;48PkHD%-^56v7i<4C{yf|0Vs&u)ofMSMeY%v9qkCUrtV3I;{{;_0&ZM8#Tvc`mm? zb@qHyE1PJ#kcW+^`BjIZ?MKxrM!wIrdL&DRQi7BEsXnX-o~#x7cwq&F64}I{6A$Gi zy~s5ul2NvLn{5ZcE%rkYJQeu7sDad ztYE9Y!fnZ#`Z@JdvfGSmJNY%h@C?j9u_fEA*T)6_-_!XPi&f>@c)S-{KwjuL0JgvK zyGa^?Z7E2;Q)c`@MgO7iVmqiZNIjghZ~@!D+pDzqOY9ha%mKl znPDPC;79JDG(rdk`w&28v5V_=`wqHGH4g~fPXgq4@D4A`u(rhK#PshQKd~E<(T;XiU(sE$|UL zK~p%#62}v-hShI?jGU}<2TMVG&u^f-M1(^R!}hPdQO@~Hz0mgjMJQLYuaQiF9)w6p za|Is@{86k*5|7b(lXeWZRk+=2)8A}y=kMwZVlzvFxbd#m;8nDPE1_*5nxZ#WLi5Mc z82qgl=n!xtK;}ya@UH0qElgCVu&j9g%&$Ov?uk#;%cV%xT5m=uqrA?Uov5=Z$ei!x z!}l{U8Fdt7fs&=d7E;_apKwv*;QYa*8zFPP;GWQy=$LDsCSrb=WH+@{zxMROw&7j| zZ2|ROLI0JWr0O%d&mGlCrrP^oJn%bkU=h2nTSdUFPF`>pXM~c7RXy8cQ4JO*TYtE3A|3g>bf7!YYQzl$&1T3w!eEqAa{~fo0$xI?1suGeKmO* zF8$}wUBiE0iS1<&&3&!$l0B?mLC%^Twoq}|fswK*6rTNaG$J?hPrmY#^~=+%-xWjy zn2+7RW#v19A1MTD3R?_CLt$sGWP9+jcfE5!nQeN^l^*pXI24YKEmexW8St$s^^uE- zmlV+s3O!=93QtYwvKzxJslXH>vJ`J_x=q0j;T~*$%-AEd2>>=k7I$M~%D6=nQjrjw zap8%mD81*FvjF*shHlIs+o;n;)GWbMjVnNZuA82-uOyaG=bPfW#Vgir&?1i46zV-m zjbF}uqQ0EyaJjd1iE4Jl7MdyHd=7gas9Zhzj``&Y4LCxAkp9_|LkI>bha$wFtOt~s z;1WDebf~Hq|1vUJugQw%ycUua@Do@JZmjBRE&MI`KV3+)BQ8pE6mTdSwjK+@I}*8V z-9ZEAYY)!GD4+R+L>Tq|jR%WALl|F|xJu{t&^c5;Rd2Qj{K^RJo7V3(J0t}47NvN? znO`3*(W|%!gCh4!qCiga=<3r2lggYQY-FO0*+otsCMSDfN8LSS1! zS?y4nj`pF1QM-`RCF8)~lz?pgkiE-`mTDp%w&%L#BHlb9tWsY+<+IgBV@deXLv+0Vqq_2|d=q&m|FrO@5) zT(#2Iz5hCWd=HXwuxe;w;{3YnsPQGZp(WfSfKvMH4SoKK*~I$`{sX0Pu=?=KXi1be z@ZDS;&iOd&#G|Jd9lw2e-Tq3Jz`_jpy*_W`=jsleC4r{5HRTeJTy3fpOeCXXe2?yL zX&|X9QIea%`PMm>L2X%AdELax5}0yn>e>g5odFpb0=o)iZr6T1AUtXej7#FR|)f54UQ+uI7EP%kOF++bHa*LI&a*TM9WR=zrQgj zTR2g*9jY?`!7{PHm)URDL!Nl&ihbE=?`G2AnjNldS6XTY?|=31p+doWT*Z&RrZli` zEUAtzUA{d7Auz}^a&&y{pt~l_(uE?XTxh@)8W-bk(e6do|lYd<*F*)FxEueTog)I zp&2wVVJueZ!HatmMjpP}{1z*?Wq_)V>O_o?wGAW6M{IDInPACHb(WkR7@4mpk=)&= zdNoDXhsv^^s6qW5$U&e41*KJHsJ+P&IzYy1*;Ww+4af=;pn~wdbU)w6|N9so#TrYX zaptm2@g|KZzCd|LQNoVuk3-z>6f&Wz6wkpqr!@Bfd{O6B6n(IuB|P`9=G&*ZOgUA0SX*9ie-V1C#rNnt)cA#+oGwwQIQh zqJL(esghkD#PYdy^v+zBKf(-td^9f9jnt61DcbTat3AV+wK(kBU6UE{VVMx9C_q)o zASlJ((RD&FG*-v(Asrjcqs1OHtVaLtkR8Y$PS~$Xx{>t$7$G`W)}sZ%g0P`Ay9It`Ccq~etP}8NbN3skNF~27t5kP zaO^OoGWgTvlqvjS%Jj*C9BpSTw@sJX4rMQPV{j5Yu{L@?d)GeDl!e(-8~gedfIx$n4|ID#N+Qdf}v&Yq6AH%%6q%M@>>MpYR-O zX%9rMJR;uPR_l&(bn4U)_8YrSz2Kg4hCfmerMkNHI&VknTk)W&1b_{rw#n4Q?sxVy zjtUw5%@ZGGbh%xIZOxD6qm99;MErT8`=Tp z%u2>f6^(6boeDYLTb(RHU4pG%?OYML2XyfMuo)@;2Kcghv}={z2-o83baJU{9}b7Jd!B7G zm`Hy4KFf^)_olR(uv%+ncU-X}kY;vM^8B)+-m?3C@RLY@52<$JN>dv+LJMQ zJ2r~VEd`CRKD6&=VKHi$4u7aDJ^V|TSLZHPCuxZj8eeE9`-vzcO(cUggc4FXIp?gB zw&M(Yk7II@?92a3KUMt@9Aif*OD^Nmj%0rpo-G`GXAzV(_uG*jzwgMWYf;^|&H;Ql zEP#p=wgZDjDLzzfvA*fXiRf$~H}|33BCTTockm&V3w*HtZ>^G2yH z4bz-2PY7~uWh{;a?CTcRwTA-ed*@FBIG4K~E9KbEHGNfmw*jtxSW(7C^*uS@amUWP z@7p+2dI>$ZLk0fpFKOuxxXlq9sqNA@_!vY4umj&T_crAHQGHV(=s;+vItQxicPfOc zeNSD5e27_wZ$zZUBeJcseB)s#$^7MWNs%5OcU%$`-2T*Ol(xI(FlA~&?^;@0rT<&~ zKA{VCa}|87*wA=paN;0gkSEO2lajlA&FHh^{#RSRt&MO+wJXYL==2doxD5HX$U}#m zx%uz>p;lpEz(1bn`PPU3cpUbdy95v_&%5W5Y-Jo!*pbVNGUNOdL|0%xP7ZaA;+)U4 z+9ID|wZp*Mx9T>bYUbFcG2Q~OJVVsLo%5s4v*l!-J4YEvJ>$*X~g6hQB9+0m&_CBU=YL-JYo$B@G*6! z3dd;244S=~}wGyUTaI|G($mPy1=EGiQ3v1SbMOiA&1dkCVTLqq;U}wD@({ zBAYkz z`A++h?mjo1#^p|y;g~ih^8E#&w=E0T1x_5k7N-l>f2uwyn5_vFCAF~CwzY&eBtO(| z+!5ZLVO%C6g^oi1y_m^W9hV1qkkxx9&&h|6i21HZQq8i(E7T!3yl88b`NQ(~H&%YD z+z5&FCDszA-%;wvr+Z*3)UbRbKdq^gI5T)5?84GRU{XF*upfO7XTFaytUsLkpKqq9 zikS=jcza&DQPJK;QFh9q7h}N|q<>CxcoET9ebJW*zQ} zzo~z#?v9f1t2b{Z@{ZafFF}W&>RgkOR4b8OJrxp!4pqGGF(bm>u`XIW85SQB@qSJO z(@Di?TNYT_cWKka{Bg z7rN3j9TA)dw7RrXb6|b&G3ML5QuFVDUD7)+>D`C2+~M{|?+mkyPL;*K^AYjZ{oyuj zAt}Xy&Gv18$@F%m^p1r~l0(7X5EhD}%zte}*(X~UkS)JoJF5##3e9Eg&mDj}VsJr% zl`^B{MD{n_5&l^F#GQ!6y4H2S z5{<{9M-;lzi3ARv{>ACoX(B4icnSd#&lCWE8 z5-s#aC9ffR5V4rN<1+#iJR1?&PYj1;PBDuwB7?TetMk@Ke^ibaCn{X%_$9D5w{*EI z*%fab2bv;duEt~LOS?Y%?iV|jJXqwkhK+{1(RDw2O8 z7?lt#yZnXg-y~l-i`DXW^b{U}jn~f{ImKhx8=?*zfZ5+UF-@xM0MNyc0$3e-atfBn zaEuD$U|+uZ&6Q(f?`t_vR(k>BKBT$!zr&I5v5T4igW^rz52L8RMY7zFl{fLOs=dSK z^xfMH4xCM;Ih>UQsi#_*IWkug&g@ccs^c5l=?`LnTA9g$hj-w$bFR<5QxwjPCkh{T z*iUKNMGB;NRT-B=JXdttcP`CKr1I1Gds-5sf1?@~RBA*x|5;0UuozDYvZx zLedtWeL8(2x|y+RqpUbT2@1?lXQ>(w%>TWz!dq^qqEmI5CjRCrEWFw}@f-Qh;WOiU zOgenc>^!utYl#m&a4z$xe0p?_2aM<(aWf)2tOwX-tq%>ciF7t}gWBbr6k3xR{P)>& zYn`}OB1pIk9HI~669b5-Ts2`7tVRz`rt&qm#3}OxypSs^c#K&mgevZIn()6DAbMUmSaKoIz&f)Es5WDjEk72^Agpqj^$kKFK_D zCr+s9U9Y#9STE<_?_mJ*BVtAj`!4ZkRdk;owi+2ON)iE+B#a*$K3D)eN_0I>a)Qd| z#*n2As|{I`c8|fHM2r@f%D4~H+rY+wZTT%Y8QdHH z28S}p6*9j0V*vR$&^E$Dyv@@COiiiB!;6lGK$Pc0et#*vnR_8DgoPbO`J2}s_o*!> zXm1Jkfro=1+fOnX7un#(a0CvnH@CP85xL3&t`AX`o@zntK7WIg%7=bI(##LA$%n$# z{|NId#0)j*9XqsuY>^zo_IllW5F*%%v(V$!Jd6sB8u&uS^qUu{<_Kuv`=xjLL~oWz z_Fza5h|p7^dBE7s`hdRjc8H2#Iz`GWDd|hR1rMk*V4q*)VdV2~Qx(#OPmU|?#e^kTYZUTq}@;*9aPELk*rb1en%xtwE%=$4ud1^RbPZQ(f+81 zT$_nJvI!(MdF&{0h6SB}X_{37iwuc*kU?9wnd-w5c35lo@a;ld$YUae63-$G<6^wjq(r$f>ZqJ^))6W*^a$XL*ab)Z zcY}p+VF7&*H1k)71S^^lHSF}j4k#wJmWVx;aBl;tJXmk?oe#cpj@9+A39!)8P~A9Z zAfD*=8sUwId__)~Y*?oDsseG>AnyeGl}eadJ|rJLmwi`^Njr#<92OA$cKqFfzJ==p z5rWk#EtiGb$kNB*xJtodJ$W^VZORZ%FgVucGu2eHvBb52Aa=kDmCr_XU8n(c>C&bk zmEc*Xm+eBROT8w5V@rr$dAW*ubPB2y&YTvFRL<>5eAbIPltKQb9N0>K5D`&<=-_g2 zwEk!+(#ai6SjaEbe6|!+>?07|W&Wac_xO%ai zDg3b69if+KdKQm5m|&@_&up#q1zJ73jDvPD?JbGzEm+dX;z88|xc8Vf_m>k}8J%=z zWC9yik9Z;HciZI!B_m6ZpFEw=Mhb9~GV`}H8HJ|_!g+hXd+>im;EPJfLtb*!ukfko zC3r<`SIk*aaDCooM4xs?gS19?p<AUEs{4vfwYrY<7aUhg?;NNx?x!!lO} z&PL!p?9s@4jn7{bAHzw6Fde8eAj5>8KqOrVuogH4gh*~g^bJ|Sh2a_tr^NZMlNiFR zr)-^42vd_TEH%`H^)79Apz+Pt@~XMvX!qE`W54X&vb?d8QrnKw1j)V|T*06K{IuS4 zy6a&(7g7#>;4wcL$aW!;vTB%Wh3greXCB$a@@4p#wbt$jGx2xP5sD4~yx33VavoiB z;jgd{BY%0)|IRysrQzF;(P7UBo9;-(&VD4$*qE@vzfv$N;98D)ov;3-@vO~t!UmpvbilSa7*9?)Cizkd;3!olDPM?Os8 zHwe$YT8-hJHr_*w7^2^6N&)v)2NN=&T%RIT7aTsG^(Gd082{YjQ9W`OZK28wP%|qf zL9Y(FI|m>Ih!vE?lCOySVp-On_?g9wSIzLmRA>MER;<^l9g+%f)vq=yokKMFQL<)! z6O{@`@udVQtj#MzF>{Kl6FPOu-&uB^P;&AQViTw@WFs9seCUpb0UzRMnECfzBg3M4 zbZa~cL0ckDxBvXP5CzE7J~Y?Iw2hRT4rN5YmqdEdqnDtXK|L6LS^Hu7)oG{gBGO|(Das082RYwH-o$PBd}FO^FF`by4=3Jy`ubhP*dy{M`z{dVNkX+uySZA&oK^wCJ#X^%^7SvKTP$+%0~@Ji6iOY82XuEAQ9&YHM8ikL zRX`+n@Y+-F%cs`+;OEMY`zK5Y7Xe8aQ>Q&nAG<~uG?kqFdiIRUVt`0w6KylfIViV zbg+K+g6Eerwr>{TS~G{SoMYoSGMs|Q_8E{h!I@>uDgiX``g`>%a>NPgqcR}v z$nwgMdk;61!80u&&7h0pAnLK?M4ji|fgr(5EF*-Zc?(KMnNwv_HWs53H^t>X|g9vfX#18uee+;0Z~1ng!v_ zSS|t(BWhr@Qgpw+00Ek17*4v~01{-(A-S!dg141U8&o-`` z%l(mK)+3lJFk<-a1UkDm9dK`BHee5HzuR(_V>EPw8q1OI0v*RDr~@lP0hD9*rJZ+j zl02Igp*Rxh;0k%UdvgaFUC$zf`D++$ULEjIZy3d(=;!Lya^EnPK&1_CZ4{X@Z*lwc z&%2u0hSb^Pdpx7Q+G-!4r_Pi)w8aUzzNJbQ!JtPc!=R^*sKeF;+IEI}Ay@BBsKSa_ z+|&-b%zX$vJm5vf?DNH%d*5!ME535QxA|x5@%(PU=dbtrT$ACV=dEbt!}FnG^F?sC zclD+8<>sLq)Wa2M>IJ;)J+jO)hk|2DUl29SSF~uB_d2ydSGgtR3YH{J!2RZK*2CA* zvHDK>P=TC3oVTDLf-b=Qr2UTJ8qRU)qf55gtei#2K$>a%_EFBqPutHai1GsBiRkf$ zibQp#s4;;K9!dNNUf4iB6q!|6D>nmbD&?+`YY=x1+>c zq@a16{4u~<`bKcjjdRGO(dEh2eRX!%K%)0Z>bQ7!ZTujI$@V1z7ORnw7rXqF8M5|P zQOQVN9ykaM1roU>gU%*jv(nRz<1lGMQeZDd+CofVuy+N7?=ux`ZF}64ZfoI0_F|7s$EW=$-?<|w|OtV z;%^_fdTM{_FW9vkZX4I1!SnyCnBNWnxL@D`c*OCOXL}p zSg6y&^@X3WvS64E)?`(`mA$=8oOOgRXR&FERZ?q`W9Z&YIMny_)6dpwCswK;X*sB+ zV_-CrDi|;%%Ovum4K>yH(}OIMF9z#Sfz%To`*iNjS3zxLcJHk>w8= zAdSK(aYN<0gsuhEt_bh~Nu6XN4OT$JXOd8_8P588E~4&(LOySMtFc#2_dXI+bP{i$ z?Z)=YNVH#LzP+ic4*MgA<$<;Sn6mL;0I8Ty9}Eb4916;j$MKfSyGGfV$tzPEet{o$ z-F!;bkvr{F&du|*Q^Oav;)R*R?6ooA4H8mm5}3nd%)UH^RA`~q&}!kpUsujw5jibZ zf@|W33zDF|@uixfb`7;;MPVuf21(7rx6P6B?x@3YoeMb=2a7nU@rvHcI?02oL5_1I zTR?n;Bo{`mk?>{_)#jl6hlwOTL^TM8N_*ISv$2DAqiW0=nTC&sxaXH=(azdfiM3Z< zJWMYc9M~~g9?w@Obc0tp#iZ*r8aF-L$ym{ODcvwPGjOPk3HZ_u2OcZ(3-%C31 z@ptxZVfN<*i(_KmX#INUdNpbaoTJ&r(#T%aPe{N$e6$k?RPf$p&KiVEMMc5YRGy`ydDuqM+7i~stLS>A7yv;L+V;jOQ;F*@09tyYE0SW zZ@VJ}p;|AX%JP}Dn}9&ZRrh^F72<#?ZLu(YY)_xWGL`r77f5xbMme(E`%=v!yT=Gr zRV&PxDGhIqKz7oSFa4ATWvI;8b}_Y+FPEn%XXj>zNPLUucBOg>xhaFycc`41G)1+_F>nU@(vCT5 z=1xY~C#}v}p)+Tl^m{ljnWGa(s*YbYq9HCPW6Svd;B3LnApusn4?q5W-)++5lJzyz zQMwhCH@+>XI@m?cS03a_v?>Ps9zQ?hDh(RO9+|2WjWVUx%W{IO=#s#;c_y!#v{cJ! zb0RiT7j^)k35UlXrp`ME)g34m!QiX@h$*$}-=KM}5FJ|*bgJ$bYcrpoeVDpdzbH(K zt`P40=Z@aXFa7taOzCVg|Y3l8f?-`Jz9``@RUBkr^kt*|Snskse1ZpBG@_-=0PJ=pAvWC!Z1fVmNX|&;5lLXZ!Yoz(ZOb)oi z2yiyt6>S{Ty82|`bm0gSb(=*E_-c14=%~N8$&cmWK<84!tM)%+c+>gj0*JONYkojPdSF6wJ=$V|VPbR0~m?ThQFo&H7pp z>B(5uk%^WOvc2Fnv$&!E#~+TIKTM~Mg;Y2)E|VxL$12QgXkp-M(_L0%#K+XDX#Bh})N1O(DhwrV^z-T&WBLxD@Y!;8z@Fa~)q>?i?6kd~So!&DaempYT9H7hlLJC$4RB&Ha7w6r|m(R3#_*U)MGT$z;QsUXbrXx zCf4Xb(#CKgs#-e!NsEbvA+9^_o{`TZHZ{EbL%Rr8p{;|Lqcg^=%-19+2)X)ki!m-h zunEO14hHp9tWP+PB|sk^J|;eSkD}+y2aWPvwPso4^;k0*w^=(wU_Dj3o1T+YvieZ$ zB)7BuiD|^y*67_+IvVygbDlGK{G}#Oh?p9$Hh&19LFe_PK&oW0KWxd3$VL;g+A!RI zaV$X?FCz`JaW|(O;N_0CPL`9muwrB)+F)|RqB1Eqy3qk(=YLS%1(HfFQ)^?6;nWL+ zIi3FY2fFB_!-e%Xm(2r7a+alOngM*L;tzt83NVwXWk;2i2GkHK5>2ryFaT)lk^Y~_OYY$h0>6-Aui#b=)sV{ild&Z&nuZbUd9R<#j6 z$J*rzJBTUxs*eX6URx6oo(C$an7(J?Z0G7ffH1|(msr2!U0NALj%*+Y{J66Xrmp2f z#*;2;NUWk#{s=*4CWwm;B05NnoTQ{UYEhrt^x;bmH6AT5-$0%zf7-V{C{d2%mpPD5 zymOf>{t)?G>P=8h(bUPQy71|Q&~U^Ne`5Y^AU1N)^!p>48J3}7QkUI`o?aU07(K#u@}^KfiqCJub2Dg~Q%Z__H?!2}lGC?*Fgf8Yec5;FT8(vyka zn3GEFRq1H(hk-jdOdYr)iLkIvUz?n;%t+n} z4%u=6;$5BgRkXQGS{Q_<6$-Ynfz{t3mT!XoEyXX-QN{!BzSgoHP0TkDq8AK{4wLwF zgs%-~z!*OEqn#C$*Z`uEx;vLhnTsYfc>c+y_28C%XC{ldX#egBYCI;ol?2=Y7VQAWiR01zEItmGf`T z_b6L)Cg6bI=HCyz93@;Y%YRuQ>8-PWT2ve<+`M9)p=|)sycDaMjKYBx!UB{ zX+_$_!wDJSV&?>QovfRmGfd67z!tF;XQhS6eAabyqDKuGU*=L+k3T{^E;pQrzfW3u z$%1$Wzq+%^TkzJ-F|_=>dS{Qgpg?}yW^>VkA)q1FQx9! z7V4Nra{S?QeW=eSkM}K-l%3-JdnpnbMfG~jYd3*vVAjmd$M6ERU367nbOe5`%)_`R zg?5ynxT2ppT7lz_#ig%0cnG;&TNE>zAc^G4hwUt;wmqGVnauZ?pgM$`czXyWgll2y5wOT0jvbV)Glb! z;2}!&3=rZDw@^{WhIsLmD2@m)TH|nj3A73}SiU`Lv=BmXxOV^J#b{G@dA`=UcXNHO zu+8#-Qw0`%+fiP{78h>^sDVYR`rcB9i6CQd-$}wdHHkKBQ%&;jl=|Y zGb-2Rxi89J_J?!BshdCPdZM|dcKI4AG01q#r3DYA*2(2psQ;6bFICr)EeXK3!@M|5#pL4W{pH8vm4Z`)%CQpAkG8E#_=pt>HOiV!HY|FWFpp_}sWfLb-cm3e73$ zNe2c7qW^sUW`XA2%pZ5FzP)ja9`)IstRovjAt74vx6-}Nev(Mq5oVZAk z!KxsM^?9OK-{yY!Y=F~u%CK~{*goZUjWYb@<|(d9e865Wi^Ta-TQM@JAzt3e>MR;dAUeg0@5Q++`Qi3)(bp59bl}t-zDPd z^H}(5wAOcqwi}W@9RIOvbg~)Rt6>c3t8bNx_#!_^lK`nv`_xw$IBQFc*}PA0=zdIc z-Y4xJaW+ff$yoZW_u#e=2n%EUUeQ^x^x$@Q;!BXci+4x->d(rh74dcJ=={9n`ryi^ zhgj2>uu*(51ovb<*1UYU+#=9SQ8cNvuVVF!=zdb?uZEU68%`@+IKa%7!S?maN{mcs zzazn38cYtJvu+{;IK)*lUEX?Ie#TdnEY?%e?>^FU>sYKo8I9;<B9!|~xpu`~IoDJhhqO4V@$-SgSF%+W}{+?lr*@PMH*?-} zmS374o6}benBHSWquu88UU3p$r~MjPj_ci1_cHv|(c0NK!I}Nquh6hfRGf7X(~UJO zlSxCY+N6RMoTLJh71`~{EW@p#|1p1e)^PaLs4$xeyu-r2bI^FIjmU{ zF+vxrr)C7Kf}BQWWo3LG{1Of!)88u7$LfW|ySiHI63J2|N`{LnoBOcaI6oOze`&>W zyC#_-CODczZo5lSUQ$FyNUd9h&cLNll9&n*o#qQ|WR#;0$kPNz>g>aFm}*zu(lJoJG{etlu7B3whTOcP?}mxH;kHVK%VqLx-qVP~>Yl`4qQ@@)U5 z{XE}E86~@HFVxxv2Y5*Q`{WMjnYzY(dE0D;7HJ>o1xpd*Beb1lo_-Arpu7go`W5N! zyPUr6+dPJ-NO;QZ1|>DsJc@3l;dZ87f@?+AdYx{G-#v8&R&A+8Q_t)uWLi|GOQJGd z&hkD?L-*%t9593=U}Ex#(W}j?80W;`@!gxRE@eee>{N0EUCki@LJGE1KsW(UFYpS3 zdllzRi;Zvcebeajo&N2N1%r<7VTS~|J!Lz@mDiBp%}>OyzKUp)Wq0(vF1P#mUHw`N ze6C|Up#<{GA;5vq@KH$sV&r%Y8k1Dg%8BgXJT>QvY4|$%!7`*gedca~aer>P02_Vn z&wRKK&rzyzO6Km`lX6zlE2igUO1ojp3&==mN`0Kil82s+po=}=jcflB$RVm3wl1c*}{$PFYzK+>E zrxbTuHMN3Y#S)pVz?>#IE47VyKU8FZBAXKOgQPq zq%+8%w)o=gZL3y7)UQs@Lmo_2&X&3C`|(z(V(~lHOsShK23kC$=7e7Vxx#o&T&`G( zoz-|gW5m&F0)+V|`+mo6Ud|bibKpeD>;%{MMaZs3lJ?Vg_!hGA?NHwTddnv(r@(Mg`Xn}({RcN)j`IKxXGipIgDGERo{1z}u~{@!=ru~wv@ zg4iEZsK8Ld$Fp$%9pCdi;jac}dB~(5vl{{OYvZ);&Tn?bb>#1Rj@}(`xq4a;vVHTG zZ<*sPb;J%!YemV&xExv1ov-0lm>)Ou>Fo8S<&YR6DSkSCG}_NYv~qMTEN_p_Yh*}4 z>9y?8eAeAL*lDna%?c7Iq0-*Ww>5xg13yuwV%mo%a$2LyZ35TIMCe6EeEm``bxxgw zD8&gc+*1T;wXBf)9c3dmHr?@~q|v*&oBv@r`9D^|UO&KKN<-1|Y)sC##+R{GuyN~t z3?Kf%zpgYO;_2>F^7b-y$@F${+B*zf!oEWOw#Qs94C2aF>_^sNJ@+M2xR%w6v#P7t z{@V`BBS^y+)^;G5Igml4<6#)gvtVsEL33SRqvyPf7WN8aCIJWwhg=vK?eGXiYaH2Q z$|*Y*7VFY`zOoMmCec%y2na_OX8gG&e;K>&b_mFx5P~w5cBYKM0GgS*dF>CI2ICO7 z_cm@kk1ed_;L%qX!&p}I* zo&`eqCE`(M>%5LQ!0QUOd0^Sc z>ndNIa;m^KuHGj85o9anMxABt)2%WfA}AaP188X$=&hfb-dSDlMljP~H6#muX36uj zP0F)ISBBzh1O2$DeAXlGJxUvA96AUs6>R=TIHQwZ8uL7F35mPxU z{>A5?yE_EqTWrQUmuKbzTe$+fG)T~$NEqh5k63c-u)WgDPv!V>oc9y|_>d}S2M#$ssRlH?MY0g6PQOq5r_f{Q z<-vl`56qV9OwhvpQJ$`a(vIeK_ZprSK9AZG&t+9yyN8r3(O${?wcxL z;4M|;CsuX!5i))alcys8>4=_(f%oV2W0ZsBEwP)am`LEFO_fI+tsIcRun#-VT-TwM zTXAeiJ$A-JB%#XPLf7dSDnU7M{|AgEg)p{E#+WiGa)4fAZjEp?WlZ>fN_g|hv)Co? z9PMY9+iO3t6zzo{_w)0QxbYSG^$3zRV(zpN^Y6yByAM}t>PIr-z`^9Gz_#H^s0W)f zJ1-V&13e{6%Glbw;Uz&P8?EGWC(VEccjG7a?Wm;p0*n@RcvwkpwfhRygvM}ZDef&9B`4*uM{P;SJPMoMjpQJclX9e$P4H^gPK<2OGz9kI-; z5xdjmNn~H&7FV)x(3F=`Fu@xTZE8tRw!_Krr}4z5TrBNQ_x8TFK*HmurRwK@8)F)HMdv)`4h$%*RB~Qf3i%6v(7!Djo``-->6Dh-2- zo&|>eg-03N+({KoIyPqM4vB}eV?f>ZvIdSjm+=K*X(+G? zP*bg(3?E6nqV~g%AoDdLcXv#q5xK`IIwc(&jg}{j(?H1bPCmT0v2tN?Guq4@dgW_I z9G21=gBE%!%B(Vtm3w-;`Cl@w3efdqz@4CB5RPRaS>N*dEmo3PDE>{o|7o20fX z@oOd}_x_MN{$wqWBhJDmOKusfFOkX9*eW=vZF5sZm=HWS8Af&*-0QtFF5ZLR#G^;K z$CeMJ2T6b0+$eA8@P8^7R^>3an%XACOht#DaeZvXVj|+gpWS&0o25IgWU0hxbH27t^E*c+V zof%1f6Q#E6waT!<<1(jJKRCL!65|mjM~m%fHmcfaF4#fEt;5}ugIyo@=L+|?hSJ6wFxsCRNUp(2Kg8&_c&*1a zc-OkTKvJ0P>| zM9jDvoY8pYQMJ72{b11W_A=hMH4osFB_@VMNkWD(>(`DhQjy!G4AhZ0o_gOE3yJxmEN>8mj`u zDXOXwX-?|vA``X~QeD2Al)(dT5c?ALG@e&xkHf>3&3k-;s@R~Z$fA^dH&dYCVRdTW7)L!CW z=6AsW#Ui4T$TA-06@p~cHEl}oVLSu50~tKAQax=yTN5piRpX7NU@&FKeuVUS>LJUg za?te=&?v0ClT)%USwlyxs1xxs4_r41GlI}i{|^#EZV8lLg;I@JfTbm^!s27xE!>=(~Dq2oMk*=eWJ);{fGz{G+H-mQ@we` zQ9w;{x5vFASZ!lwjp?HpPX~8;T(s4DQhd!Kw4$RQsHl4`t8tsc8NZ6RD-x|!j?6Sw z(u#EizSp7@y5LAl!7m@@O;rxkM7XGWdzn=mZNyogp`j$TcV0 zo&G43UWV<30z1OdomvH z9n@@G%bf{yM;xs$41~TD4peFFhKksNcHhGFYrt-S*^<$qH+i*k^_bd}_@e{Rk>3#; z?*G8SOiurbu4MYpDf&mlDC*`)tX5O*kgV;HIxaV5=IcjGi!82;bnQM*u1F|bruDHc zTQv8dYmz$*@7o=eHiOJP5Y$3q2$+Qd1_l5>KMSc&%F<&VE1T0=x_cRV`ldlj?Y`Nl zStS}ecOuPC4!{ zq&5k?@Tji@A=wlvipE;cfZWQlh`fe^SSTyeZ=` z+O|QQAPcL>L6?aty-p>nqF78+14f$-OSaXPX}aL7ZIK-N(j#tjWJeo|A;%F*4Y~Wk z550Pa(u-6YoKeTt=$c%huDw?fFUTz$JN6dRq0UVh$(Ml5K)oadWY3+?@ff$!pj zm{ut}VOq)-4m|X@^>##VIO%GS8d=vRF^3~~1KbhCt>IwI@~~h1u>U&_Kuqk%B!fWt zE1+~=R%5PW1bb-`T6dp;S0kiSM#4a$aFB$&zBg&v(OI8xlTb=BmoKFnk9x5hSzQ^;-AmVkumwBp z_IurRGUY)>e$XmJYPG`z8WP7slZ!(7Q6zSLg6tk;FZ5h%(p_03{MxXSnUtz8$ zBIaLeM6&A46-s$4##0-MgVRr;vnFt;gy+X!#$CTo+sph%ey%w4Q9E-~_ctxq`F_02 zbg6`7sNBuqiS(92)M;GcS#zk z1Dt%CL`x3EbwqKFMyq-GAq~RNMsy~Nr2l0Rp_&n0<2-8iHWs~%t?N%9AFEMkb}fb+ ztA^o$TtvQ5p*2)0w9e0&t87h80!risBgA0B>ZTd(?1=y$<8pBh=&5SSdcrz5F4WBVVh^ zs=F>35gGH3gP@QS&VDg&x@vJjmcky*JuGuLL{Z^3BU1bOv6sj!0jMddVJ6pNNVyjoU0wnP$H#2 zN3o+H{-%X)aYFs0*7J82fkwu(UEV z7m^B5_KZy|k@PXIlk#?cp}c%qoHutx(&g3A#MOgmU%vs$w_J-JEwxgTfk|xc5?jz8 z1tY^cCWnN>UF%EZXrSc(r8;A=7#kA9BIz0J?P=u3jL~bAx&FMievA{(Gs7%R*@ESO zT6k(XpkSe09&=*sLYVbzY##4jr@~Y*u0*sF%4(h)Vh8>bNH>1P_PAB}#N%1UoEgSR( zcR8z}2C7PhvoqN`0vS(Tl+V)Q(2Rm@1)&h4XGf{|fax(zaeV8l<0-?ZGywx=GnDdB z-v1!>U&aHP%*tI~@JJ&G2v$?4r>lg%S78MH2~7HcGP9kUZ+?V!3o?;q%;-xW;Pi0P z1lFlQZO!04-*3%A7N-Iz|Nol!AOGi-eke@r(o)%(H4W#7#$r*Pj^6a|fmbHEH?8() zbTbh7laJ&GQc6oIDbh$ucX#)wGzds24N?LEQqnO9(k0R@Ids>+ zFmtX!pZ9&f?>lF$Gyk|8hI{U~uDyS?2~|>%zHyEG8UzBlA@f{91p>kDft>w5c%Te72Is+`S9 zK=tIRTT?b;s*l;P)NI?Ut4A;@$__cj`2^VX=H*F39RF9wr4ve$AD-U6gqM9=Mdt0V z#t*9dnL0+X0Uy73Zxx;S%)Ww;`1<8abPCiSr={ydp|F>^gNFP!gRvox1{@(478Xx+ zbW$|>`hAwU(h)u8jVk-`tgqhoi=4@6qD=n#b}`&qO70%*#Y^Qrdt7Kp$mNywbt2tM zgoK0QfU(9dO9YZ_|Ksem;ZI>f4z@| z!0~@Jy#M#yx%B(~-baXg!~c3F&4J+5q9Id5m)HCxBG% zMA_4EFuRT!larI*A|>U^*jIE*!K`DU{fLS?3CI1=D@Cvw>%)kT+o70M7TY_z>ViD} zyWBN={ED+k6&n!5FW5ic6MabY>ies^mJ#{c2*owBB{ecx2n4rFL4KKABAat7oop-p zzJ%3}-gcJkg<#{rj}6?6m_6rMaY(?s&HaTyADM`_?aN5lXB`oqa=)A~ zkDH;OOFfXMxcK|<=Yp}LL)(+1xAqI8+i3Fm3HJM(^uHKUcZF61_lQ=*ck2evcA|5L z*Ga$bNyvxI-E}$7S* zny$&DSR1vM)N|?NS!zEsV^B5(Vl~NfMMEr`5X zxwo{-ShLaiiB_F>XtBPursmxj*0Ry@ak!}paEdCuy5g|w=HDJ4d%PEc z;G3Jx?<|$KP>b^O^Ur&>IiWh=c?*i_kVf3oW%@eK))DEWy5}>1*2K2yTvA+)q_tgrWb|gx1AvuI&~sm?zGg z+NW{#nr}^=o&NscwkVS@NvEtFQALs=afmFL8 z^NmJ+i=o|$@xYTgTv&6)Ub%;fS(~sid4$<7czRED)qZYp&b(DJ-l48WG-Wi4C#t0l z)XFDIG!I4bn+~~J&RuzWX&_b`8d%kSZXWaS;$O@CNWs&yGc{r8-v-0ES4A@wse#(L zwk*;AtTX&U0+BGTK;w3e{3V4ZJX_%yoiJ5OdB#TtiYAbDz(QdIe=sIKK@ zuIgof2FT-QG9_-Rq3nUrN3`k$9V#c@-dPQwgTonXDGdv$)I#uHynRM=ua@}sJ50xk z)_HBpiHU<&pM_xqx-^KrJ5k(X4XVjq+wL$#^l&Cd?A= zR0d_MRWQ8tY;c;Xi@g~Ye?&*iG@oWH$3V2)n~V!7aUUNTn+f?=%?)|2Ua%yFu(K|| zrZ&mY<%|DdQi3p|XPU%HUOi()CBPB=?zinI=#%u)N9=-OGfZNkHJ2%CTQ_Nj;j8FUG;aaX{>unwXmt`1WdAUxuXD9eVxpjoUu@kdkw;Ea5!yLA>j`!y-n< zQHuC!5fAGKb$zLhg}n1VVz5BgQu5kE!wSB+I(;v%6<4by(cf11rt4oMog}C!Zw9Y{ z6^W}qJ389_pI-lJQQx*UER!!xX;?Kd9eM~KL;hGcjN(a@>*(pJH{U=W?*BZod`}qv z_`o%HFmz@{&!S?&ahN0bc-B}0tQ)nq+mNRAcm?mhZ(;9=n>sm zi%^f<%iyz*p;D*Vf_eppsMqV}*pQy27_8LgKIs!J|Ac)Ze1Ci;!lCobOCk z%&db^c=K(xuDu(kOPe(+HJGXQtoA-%aS>2f*AL1}$;>FWKkz&CFq=UrY>gk-LZ)Yt;<)g7of1wqj?4-&(1JS&SUpDc-nXg%eWWjU>`m zFz{U4Q;y;zkLc*`_TE`Pwq0CW#s^!-C!>c~*+(Jq?{9Jo<)AM;laT28wh&9@am3ee zv^0lqQ1T4LI{F7mJ6t?Zk@M?kT@>#m&_@O}U-4X#vTku4Gn zm$$KkQ1Iq`I>47>p+#0Up zz;ZaZsXpVeN)+9f?i*b{{11pd_QD{c{tZ8zGuE>bUT3x=A8&%UH@>%|t#1|c@bP68 z7Za40mWu1cyr*VNrH#GmmfLz7;OhX@|Fqy@kq!h%$E=msT@BK~}(Je1|35glA?Xs+u2-=PEjTZbsj^ESp*+5ty zRIV7a`#L+x9P2X&T#p^Jru?f+&(6+RP@q;HDK}1r9kiZI=idf>ljU<%0%M!&)n{@_ zx9!~YoDXMJlxTRCxn^S*il(U^X|e2%A|zYvP`@{Qo>Fh4d;6?G-4=Uqcw+v|*B8}8 z<2lveulOJ6?9DejV%HJ|)x|0we%H&wXFU0GGU#i9$OaOFA#7||!B&>);TuiHg6y03 zz~DaQ5ja>_SS#Dx<}^!l)sqrbjeChzv?k$TL5-1IgKV7hf}KIgd_K+wYC!Qr?K{`> z*#gF`+A53fTPkxaBM=n|xkL=HmSb*8?p!0}8M}k`7sVfLC0{uM}N<2uA+lIKPg2Da}7bw|W2pJ?5;(y}U9uhGTSF2{x$8(vYD=rLEV0X+{!bThsa?vmu zKj^T2PZ}MCK#pMFXe6IVE{L?Z@a{MjSQI`r*N5lfFTHt##h=>eIC_s%PnW4KU0z7Z ztt06ry4}Xz z1U_SvP<&IB^5cm1_qRaPtRAqR+%>%*lF`JK0L7R?_gT#pQbT`fyojbw7RlI8kYfOi zD{6HtBhYES1K%`9G`FyP+~%i6kUj^&&6}5+0@|@Y8A$OSX+#<*7{V{HZpVsG1nVOpVB^fpuF>)=yGSji! zj5LNIZ+|vDX0NWUu0efP^S>0TQD_gkx2ssPzo?Mi{&_(ZhDg6kc0ExEb+|tI*mX_y zTSY}iQPE}w!u(6$Jpq356&&)~?OrFiAmvTXBK3gaU~gMg%kI!wad>DbS!vWz%c)I7 z4#8;GH_4N%C4Le6FU_Zc1wvk^(nUUQ?tAR)eJpV3*olrjb>EZ_MEB%(NiyQ(6q#7u zhct$Z1Q9*meak^dPcPxRkNbLg%j|X!=T?U06Od#JrM9xt}nk^ zCpsOGxk0-DwM74<^`vFjseU~*HT9Ur9+aih20}|m%Pea1M|X*R*DFRzyE3r8{{wp5 z;x;6%w9!2!0v#xue5+CkQSPidP4cC-;yM6A5-Y|M0IjuQ$f89(AdAEe$^o~X@py%5 zu|T86l(=TNwVj=my*IPguc3*=Q(r$2Y`Dh~v$mbeaQ z+LuVXFiYt14Us%7cYmq=HSF5H+Hbs7 z5Zq(yFgD~SZ+GP(gUGouK(e+yZdAK9EZqF7Cz+#eS75nc6t;I&51~T~et*u!}NJ-6%ctA{O`&AjiK=x z^&8RqNpcK5$$a+6;_@U6@w+GfGq0Wbe8hVCXP;%uU0WO0h1b^Mw!tlL+6PJIiU!Xd z3Z^4VIMQ@eHW2Nx+Y$Rw5A@fE=mZ`SjvRf#jnrrXD=!T>vUL-H`QH?>BZdYBPxp{> zAstnf8uu9<;Uzswy;ytjN&+;D^J>D>`OJ@ zr=^J;2u^CQuWxTlzw#v;F)gOp)pT!EFOami-xh9XUOkUr4C90dMK|76fSh$Jytu{btEib*y1&eJI*dzFm9{8+4 zTzTtPMsdC+3ZgXo>Ix)*Fl~7amRpA4g8KXqK`CmZ0e^dr0u84KxgPn05sJnuBPtXA z2wna40Q2OAjHSrSr@lcT%l!$W^N+WXuU|tB4i9g5r%cU4Wlovu0@Y87i|dX!dU1KZ<<_0M9JRzMkP9f#GQQh+Q|K(&{IT zPBP!BwSj~+xsV$Xk~$t!;!(rvhha0-D!&5Dk|rf;+?$rRMi;|x`jj3+CdEoYk4lY! zdIHI_-|0Gk$!<}^n4<^o$6nnaqGZK;3@%0*zS1hMUWI07(_hBHQ8=OeEHIdmriimO zb*X3w9``_(sh~!ln6zuL`(|7!z{datI9}*$kWZrn;q$4jW9O@Oh22`gF{HA$2#Mzg z-T@6UEsY;n(sUMGB_ z*A)B$D$SxYs6Z^gNLv7wae2}V-n>P@O@$->dPN1?mFM^WD_3d441_T&8|jLo?tctG zR=4+wb88l}Jrgb@yEP{Q!SljT;Z>PPmmLe(ZB@B1b{Gfoe1x~VV+CNpPV;)N%D30F z`CDw{wGO?u3|pgX^I4AK)-w{oV$@0BJk!q#LSXBE3tY1oms*VRZu|-;8Po{j)sW^J zhf!6z^ji^?ZWQVbjn_VU;p_P!O_8#@Faz)!dKbDl+vrQNxw#2Ie)15qPhXS((vkF$ zXU)+azV0G$aBy(_yeee|9ULL+C+R6~hJ}Ps*851USdWDH^+%&B?U5SM{Nn~6)#cA#BQwvX8QC@mHP~&y%Veh2p zw{+w+x{-<7-Uxu>g1h@^p>8)n2Z@}pMilqY3hRx&3N-K?!}k3(4A_?<>+HXBFhD`as?O&E}wXUJo`j;1}SLJylg5%I=4jqG)5XVhKrzd6zMp>iW%_A`bPp z8__ZP$~ar!LOF-k!a_&^dFhBxDPlIhSY~+h7%_Iu84&A_+nSLhTk0Fr-`vL}%NWTb z+GIqNuUE52Y8H|#K8V=Xd0|KRz$9bC?*9I6&LHi4;5^s@vLcO(R)=ksN;deC3%Nu3 zlwemG0e$onKQnm^c~|f3tbQpPMpTA@ zt*1>cIuiAuJ;ib$PJUTd27-M6;ImiAG;}5cY=Nr;*V_l;ql`S)oQjuSU0uIhRTypQ z^dlq93VALyRg-qrX9{6~MZKUSPX<&AW>sr<+`i#Bus0{g1}-~tanRDbj`=wV@}m6c zFffd0R`l`L-V%l`jLPHg6F#Bb57%R2d)1|N zMVIDkEjsswUHz5|1kq2&neToRD3sF{nlEh>f`SG|QM3fnNnf3dJU#^b#tAH`*uVQ` zR(jvt%X_D48^z}L@{|Ij(ZL-UqJm`U#%L4eh*TYL;b%M9@*d-C0%?fx%$<{}46(o+|h8 z-Koj`jBm9-jxKE1p7p~Q*z|ArqJtV3K$e!4G|NmvrTg`VHzu^1=|qfI){TA9{%_v~ zougC125SDwgx&Pz-2;eDmBW{av&6Oux5L92h9$wB)|pFN{UzizqIEtZ7(WEk1PI}; zO<83v-7pLx?8o;G(xvwf?=;za-oJQO!?#CnPhbiWFUkkfm5^2}aRB?j3DWz+mrHSZ~@Nymm5Ad7c17V3TMi|H-&fz*%J1tYpaekJOt>6Pw*=c-z;?gN|gXC z<=3(e^+p1|D+hL7(j$y9=i~oh1ojo~X83ZBq0{eVRs}Z6O!!1BNTlf7}I@wiWee_NX!NA1C!_Q0vK)GrSrtv#z8Z{3x{WLfb1fV^Z z8lilTpDc5VgRk50m(q0{0CJvRO9jd-*!QYL7qG@WMi_5;L4RNVzNy*8rB=Gw; zZrs59kJ|S@d1Dp^U0Dyk|8-IwKz`=XI<}!dw!q6tbu3W*6D(-sPGqrx^QY`odf8e} z9~&};{^du!M2wf;V!`dTG;RXP`@=Z1G1{ir+vZE+n38|=AXH z8De%{D}M$$Fbnn{BYJ%t0PGrRN7nV1L!WG(SHt<$K=m zhjKp>L zC4JGYx>gO{g9VLm1I+Os<;VtS7hqRA%w6(3U)NutLGRLF$!$ek!^bB&edY?^o~j|r z$jH#Fv>`*SrlauomwWwN=AHs=1@c=;`%28VHWN{2L>-%|-Mo(EQOkb7UlJBgDo>7a zgH>*}zs8=O-q+ngx$u$nX@>Yi-ER>-BWzx?w6b~&jwB}bR>S#SMVrjD+l}fp<*l`~ zJtfIsgs69A7}bqwy)M)pwUd4_n2rkQ>5;n|AvIv?`2(>Jk4{aE@I5=q$j)9&E1JBK z1o?6K!S@N}2PI;e!9Zrxif+^#w#~r!CO4A$E@a+^1M4f2K%c>!$%tuDOU5?U?b_!! zIussD%U;K{$qn6+ZAVf7mCCOPO&xm0sGBbnRD^1k7+{GY7Kw^CXBaBL_b%+rwIql_ zQ6&q&BN-U)=T)Y+2WS{Hdr6=<8IRs@IjS=B()_Zb(t*pg8;?UvTT$vhUb=k9!}K`b z;QZ~Ohy8;0)guBDtwG>M-=d<5`1w<*csY(Q4*RtqD( zY=|VCmhJE>7z&gC5wD&U+pVi@kq(h2yt*CXA~g%(3xCf#s-EEq4&Fe4MrO zilpL($Bh!#LH z13WoeWe6IB$?i(xxQLL~hw06)0>$QS7q*!uzSiq?p8-MWz<#5FOd*@iVrGD%0} zjvj@@loN|0e`}o7FW&~V{6*UK>hA91e~lCIevvPhsGfLtRH7Ar;Sqz+v8*D2udX~0 zYk;YU+5D8zxWO$MwFs`+eSqXKZu$c#C;U&=K)}D_g7QwMt7Uf1e+53(o-?w`u@G7H!D7>{)th3rWk0Y#oZT{{ z(?m>N{UiM=0K!cVO=BB3$sMM>gdaVEfcVIpuIwxfU9RN&OP7-#!%)$QWY0rF+JZ?H ze?tq;D;E(ncWJCqh0J99cEimRuL6hi_i64PyERs|C2mt70I7H;Cc(Yj{~Y?el8&c` z22z-+2BeM0z=v@mpT=I8=}Yh62a$+>MN%54_GH;V{?6AI4Sec*52J7bQ&2VuSSQ0) zk_HC%jEs#RbQW8E6*JdoT$WGg+bCV=<-2?RE+r-9X)PrTeH_)j7RLG8ipUihkCj_D z2XdZweZqTc^V0*V7mFd-~c1T1cbC#OP(0QTXjf12~pmvf5RD^>(00bAG>|3c$%I_`h&j zBHkscu~9^)!Rrng8ClFSxpl-J{+%M-m-~Z6xlEfW_)5?{z?lHR?*zoV2B^cH*nIl{ zF0?=X-PBgaYjl>esmbk3s9+=VCgJDZ0aIa&X&y7bB#Nc8JxstZQr(ZwE zB0;5EqR$Qiy4*zM3k&485CSqpl$!)m#y9hdkdU}OP`kR&_75WUpG3yfK*{XSkE=cn zM$Rxik4s7-2UgWRR#v$^o0qAeJtnWzXg3~uHO$*Jd{m=Zsw)D@#BA!rXBtofT5KuU zo#yz{>eX9s$3CrAk9+pg`L@OJLYKQ4VHI`Q>AJ9hh$vya20aeXM#eVbXlVI9xsm^8 zx{gOku8Bqw=(0D*zmY!keu0ge=Kd+UDv#RS@Vv%u*O~@>FU>ZBjRe2(bhtQjENL(q zvFybKDq&CZV;_R0&_!GvoXm!XRNpw^@6!xc&~X{Cclv-Ukpus{qVl{Ia5I;RK$YG7 z&dM#V%0PfkRrrD3(>!`jc~HflFWr}jquAq>i%eFTCTmAm7rA5fhAl$@9`j@7tDKhs z>zg{9@Sn2Hys0Mw%)QPU?Vm%gI)plS`QzWa%?*C8l?b_F7F+&VrW(bhSTvslhN*4~ zYB>_iR3BVxRWUxtt0lFGpTkR*s%fp zFKyod^F}QZf#ECmCAjj_uHaiFB(k5@q3bFBhdt{w@IZK|H<>SE*ou&d?rVB^>Bv!Gmc6TKfrkc1tPPQo|w@DZcW3BfxKkjpdLKh{>D6%o2dR$9)WgErX{ek?MM{DX@K zDfo@Yj4@8&v7ev5KFt}^MV_!RxV;J(z;2W?ZwgOXeX3W*=_MH=3J6N`5E^P~_a8qd z^lI=Mx^53cV90 zWFq%WQ-#{yov2V1$yM(od&-3U>eEa;%T5~j|*ZN3=SWhn>S@kE&2Y6`v3?5=C2K1_e9a9swg2_7e-g-LOJ8a5oC zlE(Ohw#nAm&yLOCcTiyDx`D; zK~9jTS~^J@eZ}8EKhgiEpWM_J0kpGI{zgKOf$rTe+TEBg>gJ5SO^R8 zTY!%F=YA7nERC zz^7L0d8|E%mc(4eL|2K7^Q%7XREQ0I8!{Mmt}8)=_GZc^-O3tZN-pSx7yw%TL}1*y z>MM&a7l$Nk+?kabQ>1ZvsJzUP6M7Pr0GNf7&);|_JTV}!4*%L8SQF}PrnxRBTN%WEPyfaYuhTD zCg*`(@Fz^=ql3}$)U}o3&J*VCboc13rSE|HUk(~S6{hi%r^kdpVDiek`cHu5w$8v0 zmw)6zgigXAvYtB%rDKEdqi^6^?EsYD}pbWmK2Y9O|Y%faS zgT5zPNAdLi=^fR%d$}jA3uaKBE^7{2F&a8g42{)KLLT?F18I={F*XnuFloi9H5ew1 z)w9zd)N2+i1i}P8fCNfq?fwrExQ46}g;IzzA+TsK(d}&M!@>`C4hXpxMbKqsob(SK z-0*&vcZ^Oz+=UoObzGM-^X1p_^Y#|pa68NH<5+@;>dMLWg!pDt-o$+!eI_StLkant zV_n@BrD(i4J9#FXQmNPGt}a67iIQj&{$RfXy&V5gc3=~VZ~6F13_LtdbU&w4)b}^% zbuFqe(&DEea<#Th0CBxx26-xlq!Wk6sSJY6ZriAkyZ=8oGto@$*0bX#U z`&H*mIFlRd@bC~M;h&nBeSVLO*3)+`!-4GN^l;o~@R?t48Q60bpwiOP`V@DVYh>4; z4jjb1CXdVOAU{(dY@4BD_f3OVlO_nf2SSL~m{y;F%!Bg3K_Q6ZfUgN*w^RX1H76%0 zYQIlE-c?Bb2x_Bc_c^)pnUQI8#JUw^@m#AyUtE?5uMDgmB(ajxtOcF>0Vc0Z zo@m_kCc@tK$C3DCsl_sF%9zh3nP{2J?xZ*tjj#7aM5w=i|DGx9`MPvuWjLZ9QW?DW zkf$m%iF$c$wQIV#lVXfyt`W8q@{;x1ybbQo3S|%}1ykYhEi zSLtDQc`3Yt&x~91XGKJqQaad{3jcB>dVlvJ)QTCRO?1!HI3+ogY94cD~~K(`8^QtR#fQY@5Wq$~J>}h} zvDI{I9+l%HEmP)z$SrCgu`A+qH3o zYTW9d%8Osdz+)PTgFy6USeY&{J+qr@hEN3;|dKSZ>lMjE!IL z$Jqkc7}GN%YS%i_pdFq1J_3UeDPvi|L$32Z<2^k+y+uOkw1L8lRUp`Gp8meSzgVUFnx_G zn#}@?# za`?2mv8qL09@FFofsSPJUo5I2`MX>fCP3&COlCe*K^eDf9&D z9Zwap8IeH2<-W2$(>H2W5r#mg8x>QFp*OIx zv169J*O7D)7kHFUk#`&2qG$h=4;zz8KsW8qbP-&;W<+DkTnOk$lPiAyM0I+8p{<5K zhhn?57-t*GcmZ*MQi z!BwuPwDo9O2ec{rr~IJoLFGQWSDc5{YtFKqNpYt@5gQ0oxZFqB}$h0m)RO;Hh03oS1$Casq%?9IV1N zM0)yYNk~UEc79Fa$7K9S zWZdiBUcTTkZRLndf3AO>@pTky4u&PFtmwE1O#GbE#pE~MpMO;0$13dVA=M3g6rsxp zA}G3y0)A|}{{a?;LW8I})saWdVf6kYqQ!OK>aW20r0KUC z9nuf_Nx^tRl<4fL%Y1CNd5MWS@7qJHth5$V__kX^(WPg#N&)MccLv&{5RHk&qw9$6 zD9nhF;^Ov+2`(lgoXsr5f6yR))ivmg5z5!sH}A`r=C$Dhkmv?ZBfK~r7h=+CI_+FY zi~s{3)6>%})O5Mquz3)m{;K_a{jY503T8LJ2uH?6&?_7AN4Ls9tz7>z+Hs%RwuKT7+w> zxBwFmGKO7iI(!G?Kq8GBo%YX>NYy_R9bJ9FG&`f{-BAyCxqAsfV?M}+C_+Nw`>z17 zp4@ahI65+Fdq*a=$0!H|$`KfTpreNOB40yBbtAH<=z_OliaN@DvMJ;%>Sk7{w#!(5}1D4XvSUe;8#5 zX1d1qo2gg65!6Ud;wJW*fiRV#3mK8w7cQ(@GQK%(Zqf|;0$i_52s3@qnmCU0|lfVScihymIPSOk<1u;%=tzK2g! zr*VvnPI)TaH zx9cE!VdACa9Y7t^#LXQxKljKAFoNtFt&O82G+lnKOmt4oR|z*_}z>XlVT-S_0S z=Zi(i(nwKO*e~_azD9+f&;+iH$13&c^YinSjSb?Dq9gn3Mn*Sfadn^c_-Bc4F3?ZMLBV1iD3AzU4X~FPKZ&YU_ z_ETqPuFTBLdM8v}JJm`{t}t3uUF4jJ6J?cuaoyEOP)w0q?l5sNu}dNic5UxE_=S>O z;Rq8&C@P3<363^I#M`C3Zc_{|%m#4%k}4licR4`tqUm3hVEYV#c3czPnRags@A&;3 zx!NjfI8Z1VvmBm=K3^bZ*J&y$iPbMeF<6&;83~+i5D0WO-(2c)w7crE%{=v5-R{Fw z9zA%gqf*I0n<<77Ga>8*ChAHLqqIw1x7AG;O|lL?s0?$&fNh|xrx)2HH@lKx_=W2} zFE@$fT#J53bl7);_vb-+BEY19$*Vd!aoX@w*iF|ysOH=@PG)klwzPZ(+_ae3*m06; zK!V-FOgeUk0v?QspkqYJKrWJbFmLueOzyVsM+cx+fzgr7?wz}!=GKJH!?OZNl)=HN zzsjpVd-mqx*N5fu#5Jh`uGc`S!Uq5F%7q9{{_4+I*>0ctwt?=50A^$mB(Fo*WvjKT z>@vUr0GC!V|%bxSzCLaFUC=GE}C719W2@g*2hiw{I_{6c>Qo z0gjv)bEf|*^f}f44I#cg_m_-+fPW#c&8ICLe*2^5P5CEN%F5%hWx8Yuzekk>54Z0< zI{W?mcSyVZ5de6_{~m#fkPIi8OGhKpY4~Tf5$>^GD7^0%@Dhx>7%F%~zCT9W^^nHu zYiWfQX;;lNp1EN|P_&@zBhP5qVW&qAAWwaMrg-aRfuy2-BLZ}9y#jkyMC=n$%nbHy zM-`Y;TRT+4BnI~uI2QE7&{qJ|%rZOqg_Nd%IWFLciHY4JCl~lSOC$6_bYOR2um5jw z@c|Mo3I-d&Kqoc&+@%m<`~=p&3DW5`q0SibjXpE`M9ED@aV1y%)c7&{)ma0<^Rm% zqoUiUZ8HVVYBL5`l{7U&xXk+uP)J0~BKA{vcRoP8rKcYBYx}xPe$~htG;DeMMDa^) zREgI9@y59S*qCOvnd$Eu0%)W;iO`!X_|#J!-O2mz{FMBT^Ou)<66qHAw?7Y9IQ$Qb z=wv?%(bWO;Ngk7*@644cKpVG!{U$_YtvF zG|XtDb4hw>Mmkm|xs$W)?d_U*cO;*dVS{g>IsSSBUQYc`iSeyT<}kyK0!p! zR~1Vw2N^o85_oONSxNAlTUvstU}q!Pijn=1vaN~9xIgVzBtQUe5#heRwPn`$1Cf)H zb21R+7ocdbBOx9|)m=tTzfVst2g}DlcCKRt8#uKlxx|Q@B`j zTz)tL0UH$1Y6w$}=36lT_*3*J2BX7iJ@1;8zxpN3lcO@A`35wkSKopz#SKt*nHMwF zO-h_2zBsN}Z%r46hlSDSfA8-n0I(dS)#F?S9Nd%hEHm8QDhl%Qp6cpSA(2Q(HL7g! zt22Kr6|RnksG9syd^opI5TSGc2{ElzKO=9lUpx-`~Xf!_i zzB#rR%=SDfCO~{vFaTsqCF1F2K|6fv*JzKzGPKA@xfd14SE!_dJ%NVmuO$Q~a7^k^yhMfNUFum`@H_N=QU#Y$HhBeX$)SOYf3+=o9 zG)PD>l^=eDaFJ$ojl>>;kC)fz^kDTW0RibLN@HB!0q4Nj%|^gWz{_N}hZ_tr$E7GR z>LFTK#{4Vzu-D|H}%kI(LpR=z{9R8v~<2jN*>xk8fmm21_u$Zs8{7?bHKCj=mgxD1B} z=jAbVTHm)!0X-IhKv?{7`h=oOCHBZcPSl`k5;KU^S-$OFzCcdvI%x3oa+6tkr;+pH z%(`7=2<_g-#y28D73<9PXNWq@_==kti5{G5W_JwRA1`;n)Fa|=K&lOROr{~~1%ZRB zlwNTPkwDk92TtIbQy1L{#~>jktEm4WzQ){uG)=1_^z>!@$$WUsqBVC?hIZOZ6%`>r z)IghgKyF4x0nU*hMdl^ls?@gj_NRqa3Cp_J6Ft7WSCcNPJTEdwd$y6gr;a-gL$F z*+SnxOm!PP>NrIQiold^-nc3SBAt|tKDm;SLsj}`2*iB>0j<3&R;mUT>#ifIylej;F3iPZSu0JZoQH9zu>s(p+sdXZxD!_@)ldlG_@ zygY={ihVH3ThV)}<6o3ctnT-ybNL~EM3rvl+hzep>QiMU39vQFJWP6$fn$Q1Qjm$$ zfLgG}nHv1bzTCCe)ku^O%4J=9VfW2Y0MMuviVZ?Ne9!*QSVmt9+yF#*#B^GBPLbd`CaC+uAT;u?^p=B)kkX~?ykRk9xC(f{r%@I%*XG&!2w*gAX<&Qo%{N~hWZD?dN~>a}al zU=bw{k_CUOPK+779}kZ$(C+@UJ4k!q<)+dMUrupPOTlFO zpB7D=k(-N)84cFbN?K8=|N3XRy-b&>8xdBfc&ywgh~E7s>9KwwGG$do$NK29>_^t` zx#@mk2L~=Pdsz1v7;u2)mcV2EQMym`qfgPxsDvhZ&B=nTCn66YUgNW$k#KSOrm?@Y zcYeHtR1`fY2EYGIwvGyDejXV+*5bx0y_mdvmEE+M#E*t^GRb;$h3yBB_(H?`sTr~dwF zTV;GqZ!F$Z-JVEqP&=90LzAk2BR)8|DwFbhF!7x&x#E=a{72kJZY8Fww{P>RX}!PP zeD#Gao7R_a9BN+>;&JbOva2L=zGOLXBc7)p$Ur+6VC-lf)Y^gm z{fFGwpdPCPV^YW6+&dJFzT>ib8AJ%fMWLNGZ`S=rd9w#B%*Eb0ZzhN-_%fEifLhmdj zEbR0hgC&7~EYeJhr985*-}?1*@}lC;ZmjpcdJf0V5QBLATu5N7E$pe|YVy#cqU^sm zqowDg52u?A`RK^-hXN58uX7cv6+4sp($`G1Q}5wO80YTb0apx_JH4|SFz(eo7OwTo z?6Rn=yMu%aa7u+ zu%4zyTOQhPU!x$92_g*aeQG)3Mca&)jyQEm?Cs*c;jrsMf>(itxTdN~T3_#n|Im1{ zTC;n0*X+qF52vPTQB7HnHdLkJ-PQYCy|$^B8BX!ghE5hzyphZ3O(`#rui&L2*H2n5 z^@o@WOc;Q<4g|gNL?(Qh33M_PB<78RzETd0b@S~Rg_kVpx-i?4ta7Y(0%vcP8}QMS zp7=hyI(ut)<`4g2+f-|7Yl6_H{V(UrXf!@>PI zw~NUXG&U5aP>z+GuejTiR+WDo%lvdFa6H8aMXh5FlZLEFd9vG_uTxw;f8A=q;f)tB z3(J%2HtDcEuOjbEW*xDG0yg~}yTK*iE|=jjV*kQz26*Lj72nKM)g1y!%oTViQk^d? zXqdSa?euwl_Dh&&8rL}}C@5+rc#`Ge7eFUtKXi{PI`qj=vB(%5O&;wWGt7sFY(c|9 z{$cQ1#G-6DY9IT_8D&dl9mrX8QN`xKD4I82oe2+o&%Hk7JZBto zc#uugax9IrVxPk{qFX^*n+B?SczSyJgK$h$#UUu@xpzyf@2vCdqTP8;q8v*OT;BWN z5RjH8%hC=3Ox`D6yT(<-N}ch*!}9>C((>|+xeT)2 zhv5fMuVPFY3@Tkuoj-pbk~Kb_`0Epxjq1}AvYU7Ep#mmvWVo!hhq_N~kkCIOouTu@ zJmt_zju(o<=1=tE;`j{fAp*#O=Y6^925f3+3GHZa8UL?c%Et%5`oqOdL`-}?6+Kw4 zou}LVi*43X9M!QTEHWW3uzK-cDev?4*BCC`U6g;$`dgc<*Q#V?w!^+ZepoDyl(aA4 z?4e^rscJv;zl){4tGykY>as5?YLguAg@@4qDcanW3=$=Re&}%wrY9dn3^{Tsg4i4W zYcCmSK6J^AWQ+LDS2k}xmJ+r9CT_E-o7rvbR?T?7NcnxEW$L2h87NpOT3P#BhtV~d zpY5~G`AuaM2eTdOxcBO~@gDv>t|pgdNy04okm3oc(7bv5;_A5Y@bH$FmTOvC zRMg%M9as(Tv$pi-&dSSJ*Tv|$>to#A#eqejJbk)J9`nJe$FBNBO;NDWN26mX8aldn zRaFLG=)rbJZId25l>l`_&vlypWyH-4IUowN@BT^{mW2z}sj$g|U7u6XKA+W#{MTbO zipH^|{lyDgRfU9eKlK!tc~*F1FP)Ah0VTA$W4~UQ*@V)(+Y>lS0R+m~lH2^FqDMQIRR(6&&3|UlzYv zOws|f_{MVJ^RvmJYq#4A6-5p>PZx>>*5K!&I}61^jMnEu^iMdO#;&f*tK<**xOj4zD8eESx*w^SMF zO0W80-nuS3UMII9o-Uiyr6nSXwH%d{m0S>DQh4x6$N5)ja1rSl4&!&(Mayr2Nz&H# zE8djo8I`>g5JpeG@cN^_7AH+dw<gbY zZ8pxBRZ{XCXyUnY_dl-;34GB1;DY_l5U(8LanMlMH#Tg;{)0ikMO>iA#ItnaAfi;|;=Z?z zwR0d4SXFiV_~=@muDVAub`0}%o8LP@m3;?~fAi{3fr$Hn7La`6?XcXi{9&JrpB5X0 z@xU3goO*uKXnA>IyR>FBN-lSS@X4nLiLlDgQFO^-zaNheFw@fqO-p?A6-rbMgd%#7uj+w(Ib=1U;Rdd+kN{cz1WBIR7^fQ_r2_G zINOkMvjt})5FZr4)q>IAy)WD_mH79|#yI%z zR3r3!bj{EPuQ#paD)!Aa9hK7&i&uPayH#;#)^N^xo|K#nND*EyF}F zwRb(wlZEEKc}s&;_$B`Nq~MB4-FKfyt+XL4I_?J~(2Krl9)a$}b&?cw`L`6{!-0uj=q@LaPyL>@D+o{yYq_RXS zt1(+AM?+u#k{)TUU253DEoyV?pH2LatC@f`gj=O<7gU2G#bPi8%8t-1eLFic7@<{W1oNfUnoS?e;maRXJ^-?8bT;7MZWIHi}^ zf??yo$EunBVKAvkxRMCk4|coMMlGF}D!y;YZptg+2!y4@vJ=+vcRfm zZC=wiW4ild8~lSUZ(F%%eS1adU|QP~DsRp(EK4a(BC^g(girsNPBR+e@XUZ)X*fm5 zR&An9;sW-4Ru*w^aPWrIB-!J4OeimQO)?^)C-SUQLU(ArQ>#RNA6`%7L_uOeR$u?D zt!Uys!Gaq%sq3|ls7htz_FHpl{&@c31K-0(k65Lo7%dkrv5?1@sEi!=HrJ_GJ}`Bl zeiCdMANTz=3oQwJ)>GL1lr8e1_0LSm&9UF_{QdJ>5m_t0llZyvN52`sJqdTzsp#M$ za(B+ksP;*^znyDK_y_?C^oP$oJL1rF&K*$Ak#A4j-rzT?3IdWeEIfSbU4ROw za+g9TkFq1PX>_X}43QK+N0y$9&l_j=Q;rRKp8e&EQE*2`$C>=?IKU%^STO!&&SKRKB$D@#n5wxzan%_HwgZUQX#){j+*X zY6jt%63Gw7+_5HBRz%JfNjcrdFc9;e35iWk=TW%@d2<~rv^h#6r{A{JI54e2qA#Rp z_5P1SP|dg0KUileC3d!%jh5_1a^#kYhDVSiFK8@y2%Z+8f#j8xgu{bbULO7PP0y?> zlg~J|-lzG%-RQq;_~dS@58X@b*Riqix;mK)?CeEk{+Afk!u6=D16=7teMduz;$bR; z=XG@NR6= zqhqy=#iRZGBBrY2ea0Q)0PhTDOifMyRw?v+r2(JU-0$Vd?@iG|uPe`@C)QmW{kq3? zz9tWJ%VIx#AX^ydT%_g+*zCS6eObcK!bZ5JVkuF&#K&LuNMM8DtOyjTY|dkPiSZGB z$|8qv@dUNEMKxg{gKyJYZSI62`6mCofD0@XWy?vs1eqyx4ywieAzxYLDsQZayI&#k zsw^XZ@#I<~yr{`!ik01$g-Et4Ok8ngF|m6Zc~4~zm~W89Tw_v}BC2WySpw98r;zs^ zNOAN}>3`xhDDG_Hz0e_=f7<*;%yPjcx8BQ%oGE3-#YMqi{Vt^BVLjGF%G6>2$zP^5 zu~;hcABi%&;7%$zEL*ZECP)2(pyC1%pb6U)qGbP99+ZB|!U951UZY2Yd*jq+Cbyo6 zukI5oADjE2P1&B2o_@k+5O=efJH=6Kt!=cD#n$o&LQ$P)Uh;gBAyn`i)uc+ znLz&M2eEmjcBqI9OS+#uW?HR$Qe6q=H6caf6mmdE^>92xkG#&p9b4PuaIUGRTIo*U zg_FM)7NVk}p4Qf0gWoW4JTvgZwP}~&B31T=mKLG~fpnSRHOA7k{A3I2{_%0XlZly7 zc%Hxyjo~bwv)9i=|3p8P)CkF&UpOB5OiUm7ThN_!qKV;iWv8zU=akk8sIy#LT)A>nRNgsES--RiT7C5bi#Rjkmz%1)4+poY`IJs{KJnPW zNcHTnNg+`>F-ow`i73{8CcWBc4Wu68xORVdayMSxK=ZR!<#hKk!xd;uXLUuXUJ>Z`SdRF10W>W+S=O-UFL4e zZ2V!yU=|ECUsMkd3R7}=Y+TKxnx@qr8$LW<<*eSwFaCx!xX zt5&*o-}n6PV&IE16FOriG@R*i9uR zrPe=%s(B+vKYMitD@lgp^sb=M|61DNUXA^boK`bz8_+usWZXuT%gzjL?yQ55*nP)` z6dtP{(q%q?6ru5gYWM*;NfS+`Fih!*%k4`?P@u0vEugu4B2V{{J1|yM4e1V83(Yb1 zKc6w8l2=L;7EcxOOdUjbS_sp{>Tee(P`o@@JWLvUqe+||6F7lkk&&imW&|hwO~!Yn(vquKNs>#Cr`o+eGvBj-Qr+Rg z9PZAgR^Y4V2mAV1L_|)*!QCmCqS94-5XFcdyEZ<$06HFAcds@jQl#;vPc4*>9*v?& z2>A3eCn!9;$qSF!T|40L#t+7|&;Bh|{PW2lq{HX%n;y9#M*d&pR0G|ak4mGPyAAp^T_log;8YnDwvpD$c{6pW* zwb5$Yz%J>;o{=flxK%Mq8`8x=eTZ_cW+$4M913hkY7nciDD`aMA2<{_;I|Eq*Yd}k zzmgO#9kseF0>I(u2+@|5Ic=x`-`rZ5(8adx0=7!WkUvI=$zUOMQBCWTSJyf0k7k0T z37GPhK4)lCy#jSUFkp+1u0k~cMB?lCvsw%H+LAe?1v)l%K&nNbji*fKoU7h%gxIh zp2bTeHur~^N;@Vd!$Ze}e|(dok$^1Y*xtlQr0HDbeYYk1B#&9rKlIl{34nX>wsiCE zHc8NYIK#kL@7nH~tF}@dF=+4pF(_4jm&u|inCkIf35)}_E;*S_+yUNET3SU>O;X3( z(RU!tuBBNsNE@;rO^kU$W$rr}P1#Je^=2qEnoiwhBHbHK_)&lDItd<469M{yM|sQa z7}@()BKN+DEJY7!*t>u8Q43xpU2Nf!{pY5RZMtHvJDNY!pmp!eWs`?q?l*X}b!dU? z46Lu0)h_94knZb-yBfZ`OY{(fF_itp@UN2vDkDu{ zH!~7VNSack;)ZR1q&hG7&_>tyX1!9~Io;P0%Cb}cmxo(zEm3zg>!v(6<{9Ivocg0J z_L8=m5esyDFHphicjYRgTFt&)Y|{#DIvQ;D!^^|V>m2GO6bvwH73;FaUB#AdloSy) za=%+0pN(9}E4j)NrTi8=3{&;T%`7Y)8%}giPO=~z6hQKe)j-yqynW#)i%j&L$mezW zUe@7?Y~b^${;=HYWZa*hpRWXjG3ZGe);lognp>XLYD99}2oGMC0_WMbi&#trZfP}L zTIwjvQxi@qU|XMPW%rkuY zu2fEBpO>^b$*Q1mf@<*_CxfN^@jlGu3<`WkDveAVg*+GAY71NB!d*!S-VkW&8n`x6N8Z=rYk z!d%>45ZVh^e`Pf_^TS=Y(UG^O41*hoVl%6?B2S$aRmJ@#PU(Jp@O~MK)5_|zS>=_- zTv-PWd@tGuh|HS9#QcV@mNKnRsTNyC&S%zSG+!oIU<~`TF>BbHOJ`_p3M z)b>=zCCh@V4q^+><<;%%c-Pj}^a7`ZFDE1lh)ewJg?xr|nbECONfP_SO!BjQM^HdX z5tIdM<@Bp|ov5@+y}OsMUZZ%b+Arm=Lj;H`@j;CvpcIUL6(eE-Q0jXl?G;{@zxQ!- zHjie)XEj25-xZoF@AE7~g_?J7h1fNh$?(O#ThusHn(pu#ujY5V@NS-?_&KQC=8PfT zljIPbDhgcVs(;q70xZCOR^j6{5n54A;1GZ#8WYvzt-j4+e2Y8QjQS!9Aq}{>eStKn z$cY_#@d*80D`C=UMN3n3%a}u-6HapdOqJ)Z;i88rxe1$z=Arc!=NXqff%5lKpVH|> z(>0r=E;cZ=)yk(z3JKLqgmG!4N)iHyOYOIKIxgPh8mF*rQ*yWS{fo2AFOM#0TpE@q z4)Yw{OiOevAm5xRyvjJ_-)LXvVoGApXnj$iv)&=)!yrLjzzj2E^E%dpDWNcd6KxPd z<9c%8IS~rX`!KSYh=jzHF+{z`%35CDk>Dd`P4z+qcboL*KR0*rCN-^8E>MZK*hi!C zXO?ZfkGHVjAo_OLYPp;gj^R<+kq4itOJURS!D19I%~ZZdswzdj3vvY*IMb7-N%<8$ zGuOD(zm5%Fk>HCXDJdyw>E1T=&g)Q4GF3F)}PLXYm zB@y3gaX}y%pmwlHf{?`4f`bWGlaAtGAE0Dl_>{TLuY~3^JN1N^9OiaX>)%U#_fAt& zQ*c)rgT>1(z^#3+^OcAOCyn^647sl-PYuX7^Ith^`c;Wc=diF~U+>00a-hC&9t?G)B|733ewRje zHbuB=HgaLk5K>C2K4r8sxHt&}Vl2E|a8LQ^&y~M7jRUuwpoBzQ|D5{iS&yMtHB9}y zn?D(U5eoDid`eA~{X&14A$)Q!X7&Y3BSF(U)0Ott!Ecu7dAd1o3xoVYn4zJiP3^Rh z0S=O>lZQg`1dLKi>M8vZ4D8T%X;8yoBXyJXODYGf|DRHOZ1 z*I*F`V+>#tNJiD?>2)#k@y~DHkq`IygW(jJxF2&P?H=w81Bdt5WE(GATh+b=_#>U{ z1YC=^uwEzWUh)087C&wO^!3t%E;n!Y;5rtZ0^4J56CW3viVkPP21^Hzq6YE|#AY8G z8(_7$!6SlnAxDoME#KMCN|hwPS{zF8B)^NRxFFc1U;fg0TUJ5rc9M|D#+oEZfdw!D zp{1pE_%Y-6r&_jZ`uy(a*rS6(+wuzCQlA>h>T&<=e^matI}r^l!e@pvVo3@JlW8V! z`J`xYX5N{j>N&gloIv?`@+7lm<>`~hZ=b5>)O-`TGAUrI+Ew=lniLiUYh`Ied5s_o zQOLY}PVDz)bbgdtjGLod<)aD%aed>b0E&RmUws}kzEl~Y@jyKFnMqa@-Bg)|Fu(5# zlUSvF>W;D?g9L-)bOp8e&QFnuH3$}wy$qU9(Ndpp1}xZ zY+UINlR9&5*xL?S>zxQUqneG`>B{9q`IZ5 zv0OP;i+j+vBg!hIDi<`oUb4GTpHLz^;MV-n$r?g6d%QqYkdZjbdS3=l{3Q5yb8BmB zW=;+@&j|o|FqsU7YS&#p!lHS_B~|sbIih7kLeLk69s$_9_Q~R+(8nBt$Y*i9U4TXb zeZE#_-)DGJLrUR?)_|J>kTr3IcEk(18wDcXmlmD}-O0?#O5q)Bmv`tp_Qd#N8^YEI zw|#$CRl8eeZdkItb6Z$yhpaYWY>iRs9 z>~$8T%~H$LL`$Z&e`qMnD%}<^9K1bK+bBHfkz@HPqquBSO6n%=J&2HiW;SskX-WzD zAlKicLwe{Znt(-@0yuKKKl#+x4zGw8AwP)5_i^tgWs6oVU;L8*=*Z zh@1G%l&?NyCvuQ6%qKRP7f&Kv#Mq!CUZVrXDk`0TC62x>REN;pfOvBoRy+a}10Bbl z8EvTd=e&djRz0IK4jE%O`F%a@QvGhm9C;M}aT+iRQB}B6;l>Yt*DMj6}YcqT%SO zm_RkF;Fzzb4Vn(JNC(z#)S28fM|dqVR4FxT&m`aeE|zVpFy(rER0br5mfv0YYA;zeRJ6u}t_4b-W*)k-H29sCdD_ zbpV=>C1G=WQhCV~uYCD)>FzCwu}W~#Lj0CH_T*o>Y3=64=0&5bkTYZ_|Bu-mRiNg78Sm8*`68Hx>ANfA=dm-XWHumTZk<$eQ%6rf#$SwZ)UhyU732+SE!Z%gpF?>5}AA*IIrM*uiK zek=iW&of!>hL<1rjz>29sWuMlFa z_uIP5%ggD(jqJX^+6;(Q5d=;9gwxgsPHkp>ZS_4P7{+azvLh%~HjZ3+MI|LlDynIn zgS4>qY-1fAe;^oPboTVO{u?wG=2-7uDbDj38=L^U3k=}Dl219k?!aiJn8|bQRe}8F zJ8jQnV@05^t-?c9uWh6|Du`GqFg2^ix4TW2^S2NlhuM3X?fYl-lGAJ3n|q&X0FHpE zVfA~ox=@d0wU0xm@t`IlO0Ud$EO&5c4F^pK6fe4Dv`$PMum-XpM|cE2-qfyxn;$Yd zd{(63-MN0zjXjZ5_oYq^PzQ3Fnw0+-3bwYKK?8>nJZR$Sf|Py~NCOi8+Bgo+;5k0@ ztnqX(C#J;f?hDlwa*>ravS`NqgATdja4?Cbr>X|8Q8|hkO1PC!p{{}(N$n%>F($De z_k*mP~NWX5!qD=Y8fKrj0y@jqa`BZZdUts45`L2^C^YA z;_>$i2Xh(hgJa|33U=l62?SGGxYjW{0#6%thuT|m{5N9a5JeTy0hc0@i-zn{GgGU? zNl!Gq=j{W$rW~ZrhCZ(bRQ^1Vw_9pQXofHpx4HniWyboc7Y#!%N{^cpw!hUa!b>Ue zyg^d`=m~t+m$hrrS;X_N9uC}hKlO$u6kOYw5 zgppQ;=qU0**9DmpAYbJ_q?fw`-t#Yhco}4ruVih_y&$kpC6{w#=7UqN+D7+!E6Uh1 zX3lE(oZ;02c@x+|Hx%Xqyz8;}%oaZLZ}X0_ zV{CQ1OP}t{Yy{M(N{3nTu8g)Xznx$@5-fi-xWRwLXmY!ZyXph>ixbmkU_gL|;D~SU zAi9ZpBbfzN+m$qZXJQ!%zTPg?2yVNq7e<@S4ka{*boA{h^@BAoqmu82CYTD|Nbc7q6!u5I64Wt!sDQ zoxPAK?o*f9}v{a$8lyw~sAUrMVEd9wxKCq3;);&x}pZ?Beo>lBXg zSl`Xh%|%SlG$)TkShDDio1o-)BxAPsmxWDej}_(R{qFr`q=38v3B9?Q8PlQqm$mVf z#d>C*#T<^JmEKiQqP;c(#WlRHX#h*JEp`ALJ2?9!S89)?8o-{z{2Dy>`0g~L0X}ho zNK>`Ue6#dW_H$g$1l$u4A9z5_#ygAiveeuW&*5>x{dP{9HO)ha43PHaYG{42iqH$K!N?Z`3w8nNtmYVuSF z;n%IuA!)1p1%9(6r3382D7LB8Zgd4mF9Ch*m_4#=5Y~Dm{H#24?ss6Pwc<#KD}ZbI zGiMUkl2gH61$RW{1S}G){tv`Hbl!B(bGX;-u=O@A=Xi#Zq`#%8BwHr9U^xyFnqg21 zc&>;*L}=S2Nx|gpF=%OXDTk=9jc!IpM3}g{ySFYIe>fbQ`N&`YtN`kXljx8gwRu&s zD=kZ6raxk+(c|1t_+B}cR{U{q`1~JI#z_+{o=$xEna@mYAke8^e?dIaXeLxQ>wI2R z^d*#%(0?FIvib>>zieISfQ`hvMVY12;I_`r)2h98)TbF3xP#bNV%4<6OGv#<4N-`i z_sYTT+RJZf4?_$FeOJx4%x5LlK{Rpoi`e>?FB!*hLwWep-=dIaUGYx~53Wf}EPafk z?$#QMyIr9?PAsboCE&awBB|YSkUWkOUvE2usPE#e_0-6Bzccv^S~(j;@ju77u>j{z zWPQ!%n~r%3mHA{&_S%^Ko9b`_DnH&;On~}`PaxmAAyZojr$LPqHBn_dK5R3}JYvIC zEMT(8`yR}JxN=Z_|mM5=PSJ^DfNH^F#1J}YXo(KF`U#U@4yD&i7BC@1e4fy z+m&3kwdJ;Wy>g!e31BWMsD$F!bsV1C^fYt_4$X*&# znKF(*p0sh;{Triae>5@JL>8|n|bsZ)JB9WJj9k}u zhj<(3?7h6a2Eb5-&c^{u3InYhW+KsiK{eXk3J)J%mXMH0_n0|ZeF!!-D1S&+3ha@o zRe0ff3`7=hWtYn?RKhw6;8FY=rY3)^BbF%(iyt2s_U8`)y>)LK_Vj4}*HDP1I4CR> z+;?p?p4n+`F1%<*;#0Ql2HQz!I&lYv6ZU2ADl5-=czA%VAYhXuZ(^t?=%Lyt&H?`D zRsooyJ!3C-eo+0iIX{wE1d>Tcq~BUZj4{I_#Gj6vn;YC`jhFwig%c1G3Wv|wgJuKD z3J`2}0%gJP>`noG=Q+%}B;v2GbbgewF{>pXAYVily2A38?pwC2trEB_LGZ3K=wWBa zc>UoC{<%NKr!L`u|FTPxztHeVyB};0a_pB8e2s)ni{|FDA8qdBf|>gtV(IkkLGpEM zQ4tk-e~KK?Smq}9omfRhAB}ACpfTH}3l$$$1A*>;kEV96FhDpWd_Ob&nc7hNwn7s2 z5fgxu2L3k($KO9)^uc?W`V=mdm6ozzzWi|Hreey*+*zosxY12|w{X+3HrMF+BF zg0RgCEc0XQ18vQ%qi&<}#Qs`YNgsnvPQAYM2GYvcZrliYyJaX`_wKeJ5Cn~+Ai3>R z!mR_QnTB1PIVZW3Q(IG3W zVRAYE;sp))XMff9ZP1~*M#n11p&5>EcThkT^9x8yhQa;B1}dB@XR7Q(woKp>}}VyYpa@Z-p|%TZWeXcE|> z*K~eM&~57;;HvBw2lpWWMRUf0OvefXc**Hbm}XmQ6zV%YZ33{JBzM)`X#si=V46!%T zWC7z)QBlSJJhqsOg%wcXBewZ$<9`=vxW@Z<3KNtjqY4%FDi@O$DNQeqZd=S78=k=$qn`D~~iLr(a@zelZ`2^y?Vu16bUm324RpHhxE`*{S@y0Ei!} zJ=@a0cds1Khoke2ZE^7LgWtyeS5`*+Pk!@n$s0B!)^9bfpHsXRm?(3@K_G=PDt4D81`6~wYu?pE5e6rpgT zPkr$WbcCN=`rb}vxUT3-v{^kC{2AX9I-V=uViWpkn^=GH6hC6XsV2>lPl)?|nVUN# zQO{2iw#7FDoKiIfU2vN3e95q_8HobLTls_)-g7qz-*~UzId>I9`hV-6P<3@ROs!~y zjLDrq)*HaO+*=e3;nRHCY6cC^eZ~_P+s4^>c~60h17aPNs?l*FLIP2o>r|o7fz<=l z%5w3d|ATW-0KNg&Yo((A4|hiw7)=qkb_Rd)=Nh#=B#QC&Ik#S*0?`u?*{y}-Nb^pB z6;`2tm7&(GSS7B#=`z`knB#9VGp+9G>>g}SY{xej!J^f@Wh{Ev;f-x7#P%nhD+I*F zTO?>?dgdP*49U8>xw+id{Lzyg!lHMrvx>;L7I^m3nNf|q`XNXY4S5KbQ%QTa%u~#; zK~E+{10gox8B#!q&!1FaM+1j)nenYu9+VqL8?)ESk&uv(0*47{aQr#3sIlauoS0Xkmu+(E_;_&xG0S51L;lhPU&xt)I#Bxtf z-QaZqieI_w0_}?zFXDd|>tQ@Ru8=WHhXIFdk&J;!o4UDrb^C`C-iA;#w7L6zy-?n} z$c4=>KQZeZ6)80Dl7ne@eC#TwhMIAU3<-U%Y~V6DCO85%Lk*E-M|u^`7vF2mgIrPI zW3-V^pU35hfIIRmCBao1ll8F9r{kTA;5&ejV&PY(>8^7ZR7 zR#u##tj9OqN6P4We|XF%L+Zxc2$sLiH}NSf>XC-z>I`HA!5My#}zL=j&JB z*H_(&$Q1ezUsK5-;=h2ZEW;fugqOOGeCGI#40MxAw-ge#lGtU8u69Qdtq(9*`1D0)}1XAmg#{*;?hmY|5 zhM)YP>mU;n9a*Hz8;b5Qk%Ab3Jw9+i)0=J>TLUPJ|8O_7Ig30x;4G zuClqw+-*mn$HfJ@O?cB0k~1OBaPS?kbpsf>@E zFYE;x2rfHt1VQj=Bd8*ZPN1jx+2$E@>mL^>0Kn3pJ=<_~x#}5yClY_{(IZhR#wSU6|Tos!C8t1*s+@@vSMrMT{p}$W&O#A}-5p_NaG*o&`7=)FSbdG?4pn%LDg><>5k(zyo$IXO2B`mFQM(jx z0fA`9lUEF_fd?8iUt0ls@RaM-n`&7LC6ud-6Z?w%`Elm=%ut@{i%m$P&!JZu{N+z& zv+ps|)&&8Whs~<*-@k{SRxYQef9kX0Osd`Y%-^iKqy%1TfSG|IBrxB@)90i1ba)Q6x4stIe?J| zwwi$#9^le9Nqm{ZL;#p5s6vs12FF3#PtQv={=bSL8bFfoz+5!LKaL|Ycu?tkOo4Fa z-EXvPM#(J!Z*@pJz3I=-%94?lt^dAhqK}Tm(VgWxilUOE%IE|va;$b`MF0$1y_+ii z)+I`d!4{?;ZhUo~+g3P$sxqB{KH&OzH}4(}>Xy}m2MJqO3iM!l2^z^~7-BWH5j$@_ z?D3_MN=XK#R}>7&H?7xJ_6d(4KM%Q=>({TVZv07^VM@3EH-S}?<*+C^-F`#z7N*=ngICc?II=vu*iX;9a`>PDth{sjU;gLk>2Y$c$IO3PrcCnBooyv(485cTv6CYR z)}@RS0h-O6$n#yf{-~HNc=8Eg%gdsotXHolx^gy385A2dO#XcPliK`Ab=;qSH;NMs zDfYPu`#tO-f$|B>U0)&mqpijsbO-5;L^E>KP3O8Fv1(I>6v>%`=^@rtnSi5jV1N~k zPIjelB!w6j>aF~lMWkEkK$WR!8ydd8_v%L43)|Ex0{8@PLU--fdR2zPkKTQ5-R+N! z(Mf@|&6roo-ir^g$xS2?3*+jcQEio=F*yP452|*A;6}_HefjHSud6LgJ{0UgSW>2C%>i7*E#(^ zJ?_py1GL+9|6}wAaby4{_P|Q-6g)<}fAH+4Mqn1${EOc&tGD-CR>LGR#3&*zUY?1^ zN@f8xS44~-MMYW~YGD0QkmEoJfN8NYH!ebh10}aZHoD?3jqP}3 zLAVVJ2of3O{jWn`O7cZ1S4m*=f6aaWUTaeLHb38?D?6KGb7p#4!_ZLb_hZ@x7`gWB zX2!F8H0G~R1ExLZ3C|2$YAG#?TAY> zCt)e}nf%kTa5y;!LPFZc1FF^~ zBXgC;>(4pYtw><%0cKW0ezFfrGOR2U?;fPMX$8+Aa#&XY*)(cp*=K$Jf%!(N zl6?Fk;f+bi;dxo0q%;ukQXGLvm(T6kW=_Wd38dWq5 zgg}Nlz!OyTW4jTj!+jd4GgwO1iP#$B;^L5PS1v|#zvsGtD@cu&@VvoPj*(RuKv=o$ zpqqIQs`>|S-+b(Po+-Us>?RpZ9c7l!saz|u6>W>0gn z>HA*eM<3&_|M=M}oGM(bcNTD#3}79lXJov{Y+m>RCTIb8fr(>vmpvrT<^od_Y%W-C zm-4lD828Qf(Ie-wreW(6XF6(`6(Y#g(6(2`O*DaTS20MEU=Hia1UC8tsH*fpS^}uP z!^=Zl1M!R0^;YA$PYWWuoGx#T4GhAvv$=s>P!aG3gK33%+$?S^VEZrVrZm80t;5=l zl*~*bm_6#gw_6Nuh1S-DO$J)X$C$|I>JIqflgRh?qon7HzcQaaOAV$3jMI8DWPEGZ zx7-R8OHLpt=&rDZ*H`Wc8(mg_!|b?mtiv?kb-KBnrEQ zt!BQmdIhl^ie!r*kC`P*=@3msN-jKRv_U{rDP}zt^?h9R4P-%63rdi`2n&>BO78Mr zY-@iKC_ii_B$KBr96n{_zF4b9Q3b7P&@RwKL-+xo{gne|6C0dv3?t98yRC!xJ%VIp z5cKZu_ofAve=UY5+zJpYwh$o@Y{*oC-tVpKAsO$z&jY8+XPW|<5;x1I$W2H~29K@5 z{|0s-L}Y1nx3F0m4Bl|)1+uu;zxG{XVX4h{ z^?3fF1Pz3v!=DcFb|D-AL7~?P#S;a4bCpiGwFir%AIae~{Dtg0M1WXf_DXI83+>at z37|W2ohX%1&KogTp6a9`lvjV!DdTKzq}-JM9)UfG0Ji^D_bF=VD@@qIA7P81`@Qph zghRaifaRtn=IGbjio`AozeJ?D6A^J8S5zP{F29PnXc;REx)#HP;6Y1GhRuzzMiJKB z=js*8QXIgTCWB88gGrdXLCS?c5&vm|=p@F+#!kVUrI;9+^zLL>E(VJls$7V6_ba2f zD~-2flhI!}ylHXUkL6D0VUu>RPh7=)wr6|eHFLeMY;Y#Sc#n%r`my6@n*-N__t>gc zfHL2zJg6h3w&-ET#m|A|_CFS*7bxPQlHpVXyuplC7LA;oTy%bPWRdcJD*FFqcDoco zQWCRFp95mf*Mk~v!%$&|)8Sd-Qp>1CbP9&eDMR(l9pk7 z_&+>O!cPErU(-~;&Akva=;w0?5yA6u?Ub~%pXD*>PGHHb9FxwAisL^(P9RAhKa`+q zpRf2|2jF;KX$13%cS{6xZbMNeavI(aVbL`OxTTZMCMK-Z2cG8-{1+g?21t4;xQc^z z|KMvhZk&GmeT{4iWOZ6TF0?A$F@vbTaAELt)2miGz*bk1JM=9d0Dl|QBnRFfRQZ>O zM-bu}>Om?_;pv;_PJz97N+_NS^*NIE(#U>>wTb*B*dOWr4!rMU&0G zCmJ2>d~~cKfyI;4gi1G9h`*Jq8*UgXbEZpW$YD}>MrFRb7A=gfQ^_!rz3D{;@(i28 zYe)grEA=dF#$4DF2kM6*?ZgNXw|Ix2Y|7gZAwe0ijDRu>StmIAX{n?ur`yN=A=ud1 zo;^4R_JYbbUZho*SqTDIk4Wy=xI;IH7y14HldZf@^caB56Bd=Z=tWYksXqE)4w}85 zGv?Em{6282{K@YE^ICV=QZ7r|*~J29@1Dti%u6@M1HiS{5y0wvis#tew>mAI)~2s7 zwhbeRAIdXStr9%-f$+Xty1OkIPZW~=JEWzEw{ay*mHioz8||}H2Kv^8dMr^LN&KLS z9IJiNeB><_iy1fxQ$4nCAHeF#Bs7KzoUY0Da3}qb!VIQlFT3;Wo;C*{EWtFwq+G2v zM|^iOIuecymkaU1{wY#Y)e(W=-;em-;8$0Xg!B8fw9d?#P&5WiC9?DI3;jo63hiY+ z$Jl862B#7;!PD%rjSj>N?UEO`jrMTNQ_D~ELc+lFpsVX9FtT7}z#S|!;F8ax2~myy zjcP{xkYBQ>Dk(WFl%T5Nopm?wO}|nb4DO8|v$U>px@SKcKijpOkE?WB{>+crRe`}k zbsKQ{5$pEsUEKw@3WIWw_4Kz3$qwJ{2~2XJcUxm324&Hh!4HNFkVfH{o0-~0^f4{1 zuel60JL^ig_xv#+v~Aw?BIz;i+JBFA^oI5WvzmxSqU%UQ_Rcdh#2P{pj0ebA(WyY@ zHznvG7&v0Q5w50)s{OIpNpk2jr@mnP(;Zkb=#60*$npM+yuowRrNP;Gd8bvQGkCkJ zL^fFUGlyaE&qrw0UczO+h6x)}M25z=s)+p8_*+lzh@VP&WrdUemyxt0IWQw`@ zpPGC}h@9#paD2;Q?&|uFR6olvWxt}bZz>c>#=CMFG_-;F)%@oDSk85=Rsh#Aki;|4 zSJt~W=Wo~k4TMM*Po06z(#IF%EF&YP1py**poBF>byXPi=}U){ahk&+ngT@v^(QHX~a1hnf4cYZA`icq_R^O~KDwmNr;yVe|ye`et)u<6FS_a5z*q7|95cq@~?xDWC{|EDH z#sd`=6c#3LWt9m|&&dDyXz%oGU&Y+PoBSXrB}G0Z(0ShCU}91{h&OQQUe{1FDwRAo znfl2Pf~TPN070l%QKHB5tx2Au<^()t%s$|QaG&o}LGt4n=$(Ib@SQVI;{UiiStNu0 z^*tFYEx60`#R>1e=8C=!rR^1U$dyBn({Tl9}_)Q6DHv6spb#stpc<4n${O3%m!EK^%YCsuh&S-?Rw{Q_jrt#Ngt`Mn%l>ZuI}aI zndZ6XLuQdBQL(L1RrD$!{r)&8@=*v=^5ZJ{k;%ckg}KcGKHA;XIdt3%a7RQ0M{oJ0 z%S*e(T)YhflYzTc5H{!fmDW3dujH=(Z%47qmx(6SUY79E>~T;>4TKXYYPc4irFH;Yd_mNYSOLi*qn*j!aa5QG4 zd8e%R_SkKY=QU-$SK8gCOZrIV-H*ch?SwVtj1NYgQ|e zFG@>|7#?JuSSPYPB5gg|zm(*iBS(7}xr<+c1=9krl;EPNm(fKxl_i|x##VH{vrLkP`yX0pr*!((&+{HTEYn&NC-9i zC#_Qz_fDZ)7UECbHBjq;DLK;mV9?B{u4a#3HdZD`|B1uU1ycpRjP*fTVpC!khl4O% znp~B)O4D1ye0VSl3VKlFA*cD(Tq$TRdGPgeiha(|$Os=WKA?-3Lwhx%V}&XFEE9y$ z*+RNpB5)2Ltkh04jsK!ntipU?qOx3lmmHxZ;|D2-I+%?chirP>=Ut^nX|LMaCdCas zbPSg%d;g0O1UvSp(WHt@#E~Z(b4cQ^d0ul}R zm0PmcNZpRgD$z=t-hYcC9~KMRe!MH2)lTQ*Frud8-D4#qjo8m?>N1@;xjCKl7%E~GRfd`mKhY9B= z&z{Mos3yVC&ZL;PU(N7z_IaK3`Bu87L+d#;6l#LY+~@aTdY3xdxCSvoU+i-vM`(Hb z4CD9T)WpO zE^q`6u5|{xl+K#56B5&JpKM@D8Kfj*(iMWZoo3jPDW(Gez>E_fy$D=O(G+JQc=gE>36R*(U0BTwNj`pN@{SD(x%IPEkeD(kKpe;14?0LO3E|+ z42-BB>=ggxe%R7g=1fa$j?v~#hWi`&u7yT=6u!(^G?KsW1_Py%`KiG4@hsb@qUkrk zIu^LI2OZ5jz5zWtca6U|tr_QlL@MGOCT9{RRsxnBREpDkak1p5#68WyX&| zxrR0_Mk->2z{7^Ns&T7AY;Ss_=)>*KJ#Wx)V8N^d3NApQmk+`Sx`^KlL7^}eF(EAq z{9E#ay0Gn0Nx*1BM(S&qz6N8YrEwBOa6$zyO=ZSC$J-Q z@jyX?`Ra#;^`Df9^q6kq@8GO2^pd9>%@M8=>aj}RLn60(ZUq1}jL1gQ@p`IF$tfu^ z^@Vcha0*$5B2@opd-v=yvb5ZjdQDGe_qOIKromEVc`Gf^Gc^O#L-|=5;PLeY=S{=v z`WHj>cYY3ke$I8M{BbbxU4Xh6EXlci`8cl%)yLFH-2D!j6};qV&$UIIVJQblQyiqt zd9r?Pd&@lD$L9kS`7RflcCi?gM?_E0BY-=g8Ml|gIhT6mJ9L!4RxloLR)f{Wz{*u; zC{N`JOR3s_Rt);epu2o;3^}CI#7hWShIx~$nD;j(U7JK~SUjhK)#e72O6+Iz7G=`K zXP9Xv@f=XIgF%qafEU8_l1hSE1TV{irGM`1$1zTBbttIF@!UqSF(v`9=Dli$e+Sh? zJGpXngh0z++}@K3NlAA>*rw<7 z!N2ZlA5?yM(s4C+I$K@*I-f2-?)6F~kbl8vykJnL&FC#}Lb+>7Y>Yqp_&05f*ga<3 z{c0=LqrAA^0x!KN7F0*~k`ap9xB{^WLZU8Tn4k}wT@aG0!qX2YwY@E%E_k5_bO4WB zo|Wk+HF5?mcJlJ6;hTGENV8`ORE0!#*fi3GGR`GzEk~gQo}Sgwx}?h&rQAO5Lvbm4 zr!ue))fhIfE^l6nY7Ed2f9jQ!d8<##AdA;Y)ZdfUcO1tleVAGnU+29Ic1@`|Ue!Ij zP}kd&0uT2LoM$;e!Go&)P7Oih4`bSaTSVF!PRe_PhA-2#Ro6Xz_RL|t{ei2er>UHh z4N1K_V%U@9CgcefJP63&XEy^|YcX*w~_hIq7BZ&UH|BWDl7J+bF z?V;a1g)?q0Xtkud;t#0F?_JdO389{okV=v!FB(yr!+h@a&c7%#%!`>+`=~fAwdtX^dyjI7!7Y8Tr^5UP`$a7Qv;cZ3N35Szoa zf3pbM^Sa41YpI5E^LuYwoS1xJ_Ct%6GRsRsrNiO6w;5?AtM z6`U-}j@BNRG%{GJyk>r-0jMUzF_J%L*AnTBo~aF{mX-xSXjB0YvI8shHv!u7_Sdg( zgO(5O3J8yDEjv#hxV>Btt+kU*noVaHZOHGS}S2m~9v3Db=-gEA5sWBr0>b&%MS;VLlhQ!Ut$ zoPXg`g<3l_uYfUPToHEP1J~aAA_|jeUGFPuMe+>uZ;XMQxaI4`8TeZA*`W(xs*EuA z=!?!+zy0e83+ePH6%~T8y`!Dm%LS+g+m`c-0JP^-A!`$yz0T*vfqikY%;G9 ze7w;6^S3z>@lB{q%>c0n*JS@9Mg9;#^h|+244>D5Yptf&hik1J5NSX5cp;Y>-k*L# zvnU5Iu{|4rPxB)Y2+87&z+&)T_<>VrbSg!U1NCvJK17YI7dfi2R#YShP#`=c)vpRk zHutIeNO;nM%|j3Dd^l8{HMtMBWD80?P^N-;lp;~Zp*1)N(G%>|&>SLH2OnZFPsER( zT%KPeh>GTmE`NNvc5ifOw9V1-p(bPez4-q9Ko)L<>ZR(ql4Y7EqqVzcAV>&hbl>XE z-v=I7vs&kolMxCAe067v=Bslvzd>8`+g!jmW{^-vY)efOMR7!C2wVc7fro+m@|)-A ziMfC$gBO4^LibeUKRY`yL5vSstK>tnti@_e!3p6Qv0XiaAR+)@s`!U}f*k@LZuy>r z;A4qIwXmQf*qv{RLY{L&duvHk%#~L**{r{THieKC+uJ8e87;CS&gD&0Ol$?oqIM$t z(W7{Hf`CIsM~?4E1<4#IkT};`SRH{D8=Q_7-MAGlBS0PeGP=gPof_8Cx;Z*s*#SPM zFNIc6Mbe04OM1UYtrW;t&u;n3`IS-n^g>DgV>)bAE+;4FU_hPC^`TcdeZ=Q@Es0=O z!`tuHA0WZtKggPURsWm=*kgH>8xcw*T?W{9`7tD#kSovl1%E0|b8y1S7lNEsSVQ&@ zm3r98>N%9Gn!!|3Y-{3A%1`FdUw78+Q}IP9)HBgl#b3h*PFE@&xgVud1Lc`7#k3vh zxR>Fh>^6$M@*e(e8~L|}3AWL+E&hUhOmH?YGb>BJi$-NgACWqJP=VBX2y#)yssfPL zy_MLw*-v~VPGI&?rg41ws0b5(#y@Y$$L z7u*JA9y3qi@WVL2Q(4z}g~DSU(Z;f-b@7=uK15_G%<5dgZ(lT5vJ(n>Hcj9^2vrC>rU? z`fs_^V^6MXDI7_@Oa{>^I6|YH2d-D$BV4oy4=alei4MVv13-pn4*M<=2LEy9x|5?lU@H@~xgQlLjF$c}Jc#F?HAh54Hy z&y(t6e2R*Sf^FR(ud*?<})p$6|4EpX@lbD^Yu&^`&Y^~VX*yk&P ztt;H%(mXtR_|I;ngQ4ak?$P*){C@d9X8VzVO|=Lh?JIY?_?C!mL2IVdI;qZF5UIvl ztAFjVieb2L7dT4;Ur&dcVq;e>a%-u*9GW+x?GAkq-7n%pIMc-5USr*uph;#BbYi6a z9)Jh}T+&f^O$90n&hd;5;U1ZT6`$g=t8;*vr!4~F?SLQTvLmzU(S=|gz9?5yKx$2( z<&`35frk4K1$!tZUKpaFqd|RcC$?Rty#(B;!+1r0!vvsA3g~|#J!_!JiIQYh*MPk= zRE^&Rel1%wMgS0kEZs#`T5rP|kVL?^y9or++Oj7ZxBo^V1@I$Z1;)89ScZVSZQe(> zAntdpEv*32m$0|Cd&{~zK?!Ve)@3;QX0is_Z@9TNJ-d)0MSNBXzNSIkF13@#eu%#f zf4bLM-E4+IqB3Fh4E}7NUK;((rHtp*RnF0=`tN!_d^o^ay(%hut~^pCao)W1+Ut)O z@+jkWQDx?GTRsBr ztTIwOV&G(5E07QNwbW!TBckXkEo2gpEKZlboblg8h?8z0>#s`6pwt3(pTG&ts48L zK`nMvvgNs&aYSvA`k!xwks)vIV>dyvJtyJnK93z&^PJw)M~;*@M5(na-$1WOySTWV z>$xcUFvRT7s#kjn090aQOyIiPb|?fUQt+*%b#`j*e4m?B-jVMl?_OcEp)!mV0^kJS zqB^jTFnwwV>=QQTBL_Gl&9u43DW*({bVt16&QLiB=3=Bx!1?Dn!`uRiu!b1vrX#wS zr&u9bkLOTd2;rn*Z7|OR$p-i$IWHoh=z@4dDXtR8F40nVd( zvFX*%Hnkx%4|NmnwouB1i21F*j!h}8loEOvE}^3n{=U9ic^?lRI^_6{@fk~`cmF!G zv>nyxKKSz?vBBUTt5pexi{H#H$@c06F23$dPB1uk&UN?xfD}r@+ z86=m`qq_;N*YeE49Y%;wq$_1>`T8;g))d0#@pydChYv?*toa$;ZEeV?cB%X4f;OZK zLs(;vhzzv80P2xnO~?QXJ*!D-1^!{CMfceXHYDK}lQ}RP)YY|ix;vteHE%dHT^|KV zHh`P`$V^!?h3ZmYg*bujgmYPJc5-ry)hqlco>y2dvcnr7_1etZs&Gk-Z7VO^_V4@N zKkwk+O8udzV?5SC{Dmnrf@x3CXM%YrA=!NoQc_OzOUXz|>Lzx20gdm-mDkFw1}Ask zO6RUUIgSAdgEJ{FUhU@3H-YjUc4;>IE+lLwwyI$o8HL$I)q#mw*-YJ!FYp6j01#jVS~Z`TnPtn2tW-f|oB-J#r#9^tNkP zzq@=F4#ExpE8C02gubXQv3I>0$?GHpF!rg`fDVg*ZBd-@s}WRdZ#>NFl-=E0Wn}-4 zF(EGU)6~t6Zqry88@n%(v*;y%qNGnQNMA?Cd)yU|Lcsyt7*-Yy71W&k{IitWP2z#V zZ9wOT>KVWusGr`R+wasb+)mI;)0e9>tHav(@B0^;{(Mw&y6yfhh#=_bnzpd{L)MtX zr-T{Cl(I5Km>#klsSk;EGMpZ3FGZCP&VZQ78|XBI#lM+goL!1k8r0^G%A<$Pi|->g zlD;nUPxHHMtpk3rX+kVNaf63YIs z7Z(>3EN@&YMiNiL%r#q+imkq2#0LeS?a)HUEIeODkCJ5MG5>Fw4LlPxi=x+yQcB zI34sqRv0tEj}^mDc_`A7dESEz3B|qm@%LG3y+U*M=d#?OQ-nsRdF7lxcGx82IUubZ zUZ)bOtgd}IyUqA|oc`1&Yp{}!#PoRo`w_@FH{8_%)zZyvOF?zLGq6lQrs>DLG6I9# z`ywLkf+BzuuO4uhgD?dDyFf2<{q0-Hv*!h1#)!Y|?NQuLH>vXdF=Hx6Z8|YSfjy95 z&(i^R0A&-h)2-RirO^cm_mm@73S2{BehE%YIRbYno7&T}4z!~H8vJB~g)_kQ+@9Sp z=XCFjcQN69{aGAl!Pr6@6KiN|gF+MyIL!8J71Ld28 zQg;St!n>RWG`6963T@y5+d4sT$l0TWv6Ms)u`Z#uGFLiNPc{H3BeDla?lEy2kM_4( zlu(h!Wb$s;EL;M@Z_W>0LokT6blSX9t`;6-*U>$3CSOxc z=l4$rz~M$f?}DTP`B@4{@jrhko5eGKI_JNolmGWOXIOGzpQ0z*x7-R*uRTc zs2dR9=Y>Be@W@-Ks@ZDoFn@)-mcD~4ail&Ic@)5()q4I_4jVTN~-yKCv*rtn%cU5kkep?lLFeWholsI}Ohs-?>aa_4?HW3VeO<^39Sk zZw5}fq7q?uZ;CUo@5x&~o{5V_m+NL%?7ep3nyra`*7vWHe!xCeLnC6B1z@? zkAMzAgo(Milz~BtrcNk2>hIs}W1A;}V?+GlS9t*OB{DLyuohDG4lj+ zjSFYbPJQpQaiHGx&oD$<*|jibg`jJDITDKnXUNr1E;mBhJ_h`HSD!!cnsfUKJw5$v z3SJWl_{CX+7Yu)W=W%}$d?vC+B1&%fTl(l9^4NMv4m-rA|Nr=Lw0hSGe_w5!@$@YD zV_C!&5mjcq;_sD9rnmmNv7zV#k;HH2MWjzVsGM&F^UbT8P$Rhc_^xnpbh2fmTw4DA zJ-do7u9f+}c;o-LB|%*r7BxSbj%flr1obTE2A^-OAa86srjh*bZcv7x&Yycctxo>z z<-PuM|6e|)6^8$)Po@w5x+U!osI&i+l*1V)qs;%8)%jNe1$_9xxZfd~Ghl|m^UW`z zFCam*Jmyll9`WA}-?b(C{T#g3T>PHr;pQ*DW8Jc`;W|T3KC81;ht2GYBesNTZd(;Yn*_0Mr6gYOCmy3| zKWh}qE?kt5z5`P&w(UKQK?B#Eq&+Rl@H zm*jrh7Q~cwSWr|=OgZ-39#XHgGeHw$=Enaf63vCr7%roTX(E%0`9CM;=C7aa zq46D6_YpG`7%VIE>Gj5C35yrLfG%a7n&<3v> zvhY@vP&=O*lg^<(nLW12&pVa9J*9gB0b^j`Itz=qhQ=lOD_7z}wV!fd;^yXt;gRCu zP*L`Dtx5eE#n1XYrAU^^GqXQSDx>moRZeg zvOO&r`WXt&d~E+>)1{|mX#w@pn)douO)fhJM!0%#hsB+~(xA~--0$8`S2;;Y_^nUZ zJvbw)RMzv6ghT?LUSXA@F7ek~q7ytQMRhf#K?x^415sZ~ocsJjznE6IFeyivk|#>N z*uaeE#|JguntoHy8}fk)G{eN&ajHKT<#B&CuHW{k4>cM6*ZJ!DE z$LwrWx#K27Bh$=QRJ#z$2)PPV8V-4JTy_R3NNjRk*$8t?zN@7gCt0XJJLq}RaJN+= z;l?S)^ymipguqwh&8<;&24uEN>!zP#7A$Mp_B%~iYU7F@9Zde{JI!Y|7?n7izKLRi zTXtVX#k;(`oI^CL)5LOPs!<6usC6wrWn#Uox2F2cdi%+wj0#V0uzJ=#1zAZQQ^vO~ zO}AD)pNNX*w=U@#A?bTFk*MQ*R$Jt;R^peF+1ZXnR`=5!4~kQNP5N96a4 zn;^eC7g5$maMC&`o7d{*KS4!p!a2Ctp+EiYeS=IipIJ%QkUfpdsiDykEFq6fmX&WI zLPfWe74N*o#}ol2o);Dc1;t5HQre>L9HhYjb7V5JdTrq$kBdBt2(BkeDQa&}fyQhKqq*mvqv zpJ^fUjT=((@*%$AWMtaBdWGY2(d&^c7t&hFxK|8zt>4FCj$HdF6Xx>2y`g(l7d|8R=(=|yIZ^G4)<1=q{*|K$?Pdjh>Vb`KJXZ3kw znaYJc4AovtO+6yLdL`x7mB%Gr`t*jp?>d~4arlR&Ew_Q8A=5$0rC_{>hzOcHk`hNIbJo-93TiqfS|yhC zRI}X?)|H&R38`BT)C-@U(rArukVy!{(bS1BtB*bn9hgA{3L}C=O@6^9H8qvv=1q^4 z6>|wGsZs$7GIVLFDmn7HP*8w^LYY=p%U4??vw_|~DOR<;K%8?U?P?DmyzJ;u zWME{J7aUukM3Iq`PioB&z1#eS6(biv^RirzSzL2;J%<#%|B}5;HFf$MT0fERDg)8L zpg=LBBQi@aA=GS{O6wfW{Lbv^a@TQnWqBo~Y8kNuTPaz)`@S14{)uMBF?G8pmf6sg z@%=(!jTK@uaeqEQn=x-}XHSo}-QsuuCO+qFvpA&dAR7I``Ur3>wur7;sAGR|;OqP6 z=2ljzRU^;xPz%HesE1imV+I8Djq#)~1=syewDXLG^I8vnHWnhG!j3%QVB0mXX*SP% z*j8f7o}4;^<9x6b&R3mPAHdqi;)z+TA4QN0qY%B(?`&F(V+fSf5K#&7~4HP^09@EsA8l1e{%#4tEC#I%)!Mb;SF`?xMQUsoWO z<7=*2ZFfXi@{eM3RlJSv^CU?9=+awnYxLfC7|)}YE1hxiub(3OKveC1JS90C7sd{+ zZisnxXxw}ww&6oM?YYb3(8=?d`;$4E>G82DE2?G>L=;IJzg ze>K4mccsKU0#jXBgt5i+h`>CDdHKd}pi%-vlIl~RP*rt-& zp&kNYD6%=C1iCcz>mxJA742)r5y4WQU8b?31l#FEuAQS5-MwDWedb-rRYJ@Qb}nu; zwC}XIo(_4Ic;<}DKINIP?6QubU@=2DvbMY1+in(F22>f{h9Grvlg z5r^)cRVhe`esU^|iu}341E(frOD*0SKk)GT(;lY!``+h`;^meR8iaI54*=(OV z(?1>OjeR!k{r2G9E={B@MpzGhX`w*-%#cXi!DWvHC4x=snzQ1om|~T-BZcJE&4={PK7Rw z5eRwE&Wr|(Wx1XuWFFq$ITs6X5XgX|x~r?m8`-NpriG{wGD^x*`2#^mM{eFeK2A&g z5-+C2EcgNzX0m@UmJF20zdmQAy1GaR9iK}{ta9TT&l zHftgLizVL>vZ=sy-^hCHHE%YM^MtjlIoi+MTR&*-3-=?iE*@vHat(XsbNBsK{s zZY}c7Dkz>Klaqb;kfN)rtA3=pmAXKK?Ghzr7`*PfA@r+8BCpnNBLmatQ#mm+GmkCm zNlY&6JLk@jhECivqWj?OV|e^w*3}x3sR*r4xYi)IO7Es#jSsPoK!Q~2i)y{Krd&Ul z)|aE^R057fFYTt8Ke5nm%{NhWpLvztEM~soSv}qKrgJBYVfE?Pju%62mBiAE8UI2? z>4uJ&0w=w8D#b0nnIGa`tPT*8yxO$G>i@s2~DK;^mYQeWG)HQlsh57nL#5%VpFRPDPCW(de zWQ+I&9)2xGJ|iO$-n|a@@-B7r)7=NMQ;(%m$*xBbuCK4_hSKw*OoIa6t(sB0d67+ zQ#QuG^`3bsGdv+f4Qx1K@xN{X*}IdMww=U6mP4UzE8eu57fps8mywqpt&^NZ=xF4h z)2u*?3`}i)$Iz~@*sbmDluw@s7r$qQ+olw1WcpO=Ri#J}|*Zfmn?xs^XJ1B}`2-qSUJZjx>&6CgwY64ZB& zv830p&#-Ej+V-Q~HAKF7fq6yXW79V2^JU2LrZAPgO*eKtp9;$WV0ogzaQV5fC(8+~HuQ-r6zUWR!n_?rD8* z&0CghIoz%zKF&uuCnDtR{O(Im(vnvC*cJ*`gvw%iD&^dkQ+B(sjZu9N1;6t)D<$^^ zGv>bZQF$G8smd^2svj-m6n#dQRr%BQ{U#0NXb)}2b;{u4=`G(*+hma>ybi)TcWMcG z*R5W)D5Ps?bL_@fxzx_2ygcQFi&N6jFy-UYsU1qJWfnZ|Qu>E#WieP|7$l`m1+BKo zj0ffK0Tf0^NSNbx=#*|qL{3c|{Ne?ct%JiA&ex)spG^3Wc(HvH;GKc<>0AAQ={@}& zx`PC2!h7QQ9d0aa__V^ivQ@48ru2oOe1sb7oWHNfcJ>t}FixW_mrlVCH z8=Z=45goLC&&hmIpwT8Q@yqGoWLTQWD`I2bXoJ{!YgKs~6g&V{Uv`Z+crAi=$CcExcR*?u`8sn+t7qz~yqc_R0QN zl^P4`d8l|?j5z91)za6|;Q{x~ggZt_RBgefYMk8q{)cwhR5_%jr)=`tJ>rCC@+{}oFCe2*#`QqaG36`4XaX`K?@+Wu8T!+;_mYyLnG!L+b*SV2Kx#ToJL2bq|gsPpA1$;U5qrO8H^ylgeJ{s z4KOsWEG>ATEI_!}1pHO&b!nA=yBWaewtcs@cp=|imKZL22NP)An(jNNiHs{G0MxsW z{KU>mjAyfBO|1TPVT;&ox^{Lvk6WVXOg{Vc%(4pzP@qC-X>Ep>(l<*|Z**+fZADr2 zsEe#v8ztP>>?#iY(HxP`HoJm3drS|IP|oJhr_*kJiAf3$L7_-11Q!q*38EM5K#Xlj z2R(+8&-{&`&t-t@v~Ih}JsfwuOI5>dw$*PhTLFQrMovwtA+;S3mn5TTC`5KSD3IFs zjNVU=n1 zdcH0(C7$!NwUMniAz-OC%DwFP2o8gLSQZOR=~RMGsuspXf`H<@ZEvf079Dx<@g(w4 zhyn&9?!wZNgt)j@JC8|-qlsC^R2rZq&%sH4>%6lt6yZPxC%mZ8=K)Ns#rYJgD_oiE z%o%zmgOuE5E|&o3ZR87NGvfQB>?++A*Yo;Kis^=ERv0?iP<>O=(=ybC-?%Rklh7hr z?TEguP0NBr05nm*IRa>x79UHEK)fhBk4=AfL^-FFb>Zf?X8-mINk5hudPbxCIZD-= z86D_-5%V$mUH7OR=7QD@wHY0! zZ=CMiV&1-MBJ^YWMMJsI#z>ZgcX<)x)2rq+Gt*-c{1NULLhGTEjaulf5K`~VZAtGA zb_oa=uF2J!@4r4D*!|!Juw#HG;+bAz$;HAuetcWur1PMGC45ydNc_>Qk7MHazE5O# z#KVNj$jIo<-Me10?>7c4gv~mJS5-7|0umLhzQ1)e9 zQSRCwd}3uIRne1sfC07_SkIp#!o%S;>%VMwRtfGJ5uR5Mhs$@5UTksKt(?}{cI~-~ zsx|;7?kZonEX+XE+S+>O-n}=>0%7}wI&)Q@)QZMUTzMu`I(JQ)Z?MWov)i#&Vubxm zdv|HgzEo$5czR0Fn(}vovVQ+bMAMex7mT>hktno5E$T+a!NGAyUjD67g@4cC;i@~T zuutbygzVL3m+2H3f@?(?h0sp9?m(JbeoWbbsGgi-J1u+!u>FZhj?Vl8i z%x85PnRbBQ9mQr>q*6E>PhX2ej(JCO$UNUqFuuvfD8q{$e#m5poQ|j*AozO0fPUxR zNi=cS2xvMpe_0QAJ}<2}|PSeA5-C&}2Za zwKw}&60=(3OAsKhtRHab-kN4f7kbg_Oe>jDLLPX3=0_^NJ)QXi_rO#*AWO@U;(0&p zH}J%}-rs#6@`G0+^SrJb`f68q_xlj~YaGoHBo$8V^qr5WKXw?lJ`Mc=jR|vHKnM%I z`0CyYU^A1mzu^x7!BM`5zf@{b&+OqCmIW}x%X=QckSDLx z&I2aR1z%#X!%ygfW|+B80^^#wLs$&W+WhdAg?G=>I62@WNRqaA;i#$Iyhzm0&~WQ{ z@v(M=L(tG#Bwl8F7irA^`}(xM0!k|@C^*QP#8cbeju*h;CwbWWTo1-??}F=R-W7UVcD~ zY7H|?@2yX>cH+V-Q3B_TrA(-c7vNhPy~{r7z>-3Duw3oIa+QH037)2E#<}Y1YGo8f z-}B}O{if4eT!u6i0;@6AX)O1-q+LG+`FYPTa2Re`6#am6kwUNXeDx?Y=U{;<-S7kh zTwi2CK>?Ui`-cUtKtn;4o;BkunS*oKADx}V_cl4{vE^``Nppl_>AhK18PFUD!y6f%PdX?}3yqDOfYt@_-`VdGHI^TodZwHHu(P!0+Va|mI?b~of2>0g zB~K?{ns~%j4$q2e;nW{CuoI_g_p7_Xag(WlzvR8hI0iLMed{2G)62R3L9F ze3EC>O?*$Q8<%B`eE1M_cxQ*cHL6rrHNnR$a#J7N+;{gjYpq^>$5P zTuYU)^voyj%_>iWGHz)n7N8j-ClStNi&!SLv8YQ}J;tuSz2W|xSrNBQfgwdHs`YWt z_wRcnii7JPdrjj6Z16T`T4Q@=)p&XZ52*uTu(#mH(^t<9Fg+gpoOfb=H5bbl%Hm)FImYoHf5-2|Q3%-nq2+LYcpGP|vJvQ1Pp1n4N> zh4po>Y%w9W+Y9Oph(9FFgnrQ9`h_emv}k)dFW$dfI4L<~LT z3Nmrl!faT^qv398X=w+5*WqEU^i;p^LLI&!_A!5EkxtH~s!Nkk%0~%*u3xu(Z&>zj zX{zKTfvR97mJ0rZ)a2ybYhM&3rYN@~X=+K24(>wt%VBgraa3@04f$}{u=tnt7SBG- za^psQo>6oCfiPgkE>MCc(-exe{XZIOyE%XAuegOVtz@ogCX?>HTiW+jkdb%Tx#YTCCj^X*P=#R#rvJTV2o6+|= z=66*tgk>-M4TbK{A_j@k8R%D`q@XxrC4c@*^yJAC#dH;AX)FY{Lt*k-*UkR+3gG~9 zx!(>!{N{YqRW7cZPfP2scmx*mqo4&8S& zMLGR66;)7H)(r_s$>3uG35HWZ5Emv2cBiUGI)XR#PNPY9O{V$=2M0R_2K)tVW}Yuy z1i=U8RB8o)te5>bi=S%D@nJz5BK_9DMYdJ zJThXo`1rE!v7MXC+|7O$kT`9lqj+4Ww0IOodsYc#-=6^_%I~m3H8DB)K15t1b+=dA zVtk%-2Z5m3t#?@Oit**2Yzh5!W&MHzGhDyWkB97g&jB-sGq;C+aS(N_M`AMF;*ZkEH$b(|*|odb23k z<)(fKlR}NN7cN|3Vv=59mavt9SzC0xLPqtGRRY+qh57UIMaHh;@a#`usuCm<;Ou8x zwV&~8*$^E&r<_DxQb=i0;W8`Xypw$EtvxShGI2h&#CvG!GLB41c=gKT%NJho!Ey2N zL!mUMl%O=FBtNc=927JN;mUltST5+-Cw+$Y6N7sl{96vsSS!Fq>e&vUi;R zQSC9BrZH(H-f{shRAD4IbBTHjCbyGw54x6eCsS{zwFTd;A2wlIDR(;u7j(y84*Mqm zNnQ>PrB8E6$-gun39LnE?nm>5(tvSh5Q7L5UhpH-T5w^RX^cwaq~KO>YhVqwKU3yBNl3m#pv}cH%3AaIl_~P#9&NqtOuEYSMmzwSYt8Ar8yl7!< zluOp)8?_@vn-wgcHs!Dm!CU=ugBX%26RywzY%P){|FKr^Wyy|r8$1vj6m$|ltD$EqGe7etk7KTiovwNC+e88($r$M;g>*=EfqMAL0>0CVS&(DI@#c`FJ zYM)OelyX)FPUz@I!wRc~dO7JS&-Bz2@Yjk~b3daL)Nb_X1P}LA-_B{Cohsh4vI000 zYhK#;EPGat@Fli=nf6=fd4U!2z~JBrLBg=HCm`Bu82O8mLvX~P%0CH@WyDNB>JT!`gD0110JU{+sM< z?=VcsM+mm)0E|`YG_gh7Vx)G^cLeyzb>DtD-F*e$w{UMFf`jg-lgP&A=KByjKe6OB zG>b6_SXH1s%q=X4sl55Auy&^Lfl(?Mi>@Q$Lz_)U-IMi3ud?L8ZdvL;mniom?j5?X zIIheB53qg*nUnwn8(nqiKbNuPlZl`{~^G4kXJo~$mHzEYwd;sSAMGNuLWp@EaT)rCzJh@Cwt=Z5$E9F^ z<9F`7+OcOo8jQp8BG!2FB)x~j?~!r#k%-wr`*IsrfyJ>&S>Kn^E5|6j)?g?6JwlBI)Kg^5T|#8MSUuMT3hX!(d5djE7aKU+Gew0N*@M?hDt-JVAN_V z;SCzf^v%Y@1CFt&1q6Bu<1PPpiz3)&wylwVOnu7wsQ#OaVc$Ao%&lu2G7UZNZj)25 z#KR=NkC*(l#IG-XtJzZIvB0_ZO^i2vl(!|8X7(o}VP%T>OQEL()&d3+BV`mUUUY#o>$gv$lZI|j1xzr23=CYRgbew4ra z@ByzoO#$_D9@JG%Ptj%gP$Bpy{IKhi!||pnE!jaC%i%Yo`5C%Q{XLG%@eC#R>j;ec z_ApOk;o=qCE*vaF|9}9`I)mE|4n@$Kh0WdPZx8=$dTa}pjExfwiAbLBm9T~kz@=ty z-n_XiB&2DdD%~HaU7ulc_9WyMDlK;?LsQ#1J%}BPet5OA+c+RL1bIyuPQk4L@eSjG z_bB=3+wf9>GieNEMEZ6A49#dIxjjN*tdzjwv-|5ZoL3A}cIlqjZ>e^M9@+4|26~B! zuHuCaL392qhUR(h_HIpS;-qx5d8FX^6F1>K1i~9}L1BCI=IlVwHF%5CwKYo!TBUsb zN)1Ou8AWFu2>v=Ir3J1mhVYJ}J1g~#oDzC+nX9b)!x_^079st}Zb!t#Yn){j9eyCQ z_>zRxeI5BHpXN*B7~e|Ki2X-Ush!RM-~k>q(4abl^*czqt(8%_sxkXB7c~;WJKor^ zewUWk%$dj+@@wlsI5s;g6Dz}Bl-~f6skPys`HR#X`9)v`^AxQEMvl(Rd} zC1MQ?jigSKN73z+sB;=9mx%@8uvPa;*6Nr(8cYLYO^grTaVs_Kp)eM9PslbzUO=5! zk(_!QA0H10u;y*!yEAh_xcBf@#jogYrKONsF0S}m0?Bol8TL^4vND6vcnuL(27;2H z-fC8qt;p`k52?5Obl2v?ab$I6~9F+GVlHAur1}N(s_Iiv!2MCBYh<%}rbPs5bQt3#cDJ?m z8}FXQ4Ax_}4SKN6UJ0HLy9|i!>2LEVt87KEkuyiYhBjEr3jkEQ;pyO}o=(q$Sw4(u z1l|rbQ=~8PB}X|ctK4^YW6j!z@4i>2gVw99tqlP4(ucfGzu{RoKTtj9CJLDM1`^?v zfyLy<2y&jIBm`?grnqU`MkN!{KGVWg+#+LbGxrV)%|3hz3`cN{d{a6Tw}hyFZ&PNbtNi$JuTi(kB?REWc$HfQ9^-TRPjn7Ix32P z2`5A(sXo@0rGVt(0i)Zr7302B%d9gR#x2LQL2d}7OTTtOJaRrdOZf8hCRWzi*nD?d zYC*wSh@|AT%%;QVI@mZ&pTjY8+7al-8jiNX89nN>|CJF0>ATtGMHuWIOj$X7)#2TL z*5ohBS_WVUIL5?qiH)*!GGgZ9t*7{a|FXeraUsU6 z6}#Dgfu}eepw`iF3 z|J6%vVcb8eNsQ(4fI2{dn=^&n!MUg@cLyTOo$W_{wmj|x497s^hgX`}D{G-|qv9RU zGamrwfbyNC1`m1T0$)n+uz%gP%_Mg-_Fs`a$tez5R5`IP%ds=7*rG>u^3%y)K*ue! z@q&7fkifRUb0FU5y0%G>zN1nBY>tSC$PZZ&H#*jNFPifN#2%q;{epttXd_D!MQ12u zTOZfByB-lhHbyrEdUwR8&3c<_W&N91ma~g@;uThAL(z`t6|WNf_o z*a`s)RTnQ_d?o192R;EeFRv`M*Fj6d#Lizs0F#nC-U+_|v{4I6n7Ha3GkPT~?471vgeJ{x@aF z*&H82c%)g3cr#VHCYo&s0O%LE39gCECc!8AGaiOKc-PJbc$8YtB&lX7X=#BWzJcTV z)@?X{M`j7E^nd3w!4fbk635@mKvGk0nuRne zFP+5dlZi`#(S-ti4rLVmYuxOlFcY|RPoS?VDsSK&Yi7(|rQW_0!)%yAP||*Q8d5$` zSgCWy?%#kEV}1rU*v>51`jcb1u2RJ2H}jJQGuCi;eD85=6Yx;IkQM>W?Hv>kGr-wX z=UL(5JnD}Nu4N2noVfLJRKUX?y<`R~xD+~*oQAP66MV$Stua^a&dTHnP*O(<$b9^| zxAPxOUrNPW7M@=oNQ_l3;h8MV%(u+Vv&=T--i?k3;ogaF*S4#wtvtenzINC2;V3r1 z&|5^zP-d)*A&;&kh^*lu^qTqlChCN~h+)@tPFMFo$t>{FUj4xyi(LSV>Y33{T$@xJ9~T2b>IXMd^Gu3*Q8CFl$?LAl%EYb zx^ew+Jp<-vwx6E}#(nym2+g!aUje%bz>cHV%sX)=Vn7PC$?zjUf0E~NMd{hxe4v53 zU_;H^1IuB)>%B5+?Gmr?M9%F~W>CTtuor@f>c)0&TF!-u{FcNekY2=>2$VH7A&cK0}8N`J0ll&CxMjqLPCKwn6Q zo-$`&k6WWMddy%Kav8T>=H*p=3rZJ0t~^EvlXFKGk>QwRs%EfmIHvqr$@{f&W}RMC zbfLGmSG~X_3=G~7A>3lxNC6xS>~Wdh2_1*Bfz2q-qLq=h5iCE63Cs?t8r9v{tc7W} zBk!IQ6C_w-i?!vIriGW5mzTj0I!Qu8lP~`Xl&;Mkm&^--ISajPm~_s^ljn{~=TEpi z9WBgjoSpyeDg9bS#a4#JkCw-qQA1n1r&dmnKXi%dcBjykYj8dCg`Xq_DnKH7Aox2G zMPFHk7hJERqB6B($g_LPV>b8prUEFs|1l-dGU;&eHz>_IOjLMycrdxV%^7p|+L;!i z{v>oFJoX0nA3C5&<^IO@FYPt-g2w4K&hwgZfBGBV)6~qgIH#nf=;f++jEsOwY3e+?POX zPdDsf02sI4?wnY4)aCV;!RvDXb{PGJGXS&3N1W9LxtFhAHTo95HXYI$UGS}@h76n( zz&%$O8KoBZ89LyZejY450cYwjQ8Jbb+pw9BKK&YqwmyeFdH*a;Uew~fpRNUgZ$MCE zwTmP)!hUc>L8y>@i)Or!j{qGAK$k&<%#2Onz9uYBz|5Sp6@(Td5zjvRbamxhX{GSX zym}4Thwwixouy#y!eluWXd=;33MA+^{{H?o$nj!p&QanC*y2qpDWOoKG0ubS+ynu0 zBcrR2+v5BInm(L~HH-Js+Prp_@Zl`Z@XnD&rYeK;PEMsgO4w3Kyv9}I4+?$(-wtNX3C}E} z{RX!e1LKebrLj0B{tUHvY*pw@bz%X+sTm?YFGe+t67PIG`A~fsgVryMmaO)HnGT{3 zbCOky6hi2Ca*X>@Fua9W5}z>w5{q82`SNpXi;k7`-U2@sChD7xlRddLv4e$RcXz;0 z2h9l;3EVY8ja!pnjYn%{mN6&nigwsUJp5Fz_~T}vAQ!W2no*Aa%+R~4uTExXl{%Af%;5` z9jj=ICBfefd)57T-_R{VG+vZ$E1~JaUrOOlT6U$kH}0FaZ%YrT-1qjvHGicK2fm*B zvvicW>V(bL_O*>|Rr+#VB@4(4F!gL6pqx9fJ7yEzLooig;qF&IzmovL?of-{W0DHv z<9aTKTYbd~pEBNskSk&qZ-Zo*&N)$%46l>b_S*SK6u||HGMA&&8R%<|CfAl$w5~h!X)8$D_}pV z_{a1eh=3-FOjE$Aq?FUnQ0RaK8A|sjXh$=rQGC!X-qteKH zyOZn~W{7wO(i+&EKRT{B!}?wf%$9}|ye3$+Cfs7ch>%E~1!lKEQrwd@jwYiv(}+P* z-pZhB$v@y=r&z(rxr~Wk;w?(5v#fTk zfZa$5a8JT44GJRi_TA(&R?xHIwF)t6^Tu7-nlp!FzNq7(z(MXD4l`nD9Ev}&hQ$Oc z3Hm=U>0csKfUbcJuRu9zD;Gwr6{>W{b!Xi}Ko+Vze_a5|2kEEQfsNQ1`bouW93J^E zPtRtcmAcfa1#VX&CfoOSILh?MKx!)R`H9wc@KI`DQ$MX+hPrO`H!~eZ{b7vo69t{? z{0D1`7%p=Wv>x|a08CYoR*0jG)I=)u5kT#cU@6bqs8Np(?5Jg`P6ELK7a*^N=?lr4 zd<6>xq4OLsaCfeI>O{_3Z2b9>f?o^g=-il?OZO6yzZ4DWbrw*IT=~t#%WHVv7azS3 zh9VM&ToRSzb5ib3s`uhki;$Q&;M3LDrvoKUbYZrME|L8^x*Id+gwaR!wY62Ig(l+AO6Sw-m28ATN?u*vw z*_Xb)S2#J(!1Q)Ws(Xo9rxFSLG?W(+JDn{>Vw-{Whg2`Ci zGOzJR?s3t2;0+U=L}WuSmWy5#l-W=fH8t^!UV1@6jRj_8Xlt}X?rqB0-`tPi46*zh zn$trPV@4Vd&-1Mo;{G^C+S%mb6>tfx6Zf&ed%^^Z8?HFt6utHUj`!3F5IT>-vU74y z_vtuig25oRiEfg|UKynG5F)r&-jv{11(Lgqq3&J{ zuPkq)X3(4Rf4)lt`VNbUTT({GDHsb;LJnCyN-mciPQE&youd5(RvuKB-A-ecbs$fJ zbQ(VgUK>n)37y(_-0^)h0OzpCNc{K8*D%6Cme3-$l`kUMZq&*BPlAScKPqlR?u&T} z`q!@NjaL4l-wqHZhyrFCj%9y+EypkFHSp<|=Hm@lAQ;dNxN75{gbcXmqa6>*MnZf? zT?t^05F?(W%Z767>PF6_(bK0}`gfzixLK=4kO3qr$6e@-!!Wk5I~OpktQgU!ekW1S zM(XT1fS;VaJkEFT-`{>e@%36bfDt$B+}n!~Z0yY-H2~@I9sx1x&j6^!YgK#5dY($e z>1?02LpQwJOQ&~+;-KeLRF6>>z?LVgyVVs~8&yXNQToyhconC2V;&29Z%HfaVzAUl zmFuv^DN9|KmLsr9{nyA}^ZV~4t^Qa1ge;8czvCbH(umDsg-fOT#YZu#RWESVa}7?2 ziHjRWw`-!}?^L{d$H2|Q!!gDHa`YjL1W6eg|K`#w(jj`V(E~_+%L(c5ow&7VGQVg& z*8PA9p*Q(@XstP72NsN=q40sg18b*~eb<)Mv{WsZuy{t_X(rntI);aZSI*Ho(1MQ) zat`7aY#0Om+AJn-WSUxtRzXvVCQZkXTCVO3+0s{JRBm3-b-_Xu&%`_}k7*~L%}!4z zsN78y>DSyvo<-OPae92$9o3xyKio!_I+EX2!oq_6`t|El&)ORJP7LNPc2HBocVPG} z2l{M8x(e*G9`+ZkI%2jf{d&5J=)rpVK__aolm^&OjKB;BiB_%`(5DfUe zZ?Earz_UbX{_2NA&-hjD2S6JbEjzx-S{YNRM;3MytUsK#L{ZZG0it+$CJcnW^{h>5 zazQpmDs_Dzx$qyN7skzVeouM~>QsXK8(u5^o5)C;&puGMyj|*YG1Cr-T!xlNxdKsgp6H~2tJ`vj=r0J$7cn|@Gd|B~?m2!=76 zbv*j~?j3I61@`TM*mqA(!#vJ1>vA#Lw1pxEg2y{G;sfKm1*<@UA;5a>{sV;Nw0o$e z3H42W+h^slXxZ1d`Ma+hEDsh!cqndZgZL_HldscBVfqvSK{dF$bCdf``$D5*ee1JX zIu?3*2s%2tx%v6q%F1V8lV@@Riz2=92tyE`@70KakYip#TB&ZwzQilU${WbK5$yYG zQxn2e9%wE2MxK~^=Pq2h@=GRX5R;JbwpmfT++X2ZHgr@0U%~%oguV(U(q1p_4Hi(SgfSw+ehcjibhc{)EW{Y1l z^tq6ylkXiNw|ee-wgpZeqcrjC%5`8-7{ZP9!`m_e*_9YSp=@?`xA@aZsIr3{1)bVf zid4}jY&-6>e}7X^py8=c^x4;$nW6A#d2J1l+Pq=$xIV9kTup#du4P8L2f=_keJ=SM ztR&Lp3tXX(fo%@X`+rt|=SXt^P~MC~pMlk1Ol61a zdogl3eN9kncR3rI-zjI$goR(S)I1Nu>OaN-=DDMw$jG4k1hx*$)h;pIeA6R0*nw5h zY-~KacEvd<{_W+5H1r$pP#r1x`Q)%AJwHDW5-kCMDZyMJ0-~$aoU;I}!Mgn82w=pa z*Q^p}`TLU^akCT9jJ(FFHYj;)ahcvEOlwT~f$cW~#E-osB{K`AIe82~1iVh~}R><&~LYfiKHLFXHjX@c#ZPgHYN?zlIk= z1h@8F096)GztyZi(1Haf=@qm$MnOP8GBktal|9poWZ3IiSX_+X#9|7!5Po|+HcIUy z;(N;OVE|<6#|LIG+mI>yX z+`QmURl%9IyM@pD%}<`pIKxN4`o-;VFJSEYT4VeZ*XiKZx#b^R zPCvtV_G*&J2gk~?Q`!j-%|95iuJ)<1p63x3{)~g~neF>ya@IKOExd$KYv5 zF=CP!d9KWUSym8-&Pv>))zsn)^Fvsr;EWFX@Zkf!MRRcIu!x7fjixW2?yk|mG!f#u z{|PoaK8w+w+FI`~<|8q-gkt0P*k-J7C93|3GY9*X$LXVL+bn#@l$Bs@LFcJ=yhZCc zLWtLOo^M}OSKo$(PsaEcr`6lcKEsck-}2l(dXKdg&;N1#+q=ClOC7o-l^?z+h@2mo z#HljPO}ctHviVwU>%uxpz<*fiEm!PE^E1r;8&WUEhz}p`yV z-6um|o@wO!wD*V@3gqVwGbpaCMpU$v#5g2fpuH7)2EPM)EzqIEfLlZ)6XFEvWo1J1 zXL0oe^8F_mUtG>OL>3Iy2|4Xe1v+iDXqqI>kEpXVcBuBd=@ak%17>a3+p znyqnDmFz7pJ$$&9;kSPB5xjw&3=;zbu_B8xRS@t$R>aaOEMze0b_@)k;Nf|^wLk0r zk*R2@cy;ya;dofo)KLM9v(l$7_A6^mD6F6~wmWAR2*$mr$bqxHd> zF`o;}rs;xLvE$C}#+M%L2-mci=psNwe3QctNVBlCR0Okb=ddCY*&Mf1anpu$k{C;W zHl-Il3kJTIHYr53(EE;KuPHSoZh$$kfob|^0R)$-GB%O%DwK&|Ec3wSrrVQgU6 z$uI=YFI)ibEu4JrfYFb}hF4dvTv?K|aYgj@Jl)^VyZIN~{rywjqCw2zYNF%n4ZzW% z)xhBX5S@jQEqzcbuQpZ{aiy}!@;Eul&mI4xX|eSKZ#?{9BCmnU#e z+x%+#ou;xkdna3cSUug;+J5=__tkOvb$?Z_E`2Se#nNy!*>SbPzAZ0>Pe{)R3 z+}T$LRwnyKU0tug!SVvi;T&Nc&X(_-!3Fz0F? zaC9Ygb7b%Ta;NkEzOh&Rm#+_YUKY2Uf9{2Qxiv{F3wCW>5b9B1zrXDLy}2c9Vu_Zk zZO^`r`f?^(|Mj5=Ki}TSy`OvKSH3sCbA@riFQD23Pft(3dhz1IXV0E33I0&8lfL!k z;gj_*fof&XzW%cOuzh&=?`2CSGbjkHtg)*<|39j@xOkEnUplu?nP1e8w4XU<(kCB> zI^PE#hEww8#l=nMyDNZAz?Z<;i$-J5f4^V9dUXj{8{V|kdB54;e(CA=ydK*vPV+^q zTE5&JxN3=S&dR0#>$6wto9=&-+j>bh;AvkghqbyV@PL!7{QUkWALX{~3(;CyW9Khl z`{km$e68tK^`HO#o4>TH>$+_CK7QKb^KEw0zj9t|UdTW7Sktp9-^Imi&A!~c06fKm zx3+_sdzSOP_!t=9?2DqFPR6;4`ofD~d62?(i;W8`AN@V*3RDl#DE|m(Pz#Dd9!%V` zm{ASVoO!8ITGhLL@1zaImkuq=e)?>2-My@rz!~c6XU_OMxWBmH?$?XO{rj?Bb2sms z`n-Z&*Adv6nl%??^Qsraf1POuYqtB9wer2= zvlrYI?*f85fQPje{hi5=(EOo^RX6S4{)LmFApi`DibG9e%J22{z##$-ng_hxQ9gV2 z?*N7nG^m>0fw|$szekG@K^F&12s2Q8{Go?+Z4;`t@;fREPJNkb{ctAKajQ1!ud?ji zx4`nAocv<*8P6}Q zXFu{uF)%b3&z$PFg}3-n-i@6lRD5^7V=KYuR%|Ja>7bC$FozS-0=ck&Wo834`(pacp|rC+XA#b?#k{hP*E;zSg0V4y0#o;F4(V!1_xWQh~0i6$u zBH^>FhU~%5_P>^7^Q_xi{T%3I22WQ%mvv4FO#tOFqR9XN literal 0 HcmV?d00001 diff --git a/runner_notebook.ipynb b/runner_notebook.ipynb new file mode 100644 index 000000000..3d7a3d87f --- /dev/null +++ b/runner_notebook.ipynb @@ -0,0 +1,600 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "1781b284-6264-45bc-9fb9-0cf46776f495", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-02-25 14:22:42,230 INFO: Loading existing EXIF for 2025-01-02_DJI_0379_573e3a79.JPG\n", + "2025-02-25 14:22:42,238 INFO: Loading existing EXIF for 2025-02-01_DJI_0843_0796cf46.JPG\n", + "2025-02-25 14:22:42,239 INFO: Loading existing EXIF for 2025-02-01_DJI_0425_e1182890.JPG\n", + "2025-02-25 14:22:42,239 INFO: Loading existing EXIF for 2025-01-12_DJI_0912_d6344671.JPG\n", + "2025-02-25 14:22:42,240 INFO: Loading existing EXIF for 2025-01-03_DJI_0534_57db98ae.JPG\n", + "2025-02-25 14:22:42,240 INFO: Loading existing EXIF for 2025-02-01_DJI_0751_f7538bac.JPG\n", + "2025-02-25 14:22:42,241 INFO: Loading existing EXIF for 2025-02-01_DJI_0699_823982b0.JPG\n", + "2025-02-25 14:22:42,241 INFO: Loading existing EXIF for 2025-01-06_DJI_0119_852bfccf.JPG\n", + "2025-02-25 14:22:42,241 INFO: Loading existing EXIF for 2025-01-03_DJI_0663_4537530d.JPG\n", + "2025-02-25 14:22:42,242 INFO: Loading existing EXIF for 2025-01-03_DJI_0557_295421e4.JPG\n", + "2025-02-25 14:22:42,242 INFO: Loading existing EXIF for 2025-02-01_DJI_0084_f46c6662.JPG\n", + "2025-02-25 14:22:42,242 INFO: Loading existing EXIF for 2025-01-12_DJI_0627_394c38a4.JPG\n", + "2025-02-25 14:22:42,243 INFO: Loading existing EXIF for 2025-01-03_DJI_0939_a753b448.JPG\n", + "2025-02-25 14:22:42,243 INFO: Loading existing EXIF for 2025-01-03_DJI_0866_096c8304.JPG\n", + "2025-02-25 14:22:42,244 INFO: Loading existing EXIF for 2025-02-01_DJI_0757_583bab1a.JPG\n", + "2025-02-25 14:22:42,260 INFO: Planning to use 20353.5 MB of RAM for both processing queue and parallel processing.\n", + "2025-02-25 14:22:42,263 INFO: Scale-space expected size of a single image : 95.625 MB\n", + "2025-02-25 14:22:42,263 INFO: Expecting to queue at most 127 images while parallel processing of 1 images.\n", + "2025-02-25 14:22:42,263 INFO: Reading data for image 2025-01-02_DJI_0379_573e3a79.JPG (queue-size=0)\n", + "2025-02-25 14:22:42,680 INFO: Finished reading images\n", + "2025-02-25 14:22:42,681 INFO: Skip recomputing ROOT_HAHOG features for image 2025-01-02_DJI_0379_573e3a79.JPG\n", + "2025-02-25 14:22:42,682 INFO: Reading data for image 2025-02-01_DJI_0843_0796cf46.JPG (queue-size=0)\n", + "2025-02-25 14:22:43,022 INFO: Finished reading images\n", + "2025-02-25 14:22:43,023 INFO: Skip recomputing ROOT_HAHOG features for image 2025-02-01_DJI_0843_0796cf46.JPG\n", + "2025-02-25 14:22:43,023 INFO: Reading data for image 2025-02-01_DJI_0425_e1182890.JPG (queue-size=0)\n", + "2025-02-25 14:22:43,371 INFO: Finished reading images\n", + "2025-02-25 14:22:43,372 INFO: Skip recomputing ROOT_HAHOG features for image 2025-02-01_DJI_0425_e1182890.JPG\n", + "2025-02-25 14:22:43,373 INFO: Reading data for image 2025-01-12_DJI_0912_d6344671.JPG (queue-size=0)\n", + "2025-02-25 14:22:43,704 INFO: Finished reading images\n", + "2025-02-25 14:22:43,705 INFO: Skip recomputing ROOT_HAHOG features for image 2025-01-12_DJI_0912_d6344671.JPG\n", + "2025-02-25 14:22:43,706 INFO: Reading data for image 2025-01-03_DJI_0534_57db98ae.JPG (queue-size=0)\n", + "2025-02-25 14:22:44,063 INFO: Finished reading images\n", + "2025-02-25 14:22:44,064 INFO: Skip recomputing ROOT_HAHOG features for image 2025-01-03_DJI_0534_57db98ae.JPG\n", + "2025-02-25 14:22:44,064 INFO: Reading data for image 2025-02-01_DJI_0751_f7538bac.JPG (queue-size=0)\n", + "2025-02-25 14:22:44,408 INFO: Finished reading images\n", + "2025-02-25 14:22:44,409 INFO: Skip recomputing ROOT_HAHOG features for image 2025-02-01_DJI_0751_f7538bac.JPG\n", + "2025-02-25 14:22:44,410 INFO: Reading data for image 2025-02-01_DJI_0699_823982b0.JPG (queue-size=0)\n", + "2025-02-25 14:22:44,768 INFO: Finished reading images\n", + "2025-02-25 14:22:44,769 INFO: Skip recomputing ROOT_HAHOG features for image 2025-02-01_DJI_0699_823982b0.JPG\n", + "2025-02-25 14:22:44,770 INFO: Reading data for image 2025-01-06_DJI_0119_852bfccf.JPG (queue-size=0)\n", + "2025-02-25 14:22:45,101 INFO: Finished reading images\n", + "2025-02-25 14:22:45,101 INFO: Skip recomputing ROOT_HAHOG features for image 2025-01-06_DJI_0119_852bfccf.JPG\n", + "2025-02-25 14:22:45,102 INFO: Reading data for image 2025-01-03_DJI_0663_4537530d.JPG (queue-size=0)\n", + "2025-02-25 14:22:45,424 INFO: Finished reading images\n", + "2025-02-25 14:22:45,425 INFO: Skip recomputing ROOT_HAHOG features for image 2025-01-03_DJI_0663_4537530d.JPG\n", + "2025-02-25 14:22:45,426 INFO: Reading data for image 2025-01-03_DJI_0557_295421e4.JPG (queue-size=0)\n", + "2025-02-25 14:22:45,766 INFO: Finished reading images\n", + "2025-02-25 14:22:45,767 INFO: Skip recomputing ROOT_HAHOG features for image 2025-01-03_DJI_0557_295421e4.JPG\n", + "2025-02-25 14:22:45,768 INFO: Reading data for image 2025-02-01_DJI_0084_f46c6662.JPG (queue-size=0)\n", + "2025-02-25 14:22:46,108 INFO: Finished reading images\n", + "2025-02-25 14:22:46,109 INFO: Skip recomputing ROOT_HAHOG features for image 2025-02-01_DJI_0084_f46c6662.JPG\n", + "2025-02-25 14:22:46,110 INFO: Reading data for image 2025-01-12_DJI_0627_394c38a4.JPG (queue-size=0)\n", + "2025-02-25 14:22:46,432 INFO: Finished reading images\n", + "2025-02-25 14:22:46,433 INFO: Skip recomputing ROOT_HAHOG features for image 2025-01-12_DJI_0627_394c38a4.JPG\n", + "2025-02-25 14:22:46,434 INFO: Reading data for image 2025-01-03_DJI_0939_a753b448.JPG (queue-size=0)\n", + "2025-02-25 14:22:46,768 INFO: Finished reading images\n", + "2025-02-25 14:22:46,769 INFO: Skip recomputing ROOT_HAHOG features for image 2025-01-03_DJI_0939_a753b448.JPG\n", + "2025-02-25 14:22:46,770 INFO: Reading data for image 2025-01-03_DJI_0866_096c8304.JPG (queue-size=0)\n", + "2025-02-25 14:22:47,108 INFO: Finished reading images\n", + "2025-02-25 14:22:47,109 INFO: Skip recomputing ROOT_HAHOG features for image 2025-01-03_DJI_0866_096c8304.JPG\n", + "2025-02-25 14:22:47,110 INFO: Reading data for image 2025-02-01_DJI_0757_583bab1a.JPG (queue-size=0)\n", + "2025-02-25 14:22:47,452 INFO: Finished reading images\n", + "2025-02-25 14:22:47,453 INFO: Skip recomputing ROOT_HAHOG features for image 2025-02-01_DJI_0757_583bab1a.JPG\n", + "2025-02-25 14:22:47,458 DEBUG: Entering env context: \n", + "2025-02-25 14:22:47,459 DEBUG: Starting outermost env\n", + "2025-02-25 14:22:47,460 DEBUG: No GDAL environment exists\n", + "2025-02-25 14:22:47,460 DEBUG: New GDAL environment created\n", + "2025-02-25 14:22:47,463 DEBUG: Installing FilePath filesystem handler plugin...\n", + "2025-02-25 14:22:47,466 DEBUG: GDAL data found in package: path='/usr/local/lib/python3.8/dist-packages/rasterio/gdal_data'.\n", + "2025-02-25 14:22:47,467 DEBUG: PROJ data found in package: path='/usr/local/lib/python3.8/dist-packages/rasterio/proj_data'.\n", + "2025-02-25 14:22:47,467 DEBUG: Started GDALEnv: self=.\n", + "2025-02-25 14:22:47,469 DEBUG: Entered env context: \n", + "2025-02-25 14:22:47,470 DEBUG: Sharing flag: 0\n", + "2025-02-25 14:22:47,471 DEBUG: Nodata success: 1, Nodata value: 0.000000\n", + "2025-02-25 14:22:47,472 DEBUG: Dataset is started.\n", + "2025-02-25 14:22:47,473 DEBUG: Exiting env context: \n", + "2025-02-25 14:22:47,474 DEBUG: Cleared existing options\n", + "2025-02-25 14:22:47,475 DEBUG: Stopped GDALEnv .\n", + "2025-02-25 14:22:47,476 DEBUG: Exiting outermost env\n", + "2025-02-25 14:22:47,477 DEBUG: Exited env context: \n", + "2025-02-25 14:22:47,478 DEBUG: Entering env context: \n", + "2025-02-25 14:22:47,479 DEBUG: Starting outermost env\n", + "2025-02-25 14:22:47,479 DEBUG: No GDAL environment exists\n", + "2025-02-25 14:22:47,481 DEBUG: New GDAL environment created\n", + "2025-02-25 14:22:47,482 DEBUG: GDAL data found in package: path='/usr/local/lib/python3.8/dist-packages/rasterio/gdal_data'.\n", + "2025-02-25 14:22:47,483 DEBUG: PROJ data found in package: path='/usr/local/lib/python3.8/dist-packages/rasterio/proj_data'.\n", + "2025-02-25 14:22:47,484 DEBUG: Started GDALEnv: self=.\n", + "2025-02-25 14:22:47,484 DEBUG: Entered env context: \n", + "2025-02-25 14:22:47,485 DEBUG: Output nodata value read from file: 0.0\n", + "2025-02-25 14:22:47,486 DEBUG: Output nodata values: [0.0]\n", + "2025-02-25 14:22:47,487 DEBUG: all_valid: False\n", + "2025-02-25 14:22:47,488 DEBUG: mask_flags: ([],)\n", + "2025-02-25 14:22:47,489 DEBUG: Jump straight to _read()\n", + "2025-02-25 14:22:47,490 DEBUG: Window: None\n", + "2025-02-25 14:22:47,491 DEBUG: IO window xoff=0.0 yoff=0.0 width=132.0 height=110.0\n", + "2025-02-25 14:22:47,499 DEBUG: Exiting env context: \n", + "2025-02-25 14:22:47,499 DEBUG: Cleared existing options\n", + "2025-02-25 14:22:47,500 DEBUG: Stopped GDALEnv .\n", + "2025-02-25 14:22:47,500 DEBUG: Exiting outermost env\n", + "2025-02-25 14:22:47,501 DEBUG: Exited env context: \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "############### Cone matching!!!\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-02-25 14:22:53,022 DEBUG: GDAL data found in package: path='/usr/local/lib/python3.8/dist-packages/fiona/gdal_data'.\n", + "2025-02-25 14:22:53,023 DEBUG: PROJ data found in package: path='/usr/local/lib/python3.8/dist-packages/fiona/proj_data'.\n", + "2025-02-25 14:22:53,027 DEBUG: Deleted pre-existing layer at cones_projections\n", + "2025-02-25 14:22:53,034 DEBUG: GDAL data found in package: path='/usr/local/lib/python3.8/dist-packages/fiona/gdal_data'.\n", + "2025-02-25 14:22:53,034 DEBUG: PROJ data found in package: path='/usr/local/lib/python3.8/dist-packages/fiona/proj_data'.\n", + "2025-02-25 14:22:53,034 DEBUG: Created layer cones_projections\n", + "2025-02-25 14:22:53,035 DEBUG: Writing started\n", + "2025-02-25 14:22:53,035 DEBUG: GDAL data found in package: path='/usr/local/lib/python3.8/dist-packages/fiona/gdal_data'.\n", + "2025-02-25 14:22:53,036 DEBUG: PROJ data found in package: path='/usr/local/lib/python3.8/dist-packages/fiona/proj_data'.\n", + "2025-02-25 14:22:53,040 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", + "2025-02-25 14:22:53,508 DEBUG: Transaction supported: 1\n", + "2025-02-25 14:22:53,509 DEBUG: Starting transaction (initial)\n", + "2025-02-25 14:22:53,509 DEBUG: Setting feature property: key='name', value='2025-02-01_DJI_0084_f46c6662.JPG', i=0, setter=\n", + "2025-02-25 14:22:53,511 DEBUG: Committing transaction (final)\n", + "2025-02-25 14:22:53,521 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", + "2025-02-25 14:22:53,995 DEBUG: Transaction supported: 1\n", + "2025-02-25 14:22:53,995 DEBUG: Starting transaction (initial)\n", + "2025-02-25 14:22:53,996 DEBUG: Setting feature property: key='name', value='2025-01-03_DJI_0939_a753b448.JPG', i=0, setter=\n", + "2025-02-25 14:22:53,996 DEBUG: Committing transaction (final)\n", + "2025-02-25 14:22:54,005 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", + "2025-02-25 14:22:54,411 DEBUG: Transaction supported: 1\n", + "2025-02-25 14:22:54,412 DEBUG: Starting transaction (initial)\n", + "2025-02-25 14:22:54,412 DEBUG: Setting feature property: key='name', value='2025-01-03_DJI_0866_096c8304.JPG', i=0, setter=\n", + "2025-02-25 14:22:54,413 DEBUG: Committing transaction (final)\n", + "2025-02-25 14:22:54,424 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", + "2025-02-25 14:22:55,038 DEBUG: Transaction supported: 1\n", + "2025-02-25 14:22:55,039 DEBUG: Starting transaction (initial)\n", + "2025-02-25 14:22:55,039 DEBUG: Setting feature property: key='name', value='2025-02-01_DJI_0425_e1182890.JPG', i=0, setter=\n", + "2025-02-25 14:22:55,040 DEBUG: Committing transaction (final)\n", + "2025-02-25 14:22:55,048 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", + "2025-02-25 14:22:55,245 DEBUG: Transaction supported: 1\n", + "2025-02-25 14:22:55,246 DEBUG: Starting transaction (initial)\n", + "2025-02-25 14:22:55,247 DEBUG: Setting feature property: key='name', value='2025-02-01_DJI_0751_f7538bac.JPG', i=0, setter=\n", + "2025-02-25 14:22:55,247 DEBUG: Committing transaction (final)\n", + "2025-02-25 14:22:55,257 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", + "2025-02-25 14:22:55,598 DEBUG: Transaction supported: 1\n", + "2025-02-25 14:22:55,599 DEBUG: Starting transaction (initial)\n", + "2025-02-25 14:22:55,599 DEBUG: Setting feature property: key='name', value='2025-01-03_DJI_0557_295421e4.JPG', i=0, setter=\n", + "2025-02-25 14:22:55,600 DEBUG: Committing transaction (final)\n", + "2025-02-25 14:22:55,610 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", + "2025-02-25 14:22:56,043 DEBUG: Transaction supported: 1\n", + "2025-02-25 14:22:56,043 DEBUG: Starting transaction (initial)\n", + "2025-02-25 14:22:56,044 DEBUG: Setting feature property: key='name', value='2025-01-06_DJI_0119_852bfccf.JPG', i=0, setter=\n", + "2025-02-25 14:22:56,044 DEBUG: Committing transaction (final)\n", + "2025-02-25 14:22:56,055 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", + "2025-02-25 14:22:56,942 DEBUG: Transaction supported: 1\n", + "2025-02-25 14:22:56,942 DEBUG: Starting transaction (initial)\n", + "2025-02-25 14:22:56,943 DEBUG: Setting feature property: key='name', value='2025-01-12_DJI_0627_394c38a4.JPG', i=0, setter=\n", + "2025-02-25 14:22:56,944 DEBUG: Committing transaction (final)\n", + "2025-02-25 14:22:56,953 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", + "2025-02-25 14:22:57,314 DEBUG: Transaction supported: 1\n", + "2025-02-25 14:22:57,315 DEBUG: Starting transaction (initial)\n", + "2025-02-25 14:22:57,315 DEBUG: Setting feature property: key='name', value='2025-02-01_DJI_0843_0796cf46.JPG', i=0, setter=\n", + "2025-02-25 14:22:57,316 DEBUG: Committing transaction (final)\n", + "2025-02-25 14:22:57,327 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", + "2025-02-25 14:22:57,996 DEBUG: Transaction supported: 1\n", + "2025-02-25 14:22:57,997 DEBUG: Starting transaction (initial)\n", + "2025-02-25 14:22:57,997 DEBUG: Setting feature property: key='name', value='2025-01-03_DJI_0663_4537530d.JPG', i=0, setter=\n", + "2025-02-25 14:22:57,998 DEBUG: Committing transaction (final)\n", + "2025-02-25 14:22:58,008 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", + "2025-02-25 14:22:58,253 DEBUG: Transaction supported: 1\n", + "2025-02-25 14:22:58,253 DEBUG: Starting transaction (initial)\n", + "2025-02-25 14:22:58,254 DEBUG: Setting feature property: key='name', value='2025-02-01_DJI_0757_583bab1a.JPG', i=0, setter=\n", + "2025-02-25 14:22:58,255 DEBUG: Committing transaction (final)\n", + "2025-02-25 14:22:58,264 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", + "2025-02-25 14:22:58,577 DEBUG: Transaction supported: 1\n", + "2025-02-25 14:22:58,578 DEBUG: Starting transaction (initial)\n", + "2025-02-25 14:22:58,578 DEBUG: Setting feature property: key='name', value='2025-02-01_DJI_0699_823982b0.JPG', i=0, setter=\n", + "2025-02-25 14:22:58,579 DEBUG: Committing transaction (final)\n", + "2025-02-25 14:22:58,587 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", + "2025-02-25 14:22:58,777 DEBUG: Transaction supported: 1\n", + "2025-02-25 14:22:58,778 DEBUG: Starting transaction (initial)\n", + "2025-02-25 14:22:58,778 DEBUG: Setting feature property: key='name', value='2025-01-03_DJI_0534_57db98ae.JPG', i=0, setter=\n", + "2025-02-25 14:22:58,779 DEBUG: Committing transaction (final)\n", + "2025-02-25 14:22:58,789 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", + "2025-02-25 14:22:59,300 DEBUG: Transaction supported: 1\n", + "2025-02-25 14:22:59,301 DEBUG: Starting transaction (initial)\n", + "2025-02-25 14:22:59,301 DEBUG: Setting feature property: key='name', value='2025-01-02_DJI_0379_573e3a79.JPG', i=0, setter=\n", + "2025-02-25 14:22:59,301 DEBUG: Committing transaction (final)\n", + "2025-02-25 14:22:59,310 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", + "2025-02-25 14:22:59,625 DEBUG: Transaction supported: 1\n", + "2025-02-25 14:22:59,626 DEBUG: Starting transaction (initial)\n", + "2025-02-25 14:22:59,626 DEBUG: Setting feature property: key='name', value='2025-01-12_DJI_0912_d6344671.JPG', i=0, setter=\n", + "2025-02-25 14:22:59,627 DEBUG: Committing transaction (final)\n", + "100%|███████████████████████████████████████████| 15/15 [00:06<00:00, 2.27it/s]\n", + "2025-02-25 14:22:59,661 DEBUG: Flushed data source cache\n", + "2025-02-25 14:22:59,662 DEBUG: Flushed buffer\n", + "2025-02-25 14:22:59,663 DEBUG: Stopped session\n", + "2025-02-25 14:22:59,664 INFO: Matching 85 image pairs\n", + "2025-02-25 14:22:59,684 INFO: Computing pair matching with 1 processes\n", + "2025-02-25 14:22:59,694 DEBUG: No segmentation for 2025-02-01_DJI_0084_f46c6662.JPG, no features masked.\n", + "2025-02-25 14:22:59,702 DEBUG: No segmentation for 2025-02-01_DJI_0425_e1182890.JPG, no features masked.\n", + "2025-02-25 14:22:59,945 DEBUG: Matching 2025-02-01_DJI_0084_f46c6662.JPG and 2025-02-01_DJI_0425_e1182890.JPG. Matcher: FLANN (symmetric) T-desc: 0.258 T-robust: 0.000 T-total: 0.258 Matches: 26 Robust: 22 Success: True\n", + "2025-02-25 14:22:59,951 DEBUG: No segmentation for 2025-01-03_DJI_0557_295421e4.JPG, no features masked.\n", + "2025-02-25 14:22:59,960 DEBUG: No segmentation for 2025-02-01_DJI_0699_823982b0.JPG, no features masked.\n", + "2025-02-25 14:23:00,196 DEBUG: Matching 2025-01-03_DJI_0557_295421e4.JPG and 2025-02-01_DJI_0699_823982b0.JPG. Matcher: FLANN (symmetric) T-desc: 0.250 Matches: FAILED\n", + "2025-02-25 14:23:00,202 DEBUG: No segmentation for 2025-01-03_DJI_0939_a753b448.JPG, no features masked.\n", + "2025-02-25 14:23:00,210 DEBUG: No segmentation for 2025-02-01_DJI_0843_0796cf46.JPG, no features masked.\n", + "2025-02-25 14:23:00,445 DEBUG: Matching 2025-01-03_DJI_0939_a753b448.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.249 Matches: FAILED\n", + "2025-02-25 14:23:00,452 DEBUG: No segmentation for 2025-01-03_DJI_0663_4537530d.JPG, no features masked.\n", + "2025-02-25 14:23:00,460 DEBUG: No segmentation for 2025-02-01_DJI_0751_f7538bac.JPG, no features masked.\n", + "2025-02-25 14:23:00,699 DEBUG: Matching 2025-01-03_DJI_0663_4537530d.JPG and 2025-02-01_DJI_0751_f7538bac.JPG. Matcher: FLANN (symmetric) T-desc: 0.253 Matches: FAILED\n", + "2025-02-25 14:23:00,706 DEBUG: No segmentation for 2025-01-12_DJI_0912_d6344671.JPG, no features masked.\n", + "2025-02-25 14:23:00,863 DEBUG: Matching 2025-01-12_DJI_0912_d6344671.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.164 Matches: FAILED\n", + "2025-02-25 14:23:00,870 DEBUG: No segmentation for 2025-01-03_DJI_0866_096c8304.JPG, no features masked.\n", + "2025-02-25 14:23:01,054 DEBUG: Matching 2025-01-03_DJI_0866_096c8304.JPG and 2025-02-01_DJI_0751_f7538bac.JPG. Matcher: FLANN (symmetric) T-desc: 0.190 Matches: FAILED\n", + "2025-02-25 14:23:01,061 DEBUG: No segmentation for 2025-01-02_DJI_0379_573e3a79.JPG, no features masked.\n", + "2025-02-25 14:23:01,222 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-02-01_DJI_0425_e1182890.JPG. Matcher: FLANN (symmetric) T-desc: 0.167 Matches: FAILED\n", + "2025-02-25 14:23:01,303 DEBUG: Matching 2025-01-03_DJI_0663_4537530d.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.080 Matches: FAILED\n", + "2025-02-25 14:23:01,389 DEBUG: Matching 2025-01-03_DJI_0557_295421e4.JPG and 2025-01-12_DJI_0912_d6344671.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", + "2025-02-25 14:23:01,396 DEBUG: No segmentation for 2025-01-06_DJI_0119_852bfccf.JPG, no features masked.\n", + "2025-02-25 14:23:01,403 DEBUG: No segmentation for 2025-01-12_DJI_0627_394c38a4.JPG, no features masked.\n", + "2025-02-25 14:23:01,625 DEBUG: Matching 2025-01-06_DJI_0119_852bfccf.JPG and 2025-01-12_DJI_0627_394c38a4.JPG. Matcher: FLANN (symmetric) T-desc: 0.235 Matches: FAILED\n", + "2025-02-25 14:23:01,631 DEBUG: No segmentation for 2025-02-01_DJI_0757_583bab1a.JPG, no features masked.\n", + "2025-02-25 14:23:01,860 DEBUG: Matching 2025-02-01_DJI_0751_f7538bac.JPG and 2025-02-01_DJI_0757_583bab1a.JPG. Matcher: FLANN (symmetric) T-desc: 0.232 T-robust: 0.002 T-total: 0.235 Matches: 2313 Robust: 2308 Success: True\n", + "2025-02-25 14:23:01,866 DEBUG: No segmentation for 2025-01-03_DJI_0534_57db98ae.JPG, no features masked.\n", + "2025-02-25 14:23:02,021 DEBUG: Matching 2025-01-03_DJI_0534_57db98ae.JPG and 2025-01-12_DJI_0627_394c38a4.JPG. Matcher: FLANN (symmetric) T-desc: 0.160 Matches: FAILED\n", + "2025-02-25 14:23:02,105 DEBUG: Matching 2025-02-01_DJI_0084_f46c6662.JPG and 2025-02-01_DJI_0751_f7538bac.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", + "2025-02-25 14:23:02,192 DEBUG: Matching 2025-01-03_DJI_0557_295421e4.JPG and 2025-02-01_DJI_0757_583bab1a.JPG. Matcher: FLANN (symmetric) T-desc: 0.087 Matches: FAILED\n", + "2025-02-25 14:23:02,277 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-01-03_DJI_0534_57db98ae.JPG. Matcher: FLANN (symmetric) T-desc: 0.084 Matches: FAILED\n", + "2025-02-25 14:23:02,356 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.079 Matches: FAILED\n", + "2025-02-25 14:23:02,443 DEBUG: Matching 2025-01-12_DJI_0627_394c38a4.JPG and 2025-02-01_DJI_0425_e1182890.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", + "2025-02-25 14:23:02,528 DEBUG: Matching 2025-01-12_DJI_0627_394c38a4.JPG and 2025-02-01_DJI_0084_f46c6662.JPG. Matcher: FLANN (symmetric) T-desc: 0.084 Matches: FAILED\n", + "2025-02-25 14:23:02,612 DEBUG: Matching 2025-01-03_DJI_0939_a753b448.JPG and 2025-02-01_DJI_0699_823982b0.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", + "2025-02-25 14:23:02,694 DEBUG: Matching 2025-02-01_DJI_0699_823982b0.JPG and 2025-02-01_DJI_0751_f7538bac.JPG. Matcher: FLANN (symmetric) T-desc: 0.082 Matches: FAILED\n", + "2025-02-25 14:23:02,780 DEBUG: Matching 2025-01-03_DJI_0557_295421e4.JPG and 2025-01-03_DJI_0939_a753b448.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", + "2025-02-25 14:23:02,860 DEBUG: Matching 2025-01-03_DJI_0557_295421e4.JPG and 2025-01-06_DJI_0119_852bfccf.JPG. Matcher: FLANN (symmetric) T-desc: 0.079 Matches: FAILED\n", + "2025-02-25 14:23:02,941 DEBUG: Matching 2025-01-06_DJI_0119_852bfccf.JPG and 2025-02-01_DJI_0084_f46c6662.JPG. Matcher: FLANN (symmetric) T-desc: 0.080 Matches: FAILED\n", + "2025-02-25 14:23:03,027 DEBUG: Matching 2025-01-03_DJI_0557_295421e4.JPG and 2025-01-03_DJI_0663_4537530d.JPG. Matcher: FLANN (symmetric) T-desc: 0.085 T-robust: 0.000 T-total: 0.085 Matches: 188 Robust: 178 Success: True\n", + "2025-02-25 14:23:03,114 DEBUG: Matching 2025-01-03_DJI_0939_a753b448.JPG and 2025-02-01_DJI_0757_583bab1a.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", + "2025-02-25 14:23:03,199 DEBUG: Matching 2025-01-03_DJI_0663_4537530d.JPG and 2025-02-01_DJI_0757_583bab1a.JPG. Matcher: FLANN (symmetric) T-desc: 0.085 Matches: FAILED\n", + "2025-02-25 14:23:03,283 DEBUG: Matching 2025-01-12_DJI_0627_394c38a4.JPG and 2025-02-01_DJI_0751_f7538bac.JPG. Matcher: FLANN (symmetric) T-desc: 0.084 Matches: FAILED\n", + "2025-02-25 14:23:03,365 DEBUG: Matching 2025-01-06_DJI_0119_852bfccf.JPG and 2025-02-01_DJI_0751_f7538bac.JPG. Matcher: FLANN (symmetric) T-desc: 0.081 Matches: FAILED\n", + "2025-02-25 14:23:03,452 DEBUG: Matching 2025-01-03_DJI_0534_57db98ae.JPG and 2025-02-01_DJI_0751_f7538bac.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", + "2025-02-25 14:23:03,535 DEBUG: Matching 2025-01-03_DJI_0939_a753b448.JPG and 2025-01-06_DJI_0119_852bfccf.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", + "2025-02-25 14:23:03,618 DEBUG: Matching 2025-01-03_DJI_0534_57db98ae.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.082 Matches: FAILED\n", + "2025-02-25 14:23:03,699 DEBUG: Matching 2025-01-03_DJI_0866_096c8304.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.081 Matches: FAILED\n", + "2025-02-25 14:23:03,781 DEBUG: Matching 2025-01-03_DJI_0663_4537530d.JPG and 2025-01-03_DJI_0866_096c8304.JPG. Matcher: FLANN (symmetric) T-desc: 0.081 Matches: FAILED\n", + "2025-02-25 14:23:03,862 DEBUG: Matching 2025-01-03_DJI_0663_4537530d.JPG and 2025-01-06_DJI_0119_852bfccf.JPG. Matcher: FLANN (symmetric) T-desc: 0.081 Matches: FAILED\n", + "2025-02-25 14:23:03,946 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-02-01_DJI_0757_583bab1a.JPG. Matcher: FLANN (symmetric) T-desc: 0.084 Matches: FAILED\n", + "2025-02-25 14:23:04,040 DEBUG: Matching 2025-02-01_DJI_0084_f46c6662.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.093 Matches: FAILED\n", + "2025-02-25 14:23:04,125 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-01-03_DJI_0866_096c8304.JPG. Matcher: FLANN (symmetric) T-desc: 0.084 Matches: FAILED\n", + "2025-02-25 14:23:04,218 DEBUG: Matching 2025-01-03_DJI_0557_295421e4.JPG and 2025-01-12_DJI_0627_394c38a4.JPG. Matcher: FLANN (symmetric) T-desc: 0.093 Matches: FAILED\n", + "2025-02-25 14:23:04,304 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-01-06_DJI_0119_852bfccf.JPG. Matcher: FLANN (symmetric) T-desc: 0.085 Matches: FAILED\n", + "2025-02-25 14:23:04,397 DEBUG: Matching 2025-01-03_DJI_0663_4537530d.JPG and 2025-02-01_DJI_0699_823982b0.JPG. Matcher: FLANN (symmetric) T-desc: 0.093 Matches: FAILED\n", + "2025-02-25 14:23:04,480 DEBUG: Matching 2025-02-01_DJI_0699_823982b0.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.082 Matches: FAILED\n", + "2025-02-25 14:23:04,566 DEBUG: Matching 2025-01-03_DJI_0866_096c8304.JPG and 2025-02-01_DJI_0699_823982b0.JPG. Matcher: FLANN (symmetric) T-desc: 0.085 Matches: FAILED\n", + "2025-02-25 14:23:04,649 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-01-03_DJI_0557_295421e4.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", + "2025-02-25 14:23:04,734 DEBUG: Matching 2025-02-01_DJI_0757_583bab1a.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.084 Matches: FAILED\n", + "2025-02-25 14:23:04,831 DEBUG: Matching 2025-02-01_DJI_0084_f46c6662.JPG and 2025-02-01_DJI_0699_823982b0.JPG. Matcher: FLANN (symmetric) T-desc: 0.094 T-robust: 0.002 T-total: 0.097 Matches: 2310 Robust: 2304 Success: True\n", + "2025-02-25 14:23:04,918 DEBUG: Matching 2025-01-03_DJI_0866_096c8304.JPG and 2025-02-01_DJI_0757_583bab1a.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", + "2025-02-25 14:23:05,000 DEBUG: Matching 2025-01-12_DJI_0627_394c38a4.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.081 Matches: FAILED\n", + "2025-02-25 14:23:05,085 DEBUG: Matching 2025-02-01_DJI_0425_e1182890.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.084 Matches: FAILED\n", + "2025-02-25 14:23:05,166 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-02-01_DJI_0699_823982b0.JPG. Matcher: FLANN (symmetric) T-desc: 0.081 Matches: FAILED\n", + "2025-02-25 14:23:05,254 DEBUG: Matching 2025-01-03_DJI_0939_a753b448.JPG and 2025-01-12_DJI_0627_394c38a4.JPG. Matcher: FLANN (symmetric) T-desc: 0.087 Matches: FAILED\n", + "2025-02-25 14:23:05,346 DEBUG: Matching 2025-01-03_DJI_0557_295421e4.JPG and 2025-02-01_DJI_0084_f46c6662.JPG. Matcher: FLANN (symmetric) T-desc: 0.092 Matches: FAILED\n", + "2025-02-25 14:23:05,431 DEBUG: Matching 2025-01-03_DJI_0663_4537530d.JPG and 2025-01-12_DJI_0627_394c38a4.JPG. Matcher: FLANN (symmetric) T-desc: 0.085 Matches: FAILED\n", + "2025-02-25 14:23:05,519 DEBUG: Matching 2025-02-01_DJI_0084_f46c6662.JPG and 2025-02-01_DJI_0757_583bab1a.JPG. Matcher: FLANN (symmetric) T-desc: 0.087 Matches: FAILED\n", + "2025-02-25 14:23:05,605 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-01-12_DJI_0912_d6344671.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", + "2025-02-25 14:23:05,692 DEBUG: Matching 2025-01-03_DJI_0663_4537530d.JPG and 2025-01-03_DJI_0939_a753b448.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", + "2025-02-25 14:23:05,768 DEBUG: Matching 2025-01-06_DJI_0119_852bfccf.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.076 Matches: FAILED\n", + "2025-02-25 14:23:05,862 DEBUG: Matching 2025-01-03_DJI_0866_096c8304.JPG and 2025-01-03_DJI_0939_a753b448.JPG. Matcher: FLANN (symmetric) T-desc: 0.093 T-robust: 0.000 T-total: 0.094 Matches: 232 Robust: 221 Success: True\n", + "2025-02-25 14:23:05,949 DEBUG: Matching 2025-01-03_DJI_0534_57db98ae.JPG and 2025-01-03_DJI_0866_096c8304.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", + "2025-02-25 14:23:06,033 DEBUG: Matching 2025-01-03_DJI_0866_096c8304.JPG and 2025-01-06_DJI_0119_852bfccf.JPG. Matcher: FLANN (symmetric) T-desc: 0.084 Matches: FAILED\n", + "2025-02-25 14:23:06,115 DEBUG: Matching 2025-02-01_DJI_0699_823982b0.JPG and 2025-02-01_DJI_0757_583bab1a.JPG. Matcher: FLANN (symmetric) T-desc: 0.081 Matches: FAILED\n", + "2025-02-25 14:23:06,200 DEBUG: Matching 2025-01-12_DJI_0627_394c38a4.JPG and 2025-02-01_DJI_0699_823982b0.JPG. Matcher: FLANN (symmetric) T-desc: 0.084 Matches: FAILED\n", + "2025-02-25 14:23:06,283 DEBUG: Matching 2025-01-03_DJI_0534_57db98ae.JPG and 2025-01-03_DJI_0557_295421e4.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", + "2025-02-25 14:23:06,365 DEBUG: Matching 2025-01-03_DJI_0557_295421e4.JPG and 2025-02-01_DJI_0751_f7538bac.JPG. Matcher: FLANN (symmetric) T-desc: 0.081 Matches: FAILED\n", + "2025-02-25 14:23:06,446 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-01-12_DJI_0627_394c38a4.JPG. Matcher: FLANN (symmetric) T-desc: 0.081 Matches: FAILED\n", + "2025-02-25 14:23:06,530 DEBUG: Matching 2025-01-12_DJI_0627_394c38a4.JPG and 2025-01-12_DJI_0912_d6344671.JPG. Matcher: FLANN (symmetric) T-desc: 0.082 T-robust: 0.000 T-total: 0.083 Matches: 337 Robust: 331 Success: True\n", + "2025-02-25 14:23:06,614 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-01-03_DJI_0939_a753b448.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", + "2025-02-25 14:23:06,700 DEBUG: Matching 2025-01-03_DJI_0939_a753b448.JPG and 2025-02-01_DJI_0084_f46c6662.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", + "2025-02-25 14:23:06,783 DEBUG: Matching 2025-01-12_DJI_0912_d6344671.JPG and 2025-02-01_DJI_0425_e1182890.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", + "2025-02-25 14:23:06,868 DEBUG: Matching 2025-01-12_DJI_0627_394c38a4.JPG and 2025-02-01_DJI_0757_583bab1a.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", + "2025-02-25 14:23:06,949 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-01-03_DJI_0663_4537530d.JPG. Matcher: FLANN (symmetric) T-desc: 0.080 Matches: FAILED\n", + "2025-02-25 14:23:07,028 DEBUG: Matching 2025-01-06_DJI_0119_852bfccf.JPG and 2025-02-01_DJI_0757_583bab1a.JPG. Matcher: FLANN (symmetric) T-desc: 0.079 Matches: FAILED\n", + "2025-02-25 14:23:07,113 DEBUG: Matching 2025-01-03_DJI_0534_57db98ae.JPG and 2025-02-01_DJI_0757_583bab1a.JPG. Matcher: FLANN (symmetric) T-desc: 0.084 Matches: FAILED\n", + "2025-02-25 14:23:07,199 DEBUG: Matching 2025-01-03_DJI_0939_a753b448.JPG and 2025-02-01_DJI_0751_f7538bac.JPG. Matcher: FLANN (symmetric) T-desc: 0.085 Matches: FAILED\n", + "2025-02-25 14:23:07,281 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-02-01_DJI_0084_f46c6662.JPG. Matcher: FLANN (symmetric) T-desc: 0.081 Matches: FAILED\n", + "2025-02-25 14:23:07,368 DEBUG: Matching 2025-01-03_DJI_0866_096c8304.JPG and 2025-01-12_DJI_0627_394c38a4.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", + "2025-02-25 14:23:07,451 DEBUG: Matching 2025-01-03_DJI_0534_57db98ae.JPG and 2025-01-03_DJI_0939_a753b448.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", + "2025-02-25 14:23:07,531 DEBUG: Matching 2025-01-03_DJI_0534_57db98ae.JPG and 2025-01-06_DJI_0119_852bfccf.JPG. Matcher: FLANN (symmetric) T-desc: 0.079 Matches: FAILED\n", + "2025-02-25 14:23:07,614 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-02-01_DJI_0751_f7538bac.JPG. Matcher: FLANN (symmetric) T-desc: 0.082 Matches: FAILED\n", + "2025-02-25 14:23:07,697 DEBUG: Matching 2025-01-03_DJI_0534_57db98ae.JPG and 2025-01-03_DJI_0663_4537530d.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", + "2025-02-25 14:23:07,781 DEBUG: Matching 2025-02-01_DJI_0751_f7538bac.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", + "2025-02-25 14:23:07,865 DEBUG: Matching 2025-01-03_DJI_0557_295421e4.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", + "2025-02-25 14:23:07,947 DEBUG: Matching 2025-01-03_DJI_0557_295421e4.JPG and 2025-01-03_DJI_0866_096c8304.JPG. Matcher: FLANN (symmetric) T-desc: 0.081 Matches: FAILED\n", + "2025-02-25 14:23:08,028 DEBUG: Matching 2025-01-06_DJI_0119_852bfccf.JPG and 2025-02-01_DJI_0699_823982b0.JPG. Matcher: FLANN (symmetric) T-desc: 0.080 Matches: FAILED\n", + "2025-02-25 14:23:08,111 DEBUG: Matching 2025-01-03_DJI_0663_4537530d.JPG and 2025-02-01_DJI_0084_f46c6662.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", + "2025-02-25 14:23:08,198 DEBUG: Matching 2025-01-03_DJI_0866_096c8304.JPG and 2025-02-01_DJI_0084_f46c6662.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", + "2025-02-25 14:23:08,199 INFO: Matched 85 pairs (perspective-perspective: 85) in 8.535429486000794 seconds (0.10041682385881893 seconds/pair).\n", + "2025-02-25 14:23:08,263 INFO: reading features\n", + "2025-02-25 14:23:08,341 DEBUG: Merging features onto tracks\n", + "2025-02-25 14:23:08,357 DEBUG: Good tracks: 5351\n", + "2025-02-25 14:23:08,425 INFO: Starting incremental reconstruction\n", + "2025-02-25 14:23:08,464 INFO: Starting reconstruction with 2025-02-01_DJI_0084_f46c6662.JPG and 2025-02-01_DJI_0699_823982b0.JPG\n", + "2025-02-25 14:23:08,474 INFO: Two-view 5-points reconstruction inliers (transposed=False): 2304 / 2304\n", + "2025-02-25 14:23:08,493 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:08,494 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:08,494 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:08,496 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:08,496 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:08,497 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:08,601 INFO: Triangulated: 2033\n", + "2025-02-25 14:23:08,690 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:08,691 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:08,691 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:08,692 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:08,692 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:08,693 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:09,099 INFO: Ran GLOBAL bundle in 0.40 secs.with 2/2033/4066 (2.00) shots/points/proj. (avg. length)\n", + "2025-02-25 14:23:09,099 DEBUG: Ceres Solver Report: Iterations: 82, Initial cost: 6.558796e+01, Final cost: 2.274284e+01, Termination: CONVERGENCE\n", + "2025-02-25 14:23:09,106 INFO: Removed outliers: 0\n", + "2025-02-25 14:23:09,121 INFO: -------------------------------------------------------\n", + "2025-02-25 14:23:09,124 INFO: 2025-02-01_DJI_0425_e1182890.JPG resection inliers: 7 / 7\n", + "2025-02-25 14:23:09,130 INFO: Some images can not be added\n", + "2025-02-25 14:23:09,130 INFO: -------------------------------------------------------\n", + "2025-02-25 14:23:09,131 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:09,131 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:09,132 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:09,133 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:09,133 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:09,133 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:09,550 INFO: Ran GLOBAL bundle in 0.41 secs.with 2/2033/4066 (2.00) shots/points/proj. (avg. length)\n", + "2025-02-25 14:23:09,551 DEBUG: Ceres Solver Report: Iterations: 85, Initial cost: 3.209815e+01, Final cost: 2.274285e+01, Termination: CONVERGENCE\n", + "2025-02-25 14:23:09,557 INFO: Removed outliers: 0\n", + "2025-02-25 14:23:09,575 INFO: Starting reconstruction with 2025-02-01_DJI_0751_f7538bac.JPG and 2025-02-01_DJI_0757_583bab1a.JPG\n", + "2025-02-25 14:23:09,606 INFO: Two-view 5-points reconstruction inliers (transposed=False): 2308 / 2308\n", + "2025-02-25 14:23:09,626 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:09,627 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:09,628 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:09,629 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:09,629 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:09,629 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:09,706 INFO: Triangulated: 2308\n", + "2025-02-25 14:23:09,794 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:09,795 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:09,796 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:09,797 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:09,797 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:09,797 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:09,934 INFO: Ran GLOBAL bundle in 0.13 secs.with 2/2308/4616 (2.00) shots/points/proj. (avg. length)\n", + "2025-02-25 14:23:09,934 DEBUG: Ceres Solver Report: Iterations: 20, Initial cost: 4.381727e+01, Final cost: 2.651973e+01, Termination: CONVERGENCE\n", + "2025-02-25 14:23:09,941 INFO: Removed outliers: 0\n", + "2025-02-25 14:23:09,961 INFO: -------------------------------------------------------\n", + "2025-02-25 14:23:09,963 INFO: Some images can not be added\n", + "2025-02-25 14:23:09,963 INFO: -------------------------------------------------------\n", + "2025-02-25 14:23:09,964 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:09,964 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:09,965 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:09,966 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:09,966 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:09,967 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:10,110 INFO: Ran GLOBAL bundle in 0.13 secs.with 2/2308/4616 (2.00) shots/points/proj. (avg. length)\n", + "2025-02-25 14:23:10,111 DEBUG: Ceres Solver Report: Iterations: 20, Initial cost: 2.654403e+01, Final cost: 2.651950e+01, Termination: CONVERGENCE\n", + "2025-02-25 14:23:10,118 INFO: Removed outliers: 0\n", + "2025-02-25 14:23:10,136 INFO: Starting reconstruction with 2025-01-12_DJI_0627_394c38a4.JPG and 2025-01-12_DJI_0912_d6344671.JPG\n", + "2025-02-25 14:23:10,139 INFO: Two-view 5-points reconstruction inliers (transposed=False): 330 / 331\n", + "2025-02-25 14:23:10,144 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:10,145 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:10,145 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:10,146 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:10,146 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:10,147 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:10,159 INFO: Triangulated: 330\n", + "2025-02-25 14:23:10,173 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:10,173 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:10,174 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:10,175 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:10,175 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:10,176 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:10,249 INFO: Ran GLOBAL bundle in 0.07 secs.with 2/330/660 (2.00) shots/points/proj. (avg. length)\n", + "2025-02-25 14:23:10,250 DEBUG: Ceres Solver Report: Iterations: 77, Initial cost: 1.919467e+02, Final cost: 1.762566e+01, Termination: CONVERGENCE\n", + "2025-02-25 14:23:10,252 INFO: Removed outliers: 0\n", + "2025-02-25 14:23:10,255 INFO: -------------------------------------------------------\n", + "2025-02-25 14:23:10,256 INFO: Some images can not be added\n", + "2025-02-25 14:23:10,257 INFO: -------------------------------------------------------\n", + "2025-02-25 14:23:10,257 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:10,258 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:10,259 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:10,260 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:10,260 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:10,261 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:10,334 INFO: Ran GLOBAL bundle in 0.07 secs.with 2/330/660 (2.00) shots/points/proj. (avg. length)\n", + "2025-02-25 14:23:10,335 DEBUG: Ceres Solver Report: Iterations: 76, Initial cost: 1.726124e+02, Final cost: 1.762565e+01, Termination: CONVERGENCE\n", + "2025-02-25 14:23:10,336 INFO: Removed outliers: 0\n", + "2025-02-25 14:23:10,339 INFO: Starting reconstruction with 2025-01-03_DJI_0866_096c8304.JPG and 2025-01-03_DJI_0939_a753b448.JPG\n", + "2025-02-25 14:23:10,346 INFO: Two-view 5-points reconstruction inliers (transposed=False): 220 / 221\n", + "2025-02-25 14:23:10,350 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:10,351 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:10,351 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:10,352 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:10,353 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:10,353 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:10,361 INFO: Triangulated: 220\n", + "2025-02-25 14:23:10,371 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:10,372 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:10,372 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:10,373 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:10,374 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:10,374 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:10,385 INFO: Ran GLOBAL bundle in 0.01 secs.with 2/220/440 (2.00) shots/points/proj. (avg. length)\n", + "2025-02-25 14:23:10,385 DEBUG: Ceres Solver Report: Iterations: 13, Initial cost: 1.675873e+01, Final cost: 1.512158e+01, Termination: CONVERGENCE\n", + "2025-02-25 14:23:10,386 INFO: Removed outliers: 0\n", + "2025-02-25 14:23:10,388 INFO: -------------------------------------------------------\n", + "2025-02-25 14:23:10,389 INFO: Some images can not be added\n", + "2025-02-25 14:23:10,389 INFO: -------------------------------------------------------\n", + "2025-02-25 14:23:10,390 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:10,390 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:10,390 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:10,392 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:10,392 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:10,392 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:10,404 INFO: Ran GLOBAL bundle in 0.01 secs.with 2/220/440 (2.00) shots/points/proj. (avg. length)\n", + "2025-02-25 14:23:10,405 DEBUG: Ceres Solver Report: Iterations: 13, Initial cost: 1.512966e+01, Final cost: 1.512158e+01, Termination: CONVERGENCE\n", + "2025-02-25 14:23:10,406 INFO: Removed outliers: 0\n", + "2025-02-25 14:23:10,409 INFO: Starting reconstruction with 2025-01-03_DJI_0557_295421e4.JPG and 2025-01-03_DJI_0663_4537530d.JPG\n", + "2025-02-25 14:23:10,443 INFO: Two-view 5-points reconstruction inliers (transposed=False): 177 / 178\n", + "2025-02-25 14:23:10,447 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:10,448 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:10,448 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:10,449 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:10,450 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:10,450 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:10,457 INFO: Triangulated: 178\n", + "2025-02-25 14:23:10,466 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:10,467 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:10,467 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:10,468 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:10,469 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:10,469 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:10,522 INFO: Ran GLOBAL bundle in 0.05 secs.with 2/178/356 (2.00) shots/points/proj. (avg. length)\n", + "2025-02-25 14:23:10,523 DEBUG: Ceres Solver Report: Iterations: 101, Initial cost: 3.032654e+02, Final cost: 2.319729e+02, Termination: NO_CONVERGENCE\n", + "2025-02-25 14:23:10,524 INFO: Removed outliers: 0\n", + "2025-02-25 14:23:10,526 INFO: -------------------------------------------------------\n", + "2025-02-25 14:23:10,526 INFO: Some images can not be added\n", + "2025-02-25 14:23:10,526 INFO: -------------------------------------------------------\n", + "2025-02-25 14:23:10,527 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:10,527 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:10,527 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:10,529 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", + "2025-02-25 14:23:10,529 INFO: GCP constraints X (0) - Xp (0)\n", + "2025-02-25 14:23:10,529 INFO: GPS constraints X (2) - Xp (2)\n", + "2025-02-25 14:23:10,585 INFO: Ran GLOBAL bundle in 0.05 secs.with 2/178/356 (2.00) shots/points/proj. (avg. length)\n", + "2025-02-25 14:23:10,585 DEBUG: Ceres Solver Report: Iterations: 101, Initial cost: 2.931969e+02, Final cost: 2.681078e+02, Termination: NO_CONVERGENCE\n", + "2025-02-25 14:23:10,586 INFO: Removed outliers: 0\n", + "2025-02-25 14:23:10,588 INFO: Reconstruction 0: 2 images, 2033 points\n", + "2025-02-25 14:23:10,588 INFO: Reconstruction 1: 2 images, 2308 points\n", + "2025-02-25 14:23:10,589 INFO: Reconstruction 2: 2 images, 330 points\n", + "2025-02-25 14:23:10,589 INFO: Reconstruction 3: 2 images, 220 points\n", + "2025-02-25 14:23:10,589 INFO: Reconstruction 4: 2 images, 178 points\n", + "2025-02-25 14:23:10,590 INFO: 5 partial reconstructions in total.\n", + "2025-02-25 14:23:11,170 DEBUG: Undistorting the reconstruction\n", + "2025-02-25 14:23:11,234 INFO: Undistorting in parallel with 1 processes (240.60302734375 MB per image)\n", + "2025-02-25 14:23:11,236 DEBUG: Undistorting image 2025-02-01_DJI_0084_f46c6662.JPG\n", + "2025-02-25 14:23:13,408 DEBUG: Undistorting image 2025-02-01_DJI_0699_823982b0.JPG\n", + "2025-02-25 14:23:15,642 INFO: Computing neighbors\n", + "2025-02-25 14:23:15,681 INFO: Using precomputed raw depthmap 2025-02-01_DJI_0084_f46c6662.JPG.jpg\n", + "2025-02-25 14:23:15,681 INFO: Using precomputed raw depthmap 2025-02-01_DJI_0699_823982b0.JPG.jpg\n", + "2025-02-25 14:23:15,682 INFO: Using precomputed clean depthmap 2025-02-01_DJI_0084_f46c6662.JPG.jpg\n", + "2025-02-25 14:23:15,682 INFO: Using precomputed clean depthmap 2025-02-01_DJI_0699_823982b0.JPG.jpg\n", + "2025-02-25 14:23:15,683 INFO: Using precomputed pruned depthmap 2025-02-01_DJI_0084_f46c6662.JPG.jpg\n", + "2025-02-25 14:23:15,684 INFO: Using precomputed pruned depthmap 2025-02-01_DJI_0699_823982b0.JPG.jpg\n", + "2025-02-25 14:23:15,684 INFO: Merging depthmaps\n" + ] + } + ], + "source": [ + "# pyre-unsafe\n", + "\n", + "import sys\n", + "from os.path import abspath, dirname, join\n", + "\n", + "opensfm_path = '/source/OpenSfM'\n", + "sys.path.insert(0, opensfm_path)\n", + "\n", + "import contextlib\n", + "from typing import Generator\n", + "\n", + "from opensfm.dataset import DataSet\n", + "\n", + "from typing import Any, Callable, List\n", + "import argparse\n", + "import addict\n", + "\n", + "from opensfm import log\n", + "\n", + "\n", + "def local_command_runner(all_commands_types: List[Any], dataset_factory: Callable, dataset_choices: List[str], args: addict.Dict) -> None:\n", + " \"\"\" Main entry point for running the passed SfM commands types.\"\"\"\n", + " log.setup()\n", + "\n", + " # Create the top-level parser\n", + "\n", + " command_objects = [c.Command() for c in all_commands_types]\n", + "\n", + " # Instanciate datast\n", + " with dataset_factory(args.dataset, args.dataset_type) as data:\n", + " # Run the selected subcommand\n", + " for command in command_objects:\n", + " if args.command == command.name:\n", + " command.run(data, args)\n", + "\n", + "\n", + "# pyre-unsafe\n", + "@contextlib.contextmanager\n", + "def create_default_dataset_context(\n", + " dataset_path: str, dataset_type: str = \"\"\n", + ") -> Generator[DataSet, None, None]:\n", + " dataset = DataSet(dataset_path)\n", + " try:\n", + " yield dataset\n", + " finally:\n", + " dataset.clean_up()\n", + "\n", + "\n", + "dataset_path = '/source/opensfm_pairing_draft/data/batumi_15pic'\n", + "commands_list = [\n", + " addict.Dict(command='extract_metadata', dataset=dataset_path, dataset_type='opensfm'),\n", + " addict.Dict(command='detect_features', dataset=dataset_path, dataset_type='opensfm'),\n", + " addict.Dict(command='match_features', dataset=dataset_path, dataset_type='opensfm'),\n", + " addict.Dict(command='create_tracks', dataset=dataset_path, dataset_type='opensfm'),\n", + " addict.Dict(algorithm='incremental', command='reconstruct', dataset=dataset_path,\n", + " dataset_type='opensfm'),\n", + " addict.Dict(command='mesh', dataset=dataset_path, dataset_type='opensfm'),\n", + " addict.Dict(command='undistort', dataset=dataset_path, dataset_type='opensfm',\n", + " output='undistorted', reconstruction=None, reconstruction_index=0,\n", + " skip_images=False, tracks=None),\n", + " addict.Dict(command='compute_depthmaps', dataset=dataset_path,dataset_type='opensfm',\n", + " interactive=False, subfolder='undistorted'),\n", + "]\n", + "\n", + "\n", + "if __name__ == \"__main__\":\n", + " from opensfm import commands\n", + " for command_config in commands_list:\n", + " local_command_runner(\n", + " commands.opensfm_commands,\n", + " create_default_dataset_context,\n", + " dataset_choices=[\"opensfm\"],\n", + " args=command_config\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2740a013-1afb-4791-a203-7e848cd18173", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From a5a272baf626c8ac322f249d2d09da5e3ec3096b Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Thu, 27 Feb 2025 19:47:48 +0100 Subject: [PATCH 07/25] Readme update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7357aa798..0b48531e2 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ The image matching pipeline operates as follows: image pairs are initially selec Leveraging metadata such as yaw, pitch, and roll — allows for the selection of more relevant pairs, rather then brutforce. -In such cases, utilizing Field of View (FoV) cones could offer advantages over distance- or triangulation-based methods, which are already implemented in OpenSfM. +**In cases, when you have mix of nadir and oblique images, utilizing Field of View (FoV) cones could offer advantages over distance- or triangulation-based methods, which are already implemented in OpenSfM.** ![Multiperspective 1](doc/source/images/multiperspective1.png) ![Multiperspective 2](doc/source/images/multiperspective2.png) From 8e38699bc48b4ea87c3f167e7d8a6d4f117f8a0e Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Thu, 27 Feb 2025 19:50:36 +0100 Subject: [PATCH 08/25] Readme update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0b48531e2..5bc7512b0 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Naive Cone Pairing +# Naive Cone Pairing algorithm **Jupyter-notebooks could be found in this repo https://github.com/aliaksandr960/opensfm_pairing_draft** ## Overview The image matching pipeline operates as follows: image pairs are initially selected based on metadata and then matched using point-matching algorithms such as SIFT, ORB, ALIKE, or others. There is an attempt to enhance the image pairing process using metadata. From 98a92953270fadf7ef44e1513c25a0bc294edb9d Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Thu, 27 Feb 2025 19:53:27 +0100 Subject: [PATCH 09/25] Readme update --- README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 5bc7512b0..8fc663ac9 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,9 @@ The image matching pipeline operates as follows: image pairs are initially selec Leveraging metadata such as yaw, pitch, and roll — allows for the selection of more relevant pairs, rather then brutforce. -**In cases, when you have mix of nadir and oblique images, utilizing Field of View (FoV) cones could offer advantages over distance- or triangulation-based methods, which are already implemented in OpenSfM.** +**Image matching for perspective aerial images in OpenSfM is also constrained by traditional computer vision algorithms such as SIFT and ORB. Most of these struggle with significant variations in scale, rotation, and perspective.** + +**In cases, when you have mix of nadir and oblique images, utilizing Field of View (FoV) cones could offer advantages over distance- or triangulation-based methods, which are already implemented in OpenSfM. But small advantages, don't expect a lot.** ![Multiperspective 1](doc/source/images/multiperspective1.png) ![Multiperspective 2](doc/source/images/multiperspective2.png) @@ -13,10 +15,6 @@ Leveraging metadata such as yaw, pitch, and roll — allows for the selection of **Field of view cones visualization**: ![Cones](doc/source/images/batumi_cones_viz.png) -Image matching for perspective aerial images in OpenSfM is also constrained by traditional computer vision algorithms such as SIFT and ORB. Most of these struggle with significant variations in scale, rotation, and perspective. - -**While better image pairing can provide some improvements, it is not a groundbreaking solution — even when accurate yaw, pitch, and roll metadata are available.** - Since I lack synthetic data generation pipelines or drones to test this hypothesis, the development has been published on GitHub as is. It has been a valuable self-education project. Special thanks to @Komzpa and the OpenAerialMap community for their ideas, data, and support. From 03dbaeac91797de3befb29e307224c09fbad4b0d Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Thu, 27 Feb 2025 20:15:54 +0100 Subject: [PATCH 10/25] Readme update, config update --- README.md | 10 ++++++---- cones_config_example.yaml | 2 +- runner_notebook.ipynb | 4 ++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 8fc663ac9..31e5d8e47 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,10 @@ # Naive Cone Pairing algorithm **Jupyter-notebooks could be found in this repo https://github.com/aliaksandr960/opensfm_pairing_draft** -## Overview -The image matching pipeline operates as follows: image pairs are initially selected based on metadata and then matched using point-matching algorithms such as SIFT, ORB, ALIKE, or others. There is an attempt to enhance the image pairing process using metadata. -Leveraging metadata such as yaw, pitch, and roll — allows for the selection of more relevant pairs, rather then brutforce. +## Overview +Generally, it is just attempt to fix some edge cases. OpenSfM is the proven tool, which successfuly works for more than 10 years. -**Image matching for perspective aerial images in OpenSfM is also constrained by traditional computer vision algorithms such as SIFT and ORB. Most of these struggle with significant variations in scale, rotation, and perspective.** +The image matching pipeline operates as follows: image pairs are initially selected based on metadata and then matched using point-matching algorithms such as SIFT, ORB, ALIKE, or others. There is an attempt to improve the image pairing process. **In cases, when you have mix of nadir and oblique images, utilizing Field of View (FoV) cones could offer advantages over distance- or triangulation-based methods, which are already implemented in OpenSfM. But small advantages, don't expect a lot.** @@ -15,6 +14,9 @@ Leveraging metadata such as yaw, pitch, and roll — allows for the selection of **Field of view cones visualization**: ![Cones](doc/source/images/batumi_cones_viz.png) +**Image matching for perspective aerial images in OpenSfM is also constrained by traditional computer vision algorithms such as SIFT and ORB. Most of these struggle with significant variations in scale, rotation, and perspective.** + + Since I lack synthetic data generation pipelines or drones to test this hypothesis, the development has been published on GitHub as is. It has been a valuable self-education project. Special thanks to @Komzpa and the OpenAerialMap community for their ideas, data, and support. diff --git a/cones_config_example.yaml b/cones_config_example.yaml index 3f6c3ce32..6372048fb 100644 --- a/cones_config_example.yaml +++ b/cones_config_example.yaml @@ -3,6 +3,6 @@ # Set here any parameter that you want to override for this dataset # For example: pair_selection_by_cones: True -dem_path: '/source/opensfm_pairing_draft/data/batumi_15pic/srtm_dem.tif' +dem_path: '/source/opensfm_pairing_draft/data/batumi_6pic/srtm_dem.tif' dem_hight: 100 # DEM extrude height pairing_fov: 60 # Camera FOV (degrees) to use for pairing diff --git a/runner_notebook.ipynb b/runner_notebook.ipynb index 3d7a3d87f..cc7aa089c 100644 --- a/runner_notebook.ipynb +++ b/runner_notebook.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "1781b284-6264-45bc-9fb9-0cf46776f495", "metadata": {}, "outputs": [ @@ -539,7 +539,7 @@ " dataset.clean_up()\n", "\n", "\n", - "dataset_path = '/source/opensfm_pairing_draft/data/batumi_15pic'\n", + "dataset_path = '/source/opensfm_pairing_draft/data/batumi_6pic'\n", "commands_list = [\n", " addict.Dict(command='extract_metadata', dataset=dataset_path, dataset_type='opensfm'),\n", " addict.Dict(command='detect_features', dataset=dataset_path, dataset_type='opensfm'),\n", From 02cedaf999734fe5128dc4c3cb7e2dac6407dd2a Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Thu, 27 Feb 2025 20:18:26 +0100 Subject: [PATCH 11/25] ReadMe update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 31e5d8e47..9895302a0 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Naive Cone Pairing algorithm +# Naive Cone Pairing Algorithm **Jupyter-notebooks could be found in this repo https://github.com/aliaksandr960/opensfm_pairing_draft** ## Overview From 09c1d7bb2e71da87fd5a17f8241a5ebd75efffa2 Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Thu, 27 Feb 2025 20:27:48 +0100 Subject: [PATCH 12/25] Removed redundatnt pring --- opensfm/pairs_selection_by_cones.py | 1 - 1 file changed, 1 deletion(-) diff --git a/opensfm/pairs_selection_by_cones.py b/opensfm/pairs_selection_by_cones.py index 58c69551c..a21f07291 100644 --- a/opensfm/pairs_selection_by_cones.py +++ b/opensfm/pairs_selection_by_cones.py @@ -170,7 +170,6 @@ def pairing_by_cones_from_dataset(ref_images, exifs, data, config_override): - print('############### Cone matching!!!') data.init_reference() reference = data.load_reference() From 1d5f071a364a381460aea89aa00745afc0187270 Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Thu, 27 Feb 2025 20:28:05 +0100 Subject: [PATCH 13/25] Readme update --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9895302a0..ae161de1f 100644 --- a/README.md +++ b/README.md @@ -30,13 +30,15 @@ Special thanks to @Komzpa and the OpenAerialMap community for their ideas, data, 2. Clone this repo and repo https://github.com/aliaksandr960/opensfm_pairing_draft -3. Build the docker image by running **sh ./docker_build.sh** +3. Run inside this repo **git submodule update --init --recursive** -4. Change paths in docker mounts in **./docker_start.sh** as you need +4. Build the docker image by running **sh ./docker_build.sh** -5. Run container by executing **sh ./docker_start.sh** +5. Change paths in docker mounts in **./docker_start.sh** as you need -6. Build OpenSfM by executing inside container **cd /source/OpenSfM && python setup.py build** +6. Run container by executing **sh ./docker_start.sh** + +7. Build OpenSfM by executing inside container **cd /source/OpenSfM && python setup.py build** 7. Run reconstruction by using **standard OpenSfM commands** or jupyter notebook **runner_notebook.ipynb** From 544481a2a5afb90627deb93e0142ba9a7dd4bd77 Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Thu, 27 Feb 2025 20:41:26 +0100 Subject: [PATCH 14/25] Readme update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ae161de1f..c44bd8657 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ **Jupyter-notebooks could be found in this repo https://github.com/aliaksandr960/opensfm_pairing_draft** ## Overview -Generally, it is just attempt to fix some edge cases. OpenSfM is the proven tool, which successfuly works for more than 10 years. +**Generally, it is just attempt to fix some small number of edge cases. OpenSfM is the proven tool, which successfuly works for more than 10 years.** The image matching pipeline operates as follows: image pairs are initially selected based on metadata and then matched using point-matching algorithms such as SIFT, ORB, ALIKE, or others. There is an attempt to improve the image pairing process. From 1fb82dc274165278188758b57874834307f742f4 Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Thu, 27 Feb 2025 20:45:29 +0100 Subject: [PATCH 15/25] Readme update --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c44bd8657..f79b23aec 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,8 @@ The image matching pipeline operates as follows: image pairs are initially selected based on metadata and then matched using point-matching algorithms such as SIFT, ORB, ALIKE, or others. There is an attempt to improve the image pairing process. -**In cases, when you have mix of nadir and oblique images, utilizing Field of View (FoV) cones could offer advantages over distance- or triangulation-based methods, which are already implemented in OpenSfM. But small advantages, don't expect a lot.** +**In cases, when you have mix of nadir and oblique images, utilizing Field of View (FoV) cones could offer advantages over distance- or triangulation-based methods, which are already implemented in OpenSfM.** + ![Multiperspective 1](doc/source/images/multiperspective1.png) ![Multiperspective 2](doc/source/images/multiperspective2.png) @@ -14,7 +15,11 @@ The image matching pipeline operates as follows: image pairs are initially selec **Field of view cones visualization**: ![Cones](doc/source/images/batumi_cones_viz.png) -**Image matching for perspective aerial images in OpenSfM is also constrained by traditional computer vision algorithms such as SIFT and ORB. Most of these struggle with significant variations in scale, rotation, and perspective.** +### Idea: +- Generate field-of-view (FOV) cones for each camera. +- Clip the cones using the land surface (DEM) or a bounding box approximation. - +- Identify overlapping cones to determine potential image matches. + Since I lack synthetic data generation pipelines or drones to test this hypothesis, the development has been published on GitHub as is. It has been a valuable self-education project. From f237d509108affa7ee58a3968f6e991833d0f78d Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Thu, 27 Feb 2025 20:48:50 +0100 Subject: [PATCH 16/25] Readme update --- README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index f79b23aec..8b3a7c2d4 100644 --- a/README.md +++ b/README.md @@ -16,11 +16,9 @@ The image matching pipeline operates as follows: image pairs are initially selec ![Cones](doc/source/images/batumi_cones_viz.png) ### Idea: -- Generate field-of-view (FOV) cones for each camera. -- Clip the cones using the land surface (DEM) or a bounding box approximation. - -- Identify overlapping cones to determine potential image matches. - - +- Generate field-of-view (FOV) cones for each camera +- Clip the cones using the land surface (DEM) or a bounding box approximation +- Identify overlapping cones to determine potential image matches Since I lack synthetic data generation pipelines or drones to test this hypothesis, the development has been published on GitHub as is. It has been a valuable self-education project. From dc05c988ef9f2804c9ea6096b170f1612f3368a7 Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Thu, 27 Feb 2025 20:58:56 +0100 Subject: [PATCH 17/25] Edit readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8b3a7c2d4..f37e50a7a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # Naive Cone Pairing Algorithm **Jupyter-notebooks could be found in this repo https://github.com/aliaksandr960/opensfm_pairing_draft** +Special thanks to @Komzpa and the OpenAerialMap community for their ideas, data, and support. + ## Overview **Generally, it is just attempt to fix some small number of edge cases. OpenSfM is the proven tool, which successfuly works for more than 10 years.** @@ -22,7 +24,6 @@ The image matching pipeline operates as follows: image pairs are initially selec Since I lack synthetic data generation pipelines or drones to test this hypothesis, the development has been published on GitHub as is. It has been a valuable self-education project. -Special thanks to @Komzpa and the OpenAerialMap community for their ideas, data, and support. ## Usage From 692c456fdf39d73a552b0c4a670c6b5e5a7093b7 Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Thu, 27 Feb 2025 21:25:29 +0100 Subject: [PATCH 18/25] Removed redundat code --- cones_config_example.yaml | 8 -------- docker_build.sh | 1 - docker_start.sh | 4 ---- 3 files changed, 13 deletions(-) delete mode 100644 cones_config_example.yaml delete mode 100755 docker_build.sh delete mode 100755 docker_start.sh diff --git a/cones_config_example.yaml b/cones_config_example.yaml deleted file mode 100644 index 6372048fb..000000000 --- a/cones_config_example.yaml +++ /dev/null @@ -1,8 +0,0 @@ - -# OpenSfM will use the default parameters from opensfm/config.py -# Set here any parameter that you want to override for this dataset -# For example: -pair_selection_by_cones: True -dem_path: '/source/opensfm_pairing_draft/data/batumi_6pic/srtm_dem.tif' -dem_hight: 100 # DEM extrude height -pairing_fov: 60 # Camera FOV (degrees) to use for pairing diff --git a/docker_build.sh b/docker_build.sh deleted file mode 100755 index f9d56eb0c..000000000 --- a/docker_build.sh +++ /dev/null @@ -1 +0,0 @@ -docker build . -t opensfmc \ No newline at end of file diff --git a/docker_start.sh b/docker_start.sh deleted file mode 100755 index fc6e87176..000000000 --- a/docker_start.sh +++ /dev/null @@ -1,4 +0,0 @@ -docker run -it --rm --net host \ ---mount type=bind,source=/home/user/work/OpenSfM-ConePairing,target=/source/OpenSfM \ ---mount type=bind,source=/home/user/work/opensfm_pairing_draft,target=/source/opensfm_pairing_draft \ -opensfmc \ No newline at end of file From 55eb9f3020aded41c60ad72a22d3febadeba4858 Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Thu, 27 Feb 2025 21:25:42 +0100 Subject: [PATCH 19/25] Removed redundat code --- runner_notebook.ipynb | 600 ------------------------------------------ 1 file changed, 600 deletions(-) delete mode 100644 runner_notebook.ipynb diff --git a/runner_notebook.ipynb b/runner_notebook.ipynb deleted file mode 100644 index cc7aa089c..000000000 --- a/runner_notebook.ipynb +++ /dev/null @@ -1,600 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "1781b284-6264-45bc-9fb9-0cf46776f495", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2025-02-25 14:22:42,230 INFO: Loading existing EXIF for 2025-01-02_DJI_0379_573e3a79.JPG\n", - "2025-02-25 14:22:42,238 INFO: Loading existing EXIF for 2025-02-01_DJI_0843_0796cf46.JPG\n", - "2025-02-25 14:22:42,239 INFO: Loading existing EXIF for 2025-02-01_DJI_0425_e1182890.JPG\n", - "2025-02-25 14:22:42,239 INFO: Loading existing EXIF for 2025-01-12_DJI_0912_d6344671.JPG\n", - "2025-02-25 14:22:42,240 INFO: Loading existing EXIF for 2025-01-03_DJI_0534_57db98ae.JPG\n", - "2025-02-25 14:22:42,240 INFO: Loading existing EXIF for 2025-02-01_DJI_0751_f7538bac.JPG\n", - "2025-02-25 14:22:42,241 INFO: Loading existing EXIF for 2025-02-01_DJI_0699_823982b0.JPG\n", - "2025-02-25 14:22:42,241 INFO: Loading existing EXIF for 2025-01-06_DJI_0119_852bfccf.JPG\n", - "2025-02-25 14:22:42,241 INFO: Loading existing EXIF for 2025-01-03_DJI_0663_4537530d.JPG\n", - "2025-02-25 14:22:42,242 INFO: Loading existing EXIF for 2025-01-03_DJI_0557_295421e4.JPG\n", - "2025-02-25 14:22:42,242 INFO: Loading existing EXIF for 2025-02-01_DJI_0084_f46c6662.JPG\n", - "2025-02-25 14:22:42,242 INFO: Loading existing EXIF for 2025-01-12_DJI_0627_394c38a4.JPG\n", - "2025-02-25 14:22:42,243 INFO: Loading existing EXIF for 2025-01-03_DJI_0939_a753b448.JPG\n", - "2025-02-25 14:22:42,243 INFO: Loading existing EXIF for 2025-01-03_DJI_0866_096c8304.JPG\n", - "2025-02-25 14:22:42,244 INFO: Loading existing EXIF for 2025-02-01_DJI_0757_583bab1a.JPG\n", - "2025-02-25 14:22:42,260 INFO: Planning to use 20353.5 MB of RAM for both processing queue and parallel processing.\n", - "2025-02-25 14:22:42,263 INFO: Scale-space expected size of a single image : 95.625 MB\n", - "2025-02-25 14:22:42,263 INFO: Expecting to queue at most 127 images while parallel processing of 1 images.\n", - "2025-02-25 14:22:42,263 INFO: Reading data for image 2025-01-02_DJI_0379_573e3a79.JPG (queue-size=0)\n", - "2025-02-25 14:22:42,680 INFO: Finished reading images\n", - "2025-02-25 14:22:42,681 INFO: Skip recomputing ROOT_HAHOG features for image 2025-01-02_DJI_0379_573e3a79.JPG\n", - "2025-02-25 14:22:42,682 INFO: Reading data for image 2025-02-01_DJI_0843_0796cf46.JPG (queue-size=0)\n", - "2025-02-25 14:22:43,022 INFO: Finished reading images\n", - "2025-02-25 14:22:43,023 INFO: Skip recomputing ROOT_HAHOG features for image 2025-02-01_DJI_0843_0796cf46.JPG\n", - "2025-02-25 14:22:43,023 INFO: Reading data for image 2025-02-01_DJI_0425_e1182890.JPG (queue-size=0)\n", - "2025-02-25 14:22:43,371 INFO: Finished reading images\n", - "2025-02-25 14:22:43,372 INFO: Skip recomputing ROOT_HAHOG features for image 2025-02-01_DJI_0425_e1182890.JPG\n", - "2025-02-25 14:22:43,373 INFO: Reading data for image 2025-01-12_DJI_0912_d6344671.JPG (queue-size=0)\n", - "2025-02-25 14:22:43,704 INFO: Finished reading images\n", - "2025-02-25 14:22:43,705 INFO: Skip recomputing ROOT_HAHOG features for image 2025-01-12_DJI_0912_d6344671.JPG\n", - "2025-02-25 14:22:43,706 INFO: Reading data for image 2025-01-03_DJI_0534_57db98ae.JPG (queue-size=0)\n", - "2025-02-25 14:22:44,063 INFO: Finished reading images\n", - "2025-02-25 14:22:44,064 INFO: Skip recomputing ROOT_HAHOG features for image 2025-01-03_DJI_0534_57db98ae.JPG\n", - "2025-02-25 14:22:44,064 INFO: Reading data for image 2025-02-01_DJI_0751_f7538bac.JPG (queue-size=0)\n", - "2025-02-25 14:22:44,408 INFO: Finished reading images\n", - "2025-02-25 14:22:44,409 INFO: Skip recomputing ROOT_HAHOG features for image 2025-02-01_DJI_0751_f7538bac.JPG\n", - "2025-02-25 14:22:44,410 INFO: Reading data for image 2025-02-01_DJI_0699_823982b0.JPG (queue-size=0)\n", - "2025-02-25 14:22:44,768 INFO: Finished reading images\n", - "2025-02-25 14:22:44,769 INFO: Skip recomputing ROOT_HAHOG features for image 2025-02-01_DJI_0699_823982b0.JPG\n", - "2025-02-25 14:22:44,770 INFO: Reading data for image 2025-01-06_DJI_0119_852bfccf.JPG (queue-size=0)\n", - "2025-02-25 14:22:45,101 INFO: Finished reading images\n", - "2025-02-25 14:22:45,101 INFO: Skip recomputing ROOT_HAHOG features for image 2025-01-06_DJI_0119_852bfccf.JPG\n", - "2025-02-25 14:22:45,102 INFO: Reading data for image 2025-01-03_DJI_0663_4537530d.JPG (queue-size=0)\n", - "2025-02-25 14:22:45,424 INFO: Finished reading images\n", - "2025-02-25 14:22:45,425 INFO: Skip recomputing ROOT_HAHOG features for image 2025-01-03_DJI_0663_4537530d.JPG\n", - "2025-02-25 14:22:45,426 INFO: Reading data for image 2025-01-03_DJI_0557_295421e4.JPG (queue-size=0)\n", - "2025-02-25 14:22:45,766 INFO: Finished reading images\n", - "2025-02-25 14:22:45,767 INFO: Skip recomputing ROOT_HAHOG features for image 2025-01-03_DJI_0557_295421e4.JPG\n", - "2025-02-25 14:22:45,768 INFO: Reading data for image 2025-02-01_DJI_0084_f46c6662.JPG (queue-size=0)\n", - "2025-02-25 14:22:46,108 INFO: Finished reading images\n", - "2025-02-25 14:22:46,109 INFO: Skip recomputing ROOT_HAHOG features for image 2025-02-01_DJI_0084_f46c6662.JPG\n", - "2025-02-25 14:22:46,110 INFO: Reading data for image 2025-01-12_DJI_0627_394c38a4.JPG (queue-size=0)\n", - "2025-02-25 14:22:46,432 INFO: Finished reading images\n", - "2025-02-25 14:22:46,433 INFO: Skip recomputing ROOT_HAHOG features for image 2025-01-12_DJI_0627_394c38a4.JPG\n", - "2025-02-25 14:22:46,434 INFO: Reading data for image 2025-01-03_DJI_0939_a753b448.JPG (queue-size=0)\n", - "2025-02-25 14:22:46,768 INFO: Finished reading images\n", - "2025-02-25 14:22:46,769 INFO: Skip recomputing ROOT_HAHOG features for image 2025-01-03_DJI_0939_a753b448.JPG\n", - "2025-02-25 14:22:46,770 INFO: Reading data for image 2025-01-03_DJI_0866_096c8304.JPG (queue-size=0)\n", - "2025-02-25 14:22:47,108 INFO: Finished reading images\n", - "2025-02-25 14:22:47,109 INFO: Skip recomputing ROOT_HAHOG features for image 2025-01-03_DJI_0866_096c8304.JPG\n", - "2025-02-25 14:22:47,110 INFO: Reading data for image 2025-02-01_DJI_0757_583bab1a.JPG (queue-size=0)\n", - "2025-02-25 14:22:47,452 INFO: Finished reading images\n", - "2025-02-25 14:22:47,453 INFO: Skip recomputing ROOT_HAHOG features for image 2025-02-01_DJI_0757_583bab1a.JPG\n", - "2025-02-25 14:22:47,458 DEBUG: Entering env context: \n", - "2025-02-25 14:22:47,459 DEBUG: Starting outermost env\n", - "2025-02-25 14:22:47,460 DEBUG: No GDAL environment exists\n", - "2025-02-25 14:22:47,460 DEBUG: New GDAL environment created\n", - "2025-02-25 14:22:47,463 DEBUG: Installing FilePath filesystem handler plugin...\n", - "2025-02-25 14:22:47,466 DEBUG: GDAL data found in package: path='/usr/local/lib/python3.8/dist-packages/rasterio/gdal_data'.\n", - "2025-02-25 14:22:47,467 DEBUG: PROJ data found in package: path='/usr/local/lib/python3.8/dist-packages/rasterio/proj_data'.\n", - "2025-02-25 14:22:47,467 DEBUG: Started GDALEnv: self=.\n", - "2025-02-25 14:22:47,469 DEBUG: Entered env context: \n", - "2025-02-25 14:22:47,470 DEBUG: Sharing flag: 0\n", - "2025-02-25 14:22:47,471 DEBUG: Nodata success: 1, Nodata value: 0.000000\n", - "2025-02-25 14:22:47,472 DEBUG: Dataset is started.\n", - "2025-02-25 14:22:47,473 DEBUG: Exiting env context: \n", - "2025-02-25 14:22:47,474 DEBUG: Cleared existing options\n", - "2025-02-25 14:22:47,475 DEBUG: Stopped GDALEnv .\n", - "2025-02-25 14:22:47,476 DEBUG: Exiting outermost env\n", - "2025-02-25 14:22:47,477 DEBUG: Exited env context: \n", - "2025-02-25 14:22:47,478 DEBUG: Entering env context: \n", - "2025-02-25 14:22:47,479 DEBUG: Starting outermost env\n", - "2025-02-25 14:22:47,479 DEBUG: No GDAL environment exists\n", - "2025-02-25 14:22:47,481 DEBUG: New GDAL environment created\n", - "2025-02-25 14:22:47,482 DEBUG: GDAL data found in package: path='/usr/local/lib/python3.8/dist-packages/rasterio/gdal_data'.\n", - "2025-02-25 14:22:47,483 DEBUG: PROJ data found in package: path='/usr/local/lib/python3.8/dist-packages/rasterio/proj_data'.\n", - "2025-02-25 14:22:47,484 DEBUG: Started GDALEnv: self=.\n", - "2025-02-25 14:22:47,484 DEBUG: Entered env context: \n", - "2025-02-25 14:22:47,485 DEBUG: Output nodata value read from file: 0.0\n", - "2025-02-25 14:22:47,486 DEBUG: Output nodata values: [0.0]\n", - "2025-02-25 14:22:47,487 DEBUG: all_valid: False\n", - "2025-02-25 14:22:47,488 DEBUG: mask_flags: ([],)\n", - "2025-02-25 14:22:47,489 DEBUG: Jump straight to _read()\n", - "2025-02-25 14:22:47,490 DEBUG: Window: None\n", - "2025-02-25 14:22:47,491 DEBUG: IO window xoff=0.0 yoff=0.0 width=132.0 height=110.0\n", - "2025-02-25 14:22:47,499 DEBUG: Exiting env context: \n", - "2025-02-25 14:22:47,499 DEBUG: Cleared existing options\n", - "2025-02-25 14:22:47,500 DEBUG: Stopped GDALEnv .\n", - "2025-02-25 14:22:47,500 DEBUG: Exiting outermost env\n", - "2025-02-25 14:22:47,501 DEBUG: Exited env context: \n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "############### Cone matching!!!\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2025-02-25 14:22:53,022 DEBUG: GDAL data found in package: path='/usr/local/lib/python3.8/dist-packages/fiona/gdal_data'.\n", - "2025-02-25 14:22:53,023 DEBUG: PROJ data found in package: path='/usr/local/lib/python3.8/dist-packages/fiona/proj_data'.\n", - "2025-02-25 14:22:53,027 DEBUG: Deleted pre-existing layer at cones_projections\n", - "2025-02-25 14:22:53,034 DEBUG: GDAL data found in package: path='/usr/local/lib/python3.8/dist-packages/fiona/gdal_data'.\n", - "2025-02-25 14:22:53,034 DEBUG: PROJ data found in package: path='/usr/local/lib/python3.8/dist-packages/fiona/proj_data'.\n", - "2025-02-25 14:22:53,034 DEBUG: Created layer cones_projections\n", - "2025-02-25 14:22:53,035 DEBUG: Writing started\n", - "2025-02-25 14:22:53,035 DEBUG: GDAL data found in package: path='/usr/local/lib/python3.8/dist-packages/fiona/gdal_data'.\n", - "2025-02-25 14:22:53,036 DEBUG: PROJ data found in package: path='/usr/local/lib/python3.8/dist-packages/fiona/proj_data'.\n", - "2025-02-25 14:22:53,040 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", - "2025-02-25 14:22:53,508 DEBUG: Transaction supported: 1\n", - "2025-02-25 14:22:53,509 DEBUG: Starting transaction (initial)\n", - "2025-02-25 14:22:53,509 DEBUG: Setting feature property: key='name', value='2025-02-01_DJI_0084_f46c6662.JPG', i=0, setter=\n", - "2025-02-25 14:22:53,511 DEBUG: Committing transaction (final)\n", - "2025-02-25 14:22:53,521 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", - "2025-02-25 14:22:53,995 DEBUG: Transaction supported: 1\n", - "2025-02-25 14:22:53,995 DEBUG: Starting transaction (initial)\n", - "2025-02-25 14:22:53,996 DEBUG: Setting feature property: key='name', value='2025-01-03_DJI_0939_a753b448.JPG', i=0, setter=\n", - "2025-02-25 14:22:53,996 DEBUG: Committing transaction (final)\n", - "2025-02-25 14:22:54,005 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", - "2025-02-25 14:22:54,411 DEBUG: Transaction supported: 1\n", - "2025-02-25 14:22:54,412 DEBUG: Starting transaction (initial)\n", - "2025-02-25 14:22:54,412 DEBUG: Setting feature property: key='name', value='2025-01-03_DJI_0866_096c8304.JPG', i=0, setter=\n", - "2025-02-25 14:22:54,413 DEBUG: Committing transaction (final)\n", - "2025-02-25 14:22:54,424 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", - "2025-02-25 14:22:55,038 DEBUG: Transaction supported: 1\n", - "2025-02-25 14:22:55,039 DEBUG: Starting transaction (initial)\n", - "2025-02-25 14:22:55,039 DEBUG: Setting feature property: key='name', value='2025-02-01_DJI_0425_e1182890.JPG', i=0, setter=\n", - "2025-02-25 14:22:55,040 DEBUG: Committing transaction (final)\n", - "2025-02-25 14:22:55,048 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", - "2025-02-25 14:22:55,245 DEBUG: Transaction supported: 1\n", - "2025-02-25 14:22:55,246 DEBUG: Starting transaction (initial)\n", - "2025-02-25 14:22:55,247 DEBUG: Setting feature property: key='name', value='2025-02-01_DJI_0751_f7538bac.JPG', i=0, setter=\n", - "2025-02-25 14:22:55,247 DEBUG: Committing transaction (final)\n", - "2025-02-25 14:22:55,257 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", - "2025-02-25 14:22:55,598 DEBUG: Transaction supported: 1\n", - "2025-02-25 14:22:55,599 DEBUG: Starting transaction (initial)\n", - "2025-02-25 14:22:55,599 DEBUG: Setting feature property: key='name', value='2025-01-03_DJI_0557_295421e4.JPG', i=0, setter=\n", - "2025-02-25 14:22:55,600 DEBUG: Committing transaction (final)\n", - "2025-02-25 14:22:55,610 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", - "2025-02-25 14:22:56,043 DEBUG: Transaction supported: 1\n", - "2025-02-25 14:22:56,043 DEBUG: Starting transaction (initial)\n", - "2025-02-25 14:22:56,044 DEBUG: Setting feature property: key='name', value='2025-01-06_DJI_0119_852bfccf.JPG', i=0, setter=\n", - "2025-02-25 14:22:56,044 DEBUG: Committing transaction (final)\n", - "2025-02-25 14:22:56,055 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", - "2025-02-25 14:22:56,942 DEBUG: Transaction supported: 1\n", - "2025-02-25 14:22:56,942 DEBUG: Starting transaction (initial)\n", - "2025-02-25 14:22:56,943 DEBUG: Setting feature property: key='name', value='2025-01-12_DJI_0627_394c38a4.JPG', i=0, setter=\n", - "2025-02-25 14:22:56,944 DEBUG: Committing transaction (final)\n", - "2025-02-25 14:22:56,953 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", - "2025-02-25 14:22:57,314 DEBUG: Transaction supported: 1\n", - "2025-02-25 14:22:57,315 DEBUG: Starting transaction (initial)\n", - "2025-02-25 14:22:57,315 DEBUG: Setting feature property: key='name', value='2025-02-01_DJI_0843_0796cf46.JPG', i=0, setter=\n", - "2025-02-25 14:22:57,316 DEBUG: Committing transaction (final)\n", - "2025-02-25 14:22:57,327 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", - "2025-02-25 14:22:57,996 DEBUG: Transaction supported: 1\n", - "2025-02-25 14:22:57,997 DEBUG: Starting transaction (initial)\n", - "2025-02-25 14:22:57,997 DEBUG: Setting feature property: key='name', value='2025-01-03_DJI_0663_4537530d.JPG', i=0, setter=\n", - "2025-02-25 14:22:57,998 DEBUG: Committing transaction (final)\n", - "2025-02-25 14:22:58,008 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", - "2025-02-25 14:22:58,253 DEBUG: Transaction supported: 1\n", - "2025-02-25 14:22:58,253 DEBUG: Starting transaction (initial)\n", - "2025-02-25 14:22:58,254 DEBUG: Setting feature property: key='name', value='2025-02-01_DJI_0757_583bab1a.JPG', i=0, setter=\n", - "2025-02-25 14:22:58,255 DEBUG: Committing transaction (final)\n", - "2025-02-25 14:22:58,264 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", - "2025-02-25 14:22:58,577 DEBUG: Transaction supported: 1\n", - "2025-02-25 14:22:58,578 DEBUG: Starting transaction (initial)\n", - "2025-02-25 14:22:58,578 DEBUG: Setting feature property: key='name', value='2025-02-01_DJI_0699_823982b0.JPG', i=0, setter=\n", - "2025-02-25 14:22:58,579 DEBUG: Committing transaction (final)\n", - "2025-02-25 14:22:58,587 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", - "2025-02-25 14:22:58,777 DEBUG: Transaction supported: 1\n", - "2025-02-25 14:22:58,778 DEBUG: Starting transaction (initial)\n", - "2025-02-25 14:22:58,778 DEBUG: Setting feature property: key='name', value='2025-01-03_DJI_0534_57db98ae.JPG', i=0, setter=\n", - "2025-02-25 14:22:58,779 DEBUG: Committing transaction (final)\n", - "2025-02-25 14:22:58,789 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", - "2025-02-25 14:22:59,300 DEBUG: Transaction supported: 1\n", - "2025-02-25 14:22:59,301 DEBUG: Starting transaction (initial)\n", - "2025-02-25 14:22:59,301 DEBUG: Setting feature property: key='name', value='2025-01-02_DJI_0379_573e3a79.JPG', i=0, setter=\n", - "2025-02-25 14:22:59,301 DEBUG: Committing transaction (final)\n", - "2025-02-25 14:22:59,310 DEBUG: 4 items cleared from cache: ['triangles_cross', 'triangles_center', 'area_faces', 'centroid']\n", - "2025-02-25 14:22:59,625 DEBUG: Transaction supported: 1\n", - "2025-02-25 14:22:59,626 DEBUG: Starting transaction (initial)\n", - "2025-02-25 14:22:59,626 DEBUG: Setting feature property: key='name', value='2025-01-12_DJI_0912_d6344671.JPG', i=0, setter=\n", - "2025-02-25 14:22:59,627 DEBUG: Committing transaction (final)\n", - "100%|███████████████████████████████████████████| 15/15 [00:06<00:00, 2.27it/s]\n", - "2025-02-25 14:22:59,661 DEBUG: Flushed data source cache\n", - "2025-02-25 14:22:59,662 DEBUG: Flushed buffer\n", - "2025-02-25 14:22:59,663 DEBUG: Stopped session\n", - "2025-02-25 14:22:59,664 INFO: Matching 85 image pairs\n", - "2025-02-25 14:22:59,684 INFO: Computing pair matching with 1 processes\n", - "2025-02-25 14:22:59,694 DEBUG: No segmentation for 2025-02-01_DJI_0084_f46c6662.JPG, no features masked.\n", - "2025-02-25 14:22:59,702 DEBUG: No segmentation for 2025-02-01_DJI_0425_e1182890.JPG, no features masked.\n", - "2025-02-25 14:22:59,945 DEBUG: Matching 2025-02-01_DJI_0084_f46c6662.JPG and 2025-02-01_DJI_0425_e1182890.JPG. Matcher: FLANN (symmetric) T-desc: 0.258 T-robust: 0.000 T-total: 0.258 Matches: 26 Robust: 22 Success: True\n", - "2025-02-25 14:22:59,951 DEBUG: No segmentation for 2025-01-03_DJI_0557_295421e4.JPG, no features masked.\n", - "2025-02-25 14:22:59,960 DEBUG: No segmentation for 2025-02-01_DJI_0699_823982b0.JPG, no features masked.\n", - "2025-02-25 14:23:00,196 DEBUG: Matching 2025-01-03_DJI_0557_295421e4.JPG and 2025-02-01_DJI_0699_823982b0.JPG. Matcher: FLANN (symmetric) T-desc: 0.250 Matches: FAILED\n", - "2025-02-25 14:23:00,202 DEBUG: No segmentation for 2025-01-03_DJI_0939_a753b448.JPG, no features masked.\n", - "2025-02-25 14:23:00,210 DEBUG: No segmentation for 2025-02-01_DJI_0843_0796cf46.JPG, no features masked.\n", - "2025-02-25 14:23:00,445 DEBUG: Matching 2025-01-03_DJI_0939_a753b448.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.249 Matches: FAILED\n", - "2025-02-25 14:23:00,452 DEBUG: No segmentation for 2025-01-03_DJI_0663_4537530d.JPG, no features masked.\n", - "2025-02-25 14:23:00,460 DEBUG: No segmentation for 2025-02-01_DJI_0751_f7538bac.JPG, no features masked.\n", - "2025-02-25 14:23:00,699 DEBUG: Matching 2025-01-03_DJI_0663_4537530d.JPG and 2025-02-01_DJI_0751_f7538bac.JPG. Matcher: FLANN (symmetric) T-desc: 0.253 Matches: FAILED\n", - "2025-02-25 14:23:00,706 DEBUG: No segmentation for 2025-01-12_DJI_0912_d6344671.JPG, no features masked.\n", - "2025-02-25 14:23:00,863 DEBUG: Matching 2025-01-12_DJI_0912_d6344671.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.164 Matches: FAILED\n", - "2025-02-25 14:23:00,870 DEBUG: No segmentation for 2025-01-03_DJI_0866_096c8304.JPG, no features masked.\n", - "2025-02-25 14:23:01,054 DEBUG: Matching 2025-01-03_DJI_0866_096c8304.JPG and 2025-02-01_DJI_0751_f7538bac.JPG. Matcher: FLANN (symmetric) T-desc: 0.190 Matches: FAILED\n", - "2025-02-25 14:23:01,061 DEBUG: No segmentation for 2025-01-02_DJI_0379_573e3a79.JPG, no features masked.\n", - "2025-02-25 14:23:01,222 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-02-01_DJI_0425_e1182890.JPG. Matcher: FLANN (symmetric) T-desc: 0.167 Matches: FAILED\n", - "2025-02-25 14:23:01,303 DEBUG: Matching 2025-01-03_DJI_0663_4537530d.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.080 Matches: FAILED\n", - "2025-02-25 14:23:01,389 DEBUG: Matching 2025-01-03_DJI_0557_295421e4.JPG and 2025-01-12_DJI_0912_d6344671.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", - "2025-02-25 14:23:01,396 DEBUG: No segmentation for 2025-01-06_DJI_0119_852bfccf.JPG, no features masked.\n", - "2025-02-25 14:23:01,403 DEBUG: No segmentation for 2025-01-12_DJI_0627_394c38a4.JPG, no features masked.\n", - "2025-02-25 14:23:01,625 DEBUG: Matching 2025-01-06_DJI_0119_852bfccf.JPG and 2025-01-12_DJI_0627_394c38a4.JPG. Matcher: FLANN (symmetric) T-desc: 0.235 Matches: FAILED\n", - "2025-02-25 14:23:01,631 DEBUG: No segmentation for 2025-02-01_DJI_0757_583bab1a.JPG, no features masked.\n", - "2025-02-25 14:23:01,860 DEBUG: Matching 2025-02-01_DJI_0751_f7538bac.JPG and 2025-02-01_DJI_0757_583bab1a.JPG. Matcher: FLANN (symmetric) T-desc: 0.232 T-robust: 0.002 T-total: 0.235 Matches: 2313 Robust: 2308 Success: True\n", - "2025-02-25 14:23:01,866 DEBUG: No segmentation for 2025-01-03_DJI_0534_57db98ae.JPG, no features masked.\n", - "2025-02-25 14:23:02,021 DEBUG: Matching 2025-01-03_DJI_0534_57db98ae.JPG and 2025-01-12_DJI_0627_394c38a4.JPG. Matcher: FLANN (symmetric) T-desc: 0.160 Matches: FAILED\n", - "2025-02-25 14:23:02,105 DEBUG: Matching 2025-02-01_DJI_0084_f46c6662.JPG and 2025-02-01_DJI_0751_f7538bac.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", - "2025-02-25 14:23:02,192 DEBUG: Matching 2025-01-03_DJI_0557_295421e4.JPG and 2025-02-01_DJI_0757_583bab1a.JPG. Matcher: FLANN (symmetric) T-desc: 0.087 Matches: FAILED\n", - "2025-02-25 14:23:02,277 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-01-03_DJI_0534_57db98ae.JPG. Matcher: FLANN (symmetric) T-desc: 0.084 Matches: FAILED\n", - "2025-02-25 14:23:02,356 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.079 Matches: FAILED\n", - "2025-02-25 14:23:02,443 DEBUG: Matching 2025-01-12_DJI_0627_394c38a4.JPG and 2025-02-01_DJI_0425_e1182890.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", - "2025-02-25 14:23:02,528 DEBUG: Matching 2025-01-12_DJI_0627_394c38a4.JPG and 2025-02-01_DJI_0084_f46c6662.JPG. Matcher: FLANN (symmetric) T-desc: 0.084 Matches: FAILED\n", - "2025-02-25 14:23:02,612 DEBUG: Matching 2025-01-03_DJI_0939_a753b448.JPG and 2025-02-01_DJI_0699_823982b0.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", - "2025-02-25 14:23:02,694 DEBUG: Matching 2025-02-01_DJI_0699_823982b0.JPG and 2025-02-01_DJI_0751_f7538bac.JPG. Matcher: FLANN (symmetric) T-desc: 0.082 Matches: FAILED\n", - "2025-02-25 14:23:02,780 DEBUG: Matching 2025-01-03_DJI_0557_295421e4.JPG and 2025-01-03_DJI_0939_a753b448.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", - "2025-02-25 14:23:02,860 DEBUG: Matching 2025-01-03_DJI_0557_295421e4.JPG and 2025-01-06_DJI_0119_852bfccf.JPG. Matcher: FLANN (symmetric) T-desc: 0.079 Matches: FAILED\n", - "2025-02-25 14:23:02,941 DEBUG: Matching 2025-01-06_DJI_0119_852bfccf.JPG and 2025-02-01_DJI_0084_f46c6662.JPG. Matcher: FLANN (symmetric) T-desc: 0.080 Matches: FAILED\n", - "2025-02-25 14:23:03,027 DEBUG: Matching 2025-01-03_DJI_0557_295421e4.JPG and 2025-01-03_DJI_0663_4537530d.JPG. Matcher: FLANN (symmetric) T-desc: 0.085 T-robust: 0.000 T-total: 0.085 Matches: 188 Robust: 178 Success: True\n", - "2025-02-25 14:23:03,114 DEBUG: Matching 2025-01-03_DJI_0939_a753b448.JPG and 2025-02-01_DJI_0757_583bab1a.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", - "2025-02-25 14:23:03,199 DEBUG: Matching 2025-01-03_DJI_0663_4537530d.JPG and 2025-02-01_DJI_0757_583bab1a.JPG. Matcher: FLANN (symmetric) T-desc: 0.085 Matches: FAILED\n", - "2025-02-25 14:23:03,283 DEBUG: Matching 2025-01-12_DJI_0627_394c38a4.JPG and 2025-02-01_DJI_0751_f7538bac.JPG. Matcher: FLANN (symmetric) T-desc: 0.084 Matches: FAILED\n", - "2025-02-25 14:23:03,365 DEBUG: Matching 2025-01-06_DJI_0119_852bfccf.JPG and 2025-02-01_DJI_0751_f7538bac.JPG. Matcher: FLANN (symmetric) T-desc: 0.081 Matches: FAILED\n", - "2025-02-25 14:23:03,452 DEBUG: Matching 2025-01-03_DJI_0534_57db98ae.JPG and 2025-02-01_DJI_0751_f7538bac.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", - "2025-02-25 14:23:03,535 DEBUG: Matching 2025-01-03_DJI_0939_a753b448.JPG and 2025-01-06_DJI_0119_852bfccf.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", - "2025-02-25 14:23:03,618 DEBUG: Matching 2025-01-03_DJI_0534_57db98ae.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.082 Matches: FAILED\n", - "2025-02-25 14:23:03,699 DEBUG: Matching 2025-01-03_DJI_0866_096c8304.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.081 Matches: FAILED\n", - "2025-02-25 14:23:03,781 DEBUG: Matching 2025-01-03_DJI_0663_4537530d.JPG and 2025-01-03_DJI_0866_096c8304.JPG. Matcher: FLANN (symmetric) T-desc: 0.081 Matches: FAILED\n", - "2025-02-25 14:23:03,862 DEBUG: Matching 2025-01-03_DJI_0663_4537530d.JPG and 2025-01-06_DJI_0119_852bfccf.JPG. Matcher: FLANN (symmetric) T-desc: 0.081 Matches: FAILED\n", - "2025-02-25 14:23:03,946 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-02-01_DJI_0757_583bab1a.JPG. Matcher: FLANN (symmetric) T-desc: 0.084 Matches: FAILED\n", - "2025-02-25 14:23:04,040 DEBUG: Matching 2025-02-01_DJI_0084_f46c6662.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.093 Matches: FAILED\n", - "2025-02-25 14:23:04,125 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-01-03_DJI_0866_096c8304.JPG. Matcher: FLANN (symmetric) T-desc: 0.084 Matches: FAILED\n", - "2025-02-25 14:23:04,218 DEBUG: Matching 2025-01-03_DJI_0557_295421e4.JPG and 2025-01-12_DJI_0627_394c38a4.JPG. Matcher: FLANN (symmetric) T-desc: 0.093 Matches: FAILED\n", - "2025-02-25 14:23:04,304 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-01-06_DJI_0119_852bfccf.JPG. Matcher: FLANN (symmetric) T-desc: 0.085 Matches: FAILED\n", - "2025-02-25 14:23:04,397 DEBUG: Matching 2025-01-03_DJI_0663_4537530d.JPG and 2025-02-01_DJI_0699_823982b0.JPG. Matcher: FLANN (symmetric) T-desc: 0.093 Matches: FAILED\n", - "2025-02-25 14:23:04,480 DEBUG: Matching 2025-02-01_DJI_0699_823982b0.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.082 Matches: FAILED\n", - "2025-02-25 14:23:04,566 DEBUG: Matching 2025-01-03_DJI_0866_096c8304.JPG and 2025-02-01_DJI_0699_823982b0.JPG. Matcher: FLANN (symmetric) T-desc: 0.085 Matches: FAILED\n", - "2025-02-25 14:23:04,649 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-01-03_DJI_0557_295421e4.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", - "2025-02-25 14:23:04,734 DEBUG: Matching 2025-02-01_DJI_0757_583bab1a.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.084 Matches: FAILED\n", - "2025-02-25 14:23:04,831 DEBUG: Matching 2025-02-01_DJI_0084_f46c6662.JPG and 2025-02-01_DJI_0699_823982b0.JPG. Matcher: FLANN (symmetric) T-desc: 0.094 T-robust: 0.002 T-total: 0.097 Matches: 2310 Robust: 2304 Success: True\n", - "2025-02-25 14:23:04,918 DEBUG: Matching 2025-01-03_DJI_0866_096c8304.JPG and 2025-02-01_DJI_0757_583bab1a.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", - "2025-02-25 14:23:05,000 DEBUG: Matching 2025-01-12_DJI_0627_394c38a4.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.081 Matches: FAILED\n", - "2025-02-25 14:23:05,085 DEBUG: Matching 2025-02-01_DJI_0425_e1182890.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.084 Matches: FAILED\n", - "2025-02-25 14:23:05,166 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-02-01_DJI_0699_823982b0.JPG. Matcher: FLANN (symmetric) T-desc: 0.081 Matches: FAILED\n", - "2025-02-25 14:23:05,254 DEBUG: Matching 2025-01-03_DJI_0939_a753b448.JPG and 2025-01-12_DJI_0627_394c38a4.JPG. Matcher: FLANN (symmetric) T-desc: 0.087 Matches: FAILED\n", - "2025-02-25 14:23:05,346 DEBUG: Matching 2025-01-03_DJI_0557_295421e4.JPG and 2025-02-01_DJI_0084_f46c6662.JPG. Matcher: FLANN (symmetric) T-desc: 0.092 Matches: FAILED\n", - "2025-02-25 14:23:05,431 DEBUG: Matching 2025-01-03_DJI_0663_4537530d.JPG and 2025-01-12_DJI_0627_394c38a4.JPG. Matcher: FLANN (symmetric) T-desc: 0.085 Matches: FAILED\n", - "2025-02-25 14:23:05,519 DEBUG: Matching 2025-02-01_DJI_0084_f46c6662.JPG and 2025-02-01_DJI_0757_583bab1a.JPG. Matcher: FLANN (symmetric) T-desc: 0.087 Matches: FAILED\n", - "2025-02-25 14:23:05,605 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-01-12_DJI_0912_d6344671.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", - "2025-02-25 14:23:05,692 DEBUG: Matching 2025-01-03_DJI_0663_4537530d.JPG and 2025-01-03_DJI_0939_a753b448.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", - "2025-02-25 14:23:05,768 DEBUG: Matching 2025-01-06_DJI_0119_852bfccf.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.076 Matches: FAILED\n", - "2025-02-25 14:23:05,862 DEBUG: Matching 2025-01-03_DJI_0866_096c8304.JPG and 2025-01-03_DJI_0939_a753b448.JPG. Matcher: FLANN (symmetric) T-desc: 0.093 T-robust: 0.000 T-total: 0.094 Matches: 232 Robust: 221 Success: True\n", - "2025-02-25 14:23:05,949 DEBUG: Matching 2025-01-03_DJI_0534_57db98ae.JPG and 2025-01-03_DJI_0866_096c8304.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", - "2025-02-25 14:23:06,033 DEBUG: Matching 2025-01-03_DJI_0866_096c8304.JPG and 2025-01-06_DJI_0119_852bfccf.JPG. Matcher: FLANN (symmetric) T-desc: 0.084 Matches: FAILED\n", - "2025-02-25 14:23:06,115 DEBUG: Matching 2025-02-01_DJI_0699_823982b0.JPG and 2025-02-01_DJI_0757_583bab1a.JPG. Matcher: FLANN (symmetric) T-desc: 0.081 Matches: FAILED\n", - "2025-02-25 14:23:06,200 DEBUG: Matching 2025-01-12_DJI_0627_394c38a4.JPG and 2025-02-01_DJI_0699_823982b0.JPG. Matcher: FLANN (symmetric) T-desc: 0.084 Matches: FAILED\n", - "2025-02-25 14:23:06,283 DEBUG: Matching 2025-01-03_DJI_0534_57db98ae.JPG and 2025-01-03_DJI_0557_295421e4.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", - "2025-02-25 14:23:06,365 DEBUG: Matching 2025-01-03_DJI_0557_295421e4.JPG and 2025-02-01_DJI_0751_f7538bac.JPG. Matcher: FLANN (symmetric) T-desc: 0.081 Matches: FAILED\n", - "2025-02-25 14:23:06,446 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-01-12_DJI_0627_394c38a4.JPG. Matcher: FLANN (symmetric) T-desc: 0.081 Matches: FAILED\n", - "2025-02-25 14:23:06,530 DEBUG: Matching 2025-01-12_DJI_0627_394c38a4.JPG and 2025-01-12_DJI_0912_d6344671.JPG. Matcher: FLANN (symmetric) T-desc: 0.082 T-robust: 0.000 T-total: 0.083 Matches: 337 Robust: 331 Success: True\n", - "2025-02-25 14:23:06,614 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-01-03_DJI_0939_a753b448.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", - "2025-02-25 14:23:06,700 DEBUG: Matching 2025-01-03_DJI_0939_a753b448.JPG and 2025-02-01_DJI_0084_f46c6662.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", - "2025-02-25 14:23:06,783 DEBUG: Matching 2025-01-12_DJI_0912_d6344671.JPG and 2025-02-01_DJI_0425_e1182890.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", - "2025-02-25 14:23:06,868 DEBUG: Matching 2025-01-12_DJI_0627_394c38a4.JPG and 2025-02-01_DJI_0757_583bab1a.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", - "2025-02-25 14:23:06,949 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-01-03_DJI_0663_4537530d.JPG. Matcher: FLANN (symmetric) T-desc: 0.080 Matches: FAILED\n", - "2025-02-25 14:23:07,028 DEBUG: Matching 2025-01-06_DJI_0119_852bfccf.JPG and 2025-02-01_DJI_0757_583bab1a.JPG. Matcher: FLANN (symmetric) T-desc: 0.079 Matches: FAILED\n", - "2025-02-25 14:23:07,113 DEBUG: Matching 2025-01-03_DJI_0534_57db98ae.JPG and 2025-02-01_DJI_0757_583bab1a.JPG. Matcher: FLANN (symmetric) T-desc: 0.084 Matches: FAILED\n", - "2025-02-25 14:23:07,199 DEBUG: Matching 2025-01-03_DJI_0939_a753b448.JPG and 2025-02-01_DJI_0751_f7538bac.JPG. Matcher: FLANN (symmetric) T-desc: 0.085 Matches: FAILED\n", - "2025-02-25 14:23:07,281 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-02-01_DJI_0084_f46c6662.JPG. Matcher: FLANN (symmetric) T-desc: 0.081 Matches: FAILED\n", - "2025-02-25 14:23:07,368 DEBUG: Matching 2025-01-03_DJI_0866_096c8304.JPG and 2025-01-12_DJI_0627_394c38a4.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", - "2025-02-25 14:23:07,451 DEBUG: Matching 2025-01-03_DJI_0534_57db98ae.JPG and 2025-01-03_DJI_0939_a753b448.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", - "2025-02-25 14:23:07,531 DEBUG: Matching 2025-01-03_DJI_0534_57db98ae.JPG and 2025-01-06_DJI_0119_852bfccf.JPG. Matcher: FLANN (symmetric) T-desc: 0.079 Matches: FAILED\n", - "2025-02-25 14:23:07,614 DEBUG: Matching 2025-01-02_DJI_0379_573e3a79.JPG and 2025-02-01_DJI_0751_f7538bac.JPG. Matcher: FLANN (symmetric) T-desc: 0.082 Matches: FAILED\n", - "2025-02-25 14:23:07,697 DEBUG: Matching 2025-01-03_DJI_0534_57db98ae.JPG and 2025-01-03_DJI_0663_4537530d.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", - "2025-02-25 14:23:07,781 DEBUG: Matching 2025-02-01_DJI_0751_f7538bac.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", - "2025-02-25 14:23:07,865 DEBUG: Matching 2025-01-03_DJI_0557_295421e4.JPG and 2025-02-01_DJI_0843_0796cf46.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", - "2025-02-25 14:23:07,947 DEBUG: Matching 2025-01-03_DJI_0557_295421e4.JPG and 2025-01-03_DJI_0866_096c8304.JPG. Matcher: FLANN (symmetric) T-desc: 0.081 Matches: FAILED\n", - "2025-02-25 14:23:08,028 DEBUG: Matching 2025-01-06_DJI_0119_852bfccf.JPG and 2025-02-01_DJI_0699_823982b0.JPG. Matcher: FLANN (symmetric) T-desc: 0.080 Matches: FAILED\n", - "2025-02-25 14:23:08,111 DEBUG: Matching 2025-01-03_DJI_0663_4537530d.JPG and 2025-02-01_DJI_0084_f46c6662.JPG. Matcher: FLANN (symmetric) T-desc: 0.083 Matches: FAILED\n", - "2025-02-25 14:23:08,198 DEBUG: Matching 2025-01-03_DJI_0866_096c8304.JPG and 2025-02-01_DJI_0084_f46c6662.JPG. Matcher: FLANN (symmetric) T-desc: 0.086 Matches: FAILED\n", - "2025-02-25 14:23:08,199 INFO: Matched 85 pairs (perspective-perspective: 85) in 8.535429486000794 seconds (0.10041682385881893 seconds/pair).\n", - "2025-02-25 14:23:08,263 INFO: reading features\n", - "2025-02-25 14:23:08,341 DEBUG: Merging features onto tracks\n", - "2025-02-25 14:23:08,357 DEBUG: Good tracks: 5351\n", - "2025-02-25 14:23:08,425 INFO: Starting incremental reconstruction\n", - "2025-02-25 14:23:08,464 INFO: Starting reconstruction with 2025-02-01_DJI_0084_f46c6662.JPG and 2025-02-01_DJI_0699_823982b0.JPG\n", - "2025-02-25 14:23:08,474 INFO: Two-view 5-points reconstruction inliers (transposed=False): 2304 / 2304\n", - "2025-02-25 14:23:08,493 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:08,494 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:08,494 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:08,496 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:08,496 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:08,497 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:08,601 INFO: Triangulated: 2033\n", - "2025-02-25 14:23:08,690 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:08,691 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:08,691 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:08,692 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:08,692 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:08,693 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:09,099 INFO: Ran GLOBAL bundle in 0.40 secs.with 2/2033/4066 (2.00) shots/points/proj. (avg. length)\n", - "2025-02-25 14:23:09,099 DEBUG: Ceres Solver Report: Iterations: 82, Initial cost: 6.558796e+01, Final cost: 2.274284e+01, Termination: CONVERGENCE\n", - "2025-02-25 14:23:09,106 INFO: Removed outliers: 0\n", - "2025-02-25 14:23:09,121 INFO: -------------------------------------------------------\n", - "2025-02-25 14:23:09,124 INFO: 2025-02-01_DJI_0425_e1182890.JPG resection inliers: 7 / 7\n", - "2025-02-25 14:23:09,130 INFO: Some images can not be added\n", - "2025-02-25 14:23:09,130 INFO: -------------------------------------------------------\n", - "2025-02-25 14:23:09,131 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:09,131 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:09,132 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:09,133 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:09,133 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:09,133 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:09,550 INFO: Ran GLOBAL bundle in 0.41 secs.with 2/2033/4066 (2.00) shots/points/proj. (avg. length)\n", - "2025-02-25 14:23:09,551 DEBUG: Ceres Solver Report: Iterations: 85, Initial cost: 3.209815e+01, Final cost: 2.274285e+01, Termination: CONVERGENCE\n", - "2025-02-25 14:23:09,557 INFO: Removed outliers: 0\n", - "2025-02-25 14:23:09,575 INFO: Starting reconstruction with 2025-02-01_DJI_0751_f7538bac.JPG and 2025-02-01_DJI_0757_583bab1a.JPG\n", - "2025-02-25 14:23:09,606 INFO: Two-view 5-points reconstruction inliers (transposed=False): 2308 / 2308\n", - "2025-02-25 14:23:09,626 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:09,627 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:09,628 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:09,629 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:09,629 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:09,629 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:09,706 INFO: Triangulated: 2308\n", - "2025-02-25 14:23:09,794 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:09,795 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:09,796 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:09,797 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:09,797 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:09,797 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:09,934 INFO: Ran GLOBAL bundle in 0.13 secs.with 2/2308/4616 (2.00) shots/points/proj. (avg. length)\n", - "2025-02-25 14:23:09,934 DEBUG: Ceres Solver Report: Iterations: 20, Initial cost: 4.381727e+01, Final cost: 2.651973e+01, Termination: CONVERGENCE\n", - "2025-02-25 14:23:09,941 INFO: Removed outliers: 0\n", - "2025-02-25 14:23:09,961 INFO: -------------------------------------------------------\n", - "2025-02-25 14:23:09,963 INFO: Some images can not be added\n", - "2025-02-25 14:23:09,963 INFO: -------------------------------------------------------\n", - "2025-02-25 14:23:09,964 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:09,964 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:09,965 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:09,966 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:09,966 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:09,967 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:10,110 INFO: Ran GLOBAL bundle in 0.13 secs.with 2/2308/4616 (2.00) shots/points/proj. (avg. length)\n", - "2025-02-25 14:23:10,111 DEBUG: Ceres Solver Report: Iterations: 20, Initial cost: 2.654403e+01, Final cost: 2.651950e+01, Termination: CONVERGENCE\n", - "2025-02-25 14:23:10,118 INFO: Removed outliers: 0\n", - "2025-02-25 14:23:10,136 INFO: Starting reconstruction with 2025-01-12_DJI_0627_394c38a4.JPG and 2025-01-12_DJI_0912_d6344671.JPG\n", - "2025-02-25 14:23:10,139 INFO: Two-view 5-points reconstruction inliers (transposed=False): 330 / 331\n", - "2025-02-25 14:23:10,144 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:10,145 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:10,145 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:10,146 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:10,146 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:10,147 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:10,159 INFO: Triangulated: 330\n", - "2025-02-25 14:23:10,173 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:10,173 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:10,174 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:10,175 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:10,175 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:10,176 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:10,249 INFO: Ran GLOBAL bundle in 0.07 secs.with 2/330/660 (2.00) shots/points/proj. (avg. length)\n", - "2025-02-25 14:23:10,250 DEBUG: Ceres Solver Report: Iterations: 77, Initial cost: 1.919467e+02, Final cost: 1.762566e+01, Termination: CONVERGENCE\n", - "2025-02-25 14:23:10,252 INFO: Removed outliers: 0\n", - "2025-02-25 14:23:10,255 INFO: -------------------------------------------------------\n", - "2025-02-25 14:23:10,256 INFO: Some images can not be added\n", - "2025-02-25 14:23:10,257 INFO: -------------------------------------------------------\n", - "2025-02-25 14:23:10,257 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:10,258 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:10,259 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:10,260 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:10,260 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:10,261 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:10,334 INFO: Ran GLOBAL bundle in 0.07 secs.with 2/330/660 (2.00) shots/points/proj. (avg. length)\n", - "2025-02-25 14:23:10,335 DEBUG: Ceres Solver Report: Iterations: 76, Initial cost: 1.726124e+02, Final cost: 1.762565e+01, Termination: CONVERGENCE\n", - "2025-02-25 14:23:10,336 INFO: Removed outliers: 0\n", - "2025-02-25 14:23:10,339 INFO: Starting reconstruction with 2025-01-03_DJI_0866_096c8304.JPG and 2025-01-03_DJI_0939_a753b448.JPG\n", - "2025-02-25 14:23:10,346 INFO: Two-view 5-points reconstruction inliers (transposed=False): 220 / 221\n", - "2025-02-25 14:23:10,350 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:10,351 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:10,351 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:10,352 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:10,353 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:10,353 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:10,361 INFO: Triangulated: 220\n", - "2025-02-25 14:23:10,371 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:10,372 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:10,372 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:10,373 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:10,374 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:10,374 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:10,385 INFO: Ran GLOBAL bundle in 0.01 secs.with 2/220/440 (2.00) shots/points/proj. (avg. length)\n", - "2025-02-25 14:23:10,385 DEBUG: Ceres Solver Report: Iterations: 13, Initial cost: 1.675873e+01, Final cost: 1.512158e+01, Termination: CONVERGENCE\n", - "2025-02-25 14:23:10,386 INFO: Removed outliers: 0\n", - "2025-02-25 14:23:10,388 INFO: -------------------------------------------------------\n", - "2025-02-25 14:23:10,389 INFO: Some images can not be added\n", - "2025-02-25 14:23:10,389 INFO: -------------------------------------------------------\n", - "2025-02-25 14:23:10,390 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:10,390 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:10,390 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:10,392 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:10,392 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:10,392 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:10,404 INFO: Ran GLOBAL bundle in 0.01 secs.with 2/220/440 (2.00) shots/points/proj. (avg. length)\n", - "2025-02-25 14:23:10,405 DEBUG: Ceres Solver Report: Iterations: 13, Initial cost: 1.512966e+01, Final cost: 1.512158e+01, Termination: CONVERGENCE\n", - "2025-02-25 14:23:10,406 INFO: Removed outliers: 0\n", - "2025-02-25 14:23:10,409 INFO: Starting reconstruction with 2025-01-03_DJI_0557_295421e4.JPG and 2025-01-03_DJI_0663_4537530d.JPG\n", - "2025-02-25 14:23:10,443 INFO: Two-view 5-points reconstruction inliers (transposed=False): 177 / 178\n", - "2025-02-25 14:23:10,447 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:10,448 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:10,448 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:10,449 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:10,450 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:10,450 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:10,457 INFO: Triangulated: 178\n", - "2025-02-25 14:23:10,466 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:10,467 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:10,467 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:10,468 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:10,469 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:10,469 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:10,522 INFO: Ran GLOBAL bundle in 0.05 secs.with 2/178/356 (2.00) shots/points/proj. (avg. length)\n", - "2025-02-25 14:23:10,523 DEBUG: Ceres Solver Report: Iterations: 101, Initial cost: 3.032654e+02, Final cost: 2.319729e+02, Termination: NO_CONVERGENCE\n", - "2025-02-25 14:23:10,524 INFO: Removed outliers: 0\n", - "2025-02-25 14:23:10,526 INFO: -------------------------------------------------------\n", - "2025-02-25 14:23:10,526 INFO: Some images can not be added\n", - "2025-02-25 14:23:10,526 INFO: -------------------------------------------------------\n", - "2025-02-25 14:23:10,527 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:10,527 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:10,527 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:10,529 INFO: Collecting alignment constraints - bundle_use_gps:True bundle_use_gcp: True\n", - "2025-02-25 14:23:10,529 INFO: GCP constraints X (0) - Xp (0)\n", - "2025-02-25 14:23:10,529 INFO: GPS constraints X (2) - Xp (2)\n", - "2025-02-25 14:23:10,585 INFO: Ran GLOBAL bundle in 0.05 secs.with 2/178/356 (2.00) shots/points/proj. (avg. length)\n", - "2025-02-25 14:23:10,585 DEBUG: Ceres Solver Report: Iterations: 101, Initial cost: 2.931969e+02, Final cost: 2.681078e+02, Termination: NO_CONVERGENCE\n", - "2025-02-25 14:23:10,586 INFO: Removed outliers: 0\n", - "2025-02-25 14:23:10,588 INFO: Reconstruction 0: 2 images, 2033 points\n", - "2025-02-25 14:23:10,588 INFO: Reconstruction 1: 2 images, 2308 points\n", - "2025-02-25 14:23:10,589 INFO: Reconstruction 2: 2 images, 330 points\n", - "2025-02-25 14:23:10,589 INFO: Reconstruction 3: 2 images, 220 points\n", - "2025-02-25 14:23:10,589 INFO: Reconstruction 4: 2 images, 178 points\n", - "2025-02-25 14:23:10,590 INFO: 5 partial reconstructions in total.\n", - "2025-02-25 14:23:11,170 DEBUG: Undistorting the reconstruction\n", - "2025-02-25 14:23:11,234 INFO: Undistorting in parallel with 1 processes (240.60302734375 MB per image)\n", - "2025-02-25 14:23:11,236 DEBUG: Undistorting image 2025-02-01_DJI_0084_f46c6662.JPG\n", - "2025-02-25 14:23:13,408 DEBUG: Undistorting image 2025-02-01_DJI_0699_823982b0.JPG\n", - "2025-02-25 14:23:15,642 INFO: Computing neighbors\n", - "2025-02-25 14:23:15,681 INFO: Using precomputed raw depthmap 2025-02-01_DJI_0084_f46c6662.JPG.jpg\n", - "2025-02-25 14:23:15,681 INFO: Using precomputed raw depthmap 2025-02-01_DJI_0699_823982b0.JPG.jpg\n", - "2025-02-25 14:23:15,682 INFO: Using precomputed clean depthmap 2025-02-01_DJI_0084_f46c6662.JPG.jpg\n", - "2025-02-25 14:23:15,682 INFO: Using precomputed clean depthmap 2025-02-01_DJI_0699_823982b0.JPG.jpg\n", - "2025-02-25 14:23:15,683 INFO: Using precomputed pruned depthmap 2025-02-01_DJI_0084_f46c6662.JPG.jpg\n", - "2025-02-25 14:23:15,684 INFO: Using precomputed pruned depthmap 2025-02-01_DJI_0699_823982b0.JPG.jpg\n", - "2025-02-25 14:23:15,684 INFO: Merging depthmaps\n" - ] - } - ], - "source": [ - "# pyre-unsafe\n", - "\n", - "import sys\n", - "from os.path import abspath, dirname, join\n", - "\n", - "opensfm_path = '/source/OpenSfM'\n", - "sys.path.insert(0, opensfm_path)\n", - "\n", - "import contextlib\n", - "from typing import Generator\n", - "\n", - "from opensfm.dataset import DataSet\n", - "\n", - "from typing import Any, Callable, List\n", - "import argparse\n", - "import addict\n", - "\n", - "from opensfm import log\n", - "\n", - "\n", - "def local_command_runner(all_commands_types: List[Any], dataset_factory: Callable, dataset_choices: List[str], args: addict.Dict) -> None:\n", - " \"\"\" Main entry point for running the passed SfM commands types.\"\"\"\n", - " log.setup()\n", - "\n", - " # Create the top-level parser\n", - "\n", - " command_objects = [c.Command() for c in all_commands_types]\n", - "\n", - " # Instanciate datast\n", - " with dataset_factory(args.dataset, args.dataset_type) as data:\n", - " # Run the selected subcommand\n", - " for command in command_objects:\n", - " if args.command == command.name:\n", - " command.run(data, args)\n", - "\n", - "\n", - "# pyre-unsafe\n", - "@contextlib.contextmanager\n", - "def create_default_dataset_context(\n", - " dataset_path: str, dataset_type: str = \"\"\n", - ") -> Generator[DataSet, None, None]:\n", - " dataset = DataSet(dataset_path)\n", - " try:\n", - " yield dataset\n", - " finally:\n", - " dataset.clean_up()\n", - "\n", - "\n", - "dataset_path = '/source/opensfm_pairing_draft/data/batumi_6pic'\n", - "commands_list = [\n", - " addict.Dict(command='extract_metadata', dataset=dataset_path, dataset_type='opensfm'),\n", - " addict.Dict(command='detect_features', dataset=dataset_path, dataset_type='opensfm'),\n", - " addict.Dict(command='match_features', dataset=dataset_path, dataset_type='opensfm'),\n", - " addict.Dict(command='create_tracks', dataset=dataset_path, dataset_type='opensfm'),\n", - " addict.Dict(algorithm='incremental', command='reconstruct', dataset=dataset_path,\n", - " dataset_type='opensfm'),\n", - " addict.Dict(command='mesh', dataset=dataset_path, dataset_type='opensfm'),\n", - " addict.Dict(command='undistort', dataset=dataset_path, dataset_type='opensfm',\n", - " output='undistorted', reconstruction=None, reconstruction_index=0,\n", - " skip_images=False, tracks=None),\n", - " addict.Dict(command='compute_depthmaps', dataset=dataset_path,dataset_type='opensfm',\n", - " interactive=False, subfolder='undistorted'),\n", - "]\n", - "\n", - "\n", - "if __name__ == \"__main__\":\n", - " from opensfm import commands\n", - " for command_config in commands_list:\n", - " local_command_runner(\n", - " commands.opensfm_commands,\n", - " create_default_dataset_context,\n", - " dataset_choices=[\"opensfm\"],\n", - " args=command_config\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2740a013-1afb-4791-a203-7e848cd18173", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.10" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} From af6426793f7de129ccde16a9653e932ca424520a Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Thu, 27 Feb 2025 21:25:55 +0100 Subject: [PATCH 20/25] Updated requrements --- opensfm/pairs_selection_by_cones.py | 4 +--- requirements.txt | 7 ++++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/opensfm/pairs_selection_by_cones.py b/opensfm/pairs_selection_by_cones.py index a21f07291..c36bba9db 100644 --- a/opensfm/pairs_selection_by_cones.py +++ b/opensfm/pairs_selection_by_cones.py @@ -1,7 +1,5 @@ import numpy as np -from tqdm import tqdm - import numpy as np import math @@ -67,7 +65,7 @@ def save_cones_projection_as_gpkg(mesh_list, reference, output_file): } with fiona.open(output_file, 'w', driver='GPKG', crs=from_epsg(4326), schema=schema) as layer: - for cn, cc in tqdm(mesh_list): + for cn, cc in mesh_list: vertex_array = trimesh.convex.hull_points(cc) ll_point_list = [] for x, y, z in vertex_array: diff --git a/requirements.txt b/requirements.txt index 7a00697b3..bc85d3c7c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,10 +11,15 @@ pyproj>=1.9.5.1 pytest==3.0.7 python-dateutil>=2.7 pyyaml==5.4 -scipy>=1.10.0 +scipy>=1.10.1 Sphinx==4.2.0 six xmltodict==0.10.2 wheel opencv-python==4.5.1.48 ; sys_platform == "win32" opencv-python ; sys_platform == "linux" +fiona==1.10.1 +trimesh==4.6.3 +rasterio==1.3.11 +manifold3d==3.0.1 +shapely==2.0.7 From 2c18263483298f7f61881166f4dbaac77b28c02e Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Thu, 27 Feb 2025 21:26:51 +0100 Subject: [PATCH 21/25] Reverted readme --- README.md | 80 ++----------------------------------------------------- 1 file changed, 2 insertions(+), 78 deletions(-) diff --git a/README.md b/README.md index f37e50a7a..727f3af23 100644 --- a/README.md +++ b/README.md @@ -1,83 +1,7 @@ -# Naive Cone Pairing Algorithm -**Jupyter-notebooks could be found in this repo https://github.com/aliaksandr960/opensfm_pairing_draft** - -Special thanks to @Komzpa and the OpenAerialMap community for their ideas, data, and support. - -## Overview -**Generally, it is just attempt to fix some small number of edge cases. OpenSfM is the proven tool, which successfuly works for more than 10 years.** - -The image matching pipeline operates as follows: image pairs are initially selected based on metadata and then matched using point-matching algorithms such as SIFT, ORB, ALIKE, or others. There is an attempt to improve the image pairing process. - -**In cases, when you have mix of nadir and oblique images, utilizing Field of View (FoV) cones could offer advantages over distance- or triangulation-based methods, which are already implemented in OpenSfM.** - - -![Multiperspective 1](doc/source/images/multiperspective1.png) -![Multiperspective 2](doc/source/images/multiperspective2.png) - -**Field of view cones visualization**: -![Cones](doc/source/images/batumi_cones_viz.png) - -### Idea: -- Generate field-of-view (FOV) cones for each camera -- Clip the cones using the land surface (DEM) or a bounding box approximation -- Identify overlapping cones to determine potential image matches - -Since I lack synthetic data generation pipelines or drones to test this hypothesis, the development has been published on GitHub as is. It has been a valuable self-education project. - - - -## Usage - - -### Setup -1. Install docker and git - -2. Clone this repo and repo https://github.com/aliaksandr960/opensfm_pairing_draft - -3. Run inside this repo **git submodule update --init --recursive** - -4. Build the docker image by running **sh ./docker_build.sh** - -5. Change paths in docker mounts in **./docker_start.sh** as you need - -6. Run container by executing **sh ./docker_start.sh** - -7. Build OpenSfM by executing inside container **cd /source/OpenSfM && python setup.py build** - -7. Run reconstruction by using **standard OpenSfM commands** or jupyter notebook **runner_notebook.ipynb** - -### Usage - -1. Run container by executing **sh ./docker_start.sh** - -2. Build OpenSfM by executing inside container command **cd /source/OpenSfM && python setup.py build** - -3. Your dataset should contain **config.yaml** to configure **OpenSfM pipelines and cone matching** - -4. Run reconstruction by using **standard OpenSfM commands** or jupyter notebook **runner_notebook.ipynb** - -5. Make sure, due reconstruction there had been created **cones_projections.gpkg** file in dataset folder. It indicates - everything works well. You could inspect projections of cones to the surface by openning it in QGIS or other GIS software. - - -## config.yaml for the cone pairing -*Sample config file could be found in the root of this repo ./cones_config_example.yaml* - ----- - - **pair_selection_by_cones: bool** - to switch on pair selection by cones - -**dem_path: string** - path to GeoTIF DEM in EPSG:4326 (only this projection supported). **DEM should cover only your area of interest**, kind a SRTM 90M 5km x 5km, don't put DEM of the whole country or whole world. - -**dem_hight: float** - clips conuses by DEM and DEM extruded by this hight in meters - -**pairing_fov: float** - conus angle in degrees (camera FOV) for pairing - - - +OpenSfM ![Docker workflow](https://github.com/mapillary/opensfm/workflows/Docker%20CI/badge.svg) ======= -# Original OpenSfM Readme -## Overvie +## Overview OpenSfM is a Structure from Motion library written in Python. The library serves as a processing pipeline for reconstructing camera poses and 3D scenes from multiple images. It consists of basic modules for Structure from Motion (feature detection/matching, minimal solvers) with a focus on building a robust and scalable reconstruction pipeline. It also integrates external sensor (e.g. GPS, accelerometer) measurements for geographical alignment and robustness. A JavaScript viewer is provided to preview the models and debug the pipeline.

From 897bc2a6d46057f4bfe5ccd2a3d20a6ccc73eec2 Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Thu, 27 Feb 2025 21:28:32 +0100 Subject: [PATCH 22/25] Reverted dockerfile --- Dockerfile | 38 +++----------------------------------- 1 file changed, 3 insertions(+), 35 deletions(-) diff --git a/Dockerfile b/Dockerfile index 7b27f80b2..95919c97c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,42 +22,10 @@ RUN apt-get update \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* -RUN pip3 install cloudpickle==0.4.0 && \ - pip3 install exifread==2.1.2 && \ - pip3 install flask==2.3.2 && \ - pip3 install fpdf2==2.4.6 && \ - pip3 install joblib==0.14.1 && \ - pip3 install matplotlib && \ - pip3 install networkx==2.5 && \ - pip3 install numpy==1.21 && \ - pip3 install Pillow>=8.1.1 && \ - pip3 install pyproj>=1.9.5.1 && \ - pip3 install pytest==3.0.7 && \ - pip3 install python-dateutil>=2.7 && \ - pip3 install pyyaml==5.4 && \ - pip3 install scipy>=1.10.0 && \ - pip3 install Sphinx==4.2.0 && \ - pip3 install six && \ - pip3 install xmltodict==0.10.2 && \ - pip3 install wheel && \ - pip3 install opencv-python -RUN pip3 install jupyterlab && \ - pip3 install addict && \ - pip3 install fiona && \ - pip3 install trimesh && \ - pip3 install rasterio && \ - pip3 install manifold3d && \ - pip3 install -U scipy && \ - pip3 install pandas && \ - pip3 install shapely && \ - pip3 install tqdm +COPY . /source/OpenSfM WORKDIR /source/OpenSfM -# COPY . /source/OpenSfM - - - -# RUN pip3 install -r requirements.txt && \ -# python3 setup.py build +RUN pip3 install -r requirements.txt && \ + python3 setup.py build \ No newline at end of file From b1e108c60ed9a4895e65367a5470fa2c32a463d5 Mon Sep 17 00:00:00 2001 From: aliaksandr960 Date: Thu, 27 Feb 2025 21:29:33 +0100 Subject: [PATCH 23/25] Removed redundatn images --- doc/source/images/batumi_cones_viz.png | Bin 66716 -> 0 bytes doc/source/images/multiperspective1.png | Bin 46213 -> 0 bytes doc/source/images/multiperspective2.png | Bin 21826 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 doc/source/images/batumi_cones_viz.png delete mode 100644 doc/source/images/multiperspective1.png delete mode 100644 doc/source/images/multiperspective2.png diff --git a/doc/source/images/batumi_cones_viz.png b/doc/source/images/batumi_cones_viz.png deleted file mode 100644 index b1dc26d3816091ec9d5fdd8f1b2f0483dac2ed61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66716 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 From 23ccd1cb466f40f8ffe4296d3f64aafb2027b6c6 Mon Sep 17 00:00:00 2001 From: Aliaksandr Hancharenka <61729725+aliaksandr960@users.noreply.github.com> Date: Mon, 7 Apr 2025 08:01:32 +0200 Subject: [PATCH 24/25] Removed redundant imports --- opensfm/pairs_selection_by_cones.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/opensfm/pairs_selection_by_cones.py b/opensfm/pairs_selection_by_cones.py index c36bba9db..7101f15d3 100644 --- a/opensfm/pairs_selection_by_cones.py +++ b/opensfm/pairs_selection_by_cones.py @@ -1,9 +1,7 @@ import numpy as np -import numpy as np import math -import numpy as np import trimesh import math @@ -12,12 +10,9 @@ from shapely import MultiPoint, convex_hull import shapely -import trimesh import fiona from fiona.crs import from_epsg -import numpy as np -import trimesh import logging logger: logging.Logger = logging.getLogger(__name__) @@ -193,4 +188,4 @@ def pairing_by_cones_from_dataset(ref_images, data.save_cones_projection_as_gpkg(cone_list, reference) - return c, {"num_pairs_cones": len(c),} \ No newline at end of file + return c, {"num_pairs_cones": len(c),} From bf9cde0d6855a710f8059137387a0023e2668e77 Mon Sep 17 00:00:00 2001 From: Aliaksandr Hancharenka <61729725+aliaksandr960@users.noreply.github.com> Date: Mon, 7 Apr 2025 08:02:07 +0200 Subject: [PATCH 25/25] Removed redundant imports --- opensfm/pairs_selection_by_cones.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/opensfm/pairs_selection_by_cones.py b/opensfm/pairs_selection_by_cones.py index 7101f15d3..6a26f0cc0 100644 --- a/opensfm/pairs_selection_by_cones.py +++ b/opensfm/pairs_selection_by_cones.py @@ -1,19 +1,12 @@ import numpy as np - import math - import trimesh - -import math from scipy.spatial.transform import Rotation as R - from shapely import MultiPoint, convex_hull import shapely - import fiona from fiona.crs import from_epsg - import logging logger: logging.Logger = logging.getLogger(__name__)