From 7cf9d6daf776f4d82978352f7475b490f2f85a78 Mon Sep 17 00:00:00 2001 From: Henri Ervasti Date: Wed, 15 Apr 2026 15:18:54 +0200 Subject: [PATCH 01/25] [200-qmi-dataset-reformulation] Progress made on reformulating QMI datasets to have format where column[s]-axi[e]s are set inside a group with the name of the dataset, which can now be different than the name of the data file. Also, single-array datasets are also now allowed, which then would be directly in the root of the file, and not within a group. --- qmi/data/dataset.py | 227 +++++++++++++++++++++-------------- qmi/data/datastore.py | 117 +++++++++++++----- tests/data/test_dataset.py | 96 ++++++++------- tests/data/test_datastore.py | 30 ++--- 4 files changed, 285 insertions(+), 185 deletions(-) diff --git a/qmi/data/dataset.py b/qmi/data/dataset.py index 00545eca..732fd9ab 100644 --- a/qmi/data/dataset.py +++ b/qmi/data/dataset.py @@ -88,7 +88,6 @@ def __init__( self.data = data else: - if shape is None: raise TypeError("Either 'shape' or 'data' parameter must be specified.") @@ -99,21 +98,20 @@ def __init__( self.data = np.zeros(tuple(shape), dtype=dtype) # Check shape. - ndim = len(self.data.shape) - if ndim < 2: - raise ValueError("Dataset must have at least 2 axes.") + ndim = len(self.data.shape) - 1 + ncol = self.data.shape[-1] if ndim > 0 else 0 if np.min(self.data.shape) < 1: raise ValueError("Zero-size or negative size axes are not allowed.") # Initialize axis labels. - self.axis_label: list[str] = [""] * (ndim - 1) - self.axis_unit: list[str] = [""] * (ndim - 1) - self.axis_scale: list[np.ndarray | None] = [None] * (ndim - 1) + self.axis_label: list[str] = [""] * ndim + self.axis_unit: list[str] = [""] * ndim + self.axis_scale: list[np.ndarray | None] = [None] * ndim # Initialize column labels. - ncol = self.data.shape[-1] self.column_label: list[str] = ncol * [""] self.column_unit: list[str] = ncol * [""] + self.column_name: list[str] = ncol * [""] # Initialize empty set of attributes. self.attrs: dict[str, str | int | float] = {} @@ -200,6 +198,21 @@ def set_column_unit(self, col: int, unit: str) -> None: self.column_unit[col] = unit + def set_column_name(self, col: int, name: str) -> None: + """Specify a name for a column in a multi-column data set. + + Parameters: + col: Column number (0, 1, ...). + name: Descriptive name for column data. + """ + if not isinstance(col, int): + raise TypeError("Parameter 'col' must be an integer") + + if col < 0 or col >= len(self.column_name): + raise ValueError("Invalid value for parameter 'col'") + + self.column_name[col] = name + def _parse_attribute_value(s: str) -> int | float | str: """Parse an attribute value. @@ -281,127 +294,157 @@ def write_dataset_to_hdf5(dataset: DataSet, hdf_group: h5py.Group | h5netcdf.Gro hdf_group: HDF5 File or Group instance to which the dataset is written. """ - ndim = len(dataset.data.shape) - ncol = dataset.data.shape[-1] - - if isinstance(hdf_group, h5py.Group): - ds = hdf_group.create_dataset(dataset.name, data=dataset.data) - - else: - dim_names = [] - for axis in range(dataset.data.ndim): - try: - dim_names.append(dataset.axis_label[axis]) - except IndexError: - dim_names.append(f"dim_{axis}") - - for axis, dim_name in enumerate(dim_names): - if dim_name not in hdf_group.dimensions: - hdf_group.dimensions[dim_name] = dataset.data.shape[axis] - - ds = hdf_group.create_variable(dataset.name, dimensions=dim_names, data=dataset.data) + ndim = len(dataset.data.shape) - 1 + ncol = dataset.data.shape[-1] if ndim > 0 else 0 # Special timestamp attribute. - ds.attrs["QMI_DataSet_timestamp"] = dataset.timestamp - ds.attrs["QMI_DataSet_time_str"] = time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime(dataset.timestamp)) + hdf_group.attrs["QMI_DataSet_timestamp"] = dataset.timestamp + hdf_group.attrs["QMI_DataSet_time_str"] = time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime(dataset.timestamp)) # Special attributes for axis labels / units. - for axis in range(ndim - 1): + for axis in range(ndim): if dataset.axis_label[axis]: - ds.attrs[f"QMI_DataSet_axis{axis}_label"] = dataset.axis_label[axis] + hdf_group.attrs[f"QMI_DataSet_axis{axis}_label"] = dataset.axis_label[axis] if dataset.axis_unit[axis]: - ds.attrs[f"QMI_DataSet_axis{axis}_unit"] = dataset.axis_unit[axis] + hdf_group.attrs[f"QMI_DataSet_axis{axis}_unit"] = dataset.axis_unit[axis] + + if not ncol: + # We have only one single array of data. + if isinstance(hdf_group, h5py.Group): + ds = hdf_group.create_dataset(dataset.name, data=dataset.data) + + else: + dim_name = dataset.axis_label[0] or "dim_0" + if dim_name not in hdf_group.dimensions: + hdf_group.dimensions[dim_name] = dataset.data.size + + ds = hdf_group.create_variable(dataset.name, dimensions=(dim_name,), data=dataset.data) + + ds.attrs["unit"] = dataset.axis_label[0] + ds.attrs["name"] = dataset.axis_unit[0] - # Special attributes for column labels / units. for col in range(ncol): + if isinstance(hdf_group, h5py.Group): + ds = hdf_group.create_dataset(dataset.column_label[col], data=dataset.data[:, col]) + + else: + dim_names = [] + for axis in range(dataset.data.ndim): + try: + dim_name = dataset.axis_label[axis] + if dim_name not in dim_names: + dim_names.append(dim_name) + + except IndexError: + dim_names.append(f"dim_{axis}") + + for axis, dim_name in enumerate(dim_names): + if dim_name not in hdf_group.dimensions: + hdf_group.dimensions[dim_name] = dataset.data.shape[axis] + + ds = hdf_group.create_variable( + dataset.column_label[col], dimensions=tuple(dim_names), data=dataset.data[:, col] + ) + + # Special attributes for column labels / units. if dataset.column_label[col]: - ds.attrs[f"QMI_DataSet_column{col}_label"] = dataset.column_label[col] + hdf_group.attrs[f"QMI_DataSet_column{col}_label"] = dataset.column_label[col] + ds.attrs["name"] = dataset.column_label[col] if dataset.column_unit[col]: - ds.attrs[f"QMI_DataSet_column{col}_unit"] = dataset.column_unit[col] + hdf_group.attrs[f"QMI_DataSet_column{col}_unit"] = dataset.column_unit[col] + ds.attrs["unit"] = dataset.column_unit[col] - # Dimension scales. - for axis in range(ndim - 1): - if dataset.axis_label[axis] and isinstance(hdf_group, h5py.Group): - ds.dims[axis].label = dataset.axis_label[axis] + if dataset.column_name[col]: + hdf_group.attrs[f"QMI_DataSet_column{col}_name"] = dataset.column_unit[col] + ds.attrs["long_name"] = dataset.column_name[col] - if dataset.axis_scale[axis] is not None: + # Dimension scales for scale axis. + for axis in range(ndim): # Create an extra dataset to hold the dimension scale. - scale_name = f"{dataset.name}_axis{axis}_scale" - if isinstance(hdf_group, h5py.Group): - ds_scale = hdf_group.create_dataset(scale_name, data=dataset.axis_scale[axis]) - # Attach the dimension scale to the axis. - ds_scale.make_scale(scale_name) - ds.dims[axis].attach_scale(ds_scale) - - else: - # With h5netcdf backend we cannot attach scaled data. - # Create a variable instead and attach it as an attribute to the dataset. - ds_scale = hdf_group.create_variable( - scale_name, - dimensions=(ds.dimensions[axis],), - data=dataset.axis_scale[axis], - ) - ds.attrs[scale_name] = ds_scale - + scale_name = dataset.axis_label[axis] + # But avoid doubles in case of multiple columns. + if scale_name not in hdf_group: + if isinstance(hdf_group, h5py.Group): + ds.dims[axis].label = dataset.axis_label[axis] + ds_scale = hdf_group.create_dataset(scale_name, data=dataset.axis_scale[axis]) + ds_scale.attrs["unit"] = dataset.axis_unit[axis] + ds_scale.attrs["name"] = dataset.axis_label[axis] + # Attach the dimension scale to the axis. + ds_scale.make_scale(scale_name) + ds.dims[axis].attach_scale(ds_scale) + + else: + # With h5netcdf backend we cannot attach scaled data. + # Create a variable instead and attach it as an attribute to the dataset. + ds_scale = hdf_group.create_variable( + scale_name, + dimensions=(ds.dimensions[axis],), + data=dataset.axis_scale[axis], + ) + ds[scale_name].units = dataset.axis_unit[axis] + ds.attrs[scale_name] = ds_scale + # Custom attributes. for (name, value) in dataset.attrs.items(): if name.startswith("QMI_DataSet") or name.startswith("DIMENSION_"): raise ValueError(f"Invalid use of special attribute name {name!r}") - ds.attrs[name] = value + hdf_group.attrs[name] = value # Special attribute to recognize format. - ds.attrs["QMI_DataSet"] = 1 + hdf_group.attrs["QMI_DataSet"] = 1 -def read_dataset_from_hdf5( - ds: h5py.Dataset | h5netcdf.Variable, parent_group: h5netcdf.Group | None = None -) -> DataSet: - """Extract a DataSet instance from the specified HDF5 dataset. +def read_dataset_from_hdf5(parent: h5py.File | h5netcdf.File | h5py.Group | h5netcdf.Group) -> DataSet: + """Extract a QMI DataSet instance from the specified HDF5 dataset (group). Note that this function may fetch additional HDF5 datasets from the parent HDF5 group if the dataset uses dimension scales. Parameters: - ds: HDF5 h5py.Dataset or h5netcdf.Variable instance to read from. - parent_group: Optional parent group parameter if the dataset is a h5netcdf.Variable instance. + parent: HDF5 file or parent group parameter for the dataset. Returns: DataSet instance. """ - # Check that the HDF5 dataset was created by this Python module. - if ds.attrs.get("QMI_DataSet") != 1: + if parent.attrs.get("QMI_DataSet") != 1: raise ValueError("HDF5 dataset not in expected format") - # Sanity check. - if (len(ds.shape) < 2) or np.min(ds.shape) < 1: - raise ValueError("Invalid shape of HDF5 dataset") - # Create DataSet instance and read actual data. - name = ds.name.split("/")[-1] - dataset = DataSet(name=name, data=ds[:]) - - ndim = len(dataset.data.shape) - ncol = dataset.data.shape[-1] + name = parent.name.split("/")[-1] + ndim = 0 + ncol = 0 + dlen = 0 + for attr in parent.attrs: + if attr.startswith("QMI_DataSet_axis") and attr.endswith("label"): + ndim += 1 + if attr.startswith("QMI_DataSet_column") and attr.endswith("label"): + ncol += 1 + dlen = max(dlen, len(parent[parent.attrs["QMI_DataSet_column0_label"]])) + + shape = (dlen, ncol) if ncol > 0 else (dlen,) + dataset = DataSet(name=name, shape=shape) # Read timestamp. - dataset.timestamp = ds.attrs["QMI_DataSet_timestamp"] + dataset.timestamp = parent.attrs["QMI_DataSet_timestamp"] # Read special attributes for labels. - for axis in range(ndim - 1): - dataset.axis_label[axis] = ds.attrs.get(f"QMI_DataSet_axis{axis}_label", "") - dataset.axis_unit[axis] = ds.attrs.get(f"QMI_DataSet_axis{axis}_unit", "") + for axis in range(ndim): + dataset.axis_label[axis] = parent.attrs.get(f"QMI_DataSet_axis{axis}_label", "") + dataset.axis_unit[axis] = parent.attrs.get(f"QMI_DataSet_axis{axis}_unit", "") for col in range(ncol): - dataset.column_label[col] = ds.attrs.get(f"QMI_DataSet_column{col}_label", "") - dataset.column_unit[col] = ds.attrs.get(f"QMI_DataSet_column{col}_unit", "") - - # Read dimension scales. - if parent_group is None: - for axis in range(ndim - 1): + dataset.column_label[col] = parent.attrs.get(f"QMI_DataSet_column{col}_label", "") + dataset.column_unit[col] = parent.attrs.get(f"QMI_DataSet_column{col}_unit", "") + dataset.data[:, col] = np.array(parent[dataset.column_label[col]]) + + if isinstance(parent, h5py.Group): + # Read dimension scales. + for axis in range(ndim): + ds = parent[dataset.axis_label[axis]] if len(ds.dims[axis]) > 0: scale = ds.dims[axis][0] if scale.shape != (dataset.data.shape[axis],): @@ -411,19 +454,19 @@ def read_dataset_from_hdf5( else: # Read dimension scales from sibling variables. - for axis in range(ndim - 1): + for axis in range(ndim): scale_name = f"{dataset.name}_axis{axis}_scale" - if scale_name in parent_group: - scale = parent_group[scale_name] + if scale_name in parent: + scale = parent[scale_name] if scale.shape != (dataset.data.shape[axis],): raise ValueError(f"Invalid shape of dimension scale for axis {axis}") dataset.axis_scale[axis] = scale[:] # Read custom attributes. - for (name, value) in ds.attrs.items(): - if not name.startswith("QMI_DataSet") and not name.startswith("DIMENSION_")\ - and not name.startswith(f"{dataset.name}_axis"): + for (name, value) in parent.attrs.items(): + # if not name.startswith("QMI_DataSet") and not name.startswith("DIMENSION_") \ + if not name.startswith("DIMENSION_") and not name.startswith(f"{dataset.name}_axis"): dataset.attrs[name] = value return dataset diff --git a/qmi/data/datastore.py b/qmi/data/datastore.py index 8998547f..cdc42db6 100644 --- a/qmi/data/datastore.py +++ b/qmi/data/datastore.py @@ -9,6 +9,7 @@ import json import h5netcdf import h5py +import numpy as np import shutil from qmi.core.exceptions import QMI_UsageException @@ -16,6 +17,8 @@ from qmi.data.dataset import DataSet from qmi.core.config_struct import config_struct_to_dict +# Global string definition +QMI_DATASET = "QMI_Dataset_{ds_count}" def _relative_folder_path(date_str: str, time_str: str, label: str) -> str: """Internal function to determine the relative path to a DataFolder.""" @@ -61,40 +64,39 @@ def __init__( def __repr__(self) -> str: return f"DataFolder({self.folder_path!r})" - def _hdf5_file(self, name: str, mode: str, backend: str) -> h5py.File | h5netcdf.File: + def _hdf5_file(self, filename: str, mode: str, backend: str) -> h5py.File | h5netcdf.File: """Create a new, or open, HDF5 file in the data folder. Parameters: - name: Base name of the HDF5 file, without the extension ".h5" or ".hdf5". - mode: File mode. - backend: Backend for HDF5 file format. Options are "hdf5" (default) and "h5netcdf". + filename: Base name of the HDF5 file, with the extension ".h5" or ".hdf5". + mode: File mode. + backend: Backend for HDF5 file format. Options are "hdf5" (default) and "h5netcdf". Returns: A `File` object representing the HDF5 file. Raises: - ValueError: If the `name` has non-latin character(s). - IOError: If the file is already present and file mode does not allow truncation. - FileNotFoundError: If the file mode is set to read a file and the file was not found. - ValueError: Invalid HDF5 file backend. + ValueError: If the `name` has non-latin character(s). + QMI_UsageException: Only '.h5' and '.hdf5' file name extensions are allowed. + IOError: If the file is already present and file mode does not allow truncation. + FileNotFoundError: If the file mode is set to read a file and the file was not found. + ValueError: Invalid HDF5 file backend. """ - if not re.match(r"^[-_a-zA-Z0-9(),]+$", name): - raise ValueError(f"Invalid name {name!r}") + if not re.match(r"^[-_a-zA-Z0-9(),]+$", os.path.splitext(filename)[0]): + raise ValueError(f"Invalid name {filename!r}") - if mode in ["r+", "r", "x"]: - for ext in [".h5", ".hdf5"]: - filename = name + ext - # Let's check the file exists. - file_path = os.path.join(self.folder_path, filename) - file_found = os.path.isfile(file_path) - if file_found: - break + if not filename.endswith((".h5", ".hdf5", ".H5", ".HDF5")): + raise QMI_UsageException("Invalid HDF5 file extension, only '.h5' and '.hdf5' extensions are allowed.") + file_path = os.path.join(self.folder_path, filename) + if mode in ["r+", "r", "x"]: + # Let's check the file exists. + file_found = os.path.isfile(file_path) if mode == "x" and file_found: raise IOError(f"The file {filename} already exists and not allowed to overwrite.") if mode in ["r+", "r"] and not file_found: - raise FileNotFoundError(f"Could not find HDF5 file with name {name}.") + raise FileNotFoundError(f"Could not find HDF5 file with name {filename}.") if backend == "h5py": return h5py.File(file_path, mode=mode) @@ -140,7 +142,11 @@ def copy_file(self, filename: str) -> None: shutil.copy2(filename, self.folder_path) def write_dataset( - self, ds: DataSet, file_format: str = "hdf5", overwrite: bool = False, backend: str = "h5py" + self, + ds: DataSet, + file_format: str = "hdf5", + overwrite: bool = False, + backend: str = "h5py", ) -> None: """Write the specified DataSet to a new or existing file in the data folder. @@ -149,10 +155,10 @@ def write_dataset( Parameters: ds: DataSet instance to write. file_format: File format specification. - "hdf5" - selects HDF5 format with (default) - "text" - selects a space-separated text format + - "hdf5". Selects HDF5 format with (default); + - "text". Selects a space-separated text format. overwrite: Allow user to overwrite an existing dataset. Default is False. - backend: Select backend for HDF5 file format. Options are "hdf5" (default) and "h5netcdf". + backend: Select backend for HDF5 file format. Options are "hdf5" (default) and "h5netcdf".` Raises: ValueError: Dataset name is invalid. @@ -167,10 +173,17 @@ def write_dataset( file_path = os.path.join(self.folder_path, filename) if backend == "h5py": with h5py.File(file_path, "w" if overwrite else "x") as f: + # Add QMI version to file + f.attrs["QMI_version"] = qmi.__version__ + f.attrs[QMI_DATASET.format(ds_count=0)] = ds.name qmi.data.dataset.write_dataset_to_hdf5(ds, f) elif backend == "h5netcdf": with h5netcdf.File(file_path, "w" if overwrite else "x", decode_vlen_strings=False) as f: + # Add QMI version to file + f.attrs["QMI_version"] = qmi.__version__ + f.attrs[QMI_DATASET.format(ds_count=0)] = ds.name + f.dimensions[ds.name] = None qmi.data.dataset.write_dataset_to_hdf5(ds, f) else: @@ -223,7 +236,7 @@ def read_dataset(self, name: str, backend: str = "h5py") -> DataSet: if name not in f: raise FileNotFoundError(f"No dataset {name!r} found in {file_path}.") - return qmi.data.dataset.read_dataset_from_hdf5(f[name]) + return qmi.data.dataset.read_dataset_from_hdf5(f[name], None) elif backend == "h5netcdf": with h5netcdf.File(file_path, "r", decode_vlen_strings=False) as f: @@ -244,14 +257,17 @@ def make_hdf5file(self, name: str, backend: str = "h5py") -> h5py.File | h5netcd An error occurs if the specified file already exists. Parameters: - name: Base name of the HDF5 file, without the extension ".h5" or ".hdf5". - backend: Select backend for HDF5 file format. Options are "hdf5" (default) and "h5netcdf". + name: Base name of the HDF5 file, without the extension ".h5" or ".hdf5". + backend: Select backend for HDF5 file format. Options are "hdf5" (default) and "h5netcdf". Returns: - A `File` object representing the HDF5 file. - See http://docs.h5py.org/ for information on how to use this object. + hdf5_file: A file object representing a HDF5 file. """ - return self._hdf5_file(name, "x", backend) + hdf5_file = self._hdf5_file(name, "x", backend) + # Add QMI version to file + hdf5_file.attrs["QMI_version"] = qmi.__version__ + + return hdf5_file def open_hdf5file(self, name: str, write_mode: bool = False, backend: str = "h5py") -> h5py.File | h5netcdf.File: """Open an existing HDF5 file in the data folder. @@ -268,6 +284,48 @@ def open_hdf5file(self, name: str, write_mode: bool = False, backend: str = "h5p mode = "r+" if write_mode else "r" return self._hdf5_file(name, mode, backend) + def add_dataset_to_file( + self, + hdf5_file: h5py.File | h5netcdf.File, + ds: DataSet, + root_attrs: dict[ + str, str | int | float | complex | str | np.ndarray | np.integer | list[ + int, float, complex, str + ] | tuple[int, float, complex, str] + ] | None = None + ) -> None: + """Add a dataset, and optional file attributes to an existing HDF5 file. + + Parameters: + hdf5_file: The file instance to add the dataset in. + ds: A QMI dataset instance that is to be added. + root_attrs: A dictionary of attributes that should be written in the file root. Default is `None`. + + Raises: + QMI_UsageException: If an attribute with the dataset name already exists in the file. + """ + if hasattr(hdf5_file, ds.name): + raise QMI_UsageException(f"Data file already has an attribute named {ds.name}") + + if isinstance(hdf5_file, h5netcdf.File): + hdf5_file.dimensions[ds.column_label] = None + + keys = list(dict(hdf5_file.attrs).keys()) + ds_count = 0 + while True: + if not QMI_DATASET.format(ds_count=ds_count) in keys: + break + + ds_count += 1 + + hdf5_file.attrs[QMI_DATASET.format(ds_count=ds_count)] = ds.name + dataset_group = hdf5_file.create_group(ds.name) + qmi.data.dataset.write_dataset_to_hdf5(ds, dataset_group) + # Add optional file root attrbutes + root_attrs = root_attrs or {} + for attr, val in root_attrs.items(): + hdf5_file.attrs[attr] = val + class DataStore: """A DataStore represents a collection of stored data. @@ -379,6 +437,7 @@ def make_folder( full_path = os.path.join(self.basedir, rel_path) if os.path.exists(full_path): raise FileExistsError(f"Directory {full_path!r} already exists.") + os.mkdir(full_path) return DataFolder(full_path, label, date_str, time_str) diff --git a/tests/data/test_dataset.py b/tests/data/test_dataset.py index 69adfe94..c27e8413 100644 --- a/tests/data/test_dataset.py +++ b/tests/data/test_dataset.py @@ -73,13 +73,6 @@ def test_04_no_shape_nor_data_specified_raises_exception(self): with self.assertRaises(TypeError): DataSet("empty_dataset", shape=None, data=None) - def test_05_data_dimensions_not_two_or_more(self): - """An exception must be raised if neither data dimension and shape is less than 2""" - with self.assertRaises(ValueError) as exc: - DataSet("empty_dataset", shape=(3,), data=np.array([1.0, 2.0, 3.0])) - - self.assertEqual( "Dataset must have at least 2 axes.", str(exc.exception)) - def test_06_data_dimension_invalid(self): """Zero (and negative) dimension values raise an exception""" with self.assertRaises(ValueError) as exc: @@ -100,12 +93,12 @@ def test_10_create_empty_dataset(self): self.assertEqual(np.float64, ds.data.dtype) self.assertTrue(np.all(ds.data == 0)) - self.assertEqual([""], ds.axis_label) - self.assertEqual([""], ds.axis_unit) - self.assertEqual([None], ds.axis_scale) - self.assertEqual(["", "", ""], ds.column_label) - self.assertEqual(["", "", ""], ds.column_unit) - self.assertEqual({}, ds.attrs) + self.assertListEqual([""], ds.axis_label) + self.assertListEqual([""], ds.axis_unit) + self.assertListEqual([None], ds.axis_scale) + self.assertListEqual(["", "", ""], ds.column_label) + self.assertListEqual(["", "", ""], ds.column_unit) + self.assertDictEqual({}, ds.attrs) def test_11_create_initialized_dataset(self): """Create a simple dataset from existing Numpy data.""" @@ -122,8 +115,8 @@ def test_11_create_initialized_dataset(self): self.assertTrue(np.all(ds.data == data)) def test_20_labels(self): - """Setting labels.""" - + """Setting labels on dataset with three columns and two axes.""" + # Arrange ds_name = "my_dataset" ds_shape = (2, 8, 3) ds = DataSet(ds_name, shape=ds_shape) @@ -132,7 +125,7 @@ def test_20_labels(self): axis_scale = [None, None] column_labels = ["power", "countrate", "temperature"] column_units = ["mW", "kHz", "K"] - + # Act ds.set_axis_label(0, "X") ds.set_axis_unit(0, "um") ds.set_axis_label(1, "Z") @@ -143,10 +136,10 @@ def test_20_labels(self): ds.set_column_unit(1, "kHz") ds.set_column_label(2, "temperature") ds.set_column_unit(2, "K") - + # Assert self.assertEqual(ds_name, ds.name) self.assertEqual(ds_shape, ds.data.shape) - self.assertEqual(axis_labels, ds.axis_label, ) + self.assertEqual(axis_labels, ds.axis_label) self.assertEqual(axis_unit, ds.axis_unit) self.assertEqual(axis_scale, ds.axis_scale) self.assertEqual(column_labels, ds.column_label) @@ -273,26 +266,27 @@ def test_40_write_hdf5_simple(self): ds.attrs["hello"] = "world" ds.attrs["number"] = 2.71 - f = h5py.File("test.h5", "w", driver="core", backing_store=False) - qmi.data.dataset.write_dataset_to_hdf5(ds, f) + with h5py.File("test.h5", "w", driver="core", backing_store=False) as f: + grp = f.create_group(ds.name) + qmi.data.dataset.write_dataset_to_hdf5(ds, grp) - self.assertEqual(set(f.keys()), {ds_name, "my_dataset_axis0_scale"}) - self.assertEqual(f[ds_name].shape, (8, 3)) - self.assertEqual(f[ds_name].dtype, np.float64) - self.assertTrue(np.all(data == f[ds_name])) + self.assertListEqual([ds_name], list(f.keys())) + for e, col in enumerate(ds.column_label): + self.assertEqual((8,), f[ds_name][col].shape) + self.assertEqual(np.float64, f[ds_name][col].dtype) + self.assertTrue(np.all(data[:, e] == f[ds_name][col])) + self.assertEqual(ds.column_label[e], f[ds_name].attrs[f"QMI_DataSet_column{e}_label"]) + self.assertEqual(ds.column_unit[e], f[ds_name].attrs[f"QMI_DataSet_column{e}_unit"],) - self.assertEqual(f[ds_name].attrs["QMI_DataSet_axis0_label"], "X axis") - self.assertEqual(f[ds_name].attrs["QMI_DataSet_axis0_unit"], "mm") - self.assertEqual(f[ds_name].attrs["QMI_DataSet_column1_label"], "green") - self.assertEqual(f[ds_name].attrs["QMI_DataSet_column1_unit"], "nm") - - self.assertEqual(f[ds_name].dims[0].label, "X axis") - self.assertTrue(np.all(scale_data == f[ds_name].dims[0][0])) + ds.column_label.sort() + self.assertListEqual(list(f[ds_name].keys()), ds.axis_label + ds.column_label) + self.assertEqual(f[ds_name].attrs["QMI_DataSet_axis0_label"], "X axis") + self.assertEqual(f[ds_name].attrs["QMI_DataSet_axis0_unit"], "mm") - self.assertEqual(f[ds_name].attrs["hello"], "world") - self.assertEqual(f[ds_name].attrs["number"], 2.71) + self.assertTrue(np.all(scale_data == np.array(f[ds_name]["X axis"]))) - f.close() + self.assertEqual(f[ds_name].attrs["hello"], "world") + self.assertEqual(f[ds_name].attrs["number"], 2.71) def test_41_write_read_hdf5(self): """Writing and reading various datasets as HDF5 with h5py backend.""" @@ -313,28 +307,32 @@ def test_41_write_read_hdf5(self): add_scale=True, add_attributes=True) datasets.append(ds) - qmi.data.dataset.write_dataset_to_hdf5(ds, f) + grp = f.create_group(name) + qmi.data.dataset.write_dataset_to_hdf5(ds, grp) # Read back from file and verify. for ds in datasets: ds2 = qmi.data.dataset.read_dataset_from_hdf5(f[ds.name]) self.assertEqual(ds2.name, ds.name) + # for e, label in enumerate(ds.column_label): + # col = ds2) self.assertIsInstance(ds2.data, np.ndarray) - self.assertEqual(ds2.data.shape, ds.data.shape) - self.assertEqual(ds2.data.dtype, ds.data.dtype) + self.assertEqual(ds.data.shape, ds2.data.shape) + self.assertEqual(ds.data.dtype, ds2.data.dtype) self.assertTrue(np.all(ds2.data == ds.data)) - self.assertEqual(ds2.axis_label, ds.axis_label) - self.assertEqual(ds2.axis_unit, ds.axis_unit) - self.assertEqual(len(ds2.axis_scale), len(ds.axis_scale)) - for axis in range(len(ds.axis_scale)): - if ds.axis_scale[axis] is None: - self.assertIsNone(ds2.axis_scale[axis]) - else: - self.assertTrue(np.all(ds2.axis_scale[axis] == ds.axis_scale[axis])) - - self.assertEqual(ds2.column_label, ds.column_label) - self.assertEqual(ds2.column_unit, ds.column_unit) - self.assertEqual(ds2.attrs, ds.attrs) + self.assertEqual(ds.column_label, ds2.column_label) + self.assertEqual(ds.column_unit, ds2.column_unit) + self.assertEqual(ds.attrs, ds2.attrs) + + for e, label in enumerate(ds.axis_label): + self.assertEqual(ds2.axis_label, ds.axis_label) + self.assertEqual(ds2.axis_unit, ds.axis_unit) + self.assertEqual(len(ds2.axis_scale), len(ds.axis_scale)) + for axis in range(len(ds.axis_scale)): + if ds.axis_scale[axis] is None: + self.assertIsNone(ds2.axis_scale[axis]) + else: + self.assertTrue(np.all(ds2.axis_scale[axis] == ds.axis_scale[axis])) f.close() diff --git a/tests/data/test_datastore.py b/tests/data/test_datastore.py index 63a7508e..41bfdfec 100644 --- a/tests/data/test_datastore.py +++ b/tests/data/test_datastore.py @@ -220,8 +220,8 @@ def test_08_read_dataset_wrong_file_name_raises_exception(self): def test_09_make_hdf5_file(self): """Make a hdf5 file.""" # Arrange - name = "expected" - expected_file = os.path.join(os.getcwd(), name + ".hdf5") + name = "expected" + ".hdf5" + expected_file = os.path.join(os.getcwd(), name) # Act try: with self.datafolder.make_hdf5file(name) as hdf5_file: @@ -234,8 +234,8 @@ def test_09_make_hdf5_file(self): def test_09b_make_hdf5_file_h5netcdf_backend(self): """Make a hdf5 file with h5netcdf backend.""" # Arrange - name = "expected" - expected_file = os.path.join(os.getcwd(), name + ".hdf5") + name = "expected" + ".hdf5" + expected_file = os.path.join(os.getcwd(), name) # Act try: with self.datafolder.make_hdf5file(name, backend="h5netcdf") as hdf5_file: @@ -256,8 +256,8 @@ def test_10_make_hdf5_file_raises_exception_with_non_latin_characters(self): def test_10b_make_hdf5_file_raises_exception_if_h5_file_exists(self): """Making a HDF5 file fails when a matching .h5 file already exists.""" # Arrange - name = "existing_h5" - existing_file = os.path.join(os.getcwd(), name + ".h5") + name = "existing_h5" + ".h5" + existing_file = os.path.join(os.getcwd(), name) try: with File(existing_file, "x"): pass @@ -272,8 +272,8 @@ def test_10b_make_hdf5_file_raises_exception_if_h5_file_exists(self): def test_10c_make_hdf5_file_raises_exception_if_hdf5_file_exists(self): """Making a HDF5 file fails when a matching .hdf5 file already exists.""" # Arrange - name = "existing_hdf5" - existing_file = os.path.join(os.getcwd(), name + ".hdf5") + name = "existing_hdf5" + ".hdf5" + existing_file = os.path.join(os.getcwd(), name) try: with File(existing_file, "x"): pass @@ -288,8 +288,8 @@ def test_10c_make_hdf5_file_raises_exception_if_hdf5_file_exists(self): def test_11_open_hdf5_file(self): """Open a hdf5 file.""" # Arrange - name = "expected" - expected_file = os.path.join(os.getcwd(), name + ".hdf5") + name = "expected" + ".hdf5" + expected_file = os.path.join(os.getcwd(), name) # Act and Assert try: with self.datafolder.make_hdf5file(name): @@ -304,8 +304,8 @@ def test_11_open_hdf5_file(self): def test_11b_open_hdf5_file_h5netcdf_backend(self): """Open a hdf5 file with h5netcdf backend.""" # Arrange - name = "expected" - expected_file = os.path.join(os.getcwd(), name + ".hdf5") + name = "expected" + ".hdf5" + expected_file = os.path.join(os.getcwd(), name) # Act and Assert try: with self.datafolder.make_hdf5file(name, backend="h5netcdf"): @@ -328,7 +328,7 @@ def test_12_open_hdf5_file_raises_exception_with_non_latin_characters(self): def test_12b_open_hdf5_file_raises_exception_if_file_does_not_exist(self): """Opening a HDF5 file fails when no matching file exists.""" # Arrange - name = "missing_file" + name = "missing_file.h5" # Act and Assert with self.assertRaises(FileNotFoundError): self.datafolder.open_hdf5file(name) @@ -336,8 +336,8 @@ def test_12b_open_hdf5_file_raises_exception_if_file_does_not_exist(self): def test_12c_open_hdf5_file_finds_h5_extension(self): """Opening a HDF5 file also resolves files stored with the .h5 extension.""" # Arrange - name = "expected_h5" - expected_file = os.path.join(os.getcwd(), name + ".h5") + name = "expected_h5" + ".h5" + expected_file = os.path.join(os.getcwd(), name) try: with File(expected_file, "x"): pass From c2fa4e1e6444170d2007c2fb99fe0a8981bdba66 Mon Sep 17 00:00:00 2001 From: Henri Ervasti Date: Thu, 16 Apr 2026 16:17:57 +0200 Subject: [PATCH 02/25] [200-qmi-dataset-reformulation] Further modifications and re-iterations until desired behaviour and tests pass. --- qmi/data/dataset.py | 95 ++++++++++----------- qmi/data/datastore.py | 11 +-- tests/data/test_dataset.py | 164 ++++++++++++++++++------------------- 3 files changed, 136 insertions(+), 134 deletions(-) diff --git a/qmi/data/dataset.py b/qmi/data/dataset.py index 732fd9ab..7fc9e3ca 100644 --- a/qmi/data/dataset.py +++ b/qmi/data/dataset.py @@ -326,25 +326,19 @@ def write_dataset_to_hdf5(dataset: DataSet, hdf_group: h5py.Group | h5netcdf.Gro for col in range(ncol): if isinstance(hdf_group, h5py.Group): - ds = hdf_group.create_dataset(dataset.column_label[col], data=dataset.data[:, col]) + ds = hdf_group.create_dataset(dataset.column_label[col], data=dataset.data[..., col]) else: dim_names = [] - for axis in range(dataset.data.ndim): - try: - dim_name = dataset.axis_label[axis] - if dim_name not in dim_names: - dim_names.append(dim_name) - - except IndexError: - dim_names.append(f"dim_{axis}") + for axis in range(ndim): + dim_names.append(dataset.axis_label[axis] or f"dim_{axis}") for axis, dim_name in enumerate(dim_names): if dim_name not in hdf_group.dimensions: hdf_group.dimensions[dim_name] = dataset.data.shape[axis] ds = hdf_group.create_variable( - dataset.column_label[col], dimensions=tuple(dim_names), data=dataset.data[:, col] + dataset.column_label[col], dimensions=tuple(dim_names), data=dataset.data[..., col] ) # Special attributes for column labels / units. @@ -357,11 +351,14 @@ def write_dataset_to_hdf5(dataset: DataSet, hdf_group: h5py.Group | h5netcdf.Gro ds.attrs["unit"] = dataset.column_unit[col] if dataset.column_name[col]: - hdf_group.attrs[f"QMI_DataSet_column{col}_name"] = dataset.column_unit[col] + hdf_group.attrs[f"QMI_DataSet_column{col}_name"] = dataset.column_name[col] ds.attrs["long_name"] = dataset.column_name[col] # Dimension scales for scale axis. for axis in range(ndim): + if dataset.axis_scale[axis] is None: + continue + # Create an extra dataset to hold the dimension scale. scale_name = dataset.axis_label[axis] # But avoid doubles in case of multiple columns. @@ -383,8 +380,8 @@ def write_dataset_to_hdf5(dataset: DataSet, hdf_group: h5py.Group | h5netcdf.Gro dimensions=(ds.dimensions[axis],), data=dataset.axis_scale[axis], ) - ds[scale_name].units = dataset.axis_unit[axis] - ds.attrs[scale_name] = ds_scale + ds_scale.attrs["unit"] = dataset.axis_unit[axis] + ds_scale.attrs["name"] = dataset.axis_label[axis] # Custom attributes. for (name, value) in dataset.attrs.items(): @@ -397,36 +394,54 @@ def write_dataset_to_hdf5(dataset: DataSet, hdf_group: h5py.Group | h5netcdf.Gro hdf_group.attrs["QMI_DataSet"] = 1 -def read_dataset_from_hdf5(parent: h5py.File | h5netcdf.File | h5py.Group | h5netcdf.Group) -> DataSet: +def read_dataset_from_hdf5( + parent: h5py.File | h5netcdf.File | h5py.Group | h5netcdf.Group | h5py.Dataset | h5netcdf.Variable, + container: h5py.File | h5netcdf.File | h5py.Group | h5netcdf.Group | None = None, +) -> DataSet: """Extract a QMI DataSet instance from the specified HDF5 dataset (group). Note that this function may fetch additional HDF5 datasets from the parent HDF5 group if the dataset uses dimension scales. Parameters: - parent: HDF5 file or parent group parameter for the dataset. + parent: HDF5 file/group container, or a child dataset for backwards compatibility. + container: Optional explicit parent file/group if `parent` is a child dataset. Returns: - DataSet instance. + dataset: DataSet instance. """ + source = parent + if container is not None: + parent = container + # Check that the HDF5 dataset was created by this Python module. if parent.attrs.get("QMI_DataSet") != 1: raise ValueError("HDF5 dataset not in expected format") # Create DataSet instance and read actual data. - name = parent.name.split("/")[-1] + name = source.name.split("/")[-1] if container is not None else parent.name.split("/")[-1] ndim = 0 ncol = 0 - dlen = 0 + column_labels: list[str] = [] for attr in parent.attrs: - if attr.startswith("QMI_DataSet_axis") and attr.endswith("label"): + if attr.startswith("QMI_DataSet_axis") and attr.endswith("_label"): ndim += 1 - if attr.startswith("QMI_DataSet_column") and attr.endswith("label"): + if attr.startswith("QMI_DataSet_column") and attr.endswith("_label"): ncol += 1 - dlen = max(dlen, len(parent[parent.attrs["QMI_DataSet_column0_label"]])) + column_labels.append(parent.attrs[attr]) + + if ncol > 0: + column_arrays = [np.asarray(parent[label]) for label in column_labels] + base_shape = column_arrays[0].shape + for arr in column_arrays[1:]: + if arr.shape != base_shape: + raise ValueError("Column datasets do not have matching shapes") - shape = (dlen, ncol) if ncol > 0 else (dlen,) - dataset = DataSet(name=name, shape=shape) + data = np.stack(column_arrays, axis=-1) + dataset = DataSet(name=name, data=data) + + else: + dataset = DataSet(name=name, data=np.asarray(source)) # Read timestamp. dataset.timestamp = parent.attrs["QMI_DataSet_timestamp"] @@ -439,34 +454,20 @@ def read_dataset_from_hdf5(parent: h5py.File | h5netcdf.File | h5py.Group | h5ne for col in range(ncol): dataset.column_label[col] = parent.attrs.get(f"QMI_DataSet_column{col}_label", "") dataset.column_unit[col] = parent.attrs.get(f"QMI_DataSet_column{col}_unit", "") - dataset.data[:, col] = np.array(parent[dataset.column_label[col]]) + dataset.column_name[col] = parent.attrs.get(f"QMI_DataSet_column{col}_name", "") - if isinstance(parent, h5py.Group): - # Read dimension scales. - for axis in range(ndim): - ds = parent[dataset.axis_label[axis]] - if len(ds.dims[axis]) > 0: - scale = ds.dims[axis][0] - if scale.shape != (dataset.data.shape[axis],): - raise ValueError(f"Invalid shape of dimension scale for axis {axis}") - - dataset.axis_scale[axis] = scale[:] + for axis in range(ndim): + scale_name = dataset.axis_label[axis] + if scale_name and scale_name in parent: + scale = np.asarray(parent[scale_name]) + if scale.shape != (dataset.data.shape[axis],): + raise ValueError(f"Invalid shape of dimension scale for axis {axis}") - else: - # Read dimension scales from sibling variables. - for axis in range(ndim): - scale_name = f"{dataset.name}_axis{axis}_scale" - if scale_name in parent: - scale = parent[scale_name] - if scale.shape != (dataset.data.shape[axis],): - raise ValueError(f"Invalid shape of dimension scale for axis {axis}") - - dataset.axis_scale[axis] = scale[:] + dataset.axis_scale[axis] = scale # Read custom attributes. - for (name, value) in parent.attrs.items(): - # if not name.startswith("QMI_DataSet") and not name.startswith("DIMENSION_") \ - if not name.startswith("DIMENSION_") and not name.startswith(f"{dataset.name}_axis"): + for name, value in parent.attrs.items(): + if not name.startswith("QMI_DataSet") and not name.startswith("DIMENSION_"): dataset.attrs[name] = value return dataset diff --git a/qmi/data/datastore.py b/qmi/data/datastore.py index cdc42db6..558d96d2 100644 --- a/qmi/data/datastore.py +++ b/qmi/data/datastore.py @@ -176,15 +176,16 @@ def write_dataset( # Add QMI version to file f.attrs["QMI_version"] = qmi.__version__ f.attrs[QMI_DATASET.format(ds_count=0)] = ds.name - qmi.data.dataset.write_dataset_to_hdf5(ds, f) + grp = f.create_group(ds.name) + qmi.data.dataset.write_dataset_to_hdf5(ds, grp) elif backend == "h5netcdf": with h5netcdf.File(file_path, "w" if overwrite else "x", decode_vlen_strings=False) as f: # Add QMI version to file f.attrs["QMI_version"] = qmi.__version__ f.attrs[QMI_DATASET.format(ds_count=0)] = ds.name - f.dimensions[ds.name] = None - qmi.data.dataset.write_dataset_to_hdf5(ds, f) + grp = f.create_group(ds.name) + qmi.data.dataset.write_dataset_to_hdf5(ds, grp) else: raise ValueError(f"Invalid backend type {backend}.") @@ -236,14 +237,14 @@ def read_dataset(self, name: str, backend: str = "h5py") -> DataSet: if name not in f: raise FileNotFoundError(f"No dataset {name!r} found in {file_path}.") - return qmi.data.dataset.read_dataset_from_hdf5(f[name], None) + return qmi.data.dataset.read_dataset_from_hdf5(f[name]) elif backend == "h5netcdf": with h5netcdf.File(file_path, "r", decode_vlen_strings=False) as f: if name not in f: raise FileNotFoundError(f"No dataset {name!r} found in {file_path}.") - return qmi.data.dataset.read_dataset_from_hdf5(f[name], f) + return qmi.data.dataset.read_dataset_from_hdf5(f[name]) else: raise ValueError(f"Invalid backend type {backend}.") diff --git a/tests/data/test_dataset.py b/tests/data/test_dataset.py index c27e8413..3edbbaff 100644 --- a/tests/data/test_dataset.py +++ b/tests/data/test_dataset.py @@ -278,8 +278,7 @@ def test_40_write_hdf5_simple(self): self.assertEqual(ds.column_label[e], f[ds_name].attrs[f"QMI_DataSet_column{e}_label"]) self.assertEqual(ds.column_unit[e], f[ds_name].attrs[f"QMI_DataSet_column{e}_unit"],) - ds.column_label.sort() - self.assertListEqual(list(f[ds_name].keys()), ds.axis_label + ds.column_label) + self.assertCountEqual(list(f[ds_name].keys()), ds.axis_label + ds.column_label) self.assertEqual(f[ds_name].attrs["QMI_DataSet_axis0_label"], "X axis") self.assertEqual(f[ds_name].attrs["QMI_DataSet_axis0_unit"], "mm") @@ -291,51 +290,49 @@ def test_40_write_hdf5_simple(self): def test_41_write_read_hdf5(self): """Writing and reading various datasets as HDF5 with h5py backend.""" - f = h5py.File("test.h5", "w", driver="core", backing_store=False) datasets = [] + with h5py.File("test.h5", "w", driver="core", backing_store=False) as f: + # Create datasets and write to file. + for (name, shape, dtype) in [ + ("t1", (4, 4), np.float64), + ("t2", (4, 4), np.float64), + ("t3", (3, 3, 3, 3), np.float64), + ("t4", (4, 4, 1), np.int32)]: + ds = _internal_create_dataset(name, + shape, + dtype, + add_labels=True, + add_scale=True, + add_attributes=True) + datasets.append(ds) + grp = f.create_group(name) + qmi.data.dataset.write_dataset_to_hdf5(ds, grp) - # Create datasets and write to file. - for (name, shape, dtype) in [ - ("t1", (4, 4), np.float64), - ("t2", (4, 4), np.float64), - ("t3", (3, 3, 3, 3), np.float64), - ("t4", (4, 4, 1), np.int32)]: - ds = _internal_create_dataset(name, - shape, - dtype, - add_labels=True, - add_scale=True, - add_attributes=True) - datasets.append(ds) - grp = f.create_group(name) - qmi.data.dataset.write_dataset_to_hdf5(ds, grp) + # Read back from file and verify. + for ds in datasets: + ds2 = qmi.data.dataset.read_dataset_from_hdf5(f[ds.name]) + self.assertEqual(ds2.name, ds.name) + self.assertIsInstance(ds2.data, np.ndarray) + self.assertEqual(ds.data.shape, ds2.data.shape) + self.assertEqual(ds.data.dtype, ds2.data.dtype) + self.assertTrue(np.all(ds2.data == ds.data)) + self.assertEqual(ds.column_label, ds2.column_label) + self.assertEqual(ds.column_unit, ds2.column_unit) + # All ds attributes should be in ds2. + for attr in ds.attrs: + self.assertIn(attr, ds2.attrs) + + self.assertEqual(len(ds.axis_scale), len(ds2.axis_scale)) + for e, label in enumerate(ds.axis_label): + self.assertEqual(ds2.axis_label[e], label) + self.assertEqual(ds2.axis_unit[e], ds.axis_unit[e]) - # Read back from file and verify. - for ds in datasets: - ds2 = qmi.data.dataset.read_dataset_from_hdf5(f[ds.name]) - self.assertEqual(ds2.name, ds.name) - # for e, label in enumerate(ds.column_label): - # col = ds2) - self.assertIsInstance(ds2.data, np.ndarray) - self.assertEqual(ds.data.shape, ds2.data.shape) - self.assertEqual(ds.data.dtype, ds2.data.dtype) - self.assertTrue(np.all(ds2.data == ds.data)) - self.assertEqual(ds.column_label, ds2.column_label) - self.assertEqual(ds.column_unit, ds2.column_unit) - self.assertEqual(ds.attrs, ds2.attrs) - - for e, label in enumerate(ds.axis_label): - self.assertEqual(ds2.axis_label, ds.axis_label) - self.assertEqual(ds2.axis_unit, ds.axis_unit) - self.assertEqual(len(ds2.axis_scale), len(ds.axis_scale)) for axis in range(len(ds.axis_scale)): if ds.axis_scale[axis] is None: self.assertIsNone(ds2.axis_scale[axis]) else: self.assertTrue(np.all(ds2.axis_scale[axis] == ds.axis_scale[axis])) - f.close() - def test_42_write_hdf5_raises_exception_on_invalid_attrs_name(self): """If attrs name is equal or starting with 'QMI_DataSet' or 'DIMENSION_', an exception is raised.""" ds_name = "my_dataset" @@ -370,7 +367,6 @@ def test_42_write_hdf5_raises_exception_on_invalid_attrs_name(self): def test_43_write_hdf5_simple(self): """Writing a simple dataset as HDF5 with h5netcdf backend.""" ds_name = "my_dataset" - ds_scale_name = ds_name + "_axis0_scale" data = 1.4142 * (np.arange(24).reshape(8, 3) - 1) ds = DataSet(ds_name, data=data) ds.axis_label[0] = "X axis" @@ -382,43 +378,39 @@ def test_43_write_hdf5_simple(self): ds.attrs["hello"] = "world" ds.attrs["number"] = 2.71 - f = h5netcdf.File("test.h5", "w", driver="core", backing_store=False, decode_vlen_strings=False) - qmi.data.dataset.write_dataset_to_hdf5(ds, f) - - self.assertEqual(set(f.keys()), {ds_name, ds_scale_name}) - self.assertEqual(f[ds_name].shape, (8, 3)) - self.assertEqual(f[ds_name].dtype, np.float64) - self.assertTrue(np.all(data == f[ds_name])) - - self.assertEqual(f[ds_name].attrs["QMI_DataSet_axis0_label"], "X axis") - self.assertEqual(f[ds_name].attrs["QMI_DataSet_axis0_unit"], "mm") - self.assertEqual(f[ds_name].attrs["QMI_DataSet_column1_label"], "green") - self.assertEqual(f[ds_name].attrs["QMI_DataSet_column1_unit"], "nm") + with h5netcdf.File("test.h5", "w", driver="core", backing_store=False, decode_vlen_strings=False) as f: + grp = f.create_group(ds.name) + qmi.data.dataset.write_dataset_to_hdf5(ds, grp) + self.assertListEqual([ds_name], list(f.keys())) + for e, col in enumerate(ds.column_label): + self.assertEqual((8,), f[ds_name][col].shape) + self.assertEqual(np.float64, f[ds_name][col].dtype) + self.assertTrue(np.all(data[:, e] == f[ds_name][col])) + self.assertEqual(ds.column_label[e], f[ds_name].attrs[f"QMI_DataSet_column{e}_label"]) + self.assertEqual(ds.column_unit[e], f[ds_name].attrs[f"QMI_DataSet_column{e}_unit"],) - self.assertEqual(f[ds_name].dimensions[0], "X axis") - self.assertTrue(np.all(scale_data == f[ds_name].attrs.get(ds_scale_name))) + self.assertCountEqual(list(f[ds_name].keys()), ds.axis_label + ds.column_label) + self.assertEqual(f[ds_name].attrs["QMI_DataSet_axis0_label"], "X axis") + self.assertEqual(f[ds_name].attrs["QMI_DataSet_axis0_unit"], "mm") - self.assertEqual(f[ds_name].attrs["hello"], "world") - self.assertEqual(f[ds_name].attrs["number"], 2.71) + self.assertTrue(np.all(scale_data == np.array(f[ds_name]["X axis"]))) - f.close() + self.assertEqual(f[ds_name].attrs["hello"], "world") + self.assertEqual(f[ds_name].attrs["number"], 2.71) def test_44_write_read_hdf5(self): - """Writing and reading various datasets as HDF5.""" + """Writing and reading various datasets as HDF5 with h5netcdf backend.""" datasets = [] - - # Create datasets and write to file. - for (name, shape, dtype) in [ - ("t1", (4, 4), np.float64), - ("t2", (4, 4), np.float64), - ("t3", (3, 3, 3, 3), np.float64), - ("t4", (4, 4, 1), np.int32) - ]: - # h5netcdf does not clear the dataset from the backend. Thus we need to open-close the file on each test - with h5netcdf.File( - "test.h5", "w", driver="core", backing_store=False, decode_vlen_strings=False - ) as f: + # h5netcdf does not clear the dataset from the backend. Thus we need to open-close the file on each test + with h5netcdf.File("test.h5", "w", driver="core", backing_store=False, decode_vlen_strings=False) as f: + # Create datasets and write to file. + for (name, shape, dtype) in [ + ("t1", (4, 4), np.float64), + ("t2", (4, 4), np.float64), + ("t3", (3, 3, 3, 3), np.float64), + ("t4", (4, 4, 1), np.int32) + ]: ds = _internal_create_dataset( name, shape, @@ -428,30 +420,38 @@ def test_44_write_read_hdf5(self): add_attributes=True ) datasets.append(ds) - qmi.data.dataset.write_dataset_to_hdf5(ds, f) + grp = f.create_group(name) + qmi.data.dataset.write_dataset_to_hdf5(ds, grp) - # Read back from file and verify. - ds2 = qmi.data.dataset.read_dataset_from_hdf5(f[ds.name], f) + # Read back from file and verify. + for ds in datasets: + ds2 = qmi.data.dataset.read_dataset_from_hdf5(f[ds.name]) self.assertEqual(ds2.name, ds.name) self.assertIsInstance(ds2.data, np.ndarray) - self.assertEqual(ds2.data.shape, ds.data.shape) - self.assertEqual(ds2.data.dtype, ds.data.dtype) + self.assertEqual(ds.data.shape, ds2.data.shape) + self.assertEqual(ds.data.dtype, ds2.data.dtype) self.assertTrue(np.all(ds2.data == ds.data)) - self.assertEqual(ds2.axis_label, ds.axis_label) - self.assertEqual(ds2.axis_unit, ds.axis_unit) - self.assertEqual(len(ds2.axis_scale), len(ds.axis_scale)) + self.assertEqual(ds.column_label, ds2.column_label) + self.assertEqual(ds.column_unit, ds2.column_unit) + # All ds attributes should be in ds2. + for attr in ds.attrs: + self.assertIn(attr, ds2.attrs) + + self.assertEqual(len(ds.axis_scale), len(ds2.axis_scale)) + for e, label in enumerate(ds.axis_label): + self.assertEqual(ds2.axis_label[e], label) + self.assertEqual(ds2.axis_unit[e], ds.axis_unit[e]) + for axis in range(len(ds.axis_scale)): if ds.axis_scale[axis] is None: self.assertIsNone(ds2.axis_scale[axis]) else: self.assertTrue(np.all(ds2.axis_scale[axis] == ds.axis_scale[axis])) - self.assertEqual(ds2.column_label, ds.column_label) - self.assertEqual(ds2.column_unit, ds.column_unit) - self.assertEqual(ds2.attrs, ds.attrs) - def test_45_write_hdf5_raises_exception_on_invalid_attrs_name(self): - """If attrs name is equal or starting with 'QMI_DataSet' or 'DIMENSION_', and exception is raised""" + """If attrs name is equal or starting with 'QMI_DataSet' or 'DIMENSION_', and exception is raised. + This is done now with h5netcdf backend. + """ ds_name = "my_dataset" data = 1.4142 * (np.arange(24).reshape(8, 3) - 1) ds = DataSet(ds_name, data=data) From c58ba513802472a3faeaafc7c19ea30d688695f9 Mon Sep 17 00:00:00 2001 From: Henri Ervasti Date: Thu, 16 Apr 2026 17:54:37 +0200 Subject: [PATCH 03/25] [200-qmi-dataset-reformulation] now tested to work, but needs some unittest extensions. --- qmi/data/dataset.py | 51 +++++++++++++++++++++++++------------------ qmi/data/datastore.py | 8 +++---- 2 files changed, 34 insertions(+), 25 deletions(-) diff --git a/qmi/data/dataset.py b/qmi/data/dataset.py index 7fc9e3ca..c0b76adb 100644 --- a/qmi/data/dataset.py +++ b/qmi/data/dataset.py @@ -98,15 +98,15 @@ def __init__( self.data = np.zeros(tuple(shape), dtype=dtype) # Check shape. - ndim = len(self.data.shape) - 1 - ncol = self.data.shape[-1] if ndim > 0 else 0 + self.__ndim = len(self.data.shape) - 1 + ncol = self.data.shape[-1] if self.__ndim > 0 else 0 if np.min(self.data.shape) < 1: raise ValueError("Zero-size or negative size axes are not allowed.") # Initialize axis labels. - self.axis_label: list[str] = [""] * ndim - self.axis_unit: list[str] = [""] * ndim - self.axis_scale: list[np.ndarray | None] = [None] * ndim + self.axis_label: list[str] = [""] * self.__ndim if self.__ndim > 0 else [""] + self.axis_unit: list[str] = [""] * self.__ndim if self.__ndim > 0 else [""] + self.axis_scale: list[np.ndarray | None] = [None] * self.__ndim # Initialize column labels. self.column_label: list[str] = ncol * [""] @@ -116,19 +116,38 @@ def __init__( # Initialize empty set of attributes. self.attrs: dict[str, str | int | float] = {} - def set_axis_label(self, axis: int, label: str) -> None: - """Specify an axis label. + @property + def _ndim(self) -> int: + return self.__ndim + + def _check_axis_number(self, axis: int) -> None: + """Check that an axis number is valid. Parameters: axis: Axis number (0, 1, ...). - label: Label string of the axis. + + Raises: + TypeError: If axis parameter is not an integer. + ValueError: If the axis value is not valid, e.g. larger than defined axes at dataset initialization. """ if not isinstance(axis, int): raise TypeError("Parameter 'axis' must be an integer.") + + if axis == 0: + # Zero axis should always be fine. + return None - if axis < 0 or axis >= len(self.axis_label): + if axis < 0 or axis >= self._ndim: raise ValueError("Invalid value for parameter 'axis'.") + def set_axis_label(self, axis: int, label: str) -> None: + """Specify an axis label. + + Parameters: + axis: Axis number (0, 1, ...). + label: Label string of the axis. + """ + self._check_axis_number(axis) self.axis_label[axis] = label def set_axis_unit(self, axis: int, unit: str) -> None: @@ -138,12 +157,7 @@ def set_axis_unit(self, axis: int, unit: str) -> None: axis: Axis number (0, 1, ...). unit: Unit string of the axis. """ - if not isinstance(axis, int): - raise TypeError("Parameter 'axis' must be an integer.") - - if axis < 0 or axis >= len(self.axis_unit): - raise ValueError("Invalid value for parameter 'axis'.") - + self._check_axis_number(axis) self.axis_unit[axis] = unit def set_axis_scale(self, axis: int, scale: np.ndarray) -> None: @@ -153,12 +167,7 @@ def set_axis_scale(self, axis: int, scale: np.ndarray) -> None: axis: Axis to which the mapping applies (the first axis has number 0). scale: 1D Numpy array of values along the axis. The length must match the size of the axis. """ - if not isinstance(axis, int): - raise TypeError("Parameter 'axis' must be an integer.") - - if axis < 0 or axis >= len(self.data.shape) - 1: - raise ValueError("Invalid value for parameter 'axis'.") - + self._check_axis_number(axis) v = np.array(scale) if v.shape != (self.data.shape[axis],): raise ValueError("Invalid shape for scale array.") diff --git a/qmi/data/datastore.py b/qmi/data/datastore.py index 558d96d2..67a61ba4 100644 --- a/qmi/data/datastore.py +++ b/qmi/data/datastore.py @@ -176,7 +176,7 @@ def write_dataset( # Add QMI version to file f.attrs["QMI_version"] = qmi.__version__ f.attrs[QMI_DATASET.format(ds_count=0)] = ds.name - grp = f.create_group(ds.name) + grp = f.create_group(ds.name) if ds._ndim > 0 else f qmi.data.dataset.write_dataset_to_hdf5(ds, grp) elif backend == "h5netcdf": @@ -184,7 +184,7 @@ def write_dataset( # Add QMI version to file f.attrs["QMI_version"] = qmi.__version__ f.attrs[QMI_DATASET.format(ds_count=0)] = ds.name - grp = f.create_group(ds.name) + grp = f.create_group(ds.name) if ds._ndim > 0 else f qmi.data.dataset.write_dataset_to_hdf5(ds, grp) else: @@ -291,8 +291,8 @@ def add_dataset_to_file( ds: DataSet, root_attrs: dict[ str, str | int | float | complex | str | np.ndarray | np.integer | list[ - int, float, complex, str - ] | tuple[int, float, complex, str] + int | float | complex | str + ] | tuple[int | float | complex | str, ...] ] | None = None ) -> None: """Add a dataset, and optional file attributes to an existing HDF5 file. From 21f4e562f042bd2da0a38649fe541eb06852e64d Mon Sep 17 00:00:00 2001 From: Henri Ervasti Date: Fri, 17 Apr 2026 18:04:04 +0200 Subject: [PATCH 04/25] [200-qmi-dataset-reformulation] Adding "long name" variable also for dimension axes in QMI datasets. "QMI_Dataset": 1 now gets automatically assigned when one is initialized. Also writing the same variable into new HDF5 file's root to make clear we are using QMI to create the file - and the datasets | groups inside it should be therefore also QMI. --- qmi/data/dataset.py | 177 ++++++++++++++++++++++++++++++++++++------ qmi/data/datastore.py | 7 +- 2 files changed, 158 insertions(+), 26 deletions(-) diff --git a/qmi/data/dataset.py b/qmi/data/dataset.py index c0b76adb..24d1f57b 100644 --- a/qmi/data/dataset.py +++ b/qmi/data/dataset.py @@ -106,6 +106,7 @@ def __init__( # Initialize axis labels. self.axis_label: list[str] = [""] * self.__ndim if self.__ndim > 0 else [""] self.axis_unit: list[str] = [""] * self.__ndim if self.__ndim > 0 else [""] + self.axis_name: list[str] = [""] * self.__ndim if self.__ndim > 0 else [""] self.axis_scale: list[np.ndarray | None] = [None] * self.__ndim # Initialize column labels. @@ -113,8 +114,8 @@ def __init__( self.column_unit: list[str] = ncol * [""] self.column_name: list[str] = ncol * [""] - # Initialize empty set of attributes. - self.attrs: dict[str, str | int | float] = {} + # Initialize set of attributes. + self.attrs: dict[str, str | int | float] = {"QMI_Dataset": 1} @property def _ndim(self) -> int: @@ -160,6 +161,16 @@ def set_axis_unit(self, axis: int, unit: str) -> None: self._check_axis_number(axis) self.axis_unit[axis] = unit + def set_axis_name(self, axis: int, name: str) -> None: + """Specify an axis 'long' name. + + Parameters: + axis: Axis number (0, 1, ...). + name: 'Long' name string of the axis. + """ + self._check_axis_number(axis) + self.axis_name[axis] = name + def set_axis_scale(self, axis: int, scale: np.ndarray) -> None: """Specify a mapping from array indices to physical values along an axis. @@ -307,16 +318,19 @@ def write_dataset_to_hdf5(dataset: DataSet, hdf_group: h5py.Group | h5netcdf.Gro ncol = dataset.data.shape[-1] if ndim > 0 else 0 # Special timestamp attribute. - hdf_group.attrs["QMI_DataSet_timestamp"] = dataset.timestamp - hdf_group.attrs["QMI_DataSet_time_str"] = time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime(dataset.timestamp)) + hdf_group.attrs[f"{hdf_group.name}_timestamp"] = dataset.timestamp + hdf_group.attrs[f"{hdf_group.name}_time_str"] = time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime(dataset.timestamp)) # Special attributes for axis labels / units. for axis in range(ndim): if dataset.axis_label[axis]: - hdf_group.attrs[f"QMI_DataSet_axis{axis}_label"] = dataset.axis_label[axis] + hdf_group.attrs[f"{hdf_group.name}_axis{axis}_label"] = dataset.axis_label[axis] if dataset.axis_unit[axis]: - hdf_group.attrs[f"QMI_DataSet_axis{axis}_unit"] = dataset.axis_unit[axis] + hdf_group.attrs[f"{hdf_group.name}_axis{axis}_unit"] = dataset.axis_unit[axis] + + if dataset.axis_name[axis]: + hdf_group.attrs[f"{hdf_group.name}_axis{axis}_name"] = dataset.axis_name[axis] if not ncol: # We have only one single array of data. @@ -332,6 +346,7 @@ def write_dataset_to_hdf5(dataset: DataSet, hdf_group: h5py.Group | h5netcdf.Gro ds.attrs["unit"] = dataset.axis_label[0] ds.attrs["name"] = dataset.axis_unit[0] + ds.attrs["long_name"] = dataset.axis_name[0] for col in range(ncol): if isinstance(hdf_group, h5py.Group): @@ -352,15 +367,15 @@ def write_dataset_to_hdf5(dataset: DataSet, hdf_group: h5py.Group | h5netcdf.Gro # Special attributes for column labels / units. if dataset.column_label[col]: - hdf_group.attrs[f"QMI_DataSet_column{col}_label"] = dataset.column_label[col] + hdf_group.attrs[f"{hdf_group.name}_column{col}_label"] = dataset.column_label[col] ds.attrs["name"] = dataset.column_label[col] if dataset.column_unit[col]: - hdf_group.attrs[f"QMI_DataSet_column{col}_unit"] = dataset.column_unit[col] + hdf_group.attrs[f"{hdf_group.name}_column{col}_unit"] = dataset.column_unit[col] ds.attrs["unit"] = dataset.column_unit[col] if dataset.column_name[col]: - hdf_group.attrs[f"QMI_DataSet_column{col}_name"] = dataset.column_name[col] + hdf_group.attrs[f"{hdf_group.name}_column{col}_name"] = dataset.column_name[col] ds.attrs["long_name"] = dataset.column_name[col] # Dimension scales for scale axis. @@ -377,6 +392,7 @@ def write_dataset_to_hdf5(dataset: DataSet, hdf_group: h5py.Group | h5netcdf.Gro ds_scale = hdf_group.create_dataset(scale_name, data=dataset.axis_scale[axis]) ds_scale.attrs["unit"] = dataset.axis_unit[axis] ds_scale.attrs["name"] = dataset.axis_label[axis] + ds_scale.attrs["long_name"] = dataset.axis_name[axis] # Attach the dimension scale to the axis. ds_scale.make_scale(scale_name) ds.dims[axis].attach_scale(ds_scale) @@ -391,17 +407,15 @@ def write_dataset_to_hdf5(dataset: DataSet, hdf_group: h5py.Group | h5netcdf.Gro ) ds_scale.attrs["unit"] = dataset.axis_unit[axis] ds_scale.attrs["name"] = dataset.axis_label[axis] + ds_scale.attrs["long_name"] = dataset.axis_name[axis] # Custom attributes. for (name, value) in dataset.attrs.items(): - if name.startswith("QMI_DataSet") or name.startswith("DIMENSION_"): + if name.startswith(f"{hdf_group.name}") or name.startswith("DIMENSION_"): raise ValueError(f"Invalid use of special attribute name {name!r}") hdf_group.attrs[name] = value - # Special attribute to recognize format. - hdf_group.attrs["QMI_DataSet"] = 1 - def read_dataset_from_hdf5( parent: h5py.File | h5netcdf.File | h5py.Group | h5netcdf.Group | h5py.Dataset | h5netcdf.Variable, @@ -424,8 +438,8 @@ def read_dataset_from_hdf5( parent = container # Check that the HDF5 dataset was created by this Python module. - if parent.attrs.get("QMI_DataSet") != 1: - raise ValueError("HDF5 dataset not in expected format") + if source.attrs.get("QMI_DataSet", 0) != 1 and parent.attrs.get("QMI_DataSet", 0) != 1: + return convert_to_qmi_dataset(source) # Create DataSet instance and read actual data. name = source.name.split("/")[-1] if container is not None else parent.name.split("/")[-1] @@ -433,9 +447,9 @@ def read_dataset_from_hdf5( ncol = 0 column_labels: list[str] = [] for attr in parent.attrs: - if attr.startswith("QMI_DataSet_axis") and attr.endswith("_label"): + if attr.startswith(f"{source.name}_axis") and attr.endswith("_label"): ndim += 1 - if attr.startswith("QMI_DataSet_column") and attr.endswith("_label"): + if attr.startswith(f"{source.name}_column") and attr.endswith("_label"): ncol += 1 column_labels.append(parent.attrs[attr]) @@ -453,17 +467,18 @@ def read_dataset_from_hdf5( dataset = DataSet(name=name, data=np.asarray(source)) # Read timestamp. - dataset.timestamp = parent.attrs["QMI_DataSet_timestamp"] + dataset.timestamp = parent.attrs[f"{source.name}_timestamp"] # Read special attributes for labels. for axis in range(ndim): - dataset.axis_label[axis] = parent.attrs.get(f"QMI_DataSet_axis{axis}_label", "") - dataset.axis_unit[axis] = parent.attrs.get(f"QMI_DataSet_axis{axis}_unit", "") + dataset.axis_label[axis] = parent.attrs.get(f"{source.name}_axis{axis}_label", "") + dataset.axis_unit[axis] = parent.attrs.get(f"{source.name}_axis{axis}_unit", "") + dataset.axis_name[axis] = parent.attrs.get(f"{source.name}_axis{axis}_name", "") for col in range(ncol): - dataset.column_label[col] = parent.attrs.get(f"QMI_DataSet_column{col}_label", "") - dataset.column_unit[col] = parent.attrs.get(f"QMI_DataSet_column{col}_unit", "") - dataset.column_name[col] = parent.attrs.get(f"QMI_DataSet_column{col}_name", "") + dataset.column_label[col] = parent.attrs.get(f"{source.name}_column{col}_label", "") + dataset.column_unit[col] = parent.attrs.get(f"{source.name}_column{col}_unit", "") + dataset.column_name[col] = parent.attrs.get(f"{source.name}_column{col}_name", "") for axis in range(ndim): scale_name = dataset.axis_label[axis] @@ -476,12 +491,126 @@ def read_dataset_from_hdf5( # Read custom attributes. for name, value in parent.attrs.items(): - if not name.startswith("QMI_DataSet") and not name.startswith("DIMENSION_"): + if not name.startswith(f"{source.name}") and not name.startswith("DIMENSION_"): dataset.attrs[name] = value return dataset +def convert_to_qmi_dataset(parent: h5py.File | h5netcdf.File | h5py.Group | h5netcdf.Group | h5py.Dataset | h5netcdf.Variable) -> DataSet: + """A function to convert a HDF5 dataset, or a group, or file to a QMI dataset. + + If the input is a h5py.Dataset | h5netcdf.Variable, the dataset can have one or more dimensions. + + If the input is s h5py.Group | h5netcdf.Group, and the group has multiple datasets, the dataset attributes + are looked into if we can determine a scaled axis or column or columns, and data axis | axes. If so, + it will be converted into single QMI dataset with (multiple) ax[i|e]s and column[s]. Single dataset will be + converted as a 1D dataset + + If the input is a h5py.File | h5netcdf.File, and there are no groups, the handling is the same as for the group. + If there is a single group present, that will be taken and handled like a group. For multiple groups, + and error will be thrown. + """ + group: h5py.Group | h5netcdf.Group | None = None + axes: dict[str, h5py.Dataset | h5netcdf.Variable] = dict() + columns: dict[str, h5py.Dataset | h5netcdf.Variable] = dict() + if isinstance(parent, h5py.File | h5netcdf.File): + items_found = dict(parent) + # See if they are groups or datasets + for item, hdf5_obj in items_found.items(): + if isinstance(hdf5_obj, h5py.Group | h5netcdf.Group): + if group is not None: + raise RuntimeError("Cannot convert multiple groups from a HDF5 file.") + + group = hdf5_obj + + elif isinstance(hdf5_obj, h5py.Dataset | h5netcdf.Variable): + label = hdf5_obj.attrs.get("label", hdf5_obj.attrs.get("name", item)) + if (isinstance(hdf5_obj, h5py.Dataset) and not hdf5_obj.is_scale) or ( + isinstance(hdf5_obj, h5netcdf.Variable) and item not in hdf5_obj.dimensions + ): + columns[label] = hdf5_obj + + else: + axes[label] = hdf5_obj + + elif isinstance(parent, h5py.Group | h5netcdf.Group): + group = parent + + elif isinstance(parent, h5py.Dataset | h5netcdf.Variable): + axes.append(parent) + + if group is not None and len(datasets): + raise RuntimeError("Cannot convert a group AND dataset[s] from a HDF5 file.") + + elif group is not None: + items_found = dict(group) + # See if there are datasets + for item, hdf5_obj in items_found.items(): + label = hdf5_obj.attrs.get("label", (hdf5_obj.attrs.get("name"), item)) + if not hdf5_obj.is_scale: + columns[label] = hdf5_obj + + else: + axes[label] = hdf5_obj + + if not len(columns) and not len(axes): + raise RuntimeError("No datasets found to convert from the HDF5 file.") + + # Create DataSet instance and read actual data. + name = parent.name.split("/")[-1] + if not name: + name = parent.attrs["name"] if "name" in parent.attrs else "dataset" + + if (not len(columns) and len(axes) == 1) or (not len(axes) and len(columns) == 1): + # We have only one dataset axis | column. Create the QMI dataset with it and return it. + datasets = columns + axes + ds_name = datasets[0].attrs.get("long_name", datasets[0].attrs.get("name", name)) + qmi_dataset = DataSet(name=ds_name, data=datasets[0][:]) + qmi_dataset.axis_label[0] = datasets[0].attrs.get("label", datasets[0].attrs.get("name", name)) + qmi_dataset.axis_unit[0] = datasets[0].attrs.get("units", datasets[0].attrs.get("unit", "")) + qmi_dataset.axis_name[0] = datasets[0].attrs.get("long_name", "") + # Read custom attributes. + for name, value in parent.attrs.items(): + if not name.startswith("_") and not name.startswith("DIMENSION_"): + qmi_dataset.attrs[name] = value + + return qmi_dataset + + # Otherwise, there should be at least one "column" dataset present + column_arrays = [np.asarray(ds) for ds in columns.values()] + base_shape = column_arrays[0].shape + for arr in column_arrays[1:]: + if arr.shape != base_shape: + raise ValueError("Column datasets do not have matching shapes") + + # Create QMI dataset + data = np.stack(column_arrays, axis=-1) + qmi_dataset = DataSet(name=name, data=data) + for axis, (label, hdf5_obj) in enumerate(axes.items()): + qmi_dataset.set_axis_label(axis, label) + qmi_dataset.set_axis_unit(axis, str(hdf5_obj.attrs.get("units", hdf5_obj.attrs.get("unit", "")))) + qmi_dataset.set_axis_name(axis, str(hdf5_obj.attrs.get("long_name", ""))) + hdf5_obj_values = np.asarray(hdf5_obj) + if ( + np.issubdtype(hdf5_obj_values.dtype, np.number) + and np.all(np.isfinite(hdf5_obj_values)) + ): + qmi_dataset.set_axis_scale(axis, hdf5_obj_values) + + for e, label in enumerate(columns.keys()): + qmi_dataset.set_column_label(e, label) + qmi_dataset.set_column_unit(e, columns[label].attrs.get("units", columns[label].attrs.get("unit", ""))) + qmi_dataset.set_column_name(e, columns[label].attrs.get("long_name", "")) + + # Read custom attributes. + for name, value in parent.attrs.items(): + if not name.startswith("_") and not name.startswith("DIMENSION_"): + qmi_dataset.attrs[name] = value + + return qmi_dataset + + def write_dataset_to_text(dataset: DataSet, fh: TextIO) -> None: """Write the specified dataset to a text file. diff --git a/qmi/data/datastore.py b/qmi/data/datastore.py index 67a61ba4..0f352d6c 100644 --- a/qmi/data/datastore.py +++ b/qmi/data/datastore.py @@ -175,6 +175,7 @@ def write_dataset( with h5py.File(file_path, "w" if overwrite else "x") as f: # Add QMI version to file f.attrs["QMI_version"] = qmi.__version__ + f.attrs["QMI_Dataset"] = 1 f.attrs[QMI_DATASET.format(ds_count=0)] = ds.name grp = f.create_group(ds.name) if ds._ndim > 0 else f qmi.data.dataset.write_dataset_to_hdf5(ds, grp) @@ -183,6 +184,7 @@ def write_dataset( with h5netcdf.File(file_path, "w" if overwrite else "x", decode_vlen_strings=False) as f: # Add QMI version to file f.attrs["QMI_version"] = qmi.__version__ + f.attrs["QMI_Dataset"] = 1 f.attrs[QMI_DATASET.format(ds_count=0)] = ds.name grp = f.create_group(ds.name) if ds._ndim > 0 else f qmi.data.dataset.write_dataset_to_hdf5(ds, grp) @@ -267,6 +269,7 @@ def make_hdf5file(self, name: str, backend: str = "h5py") -> h5py.File | h5netcd hdf5_file = self._hdf5_file(name, "x", backend) # Add QMI version to file hdf5_file.attrs["QMI_version"] = qmi.__version__ + hdf5_file.attrs["QMI_Dataset"] = 1 return hdf5_file @@ -291,8 +294,8 @@ def add_dataset_to_file( ds: DataSet, root_attrs: dict[ str, str | int | float | complex | str | np.ndarray | np.integer | list[ - int | float | complex | str - ] | tuple[int | float | complex | str, ...] + int, float, complex, str + ] | tuple[int, float, complex, str] ] | None = None ) -> None: """Add a dataset, and optional file attributes to an existing HDF5 file. From 0b1b2fac86c841f9743bccb3cc6992ca554e3569 Mon Sep 17 00:00:00 2001 From: Henri Ervasti Date: Mon, 20 Apr 2026 13:19:16 +0200 Subject: [PATCH 05/25] [200-qmi-dataset-reformulation] Latest changes with working unit-tests. --- qmi/data/dataset.py | 68 +++++++++++++++++++----------------- tests/data/test_dataset.py | 49 ++++++++++++++------------ tests/data/test_datastore.py | 50 ++++++++++++++++++++++++-- 3 files changed, 111 insertions(+), 56 deletions(-) diff --git a/qmi/data/dataset.py b/qmi/data/dataset.py index 24d1f57b..36cdd4c6 100644 --- a/qmi/data/dataset.py +++ b/qmi/data/dataset.py @@ -316,21 +316,22 @@ def write_dataset_to_hdf5(dataset: DataSet, hdf_group: h5py.Group | h5netcdf.Gro ndim = len(dataset.data.shape) - 1 ncol = dataset.data.shape[-1] if ndim > 0 else 0 + group_name = hdf_group.name.strip("/") # Special timestamp attribute. - hdf_group.attrs[f"{hdf_group.name}_timestamp"] = dataset.timestamp - hdf_group.attrs[f"{hdf_group.name}_time_str"] = time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime(dataset.timestamp)) + hdf_group.attrs[f"{group_name}_timestamp"] = dataset.timestamp + hdf_group.attrs[f"{group_name}_time_str"] = time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime(dataset.timestamp)) # Special attributes for axis labels / units. for axis in range(ndim): if dataset.axis_label[axis]: - hdf_group.attrs[f"{hdf_group.name}_axis{axis}_label"] = dataset.axis_label[axis] + hdf_group.attrs[f"{group_name}_axis{axis}_label"] = dataset.axis_label[axis] if dataset.axis_unit[axis]: - hdf_group.attrs[f"{hdf_group.name}_axis{axis}_unit"] = dataset.axis_unit[axis] + hdf_group.attrs[f"{group_name}_axis{axis}_unit"] = dataset.axis_unit[axis] if dataset.axis_name[axis]: - hdf_group.attrs[f"{hdf_group.name}_axis{axis}_name"] = dataset.axis_name[axis] + hdf_group.attrs[f"{group_name}_axis{axis}_name"] = dataset.axis_name[axis] if not ncol: # We have only one single array of data. @@ -367,15 +368,15 @@ def write_dataset_to_hdf5(dataset: DataSet, hdf_group: h5py.Group | h5netcdf.Gro # Special attributes for column labels / units. if dataset.column_label[col]: - hdf_group.attrs[f"{hdf_group.name}_column{col}_label"] = dataset.column_label[col] + hdf_group.attrs[f"{group_name}_column{col}_label"] = dataset.column_label[col] ds.attrs["name"] = dataset.column_label[col] if dataset.column_unit[col]: - hdf_group.attrs[f"{hdf_group.name}_column{col}_unit"] = dataset.column_unit[col] + hdf_group.attrs[f"{group_name}_column{col}_unit"] = dataset.column_unit[col] ds.attrs["unit"] = dataset.column_unit[col] if dataset.column_name[col]: - hdf_group.attrs[f"{hdf_group.name}_column{col}_name"] = dataset.column_name[col] + hdf_group.attrs[f"{group_name}_column{col}_name"] = dataset.column_name[col] ds.attrs["long_name"] = dataset.column_name[col] # Dimension scales for scale axis. @@ -411,7 +412,7 @@ def write_dataset_to_hdf5(dataset: DataSet, hdf_group: h5py.Group | h5netcdf.Gro # Custom attributes. for (name, value) in dataset.attrs.items(): - if name.startswith(f"{hdf_group.name}") or name.startswith("DIMENSION_"): + if name.startswith(f"{group_name}") or name.startswith("DIMENSION_"): raise ValueError(f"Invalid use of special attribute name {name!r}") hdf_group.attrs[name] = value @@ -438,18 +439,19 @@ def read_dataset_from_hdf5( parent = container # Check that the HDF5 dataset was created by this Python module. - if source.attrs.get("QMI_DataSet", 0) != 1 and parent.attrs.get("QMI_DataSet", 0) != 1: + if source.attrs.get("QMI_Dataset", 0) != 1 and parent.attrs.get("QMI_Dataset", 0) != 1: return convert_to_qmi_dataset(source) # Create DataSet instance and read actual data. - name = source.name.split("/")[-1] if container is not None else parent.name.split("/")[-1] + source_name = source.name.split("/")[-1] + name = source_name if container is not None else parent.name.split("/")[-1] ndim = 0 ncol = 0 column_labels: list[str] = [] for attr in parent.attrs: - if attr.startswith(f"{source.name}_axis") and attr.endswith("_label"): + if attr.startswith(f"{source_name}_axis") and attr.endswith("_label"): ndim += 1 - if attr.startswith(f"{source.name}_column") and attr.endswith("_label"): + if attr.startswith(f"{source_name}_column") and attr.endswith("_label"): ncol += 1 column_labels.append(parent.attrs[attr]) @@ -467,18 +469,18 @@ def read_dataset_from_hdf5( dataset = DataSet(name=name, data=np.asarray(source)) # Read timestamp. - dataset.timestamp = parent.attrs[f"{source.name}_timestamp"] + dataset.timestamp = parent.attrs[f"{source_name}_timestamp"] # Read special attributes for labels. for axis in range(ndim): - dataset.axis_label[axis] = parent.attrs.get(f"{source.name}_axis{axis}_label", "") - dataset.axis_unit[axis] = parent.attrs.get(f"{source.name}_axis{axis}_unit", "") - dataset.axis_name[axis] = parent.attrs.get(f"{source.name}_axis{axis}_name", "") + dataset.axis_label[axis] = parent.attrs.get(f"{source_name}_axis{axis}_label", "") + dataset.axis_unit[axis] = parent.attrs.get(f"{source_name}_axis{axis}_unit", "") + dataset.axis_name[axis] = parent.attrs.get(f"{source_name}_axis{axis}_name", "") for col in range(ncol): - dataset.column_label[col] = parent.attrs.get(f"{source.name}_column{col}_label", "") - dataset.column_unit[col] = parent.attrs.get(f"{source.name}_column{col}_unit", "") - dataset.column_name[col] = parent.attrs.get(f"{source.name}_column{col}_name", "") + dataset.column_label[col] = parent.attrs.get(f"{source_name}_column{col}_label", "") + dataset.column_unit[col] = parent.attrs.get(f"{source_name}_column{col}_unit", "") + dataset.column_name[col] = parent.attrs.get(f"{source_name}_column{col}_name", "") for axis in range(ndim): scale_name = dataset.axis_label[axis] @@ -490,26 +492,26 @@ def read_dataset_from_hdf5( dataset.axis_scale[axis] = scale # Read custom attributes. - for name, value in parent.attrs.items(): - if not name.startswith(f"{source.name}") and not name.startswith("DIMENSION_"): - dataset.attrs[name] = value + for attr, value in parent.attrs.items(): + if not attr.startswith(f"{source_name}") and not attr.startswith("DIMENSION_"): + dataset.attrs[attr] = value return dataset def convert_to_qmi_dataset(parent: h5py.File | h5netcdf.File | h5py.Group | h5netcdf.Group | h5py.Dataset | h5netcdf.Variable) -> DataSet: - """A function to convert a HDF5 dataset, or a group, or file to a QMI dataset. + """A function to convert a HDF5 dataset, in a group, or in file root, to a QMI dataset. - If the input is a h5py.Dataset | h5netcdf.Variable, the dataset can have one or more dimensions. + If the input is a h5py.Dataset | h5netcdf.Variable, the dataset can have one or more dimensions. If the input is s h5py.Group | h5netcdf.Group, and the group has multiple datasets, the dataset attributes - are looked into if we can determine a scaled axis or column or columns, and data axis | axes. If so, - it will be converted into single QMI dataset with (multiple) ax[i|e]s and column[s]. Single dataset will be - converted as a 1D dataset + are looked into if we can determine a scaled axis | column or columns, and data axis | axes. If so, + it will be converted into single QMI dataset with (multiple) ax[i|e]s and column[s]. A single dataset will be + converted as a 1D dataset. If the input is a h5py.File | h5netcdf.File, and there are no groups, the handling is the same as for the group. - If there is a single group present, that will be taken and handled like a group. For multiple groups, - and error will be thrown. + If there is a single group present, that will be taken and handled like a group. For multiple groups in a file + an error will be thrown. """ group: h5py.Group | h5netcdf.Group | None = None axes: dict[str, h5py.Dataset | h5netcdf.Variable] = dict() @@ -540,7 +542,7 @@ def convert_to_qmi_dataset(parent: h5py.File | h5netcdf.File | h5py.Group | h5ne elif isinstance(parent, h5py.Dataset | h5netcdf.Variable): axes.append(parent) - if group is not None and len(datasets): + if group is not None and (len(columns) or len(axes)): raise RuntimeError("Cannot convert a group AND dataset[s] from a HDF5 file.") elif group is not None: @@ -548,7 +550,9 @@ def convert_to_qmi_dataset(parent: h5py.File | h5netcdf.File | h5py.Group | h5ne # See if there are datasets for item, hdf5_obj in items_found.items(): label = hdf5_obj.attrs.get("label", (hdf5_obj.attrs.get("name"), item)) - if not hdf5_obj.is_scale: + if (isinstance(hdf5_obj, h5py.Dataset) and not hdf5_obj.is_scale) or ( + isinstance(hdf5_obj, h5netcdf.Variable) and item not in hdf5_obj.dimensions + ): columns[label] = hdf5_obj else: diff --git a/tests/data/test_dataset.py b/tests/data/test_dataset.py index 3edbbaff..5f557015 100644 --- a/tests/data/test_dataset.py +++ b/tests/data/test_dataset.py @@ -82,23 +82,24 @@ def test_06_data_dimension_invalid(self): def test_10_create_empty_dataset(self): """Create a simple, empty DataSet instance.""" - + # Arrange + expected_root_attrs = {"QMI_Dataset": 1} ds_name = "empty_dataset" ds_shape = (8, 3) + # Act ds = DataSet(ds_name, shape=ds_shape) - + # Assert self.assertEqual(ds_name, ds.name) self.assertIsInstance(ds.data, np.ndarray) self.assertEqual(ds_shape, ds.data.shape) self.assertEqual(np.float64, ds.data.dtype) self.assertTrue(np.all(ds.data == 0)) - self.assertListEqual([""], ds.axis_label) self.assertListEqual([""], ds.axis_unit) self.assertListEqual([None], ds.axis_scale) self.assertListEqual(["", "", ""], ds.column_label) self.assertListEqual(["", "", ""], ds.column_unit) - self.assertDictEqual({}, ds.attrs) + self.assertDictEqual(expected_root_attrs, ds.attrs) def test_11_create_initialized_dataset(self): """Create a simple dataset from existing Numpy data.""" @@ -233,15 +234,17 @@ def test_26_invalid_column_unit(self): def test_30_dataset_1col(self): """Create a 3-dimensional, 1-column dataset and setting labels.""" - + # Arrange + expected_root_attrs = {"QMI_Dataset": 1} ds_name = "my_dataset" ds_shape = (2, 5, 1) data = np.arange(10).reshape(*ds_shape) + # Act ds = DataSet(ds_name, data=data) ds.set_axis_label(0, "X") ds.set_axis_label(1, "Y") ds.set_column_label(0, "Z") - + # Assert self.assertEqual(ds_name, ds.name) self.assertEqual(ds_shape, ds.data.shape) self.assertEqual(ds.axis_label, ["X", "Y"]) @@ -249,7 +252,7 @@ def test_30_dataset_1col(self): self.assertEqual(ds.axis_scale, [None, None]) self.assertEqual(ds.column_label, ["Z"]) self.assertEqual(ds.column_unit, [""]) - self.assertEqual(ds.attrs, {}) + self.assertEqual(expected_root_attrs, ds.attrs) def test_40_write_hdf5_simple(self): """Writing a simple dataset as HDF5 with h5py backend.""" @@ -275,12 +278,12 @@ def test_40_write_hdf5_simple(self): self.assertEqual((8,), f[ds_name][col].shape) self.assertEqual(np.float64, f[ds_name][col].dtype) self.assertTrue(np.all(data[:, e] == f[ds_name][col])) - self.assertEqual(ds.column_label[e], f[ds_name].attrs[f"QMI_DataSet_column{e}_label"]) - self.assertEqual(ds.column_unit[e], f[ds_name].attrs[f"QMI_DataSet_column{e}_unit"],) + self.assertEqual(ds.column_label[e], f[ds_name].attrs[f"{ds_name}_column{e}_label"]) + self.assertEqual(ds.column_unit[e], f[ds_name].attrs[f"{ds_name}_column{e}_unit"],) self.assertCountEqual(list(f[ds_name].keys()), ds.axis_label + ds.column_label) - self.assertEqual(f[ds_name].attrs["QMI_DataSet_axis0_label"], "X axis") - self.assertEqual(f[ds_name].attrs["QMI_DataSet_axis0_unit"], "mm") + self.assertEqual(f[ds_name].attrs[f"{ds_name}_axis0_label"], "X axis") + self.assertEqual(f[ds_name].attrs[f"{ds_name}_axis0_unit"], "mm") self.assertTrue(np.all(scale_data == np.array(f[ds_name]["X axis"]))) @@ -298,18 +301,20 @@ def test_41_write_read_hdf5(self): ("t2", (4, 4), np.float64), ("t3", (3, 3, 3, 3), np.float64), ("t4", (4, 4, 1), np.int32)]: - ds = _internal_create_dataset(name, - shape, - dtype, - add_labels=True, - add_scale=True, - add_attributes=True) + ds = _internal_create_dataset( + name, + shape, + dtype, + add_labels=True, + add_scale=True, + add_attributes=True + ) datasets.append(ds) grp = f.create_group(name) qmi.data.dataset.write_dataset_to_hdf5(ds, grp) # Read back from file and verify. - for ds in datasets: + for d, ds in enumerate(datasets): ds2 = qmi.data.dataset.read_dataset_from_hdf5(f[ds.name]) self.assertEqual(ds2.name, ds.name) self.assertIsInstance(ds2.data, np.ndarray) @@ -386,12 +391,12 @@ def test_43_write_hdf5_simple(self): self.assertEqual((8,), f[ds_name][col].shape) self.assertEqual(np.float64, f[ds_name][col].dtype) self.assertTrue(np.all(data[:, e] == f[ds_name][col])) - self.assertEqual(ds.column_label[e], f[ds_name].attrs[f"QMI_DataSet_column{e}_label"]) - self.assertEqual(ds.column_unit[e], f[ds_name].attrs[f"QMI_DataSet_column{e}_unit"],) + self.assertEqual(ds.column_label[e], f[ds_name].attrs[f"{ds_name}_column{e}_label"]) + self.assertEqual(ds.column_unit[e], f[ds_name].attrs[f"{ds_name}_column{e}_unit"],) self.assertCountEqual(list(f[ds_name].keys()), ds.axis_label + ds.column_label) - self.assertEqual(f[ds_name].attrs["QMI_DataSet_axis0_label"], "X axis") - self.assertEqual(f[ds_name].attrs["QMI_DataSet_axis0_unit"], "mm") + self.assertEqual(f[ds_name].attrs[f"{ds_name}_axis0_label"], "X axis") + self.assertEqual(f[ds_name].attrs[f"{ds_name}_axis0_unit"], "mm") self.assertTrue(np.all(scale_data == np.array(f[ds_name]["X axis"]))) diff --git a/tests/data/test_datastore.py b/tests/data/test_datastore.py index 41bfdfec..1825677c 100644 --- a/tests/data/test_datastore.py +++ b/tests/data/test_datastore.py @@ -138,7 +138,30 @@ def test_05_write_dataset_wrong_file_format_raises_exception(self): def test_06_read_dataset_in_hdf5(self): """See that we can read in a data set in HDF5 format.""" # Arrange - expected_dataset = _create_dataset() + expected_timestamp = 1776671773.6601706 + # expected_time_str = "2026-04-20T07:56:13" + with unittest.mock.patch("qmi.data.dataset.time") as time_patch: + time_patch.time = unittest.mock.Mock(return_value=expected_timestamp) + expected_dataset = _create_dataset() + + # ds_name = expected_dataset.name + # expected_attrs = expected_dataset.attrs.copy() + # expected_attrs.update( + # { + # f"{ds_name}_axis0_label": "X", + # f"{ds_name}_axis0_unit": "um", + # f"{ds_name}_axis1_label": "Z", + # f"{ds_name}_axis1_unit": "mm", + # f"{ds_name}_column0_label": "power", + # f"{ds_name}_column0_unit": "mW", + # f"{ds_name}_column1_label": "countrate", + # f"{ds_name}_column1_unit": "kHz", + # f"{ds_name}_column2_label": "temperature", + # f"{ds_name}_column2_unit": "K", + # f"{ds_name}_time_str": expected_time_str, + # f"{ds_name}_timestamp": expected_timestamp, + # } + # ) expected_file = os.path.join(os.getcwd(), expected_dataset.name + ".hdf5") try: self.datafolder.write_dataset(expected_dataset) @@ -163,8 +186,31 @@ def test_06_read_dataset_in_hdf5(self): def test_06b_read_dataset_in_hdf5_h5netcdf_backend(self): """See that we can read in a data set in HDF5 format with h5netcdf backend.""" # Arrange - expected_dataset = _create_dataset() + expected_timestamp = 1776671773.6601706 + # expected_time_str = "2026-04-20T07:56:13" + with unittest.mock.patch("qmi.data.dataset.time") as time_patch: + time_patch.time = unittest.mock.Mock(return_value=expected_timestamp) + expected_dataset = _create_dataset() + expected_file = os.path.join(os.getcwd(), expected_dataset.name + ".hdf5") + # ds_name = expected_dataset.name + # expected_attrs = expected_dataset.attrs.copy() + # expected_attrs.update( + # { + # f"{ds_name}_axis0_label": "X", + # f"{ds_name}_axis0_unit": "um", + # f"{ds_name}_axis1_label": "Z", + # f"{ds_name}_axis1_unit": "mm", + # f"{ds_name}_column0_label": "power", + # f"{ds_name}_column0_unit": "mW", + # f"{ds_name}_column1_label": "countrate", + # f"{ds_name}_column1_unit": "kHz", + # f"{ds_name}_column2_label": "temperature", + # f"{ds_name}_column2_unit": "K", + # f"{ds_name}_time_str": expected_time_str, + # f"{ds_name}_timestamp": expected_timestamp, + # } + # ) try: self.datafolder.write_dataset(expected_dataset, backend="h5netcdf") # Act From 0dba0a6072197e84b5b7018a832eaf9253b13f93 Mon Sep 17 00:00:00 2001 From: Henri Ervasti Date: Mon, 20 Apr 2026 13:44:28 +0200 Subject: [PATCH 06/25] [200-qmi-dataset-reformulation] ruff and mypy fixes --- qmi/data/dataset.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/qmi/data/dataset.py b/qmi/data/dataset.py index 36cdd4c6..9ee19f33 100644 --- a/qmi/data/dataset.py +++ b/qmi/data/dataset.py @@ -540,9 +540,9 @@ def convert_to_qmi_dataset(parent: h5py.File | h5netcdf.File | h5py.Group | h5ne group = parent elif isinstance(parent, h5py.Dataset | h5netcdf.Variable): - axes.append(parent) + axes[parent.name.split("/")] = parent - if group is not None and (len(columns) or len(axes)): + if group is not None and (columns or axes): raise RuntimeError("Cannot convert a group AND dataset[s] from a HDF5 file.") elif group is not None: @@ -558,7 +558,7 @@ def convert_to_qmi_dataset(parent: h5py.File | h5netcdf.File | h5py.Group | h5ne else: axes[label] = hdf5_obj - if not len(columns) and not len(axes): + if not columns and not axes: raise RuntimeError("No datasets found to convert from the HDF5 file.") # Create DataSet instance and read actual data. @@ -566,14 +566,21 @@ def convert_to_qmi_dataset(parent: h5py.File | h5netcdf.File | h5py.Group | h5ne if not name: name = parent.attrs["name"] if "name" in parent.attrs else "dataset" - if (not len(columns) and len(axes) == 1) or (not len(axes) and len(columns) == 1): + if (not columns and len(axes) == 1) or (not axes and len(columns) == 1): # We have only one dataset axis | column. Create the QMI dataset with it and return it. - datasets = columns + axes - ds_name = datasets[0].attrs.get("long_name", datasets[0].attrs.get("name", name)) - qmi_dataset = DataSet(name=ds_name, data=datasets[0][:]) - qmi_dataset.axis_label[0] = datasets[0].attrs.get("label", datasets[0].attrs.get("name", name)) - qmi_dataset.axis_unit[0] = datasets[0].attrs.get("units", datasets[0].attrs.get("unit", "")) - qmi_dataset.axis_name[0] = datasets[0].attrs.get("long_name", "") + datasets = columns | axes + ds_name = datasets["long_name"] if "long_name" in datasets else datasets["name"] + qmi_dataset = DataSet(name=ds_name, data=datasets[:]) + qmi_dataset.axis_label[0] = datasets["label"] if "label" in datasets else "" + if not qmi_dataset.axis_label[0]: + qmi_dataset.axis_label[0] = datasets["name"] if "name" in datasets else name + + qmi_dataset.axis_unit[0] = datasets["units"] if "units" in datasets else "" + if not qmi_dataset.axis_unit[0]: + # Try alternative name + qmi_dataset.axis_unit[0] = datasets["unit"] if "unit" in datasets else "" + + qmi_dataset.axis_name[0] = datasets["long_name"] if "long_name" in datasets else "" # Read custom attributes. for name, value in parent.attrs.items(): if not name.startswith("_") and not name.startswith("DIMENSION_"): From 7ea5582c08fa99f4b22950e88d333621e87ec60e Mon Sep 17 00:00:00 2001 From: Henri Ervasti Date: Mon, 20 Apr 2026 13:49:45 +0200 Subject: [PATCH 07/25] [200-qmi-dataset-reformulation] Further mypy fixes. --- qmi/data/dataset.py | 2 +- qmi/data/datastore.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/qmi/data/dataset.py b/qmi/data/dataset.py index 9ee19f33..cf5bca91 100644 --- a/qmi/data/dataset.py +++ b/qmi/data/dataset.py @@ -570,7 +570,7 @@ def convert_to_qmi_dataset(parent: h5py.File | h5netcdf.File | h5py.Group | h5ne # We have only one dataset axis | column. Create the QMI dataset with it and return it. datasets = columns | axes ds_name = datasets["long_name"] if "long_name" in datasets else datasets["name"] - qmi_dataset = DataSet(name=ds_name, data=datasets[:]) + qmi_dataset = DataSet(name=ds_name, data=next(iter(datasets.values()))) qmi_dataset.axis_label[0] = datasets["label"] if "label" in datasets else "" if not qmi_dataset.axis_label[0]: qmi_dataset.axis_label[0] = datasets["name"] if "name" in datasets else name diff --git a/qmi/data/datastore.py b/qmi/data/datastore.py index 0f352d6c..427469fd 100644 --- a/qmi/data/datastore.py +++ b/qmi/data/datastore.py @@ -294,8 +294,8 @@ def add_dataset_to_file( ds: DataSet, root_attrs: dict[ str, str | int | float | complex | str | np.ndarray | np.integer | list[ - int, float, complex, str - ] | tuple[int, float, complex, str] + int | float | complex | str + ] | tuple[int | float | complex | str ,...] ] | None = None ) -> None: """Add a dataset, and optional file attributes to an existing HDF5 file. From 36c28115359c2d8db0b470f66ef01c26b7d00572 Mon Sep 17 00:00:00 2001 From: Henri Ervasti Date: Mon, 4 May 2026 14:51:34 +0200 Subject: [PATCH 08/25] [200-qmi-dataset-reformulation] Re-indexing tests. --- qmi/data/dataset.py | 3 ++- tests/data/test_dataset.py | 20 +++++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/qmi/data/dataset.py b/qmi/data/dataset.py index cf5bca91..f0641305 100644 --- a/qmi/data/dataset.py +++ b/qmi/data/dataset.py @@ -98,7 +98,8 @@ def __init__( self.data = np.zeros(tuple(shape), dtype=dtype) # Check shape. - self.__ndim = len(self.data.shape) - 1 + # self.__ndim = len(self.data.shape) - 1 + self.__ndim = self.data.shape[0] ncol = self.data.shape[-1] if self.__ndim > 0 else 0 if np.min(self.data.shape) < 1: raise ValueError("Zero-size or negative size axes are not allowed.") diff --git a/tests/data/test_dataset.py b/tests/data/test_dataset.py index 5f557015..adab4781 100644 --- a/tests/data/test_dataset.py +++ b/tests/data/test_dataset.py @@ -85,7 +85,7 @@ def test_10_create_empty_dataset(self): # Arrange expected_root_attrs = {"QMI_Dataset": 1} ds_name = "empty_dataset" - ds_shape = (8, 3) + ds_shape = (3, 8, 1) # Act ds = DataSet(ds_name, shape=ds_shape) # Assert @@ -115,6 +115,20 @@ def test_11_create_initialized_dataset(self): self.assertEqual(np.float64, ds.data.dtype) self.assertTrue(np.all(ds.data == data)) + def test_12_create_initialized_3d_dataset(self): + """Create a 3d dataset from existing Numpy data.""" + + ds_name = "my_3d_dataset" + ds_shape = (3, 5, 2) + data = np.sqrt(np.arange(30)).reshape(ds_shape[0], ds_shape[1], ds_shape[2]) + ds = DataSet(ds_name, data=data) + + self.assertEqual(ds_name, ds.name) + self.assertIsInstance(ds.data, np.ndarray) + self.assertEqual(ds_shape, ds.data.shape) + self.assertEqual(np.float64, ds.data.dtype) + self.assertTrue(np.all(ds.data == data)) + def test_20_labels(self): """Setting labels on dataset with three columns and two axes.""" # Arrange @@ -258,7 +272,7 @@ def test_40_write_hdf5_simple(self): """Writing a simple dataset as HDF5 with h5py backend.""" ds_name = "my_dataset" - data = 1.4142 * (np.arange(24).reshape(8, 3) - 1) + data = 1.4142 * (np.arange(24).reshape(1, 8, 3) - 1) ds = DataSet(ds_name, data=data) ds.axis_label[0] = "X axis" ds.axis_unit[0] = "mm" @@ -275,7 +289,7 @@ def test_40_write_hdf5_simple(self): self.assertListEqual([ds_name], list(f.keys())) for e, col in enumerate(ds.column_label): - self.assertEqual((8,), f[ds_name][col].shape) + self.assertEqual((8, 3), f[ds_name][col].shape) self.assertEqual(np.float64, f[ds_name][col].dtype) self.assertTrue(np.all(data[:, e] == f[ds_name][col])) self.assertEqual(ds.column_label[e], f[ds_name].attrs[f"{ds_name}_column{e}_label"]) From aa2b773ea05b20f5ce94deb4908a466e059af99f Mon Sep 17 00:00:00 2001 From: Henri Ervasti Date: Tue, 5 May 2026 11:43:30 +0200 Subject: [PATCH 09/25] [200-qmi-dataset-reformulation] Current unittests passing again after reformulation steps. --- qmi/data/dataset.py | 817 ++++++++++++++++++++----------------- qmi/data/datastore.py | 98 ++--- tests/data/test_dataset.py | 66 +-- 3 files changed, 524 insertions(+), 457 deletions(-) diff --git a/qmi/data/dataset.py b/qmi/data/dataset.py index f0641305..af9eb2e6 100644 --- a/qmi/data/dataset.py +++ b/qmi/data/dataset.py @@ -9,18 +9,30 @@ import h5netcdf import h5py +# Constant names +QMI_DATASET_MARKER = "QMI_Dataset" +QMI_DATASET_NAME = "QMI_Dataset_name" +QMI_DATASET_LAYOUT = "QMI_Dataset_layout" +QMI_DATASET_TIMESTAMP = "QMI_Dataset_timestamp" +QMI_DATASET_TIME_STR = "QMI_Dataset_time_str" +QMI_DATASET_DATA_NDIM = "QMI_Dataset_data_ndim" +QMI_DATASET_N_AXES = "QMI_Dataset_n_axes" +QMI_DATASET_NCOL = "QMI_Dataset_ncol" + class DataSet: """A dataset is a series of values obtained during a measurement. - A dataset contains an array of values in the form of a N-dimensional Numpy array (N >= 2). + A dataset contains an array of values in the form of a N-dimensional Numpy array. + + For raw datasets without measurement axes, the array may be one-dimensional ``(n,)`` for a single data column, + or two-dimensional ``(nrow, ncol)`` for tabular data with multiple columns. - The first (N-1) axes of the Numpy array represent independent variables or iterations in the measurement. - Each of these axes may have an optional label, a physical unit, and a mapping of array indices to values - on the physical axis. + For axis-based datasets, the last axis of the array acts as a "column index" while the first axes represent + independent variables or iterations in the measurement. Each of these axes may have an optional label, + a physical unit, and a mapping of array indices to values on the physical axis. - The last axis of the Numpy array acts as a "column index". Each column may have an associated label and - physical unit. + Each data column may have an associated label and physical unit. A dataset may have attributes. Each attribute has a name, which is a short string, unique to the dataset. Each attribute has a value which may be a string or a number. @@ -37,9 +49,9 @@ class DataSet: ~DataSet.name: Name of the dataset. ~DataSet.data: Numpy array containing the actual data. ~DataSet.timestamp: POSIX time stamp associated with the data. - axis_label: List of strings specifying labels for the first (N-1) axes. - axis_unit: List of strings specifying units for the first (N-1) axes. - axis_scale: List of optional 1D Numpy arrays specifying value mappings for the first (N-1) axes. + axis_label: List of strings specifying labels for the measurement axes. + axis_unit: List of strings specifying units for the measurement axes. + axis_scale: List of optional 1D Numpy arrays specifying value mappings for the measurement axes. column_label: List of strings specifying column labels. column_unit: List of strings specifying column units. attrs: Dictionary of application-specific attributes. @@ -60,7 +72,8 @@ def __init__( name: Name of the dataset. This should be a short string without spaces or strange symbols, suitable for use as part of a file name. shape: Tuple of axis dimensions. Used to create a zero-initialized dataset if the actual data - are not yet available. The last axis dimension represents the number of columns in the dataset. + are not yet available. For raw datasets this may be ``(n,)`` or ``(nrow, ncol)``. + For axis-based datasets, the last axis dimension represents the number of columns in the dataset. dtype: Type of value in each data point. If not specified, the default is np.float64. data: Optional Numpy array containing the actual data. The new dataset instance will contain a reference to the specified Numpy array. Modifying the Numpy array will cause the contents of the dataset @@ -71,11 +84,9 @@ def __init__( self.timestamp = time.time() if data is not None: - # Check that the specified data is a Numpy array. if not isinstance(data, np.ndarray): raise TypeError("Specified 'data' parameter must be a Numpy array.") - # Check shape and data type. if shape is not None: if data.shape != tuple(shape): raise ValueError("Data does not match specified shape.") @@ -98,29 +109,72 @@ def __init__( self.data = np.zeros(tuple(shape), dtype=dtype) # Check shape. - # self.__ndim = len(self.data.shape) - 1 - self.__ndim = self.data.shape[0] - ncol = self.data.shape[-1] if self.__ndim > 0 else 0 + if self.data.ndim < 1: + raise ValueError("DataSet requires at least one dimension.") + if np.min(self.data.shape) < 1: raise ValueError("Zero-size or negative size axes are not allowed.") - # Initialize axis labels. - self.axis_label: list[str] = [""] * self.__ndim if self.__ndim > 0 else [""] - self.axis_unit: list[str] = [""] * self.__ndim if self.__ndim > 0 else [""] - self.axis_name: list[str] = [""] * self.__ndim if self.__ndim > 0 else [""] - self.axis_scale: list[np.ndarray | None] = [None] * self.__ndim + if self.data.ndim == 1: + self.__axis_capacity = 0 + self.__axis_ndim = 0 + self.__raw_mode = True + ncol = 1 + + elif self.data.ndim == 2: + self.__axis_capacity = 1 + self.__axis_ndim = 0 + self.__raw_mode = True + ncol = self.data.shape[-1] + + else: + self.__axis_capacity = self.data.ndim - 1 + self.__axis_ndim = self.data.ndim - 1 + self.__raw_mode = False + ncol = self.data.shape[-1] + + self.axis_label: list[str] = [""] * self.__axis_capacity if self.__axis_capacity > 0 else [] + self.axis_unit: list[str] = [""] * self.__axis_capacity if self.__axis_capacity > 0 else [] + self.axis_name: list[str] = [""] * self.__axis_capacity if self.__axis_capacity > 0 else [] + self.axis_scale: list[np.ndarray | None] = [None] * self.__axis_capacity if self.__axis_capacity > 0 else [] - # Initialize column labels. self.column_label: list[str] = ncol * [""] self.column_unit: list[str] = ncol * [""] self.column_name: list[str] = ncol * [""] # Initialize set of attributes. - self.attrs: dict[str, str | int | float] = {"QMI_Dataset": 1} + self.attrs: dict[str, str | int | float | bool] = {} @property def _ndim(self) -> int: - return self.__ndim + return self.__axis_ndim + + @property + def n_axes(self) -> int: + return self.__axis_ndim + + @property + def ncol(self) -> int: + return len(self.column_label) + + @property + def is_raw(self) -> bool: + return self.__raw_mode + + def _activate_axis_mode(self, axis: int) -> None: + """If two-dimensional data has an axis, create it here. + + This won't have any effect on three-dimensional data. + """ + # TODO: Where do we need input parameter `axis`? + if self.data.ndim == 2 and self.__raw_mode: + self.__raw_mode = False + self.__axis_ndim = 1 + if len(self.axis_label) == 0: + self.axis_label = [""] + self.axis_unit = [""] + self.axis_name = [""] + self.axis_scale = [None] def _check_axis_number(self, axis: int) -> None: """Check that an axis number is valid. @@ -134,12 +188,8 @@ def _check_axis_number(self, axis: int) -> None: """ if not isinstance(axis, int): raise TypeError("Parameter 'axis' must be an integer.") - - if axis == 0: - # Zero axis should always be fine. - return None - if axis < 0 or axis >= self._ndim: + if axis < 0 or axis >= self.__axis_capacity: raise ValueError("Invalid value for parameter 'axis'.") def set_axis_label(self, axis: int, label: str) -> None: @@ -150,6 +200,7 @@ def set_axis_label(self, axis: int, label: str) -> None: label: Label string of the axis. """ self._check_axis_number(axis) + self._activate_axis_mode(axis) self.axis_label[axis] = label def set_axis_unit(self, axis: int, unit: str) -> None: @@ -160,6 +211,7 @@ def set_axis_unit(self, axis: int, unit: str) -> None: unit: Unit string of the axis. """ self._check_axis_number(axis) + self._activate_axis_mode(axis) self.axis_unit[axis] = unit def set_axis_name(self, axis: int, name: str) -> None: @@ -170,6 +222,7 @@ def set_axis_name(self, axis: int, name: str) -> None: name: 'Long' name string of the axis. """ self._check_axis_number(axis) + self._activate_axis_mode(axis) self.axis_name[axis] = name def set_axis_scale(self, axis: int, scale: np.ndarray) -> None: @@ -180,6 +233,7 @@ def set_axis_scale(self, axis: int, scale: np.ndarray) -> None: scale: 1D Numpy array of values along the axis. The length must match the size of the axis. """ self._check_axis_number(axis) + self._activate_axis_mode(axis) v = np.array(scale) if v.shape != (self.data.shape[axis],): raise ValueError("Invalid shape for scale array.") @@ -235,7 +289,7 @@ def set_column_name(self, col: int, name: str) -> None: self.column_name[col] = name -def _parse_attribute_value(s: str) -> int | float | str: +def _parse_attribute_value(s: str) -> int | float | str | bool: """Parse an attribute value. This function should be able to evaluate any string @@ -300,123 +354,235 @@ def replace_esc(m: Match[str]) -> str: return float(s) -def write_dataset_to_hdf5(dataset: DataSet, hdf_group: h5py.Group | h5netcdf.Group) -> None: - """Write the specified dataset to the specified HDF5 group. +def _dataset_layout(dataset: DataSet) -> str: + return "raw" if dataset.is_raw else "axis" + + +def _column_keys(dataset: DataSet) -> list[str]: + keys: list[str] = [] + used: set[str] = set() + for col in range(dataset.ncol): + base = dataset.column_label[col] or (dataset.name if dataset.data.ndim == 1 else f"column_{col}") + key = base + suffix = 1 + while key in used: + key = f"{base}_{suffix}" + suffix += 1 + used.add(key) + keys.append(key) + return keys + + +def _axis_scale_keys(dataset: DataSet) -> list[str]: + keys: list[str] = [] + used: set[str] = set() + for axis in range(dataset.n_axes): + base = dataset.axis_label[axis] or f"axis_{axis}_scale" + key = base + suffix = 1 + while key in used: + key = f"{base}_{suffix}" + suffix += 1 + used.add(key) + keys.append(key) + return keys + + +def _write_common_metadata( + container: h5py.Group | h5netcdf.Group | h5py.File | h5netcdf.File, + dataset: DataSet, +) -> tuple[str, list[str], list[str]]: + group_name = dataset.name if isinstance(container, (h5py.File, h5netcdf.File)) else container.name.split("/")[-1] + + container.attrs[QMI_DATASET_MARKER] = 1 + container.attrs[QMI_DATASET_NAME] = dataset.name + container.attrs[QMI_DATASET_LAYOUT] = _dataset_layout(dataset) + container.attrs[f"{group_name}_timestamp"] = dataset.timestamp + container.attrs[f"{group_name}_time_str"] = time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime(dataset.timestamp)) + container.attrs[f"{group_name}_data_ndim"] = dataset.data.ndim + container.attrs[f"{group_name}_n_axes"] = dataset.n_axes + container.attrs[f"{group_name}_ncol"] = dataset.ncol + + for dim_index, dim_size in enumerate(dataset.data.shape): + container.attrs[f"{group_name}_dim{dim_index}_size"] = dim_size + + axis_scale_keys = _axis_scale_keys(dataset) + for axis in range(dataset.n_axes): + if dataset.axis_label[axis]: + container.attrs[f"{group_name}_axis{axis}_label"] = dataset.axis_label[axis] + if dataset.axis_unit[axis]: + container.attrs[f"{group_name}_axis{axis}_unit"] = dataset.axis_unit[axis] + if dataset.axis_name[axis]: + container.attrs[f"{group_name}_axis{axis}_name"] = dataset.axis_name[axis] + if dataset.axis_scale[axis] is not None: + container.attrs[f"{group_name}_axis{axis}_key"] = axis_scale_keys[axis] - The dataset "name" field determines the name of the corresponding HDF5 dataset. - An error occurs if the HDF5 group already contains a dataset with the same name. + column_keys = _column_keys(dataset) + for col in range(dataset.ncol): + container.attrs[f"{group_name}_column{col}_key"] = column_keys[col] + if dataset.column_label[col]: + container.attrs[f"{group_name}_column{col}_label"] = dataset.column_label[col] + if dataset.column_unit[col]: + container.attrs[f"{group_name}_column{col}_unit"] = dataset.column_unit[col] + if dataset.column_name[col]: + container.attrs[f"{group_name}_column{col}_name"] = dataset.column_name[col] - Note that this function may create additional supporting datasets in the HDF5 group if the DataSet instance - uses axis scales. In this case, HDF5 datasets named "_axisN_scale" will be created in - addition to the main dataset. + for (name, value) in dataset.attrs.items(): + if name.startswith("QMI_Dataset") or name.startswith(group_name) or name.startswith("DIMENSION_"): + raise ValueError(f"Invalid use of special attribute name {name!r}") + container.attrs[name] = value - Parameters: - dataset: DataSet instance to write to HDF5. - hdf_group: HDF5 File or Group instance to which the dataset is written. - """ + return group_name, column_keys, axis_scale_keys - ndim = len(dataset.data.shape) - 1 - ncol = dataset.data.shape[-1] if ndim > 0 else 0 - group_name = hdf_group.name.strip("/") - # Special timestamp attribute. - hdf_group.attrs[f"{group_name}_timestamp"] = dataset.timestamp - hdf_group.attrs[f"{group_name}_time_str"] = time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime(dataset.timestamp)) +def _create_dataset_node( + container: h5py.Group | h5netcdf.Group | h5py.File | h5netcdf.File, + key: str, + data: np.ndarray, + dim_names: tuple[str, ...], +) -> h5py.Dataset | h5netcdf.Variable: + if isinstance(container, (h5py.File, h5py.Group)): + return container.create_dataset(key, data=data) - # Special attributes for axis labels / units. - for axis in range(ndim): - if dataset.axis_label[axis]: - hdf_group.attrs[f"{group_name}_axis{axis}_label"] = dataset.axis_label[axis] + for dim_name, dim_size in zip(dim_names, data.shape): + if dim_name not in container.dimensions: + container.dimensions[dim_name] = dim_size + return container.create_variable(key, dimensions=dim_names, data=data) - if dataset.axis_unit[axis]: - hdf_group.attrs[f"{group_name}_axis{axis}_unit"] = dataset.axis_unit[axis] - if dataset.axis_name[axis]: - hdf_group.attrs[f"{group_name}_axis{axis}_name"] = dataset.axis_name[axis] +def _read_shape(attrs: dict, group_name: str) -> tuple[int, ...]: + data_ndim = int(attrs[f"{group_name}_data_ndim"]) + return tuple(int(attrs[f"{group_name}_dim{dim_index}_size"]) for dim_index in range(data_ndim)) - if not ncol: - # We have only one single array of data. - if isinstance(hdf_group, h5py.Group): - ds = hdf_group.create_dataset(dataset.name, data=dataset.data) - else: - dim_name = dataset.axis_label[0] or "dim_0" - if dim_name not in hdf_group.dimensions: - hdf_group.dimensions[dim_name] = dataset.data.size +def _read_qmi_dataset(container: h5py.Group | h5netcdf.Group | h5py.File | h5netcdf.File) -> DataSet: + attrs = dict(container.attrs) + name = str(attrs.get(QMI_DATASET_NAME) or container.name.split("/")[-1] or "dataset") + group_name = name + layout = str(attrs.get(QMI_DATASET_LAYOUT, "axis")) + data_ndim = int(attrs[f"{group_name}_data_ndim"]) + n_axes = int(attrs.get(f"{group_name}_n_axes", 0)) + ncol = int(attrs[f"{group_name}_ncol"]) + shape = _read_shape(attrs, group_name) - ds = hdf_group.create_variable(dataset.name, dimensions=(dim_name,), data=dataset.data) + column_keys = [ + str(attrs.get(f"{group_name}_column{col}_key", attrs.get(f"{group_name}_column{col}_label", f"column_{col}"))) + for col in range(ncol) + ] - ds.attrs["unit"] = dataset.axis_label[0] - ds.attrs["name"] = dataset.axis_unit[0] - ds.attrs["long_name"] = dataset.axis_name[0] + if data_ndim == 1: + data = np.asarray(container[column_keys[0]]) + else: + column_arrays = [np.asarray(container[key]) for key in column_keys] + base_shape = column_arrays[0].shape + for arr in column_arrays[1:]: + if arr.shape != base_shape: + raise ValueError("Column datasets do not have matching shapes") + data = np.stack(column_arrays, axis=-1) + if data.shape != shape: + data = data.reshape(shape) + + dataset = DataSet(name=name, data=data) + dataset.timestamp = float(attrs[f"{group_name}_timestamp"]) + + if layout == "axis" and n_axes > 0 and dataset.is_raw: + dataset._activate_axis_mode(0) + dataset._DataSet__axis_ndim = n_axes + dataset._DataSet__raw_mode = False + + for axis in range(n_axes): + dataset.axis_label[axis] = str(attrs.get(f"{group_name}_axis{axis}_label", "")) + dataset.axis_unit[axis] = str(attrs.get(f"{group_name}_axis{axis}_unit", "")) + dataset.axis_name[axis] = str(attrs.get(f"{group_name}_axis{axis}_name", "")) + scale_key = attrs.get(f"{group_name}_axis{axis}_key") + if scale_key: + scale = np.asarray(container[str(scale_key)]) + if scale.shape != (dataset.data.shape[axis],): + raise ValueError(f"Invalid shape of dimension scale for axis {axis}") + dataset.axis_scale[axis] = scale for col in range(ncol): - if isinstance(hdf_group, h5py.Group): - ds = hdf_group.create_dataset(dataset.column_label[col], data=dataset.data[..., col]) + dataset.column_label[col] = str(attrs.get(f"{group_name}_column{col}_label", "")) + dataset.column_unit[col] = str(attrs.get(f"{group_name}_column{col}_unit", "")) + dataset.column_name[col] = str(attrs.get(f"{group_name}_column{col}_name", "")) - else: - dim_names = [] - for axis in range(ndim): - dim_names.append(dataset.axis_label[axis] or f"dim_{axis}") + for name, value in attrs.items(): + if not name.startswith(group_name) and not name.startswith("QMI_Dataset") and not name.startswith("DIMENSION_"): + dataset.attrs[name] = value + + return dataset - for axis, dim_name in enumerate(dim_names): - if dim_name not in hdf_group.dimensions: - hdf_group.dimensions[dim_name] = dataset.data.shape[axis] - ds = hdf_group.create_variable( - dataset.column_label[col], dimensions=tuple(dim_names), data=dataset.data[..., col] - ) +def write_dataset_to_hdf5(dataset: DataSet, hdf_group: h5py.Group | h5netcdf.Group | h5py.File | h5netcdf.File) -> None: + """Write the specified dataset to the specified HDF5 group. - # Special attributes for column labels / units. - if dataset.column_label[col]: - hdf_group.attrs[f"{group_name}_column{col}_label"] = dataset.column_label[col] - ds.attrs["name"] = dataset.column_label[col] + The dataset "name" field determines the name of the corresponding HDF5 dataset. + An error occurs if the HDF5 group already contains a dataset with the same name. - if dataset.column_unit[col]: - hdf_group.attrs[f"{group_name}_column{col}_unit"] = dataset.column_unit[col] - ds.attrs["unit"] = dataset.column_unit[col] + Note that this function may create additional supporting datasets in the HDF5 group if the DataSet instance + uses axis scales. In this case, HDF5 datasets named "_axisN_scale" will be created in + addition to the main dataset. + Parameters: + dataset: DataSet instance to write to HDF5. + hdf_group: HDF5 File or Group instance to which the dataset is written. + """ + + group_name, column_keys, axis_scale_keys = _write_common_metadata(hdf_group, dataset) + + if dataset.data.ndim == 1: + column_ds = _create_dataset_node(hdf_group, column_keys[0], dataset.data, ("row",)) + if dataset.column_label[0]: + column_ds.attrs["name"] = dataset.column_label[0] + if dataset.column_unit[0]: + column_ds.attrs["unit"] = dataset.column_unit[0] + if dataset.column_name[0]: + column_ds.attrs["long_name"] = dataset.column_name[0] + return + + if dataset.n_axes == 0: + row_dim = "row" + for col, key in enumerate(column_keys): + column_ds = _create_dataset_node(hdf_group, key, dataset.data[..., col], (row_dim,)) + if dataset.column_label[col]: + column_ds.attrs["name"] = dataset.column_label[col] + if dataset.column_unit[col]: + column_ds.attrs["unit"] = dataset.column_unit[col] + if dataset.column_name[col]: + column_ds.attrs["long_name"] = dataset.column_name[col] + return + + dim_names = tuple(dataset.axis_label[axis] or f"dim_{axis}" for axis in range(dataset.n_axes)) + column_nodes: list[h5py.Dataset | h5netcdf.Variable] = [] + for col, key in enumerate(column_keys): + column_ds = _create_dataset_node(hdf_group, key, dataset.data[..., col], dim_names) + if dataset.column_label[col]: + column_ds.attrs["name"] = dataset.column_label[col] + if dataset.column_unit[col]: + column_ds.attrs["unit"] = dataset.column_unit[col] if dataset.column_name[col]: - hdf_group.attrs[f"{group_name}_column{col}_name"] = dataset.column_name[col] - ds.attrs["long_name"] = dataset.column_name[col] - - # Dimension scales for scale axis. - for axis in range(ndim): - if dataset.axis_scale[axis] is None: - continue - - # Create an extra dataset to hold the dimension scale. - scale_name = dataset.axis_label[axis] - # But avoid doubles in case of multiple columns. - if scale_name not in hdf_group: - if isinstance(hdf_group, h5py.Group): - ds.dims[axis].label = dataset.axis_label[axis] - ds_scale = hdf_group.create_dataset(scale_name, data=dataset.axis_scale[axis]) - ds_scale.attrs["unit"] = dataset.axis_unit[axis] - ds_scale.attrs["name"] = dataset.axis_label[axis] - ds_scale.attrs["long_name"] = dataset.axis_name[axis] - # Attach the dimension scale to the axis. - ds_scale.make_scale(scale_name) - ds.dims[axis].attach_scale(ds_scale) - - else: - # With h5netcdf backend we cannot attach scaled data. - # Create a variable instead and attach it as an attribute to the dataset. - ds_scale = hdf_group.create_variable( - scale_name, - dimensions=(ds.dimensions[axis],), - data=dataset.axis_scale[axis], - ) - ds_scale.attrs["unit"] = dataset.axis_unit[axis] - ds_scale.attrs["name"] = dataset.axis_label[axis] - ds_scale.attrs["long_name"] = dataset.axis_name[axis] - - # Custom attributes. - for (name, value) in dataset.attrs.items(): - if name.startswith(f"{group_name}") or name.startswith("DIMENSION_"): - raise ValueError(f"Invalid use of special attribute name {name!r}") + column_ds.attrs["long_name"] = dataset.column_name[col] + column_nodes.append(column_ds) + + for axis in range(dataset.n_axes): + axis_scale = dataset.axis_scale[axis] + if axis_scale is None: + continue - hdf_group.attrs[name] = value + scale_key = axis_scale_keys[axis] + scale_ds = _create_dataset_node(hdf_group, scale_key, axis_scale, (dim_names[axis],)) + if dataset.axis_label[axis]: + scale_ds.attrs["name"] = dataset.axis_label[axis] + if dataset.axis_unit[axis]: + scale_ds.attrs["unit"] = dataset.axis_unit[axis] + if dataset.axis_name[axis]: + scale_ds.attrs["long_name"] = dataset.axis_name[axis] + + if isinstance(hdf_group, (h5py.File, h5py.Group)): + scale_ds.make_scale(scale_key) + for column_ds in column_nodes: + column_ds.dims[axis].label = dataset.axis_label[axis] + column_ds.dims[axis].attach_scale(scale_ds) def read_dataset_from_hdf5( @@ -436,71 +602,20 @@ def read_dataset_from_hdf5( dataset: DataSet instance. """ source = parent - if container is not None: - parent = container - - # Check that the HDF5 dataset was created by this Python module. - if source.attrs.get("QMI_Dataset", 0) != 1 and parent.attrs.get("QMI_Dataset", 0) != 1: - return convert_to_qmi_dataset(source) - - # Create DataSet instance and read actual data. - source_name = source.name.split("/")[-1] - name = source_name if container is not None else parent.name.split("/")[-1] - ndim = 0 - ncol = 0 - column_labels: list[str] = [] - for attr in parent.attrs: - if attr.startswith(f"{source_name}_axis") and attr.endswith("_label"): - ndim += 1 - if attr.startswith(f"{source_name}_column") and attr.endswith("_label"): - ncol += 1 - column_labels.append(parent.attrs[attr]) - - if ncol > 0: - column_arrays = [np.asarray(parent[label]) for label in column_labels] - base_shape = column_arrays[0].shape - for arr in column_arrays[1:]: - if arr.shape != base_shape: - raise ValueError("Column datasets do not have matching shapes") - - data = np.stack(column_arrays, axis=-1) - dataset = DataSet(name=name, data=data) - - else: - dataset = DataSet(name=name, data=np.asarray(source)) - - # Read timestamp. - dataset.timestamp = parent.attrs[f"{source_name}_timestamp"] - - # Read special attributes for labels. - for axis in range(ndim): - dataset.axis_label[axis] = parent.attrs.get(f"{source_name}_axis{axis}_label", "") - dataset.axis_unit[axis] = parent.attrs.get(f"{source_name}_axis{axis}_unit", "") - dataset.axis_name[axis] = parent.attrs.get(f"{source_name}_axis{axis}_name", "") + meta_container = container or parent - for col in range(ncol): - dataset.column_label[col] = parent.attrs.get(f"{source_name}_column{col}_label", "") - dataset.column_unit[col] = parent.attrs.get(f"{source_name}_column{col}_unit", "") - dataset.column_name[col] = parent.attrs.get(f"{source_name}_column{col}_name", "") - - for axis in range(ndim): - scale_name = dataset.axis_label[axis] - if scale_name and scale_name in parent: - scale = np.asarray(parent[scale_name]) - if scale.shape != (dataset.data.shape[axis],): - raise ValueError(f"Invalid shape of dimension scale for axis {axis}") + if isinstance(meta_container, (h5py.Dataset, h5netcdf.Variable)) and meta_container.attrs.get(QMI_DATASET_MARKER) == 1: + return _read_qmi_dataset(meta_container) - dataset.axis_scale[axis] = scale + if isinstance(meta_container, (h5py.File, h5py.Group, h5netcdf.File, h5netcdf.Group)) and meta_container.attrs.get(QMI_DATASET_MARKER) == 1: + return _read_qmi_dataset(meta_container) - # Read custom attributes. - for attr, value in parent.attrs.items(): - if not attr.startswith(f"{source_name}") and not attr.startswith("DIMENSION_"): - dataset.attrs[attr] = value + return convert_to_qmi_dataset(source) - return dataset - -def convert_to_qmi_dataset(parent: h5py.File | h5netcdf.File | h5py.Group | h5netcdf.Group | h5py.Dataset | h5netcdf.Variable) -> DataSet: +def convert_to_qmi_dataset( + parent: h5py.File | h5netcdf.File | h5py.Group | h5netcdf.Group | h5py.Dataset | h5netcdf.Variable, +) -> DataSet: """A function to convert a HDF5 dataset, in a group, or in file root, to a QMI dataset. If the input is a h5py.Dataset | h5netcdf.Variable, the dataset can have one or more dimensions. @@ -514,111 +629,93 @@ def convert_to_qmi_dataset(parent: h5py.File | h5netcdf.File | h5py.Group | h5ne If there is a single group present, that will be taken and handled like a group. For multiple groups in a file an error will be thrown. """ + if isinstance(parent, (h5py.Dataset, h5netcdf.Variable)): + data = np.asarray(parent) + name = parent.name.split("/")[-1] or str(parent.attrs.get("name", "dataset")) + dataset = DataSet(name=name, data=data) + if dataset.ncol > 0: + dataset.column_label[0] = str(parent.attrs.get("label", parent.attrs.get("name", name))) + dataset.column_unit[0] = str(parent.attrs.get("units", parent.attrs.get("unit", ""))) + dataset.column_name[0] = str(parent.attrs.get("long_name", "")) + for attr_name, value in parent.attrs.items(): + if not str(attr_name).startswith("_") and not str(attr_name).startswith("DIMENSION_"): + dataset.attrs[str(attr_name)] = value + return dataset + group: h5py.Group | h5netcdf.Group | None = None - axes: dict[str, h5py.Dataset | h5netcdf.Variable] = dict() - columns: dict[str, h5py.Dataset | h5netcdf.Variable] = dict() - if isinstance(parent, h5py.File | h5netcdf.File): - items_found = dict(parent) - # See if they are groups or datasets - for item, hdf5_obj in items_found.items(): - if isinstance(hdf5_obj, h5py.Group | h5netcdf.Group): - if group is not None: - raise RuntimeError("Cannot convert multiple groups from a HDF5 file.") - - group = hdf5_obj - - elif isinstance(hdf5_obj, h5py.Dataset | h5netcdf.Variable): - label = hdf5_obj.attrs.get("label", hdf5_obj.attrs.get("name", item)) - if (isinstance(hdf5_obj, h5py.Dataset) and not hdf5_obj.is_scale) or ( - isinstance(hdf5_obj, h5netcdf.Variable) and item not in hdf5_obj.dimensions - ): - columns[label] = hdf5_obj - - else: - axes[label] = hdf5_obj - - elif isinstance(parent, h5py.Group | h5netcdf.Group): + if isinstance(parent, (h5py.File, h5netcdf.File)): + groups = [obj for obj in parent.values() if isinstance(obj, (h5py.Group, h5netcdf.Group))] + if groups: + if len(groups) > 1: + raise RuntimeError("Cannot convert multiple groups from a HDF5 file.") + group = groups[0] + else: + group = parent + else: group = parent - elif isinstance(parent, h5py.Dataset | h5netcdf.Variable): - axes[parent.name.split("/")] = parent - - if group is not None and (columns or axes): - raise RuntimeError("Cannot convert a group AND dataset[s] from a HDF5 file.") - - elif group is not None: - items_found = dict(group) - # See if there are datasets - for item, hdf5_obj in items_found.items(): - label = hdf5_obj.attrs.get("label", (hdf5_obj.attrs.get("name"), item)) - if (isinstance(hdf5_obj, h5py.Dataset) and not hdf5_obj.is_scale) or ( - isinstance(hdf5_obj, h5netcdf.Variable) and item not in hdf5_obj.dimensions - ): - columns[label] = hdf5_obj - + axes: list[tuple[str, h5py.Dataset | h5netcdf.Variable]] = [] + columns: list[tuple[str, h5py.Dataset | h5netcdf.Variable]] = [] + + for item, hdf5_obj in group.items(): + if isinstance(hdf5_obj, (h5py.Group, h5netcdf.Group)): + raise RuntimeError("Cannot convert nested groups to a single QMI dataset.") + + label = str(hdf5_obj.attrs.get("label", hdf5_obj.attrs.get("name", item))) + if isinstance(hdf5_obj, h5py.Dataset): + if hdf5_obj.is_scale: + axes.append((label, hdf5_obj)) + else: + columns.append((label, hdf5_obj)) + else: + if item in hdf5_obj.dimensions: + axes.append((label, hdf5_obj)) else: - axes[label] = hdf5_obj + columns.append((label, hdf5_obj)) if not columns and not axes: raise RuntimeError("No datasets found to convert from the HDF5 file.") - # Create DataSet instance and read actual data. - name = parent.name.split("/")[-1] + name = group.name.split("/")[-1] if not name: - name = parent.attrs["name"] if "name" in parent.attrs else "dataset" - - if (not columns and len(axes) == 1) or (not axes and len(columns) == 1): - # We have only one dataset axis | column. Create the QMI dataset with it and return it. - datasets = columns | axes - ds_name = datasets["long_name"] if "long_name" in datasets else datasets["name"] - qmi_dataset = DataSet(name=ds_name, data=next(iter(datasets.values()))) - qmi_dataset.axis_label[0] = datasets["label"] if "label" in datasets else "" - if not qmi_dataset.axis_label[0]: - qmi_dataset.axis_label[0] = datasets["name"] if "name" in datasets else name - - qmi_dataset.axis_unit[0] = datasets["units"] if "units" in datasets else "" - if not qmi_dataset.axis_unit[0]: - # Try alternative name - qmi_dataset.axis_unit[0] = datasets["unit"] if "unit" in datasets else "" - - qmi_dataset.axis_name[0] = datasets["long_name"] if "long_name" in datasets else "" - # Read custom attributes. - for name, value in parent.attrs.items(): - if not name.startswith("_") and not name.startswith("DIMENSION_"): - qmi_dataset.attrs[name] = value - - return qmi_dataset - - # Otherwise, there should be at least one "column" dataset present - column_arrays = [np.asarray(ds) for ds in columns.values()] - base_shape = column_arrays[0].shape - for arr in column_arrays[1:]: - if arr.shape != base_shape: - raise ValueError("Column datasets do not have matching shapes") - - # Create QMI dataset - data = np.stack(column_arrays, axis=-1) - qmi_dataset = DataSet(name=name, data=data) - for axis, (label, hdf5_obj) in enumerate(axes.items()): - qmi_dataset.set_axis_label(axis, label) - qmi_dataset.set_axis_unit(axis, str(hdf5_obj.attrs.get("units", hdf5_obj.attrs.get("unit", "")))) - qmi_dataset.set_axis_name(axis, str(hdf5_obj.attrs.get("long_name", ""))) - hdf5_obj_values = np.asarray(hdf5_obj) - if ( - np.issubdtype(hdf5_obj_values.dtype, np.number) - and np.all(np.isfinite(hdf5_obj_values)) - ): - qmi_dataset.set_axis_scale(axis, hdf5_obj_values) - - for e, label in enumerate(columns.keys()): - qmi_dataset.set_column_label(e, label) - qmi_dataset.set_column_unit(e, columns[label].attrs.get("units", columns[label].attrs.get("unit", ""))) - qmi_dataset.set_column_name(e, columns[label].attrs.get("long_name", "")) - - # Read custom attributes. - for name, value in parent.attrs.items(): - if not name.startswith("_") and not name.startswith("DIMENSION_"): - qmi_dataset.attrs[name] = value + name = str(group.attrs["name"]) if "name" in group.attrs else "dataset" + + if columns: + column_arrays = [np.asarray(ds) for _, ds in columns] + base_shape = column_arrays[0].shape + for arr in column_arrays[1:]: + if arr.shape != base_shape: + raise ValueError("Column datasets do not have matching shapes") + + if len(column_arrays) == 1 and not axes: + qmi_dataset = DataSet(name=name, data=column_arrays[0]) + else: + data = np.stack(column_arrays, axis=-1) + qmi_dataset = DataSet(name=name, data=data) + else: + label, axis_ds = axes[0] + qmi_dataset = DataSet(name=name, data=np.asarray(axis_ds)) + qmi_dataset.column_label[0] = label + qmi_dataset.column_unit[0] = str(axis_ds.attrs.get("units", axis_ds.attrs.get("unit", ""))) + qmi_dataset.column_name[0] = str(axis_ds.attrs.get("long_name", "")) + + if axes and qmi_dataset.data.ndim >= 2: + for axis_index, (label, axis_ds) in enumerate(axes): + qmi_dataset.set_axis_label(axis_index, label) + qmi_dataset.set_axis_unit(axis_index, str(axis_ds.attrs.get("units", axis_ds.attrs.get("unit", "")))) + qmi_dataset.set_axis_name(axis_index, str(axis_ds.attrs.get("long_name", ""))) + axis_values = np.asarray(axis_ds) + if np.issubdtype(axis_values.dtype, np.number) and np.all(np.isfinite(axis_values)): + qmi_dataset.set_axis_scale(axis_index, axis_values) + + for col_index, (label, column_ds) in enumerate(columns[:qmi_dataset.ncol]): + qmi_dataset.column_label[col_index] = label + qmi_dataset.column_unit[col_index] = str(column_ds.attrs.get("units", column_ds.attrs.get("unit", ""))) + qmi_dataset.column_name[col_index] = str(column_ds.attrs.get("long_name", "")) + + for name, value in group.attrs.items(): + if not str(name).startswith("_") and not str(name).startswith("DIMENSION_"): + qmi_dataset.attrs[str(name)] = value return qmi_dataset @@ -636,61 +733,52 @@ def write_dataset_to_text(dataset: DataSet, fh: TextIO) -> None: fh: File handle open for writing in text mode. """ - ndim = len(dataset.data.shape) - ncol = dataset.data.shape[-1] + attrs: dict[str, int | float | str | bool] = collections.OrderedDict() + attrs[QMI_DATASET_NAME] = dataset.name + attrs[QMI_DATASET_LAYOUT] = _dataset_layout(dataset) + attrs[QMI_DATASET_TIMESTAMP] = dataset.timestamp + attrs[QMI_DATASET_TIME_STR] = time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime(dataset.timestamp)) + attrs[QMI_DATASET_DATA_NDIM] = dataset.data.ndim + attrs[QMI_DATASET_N_AXES] = dataset.n_axes + attrs[QMI_DATASET_NCOL] = dataset.ncol + + for dim_index, dim_size in enumerate(dataset.data.shape): + attrs[f"QMI_Dataset_dim{dim_index}_size"] = dim_size + + for axis in range(dataset.n_axes): + if dataset.axis_label[axis]: + attrs[f"QMI_Dataset_axis{axis}_label"] = dataset.axis_label[axis] + + if dataset.axis_unit[axis]: + attrs[f"QMI_Dataset_axis{axis}_unit"] = dataset.axis_unit[axis] + + if dataset.axis_name[axis]: + attrs[f"QMI_Dataset_axis{axis}_name"] = dataset.axis_name[axis] - # Create special columns if needed. special_column_label = [] special_column_unit = [] - if ndim > 2: - # Create special axis index columns. - for axis in range(ndim - 1): + if dataset.n_axes > 1: + for axis in range(dataset.n_axes): special_column_label.append(f"axis{axis}_index") special_column_unit.append("") - # Create special axis scale columns if needed. - for axis in range(ndim - 1): + for axis in range(dataset.n_axes): if dataset.axis_scale[axis] is not None: special_column_label.append(f"axis{axis}_scale") special_column_unit.append(dataset.axis_unit[axis]) - # Prepare attributes. - attrs: dict[str, int | float | str] = collections.OrderedDict() - - # Dataset name. - attrs["QMI_DataSet_name"] = dataset.name - - # Timestamp. - attrs["QMI_DataSet_timestamp"] = dataset.timestamp - attrs["QMI_DataSet_time_str"] = time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime(dataset.timestamp)) - - # Data shape. - attrs["QMI_DataSet_ndim"] = ndim - attrs["QMI_DataSet_ncol"] = ncol - - # Axis labels / units. - for axis in range(ndim - 1): - attrs[f"QMI_DataSet_axis{axis}_size"] = dataset.data.shape[axis] - if dataset.axis_label[axis]: - attrs[f"QMI_DataSet_axis{axis}_label"] = dataset.axis_label[axis] - - if dataset.axis_unit[axis]: - attrs[f"QMI_DataSet_axis{axis}_unit"] = dataset.axis_unit[axis] - - # Column labels / units. column_label = special_column_label + dataset.column_label column_unit = special_column_unit + dataset.column_unit for col in range(len(column_label)): if column_label[col]: - attrs[f"QMI_DataSet_column{col}_label"] = column_label[col] + attrs[f"QMI_Dataset_column{col}_label"] = column_label[col] if column_unit[col]: - attrs[f"QMI_DataSet_column{col}_unit"] = column_unit[col] + attrs[f"QMI_Dataset_column{col}_unit"] = column_unit[col] - # Custom attributes. for (name, val) in dataset.attrs.items(): - if name.startswith("QMI_DataSet"): + if name.startswith("QMI_Dataset"): raise ValueError(f"Invalid use of special attribute name {name!r}") if not name: @@ -701,46 +789,41 @@ def write_dataset_to_text(dataset: DataSet, fh: TextIO) -> None: attrs[name] = val - # Reshape data to 2D format. - if ndim > 2: + if dataset.data.ndim == 1: + rawdata = dataset.data.reshape(-1, 1) + elif dataset.data.ndim > 2: nrow = np.prod(dataset.data.shape[:-1]) - rawdata = dataset.data.reshape((nrow, ncol)) - + rawdata = dataset.data.reshape((nrow, dataset.ncol)) else: rawdata = dataset.data - # Insert axis index columns. extra_columns = [] - if ndim > 2: - for axis in range(ndim - 1): + if dataset.n_axes > 1: + for axis in range(dataset.n_axes): n = dataset.data.shape[axis] outer_rows = int(np.prod(dataset.data.shape[:axis], dtype=np.int32)) inner_rows = int(np.prod(dataset.data.shape[axis+1:-1], dtype=np.int32)) extra_columns.append(np.tile(np.repeat(np.arange(n), inner_rows), outer_rows)) - # Insert axis scale columns. - for axis in range(ndim - 1): + for axis in range(dataset.n_axes): dataset_axis_scale = dataset.axis_scale[axis] if dataset_axis_scale is not None: - assert dataset_axis_scale.shape == (dataset.data.shape[axis],) outer_rows = int(np.prod(dataset.data.shape[:axis], dtype=np.int32)) inner_rows = int(np.prod(dataset.data.shape[axis+1:-1], dtype=np.int32)) + if dataset.n_axes == 1: + inner_rows = 1 extra_columns.append(np.tile(np.repeat(dataset_axis_scale, inner_rows), outer_rows)) if extra_columns: rawdata = np.column_stack(extra_columns + [rawdata]) - # Write marker line. fh.write("# QMI_DataSet\n") fh.write("#\n") - # Write attributes. for (name, value) in attrs.items(): fh.write(f"# {name}: {value!r}\n") fh.write("#\n") - - # Write actual data. np.savetxt(fh, rawdata) @@ -754,7 +837,6 @@ def read_dataset_from_text(fh: TextIO) -> DataSet: DataSet instance. """ - # Check marker line. line = fh.readline().strip() if line != "# QMI_DataSet": raise ValueError(f"Invalid file format; expecting marker but got {line!r}") @@ -763,15 +845,12 @@ def read_dataset_from_text(fh: TextIO) -> DataSet: if line != "#": raise ValueError(f"Invalid file format; expecting separator but got {line!r}") - # Read attributes. attrs = {} while True: line = fh.readline().strip() - # Stop at separator between attributes and data. if line == "#": break - - # Read attribute. + p = line.find(":") if (not line.startswith("# ")) or (p < 0): raise ValueError(f"Invalid file format; expecting attribute but got {line!r}") @@ -783,67 +862,53 @@ def read_dataset_from_text(fh: TextIO) -> DataSet: attrs[name] = _parse_attribute_value(value) - # Read raw data. rawdata = np.loadtxt(fh, ndmin=2) (nrow, total_columns) = rawdata.shape - # Determine dataset name. - dataset_name = attrs.get("QMI_DataSet_name") + dataset_name = attrs.get(QMI_DATASET_NAME) if not isinstance(dataset_name, str): raise ValueError("Missing required attribute QMI_DataSet_name") - # Determine dataset shape. - ndim = int(attrs["QMI_DataSet_ndim"]) - ncol = int(attrs["QMI_DataSet_ncol"]) - assert ndim >= 2 - - shape_list: list[int] = [] - for axis in range(ndim - 1): - axis_size = attrs[f"QMI_DataSet_axis{axis}_size"] - if not isinstance(axis_size, int): - raise ValueError(f"Invalid value for attribute QMI_DataSet_axis{axis}_size") - - shape_list.append(axis_size) - - shape_list.append(ncol) - shape = tuple(shape_list) + data_ndim = int(attrs[QMI_DATASET_DATA_NDIM]) + n_axes = int(attrs.get(QMI_DATASET_N_AXES, 0)) + ncol = int(attrs[QMI_DATASET_NCOL]) + shape = tuple(int(attrs[f"QMI_Dataset_dim{dim_index}_size"]) for dim_index in range(data_ndim)) - # Verify number of rows. - expect_rows = np.prod(shape[:-1]) - if nrow != expect_rows: - raise ValueError(f"Expecting {expect_rows} rows but got {nrow} rows") - - # Verify number of columns. if total_columns < ncol: raise ValueError(f"Expecting at least {ncol} columns but got {total_columns} columns") num_special_columns = total_columns - ncol - # Extract and reshape actual data. - data = rawdata[:, num_special_columns:].reshape(*shape) + if data_ndim == 1: + data = rawdata[:, num_special_columns] + else: + expect_rows = np.prod(shape[:-1]) if len(shape) > 1 else shape[0] + if nrow != expect_rows: + raise ValueError(f"Expecting {expect_rows} rows but got {nrow} rows") + data = rawdata[:, num_special_columns:].reshape(shape) - # Create DataSet instance. dataset = DataSet(name=dataset_name, data=data) + dataset.timestamp = float(attrs[QMI_DATASET_TIMESTAMP]) - # Set timestamp. - dataset.timestamp = float(attrs["QMI_DataSet_timestamp"]) + if n_axes > 0 and dataset.is_raw: + dataset._activate_axis_mode(0) + dataset._DataSet__axis_ndim = n_axes + dataset._DataSet__raw_mode = False - # Set axis labels and units. - for axis in range(ndim - 1): - dataset.axis_label[axis] = str(attrs.get(f"QMI_DataSet_axis{axis}_label", "")) - dataset.axis_unit[axis] = str(attrs.get(f"QMI_DataSet_axis{axis}_unit", "")) + for axis in range(n_axes): + dataset.axis_label[axis] = str(attrs.get(f"QMI_Dataset_axis{axis}_label", "")) + dataset.axis_unit[axis] = str(attrs.get(f"QMI_Dataset_axis{axis}_unit", "")) + dataset.axis_name[axis] = str(attrs.get(f"QMI_Dataset_axis{axis}_name", "")) for col in range(ncol): - dataset.column_label[col] = str(attrs.get(f"QMI_DataSet_column{num_special_columns + col}_label", "")) - dataset.column_unit[col] = str(attrs.get(f"QMI_DataSet_column{num_special_columns + col}_unit", "")) + dataset.column_label[col] = str(attrs.get(f"QMI_Dataset_column{num_special_columns + col}_label", "")) + dataset.column_unit[col] = str(attrs.get(f"QMI_Dataset_column{num_special_columns + col}_unit", "")) - # Verify index columns and extract axis scales. for col in range(num_special_columns): - label = attrs.get(f"QMI_DataSet_column{col}_label") + label = attrs.get(f"QMI_Dataset_column{col}_label") if not isinstance(label, str): raise ValueError(f"Missing label for special column {col}") if label.startswith("axis") and label.endswith("_index"): - # Verify index column. axis = int(label[4:-6]) n = dataset.data.shape[axis] outer_rows = int(np.prod(dataset.data.shape[:axis], dtype=np.int32)) @@ -853,11 +918,12 @@ def read_dataset_from_text(fh: TextIO) -> DataSet: raise ValueError(f"Inconsistent index data for axis {axis}") elif label.startswith("axis") and label.endswith("_scale"): - # Set axis scale. axis = int(label[4:-6]) n = dataset.data.shape[axis] outer_rows = int(np.prod(dataset.data.shape[:axis], dtype=np.int32)) inner_rows = int(np.prod(dataset.data.shape[axis+1:-1], dtype=np.int32)) + if dataset.n_axes == 1: + inner_rows = 1 scale = rawdata[0:n*inner_rows:inner_rows, col] scale_raw = np.tile(np.repeat(scale, inner_rows), outer_rows) if not np.all(rawdata[:, col] == scale_raw): @@ -865,9 +931,8 @@ def read_dataset_from_text(fh: TextIO) -> DataSet: dataset.axis_scale[axis] = scale - # Read custom attributes. for attribute_name, attribute_value in attrs.items(): - if not attribute_name.startswith("QMI_DataSet"): + if not attribute_name.startswith("QMI_Dataset"): dataset.attrs[attribute_name] = attribute_value return dataset diff --git a/qmi/data/datastore.py b/qmi/data/datastore.py index 427469fd..7caf01a8 100644 --- a/qmi/data/datastore.py +++ b/qmi/data/datastore.py @@ -1,24 +1,25 @@ """Routines for data storage.""" +import json import os import os.path import re +import shutil import time from typing import Any -import json import h5netcdf import h5py import numpy as np -import shutil -from qmi.core.exceptions import QMI_UsageException +import qmi import qmi.data.dataset -from qmi.data.dataset import DataSet from qmi.core.config_struct import config_struct_to_dict +from qmi.core.exceptions import QMI_UsageException +from qmi.data.dataset import DataSet + +QMI_DATASET = "QMI_Dataset_name_{ds_count}" -# Global string definition -QMI_DATASET = "QMI_Dataset_{ds_count}" def _relative_folder_path(date_str: str, time_str: str, label: str) -> str: """Internal function to determine the relative path to a DataFolder.""" @@ -52,7 +53,6 @@ def __init__( Raises: FileNotFoundError: If the specified DataFolder does not exist. """ - self.folder_path = folder_path self.label = label self.date_str = date_str @@ -94,18 +94,16 @@ def _hdf5_file(self, filename: str, mode: str, backend: str) -> h5py.File | h5ne file_found = os.path.isfile(file_path) if mode == "x" and file_found: raise IOError(f"The file {filename} already exists and not allowed to overwrite.") - if mode in ["r+", "r"] and not file_found: raise FileNotFoundError(f"Could not find HDF5 file with name {filename}.") if backend == "h5py": return h5py.File(file_path, mode=mode) - - elif backend == "h5netcdf": + + if backend == "h5netcdf": return h5netcdf.File(file_path, mode=mode, decode_vlen_strings=False) - - else: - raise ValueError(f"Invalid backend type {backend}") + + raise ValueError(f"Invalid backend type {backend}") def write_config(self, config: Any) -> None: """Write QMI configuration to a file in the data folder.""" @@ -124,9 +122,7 @@ def write_config(self, config: Any) -> None: config_fn = "config" full_path_fn = os.path.join(self.folder_path, config_fn + ".json") - config_dict = config_struct_to_dict(config) - with open(full_path_fn, "w") as output: json.dump(config_dict, output, indent=4, sort_keys=True) @@ -172,26 +168,38 @@ def write_dataset( filename = ds.name + ".hdf5" file_path = os.path.join(self.folder_path, filename) if backend == "h5py": - with h5py.File(file_path, "w" if overwrite else "x") as f: - # Add QMI version to file - f.attrs["QMI_version"] = qmi.__version__ - f.attrs["QMI_Dataset"] = 1 - f.attrs[QMI_DATASET.format(ds_count=0)] = ds.name - grp = f.create_group(ds.name) if ds._ndim > 0 else f - qmi.data.dataset.write_dataset_to_hdf5(ds, grp) + f = h5py.File(file_path, "w" if overwrite else "x") elif backend == "h5netcdf": - with h5netcdf.File(file_path, "w" if overwrite else "x", decode_vlen_strings=False) as f: - # Add QMI version to file - f.attrs["QMI_version"] = qmi.__version__ - f.attrs["QMI_Dataset"] = 1 - f.attrs[QMI_DATASET.format(ds_count=0)] = ds.name - grp = f.create_group(ds.name) if ds._ndim > 0 else f - qmi.data.dataset.write_dataset_to_hdf5(ds, grp) + f = h5netcdf.File(file_path, "w" if overwrite else "x", decode_vlen_strings=False) else: raise ValueError(f"Invalid backend type {backend}.") + try: + ds_count = 0 + # Check for existing datasets + while True: + check_name = QMI_DATASET.format(ds_count=ds_count) + if not check_name in f.attrs: + break + + if check_name == ds.name and overwrite: + break + + if check_name == ds.name and not overwrite: + raise QMI_UsageException(f"Dataset {ds.name} already exists and not allowed to overwrite.") + + # Add QMI version to file + f.attrs["QMI_version"] = qmi.__version__ + f.attrs["QMI_Dataset"] = 1 + f.attrs[QMI_DATASET.format(ds_count=ds_count)] = ds.name + target = f if ds.is_raw else f.create_group(ds.name) + qmi.data.dataset.write_dataset_to_hdf5(ds, target) + + finally: + f.close() + elif file_format == "text": filename = ds.name + ".dat" file_path = os.path.join(self.folder_path, filename) @@ -230,8 +238,7 @@ def read_dataset(self, name: str, backend: str = "h5py") -> DataSet: return qmi.data.dataset.read_dataset_from_text(f) # Look for a HDF5 file with matching name. - extensions = [".hdf5", ".h5"] - for ext in extensions: + for ext in [".hdf5", ".h5"]: file_path = os.path.join(self.folder_path, name + ext) if os.path.isfile(file_path): if backend == "h5py": @@ -287,16 +294,17 @@ def open_hdf5file(self, name: str, write_mode: bool = False, backend: str = "h5p """ mode = "r+" if write_mode else "r" return self._hdf5_file(name, mode, backend) - + def add_dataset_to_file( self, hdf5_file: h5py.File | h5netcdf.File, ds: DataSet, root_attrs: dict[ - str, str | int | float | complex | str | np.ndarray | np.integer | list[ - int | float | complex | str - ] | tuple[int | float | complex | str ,...] - ] | None = None + str, + str | int | float | complex | str | np.ndarray | np.integer | list[int | float | complex | str] | tuple[ + int | float | complex | str, ... + ], + ] | None = None, ) -> None: """Add a dataset, and optional file attributes to an existing HDF5 file. @@ -308,7 +316,7 @@ def add_dataset_to_file( Raises: QMI_UsageException: If an attribute with the dataset name already exists in the file. """ - if hasattr(hdf5_file, ds.name): + if ds.name in hdf5_file: raise QMI_UsageException(f"Data file already has an attribute named {ds.name}") if isinstance(hdf5_file, h5netcdf.File): @@ -325,9 +333,8 @@ def add_dataset_to_file( hdf5_file.attrs[QMI_DATASET.format(ds_count=ds_count)] = ds.name dataset_group = hdf5_file.create_group(ds.name) qmi.data.dataset.write_dataset_to_hdf5(ds, dataset_group) - # Add optional file root attrbutes - root_attrs = root_attrs or {} - for attr, val in root_attrs.items(): + # Add root attributes + for attr, val in (root_attrs or {}).items(): hdf5_file.attrs[attr] = val @@ -396,18 +403,16 @@ def make_folder( Raises: FileExistsError: If the DataFolder already exists. """ - # Determine date_str and time_str. if (date_str is None) or (time_str is None): if (date_str is not None) or (time_str is not None): raise ValueError("Specify both date_str and time_str or neither.") + # Generate date_str and time_str from timestamp. if timestamp is None: timestamp = time.time() - if self.USE_LOCAL_TIME: - tm = time.localtime(timestamp) - else: - tm = time.gmtime(timestamp) + + tm = time.localtime(timestamp) if self.USE_LOCAL_TIME else time.gmtime(timestamp) date_str = time.strftime("%Y%m%d", tm) time_str = time.strftime("%H%M%S", tm) @@ -443,7 +448,6 @@ def make_folder( raise FileExistsError(f"Directory {full_path!r} already exists.") os.mkdir(full_path) - return DataFolder(full_path, label, date_str, time_str) def get_folder(self, label: str, date_str: str, time_str: str) -> DataFolder: @@ -500,9 +504,7 @@ def list_folders(self, label: str | None = None) -> list[DataFolder]: Returns: ret: List of matching DataFolder items. """ - ret = [] - date_dirs = os.listdir(self.basedir) date_dirs.sort() for dd in date_dirs: diff --git a/tests/data/test_dataset.py b/tests/data/test_dataset.py index adab4781..bc4850a6 100644 --- a/tests/data/test_dataset.py +++ b/tests/data/test_dataset.py @@ -83,9 +83,9 @@ def test_06_data_dimension_invalid(self): def test_10_create_empty_dataset(self): """Create a simple, empty DataSet instance.""" # Arrange - expected_root_attrs = {"QMI_Dataset": 1} + expected_root_attrs = {} ds_name = "empty_dataset" - ds_shape = (3, 8, 1) + ds_shape = (8, 3) # Act ds = DataSet(ds_name, shape=ds_shape) # Assert @@ -249,7 +249,7 @@ def test_26_invalid_column_unit(self): def test_30_dataset_1col(self): """Create a 3-dimensional, 1-column dataset and setting labels.""" # Arrange - expected_root_attrs = {"QMI_Dataset": 1} + expected_root_attrs = {} ds_name = "my_dataset" ds_shape = (2, 5, 1) data = np.arange(10).reshape(*ds_shape) @@ -272,7 +272,7 @@ def test_40_write_hdf5_simple(self): """Writing a simple dataset as HDF5 with h5py backend.""" ds_name = "my_dataset" - data = 1.4142 * (np.arange(24).reshape(1, 8, 3) - 1) + data = 1.4142 * (np.arange(24).reshape(8, 3) - 1) ds = DataSet(ds_name, data=data) ds.axis_label[0] = "X axis" ds.axis_unit[0] = "mm" @@ -289,7 +289,7 @@ def test_40_write_hdf5_simple(self): self.assertListEqual([ds_name], list(f.keys())) for e, col in enumerate(ds.column_label): - self.assertEqual((8, 3), f[ds_name][col].shape) + self.assertEqual((8,), f[ds_name][col].shape) self.assertEqual(np.float64, f[ds_name][col].dtype) self.assertTrue(np.all(data[:, e] == f[ds_name][col])) self.assertEqual(ds.column_label[e], f[ds_name].attrs[f"{ds_name}_column{e}_label"]) @@ -363,25 +363,25 @@ def test_42_write_hdf5_raises_exception_on_invalid_attrs_name(self): ds.column_unit = ["MHz", "nm", "K"] scale_data = 0.1 * np.arange(8) ds.set_axis_scale(0, scale_data) - ds.attrs["QMI_DataSet"] = "Hello" # <-- Error + ds.attrs["QMI_Dataset"] = "Hello" # <-- Error ds.attrs["number"] = 2.71 - f = h5py.File("test.h5", "w", driver="core", backing_store=False) - with self.assertRaises(ValueError): - qmi.data.dataset.write_dataset_to_hdf5(ds, f) - - ds2 = DataSet(ds_name, data=data) - ds2.axis_label[0] = "X axis" - ds2.axis_unit[0] = "mm" - ds2.column_label = ["red", "green", "blue"] - ds2.column_unit = ["MHz", "nm", "K"] - scale_data = 0.1 * np.arange(8) - ds2.set_axis_scale(0, scale_data) - ds2.attrs["DIMENSION_"] = "Hello" # <-- Error - ds2.attrs["number"] = 2.71 - - with self.assertRaises(ValueError): - qmi.data.dataset.write_dataset_to_hdf5(ds2, f) + with h5py.File("test.h5", "w", driver="core", backing_store=False) as f: + with self.assertRaises(ValueError): + qmi.data.dataset.write_dataset_to_hdf5(ds, f) + + ds2 = DataSet(ds_name, data=data) + ds2.axis_label[0] = "X axis" + ds2.axis_unit[0] = "mm" + ds2.column_label = ["red", "green", "blue"] + ds2.column_unit = ["MHz", "nm", "K"] + scale_data = 0.1 * np.arange(8) + ds2.set_axis_scale(0, scale_data) + ds2.attrs["DIMENSION_"] = "Hello" # <-- Error + ds2.attrs["number"] = 2.71 + + with self.assertRaises(ValueError): + qmi.data.dataset.write_dataset_to_hdf5(ds2, f) def test_43_write_hdf5_simple(self): """Writing a simple dataset as HDF5 with h5netcdf backend.""" @@ -480,12 +480,12 @@ def test_45_write_hdf5_raises_exception_on_invalid_attrs_name(self): ds.column_unit = ["MHz", "nm", "K"] scale_data = 0.1 * np.arange(8) ds.set_axis_scale(0, scale_data) - ds.attrs["QMI_DataSet"] = "Hello" # <-- Error + ds.attrs["QMI_Dataset"] = "Hello" # <-- Error ds.attrs["number"] = 2.71 - f = h5netcdf.File("test.h5", "w", driver="core", backing_store=False, decode_vlen_strings=False) - with self.assertRaises(ValueError): - qmi.data.dataset.write_dataset_to_hdf5(ds, f) + with h5netcdf.File("test.h5", "w", driver="core", backing_store=False, decode_vlen_strings=False) as f: + with self.assertRaises(ValueError): + qmi.data.dataset.write_dataset_to_hdf5(ds, f) ds2 = DataSet(ds_name, data=data) ds2.axis_label[0] = "X axis" @@ -547,12 +547,12 @@ def test_50_write_text_simple(self): self.assertEqual(rawdata.shape, (8, 4)) self.assertTrue(np.all(rawdata == np.column_stack([scale_data, data]))) - self.assertEqual(attrs["QMI_DataSet_name"], repr(ds_name)) - self.assertEqual(attrs["QMI_DataSet_axis0_label"], repr("X axis")) - self.assertEqual(attrs["QMI_DataSet_axis0_unit"], repr("mm")) - self.assertEqual(attrs["QMI_DataSet_column1_label"], repr("red")) - self.assertEqual(attrs["QMI_DataSet_column2_label"], repr("green")) - self.assertEqual(attrs["QMI_DataSet_column2_unit"], repr("nm")) + self.assertEqual(attrs["QMI_Dataset_name"], repr(ds_name)) + self.assertEqual(attrs["QMI_Dataset_axis0_label"], repr("X axis")) + self.assertEqual(attrs["QMI_Dataset_axis0_unit"], repr("mm")) + self.assertEqual(attrs["QMI_Dataset_column1_label"], repr("red")) + self.assertEqual(attrs["QMI_Dataset_column2_label"], repr("green")) + self.assertEqual(attrs["QMI_Dataset_column2_unit"], repr("nm")) self.assertEqual(attrs["hello"], repr("world")) self.assertEqual(attrs["number"], repr(2.71)) @@ -603,7 +603,7 @@ def test_52_write_text_raises_exception_on_invalid_attrs_name(self): ds.column_unit = ["MHz", "nm", "K"] scale_data = 0.1 * np.arange(8) ds.set_axis_scale(0, scale_data) - ds.attrs["QMI_DataSet"] = "Hello" # <-- Error + ds.attrs["QMI_Dataset"] = "Hello" # <-- Error ds.attrs["number"] = 2.71 with self.assertRaises(ValueError), io.StringIO() as f: From e50218a99c3a8de46c7a20a3faf4e8e42078e339 Mon Sep 17 00:00:00 2001 From: Henri Ervasti Date: Wed, 6 May 2026 08:50:56 +0200 Subject: [PATCH 10/25] [200-qmi-dataset-reformulation] Ruff fails without trace. Trying to set --exit-zero flag to prevent this. --- .github/workflows/reusable-ci-workflows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/reusable-ci-workflows.yml b/.github/workflows/reusable-ci-workflows.yml index f0b0f405..0302950d 100644 --- a/.github/workflows/reusable-ci-workflows.yml +++ b/.github/workflows/reusable-ci-workflows.yml @@ -40,7 +40,7 @@ jobs: - name: Run ruff run: | - ruff check --output-file "ruff-results-${{ inputs.python-version }}.log" --output-format pylint + ruff check --output-file "ruff-results-${{ inputs.python-version }}.log" --output-format pylint --exit-zero - name: Upload ruff results uses: actions/upload-artifact@v4 with: From ce546001d7f8c8947f6a423d2761e5fbd417f438 Mon Sep 17 00:00:00 2001 From: Henri Ervasti Date: Wed, 6 May 2026 09:17:15 +0200 Subject: [PATCH 11/25] [200-qmi-dataset-reformulation] Ruff fix and addition of more unittests. --- qmi/data/dataset.py | 8 +- tests/data/test_dataset.py | 147 +++++++++++++++++++++++++++++++++++ tests/data/test_datastore.py | 108 +++++++++++++++++++++++++ 3 files changed, 259 insertions(+), 4 deletions(-) diff --git a/qmi/data/dataset.py b/qmi/data/dataset.py index af9eb2e6..a9b487e0 100644 --- a/qmi/data/dataset.py +++ b/qmi/data/dataset.py @@ -487,8 +487,8 @@ def _read_qmi_dataset(container: h5py.Group | h5netcdf.Group | h5py.File | h5net if layout == "axis" and n_axes > 0 and dataset.is_raw: dataset._activate_axis_mode(0) - dataset._DataSet__axis_ndim = n_axes - dataset._DataSet__raw_mode = False + dataset.__axis_ndim = n_axes + dataset.__raw_mode = False for axis in range(n_axes): dataset.axis_label[axis] = str(attrs.get(f"{group_name}_axis{axis}_label", "")) @@ -891,8 +891,8 @@ def read_dataset_from_text(fh: TextIO) -> DataSet: if n_axes > 0 and dataset.is_raw: dataset._activate_axis_mode(0) - dataset._DataSet__axis_ndim = n_axes - dataset._DataSet__raw_mode = False + dataset.__axis_ndim = n_axes + dataset.__raw_mode = False for axis in range(n_axes): dataset.axis_label[axis] = str(attrs.get(f"QMI_Dataset_axis{axis}_label", "")) diff --git a/tests/data/test_dataset.py b/tests/data/test_dataset.py index bc4850a6..8ac455b9 100644 --- a/tests/data/test_dataset.py +++ b/tests/data/test_dataset.py @@ -268,6 +268,55 @@ def test_30_dataset_1col(self): self.assertEqual(ds.column_unit, [""]) self.assertEqual(expected_root_attrs, ds.attrs) + def test_31_create_raw_1d_dataset(self): + """Create a 1-dimensional raw dataset.""" + # Arrange + ds_name = "raw_trace" + data = np.arange(5, dtype=np.int16) + # Act + ds = DataSet(ds_name, data=data) + ds.set_column_label(0, "signal") + ds.set_column_unit(0, "V") + ds.set_column_name(0, "Measured signal") + # Assert + self.assertEqual(ds_name, ds.name) + self.assertTrue(ds.is_raw) + self.assertEqual(0, ds.n_axes) + self.assertEqual(1, ds.ncol) + self.assertListEqual([], ds.axis_label) + self.assertListEqual(["signal"], ds.column_label) + self.assertListEqual(["V"], ds.column_unit) + self.assertListEqual(["Measured signal"], ds.column_name) + self.assertTrue(np.all(ds.data == data)) + + def test_32_axis_mode_is_activated_for_2d_axis_metadata(self): + """Setting 2D axis metadata changes a raw tabular dataset into an axis dataset.""" + # Arrange + ds = DataSet("axis_trace", shape=(4, 2)) + axis_scale = 0.5 * np.arange(4) + # Act + ds.set_axis_label(0, "time") + ds.set_axis_unit(0, "s") + ds.set_axis_name(0, "Elapsed time") + ds.set_axis_scale(0, axis_scale) + # Assert + self.assertFalse(ds.is_raw) + self.assertEqual(1, ds.n_axes) + self.assertListEqual(["time"], ds.axis_label) + self.assertListEqual(["s"], ds.axis_unit) + self.assertListEqual(["Elapsed time"], ds.axis_name) + self.assertTrue(np.all(ds.axis_scale[0] == axis_scale)) + + def test_33_invalid_column_name(self): + """Setting invalid column names raises exception.""" + ds = DataSet("my_dataset", shape=(2, 8, 3)) + + with self.assertRaises(TypeError): + ds.set_column_name("0", "X") + + with self.assertRaises(ValueError): + ds.set_column_name(-1, "X") + def test_40_write_hdf5_simple(self): """Writing a simple dataset as HDF5 with h5py backend.""" @@ -500,6 +549,75 @@ def test_45_write_hdf5_raises_exception_on_invalid_attrs_name(self): with self.assertRaises(ValueError): qmi.data.dataset.write_dataset_to_hdf5(ds2, f) + def test_46_write_read_hdf5_axis_and_column_names(self): + """Writing and reading long axis and column names as HDF5.""" + ds_name = "named_dataset" + data = np.arange(12, dtype=np.float64).reshape(3, 2, 2) + ds = DataSet(ds_name, data=data) + ds.set_axis_label(0, "x") + ds.set_axis_unit(0, "mm") + ds.set_axis_name(0, "Sample x position") + ds.set_axis_label(1, "y") + ds.set_axis_unit(1, "mm") + ds.set_axis_name(1, "Sample y position") + ds.set_column_label(0, "red") + ds.set_column_unit(0, "counts") + ds.set_column_name(0, "Red detector counts") + ds.set_column_label(1, "blue") + ds.set_column_unit(1, "counts") + ds.set_column_name(1, "Blue detector counts") + + with h5py.File("test.h5", "w", driver="core", backing_store=False) as f: + grp = f.create_group(ds.name) + qmi.data.dataset.write_dataset_to_hdf5(ds, grp) + + ds2 = qmi.data.dataset.read_dataset_from_hdf5(f[ds.name]) + + self.assertListEqual(ds.axis_name, ds2.axis_name) + self.assertListEqual(ds.column_name, ds2.column_name) + self.assertListEqual(ds.axis_label, ds2.axis_label) + self.assertListEqual(ds.column_label, ds2.column_label) + self.assertTrue(np.all(ds2.data == ds.data)) + + def test_47_write_hdf5_duplicate_column_labels_get_unique_keys(self): + """Duplicate column labels are stored under unique HDF5 keys.""" + ds_name = "duplicate_columns" + data = np.arange(12, dtype=np.float64).reshape(4, 3) + ds = DataSet(ds_name, data=data) + ds.set_column_label(0, "signal") + ds.set_column_label(1, "signal") + ds.set_column_label(2, "signal") + + with h5py.File("test.h5", "w", driver="core", backing_store=False) as f: + qmi.data.dataset.write_dataset_to_hdf5(ds, f) + + self.assertCountEqual(["signal", "signal_1", "signal_2"], list(f.keys())) + ds2 = qmi.data.dataset.read_dataset_from_hdf5(f) + + self.assertListEqual(ds.column_label, ds2.column_label) + self.assertTrue(np.all(ds2.data == ds.data)) + + def test_48_convert_plain_hdf5_dataset_to_qmi_dataset(self): + """Convert a plain HDF5 dataset with common metadata attributes.""" + data = np.array([1.0, 2.5, 4.0]) + + with h5py.File("test.h5", "w", driver="core", backing_store=False) as f: + hdf_ds = f.create_dataset("trace", data=data) + hdf_ds.attrs["name"] = "Signal" + hdf_ds.attrs["unit"] = "V" + hdf_ds.attrs["long_name"] = "Input signal" + hdf_ds.attrs["experiment"] = "calibration" + + ds = qmi.data.dataset.read_dataset_from_hdf5(hdf_ds) + + self.assertEqual("trace", ds.name) + self.assertTrue(ds.is_raw) + self.assertListEqual(["Signal"], ds.column_label) + self.assertListEqual(["V"], ds.column_unit) + self.assertListEqual(["Input signal"], ds.column_name) + self.assertEqual("calibration", ds.attrs["experiment"]) + self.assertTrue(np.all(ds.data == data)) + def test_50_write_text_simple(self): """Writing a simple dataset as text.""" ds_name = "my_dataset" @@ -686,6 +804,35 @@ def test_60_parse_repr(self): else: self.assertEqual(w, v) + def test_61_read_text_rejects_invalid_marker(self): + """Reading text data rejects files without a QMI dataset marker.""" + with self.assertRaises(ValueError) as exc, io.StringIO("# Not_QMI_DataSet\n#\n") as f: + qmi.data.dataset.read_dataset_from_text(f) + + self.assertIn("expecting marker", str(exc.exception)) + + def test_62_read_text_rejects_inconsistent_axis_index_data(self): + """Reading text data rejects inconsistent special axis index columns.""" + ds = DataSet("indexed_dataset", data=np.arange(12, dtype=np.float64).reshape(2, 3, 2)) + ds.set_axis_label(0, "x") + ds.set_axis_label(1, "y") + + with io.StringIO() as f: + qmi.data.dataset.write_dataset_to_text(ds, f) + lines = f.getvalue().splitlines() + + for line_index, line in enumerate(lines): + if line and not line.startswith("#"): + words = line.split() + words[0] = "99" + lines[line_index] = " ".join(words) + break + + with self.assertRaises(ValueError) as exc, io.StringIO("\n".join(lines)) as f: + qmi.data.dataset.read_dataset_from_text(f) + + self.assertIn("Inconsistent index data", str(exc.exception)) + if __name__ == "__main__": unittest.main() diff --git a/tests/data/test_datastore.py b/tests/data/test_datastore.py index 1825677c..b4cd23ce 100644 --- a/tests/data/test_datastore.py +++ b/tests/data/test_datastore.py @@ -3,6 +3,7 @@ """Test datastore module.""" import unittest +import unittest.mock import os import inspect @@ -424,6 +425,67 @@ def test_14_write_dataset_again(self): finally: os.remove(expected_file) + def test_15_make_hdf5_file_wrong_extension_raises_exception(self): + """Making a HDF5 file fails with an unsupported file extension.""" + with self.assertRaises(qmi.core.exceptions.QMI_UsageException): + self.datafolder.make_hdf5file("wrong_extension.txt") + + def test_16_make_hdf5_file_invalid_backend_raises_exception(self): + """Making a HDF5 file fails with an unsupported backend.""" + with self.assertRaises(ValueError): + self.datafolder.make_hdf5file("invalid_backend.hdf5", backend="boh") + + def test_17_open_hdf5_file_in_write_mode(self): + """Open an existing hdf5 file in read/write mode.""" + # Arrange + name = "write_mode" + ".hdf5" + expected_file = os.path.join(os.getcwd(), name) + # Act and Assert + try: + with self.datafolder.make_hdf5file(name): + self.assertTrue(os.path.isfile(expected_file)) + + with self.datafolder.open_hdf5file(name, write_mode=True) as hdf5_file: + hdf5_file.attrs["extra"] = "value" + + with self.datafolder.open_hdf5file(name) as hdf5_file: + self.assertEqual("value", hdf5_file.attrs["extra"]) + + finally: + os.remove(expected_file) + + def test_18_read_dataset_with_path_name_raises_exception(self): + """Reading a dataset rejects names that contain a path component.""" + with self.assertRaises(ValueError): + self.datafolder.read_dataset(os.path.join("subfolder", "dataset")) + + def test_19_add_dataset_to_hdf5_file(self): + """Add a dataset and root attributes to an existing HDF5 file.""" + # Arrange + name = "combined" + ".hdf5" + expected_file = os.path.join(os.getcwd(), name) + dataset = _create_dataset() + root_attrs = {"operator": "QMI", "run": 7} + # Act and Assert + try: + with self.datafolder.make_hdf5file(name) as hdf5_file: + self.datafolder.add_dataset_to_file(hdf5_file, dataset, root_attrs=root_attrs) + self.assertIn(dataset.name, hdf5_file) + self.assertEqual(dataset.name, hdf5_file.attrs["QMI_Dataset_name_0"]) + self.assertEqual("QMI", hdf5_file.attrs["operator"]) + self.assertEqual(7, hdf5_file.attrs["run"]) + + with self.datafolder.open_hdf5file(name) as hdf5_file: + read_dataset = qmi.data.dataset.read_dataset_from_hdf5(hdf5_file[dataset.name]) + + self.assertEqual(dataset.name, read_dataset.name) + self.assertListEqual(dataset.axis_label, read_dataset.axis_label) + self.assertListEqual(dataset.column_label, read_dataset.column_label) + self.assertEqual(dataset.data.shape, read_dataset.data.shape) + + finally: + os.remove(expected_file) + class TestDataFolderNoLabel(unittest.TestCase): @@ -773,6 +835,52 @@ def test_15_find_latest_with_specific_date(self): time_folder = os.path.join(day_folder, "{}_{}".format(time_str, name)) os.removedirs(time_folder) + def test_16_get_folder_from_relative_datastore_path(self): + """Get a datastore folder from a path relative to the datastore base directory.""" + # Arrange + name = "temp" + date_str = "20200102" + time_str = "030405" + relative_path = os.path.join(date_str, "{}_{}".format(time_str, name)) + expected_folder = os.path.join(os.getcwd(), relative_path) + self.datastore.make_folder(name, date_str=date_str, time_str=time_str) + try: + # Act + datafolder = self.datastore.get_folder_from_path(relative_path) + # Assert + self.assertEqual(type(datafolder), DataFolder) + self.assertEqual(os.path.abspath(expected_folder), os.path.abspath(datafolder.folder_path)) + + finally: + os.removedirs(expected_folder) + + def test_17_list_folders_without_label_returns_all_labels(self): + """List data folders across labels when no label filter is given.""" + # Arrange + date_str = "20200103" + time_str = "040506" + labels = ["alpha", "beta"] + for label in labels: + self.datastore.make_folder(label, date_str=date_str, time_str=time_str) + + # Act + try: + data_folders = self.datastore.list_folders() + folder_names = [os.path.split(data_folder.folder_path)[-1] for data_folder in data_folders] + # Assert + for label in labels: + self.assertIn("{}_{}".format(time_str, label), folder_names) + + finally: + for label in labels: + day_folder = os.path.join(os.getcwd(), date_str) + time_folder = os.path.join(day_folder, "{}_{}".format(time_str, label)) + os.removedirs(time_folder) + + def test_18_find_latest_folder_returns_none_without_match(self): + """Finding the latest folder returns None if no matching folder exists.""" + self.assertIsNone(self.datastore.find_latest_folder("missing_label")) + if __name__ == "__main__": unittest.main() From 986349673310a19c99a596cb418d5c15b3c01efd Mon Sep 17 00:00:00 2001 From: Henri Ervasti Date: Wed, 6 May 2026 11:14:27 +0200 Subject: [PATCH 12/25] [200-qmi-dataset-reformulation] Adding unit-tests and fixing issues. Try to time coverage runs on CI-pipeline to possibly understand why 3.14 build run fails. --- .github/workflows/pull-request-ci.yml | 16 +++------ .github/workflows/reusable-ci-workflows.yml | 2 +- qmi/data/dataset.py | 36 +++++++++++++-------- qmi/data/datastore.py | 7 ++-- tests/data/test_datastore.py | 18 ----------- 5 files changed, 33 insertions(+), 46 deletions(-) diff --git a/.github/workflows/pull-request-ci.yml b/.github/workflows/pull-request-ci.yml index 9844f303..4c015fce 100644 --- a/.github/workflows/pull-request-ci.yml +++ b/.github/workflows/pull-request-ci.yml @@ -37,25 +37,19 @@ jobs: ref: ${{ github.head_ref }} fetch_depth: 0 - - name: Get ruff log file from Python 3.11 build + - name: Get ruff log file from Python 3.14 build uses: actions/download-artifact@v4 with: - name: ruff-results-3.11 + name: ruff-results-3.14 path: . - - name: Get mypy log file from Python 3.11 build + - name: Get mypy log file from Python 3.14 build uses: actions/download-artifact@v4 with: - name: mypy-results-3.11 + name: mypy-results-3.14 path: . - - name: Get coverage log file from Python 3.11 build - uses: actions/download-artifact@v4 - with: - name: coverage-results-3.11 - path: . - - - name: Get coverage log file from Python latest build + - name: Get coverage log file from Python 3.14 build uses: actions/download-artifact@v4 with: name: coverage-results-3.14 diff --git a/.github/workflows/reusable-ci-workflows.yml b/.github/workflows/reusable-ci-workflows.yml index 0302950d..084c681b 100644 --- a/.github/workflows/reusable-ci-workflows.yml +++ b/.github/workflows/reusable-ci-workflows.yml @@ -62,7 +62,7 @@ jobs: - name: Run coverage run: | - coverage run --branch --source=$SOURCE_DIRS -m unittest discover --start-directory=tests --pattern="test_*.py" + time coverage run --branch --source=$SOURCE_DIRS -m unittest discover --start-directory=tests --pattern="test_*.py" coverage report --show-missing --fail-under=$COVERAGE_MIN_PERC | tee coverage-${{ inputs.python-version }}.log COVERAGE_PERC=$(grep "TOTAL" coverage-${{ inputs.python-version }}.log | grep -Eo '[0-9.]+%' | sed 's/%//') echo "Coverage: $COVERAGE_PERC%" diff --git a/qmi/data/dataset.py b/qmi/data/dataset.py index a9b487e0..de25587e 100644 --- a/qmi/data/dataset.py +++ b/qmi/data/dataset.py @@ -161,12 +161,11 @@ def ncol(self) -> int: def is_raw(self) -> bool: return self.__raw_mode - def _activate_axis_mode(self, axis: int) -> None: + def _activate_axis_mode(self) -> None: """If two-dimensional data has an axis, create it here. This won't have any effect on three-dimensional data. """ - # TODO: Where do we need input parameter `axis`? if self.data.ndim == 2 and self.__raw_mode: self.__raw_mode = False self.__axis_ndim = 1 @@ -200,7 +199,7 @@ def set_axis_label(self, axis: int, label: str) -> None: label: Label string of the axis. """ self._check_axis_number(axis) - self._activate_axis_mode(axis) + self._activate_axis_mode() self.axis_label[axis] = label def set_axis_unit(self, axis: int, unit: str) -> None: @@ -211,7 +210,7 @@ def set_axis_unit(self, axis: int, unit: str) -> None: unit: Unit string of the axis. """ self._check_axis_number(axis) - self._activate_axis_mode(axis) + self._activate_axis_mode() self.axis_unit[axis] = unit def set_axis_name(self, axis: int, name: str) -> None: @@ -222,7 +221,7 @@ def set_axis_name(self, axis: int, name: str) -> None: name: 'Long' name string of the axis. """ self._check_axis_number(axis) - self._activate_axis_mode(axis) + self._activate_axis_mode() self.axis_name[axis] = name def set_axis_scale(self, axis: int, scale: np.ndarray) -> None: @@ -233,7 +232,7 @@ def set_axis_scale(self, axis: int, scale: np.ndarray) -> None: scale: 1D Numpy array of values along the axis. The length must match the size of the axis. """ self._check_axis_number(axis) - self._activate_axis_mode(axis) + self._activate_axis_mode() v = np.array(scale) if v.shape != (self.data.shape[axis],): raise ValueError("Invalid shape for scale array.") @@ -486,7 +485,7 @@ def _read_qmi_dataset(container: h5py.Group | h5netcdf.Group | h5py.File | h5net dataset.timestamp = float(attrs[f"{group_name}_timestamp"]) if layout == "axis" and n_axes > 0 and dataset.is_raw: - dataset._activate_axis_mode(0) + dataset._activate_axis_mode() dataset.__axis_ndim = n_axes dataset.__raw_mode = False @@ -817,13 +816,15 @@ def write_dataset_to_text(dataset: DataSet, fh: TextIO) -> None: if extra_columns: rawdata = np.column_stack(extra_columns + [rawdata]) + # Write marker line. fh.write("# QMI_DataSet\n") fh.write("#\n") - + # Write attributes. for (name, value) in attrs.items(): fh.write(f"# {name}: {value!r}\n") fh.write("#\n") + # Write actual data. np.savetxt(fh, rawdata) @@ -836,7 +837,7 @@ def read_dataset_from_text(fh: TextIO) -> DataSet: Returns: DataSet instance. """ - + # Check marker line. line = fh.readline().strip() if line != "# QMI_DataSet": raise ValueError(f"Invalid file format; expecting marker but got {line!r}") @@ -845,12 +846,15 @@ def read_dataset_from_text(fh: TextIO) -> DataSet: if line != "#": raise ValueError(f"Invalid file format; expecting separator but got {line!r}") + # Read attributes. attrs = {} while True: line = fh.readline().strip() if line == "#": + # Stop at separator between attributes and data. break + # Read attribute. p = line.find(":") if (not line.startswith("# ")) or (p < 0): raise ValueError(f"Invalid file format; expecting attribute but got {line!r}") @@ -862,35 +866,40 @@ def read_dataset_from_text(fh: TextIO) -> DataSet: attrs[name] = _parse_attribute_value(value) + # Read raw data. rawdata = np.loadtxt(fh, ndmin=2) (nrow, total_columns) = rawdata.shape - + # Determine dataset name. dataset_name = attrs.get(QMI_DATASET_NAME) if not isinstance(dataset_name, str): raise ValueError("Missing required attribute QMI_DataSet_name") + # Determine dataset shape data_ndim = int(attrs[QMI_DATASET_DATA_NDIM]) n_axes = int(attrs.get(QMI_DATASET_N_AXES, 0)) ncol = int(attrs[QMI_DATASET_NCOL]) shape = tuple(int(attrs[f"QMI_Dataset_dim{dim_index}_size"]) for dim_index in range(data_ndim)) - + # Verify data dimensions. if total_columns < ncol: raise ValueError(f"Expecting at least {ncol} columns but got {total_columns} columns") + num_special_columns = total_columns - ncol - if data_ndim == 1: data = rawdata[:, num_special_columns] + else: expect_rows = np.prod(shape[:-1]) if len(shape) > 1 else shape[0] if nrow != expect_rows: raise ValueError(f"Expecting {expect_rows} rows but got {nrow} rows") + data = rawdata[:, num_special_columns:].reshape(shape) + # Create dataset instance. dataset = DataSet(name=dataset_name, data=data) dataset.timestamp = float(attrs[QMI_DATASET_TIMESTAMP]) if n_axes > 0 and dataset.is_raw: - dataset._activate_axis_mode(0) + dataset._activate_axis_mode() dataset.__axis_ndim = n_axes dataset.__raw_mode = False @@ -924,6 +933,7 @@ def read_dataset_from_text(fh: TextIO) -> DataSet: inner_rows = int(np.prod(dataset.data.shape[axis+1:-1], dtype=np.int32)) if dataset.n_axes == 1: inner_rows = 1 + scale = rawdata[0:n*inner_rows:inner_rows, col] scale_raw = np.tile(np.repeat(scale, inner_rows), outer_rows) if not np.all(rawdata[:, col] == scale_raw): diff --git a/qmi/data/datastore.py b/qmi/data/datastore.py index 7caf01a8..02dc1f44 100644 --- a/qmi/data/datastore.py +++ b/qmi/data/datastore.py @@ -157,9 +157,10 @@ def write_dataset( backend: Select backend for HDF5 file format. Options are "hdf5" (default) and "h5netcdf".` Raises: - ValueError: Dataset name is invalid. - ValueError: Invalid HDF5 file backend. - OSError: If the data folder already contains a file with the same name. + ValueError: Dataset name is invalid. + ValueError: Invalid HDF5 file backend. + OSError: If the data folder already contains a file with the same name. + QMI_UsageException: Dataset name already exists and overwrite not allowed. """ if not re.match(r"^[-_a-zA-Z0-9(),]+$", ds.name): raise ValueError(f"Invalid DataSet name {ds.name!r}") diff --git a/tests/data/test_datastore.py b/tests/data/test_datastore.py index b4cd23ce..078de381 100644 --- a/tests/data/test_datastore.py +++ b/tests/data/test_datastore.py @@ -194,24 +194,6 @@ def test_06b_read_dataset_in_hdf5_h5netcdf_backend(self): expected_dataset = _create_dataset() expected_file = os.path.join(os.getcwd(), expected_dataset.name + ".hdf5") - # ds_name = expected_dataset.name - # expected_attrs = expected_dataset.attrs.copy() - # expected_attrs.update( - # { - # f"{ds_name}_axis0_label": "X", - # f"{ds_name}_axis0_unit": "um", - # f"{ds_name}_axis1_label": "Z", - # f"{ds_name}_axis1_unit": "mm", - # f"{ds_name}_column0_label": "power", - # f"{ds_name}_column0_unit": "mW", - # f"{ds_name}_column1_label": "countrate", - # f"{ds_name}_column1_unit": "kHz", - # f"{ds_name}_column2_label": "temperature", - # f"{ds_name}_column2_unit": "K", - # f"{ds_name}_time_str": expected_time_str, - # f"{ds_name}_timestamp": expected_timestamp, - # } - # ) try: self.datafolder.write_dataset(expected_dataset, backend="h5netcdf") # Act From 4ff6e1bb9cee18d522233e4c9360bce3aea2aa7c Mon Sep 17 00:00:00 2001 From: Henri Ervasti Date: Wed, 6 May 2026 11:37:10 +0200 Subject: [PATCH 13/25] [200-qmi-dataset-reformulation] try to upgrade coverage before running it --- .github/workflows/reusable-ci-workflows.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/reusable-ci-workflows.yml b/.github/workflows/reusable-ci-workflows.yml index 084c681b..1cf2c41a 100644 --- a/.github/workflows/reusable-ci-workflows.yml +++ b/.github/workflows/reusable-ci-workflows.yml @@ -62,7 +62,8 @@ jobs: - name: Run coverage run: | - time coverage run --branch --source=$SOURCE_DIRS -m unittest discover --start-directory=tests --pattern="test_*.py" + pip install --upgrade coverage + coverage run --branch --source=$SOURCE_DIRS -m unittest discover --start-directory=tests --pattern="test_*.py" coverage report --show-missing --fail-under=$COVERAGE_MIN_PERC | tee coverage-${{ inputs.python-version }}.log COVERAGE_PERC=$(grep "TOTAL" coverage-${{ inputs.python-version }}.log | grep -Eo '[0-9.]+%' | sed 's/%//') echo "Coverage: $COVERAGE_PERC%" From 175d357eb71651a6fcc7b3888b20239c65beb8f6 Mon Sep 17 00:00:00 2001 From: Henri Ervasti Date: Wed, 6 May 2026 11:49:19 +0200 Subject: [PATCH 14/25] [200-qmi-dataset-reformulation] Now trying with adding of .coveragerc file. --- .coveragerc | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .coveragerc diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 00000000..f6c5c9ec --- /dev/null +++ b/.coveragerc @@ -0,0 +1,3 @@ +[run] +core = ctrace +branch = True From adc3a63e8fb8379446d1c7a6ce1819eec91a18ad Mon Sep 17 00:00:00 2001 From: Badge Bot <> Date: Wed, 6 May 2026 09:56:58 +0000 Subject: [PATCH 15/25] Update badges --- .github/badges/coverage.svg | 12 ++++++------ .github/badges/mypy.svg | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/badges/coverage.svg b/.github/badges/coverage.svg index d283ae09..8180068a 100644 --- a/.github/badges/coverage.svg +++ b/.github/badges/coverage.svg @@ -1,23 +1,23 @@ - + - + - - + + coverage coverage - 91% - 91% + % + % diff --git a/.github/badges/mypy.svg b/.github/badges/mypy.svg index 6e625d92..0411eb05 100644 --- a/.github/badges/mypy.svg +++ b/.github/badges/mypy.svg @@ -1,23 +1,23 @@ - + - + - - + + mypy mypy - pass - pass + fail + fail From fead463cb220609d66108f1a8b96fb36f7a635b8 Mon Sep 17 00:00:00 2001 From: Henri Ervasti Date: Wed, 6 May 2026 11:57:54 +0200 Subject: [PATCH 16/25] [200-qmi-dataset-reformulation] removed added coverage pip ugrade line. --- .github/workflows/reusable-ci-workflows.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/reusable-ci-workflows.yml b/.github/workflows/reusable-ci-workflows.yml index 1cf2c41a..0302950d 100644 --- a/.github/workflows/reusable-ci-workflows.yml +++ b/.github/workflows/reusable-ci-workflows.yml @@ -62,7 +62,6 @@ jobs: - name: Run coverage run: | - pip install --upgrade coverage coverage run --branch --source=$SOURCE_DIRS -m unittest discover --start-directory=tests --pattern="test_*.py" coverage report --show-missing --fail-under=$COVERAGE_MIN_PERC | tee coverage-${{ inputs.python-version }}.log COVERAGE_PERC=$(grep "TOTAL" coverage-${{ inputs.python-version }}.log | grep -Eo '[0-9.]+%' | sed 's/%//') From d895dca88e01a04b8a8e667eeade9c6c2f5a8055 Mon Sep 17 00:00:00 2001 From: Henri Ervasti Date: Wed, 6 May 2026 12:17:41 +0200 Subject: [PATCH 17/25] [200-qmi-dataset-reformulation] Improving coverage --- tests/data/test_dataset.py | 369 +++++++++++++++++++++++++++++++++++ tests/data/test_datastore.py | 179 +++++++++++++++++ 2 files changed, 548 insertions(+) diff --git a/tests/data/test_dataset.py b/tests/data/test_dataset.py index 8ac455b9..0070f3d7 100644 --- a/tests/data/test_dataset.py +++ b/tests/data/test_dataset.py @@ -317,6 +317,29 @@ def test_33_invalid_column_name(self): with self.assertRaises(ValueError): ds.set_column_name(-1, "X") + def test_34_internal_properties_and_unusual_axis_activation(self): + """Cover internal dimension state and axis activation list initialization.""" + ds = DataSet("typed_dataset", shape=(4,), dtype=np.int32) + + self.assertEqual(0, ds._ndim) + self.assertEqual(np.int32, ds.data.dtype) + + with self.assertRaises(ValueError): + DataSet("scalar_dataset", data=np.array(1.0)) + + ds2 = DataSet("manual_axis_dataset", shape=(3, 2)) + ds2.axis_label = [] + ds2.axis_unit = [] + ds2.axis_name = [] + ds2.axis_scale = [] + ds2.set_axis_label(0, "row") + + self.assertFalse(ds2.is_raw) + self.assertListEqual(["row"], ds2.axis_label) + self.assertListEqual([""], ds2.axis_unit) + self.assertListEqual([""], ds2.axis_name) + self.assertListEqual([None], ds2.axis_scale) + def test_40_write_hdf5_simple(self): """Writing a simple dataset as HDF5 with h5py backend.""" @@ -618,6 +641,217 @@ def test_48_convert_plain_hdf5_dataset_to_qmi_dataset(self): self.assertEqual("calibration", ds.attrs["experiment"]) self.assertTrue(np.all(ds.data == data)) + def test_49_write_read_hdf5_raw_1d_dataset(self): + """Writing and reading a raw 1D dataset as HDF5.""" + data = np.arange(5, dtype=np.float64) + ds = DataSet("raw_signal", data=data) + ds.set_column_label(0, "signal") + ds.set_column_unit(0, "V") + ds.set_column_name(0, "Input signal") + + with h5py.File("test.h5", "w", driver="core", backing_store=False) as f: + qmi.data.dataset.write_dataset_to_hdf5(ds, f) + + self.assertIn("raw_signal_column0_key", f.attrs) + self.assertEqual("signal", f["signal"].attrs["name"]) + self.assertEqual("V", f["signal"].attrs["unit"]) + self.assertEqual("Input signal", f["signal"].attrs["long_name"]) + ds2 = qmi.data.dataset.read_dataset_from_hdf5(f) + + self.assertTrue(ds2.is_raw) + self.assertTrue(np.all(ds2.data == data)) + self.assertListEqual(ds.column_label, ds2.column_label) + self.assertListEqual(ds.column_unit, ds2.column_unit) + self.assertListEqual(ds.column_name, ds2.column_name) + + def test_49b_write_hdf5_raw_2d_dataset(self): + """Writing a raw 2D dataset as HDF5 creates one dataset per column.""" + data = np.arange(12, dtype=np.float64).reshape(4, 3) + ds = DataSet("raw_table", data=data) + ds.set_column_label(0, "x") + ds.set_column_unit(0, "mm") + ds.set_column_name(0, "X position") + ds.set_column_label(1, "y") + ds.set_column_unit(1, "mm") + ds.set_column_name(1, "Y position") + ds.set_column_name(2, "Signal") + + with h5py.File("test.h5", "w", driver="core", backing_store=False) as f: + qmi.data.dataset.write_dataset_to_hdf5(ds, f) + + self.assertCountEqual(["x", "y", "column_2"], list(f.keys())) + self.assertEqual("x", f["x"].attrs["name"]) + self.assertEqual("mm", f["x"].attrs["unit"]) + self.assertEqual("X position", f["x"].attrs["long_name"]) + self.assertEqual("Signal", f["column_2"].attrs["long_name"]) + + def test_49c_write_hdf5_duplicate_axis_labels_get_unique_scale_keys(self): + """Duplicate axis labels are stored under unique HDF5 scale keys.""" + data = np.arange(12, dtype=np.float64).reshape(2, 3, 2) + ds = DataSet("duplicate_axes", data=data) + ds.set_axis_label(0, "axis") + ds.set_axis_unit(0, "s") + ds.set_axis_name(0, "First axis") + ds.set_axis_scale(0, np.array([1.0, 2.0])) + ds.set_axis_label(1, "axis") + ds.set_axis_unit(1, "m") + ds.set_axis_name(1, "Second axis") + ds.set_axis_scale(1, np.array([3.0, 4.0, 5.0])) + ds.set_column_label(0, "a") + ds.set_column_label(1, "b") + + with h5py.File("test.h5", "w", driver="core", backing_store=False) as f: + grp = f.create_group(ds.name) + qmi.data.dataset.write_dataset_to_hdf5(ds, grp) + + self.assertIn("axis", grp) + self.assertIn("axis_1", grp) + self.assertEqual("First axis", grp["axis"].attrs["long_name"]) + self.assertEqual("Second axis", grp["axis_1"].attrs["long_name"]) + self.assertEqual("axis_1", grp.attrs["duplicate_axes_axis1_key"]) + + def test_49d_read_hdf5_rejects_mismatched_column_shapes(self): + """Reading QMI HDF5 metadata rejects columns with mismatched shapes.""" + with h5py.File("test.h5", "w", driver="core", backing_store=False) as f: + f.attrs["QMI_Dataset"] = 1 + f.attrs["QMI_Dataset_name"] = "bad_columns" + f.attrs["QMI_Dataset_layout"] = "raw" + f.attrs["bad_columns_timestamp"] = 1.0 + f.attrs["bad_columns_data_ndim"] = 2 + f.attrs["bad_columns_n_axes"] = 0 + f.attrs["bad_columns_ncol"] = 2 + f.attrs["bad_columns_dim0_size"] = 2 + f.attrs["bad_columns_dim1_size"] = 2 + f.attrs["bad_columns_column0_key"] = "a" + f.attrs["bad_columns_column1_key"] = "b" + f.create_dataset("a", data=np.arange(2)) + f.create_dataset("b", data=np.arange(3)) + + with self.assertRaises(ValueError) as exc: + qmi.data.dataset.read_dataset_from_hdf5(f) + + self.assertIn("matching shapes", str(exc.exception)) + + def test_49e_read_hdf5_rejects_invalid_axis_scale_shape(self): + """Reading QMI HDF5 metadata rejects invalid axis scale shapes.""" + ds = DataSet("bad_scale", data=np.arange(6, dtype=np.float64).reshape(3, 2)) + ds.set_axis_label(0, "time") + ds.set_column_label(0, "a") + ds.set_column_label(1, "b") + + with h5py.File("test.h5", "w", driver="core", backing_store=False) as f: + qmi.data.dataset.write_dataset_to_hdf5(ds, f) + f.attrs["bad_scale_axis0_key"] = "bad_time" + f.create_dataset("bad_time", data=np.arange(2)) + + with self.assertRaises(ValueError) as exc: + qmi.data.dataset.read_dataset_from_hdf5(f) + + self.assertIn("Invalid shape of dimension scale", str(exc.exception)) + + def test_49f_convert_plain_hdf5_group_with_axes_and_columns(self): + """Convert a plain HDF5 group with dimension scales and columns.""" + with h5py.File("test.h5", "w", driver="core", backing_store=False) as f: + grp = f.create_group("plain_group") + x = grp.create_dataset("x", data=np.array([0.0, 0.5])) + x.attrs["name"] = "x" + x.attrs["unit"] = "mm" + x.attrs["long_name"] = "X position" + x.make_scale("x") + y = grp.create_dataset("y", data=np.array([1.0, 2.0, 3.0])) + y.attrs["name"] = "y" + y.attrs["units"] = "s" + y.attrs["long_name"] = "Y delay" + y.make_scale("y") + signal = grp.create_dataset("signal", data=np.arange(6, dtype=np.float64).reshape(2, 3)) + signal.attrs["name"] = "counts" + signal.attrs["unit"] = "Hz" + signal.attrs["long_name"] = "Photon counts" + background = grp.create_dataset("background", data=np.ones((2, 3))) + background.attrs["label"] = "bg" + grp.attrs["experiment"] = "scan" + + ds = qmi.data.dataset.convert_to_qmi_dataset(grp) + + self.assertEqual("plain_group", ds.name) + self.assertFalse(ds.is_raw) + self.assertListEqual(["x", "y"], ds.axis_label) + self.assertListEqual(["mm", "s"], ds.axis_unit) + self.assertListEqual(["X position", "Y delay"], ds.axis_name) + self.assertTrue(np.all(ds.axis_scale[0] == np.array([0.0, 0.5]))) + self.assertCountEqual(["counts", "bg"], ds.column_label) + counts_index = ds.column_label.index("counts") + self.assertEqual("Hz", ds.column_unit[counts_index]) + self.assertEqual("Photon counts", ds.column_name[counts_index]) + self.assertEqual("scan", ds.attrs["experiment"]) + self.assertEqual((2, 3, 2), ds.data.shape) + + def test_49g_convert_plain_hdf5_file_with_single_group(self): + """Convert a plain HDF5 file containing one group.""" + with h5py.File("test.h5", "w", driver="core", backing_store=False) as f: + grp = f.create_group("single") + grp.create_dataset("signal", data=np.array([1.0, 2.0])) + + ds = qmi.data.dataset.convert_to_qmi_dataset(f) + + self.assertEqual("single", ds.name) + self.assertListEqual(["signal"], ds.column_label) + self.assertTrue(np.all(ds.data == np.array([1.0, 2.0]))) + + def test_49h_convert_plain_hdf5_file_with_root_datasets(self): + """Convert a plain HDF5 file with root datasets and a root name attribute.""" + with h5py.File("test.h5", "w", driver="core", backing_store=False) as f: + f.attrs["name"] = "root_dataset" + f.create_dataset("signal", data=np.array([1.0, 2.0])) + + ds = qmi.data.dataset.convert_to_qmi_dataset(f) + + self.assertEqual("root_dataset", ds.name) + self.assertListEqual(["signal"], ds.column_label) + + def test_49i_convert_plain_hdf5_axis_only_group(self): + """Convert a plain HDF5 group that only contains an axis scale dataset.""" + with h5py.File("test.h5", "w", driver="core", backing_store=False) as f: + grp = f.create_group("axis_only") + axis = grp.create_dataset("time", data=np.array([1.0, 2.0, 3.0])) + axis.attrs["name"] = "time" + axis.attrs["unit"] = "s" + axis.attrs["long_name"] = "Elapsed time" + axis.make_scale("time") + + ds = qmi.data.dataset.convert_to_qmi_dataset(grp) + + self.assertTrue(ds.is_raw) + self.assertListEqual(["time"], ds.column_label) + self.assertListEqual(["s"], ds.column_unit) + self.assertListEqual(["Elapsed time"], ds.column_name) + self.assertTrue(np.all(ds.data == np.array([1.0, 2.0, 3.0]))) + + def test_49j_convert_plain_hdf5_group_error_cases(self): + """Converting plain HDF5 groups rejects ambiguous or invalid inputs.""" + with h5py.File("test.h5", "w", driver="core", backing_store=False) as f: + f.create_group("one") + f.create_group("two") + with self.assertRaises(RuntimeError): + qmi.data.dataset.convert_to_qmi_dataset(f) + + with h5py.File("test.h5", "w", driver="core", backing_store=False) as f: + grp = f.create_group("nested") + grp.create_group("inner") + with self.assertRaises(RuntimeError): + qmi.data.dataset.convert_to_qmi_dataset(grp) + + with h5py.File("test.h5", "w", driver="core", backing_store=False) as f: + with self.assertRaises(RuntimeError): + qmi.data.dataset.convert_to_qmi_dataset(f) + + with h5py.File("test.h5", "w", driver="core", backing_store=False) as f: + grp = f.create_group("mismatch") + grp.create_dataset("a", data=np.arange(2)) + grp.create_dataset("b", data=np.arange(3)) + with self.assertRaises(ValueError): + qmi.data.dataset.convert_to_qmi_dataset(grp) + def test_50_write_text_simple(self): """Writing a simple dataset as text.""" ds_name = "my_dataset" @@ -811,6 +1045,114 @@ def test_61_read_text_rejects_invalid_marker(self): self.assertIn("expecting marker", str(exc.exception)) + def test_61b_parse_attribute_value_edge_cases(self): + """Parsing text attributes handles booleans, octal escapes and invalid syntax.""" + self.assertTrue(qmi.data.dataset._parse_attribute_value("True")) + self.assertFalse(qmi.data.dataset._parse_attribute_value("False")) + self.assertEqual("S", qmi.data.dataset._parse_attribute_value("'\\123'")) + + for invalid_value in ["x'abc'", "'abc", "'a'b'"]: + with self.assertRaises(ValueError): + qmi.data.dataset._parse_attribute_value(invalid_value) + + def test_61c_read_text_rejects_invalid_separator(self): + """Reading text data rejects an invalid separator after the marker.""" + with self.assertRaises(ValueError) as exc, io.StringIO("# QMI_DataSet\n# not empty\n") as f: + qmi.data.dataset.read_dataset_from_text(f) + + self.assertIn("expecting separator", str(exc.exception)) + + def test_61d_read_text_rejects_invalid_attribute_lines(self): + """Reading text data rejects malformed attribute lines.""" + texts = [ + "# QMI_DataSet\n#\nnot an attribute\n", + "# QMI_DataSet\n#\n# : 1\n", + ] + for text in texts: + with self.assertRaises(ValueError), io.StringIO(text) as f: + qmi.data.dataset.read_dataset_from_text(f) + + def test_61e_read_text_rejects_missing_dataset_name(self): + """Reading text data rejects files without a string dataset name.""" + text = "\n".join([ + "# QMI_DataSet", + "#", + "# QMI_Dataset_name: 123", + "# QMI_Dataset_timestamp: 1.0", + "# QMI_Dataset_data_ndim: 1", + "# QMI_Dataset_ncol: 1", + "# QMI_Dataset_dim0_size: 1", + "#", + "1.0", + ]) + + with self.assertRaises(ValueError) as exc, io.StringIO(text) as f: + qmi.data.dataset.read_dataset_from_text(f) + + self.assertIn("Missing required attribute", str(exc.exception)) + + def test_61f_read_text_rejects_too_few_columns(self): + """Reading text data rejects files with fewer data columns than metadata declares.""" + text = "\n".join([ + "# QMI_DataSet", + "#", + "# QMI_Dataset_name: 'few_columns'", + "# QMI_Dataset_timestamp: 1.0", + "# QMI_Dataset_data_ndim: 1", + "# QMI_Dataset_ncol: 2", + "# QMI_Dataset_dim0_size: 1", + "#", + "1.0", + ]) + + with self.assertRaises(ValueError) as exc, io.StringIO(text) as f: + qmi.data.dataset.read_dataset_from_text(f) + + self.assertIn("Expecting at least 2 columns", str(exc.exception)) + + def test_61g_read_text_rejects_wrong_number_of_rows(self): + """Reading text data rejects files with the wrong number of rows.""" + text = "\n".join([ + "# QMI_DataSet", + "#", + "# QMI_Dataset_name: 'wrong_rows'", + "# QMI_Dataset_timestamp: 1.0", + "# QMI_Dataset_data_ndim: 2", + "# QMI_Dataset_ncol: 1", + "# QMI_Dataset_dim0_size: 3", + "# QMI_Dataset_dim1_size: 1", + "#", + "1.0", + "2.0", + ]) + + with self.assertRaises(ValueError) as exc, io.StringIO(text) as f: + qmi.data.dataset.read_dataset_from_text(f) + + self.assertIn("Expecting 3 rows", str(exc.exception)) + + def test_61h_read_text_rejects_missing_special_column_label(self): + """Reading text data rejects special columns without a label.""" + text = "\n".join([ + "# QMI_DataSet", + "#", + "# QMI_Dataset_name: 'missing_special_label'", + "# QMI_Dataset_timestamp: 1.0", + "# QMI_Dataset_data_ndim: 2", + "# QMI_Dataset_n_axes: 1", + "# QMI_Dataset_ncol: 1", + "# QMI_Dataset_dim0_size: 2", + "# QMI_Dataset_dim1_size: 1", + "#", + "0.0 1.0", + "1.0 2.0", + ]) + + with self.assertRaises(ValueError) as exc, io.StringIO(text) as f: + qmi.data.dataset.read_dataset_from_text(f) + + self.assertIn("Missing label for special column", str(exc.exception)) + def test_62_read_text_rejects_inconsistent_axis_index_data(self): """Reading text data rejects inconsistent special axis index columns.""" ds = DataSet("indexed_dataset", data=np.arange(12, dtype=np.float64).reshape(2, 3, 2)) @@ -833,6 +1175,33 @@ def test_62_read_text_rejects_inconsistent_axis_index_data(self): self.assertIn("Inconsistent index data", str(exc.exception)) + def test_63_read_text_rejects_inconsistent_axis_scale_data(self): + """Reading text data rejects inconsistent special axis scale columns.""" + ds = DataSet("scaled_dataset", data=np.arange(6, dtype=np.float64).reshape(2, 3, 1)) + ds.set_axis_label(0, "x") + ds.set_axis_label(1, "y") + ds.set_axis_scale(0, np.array([1.0, 2.0])) + + with io.StringIO() as f: + qmi.data.dataset.write_dataset_to_text(ds, f) + lines = f.getvalue().splitlines() + + data_line_count = 0 + for line_index, line in enumerate(lines): + if line and not line.startswith("#"): + data_line_count += 1 + if data_line_count == 1: + continue + words = line.split() + words[2] = "99" + lines[line_index] = " ".join(words) + break + + with self.assertRaises(ValueError) as exc, io.StringIO("\n".join(lines)) as f: + qmi.data.dataset.read_dataset_from_text(f) + + self.assertIn("Inconsistent scale data", str(exc.exception)) + if __name__ == "__main__": unittest.main() diff --git a/tests/data/test_datastore.py b/tests/data/test_datastore.py index 078de381..9df18ae2 100644 --- a/tests/data/test_datastore.py +++ b/tests/data/test_datastore.py @@ -468,6 +468,107 @@ def test_19_add_dataset_to_hdf5_file(self): finally: os.remove(expected_file) + def test_20_repr(self): + """DataFolder repr includes its folder path.""" + self.assertEqual("DataFolder({!r})".format(os.getcwd()), repr(self.datafolder)) + + def test_21_create_config_json_file_with_full_name(self): + """Create a JSON file with label, date and time in the file name.""" + datafolder = DataFolder(os.getcwd(), "test", "20200102", "030405") + expected_file = os.path.join(os.getcwd(), "test-20200102-030405.json") + try: + datafolder.write_config(CfgLogging()) + self.assertTrue(os.path.isfile(expected_file)) + + finally: + os.remove(expected_file) + + def test_22_write_dataset_invalid_name_raises_exception(self): + """Writing a dataset with an invalid name raises an exception.""" + dataset = _create_dataset() + dataset.name = "wrong name" + + with self.assertRaises(ValueError): + self.datafolder.write_dataset(dataset) + + def test_23_write_dataset_invalid_backend_raises_exception(self): + """Writing a HDF5 dataset with an invalid backend raises an exception.""" + dataset = _create_dataset() + + with self.assertRaises(ValueError): + self.datafolder.write_dataset(dataset, backend="boh") + + def test_24_read_hdf5_file_without_named_dataset_raises_exception(self): + """Reading HDF5 files rejects files that do not contain the named dataset.""" + name = "missing_in_file" + expected_file = os.path.join(os.getcwd(), name + ".hdf5") + try: + with File(expected_file, "x") as hdf5_file: + hdf5_file.create_group("other") + + with self.assertRaises(FileNotFoundError): + self.datafolder.read_dataset(name) + + finally: + os.remove(expected_file) + + def test_25_read_hdf5_file_without_named_dataset_h5netcdf_raises_exception(self): + """Reading h5netcdf files rejects files that do not contain the named dataset.""" + name = "missing_in_netcdf_file" + expected_file = os.path.join(os.getcwd(), name + ".hdf5") + try: + with NetCdfFile(expected_file, "x", decode_vlen_strings=False) as hdf5_file: + hdf5_file.create_group("other") + + with self.assertRaises(FileNotFoundError): + self.datafolder.read_dataset(name, backend="h5netcdf") + + finally: + os.remove(expected_file) + + def test_26_read_dataset_invalid_backend_raises_exception(self): + """Reading an existing HDF5 dataset with an invalid backend raises an exception.""" + dataset = _create_dataset() + expected_file = os.path.join(os.getcwd(), dataset.name + ".hdf5") + try: + self.datafolder.write_dataset(dataset) + + with self.assertRaises(ValueError): + self.datafolder.read_dataset(dataset.name, backend="boh") + + finally: + os.remove(expected_file) + + def test_27_add_dataset_to_file_duplicate_name_raises_exception(self): + """Adding a dataset to a file fails if a matching group already exists.""" + name = "duplicate_add" + ".hdf5" + expected_file = os.path.join(os.getcwd(), name) + dataset = _create_dataset() + try: + with self.datafolder.make_hdf5file(name) as hdf5_file: + hdf5_file.create_group(dataset.name) + + with self.assertRaises(qmi.core.exceptions.QMI_UsageException): + self.datafolder.add_dataset_to_file(hdf5_file, dataset) + + finally: + os.remove(expected_file) + + def test_28_add_dataset_to_file_uses_next_dataset_counter(self): + """Adding a dataset uses the next free QMI dataset counter attribute.""" + name = "counter_add" + ".hdf5" + expected_file = os.path.join(os.getcwd(), name) + dataset = _create_dataset() + try: + with self.datafolder.make_hdf5file(name) as hdf5_file: + hdf5_file.attrs["QMI_Dataset_name_0"] = "existing" + self.datafolder.add_dataset_to_file(hdf5_file, dataset) + + self.assertEqual(dataset.name, hdf5_file.attrs["QMI_Dataset_name_1"]) + + finally: + os.remove(expected_file) + class TestDataFolderNoLabel(unittest.TestCase): @@ -863,6 +964,84 @@ def test_18_find_latest_folder_returns_none_without_match(self): """Finding the latest folder returns None if no matching folder exists.""" self.assertIsNone(self.datastore.find_latest_folder("missing_label")) + def test_19_repr(self): + """DataStore repr includes its base directory.""" + self.assertEqual("DataStore({!r})".format(os.getcwd()), repr(self.datastore)) + + def test_20_create_datastore_with_missing_base_directory_raises_exception(self): + """Creating a datastore fails if the base directory does not exist.""" + missing_basedir = os.path.join(os.getcwd(), "missing_datastore_base") + + with self.assertRaises(FileNotFoundError): + DataStore(missing_basedir) + + def test_21_make_folder_with_timestamp_and_date_time_raises_exception(self): + """Making a folder rejects timestamp together with date and time strings.""" + with self.assertRaises(ValueError): + self.datastore.make_folder("temp", timestamp=1.0, date_str="20200102", time_str="030405") + + def test_22_make_folder_uses_utc_when_local_time_is_disabled(self): + """Make a datastore folder using UTC time when configured.""" + name = "utc" + timestamp = 0.0 + date_str = "19700101" + time_str = "000000" + expected_folder = os.path.join(os.getcwd(), date_str, "{}_{}".format(time_str, name)) + old_use_local_time = DataStore.USE_LOCAL_TIME + DataStore.USE_LOCAL_TIME = False + try: + datafolder = self.datastore.make_folder(name, timestamp=timestamp) + + self.assertEqual(type(datafolder), DataFolder) + self.assertTrue(os.path.isdir(expected_folder)) + + finally: + DataStore.USE_LOCAL_TIME = old_use_local_time + os.removedirs(expected_folder) + + def test_23_get_folder_from_path_relative_to_base_directory(self): + """Get a folder from a relative path that is resolved against the datastore base directory.""" + base_dir = os.path.join(os.getcwd(), "tmp_datastore_base") + name = "temp" + date_str = "20200104" + time_str = "050607" + relative_path = os.path.join(date_str, "{}_{}".format(time_str, name)) + expected_folder = os.path.join(base_dir, relative_path) + os.mkdir(base_dir) + datastore = DataStore(base_dir) + try: + datastore.make_folder(name, date_str=date_str, time_str=time_str) + + datafolder = datastore.get_folder_from_path(relative_path) + + self.assertEqual(os.path.abspath(expected_folder), os.path.abspath(datafolder.folder_path)) + + finally: + os.removedirs(expected_folder) + + def test_24_list_folders_ignores_non_matching_entries(self): + """Listing folders ignores non-date directories, files and malformed folder names.""" + date_str = "20200105" + name = "wanted" + time_str = "060708" + day_folder = os.path.join(os.getcwd(), date_str) + wanted_folder = os.path.join(day_folder, "{}_{}".format(time_str, name)) + malformed_folder = os.path.join(day_folder, "not_a_measurement") + non_date_folder = os.path.join(os.getcwd(), "notadate") + self.datastore.make_folder(name, date_str=date_str, time_str=time_str) + os.mkdir(malformed_folder) + os.mkdir(non_date_folder) + try: + data_folders = self.datastore.list_folders(name) + + self.assertEqual(1, len(data_folders)) + self.assertEqual(wanted_folder, data_folders[0].folder_path) + + finally: + os.rmdir(malformed_folder) + os.rmdir(non_date_folder) + os.removedirs(wanted_folder) + if __name__ == "__main__": unittest.main() From fb387bd7314b9799ee613616f6b5421adebf414b Mon Sep 17 00:00:00 2001 From: Henri Ervasti Date: Wed, 6 May 2026 12:31:01 +0200 Subject: [PATCH 18/25] [200-qmi-dataset-reformulation] badge issue fix, hopefully. --- .github/workflows/pull-request-ci.yml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pull-request-ci.yml b/.github/workflows/pull-request-ci.yml index 4c015fce..8d1b2336 100644 --- a/.github/workflows/pull-request-ci.yml +++ b/.github/workflows/pull-request-ci.yml @@ -55,14 +55,20 @@ jobs: name: coverage-results-3.14 path: . - - name: Generate and push badges for with python 3.11 + - name: Get coverage log file from Python latest build + uses: actions/download-artifact@v4 + with: + name: coverage-results-3.14 + path: . + + - name: Generate and push badges for with python 3.14 run: | git fetch origin "${{ github.head_ref }}" || true git checkout "${{ github.head_ref }}" pip install anybadge - anybadge -o -l ruff -v $(cat ruff-results-3.11.log | wc -l) -f $BADGES_DIR/ruff.svg -u 1=green 2=red - anybadge -o -l mypy -v $([ -n "$(tail -n 1 mypy-3.11.log | grep -e '^Succes')" ] && echo pass || echo fail) -f $BADGES_DIR/mypy.svg fail=red pass=green - COVERAGE_PERC=$(grep "TOTAL" coverage-3.11.log | grep -Eo '[0-9.]+%' | sed 's/%//') + anybadge -o -l ruff -v $(cat ruff-results-3.14.log | wc -l) -f $BADGES_DIR/ruff.svg -u 1=green 2=red + anybadge -o -l mypy -v $([ -n "$(tail -n 1 mypy-3.14.log | grep -e '^Succes')" ] && echo pass || echo fail) -f $BADGES_DIR/mypy.svg fail=red pass=green + COVERAGE_PERC=$(grep "TOTAL" coverage-3.14.log | grep -Eo '[0-9.]+%' | sed 's/%//') anybadge -o -l coverage -v "$COVERAGE_PERC%" -f $BADGES_DIR/coverage.svg 60=red 80=orange 100=green git config user.name "Badge Bot" git config user.email "<>" From 00be8857c733d98398693a141bb36a5a2d1bd529 Mon Sep 17 00:00:00 2001 From: Badge Bot <> Date: Wed, 6 May 2026 10:38:52 +0000 Subject: [PATCH 19/25] Update badges --- .github/badges/coverage.svg | 12 ++++++------ .github/badges/mypy.svg | 12 ++++++------ .github/badges/ruff.svg | 6 +++--- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/badges/coverage.svg b/.github/badges/coverage.svg index 8180068a..d283ae09 100644 --- a/.github/badges/coverage.svg +++ b/.github/badges/coverage.svg @@ -1,23 +1,23 @@ - + - + - - + + coverage coverage - % - % + 91% + 91% diff --git a/.github/badges/mypy.svg b/.github/badges/mypy.svg index 0411eb05..6e625d92 100644 --- a/.github/badges/mypy.svg +++ b/.github/badges/mypy.svg @@ -1,23 +1,23 @@ - + - + - - + + mypy mypy - fail - fail + pass + pass diff --git a/.github/badges/ruff.svg b/.github/badges/ruff.svg index afe916bc..bb3326c3 100644 --- a/.github/badges/ruff.svg +++ b/.github/badges/ruff.svg @@ -9,7 +9,7 @@ - + @@ -17,7 +17,7 @@ ruff - 0 - 0 + 1 + 1 From 73ee367ca6e6ded2a56d07d4332ef462115af4de Mon Sep 17 00:00:00 2001 From: Henri Ervasti Date: Thu, 7 May 2026 09:38:00 +0200 Subject: [PATCH 20/25] [200-qmi-dataset-reformulation] One more Ruff fix. --- qmi/data/dataset.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/qmi/data/dataset.py b/qmi/data/dataset.py index de25587e..5eef9870 100644 --- a/qmi/data/dataset.py +++ b/qmi/data/dataset.py @@ -666,11 +666,12 @@ def convert_to_qmi_dataset( axes.append((label, hdf5_obj)) else: columns.append((label, hdf5_obj)) + + elif item in hdf5_obj.dimensions: + axes.append((label, hdf5_obj)) + else: - if item in hdf5_obj.dimensions: - axes.append((label, hdf5_obj)) - else: - columns.append((label, hdf5_obj)) + columns.append((label, hdf5_obj)) if not columns and not axes: raise RuntimeError("No datasets found to convert from the HDF5 file.") From 8488525d2f30ad27a3433afb3ba437fe019c6f97 Mon Sep 17 00:00:00 2001 From: Badge Bot <> Date: Thu, 7 May 2026 07:45:58 +0000 Subject: [PATCH 21/25] Update badges --- .github/badges/ruff.svg | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/badges/ruff.svg b/.github/badges/ruff.svg index bb3326c3..afe916bc 100644 --- a/.github/badges/ruff.svg +++ b/.github/badges/ruff.svg @@ -9,7 +9,7 @@ - + @@ -17,7 +17,7 @@ ruff - 1 - 1 + 0 + 0 From 9d6ce9d6735bc584b04c5152cbd4b97e1e148cb5 Mon Sep 17 00:00:00 2001 From: Henri Ervasti Date: Thu, 7 May 2026 13:31:46 +0200 Subject: [PATCH 22/25] [200-qmi-dataset-reformulation] Still a small edit to write QMI dataset name without follow-up number in single datasets. --- qmi/data/dataset.py | 2 +- qmi/data/datastore.py | 30 ++++++++++++++++++------------ 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/qmi/data/dataset.py b/qmi/data/dataset.py index 5eef9870..fcf0f6ae 100644 --- a/qmi/data/dataset.py +++ b/qmi/data/dataset.py @@ -530,7 +530,7 @@ def write_dataset_to_hdf5(dataset: DataSet, hdf_group: h5py.Group | h5netcdf.Gro group_name, column_keys, axis_scale_keys = _write_common_metadata(hdf_group, dataset) if dataset.data.ndim == 1: - column_ds = _create_dataset_node(hdf_group, column_keys[0], dataset.data, ("row",)) + column_ds = _create_dataset_node(hdf_group, column_keys[0], dataset.data, (group_name,)) if dataset.column_label[0]: column_ds.attrs["name"] = dataset.column_label[0] if dataset.column_unit[0]: diff --git a/qmi/data/datastore.py b/qmi/data/datastore.py index 02dc1f44..bc964ab0 100644 --- a/qmi/data/datastore.py +++ b/qmi/data/datastore.py @@ -178,24 +178,30 @@ def write_dataset( raise ValueError(f"Invalid backend type {backend}.") try: - ds_count = 0 - # Check for existing datasets - while True: - check_name = QMI_DATASET.format(ds_count=ds_count) - if not check_name in f.attrs: - break + if ds.is_raw: + target = f + f.attrs[QMI_DATASET.format(ds_count="").rstrip("_")] = ds.name - if check_name == ds.name and overwrite: - break + else: + target = f.create_group(ds.name) + ds_count = 0 + # Check for existing datasets + while True: + check_name = QMI_DATASET.format(ds_count=ds_count) + if not check_name in f.attrs: + break + + if check_name == ds.name and overwrite: + break + + if check_name == ds.name and not overwrite: + raise QMI_UsageException(f"Dataset {ds.name} already exists and not allowed to overwrite.") - if check_name == ds.name and not overwrite: - raise QMI_UsageException(f"Dataset {ds.name} already exists and not allowed to overwrite.") + f.attrs[QMI_DATASET.format(ds_count=ds_count)] = ds.name # Add QMI version to file f.attrs["QMI_version"] = qmi.__version__ f.attrs["QMI_Dataset"] = 1 - f.attrs[QMI_DATASET.format(ds_count=ds_count)] = ds.name - target = f if ds.is_raw else f.create_group(ds.name) qmi.data.dataset.write_dataset_to_hdf5(ds, target) finally: From 8c19e395599e924aaa7af82fb2b43b50685c60b7 Mon Sep 17 00:00:00 2001 From: Henri Ervasti Date: Mon, 11 May 2026 09:56:30 +0200 Subject: [PATCH 23/25] [200-qmi-dataset-reformulation] Re-staging documentation updates, which were still the old versions and did not show in the pull request being the old ones, for some strange reason... --- CITATION.cff | 3 + documentation/sphinx/source/design.rst | 79 ++++++------ .../source/images/class_diagram_main.dot | 112 ------------------ .../images/class_diagram_main.drawio.svg | 4 + .../source/images/class_diagram_main.png | Bin 286843 -> 0 bytes .../source/images/class_diagram_messaging.dot | 64 ---------- .../images/class_diagram_messaging.drawio.svg | 4 + .../source/images/class_diagram_messaging.png | Bin 191571 -> 0 bytes .../images/class_diagram_signalling.dot | 77 ------------ .../class_diagram_signalling.drawio.svg | 4 + .../images/class_diagram_signalling.png | Bin 382261 -> 0 bytes .../sphinx/source/images/example_contexts.dot | 16 --- .../source/images/example_contexts.drawio.svg | 4 + .../sphinx/source/images/example_contexts.png | Bin 64148 -> 0 bytes 14 files changed, 54 insertions(+), 313 deletions(-) delete mode 100644 documentation/sphinx/source/images/class_diagram_main.dot create mode 100644 documentation/sphinx/source/images/class_diagram_main.drawio.svg delete mode 100644 documentation/sphinx/source/images/class_diagram_main.png delete mode 100644 documentation/sphinx/source/images/class_diagram_messaging.dot create mode 100644 documentation/sphinx/source/images/class_diagram_messaging.drawio.svg delete mode 100644 documentation/sphinx/source/images/class_diagram_messaging.png delete mode 100644 documentation/sphinx/source/images/class_diagram_signalling.dot create mode 100644 documentation/sphinx/source/images/class_diagram_signalling.drawio.svg delete mode 100644 documentation/sphinx/source/images/class_diagram_signalling.png delete mode 100644 documentation/sphinx/source/images/example_contexts.dot create mode 100644 documentation/sphinx/source/images/example_contexts.drawio.svg delete mode 100644 documentation/sphinx/source/images/example_contexts.png diff --git a/CITATION.cff b/CITATION.cff index 288c8d75..0666be04 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -69,6 +69,9 @@ authors: - given-names: Fer family-names: Grooteman affiliation: TU Delft + - given-names: Thom + family-names: van der Steenhoven + affiliation: TU Delft identifiers: - type: url value: 'https://github.com/QuTech-Delft/QMI' diff --git a/documentation/sphinx/source/design.rst b/documentation/sphinx/source/design.rst index c322d7ef..628eadf1 100644 --- a/documentation/sphinx/source/design.rst +++ b/documentation/sphinx/source/design.rst @@ -148,17 +148,10 @@ Most of the features of QMI have been touched on above: Design Overview --------------- -.. image:: images/class_diagram_main.png +.. image:: images/class_diagram_main.drawio.svg The figure above outlines the class inheritance and ownership relations of the most important classes in QMI. -The boxes in this graph denote *classes*. Classes with a red border are *active classes*, meaning they are running in a dedicated thread. - -Green arrows denote *inheritance*, i.e., an 'is-a' relation between classes. - -Blue arrows denote *ownership*. Ownerships arrows start in a named field of a class instance, and the arrow carries a label that shows how many -instances are owned, e.g., '(one)' or '(zero or more)'. - We discuss these classes below. **QMI Contexts** @@ -177,14 +170,22 @@ managed and owned by the QMI_Context; the user merely gets a handle to them. **Q Example usage ^^^^^^^^^^^^^^^^ -.. image:: images/example_contexts.png - -We could have as an example three contexts: In context one, we have made two instances of **QMI_Instrument** (e.g. A signal generator and an oscilloscope -on a lab PC). Then we have a second context, that runs a task, utilizing **QMI_LoopTask**, which is configured to make connection to context one, and to -control the instruments in it. This context could reside e.g. in an office PC close to the lab. This second contexts now sends also out *settings* and -*status* signals which can e.g. be forwarder to a database. Also on the office PC could run a third context that monitors the task status in context two -and instrument status in context one. This context is hooked in the *status* signal and at specific signal values or circumstances could either tell -context two to change settings or stop task, or send specific commands to the instruments in context one. +.. image:: images/example_contexts.drawio.svg + +We could have as an example three contexts: +In context one, we have made two instances of **QMI_Instrument** +(e.g. A signal generator and an oscilloscope on a lab PC). +Then we have a second context, that runs a task, utilizing **QMI_LoopTask**, +which is configured to make connection to context one, and to control the instruments in it. +This context could reside e.g. in an office PC close to the lab. +This second contexts now sends also out *settings* and *status* signals +which can e.g. be forwarded to a database. +Also on the office PC could run a third context that monitors +the task status in context two and instrument status in context one. +This context is hooked in the *status* signal +and at specific signal values or circumstances could either tell +context two to change settings or stop task, +or send specific commands to the instruments in context one. **Threading in QMI** ==================== @@ -268,19 +269,10 @@ will not result in the message being routed to the instrument. Messaging more in detail ======================== -.. image:: images/class_diagram_messaging.png +.. image:: images/class_diagram_messaging.drawio.svg The figure above outlines the class inheritance, ownership, parameter type and usage relations of the QMI messaging and signalling. -Green arrows denote *inheritance*, i.e., an 'is-a' relation between classes. - -Blue arrows denote *ownership*. Ownerships arrows start in a named field of a class instance, and the arrow carries a label that shows how many -instances are owned, e.g., '(one)' or '(zero or more)'. - -Black dashed arrows with open arrow heads means that a method call's argument or arguments are of class type of target. - -Black arrows with full arrow heads means that a method is implemented and/or called in the target class method. - The **QMI_Message** can have multiple instances with unique source and destination addresses. The **QMI_RequestMessage** and **QMI_ReplyMessage** classes take a *request_id*, which is generated when making a request, as a string containing the hexadecimal representation of a random 64-bit integer. @@ -307,28 +299,27 @@ the process can then be made to control the signalling (also between tasks) and Signalling more in detail ========================= -.. image:: images/class_diagram_signalling.png - -The figure above outlines the class inheritance, ownership, parameter type and usage relations of the QMI messaging and signalling. - -Green arrows denote *inheritance*, i.e., an 'is-a' relation between classes. - -Blue arrows denote *ownership*. Ownerships arrows start in a named field of a class instance, and the arrow carries a label that shows how many -instances are owned, e.g., '(one)' or '(zero or more)'. +.. image:: images/class_diagram_signalling.drawio.svg -Black dashed arrows with open arrow heads means that a method call's argument or arguments are of class type of target. +The figure above outlines the class inheritance and call relations of the QMI messaging and signalling. -Black dashed arrows with full arrow heads means that a method is used and/or implemented in the target class method. +From this fourth figure it can be seen how the subscribing and unsubscribing of receivers to signals +are done via the **QMI_Context** methods, and also publishing of data is routed via it. -From this fourth figure it can be seen how the subscribing and unsubscribing of receivers to signals are done via the **QMI_Context** methods, and also publishing of -data is routed via it. This way the QMI context can keep an object registry of which broadcasts it should listen to and which data to publish. -The signals use **QMI_SignalMessage** to broadcast signals between contexts. Each context owns exactly one **SignalManager** instance. The signal subscription and -unsubscribing is routed to **QMI_SignalSubscriber** class. The subscription of signals is done by using **QMI_SignalSubscriptionReply** which inherits from the **QMI_ReplyMessage**. -Subscription and unsubscribing requires as *receiver* input parameter an instance of **QMI_SignalReceiver**, which contains a queue of received signals. -When any such signal gets published, the published signal is automatically added to the receive queue of the **QMI_SignalReceiver**. +The signals use **QMI_SignalMessage** to broadcast signals between contexts. +Each context owns exactly one **SignalManager** instance. +The signal subscription and unsubscribing is routed to **QMI_SignalSubscriber** class. +The subscription of signals is done by using **QMI_SignalSubscriptionReply** +which inherits from the **QMI_ReplyMessage**. +Subscription and unsubscribing requires as *receiver* input parameter an instance of **QMI_SignalReceiver**, +which contains a queue of received signals. +When any such signal gets published, +the published signal is automatically added to the receive queue of the **QMI_SignalReceiver**. -Publishing of a signal is implemented in **QMI_RegisteredSignal.publish** which is an implementation of the abstract base class **QMI_Signal**. -Actual publishing happens in **QMI_context** when the *publish_signal* method of the context is called. After that it is available for any receivers. +Publishing of a signal is implemented in **QMI_RegisteredSignal.publish** +which is an implementation of the abstract base class **QMI_Signal**. +Actual publishing happens in **QMI_context** when the *publish_signal* method of the context is called. +After that it is available for any receivers. Logging ======= diff --git a/documentation/sphinx/source/images/class_diagram_main.dot b/documentation/sphinx/source/images/class_diagram_main.dot deleted file mode 100644 index 2a5f4892..00000000 --- a/documentation/sphinx/source/images/class_diagram_main.dot +++ /dev/null @@ -1,112 +0,0 @@ -digraph { - ranksep=0.3 - nodesep=0.5 - - // qmi module - - qmi_module [shape=record label="{ qmi\n(__init__.py) | context_singleton | ObjectRegistry }"]; - - // Classes without a superclass. - - cls_qmi_context [shape=record label="{ QMI_Context\n(qmi.core.context) | _config | _rpc_object_map | _signal_manager | _message_router }"]; - - cls_message_router [shape=record label="{ MessageRouter\n(qmi.core.messaging) | _thread | _socket_manager | start_tcp_server(...) | start_udp_response(...) | [dis]connect_from_peer(...) }" ]; - - cls_socket_manager [shape=record label="{ _SocketManager\n(qmi.core.messaging) | _socket_wrappers | _peer_context_map }" ]; - - cls_cfg_qmi [shape=record label="{ @configstruct\nCfgQmi\n(qmi.core.config_defs) | config_file | workgroup | qmi_home | log_dir | datastore | logging | contexts | process_management }"]; - - cls_cfg_ctx [shape=record label="{ @configstruct\nCfgContext\n(qmi.core.config_defs) | host | tcp_server_port | connect_to_peers | enabled | program_module | program_args | python_path | virtualenv_path }"]; - - // _SocketWrapper class and its specializations - - cls_socket_wrapper [shape=record label="{ _SocketWrapper\n(qmi.core.messaging) }" ]; - cls_udp_responder [shape=record label="{ _UdpResponder\n(qmi.core.messaging) }" ]; - cls_peer_tcp_connection [shape=record label="{ _PeerTcpConnection\n(qmi.core.messaging) }" ]; - cls_tcp_server [shape=record label="{ _TcpServer\n(qmi.core.messaging) }" ]; - - // QMI_MessageHandler class and its specializations - - cls_qmi_message_handler [shape=record label="{ QMI_MessageHandler\n(qmi.core.messaging) | address }" ]; - cls_qmi_msg_handlr_addr [shape=record label="{ QMI_MessageHandlerAddress\n(qmi.core.messaging) | context_id | object_id }" ]; - cls_rpc_object_manager [shape=record label="{ RpcObjectManager\n(qmi.core.rpc) | _rpc_thread | _rpc_object_maker }" ]; - cls_rpc_future [shape=record label="{ RpcFuture\n(qmi.core.rpc) }" ]; - cls_signal_manager [shape=record label="{ SignalManager\n(qmi.core.pubsub) | _local_subscriptions }" ]; - - // QMI_RpcObject class and its specializations - - cls_rpc_object [shape=record label="{ QMI_RpcObject\n(qmi.core.rpc) }" ]; - cls_rpc_proxy [shape=record label="{ QMI_RpcProxy\n(qmi.core.rpc) | rpc_nonblocking }" ]; - cls_rpc_nb_proxy [shape=record label="{ QMI_RpcNonBlockingProxy\n(qmi.core.rpc) }" ]; - cls_context_rpc_object [shape=record label="{ _ContextRpcObject\n(qmi.core.context) }" ]; - cls_qmi_instrument [shape=record label="{ QMI_Instrument\n(qmi.core.instrument) }" ]; - - // QMI Thread class and derivatives - - cls_python_thread [shape=record label="{ threading.Thread\n(Python) }" ]; - cls_qmi_thread [shape=record label="{ QMI_Thread\n(qmi.core.thread) }" ]; - cls_rpc_thread [shape=record label="{ _RpcThread\n(qmi.core.rpc) | _rpc_object}" color=red ]; - cls_event_driven_thread [shape=record label="{ _EventDrivenThread\n(qmi.core.messaging) }" color=red ]; - cls_task_thread [shape=record label="{ _TaskThread\n(qmi.core.task) | task }" color=red ]; - - // QMI_Task stuff - - cls_qmi_task_runner [shape=record label="{ QMI_TaskRunner\n(qmi.core.task) | _thread }" ]; - cls_qmi_task [shape=record label="{ QMI_Task\n(qmi.core.task) | _task_runner | settings | status }"]; - cls_qmi_looptask [shape=record label="{ QMI_LoopTask\n(qmi.core.task) }"]; - - // QMI Signal stuff (other than the Messages) - - cls_qmi_signalrecv [shape=record label="{ QMI_SignalReceiver\n(qmi.core.pubsub) }"]; - - // Specializations - - cls_qmi_message_handler -> cls_rpc_object_manager [dir="back" arrowtail="onormal" color="green"]; - cls_qmi_message_handler -> cls_rpc_future [dir="back" arrowtail="onormal" color="green"]; - cls_qmi_message_handler -> cls_signal_manager [dir="back" arrowtail="onormal" color="green"]; - - cls_python_thread -> cls_qmi_thread [dir="back" arrowtail="onormal" color="green"]; - cls_qmi_thread -> cls_rpc_thread [dir="back" arrowtail="onormal" color="green"]; - cls_qmi_thread -> cls_event_driven_thread [dir="back" arrowtail="onormal" color="green"]; - cls_qmi_thread -> cls_task_thread [dir="back" arrowtail="onormal" color="green"]; - - cls_rpc_proxy -> cls_rpc_object:e [arrowhead="onormal" color="green"]; - cls_rpc_object -> cls_context_rpc_object [dir="back" arrowtail="onormal" color="green"]; - cls_rpc_object -> cls_qmi_instrument [dir="back" arrowtail="onormal" color="green"]; - cls_rpc_object -> cls_qmi_task_runner [dir="back" arrowtail="onormal" color="green"]; - - cls_socket_wrapper -> cls_udp_responder [dir="back" arrowtail="onormal" color="green"]; - cls_socket_wrapper -> cls_peer_tcp_connection [dir="back" arrowtail="onormal" color="green"]; - cls_socket_wrapper -> cls_tcp_server [dir="back" arrowtail="onormal" color="green"]; - - cls_qmi_task -> cls_qmi_looptask [dir="back" arrowtail="onormal" color="green"]; - - // Ownership - - qmi_module:ctx_singleton:e -> cls_qmi_context [color="blue", label="(one)"]; - - cls_qmi_context:qmi_config:w -> cls_cfg_qmi [color="blue", label="(one)"]; - cls_qmi_context:rpc_objects:e -> cls_rpc_object_manager [color="blue", label="(zero or more)"]; - cls_rpc_thread:rpc_object:e -> cls_rpc_object [color="blue", label="(one)"]; - cls_rpc_thread:rpc_object:e -> cls_rpc_proxy [color="blue", label="(zero or more)"]; - cls_rpc_object_manager:rpc_thread:e -> cls_rpc_thread [color="blue", label="(one)"]; - cls_rpc_object_manager:rpc_obj_mkr:w -> cls_rpc_object [color="blue", label="(one)"]; - cls_rpc_np_proxy -> cls_rpc_proxy:nonblocking:e [color="blue", label="(zero or more)"]; - - cls_signal_manager:local_subs:e -> cls_qmi_signalrecv [color="blue", label="(zero or more)"]; - - cls_qmi_message_handler:address:e -> cls_qmi_msg_handlr_addr [color="blue", label="(zero or more)"]; - - cls_cfg_qmi:cfg_ctx:w -> cls_cfg_ctx [color="blue", label="(zero or more)"]; - - cls_qmi_task_runner:thread:w -> cls_task_thread [color="blue", label="(one)"]; - cls_task_thread:task:e -> cls_qmi_task [color="blue", label="(one)"]; - - cls_message_router:thread:e -> cls_event_driven_thread [color="blue", label="(one)"]; - cls_message_router:socket_manager:w -> cls_socket_manager [color="blue", label="(one)"]; - cls_socket_manager:socket_wrappers:w -> cls_socket_wrapper [color="blue", label="(zero or more)"]; - cls_socket_manager:peer_ctx_map:e -> cls_peer_tcp_connection [color="blue", label="(zero or more)"]; - - cls_qmi_context:signal_manager:e -> cls_signal_manager [color="blue", label="(one)"]; - cls_qmi_context:message_router:w -> cls_message_router [color="blue", label="(one)"]; -} diff --git a/documentation/sphinx/source/images/class_diagram_main.drawio.svg b/documentation/sphinx/source/images/class_diagram_main.drawio.svg new file mode 100644 index 00000000..6ed9358c --- /dev/null +++ b/documentation/sphinx/source/images/class_diagram_main.drawio.svg @@ -0,0 +1,4 @@ + + + +
core
core
qmi
qmi
+ context_singleton: core.context::QMI_Context [0..1]
- _object_registry: core.object_registry::ObjectRegistry
+ context_singleton: core.context::QMI_Context [0..1]...
context
context
config_defs
config_defs
rpc
rpc
pubsub
pubsub
messaging
messaging
task
task
«use»
«use»
QMI_RpcObject
QMI_RpcObject
instrument::QMI_Instrument
instrument::QMI_Instrument
QMI_RpcProxy
QMI_RpcProxy
+ rpc_nonblocking:
     QMI_RpcNonBlockingProxy
+ rpc_nonblocking:...
QMI_RpcNonBlockingProxy
QMI_RpcNonBlockingProxy
QMI_TaskRunner
QMI_TaskRunner
- _thread: _TaskThread
- _thread: _TaskThread
_TaskThread
_TaskThread
+ task: QMI_Task
+ task: QMI_Task
thread::QMI_Thread
thread::QMI_Thread
threading::Thread
threading::Thread
SignalManager
SignalManager
- _local_subscriptions:
    dict<String, set<QMI_SignalReceiver>>
- _local_subscriptions:...
QMI_SignalReceiver
QMI_SignalReceiver
MessageRouter
MessageRouter
- _thread: _EventDrivenThread [0..1]
- _socket_manager: _SocketManager [0..1]
- _thread: _EventDrivenThread [0..1]...
+ start_tcp_server(tcp_server_port: Integer)
+ start_udp_responder(udp_server_port: Integer)
+ connect_to_peer(peer_context_name: String,
                  peer_address: String)
+ disconnect_from_peer(peer_context_name: String)
+ start_tcp_server(tcp_server_port: Integer)...
_SocketManager
_SocketManager
- _socket_wrappers: list[_SocketWrapper]
- _peer_context_map:
    dict<String, _PeerTcpConnection>
- _socket_wrappers: list[_SocketWrapper]...
_SocketWrapper
_SocketWrapper
_UdpResponder
_UdpResponder
_TcpServer
_TcpServer
_PeerTcpConnection
_PeerTcpConnection
QMI_MessageHandler
QMI_MessageHandler
+ address: QMI_MessageHandlerAddress
+ address: QMI_MessageHandlerAddress
QMI_MessageHandlerAddress
QMI_MessageHandlerAddress
+ context_id: String
+ object_id: String
+ context_id: String...
QMI_RpcFuture
QMI_RpcFuture
CfgQmi
CfgQmi
+ config_file: String [0..1]
+ workgroup: String
+ qmi_home: String [0..1]
+ log_dir: String [0..1]
+ datastore: String [0..1]
+ logging: CfgLogging
+ contexts: dict<String, CfgContext>
+ process_management: CfgProcessManagement
+ config_file: String [0..1]...
CfgContext
CfgContext
+ host: String [0..1]
+ tcp_server_port: Integer [0..1]
+ connect_to_peers: list<String>
+ enabled: Boolean
+ program_module: String [0..1] 
+ program_args: list<String>
+ python_path: String [0..1]
+ virtualenv_path: String [0..1]
+ host: String [0..1]...
«use»
«use»
QMI_Context
QMI_Context
- _config: config_defs::CfgQmi
- _rpc_object_map: 
    dict<String, rpc::RpcObjectManager [0..1]>
- _signal_manager: pubsub::SignalManager
- _message_router: messaging::MessageRouter
- _config: config_defs::CfgQmi...
qmi.core.context::_ContextRpcObject
qmi.core.context::_ContextRpcObject
RpcObjectManager
RpcObjectManager
- _rpc_thread: _RpcThread [0..1]
- _rpc_object_maker: Callable<(): QMI_RpcObject>
- _rpc_thread: _RpcThread [0..1]...
+ make_proxy(): QMI_RpcProxy
+ make_proxy(): QMI_RpcProxy
«use»
«use»
«use»
«use»
_RpcThread
_RpcThread
- _rpc_object: QMI_RpcObject [0..1]
- _rpc_object: QMI_RpcObject [0..1]
Create
Create
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
_EventDrivenThread
_EventDrivenThread
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
QMI_Task
QMI_Task
+ settings: Any [0..1]
+ status: Any [0..1]
# _task_runner:
    QMI_TaskRunner
+ settings: Any [0..1]...
QMI_LoopTask
QMI_LoopTask
«use»
«use»
Text is not SVG - cannot display
\ No newline at end of file diff --git a/documentation/sphinx/source/images/class_diagram_main.png b/documentation/sphinx/source/images/class_diagram_main.png deleted file mode 100644 index 991a72b96f65b2780211033186a510352b617a30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286843 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�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%0D(R6eWVv-$_3S>ZeVA!O`yl(mBK|q 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 diff --git a/documentation/sphinx/source/images/class_diagram_messaging.dot b/documentation/sphinx/source/images/class_diagram_messaging.dot deleted file mode 100644 index 08d7bbcd..00000000 --- a/documentation/sphinx/source/images/class_diagram_messaging.dot +++ /dev/null @@ -1,64 +0,0 @@ -digraph { - - // Classes without a superclass. - - cls_qmi_context [shape=record label="{ QMI_Context\n(qmi.core.context)\n'$context' | _message_router | send_message(..., message) }"]; - - cls_qmi_message [shape=record label="{ QMI_Message\n(qmi.core.messaging) | source_address | destination_address }" ]; - - cls_message_router [shape=record label="{ MessageRouter\n(qmi.core.messaging) | [un]register_message_handler(..., message_handler) | deliver_message(..., message) | send_message(..., message) }" ]; - - // Support classes without superclass - - // cls_cfg_ctx [shape=record label="{ @configstruct\nCfgContext\n(qmi.core.config_defs) | host | tcp_server_port | connect_to_peers | enabled | program_module | program_args | python_path | virtualenv_path }"]; - - // QMI_Message and pubsub signal subclasses - - cls_request_message [shape=record label="{ QMI_RequestMessage\n(qmi.core.messaging) | request_id }" ]; - cls_reply_message [shape=record label="{ QMI_ReplyMessage\n(qmi.core.messaging) | request_id }" ]; - cls_error_reply [shape=record label="{ QMI_ErrorReplyMessage\n(qmi.core.messaging) | error_msg }" ]; - cls_initial_handshake [shape=record label="{ QMI_InitialHandshakeMessage\n(qmi.core.messaging) | version | is_server_handshake }" ]; - - cls_signal_sub_req [shape=record label="{ QMI_SignalSubscriptionRequest\n(qmi.core.pubsub) | publisher_name | signal_name | subscribe }" ]; - cls_signal_sub_rly [shape=record label="{ QMI_SignalSubscriptionReply\n(qmi.core.pubsub) | success | error_msg }" ]; - - // QMI_MessageHandler class and its specializations - - cls_qmi_message_handler [shape=record label="{ QMI_MessageHandler\n(qmi.core.messaging) | address | handle_message(..., message) }" ]; - cls_rpc_object_manager [shape=record label="{ RpcObjectManager\n(qmi.core.rpc) | _rpc_thread | _rpc_object_maker }" ]; - cls_rpc_future [shape=record label="{ RpcFuture\n(qmi.core.rpc) }" ]; - - // Specializations - - cls_qmi_message_handler -> cls_rpc_object_manager [dir="back" arrowtail="onormal" color="green"]; - cls_qmi_message_handler -> cls_rpc_future [dir="back" arrowtail="onormal" color="green"]; - - cls_qmi_message -> cls_request_message [dir="back" arrowtail="onormal" color="green"]; - cls_qmi_message -> cls_reply_message [dir="back" arrowtail="onormal" color="green"]; - cls_qmi_message -> cls_initial_handshake [dir="back" arrowtail="onormal" color="green"]; - cls_request_message -> cls_signal_sub_req [dir="back" arrowtail="onormal" color="green"]; - cls_reply_message -> cls_signal_sub_rly [dir="back" arrowtail="onormal" color="green"]; - // cls_reply_message -> cls_error_reply [dir="back" arrowtail="onormal" color="green"]; - cls_error_reply -> cls_reply_message [arrowhead="onormal" color="green"]; - - // Ownership - - // cls_message_router:msg_router_top:e -> cls_qmi_context:message_router:e [dir="back" color="blue", label="(one)"]; - cls_qmi_context:message_router:w -> cls_message_router:msg_router_top [color="blue", label="(one)"]; - - // Argument types. - - // cls_qmi_message -> cls_qmi_context:send_message:w [dir="back" color="black" arrowtail="onormal" style="dashed"] - cls_qmi_context:send_message:e -> cls_qmi_message [color="black" arrowhead="onormal" style="dashed"] - - cls_qmi_message -> cls_qmi_message_handler:msg_handler_handle_msg:e [dir="back" color="black" arrowtail="onormal" style="dashed"] - // cls_qmi_message -> cls_message_router:deliver_message:e [dir="back" color="black" arrowtail="onormal" style="dashed"] - // cls_qmi_message -> cls_message_router:router_send_message:e [dir="back" color="black" arrowtail="onormal" style="dashed"] - cls_message_router:deliver_message:e -> cls_qmi_message [color="black" arrowhead="onormal" style="dashed"] - cls_message_router:router_send_message:e -> cls_qmi_message [color="black" arrowhead="onormal" style="dashed"] - cls_message_router:reg_msg_handler:w -> cls_qmi_message_handler:msg_handler_handle_msg:w [color="black" arrowhead="onormal"style="dashed"]; - - // Usage - // cls_qmi_context:send_message:w -> cls_message_router:router_send_message:e [color="black"] - cls_message_router:router_send_message:w -> cls_qmi_context:send_message:w [dir="back" color="black"] -} diff --git a/documentation/sphinx/source/images/class_diagram_messaging.drawio.svg b/documentation/sphinx/source/images/class_diagram_messaging.drawio.svg new file mode 100644 index 00000000..9c5e59a5 --- /dev/null +++ b/documentation/sphinx/source/images/class_diagram_messaging.drawio.svg @@ -0,0 +1,4 @@ + + + +
qmi.core
qmi.core
rpc
rpc
messaging
messaging
pubsub
pubsub
MessageRouter
MessageRouter
+ send_message(message: QMI_Message)
+ deliver_message(message: QMI_Message)
+ register_message_handler(
    message_handler: QMI_MessageHandler)
+ unregister_message_handler(
    message_handler: QMI_MessageHandler)
+ send_message(message: QMI_Message)...
QMI_MessageHandler
QMI_MessageHandler
+ address: QMI_MessageHandlerAddress
+ address: QMI_MessageHandlerAddress
+ handle_message(message: QMI_Message)
+ handle_message(message: QMI_Message)
QMI_RpcFuture
QMI_RpcFuture
RpcObjectManager
RpcObjectManager
- _rpc_thread: _RpcThread [0..1]
- _rpc_object_maker:
    Callable<(): QMI_RpcObject>
- _rpc_thread: _RpcThread [0..1]...
context::QMI_Context
context::QMI_Context
- _message_router: messaging::MessageRouter
- _message_router: messaging::MessageRouter
+ send_message(message: QMI_Message)
+ send_message(message: QMI_Message)
«use»
«use»
«call»
«call»
QMI_Message
QMI_Message
+ source_address: QMI_MessageHandlerAddress
+ destination_address: QMI_MessageHandlerAddress
+ source_address: QMI_MessageHandlerAddress...
QMI_InitialHandshakeMessage
QMI_InitialHandshakeMessage
+ version: String
+ is_server_handshake: Boolean
+ version: String...
QMI_RequestMessage
QMI_RequestMessage
+ request_id: String
+ request_id: String
QMI_ReplyMessage
QMI_ReplyMessage
+ request_id: String
+ request_id: String
QMI_ErrorReplyMessage
QMI_ErrorReplyMessage
+ error_msg: String
+ error_msg: String
QMI_SignalSubscriptionRequest
QMI_SignalSubscriptionRequest
+ publisher_name: String
+ signal_name: String
+ subscribe: Boolean
+ publisher_name: String...
QMI_SignalSubscriptionReply
QMI_SignalSubscriptionReply
+ success: Boolean
+ error_msg: String
+ success: Boolean...
«use»
«use»
«use»
«use»
«use»
«use»
Text is not SVG - cannot display
\ No newline at end of file diff --git a/documentation/sphinx/source/images/class_diagram_messaging.png b/documentation/sphinx/source/images/class_diagram_messaging.png deleted file mode 100644 index e7aeb8547a4659a0f24df2bc8e4e40d7c0a4247e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191571 zcmb@ucRbbq`#&C09EHlsOA<{vLZu>mR1_f`vXzi6dmXFLAR5R{<~e5eI%Y4jW$zKP z9od=R>)Goi@7wS5`F%g1KfeD+b)M%u#`U
pmXmg@T;aLDVtSo;`aG-j=?hxMvR~ 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
i7RTP$jgv3VJU+kKcqi|T3p3z|rtDX- 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

9K1xIT&vGGbtm+0ASPZ9d(>HFzWa5G)l^XjT~n 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 cls_signal_manager [dir="back" arrowtail="onormal" color="green"]; - - cls_qmi_message -> cls_signal_message [dir="back" arrowtail="onormal" color="green"]; - cls_qmi_message -> cls_signal_removed [dir="back" arrowtail="onormal" color="green"]; - - // Ownership - - cls_qmi_task:sig_settings_updated:w -> cls_qmi_signal:n [color="blue" label="(one)"]; - cls_qmi_looptask:sig_status_updated -> cls_qmi_signal [color="blue" label="(one)"]; - cls_qmi_context:ctx_top -> cls_registered_signal:regsig_ctx [dir="back" color="blue" label="(zero or more)"]; - cls_qmi_context:ctx_top -> cls_signal_manager:sigman_ctx [dir="back" color="blue" label="(one)"] - cls_qmi_signal:sig_pub:s -> cls_registered_signal:pub_reg [dir="back" color="blue" label="(zero or more)"]; - cls_signal_subscriber:sigsub_ctx:e -> cls_qmi_context:ctx_top [color="blue" label="(zero or more)"]; - cls_qmi_task:qmi_signals:w -> cls_registered_signal:regsig_top [color="blue" label="(zero or more)"] - - // Argument types. - - cls_qmi_context:send_message:s -> cls_qmi_message [color="black" arrowhead="onormal" style="dashed"] - cls_qmi_message_handler:msg_handler_handle_msg:e -> cls_qmi_message [color="black" arrowhead="onormal" style="dashed"] - cls_signal_manager:handle_sig -> cls_qmi_message [color="black" arrowhead="onormal" style="dashed"] - - cls_signal_manager:sub_sig:e -> cls_signal_receiver:ne [color="black" arrowhead="onormal" style="dashed"] - cls_signal_manager:unsub_sig:e -> cls_signal_receiver [color="black" arrowhead="onormal" style="dashed"] - - cls_signal_receiver:recv_sig -> cls_signal_message [color="black" arrowhead="onormal" style="dashed"] - - // Usage - - qmi_module:object_registry -> cls_qmi_context:oid [color="black"]; - - cls_registered_signal:pub_reg -> cls_qmi_context:pub_ctx [color="black"]; - cls_signal_subscriber:sigsub_sub:w -> cls_qmi_context:sub_ctx:w [color="black"]; - cls_signal_subscriber:sigsub_unsub:w -> cls_qmi_context:unsub_ctx:w [color="black"]; - cls_signal_manager:pub_sig:w -> cls_qmi_context:send_message:sw [color="black"]; - cls_signal_manager:sub_sig:w -> cls_qmi_context:sub_ctx:e [color="black"]; - cls_signal_manager:unsub_sig:w -> cls_qmi_context:unsub_ctx:e [color="black"]; - - cls_qmi_task:update_settings:s -> cls_qmi_signal:sig_pub [color="black"]; - cls_qmi_looptask:run_looptask:s -> cls_qmi_signal:sig_pub [color="black"]; -} diff --git a/documentation/sphinx/source/images/class_diagram_signalling.drawio.svg b/documentation/sphinx/source/images/class_diagram_signalling.drawio.svg new file mode 100644 index 00000000..6203acc6 --- /dev/null +++ b/documentation/sphinx/source/images/class_diagram_signalling.drawio.svg @@ -0,0 +1,4 @@ + + + +
messaging
messaging
pubsub
pubsub
task
task
QMI_MessageHandler
QMI_MessageHandler
+ address: QMI_MessageHandlerAddress
+ address: QMI_MessageHandlerAddress
+ handle_message(message: QMI_Message)
+ handle_message(message: QMI_Message)
context::QMI_Context
context::QMI_Context
+ publish_signal(
    publisher_name: String,
    signal_name: String,
    args: tuple<Any>)
+ publish_signal(...
+ subscribe_signal(
    publisher_context: String,
    publisher_name: String,
    signal_name: String,
    receiver: messaging::QMI_SignalReceiver)
+ subscribe_signal(...
unsubscribe_signal(
    publisher_context: String,
    publisher_name: String,
    signal_name: String,
    receiver: messaging::QMI_SignalReceiver)
+ unsubscribe_signal(...
+ send_message(
    message: messaging::QMI_Message)
+ send_message(...
QMI_Message
QMI_Message
+ source_address:
    QMI_MessageHandlerAddress
+ destination_address:
    QMI_MessageHandlerAddress
+ source_address:...
QMI_SignalRemovedMessage
QMI_SignalRemovedMessage
+ publisher_name: String
+ signal_name: String
+ publisher_name: String...
QMI_SignalMessage
QMI_SignalMessage
+ signal_name: String
+ args: tuple<Any>
+ signal_name: String...
QMI_Task
QMI_Task
+ sig_settings_updated: 
    messaging::QMI_Signal
# _qmi_signals:
    tuple<messaging::SignalDescription>
+ sig_settings_updated:...
+ update_settings(): Boolean
+ update_settings(): Boolean
QMI_LoopTask
QMI_LoopTask
+ sig_status_updated:
    messaging::QMI_Signal
+ sig_status_updated:...
+ run()
+ run()
QMI_RegisteredSignal
QMI_RegisteredSignal
+ publisher_name: String
+ signal_name: String
+ arg_types: tuple<Type>
- _context: 
    context::QMI_Context
+ publisher_name: String...
+ publish(args: Any [*]) 
+ publish(args: Any [*]) 
0..1
0..1
*
*
QMI_SignalSubscriber
QMI_SignalSubscriber
+ context: context::QMI_Context
+ published_context: String
+ publisher_name: String
+ signal_name: String
+ signal_arg_types: String
+ context: context::QMI_Context...
+ subscribe(
    receiver: QMI_SignalReceiver)
+ subscribe(...
+ unsubscribe(
    receiver: QMI_SignalReceiver)
+ unsubscribe(...
SignalManager
SignalManager
- _context: context::QMI_Context
- _local_subscriptions:
    dict<String, set<QMI_SignalReceiver>>
- _pending_subscription_request_by_request_id:
    dict<String, _PendingSubscriptionRequest>
- _pending_subscription_request_by_signal_name:
    dict<String, _PendingSubscriptionRequest>
- _context: context::QMI_Context...
+ publish_signal(
    publisher_name: String,
    signal_name: String,
    args: tuple<Any>)
+ publish_signal(...
+ unsubscribe_signal(
    publisher_context: String,
    publisher_name: String,
    signal_name: String,
    receiver: QMI_SignalReceiver)
+ unsubscribe_signal(...
+ subscribe_signal(
    publisher_context: String,
    publisher_name: String,
    signal_name: String,
    receiver: QMI_SignalReceiver)
+ subscribe_signal(...
+ handle_message(message:
    messaging::QMI_Message)
+ handle_message(message:...
QMI_SignalReceiver
QMI_SignalReceiver
- _queue: deque<ReceivedSignal>
- _queue: deque<ReceivedSignal>
- _receive_signal(
    message: QMI_SignalMessage)
- _receive_signal(...
QMI_Signal
QMI_Signal
+ arg_types: tuple<Type>
+ arg_types: tuple<Type>
+ publish(args: Any [*])
+ publish(args: Any [*])
«call»
«call»
«call»
«call»
«call»
«call»
«call»
«call»
«call»
«call»
«call»
«call»
«call»
«call»
Text is not SVG - cannot display
\ No newline at end of file diff --git a/documentation/sphinx/source/images/class_diagram_signalling.png b/documentation/sphinx/source/images/class_diagram_signalling.png deleted file mode 100644 index 9185b50f38f08fd024e5d9900f9087fca49e66ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 382261 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

amS(e^vn*)M*K_z=fayO{FlNyz1ZSpBiMkzVh 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≪Ib9N&Dn+Wb3mu<7g=1drfn5h(L|p6&euOgf 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 OAFLeiM_R$0QTyX6_n%hUp!pY) zhY2KCjUV|GKUdC?K2O_xre_{!B_&5uWQ=DWb6yR*5u;!9Pl)HhqP! zq#OWW#2R@@m;E+c^?0iY^GDfb0z}UWt(#vmH4m{;;Pn=COeq->YGu<0Jhz@Os}K8V zzkLub+g+=<+%pKeIfovFxPWaCMXwt3RVzfxk}`ZxWhDf+8wzUF=o0FojzaS7T45|r z0j@gO6UFb6uq&sVCW6zYy4{mu@uU9lzh(h!7VZ>j52yO${iRsrs6IMe_viVa?gaB- z7rAmw!%c~un&L}wxX|Da2FfYskNkPFc&xqB=P$odo`?I93}zD6Fmb|h#_=JSa2!L) zkQr0<%*lDCDOtDJWjVPnCf68GU!S^d^x*U2#a>SJG8+N2m(N<;Q+VaZo{O*~$dx_9 z-9INle>qL$moMpsZX*KP6_iE;$L1cpPcZV~Sl|w|Kk+c?)e7Eu(K?$MlBf9hEq>bwaUJaZVz8j7iiZRnz1Fnt;^1Y9wkC17DsRLU68@fPj$8$qG90`6Q+;;u+N!cp6szW| zwKjMCNtcf9qa#sAW2tF)e5t$MCDSP2Ev79{(~@&d(1AUok<2D|@kU#KKE5fzI=q5o zK%ewypM`4c?F=C+ig~}~`E|F9KlENpm*YG~(R8BFwW}@UI#d+H@{36hy{;@Gvbz)# zuLkU-OBC~4F+IC*)*;sqBCF4CPL<(JliSbYvp?9mWY3w#q2|nLFKU+ego4d*x9(9) z=&{F}F3q&q{#Yt3QQvK|Qjm`ej?S>%OurUA%(7e-!{Jt&hRc~mVrjyj5wk2rrC;F8WVa-mh)wr5{*Ga;!oR=g*^J6QnRsl zM!l~C9Jzf?Mw+Vjz82KJv}_60sRdyHQ3@G~Sf$RKh}TSoo=P1t!%OUG-q#{Rm5z;Q zxSIDoHv@xisF^u44iSA-A7T{2?T~k~O!Fdj3oNF4LKY_aF#~&CczHcEb zZTKaXwl3Y;tD&7Z`mz^V)W`>6G=)lBzPvWI*8iax1k?WHgkQ^r?%Swh381B_l|)M)zYI*{v+hc zYRVtZh19%|D3l7rj-@$RGE#NI2lLRY4=cAhIl49J5Ti=B`_zCYDZYk`(#<$|eAOo$H=8N$^`5lx zuI$ivz)?P)yE(uP<@iAGf~!R+4b&$XvRh?B$$r0@&#$(U4>cVz)*N`nEta#o{P<4J z$#-V_`67GnBV2j?`V(DNSL4NNn_R(vuO-;AY_t|NI?%^2LSb|U%#oPw3R`j?r9~Ou z34mPn6oDU1KTNwu=yK{xv#`UHV?oO~2w}pkzj#ke&`Qy?ie7$|_2BF4d`BqON+Y?* zT2G!a;lVTi9ta=sv z@CY|weN(}42e!bcJjt#I0oGJ2sqh!EG&@6_S9!OHL+KeaL+F}6nmh|VNr?qoaV%h9 zT9E%K9?P0Oxeg~MUz&WZg%R3e2$9YT-C87)f4Rc+4`fg_cGQNkaYk1%zjA?xO|w^`pjo7@*SSQ#iH#(gmBy7 z`0)%Z5uX$NfF`C){tKpukc`WH-vH05M3}|*;gl!)18{oLIoGgh_TX#JNM)?1s8Pwf zSC~Bg9fK!>Ai$^0N>C!?H}{UNN|+#j^+kal5^-`muFXt8%pXW9B?}x14AYzj9y`@j zWDU^pB;Sm3c5D1XP2d`_uCz^*t7|g`o-@!)Ke%3b!D}i)+O-cIwyXifn2&$5f7WDq z09J9eEnf(AwQVXTidj9t>8uYgB?6@pY4)Fk!1TSG~t_OKhvug84KPx9JfM` z-(UPaK1Z#hy^OBsZj61+RtydBvL=HtiZ*-dDUV8-zX z@$~oqvYk@R2n_uS;FI)YHNKq2rOVL~QzzV*}oS)K6)>m2U>~!UG?9 zqf=FeM$m+1Qm;~6Fm6{F{8q?dekk$aT`=b1csJt?R%$o|OP3jv^nMB(XpO9f_hoX>bCp@AlOi^=P!syCr0Wxup3wftp zxkr}Zki6^HN8zvJ)!%ucj=r_@u#@*ZL4K93nsW4;%=UA zaDHoi?VLZSDr))^!8PeL&X$GCr8Y8?I}~~}GvqfrQg7Tparj&QT;t#COh5E+{KA*l zcmO_IzeTM~bzyeXeBjCiXCsj0Cp%Vc{prH&*Y3#n(wcM)p?j&OynikgeQsV8zH-et ztS9-Z+;>^IE)7b?gE;S)IeqWWq@z`H5-;sHe$|T`AAIL&P=Q;FY*N}&tqk@<>Fxk6 zzPXkx6jQA(%BM4$a_VMCWb%AxqbkH!Z;YV z`fp{PJA|c5ezD$Rj=}^iCwIz90+gnmpKMq9FRDr-QMG-$>reMm%~(PJX%CyaRrxuu zVHe)0lX-SuFdc9aD-s9pOyt42^cOBVL_%>G^29rYzA4*3+z(ofE9cd^UqwuSD{^kb z;xywJS@cA>jXsdd8oh?$C%OxR<>G(_7(P0!%aIUq%?vkOsT4{KJ-Sg%7A67x;!KR( zBb@SQK*aXjqC6Aev|fix&to_82aRlq0t<%Y2?{tvXt7F7XUX(is=Q zM`;ld$^F@#MO_<}Iu>t+fP@yooVJkejKHe)G*|`PxIo(Sbm#pSkDr@D{JCl4o)7U{EHTf3 zzXQY_cVgoxK`*1u#-e21WyJRQ8xEymz&`5k4t)o=K^EwC1<$+l0Yr(x1kCsUtN%1} zk&k@1#MR-ssAOl#a}_m}F5hTiwJ{qd?K;IG!=yq7VAJ4bod^W~n|xWYjZl{;k>BwF z-;onLSjI9xZjX5%)|Y2TD|lBD#Xo7j^0bz>Z|O47drvF)v^KXQrp)QF(fE@X1r=qy zW8R5>5KR5juc>Q5Q=EbcA~GQ->D?Af_yb>rZk_W8O3*99Pq&@?ow)`phW>jd+>(MV z?{>fy8>Dm4%%RwL9TXeQP|6jn-ob)JFA+41F+2=Se>lf zGmmLGzJg<@;O94yl8-C}8d>pYu_c#`r>e&_mG{mx2KYC?VJ!NY4KssuAvHvr?dzcE z*F8GeWs+pm6Yzi`koL-jDxZ{M(xAsPrud>(1a}pw%*qa9S6uDyo8klS#+l`53K}uH zj9h3u{4#u{0@xf1_6_zd=zQ4Wgd)EsM*((qKj?kKr^%<6+%DC#p@T9c8S4G7(D_bW z&r16DWn7-doWR3ISR<`f(Xsni1HLi?n6NwflvhB1Z)_|2bc*D>ndB?=*2Gp%GE((z z7*C!kqsNau0NW7^uv;Y|YMU$1!FYAU(VR(%3iZ|t5rxS5s7fMRMUy0ThbAo}*VQtv z$Xx4hubUwXKj^19J1GDcDZoYULzh4tz2w1MTV0q>CnyP}UDAw|cc&uAVyDL<$kxAq z2A{T?k^37RJq5;@5yqXz04G;K+VU=R76ILRH0Y9ywBRmETESUhtE;M&pgW6;rH@y@ z@$1|>^o^7CP!#nf%70cyzYe1cl7NJ*2Us6t)|2vY2J1HaJ1cTy^TjXAo=~X^YTT;k zC_<{603;yb5d>a%ETr;uquZspwMi{>_iO*xca!1D*9GQE={LYSn>Ufiwewuz0muKJ zH^BZ%^7gOh2oy$iN4tX6uJ&1KUG<1p)aIX2sFiiu#{fn6PSEaO`L9{PbulaG-yy;w zIQtf*DQSE;T!q#zTuf|=mofW(aa1hvNaMvoheDTX2Bq=16^2ryl0+=^p5ITIs=6ME zYwP*BtSy27f_6yLM;J-tpUCknKfcwkH?>@?HT;(4-m=UsV|x_7dPnDGvJDcttd7w- zU1SvZel-)$g99b>>MkKYr3fD6Q`f?$R<>EyVb2L%X}AO&d^XF?TN1Q6FQ|irv70^S zdEQ7r!@v^$Q2w8ivTxt0@O)VJJ~U>>Gp-}8p#-{x&phelYnPBhAsTcMeRmC+vF+03 zEMi!LXJc`SqX71r>X!rN9m)*dRmn#a1*6~bQ#>+XnvMi|-W2Q&U-|?!$udY4p z{tb0#0wRXOo890BpoflISrnmei1QIVtdD*NUJ!WDqmnHlv!@RZffv5L*VZ8d&bU(S>8g=~& z80r80koAA>QW5tW58}Ol(&amkQhph|q|&zT%@lUzN@(vm>%;(Jd;y5UzK+8o_cms` zlA)2^cK-!5a4TRoE##-M=d+A>$R$Wx!JO6tWI&|CSKgM)7l5~APqqd*8%+92_vz7P z5EH7dxy(bwgO@i}_p%2WP&C7=RwpzyJdD<0IP#bZ9gWMYK>4-12z=^rbN`d=bqwO# zeVlr{wCY&vH88-P+iD}8iu|g zmNT0yU;T6W6bPJvAr$ctjj~Uq%ET-ag6jiPslZasvl{I4BKQDFXMUe=O zgj7Pl`7szuzE6+neP%-%e8?g(wXbmd*N+D)KZVv0cX+=&3ldC|JI*|K6I}YK^O(dgb|BC|Z?D3!QeCI@!2S-`W=b5o2 ze-ZR}ua}+9d2USrb`n>ZHwZ*X$bnt}i+P8#GqNZLVI-Kpx-PmsRR(RPzk+?B#UaE4nloB@j%uwG(sj2*v_z*#p zgiW$S2$Rya@j=IjJ1yP}2RDD`9F~A7@GQqE^jk*uEQaUdIjW30)33E2qg>mSeDP~lGAxzP#lyP_a=j3eYAb)TU zngKG(#ssB6<)^3A<7dLp*yK1ye##%4fK1Vly?2CX3jFA3Mn2T9uYZzlKIz~N=)T}} z+4z&5=YF?~38tK}=2^f}GT}j6eCHu<;KHAu)m_ahM!}4<->CU=JosF?RnbBOP9-vK z1JC<3@nHf1>~Fs5W97#0o1c64i|E+L>*Ys^cK#>qxBmie^?Wv@(K$Qk!LEFP=R=wQ zi>|khsxs={MQIUGx|G_0bfX|0(k&q%5>iSCN=TP(6p+}2bSWi@AP5qY(nv^4tCR>x zcis8=`@Vb6IOm=*9D_d`%HHpK*IIKv^NBR3B*PD}y;sr$iBQelxpKgwhbh`)AXrD% zajq)B#%H~m4OB7*TomsuszO8cmYXP4TweZ3MZcn&tgHL&m~MWUl{xA$2D{`c;;TuX zP}9brpc_>$2h;Ib37M?l7vi!%A{Ha>(!Q>%?WREHdH2Okbj*kmGHG zSiuIW&ZNFU0~r@Lco!+ARHE}niGV9D|BH%6nJso5sB;CSt0@D1PNRp7vxhtNXZbhl zpIGS};Xf?53|3Y3A;x{C)(RBv{xBUy>uiV36=UjJN(ORGMCv<;H|Up`kt$qS=}Qa2>ecczEm z;!q}Uj7}(0qR;Z0_BoXdbID5ZmRGalEsRIt0eT1r#m>P}9?|sWoOq(3X2oB@Fy?N- zj&P|5N-X8#t*?m_IxK3-T=F}-_ONG{{^9>S3;tL7Ay++&Jcz9Z5}XX6wrb&REELg6 z&udoiI6JY7mGo3ni6nzluf=J$mHc%G#+LP!7>biVsxl*SB?~pW*0M$sHpWG|>_PKHm_cu&Et~q)?PDOF% z1B>3Z&!er=K;B7_w{Lrre5*0;7yxfqm>UKm^v*#&1Nu!9|)rJ}M;oQ)sFtm%C=b1^qmVm&D1l zSMSvhmX25G2~yaQtk2nzugAQxpy%LtxD0no{W4t%%~?h_`rowOoD_*fpuyeI_Vd_S0)r zXpbCIA;Oe5b)H*kx&P;xrSr3uR=LKDlOIj!i9JvX9JqG#K?zQTdl!DwcS4NW8&BS4 zibuaVU2S=UmH)O90VD1`T3&RnTqM1NY`9wm=gEGc5Mk$@dJirdS2pfRd=eL({y;nq zj*Uap0!8=ac!#x)yrj0rYnEJdN`jOmEP0cAJ=Ee((dW<}BUfLE5vwr9%R)G!`|JKs zFf7s4+q7=Zv?sAIdm7N^*dzLd+d+Ro^74<^8r~tdN20Xix5u0SHF}+B@eaC~xAGoH z^{OLYr%4^A9OCf=W5|*%CNpMMR-ufG>L)6B){t+DzvPv%3a@~e=W4^ru37vmJTix6 zy7A?88{ow3293l}E4s0|!&pZI9Iy)^AU^s4p$;L;fCVL7>sTLr43XAs`7g)`?2&%( zf)-tVVwzR$JSKwcQb%{> z+iu_Q)9%|r!;k?$*KUNg+U7O5*dz6Lb0bF1{~P)K_qQ+ALU2lBpd-S|g=1R_0s z<3`1v0oPE8^#BW+s+1RIbyYg>8aggj{0{`7Ub@(iXZ?AA~ zmISqy{o1YRx-sRej2Kl;v{{Kt8=R)K)b*1d# ztByaztoJgPs+X!WF^X!V`b(jvZ{SPrKajj;pb|~>sx}Tk=AtfrQV24Dp*#N1046{2 z2W(QLX**4LizO3D^&|Y=6W|vO-_Tqg019QMTJ=Rn^~p zpC+FnO-FZHY9tgX6sIzrp?rdFSnkQ&knh@xC4t4Zh5bQd?LF8dLXR*$WdC!U=^BMZ z>v@lKGU)hmJAx{J*6Cl)NMR&izI31-=b zEg)|?X^Q_(IZJnjcAedl$y#3ZUw1*$3xH7G(*0cC@CR#1yf;mKjNk`_@K17Gu0pEE z%0gMsMkS%|zw>~NEUt`cpHBMxDNc#vp)s*VKgYwK-(CJ2KCqzI6mq-cH<=(yOkCmJ zr)PF>1`nD1ylPY0w9R3l4W(mL6%lIcP3|ay>zsq{x)h?lK16k^XnmOPvY1w`F0-yS z|F2Fs)l5X{P%n^&abzE~8BVBhnK_7W;9XM3$G*1ddvBQFg;H{`PEcDruT}#L**u`3 z5%`XcN2Gg~U)T?&ms!em_(Id+(KFCY~9PDj$*(P*Zj%CtLiW+GQvHEaAQ=VVY_&h=Rp3U%(aP6fLU-G08p(i_=jeZ@#Or#@ zd5+qN0hFC*c?#^Gm+iF{oOKmN8lX!f77X(-9sYPv_l#-mQAkj2%Z~)E3$s14WlR=) z>#woc>aCh^KDJ}c!GGKd2~78ku_w#y|M*!?(-U9t5pL4NI&wqPQq=yyQYwoEy(0bW znt$gHdx72Z{Qn_ssF(bYz)uW0GV`;h-xDFAwtNS$?Na0{ZQC!#ehJMnb+DhL2H2$YErN=JaYgr|h_6_YE{ zd-}7P6qom}JAT8pIhclYizPu)>m$UCo;yky;yW3f+TOjU{Wk2wUr#MK+t#4}`Qzi& z@%AapLjAlCsgDe}>L^PqUCNFAkAkQmUp~N@DAt`wWJ=DT2faO%lNY~{45*jQ1csbV z$#-uz?>4^dbby!hN$6*(+l2JRGkS9E-47`+zUUC4C7{_6=#x7v7wOWinvD5pgVLRS2O% z?$8rHBc8+h$>|g=!cO(;I!ti_3GvTEq73D8)#eRfMSb`De6dcT0KQXzFBjP7A<{8K zvk9kYi&GIB!g$EVMc=74$qfu3zc}W(6gLI8tBA~=T-wPy#g1)%d(V-#@-zrgNGvWh z7w1|xoD^u&liIDPjIy;~$tnIfql?rTmG<%9+xd6ZD37XM^+IMZL@#0Xa^;Hl#R~N| zDQav1Jph*E0i%bb;@zj;)L08~n;_Ecy~NqSmt60~gVvg<8%zO}v-}}4oe0>~xR)w{ zd^iRndE4K5v8xlxpj%^D%`pvE?6_~Jc_K5mVhN*|(}O{JWViFev#yEbCKmW*NLt{> zp-c0MNuJ{>h#Wq=sClM@JT*7FcgA~p?<~q%yd0%d_*2N@JZ~;rLoR9lZU+#c=f1tV zL7*}X_5Ol~Eqet^e4#;2q_VcgpW<489Z$I@eA9;_x<3JuKk@j^C{iF5BI9cw!%^Xn z<{=)zn1ptz4JC3B8#_NB5Y+3+e>yaVMLX*L(`^*OhX6Q<54=0(r@eDJbma~#itlL{ z5Yo?NOhRnZdR*=QGJ%+t3f6mST|+`IqQn*HLY&_oK$gTvq20ceTRH8k3Bv>qDxSVv z_#9C4IANrzg?dmsv#)*cr6W406aj}JX zq`L(mskHLh?pJNLD4?A)1Y*1_`M&~!-2&>;cBk%pDbR9ucEqyfsmF7K&!F$9uw?uI zRkcn9z#BbBEk{=FStm;a9vOK zc>P8w#^MM+!cErVIYuZK=2-_bXVj1A&FJzdmL9<@X!|>7#=J0m_& zZ_qkhpC*)c*JxAZz;3+;_FlILQyxhz2P)XKM|doAY|h1lQ0y%% zpi$RyRVVUPL<~oSk=B0#KJU^AXQO=z^0UrO>PE?p4zUMHV$Ng-$L^K9T`SAL9ojv$ z|Mdrc{wn^HY8Vm;OK7X&;)M6&@ZetTRxjn!pz7Su=WJEN7X*w5QwY-LHn`z{*(bQ- z?K@cT!m9hT7p>3f0Ujw$z8?(1hAmZfi{N~qd{?qtj8y$tZ~|?gy2Fs=$d77?q>cnd z%0yMDr!bdjrexub8hB~9umf{icS}(pBlzj#<@w;Pyb7|xaz2ShwASvX5^|zOi^vOa zvPE2!_J0Arr>jn?7HFMPoegpFefB?e1f3)as@d$W;E|BsO#-NxN=r}|*}wV2kC$u_ zA~6Wd;rmAcQU63H!sD66GmLB96~H=K*J{}YUMuJFe(hcc^3+1T{pMSE5SxGhjKhOK zsK_c0?oqwKmJi$vU*jFT{Yk##={eFafX>;$&@TySBx*S-QMqtKmf5slH2Ay$>bW?8 z$GaehU>?j8Fu=D)Snv36Hei^T<^+z=9AlroN($SrLoQe~M8Merzh1x8T6xO^@y9ro zg%D1XrJ07HmYAyrW^AcVJ5j(L2))n;DuTiD&|Tn-egy$VXbon_uF$YBE{NpM z&FD+lG%Nykj1FLi=N1VTPTB^)k3o-&DKsb`8oda6Ux*B_x?EE>C&+gV1?^J%q~HGf z-JJGhVVk*`v(rlYWe{7$f}rs$Frru1irjB>QOrh?D)-QQn~xF`z(I) zhek|WXM1N#m&A4YIV7IJYjG&^jh z4-j3+*4Q2ttS@1_-w6e39)Q>qjzap(r{GQ_c4`Bof_53DZ9k}`=hp?c#o>4{g_!tl zFxA*L1=&JF(rpOp+PIDgO(3I69n5j&U{?7OiQ1kCf@|=bW~)fn+3})WoBPlA04Z~V z1r-KbhLoNERoc)`))%JAd-F9~8VD?3&IU7(fLBo_vKX)5-(F=e_s-4e3*PAH%}`$G zCO_EJj16KM)|w_Vc7m5kgQKqF2J%{ev;S>~>@#tA+3dHrHuh#%@1_5gIxpd9xWFBI zfh>-cLB1A%!LJXTbHju~NM-l4%O6bKg7KUw?%o?-9IILgyS$K%WRIu&{wX9-69DSD z{Ab|Kb;5Ln2P|spgcqS9N~E>$Zc4tV^&1FrQ5%ql8YSEvTi$Sbs0lbPI}Csm!Cc)y zXqWC*BPw8H4NfzM9Ax5u{LhQVRw}!iWW~-W+x#* z(9!}czNi8w5%y6<%(I%zj|E_|EG}OT^tc5(1>i3A_%8K9%TMpZ7<)hNj}x`xv+0lw zsel5OMlono^979}fp4M7qC0pv%)VcDLgpdvg5Wrm4p~@j zPd82wy$Dt$&>Itg)Ta(&;;4e=z6{S1Q+pXi6>**bzoTpf$Y=V08_ohHHd-i=F`<5$ zZD-^e^$rjEc$UFxyU z``h8&X`C=l_AS}on^6utF@kMxV+l=RQqak}sN?NHU4kmR+s$*>vqJB&WV;!n;$yw0 zJd?uLTaVq!TtUA$P;4$G0Wml8zyjW0E(K=1!?)~^5HF>V&jqK+2GkffW`yk@ zHD;?4q39dHA-!!5+RXWUIo3Gg(?}--<)LV*ZD+E~Bv*`%)Dl31LA3Y(xPpE{eM)6y%nfFIChjuDE;&3x_1bV1>05-%M zdk?7^*{$4xA?NnDdNFl5nR#|l)nzMu&LM2kzo?Qm=b{rwa)SL1b}{*igA5|Z*4E?0 zF2jP#JoT3`5&+6X3M4=i~ zQ8bj*f3Ai!Sy^%EEiNo!CqvE9%wfdC9h-cvZ5vppLgdXl1{#L^Kl<}+@axyT7WY=} zguQ9~M$4twNQ%l>?tKt-9GOI(zOEDxICMLm9jDcWp{7;INo1Q+DH6 z5kd5cY#@I}V`nR8_8rcKVepwNQc!`qTY0$t-%0^va)O0@$?(8ArVKAmIV4^-B7|vu2l~9c9dKPlj7~a6?NIC?lgDYVw5iu?aE^mQ zDVKrbUvD5OXT-9M)LK0;SlHQ~%Msnlu_n~OtfR9k&yJN_4RVj@AL~#t_+Zs5*tM;E zSO+6-)wZb5!ZxV6FQLRe+$#4DSvML^pE< zS$jyq;>NimKQTT^tVSZC=_0}HgKU)u)WA23N3GOu%@@SgAdO1vQvM`M?t~}%t~ifu z9WR=s*ktH@Py`bCt%Z+|Xrn>u*Bi?V`1b7=^Yq$Ry&gl0+^e-ITaQ{)bVy(<> z$$p5*{_0d*-4^5)Q+MGpg&Q0=@XmQ9`(ec-#ISf%#C$+x75c;WW8rv;aWx4mq6x9t zG$&9qxQcvgIbzQ>gOgVlFnnn`PW3`chmT{n18eaU72ec}w~G1nOJ8@ajJX)cF^)P& zj;wrN)ViIQZ_|@IHB|8ihaQ<{MNUuOp{cYAQEPt2YLFlHkX0m6MF!jA`#Ic5|Fx0^ zw_RX9u-biPI$}+W+FHXWY7t4Z*|Yc6R!i&RFlS+x+JfhsmKsC%5TFO1xCC;sC|w~o zUElKqy%eD@!t)*zF8Sr_WH{!xlK!|z7T)*aJ~qe zq=H#84d&)#BK5wGuK$iEJOdUp6#H!~n$aRt8`-0YNIrik;^vO<6e#%4`}@P?s3mEP z#cs!*&V31pISASX+qSx^^uLGr3PHQGZe%LJ9Xa|dzBt6L%a>d+sg3@CvoRk4IQ&5#H z8X%(H9M*YfI=JU~dQeXpwISI_=VI|QFms8_4cs*c^0hBZfa8d^tsp0!12D#~-ux6w zOuMV4t;R9~rL?v=2K*Y6eZ~)PDb?R;5Zlj5V0UU_u|&R~p>STCQdCRJ+<|CXA(l9m z_Zp41aO}ImrhLr!GgDje_zr4r=1+uZ!BZ1oe>YqN zFK1cORf!=rL@2C{=6ObLp!IeTRN2XdMvbTf@{mlZHeZGRs(3ctV}Ml)vD5M8E>q)l zzC?9UaW2~nh~@nO3ZH`op`NQ9xD7#BLn$gy!6N1H+saXVleJNWbPMMdBp)ey@NeZ8 zcbWtEE_ZhPQGNI}@E#bPYy*@~xC|jN5YCFQGgA#eq;r@Fn21iIQZp2cBGe&@ta0nA@ zx~TP@R41t~b*tTp6X zQ#>36%HQShVWX%W-f1FN4IYzP>LrUpzcUaabgchuo(BYD;KSYK?5#&f((Qh-FzLB^ zN+Gj;i#mLSQn=s-GLgY0+tBwG)iBaqcp`GyTk5K^<}sVB3p6wXaV_1CpAngiOD4x_1mOmxyyLPD) z=s}36l~kfA97cO-vF|mp6&hj3UeVZ>O$X|=VlG3_W}Sy)%0<)|arXi+^}5v+w8UNj(xH@<->|mAyQT-YZ{*h9&gay$Gg7iIcCS5W-&?7OF&4kRix*jKFi@8 zC-p1zd;zWSvDiyq1D0QjYBpAvRAeg+->YZ3-6km@6Im1^pES>p1f#g=NjO8MCuuW` z{E;C9Gh+qqzslRq04h4$a$Q_OkIwIi85OtE3At*{3O?uQ_5LJ?Kg=1{Ta(HUhIcV! z!Ds7GWA(li0^1!L=BB}mH~664qyDY@2y)MueacLDyH>~f1-o+WqjEG8^}*U1jYGd; z?oGCt&JHanfP^_wgA!dH&@C?5ax7QliYSTmP&h#K}qH1YvL`jBB+oSULbXR7bpOoX5(3 zN)7RrSzrq)sA;!eI(=kFNN>Sb_r(lp$43HxJ0oWSV%#Qr@N<9RGP8F%Pypv~qmT9s zzBVO2z7}uxNl{HdGcFD^$GSVCL0Y2$9G*^4UXTPk!}ch|HU(SJ`1&0fLDLL$ZNAP1 zQe8iB8l zw-gSIbmV_2ys`5JQ-Ea24e0$pbs~MqgB$vv9S!g&xqe(BbTB9_HcO&UDVhAuymak9 zwNM3o1A{tT$$I$jst`<7^VPsY8Paew@_S4F#6!Nr8gx#J+fRYWWZxiyyLmO4Z*_z}wVr zcX8<(z~>&{uVf&C$6SQ?Jhl1*G?`#Fz`bzx6`BR%ou!ai@yUlzB^cGsZvdst48Il+ zrQVt<*U$lpn-E?(>cglQ2n?}JFt|&#TA{V{7j{-p1y?&nCxMux#C|ROoM6{ed^T)s z`4aJ2Vl##*BwM8sZ61;BYh^adK>S|Mjr;QPjlPkY~hh&`&^+jT66 z(aN@iw&NeDWE>`L*&grDEio^tA&bOUw(RpWEOrs!1{m{fpCwv`!IL)0dAimVace() zKWC?4CEo$xjsrnhd?Xq*wVe`xM6E#&9%Tuy^c-klm|*&$vqlLy<*SkPuE!_WW|^wJ ztMuaQ>lbx6s0TbFX9vu&^#LF6@wMCLwAGxf_Qo^NGDW1H4Ge@N}FUf)juD};Z^1EnX z7BrszMX<#{41Z%}c9RhxQckRZZOmQXRxCH|79ss!yN;A0a;5)3Ae28hUJW2El6_hLC)$c7*f=SGrwG7`YoTrIWh_L$53RYyzmEp%a{c zwHNqH#AVJe?J)k6csI%+hj+W`-9ry%?{qoK+*|yy(TvKsKW#U)K77zh6bs}gpQ8se zGAWb)0g$bMQ=hBb^l$J-16;z~+Z858+LI>;b&bEjJy(lS%-KY7KuI#mq&v@JMbalGUyV0*Adfu3s-qc>MGTJ83?(^cA} zpHWm>(4CrMlJVU)u$b|ljba)tTLj7d-e`{Gw052MB8e1PE!;X@K9`JAx&9! zUw-cFv~S`v3AcCu0^a=x5b90;}W z=vP)SZg5}JaZkk*aUl>e#aXV@77-dR0Y|MplHNwgt|kP-Hn|=T7BJK5hMYWREuwKNZQW0i|1IsZ4J4_Ng9izsU;a8m&p2qZ~sfxR6?8|JR zJAzIrr%skUlHf2L=g)8|gMGAQkX|I5z&meSon$5^ug2;i5qlj(4NIWWI0mPYfzMv9 z22yiST_z~cvCwXe-YS0>vvzkbyo?`cvsMhiH0ObbFQ4a3|1qz6HNP4>w$x?+e|){M!FDw*;@V}L zew(RUTbQT$Ly~H9yAE--F#J^iqPC*IJG@9MX9zFjvK6D#6Gu zo(CZW?|Oyz*%m=;1@oc-^f7GUZ9^^c{rfJIkE!woi?=hF#76F2T@Qpt;+EkN!n4Ff zZf=DyZIi2AFWZ02#C)B#7`JiPM4OMdAU)WYV7y;3+? zTQ;+-|983;#G+=%sEN-K`~dVp$xScm@uqrIg~80GuL_KhYQW-g%r^>??fTs-Y{ia2c4`x19|3bLTBMqE-llXJDrFV+{K z@YW7yXPN_?TAY)D-`Nl7_V~=D;F1u(OBMEeTh~RJq=4ak`7xZeFe_vh%T5?f&gEnT zLCa(pu?G3<&CLJE0PbY`OFZFL#a?Ni*f{#RZHcH<5Gv15TrT$Zo22lI=|opBL-}P0 z|9!(@U%}A{;;&Su1NO}06$sYsM;okLiO!BEy=xntul@ArsekE{Big46i9RPz)=a;R zb5t&T%m*QN+sS#jOuW=9ZXow-B;2o*IZoSky_u^|V?^&o%yrJ<#xP3m|GD0lGvyxB zVdfgXGC>ANs3W)ekE>zGG&kTF(9KLe4G> znc9!(NfyQoLML69qrR_^&ue&;hQ5G}76*eFI?)NB<(FQghryezf$O~Cbno$?P!`<; zf+5`IzpAwb9{(iUEs>kQf`1zq__T%1Jf3)9PjVUiGB9Gab~9#-+A6jP_lk07``~?> zEnZ4T+K4ISBzBR?-|E4`*S~;N2|*{Cx%c|C^sbgVsa-{TWV(2O!9?W;Q_FRJzJv^jk+ zu4=@)J^n-cbB-B=?6AaG4S-ibimMq5p+EcJg+}V2mg97VRC!Z>CWV}BC$k^NUwot& zlS8hEx@{E(-(=yg5T>88pF#$n5}}Cqr6%OTQEsjSHzTZQybvyx7E7duAH7<`BvD7| zf2aNq`fLV=`JiSl?)M?Fr}5D)h%CZa#;Iol>%OOf(M@nEGfwSw-Hdo-;IH;d(H2qQ zv4By4ZY!0(Z2tS$&jFu1(*!D9K|V(qjcdP7FGAguZ$0%%JJ-6^u$!f>P3tPUJVj^y zajCr8F}`fm(ky?NJHZVCMKy7zXM@qUzOS&qZ7%jPyHPePbU=AFUsZXpFEc-~4Gf+i zPD)9Nbds&m7mbxs+gAR}<)pu#zFaB02BlnQ?5}GN1Aj_0*_;E%zn&N4S*0b2H3O$W zMu8%tlcU@phmkM(gcZt_EIzT)8_@^4vYA1Fa{<-W zv&aQ~Vu<#|N}1+EvtMh59J_?2ufscqIONo1gv{Quuos$01YZjZ{56_-o{jyI z;_KKQ&msRs-pXJf;)V3laX?AQMCihZ(HIx$Za^>Qi$DJrVQNo&MOab!lZ8ENW5Xs_ zqgB`3t@DaR*RAVEcINVaX^+K*l7}qk%I5$dIhIATdxR@^z@;db?V;%RW4A5uNcs!t zIoX0!+wE5zi)=B{)@4UOP?W>}-%RrtBC5Sk{HF$n#am6P1J>yepAc4D^4lgm;2aED z4rHzS;9x-BX7O2UKx%N!7kq94{qjY1GI3I)jdGogE&nVt2dZWM?T-d7>?xT@Wjy9_ z76k9QzKSMPNlH>pk6>3!`fbMgK%LveJlVPj*y6qvBI7d*|ICu1C~oA*UNYG+1uNbX zd7i;iN1l<6Jt=y!IC+Gls)4}dON4*;37mQj;&lYcE-LEZh%3(qYQ0GM^U^E4h$A8* zq@?0A5z585plm~M@NJpq267M7RFKNUP%%Aa=pEo%ZC@253O%Px!kccYOok{NK?v{ zk`88YPqa%56BPa0ZUe zlp0PYihGWO@tBmFk2L~t^smRk(O*}7Su)A_Cd*40fLWich{h5NbkMZgnB5a$VP`@| z^6ZDgZERdz^(zAM;GqMEnrZaH8gBE=sVFvKRTQDVNMun`&9=la-@WM@6tXUgW}WLTOR!-@nTI}ypk z@=uGSLu5s7S9I#RQ#48zQ?3>em8!N+U zh|+hV{&!I=VoE#H(3~!tCEj=0FK&Xb?1CcB6pk+4?c~K{`lTm-!JN>b`4O}XZhs03 zEf2@2EscC5iok25JarjED8z$gT4NIwX*!Ua!DW?BtZTC6&Uw+fEFy^ zW2;cw^oDoBVEv#csGKaW9ZaQJKfdpa?@~5um~!d(bJSc-fC2F#t;XnEqFe;Vi7yS1JN^AM z#(x7vw%=haV0wWErF#f(S~tWkS+i*>fG^|h_r-yQ-& z_1g?O?1;*GGw*g#kY^;Li23QfuUNmXk$%c%&hzad1Sl=kgE#eoASoJi+!*y-!hiq6h8CU~ z(42-ju6sb5g4>VA5QchuL43759k#8x#bb4V4RIv;!@SBk=`v>BYsg*EGuYRE;bWKV zUp>B@O_@yOF*k=;9Q4#+`33j!0(Ul@^$H_zlpN9>AWqjCX2Ey<<`mCEpMua8?cu7; z+_Ac&8Ku4pOs`A%F?zDY)pGj^I`$Wtq`zm;bH+B1LTOo8yo(s4JVLm046P*N!wKB7 z`&FLr2pz^kVxZReee=ei<*O%zS$Feww5J&2u7Rn7E%*D`+#H;-i>RQJVOm1P)Yl=n zbq!Ae!Czfc*1s^;=5Qm@9mE7Zl~}$*H;_C&?8tz_ZQ+H)2HbV50K}&g;t-6$G;3~c z5kbZv0w{UenGGk2%c!_LjAH3)q3T3122oxBS_P|h#7l!O@!crRr^WsjVCvJlFsEqXkqMzc6xOAgT73ewsUdCiK#Cd6(`=5 zsOMiA7>J{9U#g_TEm>%r-8j?y!6ihsrqX!d1=dd$G~U-vqp-#%y8>F4k&J}egrPtL zIc`Ewo`gnF75!uTa$qZ%t zI$<~vig|hJ>)@HG7I5jG^*;}xI?pYN2tM=F<7)+5VSwO;kMP{lZc&P1UOPRn5dicB z66bkz{zq&fiFt>RH=;Q@wTrQ4LEhK@1mc9o_d}U-!;TR#>i>lp^b>TwE#F=Euq z;6NR4$R5ZXEL z+aPupPI(y3AYrZJ2^^$N#!m1(ihorW{R-Jz2(gtxY1<1tJJi;uSucx)c`PsBV&=PA z-O=BVSj{Ef86>an*4Iuy1>9y0(<}Ir$W{uSE;Z`K!w?_XN?ka4-phs;?NMM*ZXA0t zkxFW3c@+BNw@MS*cmCQ4fcq1Wnf}bHom@)ll^G9LREu$m)Iny#A{tOX(^q8FBwxMB zLXDIVd9URw935B_RP$5*l2H(vZu;)o4 zK0q1|^}d$ry;4*+`wQ$VEf!vfM<8r*)*lh6v{lf9f_TD_Q4M~XHNxz6K4koSRK4iW z$>cP&K1>HD(B3-?GlAgzTYVN7dv=huzq{NDm6PuyV-Fp02ZFb7duj7OF?xF^GZ!?j zhLMD0P&Oi4FTccSh1xR3bBXY}KT}*_6-6De#!85=*Neo&`eeovDJN_<{M{?>4U)>Z zyB4tfVPt&I-CV%4_x9RRZI)Mtjoflz)}lh4@68k6v!zF_N$0R6H3Qk5dq(UA!mBa+JUcwf}zS#7T`IsH|;LUxfnF3%*M{qC-N zuKr%olnyOw%qH%H0ze-dgW?1uh(IlT0yM_KATF^QaOPaWm4LZAr6?o7+}jWM%xlWY zEvpywN_Jot3s|LiqlVZDE_f*HU=CTx2UJMk+#$y%4~q#_>S&Q=HZD;KkC|=9EvX|Q zxlACvZ)L4|Vfw^j0IR|gJ4f}L>&4HJD|qB_%!c-TnNi?Uo?<@=>W(tv`VWUq6qkx# z^-+Wa?egL~!OZw9NzX3-@9%Hs5X9;C>*j9U*bb-UTnC`z7dV@@K!&FlJ*lqEtj{hr zov<|?oW^LFxW9r|VByANYgsGR8bS#Nif^?N4>#E{!ZxhpB6yXWXcBB&ZE`Uj3RLqm z3(6P4gi2)C;^COb5!Bvc4nPj-pT~wgdU6Hbmx-xlA$l(`x41_FPq1Vn&ad`1G^}}$ z5A0DdUo4=+5H4*qCY-U73FEOVa@fDCbjFr^j3?$CM!`H$q1k=^RkgU8ShmvnAA`C# zL@lr1EB#E^Y2XOWJoZU$sY8`g#~aRPf;6{3IfnxzF|LBPeKrIGf^P0g=x(G~Vs@dk zj{2asA?)>ca{tFuQWr|p*gHr)x(f!^jF3Bv1`>1*ya)OHKHvf$Nw!oX7%QN-*&c2B zv*8%$gK_bcHf!#bm)hx-XUMXA8?0kx!D0Quh+PTaHJsWz8}kU~D7X}F29|wx>e=tN zVJu{h5x0^&9*%-MYiHUTWlOOQTD?0@p zT~Mka>>OKk{KWpjwXUVwM>iFy39Fjzsdkddpfg5>a7ZP!1|M6u>l z{wn{mdjE&Y#XLfXm)5I;=YCH~J#-4ojb&F<8F2Y*^PU1VRT^_Ulu!u^7O>uVGX(eM zym13Wea$fco}Nnjy!zwkbOH3&J;|f8}K;cU1X%c3tX# z_pds?`Uv>v4C|_5vgC2@r1T=}x5(qhFegWQ;&tr66N&`new1^D)f{bm;GCFudT=l6 zL+Gk?IOgt+lJFby@R12woQTNDLc%y%$VI$kf+v*J3R)bRCi)wr7&OQ?>-K^z>d1st zul|<{fE5v|a9!&1buKX`b=KS{an<5h4Ok>5lK(E!s!C59?G^blXXcO0?~Jx~b^Odn zvlWJ(4>Uhtoi`S$-B3lB<8**&OIH<4=_CzqJx__~lirFv7zet9OP9U=Hb7&7_C2Yg z5Qdr!^&B0zjUIrt#AA=Ylk`xMw`UYR-;6P@^QA_b#b2n_9MH}_RhR~V=d~z`TL2)^ z=ItAIJ~^jUe}qHl_jH{Ug0t$Czh-ILIXPS|>9;YfpRVyF)=cDU0;SYclJ-Khl0{F7E`}FwSDaC zh9uB$z+1fXA{TkJ|1>MZrj2N1VY=!OE<))J zfBM}^CSSOi+p=Do2Gr8Ba-!3}ypJR6ASPg|I(6gua9~K*JP@3m+!<$+;B)^%*ZfF$Hupb-?LpOyUxYvipFv3ZS$0`yAqsK`;#s-5n(7yO!k zp??->LM^`O^KA-F$pNIZ?Vjb)Ig#)7WSxy^3d=}eKziI9h@S4HHCD0gE^)7gw#5eE zVh+8E{jBScaDaj*gzW^(1k5$3TWmy}>T!6k4JTszU+w~Y#nF*h`rHQk*9{o#yhhr# zH4`0An7<^;1qFJT4x>jP0$i+i|JMuq6F$FXhe=K%3`ycxe7wy^X@RFU^@Qt*Q4J}W z?Ri82@=GKO6){_HlKTR4;WAE|IPN*pLq&f7Q4KT+vtJK`KU~^R`%FZ`f(gTd4U{_e zWwQz(lVZdq8m4X#qDq{9(d`=FyVKZ(y2`X`JBh%klxrJS4q$E8gVG7i zx9?W!k5sYTpOGe17hZzdP(CA$4SAmidpJ3YUKGO0X_4v}#|-RaqF4^WcQ@G+Tn}&~ zLqEApIbKvoTvt01`P0J5=|750&&f=;$krcIwa_#?I*BawzMinkN<_s)Cd00*NL0Xo zyIekz&$QdOqZ0b*g>PK5=54)^@eWjIqyjxnJ14|VBzkIB)Ke89{1{xgNba@u*e0NE z5KvAC?_LHUED4rBKJtS}JE4EZ^};bT0q5rW`fdrz_hr7iopH1fOSn`o<9P(gWlg~I z3R&`p7vQMhcrah>E?=P2*qw4S&)D?I@X|;gabw?!&eGFFy6Mvh%q1$?D_-69=`_ zDE{^$EqUG35lOeXj=Ll622EE98n#Tw&P8CR%hV$YeLzVyI|Iby%d5{T(=IQu+D2V! z?9XZJ&6uVjUh_;O>=fx1A%A!oyI#pIAJ_7@1Iifq^W;V&H><5;R^M#Ia8X}tH&gk= zMbpv|I7%Z~Qh<>8`+LOe5qLFn-c79sbCU*(jC_!tF-Xq+&{?&DFrfDa+TXNorEU-wO)!l}ly{8k{Qi6o zTnr}&KX?Bwg7hkhWA(eET>^HIZ8s8%m~QkIrQg_yrH{&dY2NYV0k=1y7!*Pa54lMT zZ*MStl&3%2zieT*ZW-n19|_$=T} z043Dr_hH-2j-N701shw0chTAI&dRCVMF-vH%H6bOP*!6$>yU6+eMN=x8Axn;c_nhg zgX1GD0v{-e5WFFAG`;jPB<0>x%6A-7VzE|rqUThR-kV7_rYFoc#3ZIToW-O}e8#gr z4dR!(+*G<{ZLvDABJ%9G<3yI@oi-oW%ST}N{Qmg-x|VO{b8_hE9+4t=S=#cVNr=$X zpYXP&%yX8@{^kCPSxP-hgGkXQNBgM8G<_HNxbsFVJnIcP&zD6A4cD|N8ojC@0CCEfoladm7dqX~$J zawHyh(3W2K{&bGnrl=J+ln=j)MDezBsk(nwr_XoHSeSIAIyRDWgH4H&Vb)^Wx80#_ zV?iWOkCLhPTCR8;Qov%~ATvI;eu{( zYsOf!Dyt{jMD>^qKcBhh-1C^jxw6UR1rDFh1N+kPF~uv2iGrk)RoF%5PWLYD?)6Zh zR@VxpsX`{stD%P|Q8=tt?yzh&6QIDrx@Do2NRlj!>-~p2%{7PgZ@@PBw@(ies!}B@ zNW~@B2OdUXTIRW}Zn8(bbGCP8W!GITt7LB#OeB-^+b!b$n2I6nETyAsTe1ATw)=>W zV1iGy%PK8T*Ayo#CF`o|B5@v}dV`5T;#eHtRGibp`t? z!3NbeQS;7)P+E&Hn%8x9l!WAQfj&gV(<@$ZR`FSXT!7k47*osjZg8r zaqg{|nEodGP+p;hY&a#B>v-v`iX7Vq=^oaUDDH^T02~_{UYgf>%H%OPNsA#emP#Gq z6_{4_3n)POlU#nR`s*Zy9PFbv$YW&q=-q|gF{>=z_XoDt?fl0Qr`u%frA;5Tx-!^+ zD{cNIV$!$z>vnP)BCqA|?_@-3qHPyANgs*i#Fg?_mwATW!%zEuEbaLxp*s2(-^W0c zv1fLcGNgNlW%YXImx;*Z4j)7_6cONgtX_Kivf7=g_0I0JaiZtKPhTRJvLH%5zPtiO zJf+4qxar#_(@W|jC|J0^1?`uFMnHB&{Uul#jrn4i$=s z;9L9SlRA9+h8B6;wJB4@Fw^+%FE-CID(6ikXr4L~B~!`b+O3=^^hb;ZK+!2~7p`BR z^8m-+b%D5oQ2p78!k2-MNR@3DMaTXz==`V^emhN8)d;O6N3N%!CE$sR@!rhHp; z50n!lk5gn)=HGQ*T-*?`>q@RiuiRDZe+OLT{)yl32|H!~AEvH5oa+Ala~vGoK}N|q zMo!4gDC5{WtK^`_OjM*n=883}umxYL)($du}G=&>z0Pj)++J3b*G! z)%xIawQqv5G)j3nXm#4CBpR_H|(tYs@m{F+-KI5Ms z24ClaKuTLF=B>STRv&A^w+zeH<0_M37o3Zx-#z?-N?;4F8;WWUj}xP7;lRut*1w1(>+Wjn1SJ%^8z35qBVoUR8zlpMEM8$1<>j0~?9Qs4n z;E^1c6VR8fNgvDO!x55)9zp%qmU~a-pt8FSChv?&|Fdlk{=~GbIXb<@L7DRS$JUCc z0NcLml~QCpSbi^9W=q}5AH!;8u29cQi!Qr#W~^#7sJMZ#jrMpxDkPSSDRm`Vwaenm z#*E5!P1!`!gDU{2pzHSB`CatSt@iG=mZ;niUHO9sOv$3uh36UWAN$pMV0Z60rFw`> zy`N%dc_U&_b-s+IjPtkUH@`x%cx4u>0zSXA@H~eYb@T24`brU#qVsj1k%nTfm+;-V z<>eGEz>fx< zC7IH@xw%w)8s#fV~cQm%k@@LZH`|Ey^8lN)ibfZyvdm>j>YAViKd6yU03V+aQ zKazzk__(*$Fv9ZjM!b5EP|Ld4TeHIAlIubH%M*vR!Tq~;@Z*A&J$upSgWBUD#N14| zc))9`7R~R&WDro6_x!+&Dcd)?MO?DO%jOdn#2jWlhXoBDSwE13?Desh*)<05U8)5CQ|FB zHFkQY{%POMhH(lqeV3tox%8rHx}-H{y~Dfj1-m&z{D~1ox@-g-ckgOy&Q8P&m=37|wkK|-Fs=5d>pd)b3zMew zpY-XRj#7h;HxC;S7e5J62s*P%b50DT9%y$zNoBZwmC8(PCr$3M)ugIHs|nID9&?w5 zduZW~(?!mT(is8c8{iu0v{{4D^E96g`IcjuQ(w!RqG-CWjMPQ|y*Ogi)-Xho2d&yV zG{#0WXJgyUUqebdVk^DWmY>2rG88hXmm`FB9NAp}R*F~gzwHOQw~L@zyRIj&Iq}v{ z)S_@brC6!u(3gQU@y_fjkj83@I4m5S`xP%ka7`2Y*BwwY19aU_LL+ zIc{=f{r0i}7`|J!8E4d3{@?KcT~5dZ6D^^%g?8?n_IRu^HP;~@i@@<2Hy$ygq@zg@ zk2yI?&rZROX$mQwD_j}BxV+cH!}K>cGWyKd6|+-+o^p zrwh#iMe8hp9x`Gg(kmw7TB!Mt5HA%!)Ow`-j<~vXGURI8Eu1H|nT)2isSQL1iK8TC zzHWZ));J=)e_yo$F6Zihanc2hh6G&^(M&;_-b!&v_f!X-(+%84(Ws8Go6x#X%Zj(~ zCx=}iYu=j)-i1SozV;W(#z zy0r1zk}a&+-4~}^O(GxAU-Mxoo*59alNNDsCduiIYWO#0AU1+k)12F}x09Iuh;5*U zrI0?_NB#a#Wc|UrN>tfm$2-l`*!1v^;v~KoC1{UybEFiP`ag7XS5`Gipex^LfAi6s z_6neB+TUMx|E$q7P4T_C`P((IsKdW3dQ0ZQ8|0@V>j6{}P0_t09@y(31-Zq$5zwWgQ+b@2_Sfb@$C(ONmB@PN~c{GzW+7W3>nz3(jLgU*f;3b*sstp0j7 zOBpkqO4<5qsbMY-tr&|3E5K5vaV9NcnO>H)IYYj;QTLoH38HeF9=GN>;bf!rK7OqX z!}y%`p`sU6ZEWif*g1}r$uRV`!jYD6SmW3^1mJzG%v0$oWE>e&Z_DNiGsLAZc~v%rEICU4T;&6~RSw@@5n1f` zjN?=6rL@eAb4A*t^$n{3JdqW*wJ%8#EVpr>%_005u6i$GD5H=+_;zgMY}9r1a!%Nz zQw*?Dgt38S%_nFO~Uvw32Gwk+OVW?)~ zprV+;`S8mgjwEcK4-w1HT!R7H(3JNR#wchi7oV$r|NHI5?7zDNU~mq(w$WxDsc!m; zPLUQHX5Zt>2c45!#jYM4n84ad&&CU-S&sBGYV#*Gs>)oiI~SHe3YecXKFQyFbFHfB zN+igB8SD)%i2!Ju;aDA{(SzOCQ6)pu>TPlS}Koy z{n0~3EwCEV#dOVa$kJJ=EL!ZjjwD^eWoi3#&2|w?BOCwFm--7$1#2hdj8T7P-uEkG zm_^BX-b^oeS=4r>O67_~{4JIg?%*6F{A&Qj5HqqhHWc+5O}=WVvL zB+Z5qG`N3zbvj&}Y^Cki*GX0KRo6VpHtCA(45y1&Zs}Z4Xcg=lIP3EkUv^KB*cR85 zs{%_ee?Q%O91PyMKJtCKJ8Z3W!6O!@0O2RLT+gs>)HjPk;u13T#7dt0^>F$Cp_kRpn!A4Hg0XES zO~Su75R99Oh+Al2y1u|ugAnBH!kP!2wY?FzvTPR>Hy7B*@-UOV+$BpOfT6lu&zXAp z^e{{cCZ>oh-R;_aNYXD$2(2$S{&e{<`yp_9Nk=jph}Y;JXjVq+h5+S3YQm25c1KW! zUor}dmgep${yO8BbtL(cHTXk)@Yw&ih|5tO%Jxi6kpGpIxkMVh#O2G@e%^0MEAeoL z1;dpJyH*t`pUZEu^>QU8kQoZ>DaeaPH z*xo7%7PB2hZL}wea*#sLtv>#PX}Hz+$~4<=jmC7|#-2tEzUo6CVq-fpP)x0#jGXSF z2FSCMt&&rA5R)g){v(%FYyj-bJ>EAs4*AQ2`S7{hjrbLmZpeMqkJ@~>bslR~4yYg1 z0N1;tn&bSp6#`O%8SU{J#f6DJZ^UXI5;gn8B*IJV>=($PkLFcXQQH$eT|mZD3774e z;DMjPAv8#XkP7|ME2E5TB5@_WuhfylP}lRO?##bkkd-g8b^|JunVgz6oEv?uUo88) z^4O3I;kX-jtrNKiWS<1-@Q_n6Tw8mp7!gPAZ7Cb#1`R(v-{-KCXgY@{%|KA&&}PD< z?F_%JV1QpWdj0gJ!d+a6rY=m2xsDpF=)ek2<)e_XIGC!t2$-84SbPYFP7Ca>5@aII zF+5HumTahuJWYn8EtWDd->dZr3SW0Z(lx=$Z?(@H=pdGlf8sTPQqgSJy**NQPSjw_ z5n9OKvHzA@cu)qsx9cCTToOOU&rDAu20xbx^%iHD>$V%CQQQP@%^v_>p$!OGpyO^) zUa^Z2{QJ<%Vu*PT{$g9|`PUMWqqc$Mw???clHVOn`DWQM5xD1-JX-H9ivGZ1^-Au; z-%rEk+T*7_3tRv#$yV|E$4BZq{Ofc7y@6w-H=vdA^sz!HPEu3%Ih$xAQ9tD-J+0zV z1i64Dm^y&pIS6>I4tbvdBj;I$zfYkiI2M3jewrWj^)(?^haiRz4*zgLqha%CiMN!; zcyJT4 z2J-`j2)mcKyTeG}lh@)SA|d7|42*jhAQ=84&@n+e10MTdPmOQv3c3t0W4G*xJJP(n z^BvBs>$6lP_uHD7sK?)zHO8^sLpwth&(uO=?xHqb%b1sNF=%(7|nx1hNz zx$($#|GL)X>xJJ(m0r-wN`Pf(MOuda#Y}#`P2a4{(xN>C2;jFo00aTwiJNobAP}hW zjIjFKu2shb`D(RGIRwd%Mzio|$ldr-FBG7>G7S?~$qvbpwL~2WP&ye4FFN)$CTmWe z^hR`FD@EO0$^|9iI*>6XNjhCl`#%(BOd5cxbCo$(u>z?5hd5?QcDm>%3VF>88LU25 z+QuXE*pj2XIpbfyK93y6sxMRE|NJyf3!tDH^k;fAIl4AV;j@A;&qrJ-I&T*d*YfpQ zS?J9B_l3tWCE$6ssr5#KDB#-rXSLQ453U>XJNERHO_Gw&HK2dEx2rV%TOL;g;15Ij zFRdI$dcMXZB``Bp3Br0{)RGZS*a6#L+(5<1OO+r**B*CJ6UnWY4KH}G>MAcIx5Ak2 z-nR-;JFCe_z7`Q@XeVNZEWop_Z?B-foZ?OPT@j9hLbL8$~TA6`YWtkA@vjPJyTc4Xy!h@?5gEUSN4^IR`kF+jqIa;{eDPV zkdQh%)=Utix^Q;{}pPwdwViaYPZB>cd*2o48;rEaEOz*N( z??D?J8MXhH)X`KMgecu&6tSS!O_P4sU0`*hW$(9B7nRbEtfWh9U6z^83?qU>(12#{ zE=Y&I9;W+nl-me~D#eb}2c1-f0nQbd`e^?hgcK_ER6tyj&O(9*tBGR2$3oEbJxv5b ztnE^g{X><*7kl|wTra)FEbh^CXUH?bj9$2+x*97F{;SQcSv^uv_@aX)mkto!+aD-i zW*A|ASL*m{{wpzFpwdI=pr74i2k#NkMfCvu8G7;zqrx{rElR(O8AUkk0B z4LxG@?LS9Bm&$WNbl}?GpWhStKtg?)2qIEk)fGqzi2V{&a>5T}54v%-CdWu_-f2N*pK`BG<=e=7oF;Za=b zgX#LnU4CW}wAo|JKe`db1{#v{)lrQk*M1}L_tdw$ig?G)e`}7cGnw+}St@U7!|9U* zv&TV)*N1jDq7pnNmp$Z2f<;;$^{N_hgP z({o|?ZmOb}FllJeRhMrM|NeeC@|noErZ9?!C&;t>5VBXehhC?q_DR^FOuEm#JbLu` zX<sJ)mqw#x;NQ3~LY86J02aE%TOYyqwKNeW@wr*F2H1eV)c}E{ zo>(+I{s<+g$;XVz0}@&jKYH&p0=^&)Zl3o=*7EcwfiHCZ=_{_lyKrIlc!H_{JKg1=d(~3rP!fK2W>jO*5KQ!Ie3`jRg79 zkt=*(#rJChL&Q5aep_#H2o`xpFG?wkpFovdzug*5EOUxDq;o3@=Z6GG&OLBLUVsJ} zA%wU<`cdbs?dYgGQzWh;+W~+6@`hLOzcnf_O zUnQx^Kp(46yP9?p^-9-|t&Yd;T7?Lrv}k|J_CbTfgK5jWdUfrLO-iEy8iVGztbV!3X<{-Yr*~xW1$o#wx{X_yA=RK3u~J z`V0HyqPwA~0Mw^7@{uM?FfMhcpF&yi$7PxkM8WYQ5t!e-G z@L1r$o&JA|ho8h7S$%1wQ18Z7+(B`D5g-kp%Tc>SB?5~Qr_~OY06S11z@;EC58oB# zb3)^FH{|b80uZkArSh_owzDL3_<|0}?n6N?ndHuI!NzjX8u`G$?%e~$f-}$A<*trI zgM~ri7XPx%Uu49Hh{rfS)+dvh!-xKPuk*D|CdcM$>|tDEFyy-9o?GNRzViMBo-;P4Lde!c5|HUeFwf7Q+Bu)gJF5^yF zV;Ma2^3{*>TD*h!(pQ z&D#(--OcrJm*01F?#Y9veFn==)mYYgOOfp0w-uN9SSDFkZ5%tyW4jj0PoGph1Oqb; z{9b}ccgaA~z^!LB*MEUw!S=CFWE?mHoPWPsnd)%ZOiaR>Pgm;Gv2k>SdToQ4%zNWo z3IoMz{*#BG$APm@2Rye+@c*gjO6{1M;ZF*G4qP>IsB{8}%X=7{{!v4mfAqVdI=#H@)aUmHy{=WO(frpp^Dl_+fb2g^+G2 zBq!pb7pK&V^roO@l*LQ1F=KBooe%g09_m&QMHw;O-pxUEEMa#+RMmkpD-4$OoX~^~ z-x6*qQTLnW=G-8m#%m^crEc}JTkBcc+}f;QzURUwxW}Aa<{^F%Ch;~MVsc|a=fg=J z>-ByBrVqZ0z5!|#FXlvy@BnCF&;n0B>@7{U30(eMVOj0L54}HoZ;$YBBAi=?v|*4P zyUONwfyo}Q7kaGD;SDq77$9TJsJAMF6Bf@v_-!y4$UZizX_JkN0GE3+3?2-E?q(ch zD^MffL3?lP^~>N&S4m^jU#ZOGgJlU?`n#tiOldS%FW+Wcg3igkS8v|;v@b7#f$qDs)@ zqO;+R{I>dkPaj5ZGVd~PxLeQHdE9P>?T|N?Xzy6?wJPn|Nd`b;UFmBE1~0%EOAxZ zs3UkNDRavR9hVltmN0pnYTezU`25$o{CtykPoIm?Tg{##1tf=@k_%h4D~yoG0gn;Q zY}lCCIzxCAl60<1%y6VfHF?RG&4feDGU%CmJtuPIY>1;M#v)nCj}zK5RIIBm+5=wu z$IQJ|d_$m3g_5||->VKs9KlR|ehGVXsN8KzSAMZ_;ozV^j6aok=X@4L!s-o+OvPBT zu2D%c^ZxkB%6CbO3nL7RB`d=0__3L$ zh2@>kuF*S-s_bpAXg_f5ct^@x2=`+<$aU4@AsZJy{T}{aw@RLrxpe&^SOu8jP-&5lsw`c3u|KJ5(?uEw`sASI%GeN1Q*j`)Eb; zbZUTa^5>XYu59A)s~c`WR}XQsIar9^HKWbw7I6yAZIOGi%5&i8X~`Y~xS1bmxke^f z{1{0Mz}uwixkd~U?61U37NhWas5oJU?4JpQ5p>LqHe&l$kkE^btM=&K#eb*ZoHo2> zL5HNQfXJgw>C%tC4%YNQhCx`q0pZ;1;VQWzky<3F2|ZP@jI8Wi6RhQNUDXvXxqQf^ zTC(IK8nUY64KdOK0e~)lyc+2rH>j%n9|m$$&;zoT6A3!w@qw21%Ooey3$xQX>n(G& zVLZ3n!=w90Gxy#W}UkG1JHz(fG2&a3Y-2{zEdOuWrmb zcX~;$#Mg0eET;*{W35U*VJXFv&pJIdGR~2#++n;AVj@L$nYC0kU8xwMbNFYnFA}nB zG`hR%a4LzO5pj-baaTvA9fes28XJmSj#VCS{zJcL<*ZnybgbM0V#O|O9$#)48eJLj zT{u3OXbzzG#IFq3b8S*}X#OIe#{|bKG2iZ?Hoo4%?QRpp(YP;_jf?sYkwLFfi?{Gl zu1Ps{veiO*`@Gcyi@&|+JfEE{y6mcLwsBU0@UTSP6yxWcwp#aipc59$U`;xJWhLOy zcD+3x+aQ42B|G$!0%lB}@Mo5gAT%^f?Y-;M5cWQXQHYp=hb#aFE8%dB()P>y2hJhp zY;Wnn-RPb?cpun28;{zlzJ>Dl5}uR)LWL=2=XX$Ly!6(fTQZ2VZm zzXG%8}ucCt8+uzL67Y^4c`Ku(sn|5 zO_4h-E;;*9)>XFpx(m8XOT9T7BvpFHZgkfKE59NK(+e{tUT~13J%=1V9CdJuhytBr z^x3)JXF@8hg{KNk0cRlsu2$pqWsD=y20&8`1yJyPE=b#^{8)kSO+; zpX7=+3%{n;3}hvVlDBF>RcVy*>efRm{CAp?na(Fh8HRR8SpgHWJ1&;I>74BU z_DWbf4xH|iZvA3jug)uLs2ka?>~HyIZ4wOqMB*@IJB-}r1KWTIgr99RsoWBCNwcI& zLb+~qEEi_^EzhqsD6J;s^ktUjy^yGgs%}Bqz z*=k;@YpHCiIDcu#?j>C^e`V+M))bl=pt@GXmc01yPS~ZYrp3K`mQ1y(>CnnRLs-hbh0aC>QCD}UTUV2^R?dZ=Q!5-KZ^9r$RrL( ze)-h-O38n-0z1=LoT#YP4jPA+j5I|^Ycp?^uT*CGbT6wIGxcYd>}8)t5qM1y-|n`e z$=6uN8kD==%ru<*hd_Qomt>(jHrLo1t*WR(=}Qkw4xIc{$R&B}n8%NV*_3CLp>bq) zOsFQr?g^5$zuOnLiU`r>-!~*rNZkCF2{obyx0HUlG zTRtq(eq(-k2o(g?uDmgfRusbyzAMa-hp01l87vj7gD*N`M zs=>y$bGAVvIo;_8o;I27o#pvtH|HDFt8_ci)W;t&=9!crNx51*W&%o-j>$+59f`q+ z`rM{X8(E)b(1^^M!p(!AM|$FzmVIR6@GKC=Tzd+gl zWKkR2!g=YUsXx+`CHgK4R7ECnjx=_=M)B#7%7mh=9ZYMTT7`=B3PRlN19u2zPrD9HjBJ??r#2#Qh-N#K@P`OjA$HkWk4*sjN7rV# zuEES4i0gVHFGE=cE$;v-9%K+Qj}992n%#GxZ!BJ67LXYhku=lIEzutDm5xm6#^iD8 z@<*x*+^r?r{jgai; zAF|mvu?nR~v9(X-b4M4HK^u!Ugr{-a&QH}V{ltP4U-|`OvEF-Gd+oxpsckvs&!*_Z zboZ2V>b19yj#4>%dY&;(Mrod%(YT&F*=z>bXHS;bnIFVm{Vkvpnw-UkNjuX%^FYWF z#8(&nrpP7Jlj2>^^+-2Kbxke%vL#?oCpsA}#f{E<#%g=1c7(n;KG3btAvH7hXPB3^ zHuL7jvQy$yeKk_Nz1kKU?l`}h!*=89u*0%z@(5bQBxI`4+W?~2fK8q*`s@qSsK1ys zHET%<_yo_p&-PXo>l=s6=A7`AdnPFQ5+f85;>Iz2T%t>8Y06E~_i}Yqss*b%VrP?_ zesOP`b$uqzwcs+h93zGygfk=htz8F?oSonElZR>0QPYT zp%ngxLZaJwhH&6tyHtc4Gzgg*uQ1AZv@3E_$d3tpBE%k5ibHZCJ=AaKco1Tb%|Y7b zK3x6&fqOEEK&jo4le{Um_~q*Os^&^q0$JCsQZ{bmZ!1p!E+H^C7zGUlu<@pd;q5z{ zO>JmX^g`%4d`738sQC6I@AMv}nf-!#b%Gz!o##k(%wX8c$)5F9+vvg;Mx95M(Xj(j za@nUPa`#=qmL}gdni9lW5{A}V{qKsiK+XxMmu=FhUS!~9gxqOSUGz+MZw{I5hb$F_ z?T^MP6Pyfecz*$wvZP%cTwcEjm1%bouc7NBkFNobeXPp>Qv<0RK|d$uN?;@>Bo0 zqZreZ1CYV_+?T~GUIH`q=_z<$<_^&f2L{?Z_tjyT(~y?I>B?R{i#q@CCQ-yHn*X^4 z<*Cf*pOij5%9X)vp6>u|VmpeIG|juv6mDJ5&TWSvK_5FO2Kj7+5jXh&Kriu?hk+A^ zYvY-6FvQG?xkER`h~y!!kmn2f3w-u(={LqfJ9MMBXT?8q#QX1w;7AiCF5EK2I1W}3 zk5CWJ#_z~<-N)VmQ+Zdu?+wp6+reL5E1`YfZBLXxDKWRvci^Yea zagHeg2P16j?zM~?`-Brtl4ei??DZVLR;Egln_N?uT>G+BiY3X74KwFfx9%@3xV@be&zL*a?eI{9X8R3sB|?+!B2s49&1x&Cq*}o{N+2wPLkl$w3N*4+Aol) zKT3^iJj}wcL54RE$I&B3BIEqG5ay7BdXFv#3WSFLF`Ga>d4EefyM0)DZU5dtX5zfH z+M#@e+7ZC2rVZ6~8T#CB!7|Kv4-dM0+Y0A+T zjmRM(r1-?|<@Y+3o_ev!G_tKbAkC+T66&mLCSQ5~BI#W)>mk?Q$k^8VRp0z|5G?r& zmHZ{o^+GCU-?dA~vo2bMII=r#{yri2W7?>;;TkqIN8%;g#@xJcbSwHMYP`v)4Pn2kc@m6rvDrSM~w#b3STQ^i&`3y z^RMW>zo+nCJ4Y>{{=(O24DLn1D`a4jZzPoN-u_v~{^O_DQFDW(6qI!AvMGb-g7WUM z@c&VY!hNUl1_#!<05sr|w`F^uo%!znDH<~-j1X%|7dAR*PX6DvKZF=(Av_ z5RcnhCFike8cHDk?0arn>5h-)ltNtgS=Rfn8IKV3m>*XBxbk2cNuCg(A7VK5WcDV> z7b=f|oCq?eAYLVuW6yk>;4461_|nO`N+4p93eaoT1N%Ma7BeafwXwT}Tbn04n27V%Y^UQOvv~2;gnWJ7;aB)Wn)?z= zj_u5Sf*{_hXR)K{2ZY@Lpuzf)XR}&-BFM_i6to;v?8lJj{iH<9FPdba?btyFw&$*? z`=6ptFqzDtq>SykxinwVA1e|Ale9SKa8HQ+&O8U4hQUMtHzI%~OzSSJ7BgTU+n52u zy^hl)1%Uo$gCJEe5(fyIz41fgfAR!o)IF5zpWxwIuHFWkN^j-I!4y9rHP5LhY`+sO`0eJuOHI zSpxPW7kVm{;im@w#6)8^5pX|0*|3?dpx1RfaJ22&5i6v+F<;KLLJDfc*H`2z$H3Lv&|V!wgc0CzfZow_N|JqDZxY&91C~$_dZXeDQV>a^6j}aMpI%(1rdsCbN6ZZY z8hTnAsPO9KKtU>XUwV6g{VQD`swtHG4mHKr z8U=(KJi{Nq_mPG~69cPHErVHjy`YjWp|krsgshAE*AT_rmze}gSFR-%J1kGK!?{jY zlmBEZi+6}&yaC~G>IP9;KNz+LDFJUrv9%^&JQ8r5tHWdo!j!jvlWqPnn9_W8jw^52d)=^K~(YsKu8Qxa5bwOO2}3ujllePN9VD3aHu84Ujl5FW)65* z5V5PlVkw0b0v(q=gOKYxlg}tW$Km`iFtiB*b%^q#WQ8iE&x)ca0KDP=5;p~y{%1!8 z8koQ0g9ssJD|ABs>r~S!U->w!xxN3uPL7~S-3gDiufzw6IS5_7VD_=9!p

((=9X)dz>#-Vozb1nSXx0+wMM#n#O5>*g?sno?1c^+U?#a5kdpg%@%q|i2W9)6> zY^)G7oPyIC#QRv{OSjl_ncN)Y)-0ry1)z9>VWi2&BJ1jA#zyx_jXSnr7LsP z!#UMFTq`ijq_1%2I+JkRfPH2|;+}>vAH?sI2*h=A6H+nv?>OJx>TIoQ3P64d1LnmZ zs4)ed1&45o z7We{%0cz4OfV>)7E@{V-()?>iq+=2jiu8H?} zbH@@23uFQjbZd*ynv=YfB5-E%h4owR|IoW=)I(Iqwal}{2vLjmnWyu#s)Q#-ZZIyAM4UnrMdp|6V0~rbpX&E zO&L5@u|MVhE-FKW1y?_0b7X^u;RONoN5`$7-c<<4*{TukCdC;T>D1^V=g=BWe)#0@9Z-kRkpw@WWLyI7H|*14m9qeQgVI_of|L!lP&3KG z?^Cdq69zdrJ3LnMAdYI*2&&`5C)|L+fD`}ZzX6Cw4t|Mqh~;k-mJCI<4U5H=Jc6-g zTL%^&9xLYu?Ewb?lor_lZgNUHhVw-PT}GXLir`kJo%`Z)C}m2Q88!FyHHXjglp5fP z-BF_dl?L7huy(NDNd)>`7-O|6r(-jtjb4Tu;R&@r>|H6)HNwCdzCvF$H5hn0zYZ}` zkPa~FzjguISI~+*+Sr1W0J;Ly28dAXAujXcP?->EJmYKLpIRd8`rH{T|HU{3Rd|@i6bl0^PtU;&bR%a=9Yl~9vl|fscIzjJyWf)t2+iGSoIw) zfdcb<#t}##{?f{`x3duVcDx%r_rMb$4=Xw-efbG~FXU52z8XrlZ#$qEm)CXk9f0+H1l7};*M7}&BuZaI!EUD70N<;5hN zhgSQU=Rw!L1>L11zzEMi`Eys#A{OfD3?I_YjWP{;LCnv6+i{E}So*<&#ok;)~%ec18#nKV|9-g zG!>|h?pnyqr4-PP#sT7cXA*EMVd9QMbeFy=rHnr9z!s?Ug1O2bh{B<@XEphkQXm3PJWLXdX9a9x2cLWPW~;sTM=EQzLlR8t z4JfkKNRf5Dpg76{nbhro7g_$tu#zvVUedyhUJWpent~kS`?c)hFaRflC!fH>zwc>y zdF05c2jQzQ#Nr)El~oVnMCJL8voTk>MFHI`2d!)y!~+rQ?@1}Hqyzk(nwl^=Q{JS1 zGP8%Q_$dJA8&(jicV#PcX2tV+FF$GSydA!en#Y@{)FW1;KP{Do@7V#>t7<~Ir@)}q z_mf`jtKiv2XldDsfhWI7?h-Qk&`g)^D+}0`9Ek0mjzH>l`9Phn{Y(FiKA$&cDuNX( zAVl8_3otEgrxbjc+;m8t^&a(DrocFijEHvC$VY}(wCBZ&^~rz3J*f%z z-`jPND9ekrX9~?=- zHrF}Ls-H0XgSe-BZR!CSg1Hs1HP12l9$P;6;xe4MsdASO_7~go?$9r$S-racRPmxV zxer`H-tD=W*enhn!R&T#_z)yH$?+an7}ya9yvE7{(_V4#+off3nR)&?G9yfVaIK1@ zdW6B*8xJ~M2Cbv8>Q>aR@{OWcFr=HJk)Jp!s^tDAx*gm(#}yJUo+cfD%;Z;Tkf2CC zPW!!2^qHeey6nhi?(75gAgQwpBcE;a=gt;v!_Wp{s2uH2G0LuPYZgM+m*L(38Ynx^Cu_?-5+S8QC63>OiYc|b9e9X?p5Yil@k*8_5EPw=z9Yii z3IzHokf#ctu#V&M>%N_9(&;lOnm**u_5t!K9H;F<4^c{OcJ?sUX1P6T*BRYgpJXcO z>;k?zI<>=H*X=7QXm|3f&&?fqA%`F8fGdDMH@Q|Yc^CfI{!FRWYrg5&L)ht zw8DG$r~hCo7lXy-*sodIH!<_pYyR!=`JdK#AD` z(a1`|s-cH;?qQro9Ea2~ZdFF;AQm-#yA@NqvM|glAm~@QE|wzSLu&qn!rr$MUmD2Y zPcR}zbIqS~$SaN>qV@aH>`v!oue13v`_JE6{1!6RNsIr@FMOQXg5HIgG(WL(^9Fi) zfttF;7ZOf3auC^k3qPcF>pD2o%8Xk+OTxQ#TaD8>tloUGaa3K}x`(CMTh+i%+97u0 zNZTXb_Cjsv5z}USZJy$s#WurJk&kM#2F&PVy6jnPi`*t5?!~Wks#vIOnI|$^tX!WE zWiMDxhJSQiu3Z0Pnd5gDEO@c`xIy@zc~|50XVu#?4@WkWnKeY8$36CSkm)gd=K1G? z<0^)!7PKpU;jyxj-Abq~Lmd?zc570^j##No{Z4dEarf#&DF^L}@Q0G`1Eb>HnM$1* z%0=sHKq&{^e<&H#15zHI$3J)hPEZBR)KhcZ>Kp*Pz)M^>mo3bMA$)#G0Mh~`U9dt# z=uI~ASwV?ADru;}yTnol(<3oqjFcyCltrCg7U)HC+LV3DkS?V#vY7mf*80+zpd3Oo zzJL})vCUm2neOEsREHQYxx?`$pTRvdoMXgk=X5-%$P*?_wjGnlL4s(AS6R(+tW{r1 z8+ynlRFsf0SK4k?CUy5ss&OEnmab@5{2LL2_htoo%$&9z#%=+|rN>NEbCx3Feq;GZ zYcI4Xyqc5fj6R+07t=Gr!k_kS@Sle1zLg&g7+oSMSIb^&MX?{(NMM!8X8D=%BMS8+ zjsK_kN@`jh6rsH>ie9yc)dt}C*A0TcRi+8Oy(9Ing(+b{#iBNr+DwN$!4y@n@9I?BW8j(s$}mlC0&(^nwg!rSzdU@1Ba)^AY$*YGzoEtFiSol z4y_N#z%-}ymOIE$H&$)j9ePz^-~D?s9R>(E>BxcBbA531HLOzU3SmKj~%!|U+?eH z{zr$b%OP+hlS1=RbWQf&WbExGoXy$1o%7922oA3MR-mHMFv1nQjQ(T@uAOQ|QoFK~79 z^l~PN!kFvGnl&hl+U>};mk1wh@jbO zq2=tx!1$xGj+>8C-P45n%OnH?`-cWTNUwV5aq2G(96~2>rHHv0sub2X9`|<3Op7ab zCKqdaSm8N_u9AO??}@dK+`jtfcw7A~P#4VWni+`rP*YYkU5I?!?+{BqBzZrKE%>dpiW zzBsArHj;4ZA~}`yTTcOG$fW!`4x8KIuGM2G=Ui?=e1vP8)2lySDLrey8ZtG2oin|d zC)v8^@-l?hon`l))S={oZpfn~O+Q4t!mxlV`o3k+yfG5RL#lCZPCqQ%V!&IwcUCy7 zSed^@JFyz@t4nSWY&Zoe5*M)6^H}l9XuW_egs2R5h&u5mge%EV zl_O#J*!=fDlP_V(PYMnc>vki!W5&I>m z01UG%to$&7#V&eh16Cchg|-O3k$2b*;#ZS)bkZ(c!*nbG%>>GFkrj|&YEtgb_xT=P#FzTGwHxP*l$ME8NBigYYUL#2 zL)k{wS<)R=_G+kJL_M~I*~dUsv>hUk!f@VISq8W<8BLDwTp$?%ykNQ5wM%FJe)uNe zg|`cS;Ed=RQb#dMs&{xqpBus$O=D8lCWFRmzGHIincXA=W&pOrSuY8HyT@F#L2Tzb zVzmSD!77yjVSZ1(RJb}c+t3EfmXXFP4M{jtnR*KvJF}Sm2B0V%ZHZmJRfp#d(CG?SuFJYN)h!oX@9f>`BGJR*l&qjtz{Cw?TI5Bf5nmcUG z)uO(YnZf065X~dEGS!ncIw!B?HPYt7SHDxyI#F)mnfmCex{#y8F3%Dhe-s<}e1qyU ztq{`YUPq?>co%rq8`ZW#roZUYPru)9NTHDDL;SuS7<;`C^y>@dNi&qJJL-XI@$&2V zvQf{X#6|%~v>S*vM9!%P{o+kcJ$YTE_i5s}+5}#LFp-|R-eb7j#W*{x-+TYBJ0^&e zip;`eFZno6)_6RfrWAY2^4jlh$W&c7GPeLm4FV)0{5o!j8_Qy9DSGaeY--0~l+(3c zsrtpoL7JYPK&`yDb*Xs^JYbrk!tNI%&p5m*Tf2yY)i*_~x|Bg2b&N>!pC2FF!eiM6 zGkvDHKD{`12ok@fCe2K8<65J&V)e$ue7oJXMGwWT)c)zWCb?oP)d*ZZY;V?IURNrm z;xvtX!`T&LwmzYtG^H8Z{eN72cRbbo8}~WK!LhRU9@(L?GLKCNDN*9cs?4a6b&jlT zg{-0_6*9_*I8xcGAtX)+m8?o+^ju%+{yoq0dforjecyb~_k6~6y|4FJx^y$jG)&gQcv(5;R@cE2n_IDqy91}XYP8Qgs=aW86TsgSy4Pgpq$>Ga zD+A>&28=>l>Ka~szlDyurfCj2@Wyax<#3v!Gfv!peAlhrDMuiVw{Y^ysmXTjiZ1@K zan~6cu_a!D-A5!8kU1nXbVJX=ayE7AH0q4AeG@`g0A*5!mdFo-rnQ^PVx% z|IY9dT*%MUpq(^MCN^Jesg|}BIDzqQ`uU8(Mr`uWhI72syR+3I{vV%F2j09YWyZ_W ziNHuOExdm?QR9r`lSfjBJ)^?Vd_oTQ_D_aUT0ClRnY5`jOF%ssj-AyMzgwEB zFT7W9mA4H@Im3MU@Zw?uR7VoWRah}QlT969dK{8-hBM0Qvr={(vhC& z$2SJ>3vsN&Xe|)`K5T%CeB#S1Ki0Jox+v0%kydc_ckFZA-`+H0c-L|n_qk`6$Cyc0 z^e41+mSrY&92urN&7(J<)Tu8mD5|Lf6V^uK)sI?pA7EGNi z0MQ-5(sN=i@1)xNrK=gT(-~t%#7OLQu+No;Hku@G)ODMHP@9G_C+tZ~iksf!)<${8 zIoc?3DQ)h-g+d?^ilmkyT5x8C!vE%!M&D7pDrO2k>G@SIm+=&$m+ z8<$!P3s3gnoWd$N&$J;6;=pz69``7^m9Yz*3Qp~*cs7EfNY;t15;7Xm#392pygt_c zu{eNDMe|M)JfZYX!0P|85emj?AFZs~OevFZR4N^%tA5%$+3UMe&Yu};42No2xT`nm z?U6SH{kvEpyy+b!P8gNCT)fG6HxwY3FbVR(j#;mUb6@R*=ihwVK4{PqEb6QQpAQxW zxD%!cd;qlQe-+{p_JjJkWhaeHmZ1-2_ zEXDh9%eO|E5<0mGPXeBch;Bp<+`i#sL;#6qG1PWI)3_5MQ9aDN&-Nah{}+yO&s6)` zOyDDYSOk@fE1)WfBlxka_s(s|$KgY4#3EepXY zZfX>wu~xKWeYdG2@d6n67e|5o46}N<6I>r)^M!$;j?%1mDUG%2+tFf6oON`A{|%+( zS>9-XiYwiH#7tBUj3tDm-&cz7PVa-h|BS8#YqxEm~#_kbLYaN&du`<^7` z!lD#Y42NjY{M@D6W}TGD_IN{>3F7VP!oGK_NrQ@ERjnLuWtX2uR}gdpkA>fYbEs8< zhTVo2T;O<=aYbXza~~4FR!INj0^oC%$3J=if5*xg09?d1gv0jBgS?ty8?XBFOl@iC z;=>F)x}!E_oesjd28jI~taN99swNg;-^FR3ySIH-NU(uMSr?J4!z4oNW|po$1#hc@ zp!!fa{3%irgBOU?L2s7$3@UMc>TrMlET*}@YA>8KBL~PD>b(Z0O!l&W=|3zxFqgPR z)qF4s+_b-cQeF6gYvohE`vJEQ4g4x{{XFK|@KCqrD!VBL=F!a%5w0tseL*>`<+MDj zDFY2?Yc6i46mdwzmma3vB`>xiX`8TmNuoA-enqe@$7@ML1uA<8El&c^O{X0_o1O{ zAFkB~PKRFiync9j^q2N@pr^-tc+>p8=~)K}^DIUHUiDzFYim@$rFB(o1B}!KusaX5 zo!ITS53|>+*h!Ebo&5Fz_pLzBLQgAAqau5tT;LY!79rX5IWUV7fx$%^`+DghG6J79 z5&6C4RsDU6{4yCdJv$O2gvjtQ{fw@Uszxl?46tO=$I3U^ErIC5AI3 z>tb&z>JOAM$lIgxwHcnLd@GPvhHyV{H3h~M2mt`u|G9p}q+hBWgdrJ_Q!{e>I8Zca zn2T8r$p%P|vd8m$*q^ppGnkCVF$??duP8E2e+HjPb{mXMWu5s@uZB4HgL*Uja!Ior z;=}@wVSlyHu^(UGDQ4>*DG?)}G07;#){iZy0vqH$Xp|z;YruR0xk$ov>pZs4H4)NG zVwyuG7{#K^uO<}ZvlXM&+NshwEFR3l>J=aGD{*pRk)4#ydYo|W`Vpxz({ zVRO||VOHWg@#XE^uVv2_9=I<AIM6iALX25PP*-r`92*(kIRW|RKp=wRgnAk9Io6nMQ0s9 ziyOPQM{3@N6tE_QsejJu`+hl7;r+n2hy^Iw1xDto%O!q z#tu!^^1UQD>s<#*9BRR#>RQVoZ=}c|xMTX+Mc-Fb55D{LorX31G}V|+CAc* zEZa~-48y=Bj|Y!f$QEHdRC-k9W{c128bbbo!%y#6%0L$PVLgZIaw|+fl_`bJyIccX;ABE%ogc2OM*q4wbFh!<<(9+@3*Xm+AROmV>%+oR0+>< zl!??`A1~)Gpy22Tp#@1NGejQGkouLQalx^uP(9zVIq4UCiq}0~zL6df^9TQm+Xt@k zjdW{7C+i{=I`R(-8a+KOzNS|M{CMe*eZ1?SoYmuPisC{?vYdQNZ~wSsF$_7YVch|k zl|9`G<3ADT$~FTH_io)O3vBUEaH|yb!gwM+Qx+Ba2i_7V0{4EOCOJp2ifgg}{YPo= zNL)@Dyv9ccrU}h7*d0RH!N5DGZ1KYxObW$`EH6`qQvpjmfs{(m_*woT4~BTeQD(5( zhkujc^IYWdnTeN(4om&~Z1zx>IPz3FAao>Zg%BZUQ1>cgJ?C$Um`@O#O-C6fyK-!c zx956cRw7@-B-jh-xz5Tj2lOA2#FXLW9dQ|Qv|R=BD>4k;7^Lz6q0m;I3^+-ZUrhg1 zE!y``xUWpG+?&_>X0*?8`;rjto z?NgOtvefb#JJ@n@h#w&#w*RkmH^dGasDrJ?3M9+J96U9CN6oi+2u_GJfIZB#9Ea5S z!B2J(!&;LNDxbL3n zB7JUZpn;Rc18cg8%xI$xvGRJrfN@9xvc%~{!X@)@PATwtJ1HdaYj)^jSBc+WP9{{X zI0QHYS!4@z9&oz9Dx7*@(FW`DBapA@Pw$|2!ZyI-6M(jbxGQOC`q#2I9{_b^K@3s> zA(jJ-hpyNK`G4lwI>(hs#h21NdoggyfS-|b_@`3^%GZz6S!AQaez2Ci(OKWmIDYF< zkRw#w&w=rE2B=gL7TJBH&9YC3qG`Lu)ArmE*L3!9#=uEKRizGfrQ4XuKlO_V9pZP* zqZ^^+J5u|x{|wa`rRAuG&|eD3v^0LM(~}j)g8|JYx8j!}34%hl024h1lw$fIo&_Or zMq&IBy)BQX7dS)9=zJB1;-j4Qk8svj&WXnlCe~k3Q%uv^S9soutI1kn#8t*_w6=Tv zDj0Rk;|Zf$g(r-lOT}|)Y@LsoDq$!i={*dVzr5`2JODO<7IwwRU8sp&IouK@Xid`26FV*8C0Bs@mYGJ}p{V2XFx}XBEh13W1iS0bDfn4j6n) zBnIIo+o={*&K3s&9}1q^MjUSG`HOGQEeFK?^;jpr!`_tCf0;;I-lJVL>?X$IfVoJ6 zE{NQ*zQj-%oz?d0``98d$adEky(>L7tt+Kmg^LyeNiNyKls--6G%oo#9iY8*a66!d z1x%9p+}|m2{*`KS<0STH;J_8?)fh7hIU76scLALd2)92mK1?#0W=rx=^~q2BDUq4N z7y09Fa-$hok*3-H!&k7~;9A;WwuM0SvBWnZ)>}aC0Cfn85qrfQk6l|~l$*m2=ljz{t9Pi(TwDY8 zU@|HM(##~xE=$aW;I`{FVkj1|GDM6+fs`kxEI(RdY~#PS?30>wS8w|&6ElK`b-Sj4sLAe_r{|i|CX!vT zE1NEo5`>r3ziUWFd{x}0E9gn?zT`b z`eaanBK4L5W_D*j6s7L3;%ckG8v)yy@8>B)hg^lNIAGV8AI84#-f2En;i8fTe;0>C zh%C@DHG^ZAMdrU`2P-;5r|7O+PSbRZ{iC+KDW~`Fvw;QOO#j6VGh)qHwF^;|?lUml z5W%i}06aDWEx3y5Ou!C#&f)~dT z=J=`%6_offAkm;eum22rgQB3FLk(3?ed<7;cAgV0<}=1>SrEVq0c7$jAT~=uTxeQu zd8u!2bQ}(zGl`uRI{cM6&1O#046FLNj&!Egxq9;ROa1)jo}sBIZdqU#r@$1M#GAf{ zbwQ29#E(iy^S0{fX56#JhFsK(5P|Fh+EK|oqkmJ&IX1$))H2(^SenUmM5O>6>MeAk z?a4BXD0o}9j|{2pUl%bJ$*k-< zYipvCV@X$@FV-nrc5Ir3(``W98pcvE3m$B66C+S#dghrt^rpH_A?IZcjziwQ&&><* zP#VqEpV;>E8_Yn-1wT63kAX*SfgtJ=ucgJgx&B-S;RrYQh_yhPA$Q%CbI71K8%xiD zn)^U?w*J0aJkI_q8R(nV_2+%6%3hoo{@aHZu*K)&>dxMC^?aAW32Z-|bBC@BWxy6n z@ou|+m_*0!&F6-SyK}Gv9k%E_tD!b`*W&XGtxT072}%J`K=l!3I*8(2$MFBI#Ur@0 z5JLz8?Ps78fpV7dVHfMki%6UxOp(;WE1m?+3!R+nbY?9VAU!xjk}x9zsxE3E50UEt zAgu_KK)X~3q&m2?Xe+BCDz|ZB@>Q&ulzye4BZx4CBa4Ts6(3&yFnxM-xvHF;n(RCpXNx}@)q4-^$&j{r)^kI4izdy2R%AH| zo=k8$#ei-(#N`KBa1WRn!OEuf=*j1;)oTl6Eytm=2)k@)cr>|+kG&H+(9Q(kzZ9-q z_bhZI6)r6_9DUDjjfx_>kK%<%XBVxbX!;8HPsBdlcoTMBvfPyxsP=%vrQ`+WoWm7! zJUCYtqjiP_(mk{HP^?C>SG8)CEa2A>?ZFd|oBbyl%FD)fVo=-RIKR=IjTDrU8o87MyU+F?{2(HF?D zLk*}DQu%ADzim^>|5FDiEFBs|jF`RKb$vcfYr8hUsbgSgy#ShG9Q-@#{Q1$dgAPT@ z1(BP2Aa;AYFY_fA`aQe!ksTDBxQSLD;rkd45>c`|aQc8PH36z17$j z&hS9AMP`SMf^A|GI{4nMxuvOY=*;mOzrnVSD@fIJ#8zfNq^=LmA^BJucnyBm$$aR^ zTE}E%65t>oVe;P!*GV)CAxwUUUE6NFL@@I8=i%%vIaYH(NuLEsdGx12gn-mUFur8r zM|Lv{LAR}D6jNlC`cg#WFcd~#vH5wk2!j$Kk$(Mt3iGe9s8!S-ZDe|$NPG6%7il%v z`Bv-{jqkV3kU8*mt?NR^CycU)`zwsIvQvJkqL-sa8b8=1WJadCE$>7$0AR^2gjl^H z)^-2eF7I#)PRl@ZcrKZBG+kSw+_P86tvmPa`n8R;4JD)kw-NK7#HHzIE1hHk7(OGm z&kX)jM+}kbNm%A`081AYYW#ON9k!nw&KfX%K*VH6oavzlSytEHxasK=GcSW~P-l~8 zWwBL+Zuq9leU1l4iWV&OFLdMpaG15!ax-PQh`Zdk7qAIH23$Wri_v4Nc(x7HEGUz} zkqSWtR^T0LYo8^j{(`uJ8{jxI^X{QDx%DQ>knD_|>ZYnSJGjez{T#LOLtL#D;u-i1 z(6Lm+`2&{6TtTt;HpHN%hdku4GG*fzTBqex$EQnmDzP{%Gq~lEQ3M3|jMN#mIb#nc zymg*bc_@c*6!&_!1C(uq$P+o?bU;0#foie&FIx9r&HC@bO*xDKlKF1lpJ0r#@I{NH zuD(~)_O>Yr)+qJOwIv5=LI{IOtu*c6B6`~lY3h+yR*wP?7|**`^1_c9gs6TnfBTXS zGl!?FgxRb)H+&SLXTi_XtGT;^aSQuuy&X)(AcrMN%J+d0FlA*RS&$y;$(mfRB`H%n zP-2ffq4s{ybsH5WJqyT9Zd?nL0phggN`JdMLlJuH{UZ-k;0PssGI393Cs?&X2a>%8 zeOx^L4bK1KBoR&iP;aB@>aR80wqQ;3>Lx?}~fV?(cX3P~Z{`9t>)(IF~7NMeaGfzyZ{3v$mBFT(P#ekJ;{>K;QVLl>c!#67&tn4^k`?E!Q{Af*o56IQE_S{Ay>_*N%e5+7@KiXk320 z{f#GdQAGU9B$$q*M5G;)g~ zEALQ=m1o$sU4yWYirJvVZ>%fO1_!`Hapm7a0E;jJx`+}4i77)2ZS@&hCHQ_wf7Wy< z-)eyAAy{SqdG&eTnfK>rp@%>mt0^>G35WNru_DrD;1frI2j#G$y3rO8Fd#{}jtkk; zTKMuH<-)IB$Bt@>g?KV!!g_b}U*0f*aRM}jj*heL>JjU~uljKh+9qzDi|7%u8 zvBk_?N`nBJ^TCUuPrMxpG>Y4!vOyb&uks)taRz{)jydWC{GmIEhn&aw08|9i7O_^) z8d>xj$?+LwKrWLjjB8EX-@pWMB?lo8Wyql3@4I9A(La_s4r&j*rihI+kRs@YuAKZ0 zV^zZV^Gn9hBj@U-24pW^7{+Hr6OC!i_6}_YFPrU zBXy=~O7`cm{`Ur0F-uApFJQ0GuM@3wD(1eM-KKg?2i{!D$T$f~?_(#b9w=Oz#x;EJ z(ezN-`0!o8b~_Ehm(3qCzZXsBB&flJ{?(npz>|WK7$FgIXtZ{yz);#;<1gU8MR zi>NI;`M9?qkSZHsHij*=OBFGf$_HRqo_4=_(sjadIG7hCCu?h1Q%9!WS6|8;P zc|h%_h76%-XW573?XG^OGS6CYc=4oHDm`(($rUJKX>DqJk5^T^*`GIj?%Yi)$nyTd zdm4*e=ka3bUxsa}J_2{_=f_gVl{GA}H%$qfVTJnCg=Xx8!SZ<8x`+)8oy`^3+g1fa zh(qP;l61CbgSy~Z96}h|?Xe5-&OA9%Td}Xzq53BhRQ!n-^cN}MY8$mNYM(Lzq-jL( z)CYgjy1!u)uEN5FRfrSD`$;<^a=^0)Q+XVX;hzGxVE0PZ}Nx0VIc9;0~pFU0f+KTi|+i*ii!H6DMR zW-nt0E|6wd`p~oHItA$JsN@}M`*6;Vcfrz25xfiozdH(nS8%lBtrhT@T>#o$o=O7H zTyFrrFqI8+;t3=MnU^x_w*t=KxsMa`_XQdc?ug|t0#Z^UXc==?oiBXeIidDW0hWgM z`t*}F@FD0vO5ghQ%tY+H1GbM&+Efi`{HS7fJrQ#U&c~0iI;XP1j5{yjE=W)mpPc`e z0Cv5-VYFwy#qzTa@x_i=I`*E)y&EYA)?~%mY^CT=gOW$RVGNtCi9}h}8(d4%R4U4@%oTV1X*XfA*T%Z+QlR z>pmdYgN3O!?lNP+m%!fe+3n%(tN}vuALOonRf>2yI2>*Wfi0~G5?Ugt%yY+fyQZrR zgh^8_YWU3#>AnaN@2Lom0LbVJP#XhZcO8uCnhMd(XsJK{Z4Wb>fRsG?ML`$uSI|k4 zBXTE2*wK;f1jV**?*;GJUki7syF~n?F%20%onuq3xAd*B}$I`*%B(!@qg9WEP-cF(x2N;O<`*V5PnYo1I_p z@|YgSp`p_-r{n`J+Rep+@sdD;yYQWlp%V%?taydrMdy$2nqV0E(_dF{7FuABst}m@ zeu!|M!Fz!l{HbqW#phwUds~vVS@*aa6Cdsi^ky<>cE})?9fzwn<#H11Q`)-+uATNJ zKu?`Wf2h}B5Vmsya)Ce%qEe5(HZ^jsP4L2jGwFYf&zymIEs`X)FJq&_{`78OfEZ6E z32Ii?(M_i`D;$5KH6q%&BnT=%9mMKOh%b0z?h)M6JbzY1#symF2kY3=9d1z3rSSdZ z0&ti%txoaF)k+9Qy9P!j@m@gD*y8SV>2}-B$ zPuu2&6}EVb3h>b|G90ZH=_MhL|p@g@5d?WbJ zdmFRnWQfU2Ei`R=90lOdiIs(qNR1@y!R}NSKn>RHq;|skmI!smv8E8;K4w!mk?0UR za&{3Sig?cS*4@ayDfHriZ^jODiL=I`U;!>3yXR{vrs#ETPxE7jgzG&?c;E4<-=-jL z?atqQ;<=K}f~Wmd(#6d{TO76NFyd(gqCED!Rr{`S-d+iRu71}dCkm>$X7E1sWCki5BCTx_q^dy--oL)RmxyhZ1)wtI4fM3P)YRH$@=X z6qWAyOKdx6I6CV>&%w|!HC%O7^Fi3lYs^z4MziaUxE?v4y5c(ae16^ROV?oqv|TH? zwS8Y3iZEhEB-*G$M#bBnNs>Kpf=_wg^j37@8u-OeE`9oQqW@-jft7yhOK&auAaBLy z-ux=YJ$o0WpU1evu8CY3VISb5?mc67?51_wx#YAd0nHN2;hu?LMx(woFX8oTRq`@b zG(*m6P^1=J<}fl1ddHOiRaoAKFW_Qz;Dl;tUF?s2XOpfkbk~ix9ISNVrQTomHCp*D zo>xfi*VrzNSF(`SbM({xHfHFMMI=}%a3LQtWG+@fs=M=OMa5#g=`h}(o_V*eERrnq zh}NY-!oS-N3OoAa!fj_~IotU^_dOE{qN#j`UgK2vEBnAIx=+T4X70qc2!tn*>|p6qh#M*e6~R|=zh|MQ z)g7LWIce#Uzsjc>n=aP2QDm#MmTqmeWAK#`q{wWsv#h=6akFU2(92{{s(N74q2mEV znRvVe&QO(o31-l0rB*=ZaO=p^=u8dRU$zqgA~WRNUq~F8Lf*+mif7JPh-mk!H`~B` zuz(u68se(Fla;`lvfL!p^p+o7`jIP|&LDnl_z~^bQ(|uSME0Y61$*;jJ4rVQ9Y*xo zV#7An6Z-%JR`JD(afv$6KRhHu=;ou8*35D>jngS(fQH8LGKVQ=&!;P+nttRV17bMu zwJ8q8mH8W??J){f9gU20@o6J>+Kd91b0^CTvUuoDjWD$zEQ5jHcuS0JX)Vp**G>QKnEfZff?_LkYO*VBSZF3>dPK=_%bC?W-hCynZgGf0G|Ec3;vGfE>66;0 zmSfVYHqB=NRj=ixIrTH+T8ssGZyb!|+#Z^4UjAO$;4|ad6Fr~bR8LS=%8wz}|THjXS9c*Fd5nSI5xA6lmd zN^)f6#=Qr7gwWnQdM}qiC!&1u38)cDCcFK?y}N7G`##*yD-bzC{JuD5kag%IRRpm1 zx})mrcRD@|*M=_q^luv_1IUW86CpFzj<}I6m2M>KABGCGo62S8T8Z6Ck`=hWIfwtu zbTIU<8A;{LUVDvLndCa9bs00)$&D1~oI-M7U@?=W%3;*>TGa(c|5LnpxZpN7!a)|D zL?%yjA?-mZRzD#vX#PorPF>Labyga%5hv()0>}`lj#fk4veaMrdB6Sgq_Mk)!NHQ- z`;N6E4)^}P8B-d@Gt-RAx!%K%WFQCy;~UMm%J}ShLYVP*Z(80h17rAcP7P3U1_RS? zH`qfV@?GZX=_f{Ij&*>=1qK$(afr5D;9^L0JR7Qi;h7qJau?p+!NE6TvS485fF+2rpGD3`bwc;x1H zJyLi3YB@4a2y6-e@5X(F$a>Q?H)8o!F{K z#L22tAxkI*uJV9HXgm_4O0Fw=bn*CqfB4!y`4l282BEg4(ati#1@$bEPvN^`@LB$M zi0#$X9ItAf`tO)?L%}sr;;ycCIM9MV7gnCZO~XqT^9FY6$!yrs( zcjg0in(*5^ojm*IfN4igzSc8qXtgpmX>g+&$eskdNf>4%OLt`(RNh|cRLLtJ$QTI? znvs40p;M>c%855YG(n!IE0y&~}H$wY5SsV^!zQPn}Tp zOABEadKK*2Ird#NPpuHL=~Z~s5FAsjvFBCEh|G*KyYC1w`UPT~rKR*>=%n&|GNKN`H&DcmiGVd6vC7O7Xxx2)iD z;_M<2gFUy1*ocLn)1DCU^R=iIsrtKv668-{W_P#D`YR|{+k=dH3q>K`#rZeqbDGtn zdMhtfmeZ9VD&5;+mV{K5;y|uWljT%8&0*aXG1x0L^1MqZxvQ9=(_SGr=RC($ZO&!> zOsM`(UhkGU0C^MrZYCO4bU?BGJ;-M?<0)FU_s84^e&9JNx1Kp3%!V4``S{8OZlKM}>DONItwHM7l^LdBR%#)39M1Pw0;smx04t zpWefE?>0WSWR|a9F%*WVN3|BU%sysBDL72tcqL!O1btt1T?RdjB1IN($ZnJEjAbH2 z=Vi^A2xN zQoORFJY?(?X#SP$2Pr0e893YEnG;@ zYfb+1zE&t}1l~f}^3NIGoh5@Bgw4Sa-fS zW3tg;0;pdOvZqQr;U= zBGj_Ry&UH@kcn_iv@zaC4%H}7O5D63PqY8J*=Hk42X+_zhe}W64EB|tGn8FG(&E;= zigCz?$U-*EKnecIS>gaK)w0<8fyIJI8l4psj~36#f!TJYy3pjENBEUbQhvR<3vDih z)`eQIpOwQ&-hQ!EDenX0+@`^0?VDsw;{TX=PAiSJeV%pK!B;yc;5zgo3&+ZPmdxbO zWhkD#b+jqOedAJ{HOvWE8F}|ScdP!--Rm_rfm_kH16L_u2%igSWciB+ouck=BNf6N zt7(ByTV`kf{wR+-@X5rGPqyGk9coh?ChMQMZ+@suzt!ucG~4;C zQLRHLSwK^8JC2GXg!V#IVW0a>`E`J zJ4Wgj80xTHYqnDXKefHR8S6S3Lsy8v-*-A<1mp%57VI-_(fKjj6ECq(&Qrs9H=a1@ zmc~jcngSxg`ESI=@Qd;*C!^mZ)`K9`l;4yB;y9o9=R>Ruj1YAsP%!bSQ&3yfeOZc} z%+f{pMAh`~`e@KA1WbuX%f;*2HG3#=A*z`weRw7C~!k0+-1=N=heVLlq{th+7DAX7j*%-y` z5KO}5K*OQfMMwpHt4|{E0BPiR&!={d%BjU zQ+u>DjsU@uFm70QKoFSoL`^pLGP(?f<9vwC*7^C-T^3>lI*iXSYAk|bc9`0&`!wCv z$>^(F3}!@dy7R_=h4n7*S>2@%mH5^GUD}#_>@{}17Va=Scu*o`ma_XrUt|&%jkSA7 z1EgEZlcD-~ICsVko&RD^}lPDvMk zYpc-U^%FdI#Qa7Z5K~@+cYwQkSZ6pN70T?{fxT_TEbn;oJAw1Ms6QBXBNJ}0M@e^> z{U^mD*5JxpkxakckQm`lmDHs|g3;0~m?;70uR#gvF!d;JWJC_j!dMYdW3>Z)2ooRz ziF|yxqEZK+0Ibv?Pv|}OOdq;7gdJuOwPrFGzOvW)qagy7P=A$Ej<~W|I$!lr+Z!yD z8#k7Zd5<*;f~b4p=Z{<~>~#^PP*v+Y39eMlcMIsPl~}Sh&dHvBQ%r&r_!h+WHnUWo z_&cO!CqXkN4zxlZoiKI2Gp#qfcB1Liy5bLIVxF2AlEX0-C(yf&s^5Qt+&v{oWaQ(A zsSOBuMTN9r1Y<(FeRk4iD<({=lz7j`eIZOt})F zWkDS2W?(>%G8qql=OA;(v-dg_S2W{ZYIlE;yl9TG1bqG*k z_GUN*SmyBUmkT2go2x=9Jw`H!o8_((t5hUGD#Cmtm82ET={Mzm`RU2tFf{>Vu@sq# zAE1CTUOp?Rh!K(^&$?%wD79zh(Hxj)@xmvvnO;>891Z(!X)$&6(SIk81#u@i@KZ+& zR1={gMP#7}Xt#>3Z(sm^j{)m9?0KanCv2Eup|=Ck-63dxxj!0qrlCj&7QlOOciaOW zW4ty(22$H(9m7lb6*0H|o8+gVAda-*bCkM7bjGc3)ZCK)nkko3Spwj61msp;shs@? zS6SEB9M9_&`H=zAE4cNQTeq-s=9TwlJ^dXc6}%CfZC!8*hKa-k1$WeD`xmTaqGBEc ztJ+n!Q=!d~4H4_Y^eXBvRaXq*pwWOYA4%_`z*mp$lL!Q7Dv0G8gvs^%Kd;p^E0f|i zth{Da7C&oAXlE-tdx~}v{zXR|Fe{Nc91v3SQ1g)>TTiSHnim7;di1(NVXNnW^j;(2p|kg$ zX$xUp;6zUs?YCn#FBm;ibsCbZNyRM4L>ZxK00L_G>Fl+wv>Y*(bI7qo$Bub?8vQ#W zMZ@LVXI=Q6R8KGL8*Q@8``ybd*VQGYu6^ML861RxleOb7tUCG>)FJ@d0UuCrhj{$6 zUXV?(NthA=-lw&BLl5u-tWc6Qy9d5Js&P{2t9!G zTWF;a5dM7AWP&0dH`&cluJSoo1wCFqlB7z4S=%k(S*(1k83XKV?qup+^!DaQsM)|n zFo0Zgivk08-DoRs$c1RTswkYT-BE&=C*z-EokCvp(|gPg#;3kzg%fmB6rmiI3&<6i z<*9g02}>zIKvoh~5&ceVa=wYmuaT~+fVtf7ss$F4NwkgE3VD^z>Tv&1p)s3EQyr1K zWZR{m0L-&DH2n?;G4sI@s`&=0AM?zQPJe19sbt)tI|P1{0Qv86|KF`-zQxT3D%vz&WZm2OenB{{8|HxM(yT)qi^HRnA|?}!^DxB$j$e*t9o=%wmOST? zHytBCjer*J_5q(Q=HFJ0oN>-;q;_{B%m)0d?k@gCjw!n_K&Tf2AT9wG=_Ly+Hk)o0 zW_9bbMn?0TtiefS-9M;zW!jrJSJcDQA;yR7nV;6w6hM7)kOiEsNpM>L2@*2;#38&J zu`Ncp1b#uvTlURZe&hv1ZZ)X=@>J2QOVs?_FT6~U=YO>ms5yn!qMF95!4^7wXY;h{LBZAaM{WDCnsA);S{~G%7@hBuoj(+Nn`FFI2nf_DX09&54vN*BkKSj<< z&=wuyUxGm&FmOC5)FP=yiD&?j5cbCGgMr&8SUlMPv)7{wRVAth zQL7E-BT?~F=cWUx-tPli*^ZbfmvSjSC2y^S*C~;?_MThrH<$2mIUng>&_AY7;x4B?In6b8@=fVK3$Ov50 z5j^=y45EKR;69K<#dFGW<*Inaf`{#j>u+N2UZ7%2gQrrq9^%0ioR7aEnWB@%%6m*8 zQ=Yfq=J!*0C`BBSjtWrF-pr8Ne&cN_FHknhj7+mSTwiv4Y=N#)=iL4)mxxyIplzB# z0-7A(GUS6HoDvvCya;RrcU#yq+bi*SL+naCtx8ClLXU#Uio%Oh5|%8um~;uL|4vUeWXuHAXoda*2pIa^4Es1 z*`%84A$w4f1m>W*$)?1QAtdOt8b%;TcTrC2jb3-x4@vqJZh?vc9tTqzma1O6b>L^5Y@p?yB?AXFK zkO^SJZ!dPzmZ-!aYYb6EfeOG&HX0xyYVg^<>>p!5fOjkH)KGiR&HCwua}`K$ZA2bw zY~##szDV-ujt1H+Sr#jeuY9-oA)fEa(HAbOTVK+$81hzC8BY$sNq_w8<$K5!(L{Uv zsrLRH+(a7?G64JQCV;dEfegvZ{?%Euf{8}GF!A7k5VDa8Riwc)=(myq9;5kw=g=&dI8cn!BsI8J0K*zt@Fj<}Jg_$ZEUuZ8ItXZCRw{wG%@k0+c%c zz%6GNVBWa(t(3Ds!LWxtX{W5;D0ch>1D8;OEtdH8ouIzNUU9i2=iQ8G_J<50y$GPF zGyS({A?5x?rwk@bq&#dNxlu;kSiK{xGwLErO&<ul ziBQoM4gFVR%qigb++1vPYXSIemw;u5=K(1OtyB2VMd#=7Xk}kUM!|ni3o_8zu_j>< zc|N{;Y-vjr9TfvdRb`N0p{*2UERtkj5fu|R&H?K)AN&m4@G`v}e7_LmXsEu^qEC6k z!a$*y4RX|3)z32qFB&nZOK^wjZ?!F8-;RXILHD=ncED0>YwwF-KC*)A`5q|9F1a?y zq{o;Opc**YSBQpjLKIv$@mX6B3`Vw+7APUD;2)j)0)g5VV-DZ`ek`a#W5BDcwI=-^ z7oaSs>D0d(k{w?3`T03%lY7ajI!)5Kefn4~d4D$}p?#P)#UD>9I2RIQ1Q^sUu)fkXR*Qa~s(5s3QIH>30#beg zNG<>0qF}f@(+Thxaky zlyL(H1Bg|2$+u$YWOdmnw|-4^@1U(+yj&`cEZ_k#L?5oifAG^_>AB;Rka3UiLzZu) zFersmuBRby+C=rXZPH|qakcs_p4C_81BJG?jF}vpA_QR?R~>7xq>rVrh}8H2{Kt|) z5F@|pgNx!YT@B&MOu|;z0O!P-K6Hm~e`sdJSRvfJqPPJ#+oKU&iW+Sf>f&HG{LY!m z(Hw3boP8WBl)p8el?t@ih7X;dmP}-8A*56iMHEgbH@c1rSCZGesJK`$PIM4%cK8zu zU~^~P3=YP-oxiQ?vrXvD8+v;fcx{nSZq^x5L}8*pnjI1>VAV=&~iiJTkzp<;n&OGI{oKI z8QSvec8tH!oC&2>zEz6zH<*SIyU&B{bzZp7Jk!7>hfz?212V>QbdUFsAU~d^1Ua!d z4i_DuRya;?rALs+x}lcIi!kfc{dXzYaC47v?#sIp(av)M8dV@UMQ{JrpdE{-)#h*?513TY> zA}Sv|apM+Lk;IF%hZ8zzuG)$sw*YY$UHPMvP;BkKyuk@8su2I{mARq|I!O9`pM?JK z!p+|@w`FYCkMOoziFzGn1{T(5m%=~%zR%-XfibxoF*?kUvAy8QmMptnLkU4S41zcm zclujdgLx6wcmZ@-y=^?$3_`XjSfiUnxm}h>=kL6B3#2;9VBR*G;R?m*VVr+e*jOVf zh+4|rgY)5JTn$~mb|@FfL5$#HvFK&`2SV7VqdF@<066BIn;v5YaSM%PsDsb67lj{{ z(Eq|tk-;1(L(#EcIIWz_o&;d>h3WfyuQVa>6v%l`yiEFh%}n|Jc3BdPyxv)#8ZYj0 zzXBYT0EU?;HAYS9cJ(s?CnTJAnj4>c-r5_ue9Fcrw0Gf+G@y&W6cC?$Q7WbICx}Y` zNspY9qwU!vpd^0q-}z=I0nNkM4bVxb2TaBfX^96~ZYg9A-l0zs(oO){@8FJ1L(})i z4^m5D(B=T&1u1-h`Fj#504KoFY%~Xd>o4YHNPdhny8#L9Kxd18**6cnNKDNC%Nz0C z0TagHPZh`0E_C@}lTiOqS>zbt$1we-oAm*q{{xo76{kimrBiH$cII|*x@`LR8#KNZr;^jf|JK z`oa5HxNV7WPa$cnE1lyR4vA}uo_`K!RmdO2O52F7SC+z(!+5=)AF85- z`YS$xLBj;Ab%3%SB638b@Ze6sh*Oy#qIX#kzzs1NC?~stkdI8(xt0%=ZNHaz6uB`C znviEuo5zS_wmMRXV?oyp&A3G&aO{>t((r)c0d6w-~~wDw0A#! z$%0O0Az&OoJb`>L@_WBfH&Z4y5$vGXMSY1iuSGqp|JJHx-$Q5JN1(|8VBe5NwKA(t z0`g&X5fVDc6Rv-gh9&S}=V81UOF6OxHeY>s8p;g^xGMh&fPizWbjn-iUh&&U)t&ul zHD8qK$n4Ax9zk({&;5VOmIv=Hk9c}ZQO>!>S3BTy<`J&(_0@plBYxB%w>iE4NzwjK zN3H_G&I4!&t$-$t_Xk;#W9&M zy+@pXR(pa?fdF=S77f97Gb6k+uZ#{wT|%vSl^=Pt@Uf*I3S0vH@rvy&jFl#V%z^e{ z!xBBngvvU^d>vbmL?~ct8pB8UpswM+BOS-9{%-&E1mXu|IjnO6D}C?MbZ;thEr4CZ z^#Z*3_7AHyfb*ceyYTD4zCA~`sv=Q@PJ<}7<9iBb)jmIprW3w& z8C-ARch4A+mhN0FVb9Z|gQ(FpDlkVD(159l@L)yTS{o}!d#S-<#v43>;KB=#0_Db5 z`_8(+P68^`1SrY}?_8^4bs_;YE_P=8xn$s*1Cp$-YL0w|EtstpvIoFmw1>Fv+H94y zeYptCeq1k9zepASbHf1PaU-%0#H}me7L58WfGhOSxV$s#1Xb(A>LVfT3)$T?v&S2+ zF!zck<=7yaY_O={KgBZAhVMTK;zRJuN?cV4S^HLF16{$J5(jof@DJE{niI2ex(9!W z6!O+G3qUh*->&p@qq+U#zfpS>ZsZ$=Aj^BUB=f854@`_pXkM6hY zKq&4CABR=oa^DkCzr$X80s7jC@U`>e9B{rh@hG2UfmgbcZ95`?cbWe`RJ{o_)cgNG z&QL}v##SQCVv7is$i9v}DocrE>|2pUWEZl`Ad;ohq(o#Xl&unD&k~VP_N8P=+5gXX zw?5zB|D1cyJ?GwYYUVxf*Yov!KDH;kR5`OjkOg3+5V$yQ2+Ml9qsBPfEJLN`1uoJf z-g{_pkD{>eq9CaR4_lQ@P^vbFBOCJWgNN|&ucPY16E@H`O)2?)>py~j;Q+I&o_D!7 zdxfM;_4=3f?-?Ao>_p2!GX@&IjnfS}nX{ zCixc9OLId*67~P&7J?_xU@?+0sZUy|isuak(iq@&E!Cdra!=m{M81Idt`4n z8LMGXZwFSryELy+i-O99>y=6g8;dL@HS%wa&KK9>-WTD2Z2Y1txhQ6aOcKD^wC124935>>p83~DF@hi3 z)c{s?4qls6TBl{6l1XKRBXI-3lfHt&6iwn>%~V=Q-NIuK&tEPdJ0&LA^VsBVve9gB z;gE(&+#9TZ{$Tkf2ADJJK#bnHz5IQ>o05azf_w#RP_f++*TIFA*Lh@=Y2eCfe*M_S z1s>v#fNs8-8a0P|7$2 zr5skhXRkjzeOhN6kqy^wF+y6I9k-rEWW5WwDS0&LxJ_>%!1Aa2>J5r5oJJT$A z6q*yWg>2X>*SCz$rwvv5(Z8^GW|=Oy^>!B>>)_RqT?8VT&gvKb}`9CA}<4uX(PfBH+PG&N^3q@xGX6a|JCnJ*{yZeofdd^|0~l<$d}GOEjOBcnar9 z8A3qj(g(LrYV_2jiPFiXj-}042cJ1YTfZ{X;MF3L+EQKo7q+OuzyIr zUNIH37^>8N9BrPrUE&O5vgEgP`6D-vppixu!qULBr_=$)6xU-yQvZ-{cE<9L?Ggf# zAM=JRe-D3bPrx;Sg<~J{n;zv;&?* zfDL!Vcrq4!K4lj%y zJ6wz`<;lACUB3It>E?CbzD4WIh9VJR%f+Fq%DsCn-lSwpPK@77qZ-*RK^Yr=d5IxZ z2K%|9-$X?lN9yj2@DXmladNh|zz# zu)2@K(PZD) z1HypYbV%5Va*blb!#(GI2F4bkc~XMDvr&UMw?qYt6{%er^T-Ni)^}RVHWFaIX}mtV zk4{!+ZlJ=>-`N`WCjm1lqn;;@@dCpMC?Lw6Q-@o)eRf3i-Runw715WFElK1PyIMRU zUXoGKCrG-h4@tmQw(Wd)Os6cL#`S815kIL=0Rwf`eya!noovlWq=0-;zh@;69kgKG z_7WOPfgOxfikjyEvpm0o|NecnKtIhD1q)fU`Q;ZTA1&5+4sFj0nw;;(+LjU-Yiipk@qUi zP>qQ>|AZGa_|avMwOGDGfxX;lc%r{#tO1+i{3!ZZE16l>7{`tUbxSmKU>D$aM&b>i z+1l>FQ(PyumHyE9EyunMA$6H9${Rub46m-Rt_<8axbEjc(1-_#>BSf_c%Fmu?-Kfc z__ihH6=)J2UpQEp_gFf7n0gB>K<&a4kmb~Zh{hv)$l!i48}bQc*}X1Dle6r<9%59?MLD+04ZbqkdbG22?Py&Ucy9W~n>?_I_Yfl7ct8_Gu-r8$uNLLM6=T;+W^SqXhe{5XV6PJS$UAlCQ4 zBx+Tm+Rg-ou!CG;gBm&b34lI4+-Et!=gb6KI6vo2whTYm%T`?HVo?I;@Yb$s?byAx zb<$^O2E@%R#AwNEvV4r>fGuH2>u8wfo9&o1#1z9yjPXG^QjUWrW2U_W?6+MBM^DA3 zrA4(V--eq>%*^!OTuo{{GFpmFPY~?y>oz9NMzkHLmR;5X7FB&BREME_rmX-;% zzZ8@?(oVX6;!9Ka9;f3HU;UtKD2Y-t3?3u>R;|4em|{)wi?6NluJx>uw{~+c@e;Z? zm!%O-y2Zzwh$(^i$8xW27O#$ewetzDLO;8F5}bp`G=oI5FYhqw_=Cov8M){si)Ce_ zcqlDqi50@N`A3(F?NU4=)rzmUL!~9|c3ON}VJYP6 zaUQO9Kksy=ydPPDCtyCvPzmC{wmgg3|91vKUq!WqTUGfV0kv~D5+oC#IJhJDgC#V5 zo~w<0_b)$%jeS)o`Qv6dx7~#ld<46&x4#Q94e8eL62ICv|b#%6I(fq=5Q(T_CuGK&s^S7gbkWWQ#p;i!(5 zHNZ0FBuH<0{Dm~u^1KX0T4Y58@>+wfwnP-SxId(3>pDSO z2EV@Q6Rb|KiP*8y#wy<4{fHI3aka6Xn$h{QxdDrZ=_S8k+~W%cLmGmcjadul|Dh%m zjOD-E3}}DVWy*I|P6(4CPlK+hwlk5_9Q7IbfIAk_QohMZ2JLb@05~+cr%I3Cd>6<2 ztEfoy@_2LVT=YnkyH-hP!ftq@9e67!lG43uTR zzuuIJO=#OB^MwTpt#}@Ogw}PC2;!B|?>y(A(58fpFC(LECLowRdSOj&D8O!TNd z2xYwJvwmqo5Z>fkf8ie8BqnM4?|P)%Jt+}iHPTyD7$vRfESP85{j zdND!8EbZ2XS@A+TSqF=E_?0gZXQKE82{hF|0a%8OVcuVQR>%n))sZ(?t37L(k7vf*Ey;k=OMLt`=8Q4}y}1MOmTdbU7A&I#HP zxJ~sY7&7PR5WWnXDXsmKToC?3?Laj5!7K%zn=Kbj((ZoB&5w$%)GVoPLX3R=VCQ`UjdG z7D55p!2^a>N4?_6maK)&%k;XezCZ+gvbnE0!~y#mJs$ zNPVWr&!olc;AH}-`*6Lli4&z0aRgbEah9Sp<16x*O5hv?Vx?W-b5B*w)V6}PNa7H$ z!$0IfgsmFgD07WVyqLdoX#Xt+9NT3^i|zK^k4+H0T9%Wjz~w^{`+j_WwOcx|%DY1C z*IQP|K{+^`&-D4FKNpZOqL%D?6+ebCxIPXRteq3Ou9E9$rfMZA{~u+|ri+4Mi4 zLya$(WPYp=;B#GcII&Ge1ophY@<+_`X?jp@Wq+l#umwy#OkJNKJ8;vhAiPM$PO_|{ z5lob|r1`&i(7F+#5a;5y@VMAXs5yRsNmKAK8myUnC4$~8h+9pjTBg_D5{E?%@w<4z z3IL(hTY2Gj?hOwnKaV!5K0N~gV5(6m2Tk}4A8p%5pHlKQ8?Rqf56AxfKx)l@U<{5; zG6X!)ca+^F8k@EmfcFGMC}AF-Um`1O>EnnvYLL_rEH;pag}z-|e)`6f2utUAYu-u zD-5bFp_KoQIwZ1dp9i4mDpYc55Dg*Lyem7~?dCbf%~%k8S!o5;2j0h#=_2DV5E;|5 z-O54oG_-NHb2_e9MWr-r*N{&gIS(D&>nGa>2HuxCpKND&V)Ebpm#qQMz4)T7pqWJN z_Kooe47w9B!Nz|g-a#MDTmI_mo?HBus+eOJYq6SbceW)@1Znq+eQO!d3udgQm9DA0-I!gR zt?I4nsXBw+Ix4c?%n);ek&|9a6+={KET~#OBX;^pvVrEH`awa&v~a{{hE+g$);T;m zd}(PxOYt`>+9g6yH@4Hom1GNRCr?~BEKXipi()&$E`$5sX*53g8SZ!bc1Z2idSv3R z_1~W^$j&Guf}QEcs5yW{leqfcn~Ppckdu)n>C%-Ghsfr#Qss8o4>n$zC1aIk*q=8s zFeN%(k*XBze4a=9HFVR;-+7@$-;tdU1tU#aOXl%jViD9kXQTXhCzCx`X`kr2B zIB#M;QS(V=ES=9fxfSt+srLJSfR8`jG*!+OGOD4fOPkCWQ!9DQ0}D$D3cFmyV}fz_ z(4r^`jx5jIM~$Yf{=}sp)#^{kDun;~8ixd1;k7ilN%z$wLX`{?ys@ZmRnH;o(Xt`U zE8j1Fp?ka6w8|d`vdXJge&VrdGh*G4USs}Hk1I_%@Fgl6{*XU^1K}VF^sq8@cT%)z zSECz)TW*P`Hbw?a-oK%E?Vu?0RNup{5OI|5jo?Ibhh-;f+YTal9mas(i!%!AkNNWv zV^pbVl9BogckzYSOgPX2{QHoC=LHm?UWh^#;O=owrTQ^+{uv?EC39*Nno3P|f4768 zcS|$J0OQ=(*(}>pbR(=5;?StT&n+~G7ZPDOc;l?zZt~xYaDq`WjLrwkjLvuymT*Ru z@#2EDSECRJ`T5#$R07p8)rhG8P1ujpQ`fGhGA_c^a|U*j2?IWIesq`1&c9EyLsih5 zoxM?Mup&`c@6f)-&b%?I`D_sL8+Pdj(l(HIbA^~tH}|YfYYbkxK^tux%sg3h9f#MB zT3@(HbAIIK%dfETgKe@qH%V|$9On!yTHv$B`=|W(9D+d=%?J%94qBI^iTNO`nx{P; zIo<+&L=#9o?7_-C|Ls^zl^8RR)}iNO@QOsC>4mWP(Dn>PuTkREVAU&l0NT(_bNGez zhyH!IhuLTu;Q{NHD6hk`HaCy&3xp3Hj3e`)0Ov`{D|p#NPMFK>vF|)5QQ{DN*h6BW zmI3$n#x+m>HnRvD~u52MG(?UCPOCd z>F+OR3P^W7EEXS(o57*7hZ-fkSa&mrK;2_**pQDVi2QlT1-tegKJ+{$2~PoZPZ>-Y6L*JzhB-}w=mrWbFOXXcf9CU1S7s#33h}Z#cZp>E*nQxK z(at?F0Y7i~*5~8n_))B|o(ed*H^fe^`?a}u{=GwF6xtyDs3AnXO2Rdp#Oqlpz0HAd zm9wz?>kcvVf(+PKD7%z&?qXyj*;48ad|L?wE**fZ)I^n_&3xmi1q_+Iv;l6o1I#@3 zZX+KCRJPXf&_u8mJOuu@(fQ0LyxX(B z9?tt&eTH%s4(}D%v;?Qv?xpBKsTc(}YBF%TBA?eUt50DjhipbGCN$0R*~F{|HYR8L zg+hm(`gv3683t6W_uDREL@kS{R{m2D4{+@dbb7A!w=SmQRSk3DQfvlz!AiNajwQi& zFD(M3+#(KinB^w~(l{O1<>o>!u+CTw?39wkShF@>Uj?nU5M2H7@@Z>hsWy5*$wUZl zb7iAIdO|h=ptDi#VEh(7a35r6Kk};5FKNR?+3z|KOR3j4RvUp*^QqCR8tdf|hcEgH z0^q`-tH&gkSO=Y>TFUyiYwA2gU*!n_Va{!|Yq4M^>$G)NQoNEK?Jxu+U`@f`2j zAR68wbmqhXrG_)Np4yzBMnAY&3z2sZfo&4zCps5kXOH6NG?{sPy7`yupdc)o z6$>#v9XEQPAB-1}>a4D!F$qM0M6ciWP6#G^VI%>kpZfAzhQiB_g25v{L9dnq7v9Yp zJoc!POWxlq8xwqu4bnLU4EM`YKa;~w=_f!^BQF*3TN(c)rzwCi2EOE;)EV9QrB!Ut zQ8AXn5l(s*07s5Tst-CHDqvwUP!C~wyZS({+3{FO6v!p3uylp5zAHchF}}>ZRrVZa z;qNdwiUm5$s+bIiIKXPMV2!Z-VP;zLOTo?|+g>8SA9pruz{(BUk zaOmC*e_UC&DHE)!&=S2N9aMd7qVjqbajXgI{Y^q`;i&a_QzsI97C0kGI^3q5r~a?R zsxg9NPZEUpWEd^=ssmO`*+N<#wRo$;c7R<|Y@V+Dr${{#l$tGW`JbmKb`1e|Q7a3o z$2kEpX8C9vJQ;$o=VO$h7Rf-qV@biDbC)}GnLrhC0`_1?LE+&-2LrUDAGhxa39f~O zIu7H#q0zB~>5~0Q{@r9_uvug&F1E-57=iI_+3!1mB{i6&jDo&55pkdscA zks8@G4nUChNssa`kp@ylFyZYyz)!k}JKj`2_i9dg3U0~_5WP81eE(F|9(xV+zNkLE z{qp@aQ#t7baABY#_faiU8A8sFO)>wBdhP-rf-eoi;1i7sQ6Bkqb|`5Mnu&dWFH zXFR@I_VLp9BfVBhN43#PKOU)!s~-|%-1)j0A(9$^f+CK$-}Q7UW+%{FLsv%zPY%yE zj`6x8q+>aT>??5o#&NiIUsy9RbcDB&yJWv1`O=-`m+Ul7A?<adiEbvcUDs#g zudWFzD1i9`{o_Iy3v)-*^zg5*JG76EZ`%pWUixg#K99+NYLTgQ`7seLzqRG)3~!@+ z|Bfr4W9Z^{;D#>gDH1gk|L;BsMSooT0%UCLgL4O!U}sOS9OJj$jt9VE`f`Gw63r1v zpw?JUD5?dqQI4MM%w@|ZkcJ~d&xg+{!24ndG3*-|k)zn~z4lrlU$(7&v$FMGgH;zm z|6LW^)V9-admWW5%_#KqGys0?Xx+ge%C~hOmstFe^xnlv-EX=sOj(!ed2*~80ib5- z8#8uTN#Of>5tKhU+G5`{RMq`WgV@yLULbrSzIRgPN|a`@%3isKxzDe9*{-x~fWzSM z+$`Ho(z@~j4et=&eK*XCAq;L`-UUumih*i!yo}81jqq3BUVLg{%BQ^AfXB-+WeFzs zkl@jkwRF#F=?!GNDLDkJA<}{BQCU~|owbGip-(D?#KFb=byAws$LA{TdO}yo@8YCI zXgqDc4(hNrsW(zF{23(wJ)26Jf3N(yb7@!60BmdRD%h2!3_KUxJ$eeuc5>NXMxkp$ z)DsZr50$48rf84))Tr61WA28wJ{(cu>&u@w>hNg^d#|0jr<5?~HNh=^Q853zQeY>r zl2XX!TVV#=hL>@>78BB($EdR7$VZqht1AodNw;|&LHayNl;SMMJfJ9=c%KI;{%FC* zm;TRbFdca63Mo}m>!InxnO&3zS5Wj(Vo_=` zo3v-m;PvQFCDGw}S--%qZW&?uRR-7=XPzr5zZGB+&@MGP`shH2tTcte;!D3856xk> z`W>|kRgkHNQj6^~sLUr4X$PawXoIt!Y!@mK5P34Sr5Tv-^rEMhCBmPt(gee=J~$QA z`o1K{Ex96<_*ur>45;T#|%#Pnv;| z>k9!#GaerstkX)IMtx#t^rg&WvMMDwtn8~7rWQ6SsnhaaR^KZAq)DqAanV`gN#vy&&xse^i8A|cbwNY{S?DSSrJ6O~s;|Nh9_ir~P zipq_xg@D8CHG?Cyy&Lv{@HYWwb3W6mtG8&r5*fI zMpJJY_OKn?*V)C<`T9nj>eeQ$Cko66c*3kh_H`UpRPD=gU+pSq_xB8FWRIlRhtuXf z@LkSETZt`9J*p0B+`T%U{=>i6 zl0wq_{&_9G`|*4gWJx~$u}{CVL}Gq|aDVpHLCcA|X}5{&iTjdBBerZr4{=-!9AK;?zIe(IV+A&aso;Foi%WsM)5k?v=H*p13r@xl|gEMsC-?bzp?l zSG*Xe-0nAQ>A2#er4YxSZEp1iFT7&qpGy-;&G_d!TJn=&(G&;$7qwd*7Z$G(m?rp1-EV@)%`5y)ZJ2H()n2#{7n9- zN9jZwOetN8Wv1pBukWa7UB*M=4EljYl1Zja_R-^uJ!d_S40Sj-5Juttb(}sIiEDRT zbCd#S|LIz3fQLAf)$Ls!DT;2A<_nKq*748XEGhFNfgyEm?W`&pzqdBljK8lHHwQq! zoCJ5fX)%>J)rm7d$JM`iC+Y$Ay~&*IkmJ?ih^Xks1qEBBkZRynQjKOpb2_P{0Q``d~3Y2+LsSIJ11|DJ$>M782dr2i&;CjW+*~fK;H7 zS4B9cBlcJy`bo&WG+7GvKm*CDB~uLv+zl7z!;jqZYBb%nz4DLFB)*J0KO9u0ahO}& z%wXZ(%_&FjUYO$UCKvflzQ>;QPPvmv@{vgZjzd>oax>`Q``b7y_Nk(T>NimBgpy`M-@c1YQ@n@(;xJ+uCF?O2@$&;rBT?T z-@v1cBHG}kB1*fb9^Du+Ds8LNExGcP=6F{tPs_bQ9}S7}t)%V4CuTby+(?Zqusi*4 z-n$S(H(CoTau_T0Tu$V!uvt8Jxn*_j+jH!P2*TSA_5^{zQCB7(HW|(@=V-OeC(NYw zj~@HPkUM87qI5kVs(~f3?J$Q-*v`FT@4=dp?ukSUV_jSKX?laF-eCIxEUX}G)trf^ zMR~PZI%aaE-XYg)ET=cBmoo093R=cOyb4jSAoI9y6QBX9X3bp17r><;Ob*^h?jd`P z9tRHV4J-4hAQoDr2k4^UI(;+C#C;bU;@2eR1>gGZmvoi|ha8(zS{Z-OyT!T91F5zv zo@B?ba@}gsf99YV%<{g@Q(UyJLKVF-k?DIU=n-sGlhL9)dA|5;gr1|R-AcDR_^xH& z*@9aq#@vzuYg(hiOBV-U_3CIR?$=GZ`oc~5gM#aNP^Ln4;u*@mZzHV3Hfuv`%b8BM zEI34@8-wsG`#eYF)E(x*PvL>uKxSIxZn271?I94P7#Jz@UbU?T$UuhE2%glZ?uxEk z2c0+G)u7#IAEVp&ect8%x$4DlYssoBWh{D~!}%P{yXiA8HKDmRI z+`lh|RHfE42IvOScR^|b#@@9~K>GbgDLO1-I@|ff_lAFhxEB(1!_GWcmyCHyUjUsA zj3j&luQEk8f-v$C@U!=9*GWAXQPp#c&^z8f%ELi8OTlTiaDw^LomO}kuH8~yGhE$) zI)2g}p>9FW<37`b_2YgEq(uX_v9nli9=W>AZ#VsTtVS_rg;y;saCM0STdKJf>gR6WDs?}LJlSkIMAJ0xqG zD%2pOGOgj2|CC1o3F7D8ke{(xQ0iqNJgau3Zf)3WsVgMZoA1QR`xS#5K)J#!RO+L? zV@p(PX0(B>h&;3I%FkYrRfUO+CCennq`JgC1o5>(pf&Vu_E8DlKAu z-}+6Qtu6gkj=lKFy{r-NGDF7F|BZC_&{Q2dbw(zI&gf&R9|F*V?L591}dP&`j%kk==90I9cv?!iz!)9&79xW?a^Ly95 z?_sf`JeSrb`GeLkbqUt>f!~}8ONXWuR0lcKo5j+jl5tcAu$FXTm|>1SG@+0Xp-6Qv z7Hka8UVd?;QUr6+QA1d{hY3r@RjK*tXA;HkNA)IYUIfD=KuRq zTrspe;p;!mG5o`K{j{l$#=S?01`JICj4Uy;efVNhG|kdc zXm{!-k3~whXH90gv{QSuMzE6;pBGWq844=_pRiavw>AB_k*gN}J9-b2<=)@bWbCvp) z6b`URKMi={z8Dwn=8M*iYMd!d$e-QAQ^}}7jyMO~GwY1c=palJLMmX8CMF|VHY5Bg z2G6OBOs<{d(sU5Y1c2jrukDiz-7AFA z7bTITCoM|1{j>q<@6ySRU)j8dA&{_y)Po$@oBK8VnAH>6o5_h|%}jFYr>@by3*AhU zu>W6IfM?@lUJ2Toc!gO%d!zq@Z0Bn+l!tb3l*;HSTBzm~t%E+8V5id2Y$4v0QSsPrjC^imq1(wTE!qqlEsD{~(hwZ5Dj-s1007T3Cxv@bTz zo);SwLvTgHDyCt!e92EafMy&14VUU2g+wF2o>OT-hZYSS*gJzZN!mDpwVJJ!DBbC8 zcF?JY#>j>f?#>kKjOBZ7*BG85Z5KJ9re^!^TgxHe+VAZyTwlo=0rdy|Rb)icHDcO0 zjwo@(u{=-KK0l^6#NhM7t-8I)4!5)Ybb=$GtvwP-~i8O_n2 zvnTzdO}!S7V6^A9kLAMn^8TGEpfnh@gY%_ao{j;HPSVIJmbW+mHR~)Q?|oe~&pgOA zOYE};{BC9H-6B>m+|rn-yEHYoKegSd*9?FC%qj0(3M$>`{Xs)^5E)11L|WJZ%pM{0c|MAF>YI;kYa#N7lQL#o*d;i zKHe%POl;yl7~u6(6Z=F+1qB07GK4FEb1IJt;6e%$H5M!QN*w*<)3?&w>dLW6s*=*oI z2qy@L5BV?mDa#aFRoKAJjvbv9-Wq(io~s3>~a2p1e8U+$6Xyfe#aX<-JpZ748PB&>MrXsg5@Y2RP4F5d$&fdG)hOSJH&#(HSuDEj zthduG6+~8z5GD5zu(N^&4P9cd6lM1b43UQs-sY>hD(mkjR91#-a*(q^pSRhyjhE%5?kTC=9elRs5x4+b3{9s9dXUM z%awQ&z^5ac)K7-G#IiziyfKEjAHE%n$5Z_jH}M<0&xx2@b##z)+4J4U&R_|Jl``d5 z{wV-L%CT_R<3!^FtS?E5)f`Fh@?y!a5@ho`xfrdpAjYP zExkZ@P0$kdL67Gl(`TG9g{DHQ8?HCMs}E=T4pN}sYJ?TS2cX}-*gJgr@c+KhP0VA{ zhcUVO@06Cn8{|7r#PjyQa93WqRL_D*;d z&y^u(OjTpJ%U#y9?dD3h6O(RaEqE^;0^`#O!V8|mPA3vujUI9Af|LmM#UJbKDj{dj zK2xQdJ#|`2uHIEFAv@j0FK-)4Oh4K&clPXM0Tk?Ey#+xg`{d>S6)kur(flE>JVf84 zX5)(Aa0nCWm==4|dqIAzpzrJtO2X$?j*5-2NA2vsBQ7MupnkIG7nj4y;g^3dOb&B~ zB&&nOB0rTkq6iotEi=H?-~sx-{CxUKV7%TCxN%*ThiDE{*ra<^r zjFoRDZMF|rHn=Y-#OXndY9|g>mrLn^#sJLbM<8$}jhgw$NFspI?S-HA!S&5o#I}qt zWdf5eb`6^3Gp#NDzqr-n&mLUC+)FtPT{jipCWN6OY=!$o{`=`vlQF^J8M2P?jggu$ zhb?0rwP`v8i^8fN9aYlk@7rge}~f0fHM z53O3gqC{rDgZ$e6?@z=W0v#Rk>UYo2FQ1FJV7JT4yM$_}0^^R`ukag9^KRcYZa`hn zBLd}qE+Hb3{QBvmJ@KnUTbquNa3jfGwJlfB)*2=t#bZ4i2|h&3gu*))2F`nGvp zh>D+h)%?u|dn=s9{Tzqi5{SBD2j*c)B0;W-@cTVyYpz$t^2v9uf3M!!yq0_B`4b8l zyCD5UJ|guAXKCyYJvC89S$p_#t)C!M69@~CF1r&JnLX=Ws-?f%BtRNnUr|P}Gb2~)Jt|li^Cs_lvPw8zqt5C9SGjDqmWWShUGX4-CZMB zDig_SA)I$&!M26tDoTG)1;h53q!tR&d3 zC;PP;?>-E&|6~{(o4CxaFwQ4=vW)#AK<1)wNWsWWTd?kJ5 zThcbaFA;mRw|Nd+CQ|}>3V-RA_RrFGaAkK!9Q`YV8rBfJ%D#|tRugphE9>6xi~uMI zRYP{@n1Wiy4|EdvnC=}pQcA+|Y{6T8)45CDeXq<%D;Kj>RQh)jjxT(Fh4Y!#tWk0A zs6vAh%zWQbH&LJ|6JZRi@V%!X^XJ?_M^ejx1|O#lgq4eQ7vMOWU6(i4lu-){&00Ce ztTi4zV2$;V`9QOp8U1=kQV+5lc0`ayer=maa!&N27er!4z3O=!_p-BxqBP<`J)Q}xUknzYs_bDJZC;13U^BfY~ zsm&jmdiIExpg7}W!;2kSBJnt<^_x<~3gVS>zH{7SCj>VtK)2(ywejWoBS*hIApl94 zN44do-1>jIL(Rxq;C2j;k|5Lv@(P3~N4O_S_DC&b$lV7L!h=iSYAb-BwJiza8XNqC zU;92HkbYQHe4zo!-nw2uwh`*0w9slcSM{v}=Cv$eU3tobBM=z*`e?wi8;LSUe?|AI z$h5{PnGr@|a~TU(U-+@?T37U*wA(JIk{D2-e;3i3wL{9}yv~hSn?bZ;c z^gHM*6z*it`y7awfsPS5K(VSn2&2tXH!pveSol_kOFfr!6GxTu4u#g>a;g;O&iI*5*_@DRN~k;Tg{Lk3Hr75GRGAbKdWrB8>}p0pun2xREQ+(JaW-`egR z(HHzBD1-eC(2-q~aerU=r3aNDy%YZQ3n=kqC|7s90o--$hX*_p$2ScJ5DyDl$)LhH z;!Xrn)usNujn<nbJew)CQA2>zX}y4tB!Z^MgLU=Zeq2MlCw_tKUJy zG3u>~u0*VcYG?I3@zbt$+VcxH{Z8tsXR*w~U(`AmG4u{Hy)IO5Z`++BrJ_dk_%z-e zRoX`(>HRA?jB&_sa6=$wAfN=jAVDla{)cKkx)NY9Q&_sk@${Yk%{w?Y30R_clT+&Z z@qJ7ul7wGp@$_E;0U7Qd^?D%2W$Q7*X++7nbQ6(Pa24ZsTuoW&GK>Cog=~1n$2&m= zptgc6P`9F{gH%y~K25}U2~8Zo*@QYqt}=b$W@)Z|k3bbq6?&@{h)~URZtw4f$UA^c zAJEP{_#i7Fu))X`dy2JoHU9!XWmDAj**#hm2KV`;pG%^Gg_huVbgBC%v+C7pagMY}vym~))=YHe z@)>u_s+Z-8^L57>GuO&)vn-_AwB34i*8{(@@GaHjb53KL<0eLAf{GDomj4ng4ompt<|G|j3aTVGYi zMy7rTw}dE!OB~gV;e~!(u0YSpE>slRb+b#_{P79w;t(XaQ@V_fAAEWrq5FZu_avPy z%o&e}BF}$>V3rCHK#oR>WF2BJfb88vY7A_*mIJ2s6A${qVzI+sm%x-MjK^qUXsT!p zH;7o(#$AED3g_oN3>0#=K|}ymA~eYYyM}qgzR=OsKB-&Ow@q8;A-bGC1lp0dV+rKb*aKZp>zlbu?znhp z4*O%$1aU$aj+I})sek4ijp?a-c6ZcmpEDH-?=^p~W8xPxhRLs)v$=UtWO7k~340&< zryEqeA1G8eyE%L3PI0b*y;y9c2acD$QM0V?rH?X7MkjufgM6g`L;y!fyZ`r~C+$Li zTn9N}#LO;yI!2w<@+8ZJ-Ih9pQ=lx_|BN9@?|KPaB3rBx{%tXYHEJKdC1C&@DCZex zi+GV&lzif&Q5Qk>&gBRz7r|@L^>x+L*)q$owjG}%0zSxcpH+I~un<>Bg5i zU4oKBamfG))KFQu0m&ZPMTaXURgyn6#Q`{FuqndV6 z4C-5o8KLzM2Udksgx*Q#f^2altAK~hZoCkdM|_ThEt&Y%!JgJ;`gQ~Qg`=7-aD8@W zW)nzeX#bIGLRjPcE|49@#n5djFTK|&u!dA4Kt{WB0m#97eR5Y;FSgY%XFbdG2pPCl z6*1_za1zJ4QX-@CAHED7OV<&t>1>iQ*y;ciue|0!tfgYZi}Px3GjrGHBY*^*&oEh7 z(yF>m62yKg^OQoA$gE|Is zrfXa{Avp%28mT)a%LUJi5OW8C3C>xz6VI^OUBVN;{K^Sv(btJp&SSQ+>GIDHAotVB zhD^t+#M6%k@)OBlY~(x?PU;eeTmm30R`^pHq}yrV`6wRwGFS-zYZg;6uPwmS$n=i> zzZ=l>ssx5@H#zG~9~GdZD#3ZbaCd9Hf%p)%67_x{gGhdQtmAdX z-Vk^iK@jwUf2VhJ2_l4MFO*iv!W&yvVy0lKRT~E_=~Vsc=(gLBt77q7UT+T`d0L;a z$9c$_wB&@L(JXk|`G~|Tuv@d|T*N>%yhIw~cQ^zG(K#aK2vbYOZRyp@j+DZ$;40Z1wLP0aWvxCAEHzO; z%CcDVfZvHvmwO91NTZRvK>z9&8Y^LOC|h6C*bF&nwRy-vGYu%aWJfVp#=dOH^X|DM zjw%9BTsxbix8Pw<)+?yUzJ&?#ZB=Lj1JJSK1|zpu0I7HgearW4pEU4rBs6Y5)Huy( z6$Oq1NvmYh-OS9t5cw`>XgDPMs;*ZVN8Y;H2&)T@H5%Oc3f-y!nzJk|k?e7nGTgv0 ze-xI^IKyow7WS2ZZ44&7_W+&RxMga8K5Z;1PCu|=ePuB{9tjvTxG)5&Bxi6wKDo#T@JbB!D1`G{%zDggnG?Imk!ttnQ3|>-s^hWI!=k74NSy@C>3utSFDpsw zVvuFDh>ljfEbGFuhnx`hbG5pHav6@yLLkI*XIH8G9%d+eGh1;9P{j(NE_!iP0pK1) z^Mg7D+r7IC<#@iLL}Y(Hm{c9WH4JKKSqm8f zn=2FP{y7jKTp_>xYl13@fctg{U=msOW<)B76`r~V8&o@UPl}`|_&gba4l&YV)bAD4 za%7H4;;MqsAnaLh;8sJ!Rkm!vn=W?lWht|hgInn?F}+>QFdR0J*gv`He&YWr&V#qi zASaNB*)5tX(Au&WeAAb#AUG-htgXY7rwIh*BiHTLztchugwy5P&1JpD4Tkd1l(ISZ znF97iy7RE@j}<6{1*w3FR}4l=yEOfmIl)66aT=;u1{%pBt;`^AYup+B5BzI?ioTi| zUMCjvVB3nwsKtluFvJ@3+T^SWqbV04F-bvVsRz$G6lV%@2<~RLWnhX~n!A-Lp?Vx$7i(Y$BUfoywf_0 zyM}Dz6BbX}RJc4zHfzTW(FayRk325d2_$pH#`34uUjXV-d#qzFFeN#nb!m}(MPe#+saO$8KL7~R+dPAd==uUO*MC{5ZPh8o+S3G|1 zr8tjcp7(!u?JlHh8i}9jPTduK_zw?|p-ShxCuZOzYv)d=DtpXy8z!|GD~;4~Qd*af z>{b(J9@EaKIw}lh^2G%OYpvRINSQ478TG+QBKHUQqxW6FXGQ*|=h>4S$}dC6Qd(Pu zUO0pDHaz@N61?R(AEMkOjO2T0XF5x`Lh1y`O$371=WcnSvuXPZ8a;*ryhCHxm(Nm) z?E^`qJTn|Kr#|t@N1yA+BzufeT?9+Ic#PM>-xqP$4T;xU3veqY5wxmrZHIMqg z28-6415C!1X$Dlb?7#a@ZJ(TQ})gh{YMPuj8-A=4is2Kma`xUeZ`PM ziEq}Uvs0WMRICp5B36WRBHIcHr1ioGi=V{LCRtq+yVEBb zE2C7OB$B&{Lf$+ATr&B&r@EGUZ2~PR0cHi9YHAgM*C_G(wKfl)n|Y^i2~Hfiyn|Ix z_mjwAwvlnWO`9Ky$$=Thg7Go0bkJr%lBMPbTIzNp+1f&A{{vpk4;kjhoz{O)9KMVY zmySQCGuzyQVyIlC*yff@lU%XQdc(NqqhD<^kKc^lKZ6&{I~A>yAo5FXS;Q-mc+UFj zmxyQ{&0yYaD)W4>FYXmU$(R(#zdfYEgrm7iere!>6X&o3p8L1%`q4{d24Fy~H_)%nwF34Xu~ zheR`pxTpbI(<^(CAj|9r9<7o0rCP06#4YVW@D{sbw7>GCk-U)mQ`-4+Fev0I)fPdd zT?~X4N_IU5g1*xeHZY8r!`Rsj3LzHyNhxo?=7VMEQDYcPG+ru0)U#to@iAB6oG!$a zsQjp9P~Yf)pvyY^wA6tJO4&~d&5948~QPdc+$IKXH-%7G&8O+$TlO!gxWv_&? zOxD4SB}+(5AxgHQMU)sNB3YBlR$0mtmE?KP=l*_wzvDTM=l}ceW3KDG&hvb~R*0l9 z0wTIF2n}=DC6!->x>pYzGhik9z+Kzr_wau6d+m^=jNtTX{DS*vghrQogLK@hcT%iF zH$J`zN;JIoK8BHrrT#xQAs74*TD%P*>^!m`$4a>g0ZdKlK&B zfd@eT_3}s5%wK5xFoUW2ZF&S;`Yp~`stWtTnQi+UF!p|njE&s!YXNDRvuy9*I!P}U z)!v6-azW>piQ<=>=3Vd`(RkD?Q-h8_rlBV{XkbbR%-wtRuk|jz1E?%EF-^QpWhOw) zE$iz9k#zw+As{uT340~)T$aS1sOMwZnx=V(htSIaU*xcqb-xaQq~+@J-1oh$t6z0h zL%!P3OO33^#!|q^}R)|rb@}U3k_C@SaTJ)8Pu9W#ZDQP@50C&Rq>h&G?fW+b_Iq3J+Ry%5}3#ITvKB{ z0%Hx!KNqlO^=}P=hF`Iyyb1OVYo@~QADyomk!BWjVABqM@+mLkUw+66_+-h$CBCn( zjRjuQOQTXX{pWijA3#-K27x{@D-bd(rV-m(2((czST(8$?VYkZJ4RmKGye0|NcDQNmfENLBKQTmNvIf0F+K zdGPM`3q~qU7*cPaj(9^F!z)@(>U0~tc=QR7l3F7S^f5U^CaWNG+cQY`adUu9lwIaB z=jBs&(CF8ra5i;Q$=yKW*zVa?bPwL+1%cQ%B;w3P@IW!ctnxmN=g%?s#h$_Fb?m^C zpI+KDU(3&x7a|c0XIU5k9%E_8AQkP01^3&>kVu{qMF`Iys8W_6Y6BZ>#{Js}nJ79Ij6?j8}#{)NsM8WIjQ3S|jp& z_qiy<@bE@COhToVvk{zZb`nTL1OQhSC3*(~p6@uxPfq2>1PygupLl|M9P*TKR zZrJcd9P~R`!VL^f7C!~Z^)whX)MEz`87Ej~ zx6Nj6K393g0n#{Cicr^|I{;@9?}D9ZK;w<4zCpiYy6|OmrXN=whxA2|G@Xd-lB{1D zuELYyL*e>rc`MIlmFEYVlk}sVW#qtV4V+oR1`9UGXF*&d|>1TkAw074m>}$ zv9sDcE6-+jdyv|IcFfQ?BR7#Q z5z**73kOw`SgKartt=|Zx8Ow_rNI-g`QhXqp18f}HZNaXGDH*b3Y!{m*_k=1gc+j4}ZMFHg2tm=qA3~Lp6BDqjQLF#dRm?+?>a1_@fbz4Gcynq=wi>(wU)NWLhLda`Jo|t$R8Jvew%- z7q?>nuNELuGR-Ldmq#Jw#1xH`t4cVI9L7Fk#UG1`#S)o!jz19o91b>5<6AkA+cSqj zIa-{rl{rB!lPDryCSKyDgaLG4@V(jO-uaO0A1}4*w7>MV70?*g$-bY*yP#*;SMzpw ztLvAEdf_b3q7dx`?cQovF}1tw&Sg=O6yCBFOfd!XQQxF^862_Pg9!B?i|vtnIm5(H z1%58xb++wgt=E0af9r%n)U)`XdZ#gB;fl{kPQhlivvEozQ66=vhHQ{7@fy49zB^m5 zH`tgZ`s=;<|S}g z{L_CfQ-9_FpBX=&I8XK(PCW3*F%o|5t) z_YD6xbfM_ZU9L^V!5?vLO_17^6+qfNcunEO-?r^0Dhws3Pw$Q52Axd+VmZHnbgddV zWsuV7-WIng?3zjKki+9QwrAd)S9#y5DnXvF9cT&Pah~8;L;hMuGN`-!0O*>E%PFh( zZO`TXuIt2-y4PdDZe(6}U}OS}l|MYYe&vzdxl?${Q-4A%joIHK)zV=M4nKp%k8)?DE30 zay*Dc4B}8*)M5PxA+bY@m?jKzU<)S&3{wUsu|QJB^RjH&bT5%dHCyd^se-f8k= zQwAi4_-&q}xZYPaUH|-Jd9Px~D}IO{IPQQ`nH1CvtEgPxuTUC__dYt2!&W6OCzXbyHE+OaP=>fVm*t~?9?iDB61_HJf`SXu#%$~~*Z z09Kj9f}bn&`H^(nLvWA#%0Il8EHSG2oGwN=Kz>Z!XL1Cc8kG?*{JC#%vaK@Jw%9y- z?Chi0q=;1w_>zs$GS~^K&1~+Qyzwdp{siLMGhUtWDa=5$2bz1 zfVk&#-3Rv8i)1hwz5Tb3cgK0SZ8+cx@c5~m*Es3p^yv3q>@Gr}N{0D#3Xjg*yt2kvuR7}@t{KK8TZLYZp|-P=%6CNWWm8%-tKLVc zJ*4%Zn#gn?Ox`GYa*h*+tLGX~TD%;~NUVP*;Wi=1DWt?0AKTj&_So?wrDZD9?3vh? zUrRV*t!2@-s-0ie4UfgUYphu^KJy0rH{Lf~1}yy^5-#?nH==9@5Cjvsxsx@8yhs|J z;DEob6G^!3xK5{A6dW-9Pg&5!9{Ynxw0V-s2jr14!G7GemZq7cA)z;*yL^hAq>qm1 zgHwQ_jIUD^#^dw#HO`5E+=XEp;V!iskr}H=CyUOof;RDtCwFO661>4c?#)&lSk%cu6J`oh+8Rz%hAK0<2On#V40DHknlqh7U(Bf{G?18}*2#}lqwsF<=07FN*JT(+ z=_`+J_Q-Vlb~%%EIfSMJrxfxhm|3{2izBCV^Di;yAAw)E+Xq|?s_V!kvp9RCVC)5o zbqpoU#W=Epd)p1;!qD%HQ{q46#Utly8%of~S9&v##S^Y^e)Z4&h@N^vU%Hi$k)_PF zCiW~!W8$Q`&Ts*(t(tdE^h>cIc)C|z?9r+hoh~*?u6eJa*M#fJpVt~D5@hX{-^CQF zNf+{e4&4)}a$AI)FFiW^3NEm|Yxe)cebLF=da2oLdNakXlVp_-`p3S2+AINe;TFFZ z;(p*!ePc2012$DxGpPOp2hK(NzWVQ_A!79|;PKqvy^1XN&yP>~VP%O2*hvZ77`yAv z5EHRmGe)piXLj?eVk_;Zvz@pb)B(%o|JL^rbiv;8rNRXKgnN$H|;KVK{N#J@q5gZeK2>GnCj87GF2 z&)#SKrXoOTt^kS`CZYE&;io~$J2xf8{kO{#r}v@zcSy6+WnTShrUeim;9i+tJ?Q+- zsbTG9_gbH|;*R6I=;h=mnSXM~-})zeO`L zFu?V_UfHvuy_vcFBAod7&CXv3+!wKkDikU{s_AG?8|Z=VW@XZD{Eb_6I*e`om%<_Z zf^#j;`p)Ic^h=u+a#A*TTq?Xfzh9{948FhexA;svWlFdFf7;^XD54ZPbJpEX%i8I) zkb{CQ66Hv8z=un0{W3&6kR+2g|15ny8TntHOzYm*A0%egU3BxR4G+Wl9bc@S;kM6o zuI+_hZjEp&4OmbuoUtqqDEV1i7l`WWDaf$w)SRXFv8?4;OL0-6`3l4&>)G9@l3-ip z+_Uw*Ikfy*T)o2->}*s+!B@;rFFB6(c+{Q8fWU0xEOM1aTwcC2sV%rum7x&c6?D#U z?KA%Qjhc|^#Shy-Nu~haI@LJ_EHbz{*@)~F!mp9)Zj9_!RW-X9ys6>WV(eGb?Jv%K z`eq>>KU>SsylyiT4ALX7dGdCL3hTCm*LXNd+#S`6;)Q!<9)K&_5S_WbONTx2Vb&RP zjih^W$zESBiM?hhy?c=dI(d-s@3r#3Lp87RdI^Ml7N|Gxbw)3P(!wn3eGl>h9F0?C zA+2_78yESimsDqgv$_ttm3E7^=bv*ENbTFI|L;qBfNd>~4O5K_B77pzPY_bgnd$IoWB1GQRlh6g^YYmWR8j9>z92iuK+eEiM~5{rly~o>+52 zj-694Mjj%VAUovn2XJ-5&e#{o-l(=a#Qc_hNIMnv5U=iTH`Df~h^Ml=@J=Ta|I9*vY-Fgl)|qh7Sm zfz)0zkt=)6y3@$nnw=ne$L#2|Jt>gc{nGKcC@sRsCFLWZciM>!9YLGa%vSDehlJ+E zOhx9$c%{sh`zD=Wf9n1hpjOc3wJ=g&{xyDsEj_GUe=S%%_8wO*rJ+gL%FHPdnAEGd zR5J@RUw@lNeJ=O#NZalWbHJnKaYK}QmH;M0_5qaj}X(PO{jaPvxfJ~uJmJdt^jDgY*=BIVErmU-Rkr6#V_=%YLA`nzkKn* z-(A76zA`&P1A@dDJN9_Z3LX)dRXEgEX!%}mk7Gwt)CaIGo|*Dit9OT&$szjLvgC?Xc>ZqNzl>d~7LbdG!=68R3$no|rXx`AEles(t;Ho*8$tRT(t ze(??7A|SOng}ll7%Nx40g`xc|>4R>h_&yx=m~;t0;}G8IJ4`|>lFj^_M9BCcY{~Uf zc!C5OOA%`qkJQcoOx8j3v5d(1)r7SZcwzv5^XrHBZ3*uCn413@g;r2G;Z77P6 zid4$>Et%#Cnkm_bJfsO*M-(+~0wH>Um8iuN`#@Cvi4U*EA<1T3G*^Lv>y zsQWjVwV4)ya|&u+?1>dMRIm&0sJBGbtQCWbU_`#2;Q2s~GFUfA;o`0#A1#~4)dKnF_^u5YLXv>mO*$Q(KxNC<(dw+%DS>SmCl450WX_by_L8{+N;LhU56y@Q9(Cjoj z!uQV~SL-AtIJ+)FbJx28849iaQ)*}tQd=}v<9)E^f!?~=?UApC%_T=;f5<|hLvVs^ zS!S>`Z|1{YS4$|$dY5Pw5%`rL2x256L_0t@V{UTyvw6*lNB8N2p53dRqL`7cD35;- zAE`{y%A{T$XjIxaaEnqXxiJf9^5My6!B#VpJ^vtFF8_Pwog*->HjHMq^-R3(jJQI< zo9*(Bf{rUP5PN464$5@QNTSiL^t)brV^L+7u#vkWaR|x2R|p>rXTWK~0?x>YQjP^EH2q{C`1P+4x7JpzQ=~e(C$2%x|%FrzZ>*K9!~_s`l>cPL0U~)qX+k zn?Q%iFHk4IRq0e|BPk*ADw=EZBvTLfa-_TnJ&w9b&Cw~EZH)j5A>oV!kwXBEJxo4?v?R_BA_4NLx zUcHAgdqZc$_`c|7zS9hTDw#!Has>=%rufX9xOcdYbDg}{JzHcI!Wd~P&a0D_@rft?bHax$cpW3&arLGm;E={*~Qh?niur= z?X9;JbHqo41D|ORIxb)_n&%h&ebLSmlUegNjGb+XwR&!P=Q5pN<}rW8zQ@?U-Eu8o zEzZ5H1-IurhLO;!p5W@3s=)3hfdxgfkm-8;BfNr;Y`?oYPtoWa zuKwfdNrq%vgj);}|8|ycBBs)x^8WmAXZ@%lUE%b1>9?r<3_Vm&{f@qu(O*GcbMP{5 zB??H{1m@|jn^#pLe@W)LW?nt@<$cDH#A>T+H;emp(!z1u5;g?Z>5u@JcNvRp)~!%_ z*^DSdMD9Hm&}^c1>8@5a%yv7(gS>0vs!xB&A2(4wE-lhN`S-W2Ln~A^3fG{6X+(x(y7|+E?^`;qh-7w1u0wIPNc%q&fF} zvG;iH*;JF0G4Ezhn}JR0ZtCmR*fY<4%%as)^$lK|u71-zZlctaRcK0g4TCb?~2{+u;J_bZ|!wOq2`U*&O59dAUWS8DvI&Q%*q6h|gB_j*UmeQYbOy z_hp1!$zN{25MxuyqLpwo8=b?^Uy;Y@k|qhE70VU1CYrw^F`m51&SYCGZj*Z?IQ>*~ z=BC@#zg5v538n_O`h64C9j9(Z?9}%a$Mrjx zG>pi*A{HFs4gO_;w#k2ZrzAXQ^7*#!waXfKoZ8ypqnkWvUq$#f_>)c->wWTL(c=r? z^izfyRrK-|0m8#``+ftt3n3`FVPVE8F}!SYFH#C;L8&?!5oB|PLcW1{PphBA3VqcV z%dG6%PV$`dkGQ12DW#{QS4R%=u$`*|!gl87HUqW@gKzOzrQM{Pmh*2MCU)cTKaW(N zVDTIxK8B6M5+B3S{kZmjdJ1hoGKeIf_I+qQYNZ}68xWskSFDZP(G zQq3rk@`W5|w1PVok`f~T@}uRYsuHxZvf7lyx>Vzo-bW_S#0o+joes`WI=uq(KUFMP z&gkG%aY(YejR&CtE=|NlnM=o>g&xC}xU=M`cEQes%l#Xzm6ncAg>-p5 zqi6#lA8Mge-D~iUS61#8^uN;)^y6))CB~h@n#aJ5$I}JhBzVgCBUz>Z4Lm**|dB>VH4Vw#=&72l>k&Ey~CK{L=1vP5hJxA~kiXc;d3l85fv4)k}WF!+wYyA9Srw>7i zWY^jq5Mtsmrd_&l7I&Q~)z-UeFTQhm za8^Oi@oqNEjZ)-Y@C75*vcK@5m!U-|$NPG;I!vBuVZWifIbcY72{Od(b&zYA-K5P9 z#4dhnX|l8IR$g1U&(Z92u~CeMG?#DKm}U0=6lDQpf0#rCwt|a8u{};aN!wzXB)9+= zf#r+5^$(eFqg<9<(FA@I&d0gd!zedHz3CG~sft=&%*K7ph#4a>!TFU}y#NVmbDv-E zfEH&GdH>u^BpwUWE2&SV9cN5g_rLx>#~+AYeH<}Cx45R5a?EPU=jxy70pG-=$7`d0 zlW!}_1mOR;r}>=VHa621;Nk2^Ouna@kYjRwei+NV3DdT|Fw~Q&XNsu%(|{UzOUw9s zc-nRG@rq^EJAidQ+#7qx`y`|FhM{h<0~0vMXaZiG5BZ_d5f$1@_smuT3nkzORf-rD{97@6}ngem@KP%lFu!JscSK z=`V+PRU4Huf{095@`R4`{c;1`9mx3@Wv+LH&KZS~o%_!VE-&35JG;A4Mn|`c2Qw&y z3+czxm#3o%$4)gkK3+ z6v_7Aekaf4BM+LfEJzH~xjO#haeyjD>ERa~tSHOwjpgs~%bN`E?%%=s+@8qmVffG? zgVoMbE5YC@GrqJ>$bswkNwRIc%2stJn1$Y>GNSH+DBZo_ji-$u+tf#_#MZ{iViEy- zc``QmD{Ot0K-lSdAqkcS|5h@1D#kM=I8i@ECsEWdWG7V^daXJ!|;rR=ex08WGs?+v_Wg`tQTuTKF{n zV)>+2wEuxl^4j;pa4~EutAxUkU%~D1aA9vV@SZkD1{qBT&#nWaJO!0Fr-416c{utw zqP`H4@|MB7RUVEM>bhj=6@h`Qosvo!>fb}MC;z6x>}dwUY`)A+z^xLFvgxQv@(3QW zA%E1nF7J0;7gwZt6VIjT16wH=%3$4&N^kzDt|tu4Rt_Ck#k~RROqPASS+J^eDT#&b zcY)C4Ce*F4SMpj#PNp5EP-|I%!gs-7apBy;pOyzG0ZH}m~@VkTyKw#+guXI0tA0_G^b9!26mT`>!{S?IdM;)0TmV7lw(`( zpVJ{vL7nPnt-J$2)q#NV8NPR;(r^$$Jq|PqyQ+aBJuypc+A!wf94r1MLcpi5^vZ7$ z$`mA6D)j2C7j~J?M5m0-({$jKS(wQGgNzeZ@OQ8TjS*f-APQw=Q?i71hPx_7{d`aQ z2+?UQhO_G;B}$ucs)dWoX8G=;MO8#|@@j zIrG2h2rs7;+!{FLfL3i83OX2>I;#n>vo6SItfr$b#QJRz>b=WJ-D(P62H#s<#0n>P zS&Ab%=8GWYQ<;)9G!H(HEV;W)&jv7)LQ2K32Wt1Noja*5u>{RiuZ2U4Kw36to)jqt z(#Wd{ydTueuFCuT6C--$V3e3wlSF*FACJXl;kv&acebtH;mML4l-^C-qa%2!ltsMZ7QpVE>B*j@SCz5ysNDHb6K~ zhY_WQ26bIwUodsSWgzbj7I}P*fovCz{Xb?*Zs#lA$6)OfnK#XH3l3 z@v_Ow3uiLu5_rwmr>@@LDIbr%_~Hd9{&|{F0$i= zBr_>91Se#4=0@ZkG75|pX)0K20gx>Q? zr!<_64%zyIO+!KC{nHPg_mHsI zdVkdn@Wm1&lmiMfsDJvUkO| z+B=?*gc?8;P9*E~XA1-Llbyeb7DxZRBWka^9Rs+a>!J@Bslg>|BWqWII;=NNH245< z1#uiAJBe_9d``G>E{vV6CX4paWbWO3ID%Q~EsocFk-AX=vd^dNlWPCYEf8j2uaIhs z&%1rpt>h+Iqw^0k=OSOU{GJh!khTgE3Sa#Ub6Cf2pYQ92zme=Gm=9+kOv}qXi{y+| z2LFrS==p!`rO}=2oR_EJX7uE8G{JMnKp=w;b=t4#R)s>!l}v8dxs25?v)~EhV2@n; zmBbV{$#-M*0GXU7d{!|3KlQ_Bs@^IQ0#BP&QXtE|u)JhkhF!(L9g3xH6>}KPuxLKP zpP5ZwlNJV-KnBzgXNzrT#zTvL3EF9QcC$*aUl|FUAS0#R2G2fPP_J~VEtPqePEZWz zprJ_Di#PA|J?#Wj10jFGl2u0wf!~sxxa;@Zn{)E)tU=@f`Sv( z=ya&#W!`W-KOSz7Ag{FJzD0*6H|oz+-b#;F@4%lgAW|&o-qUDsRo>ZSs`ldAyv#rg zR*vt8I5`5g=+j6S-#;qqxYHts&-$18D>YAL#&|NkWQM-7faQB%-&N%%7f#uN1Mn+E z#6|FY0H+0gkIOyxSfAO+jHBu{RcohnpVmqZNZlyDnnl68{7T1x0!J_F!_mri#Fry5}biU;E)h_d=?(q^bBmH9rNJNZkPe?JdQE z`VUHtUM%!r?c~~-HPN*SIQ*|Y5eWSt(iB+j()f~Eq*A}Lb|Td3(}(y~>5<*@D;l_w z6^{JzvXc?h`@qRsF*4WXaw`o!wY=!mKi;fluMJ7O9S~t$y7QkbU)}!Rz2-5>#<7?- zU&RtUg;#uuUn*N|bvg>SpU{&H>$Q68n61gbv#$$+19vy1|66Y}Q+hJs-rCd}+fvjY z*0%a0x<@$t{(l$q?K9Q&IeGiBtDs!w+Fx&{f6N6N0BJIk)SgJZb7eQe(Ig#to@gjY*8PO{Fr)^%t^e8Zj_xobh$H!y;au z(hz|y-%D5HBuHuH35JuuB!yA^T+4eC)hS~v(^nSHGy1b{19^l?yPn;F1a%0_JqEW= zDs{isV8dZZ=$fQatXY~{i!`g0$6B2C^yX6EUY%n}KoZ_O|4Q}T>@yKR6fil@b?{tW zpP&|F1T@7{@V`HNjH+?2`Iewo$L<44{M5uVMxt*~**(8k;`Bvgzlnt`!pb>K>;t*B zNL?mXk9nkygD!gowe5Uiv&P3@0z5nw%)7X(qP0yD@yAVf9Yh;I2PK09Ajn@DDlDc>h%V$`i$w>L$aLPQ&_|B{Gx=~&gaZSTLlLU*vn8qE>=Kjp6h z=+8UjA|!>#?Fl?cqo2O|Rk9xxZV+8vgj zvs61_psXs6AAOmt6j*o_l?gBJV63V}cGLBHy#~ALuD>l0$XfCmJiNYAz2>oabiNrC zP3AO6F!-<>OPPus*+`hc5V^2yg1s+vfcV zLMzPeJXKvD1G%TpJS-*I7vNtv8y+n+Uhh zK|!C%SNNX$H^^p6_4qrCwh9&R<4lgvn`GX@&Y_?4SZrx{cQIlwoEfan4=x;C3KGqy zYve?9HCWnjgpj0mF}#3I<4W#Iq>4b&+gd`AoKn4d>EM=2L;jV=7d~nm>k8HjVaZCP z#Bn{P2L#gRhE7DTG$e}llStH^5swVD?5s64Q)m~YHM|Gxj5wtGi3;73C??2%!z+2#t1yY-0sw>xgov`VF~Ap(&A> zr?aD*`6~Llb+h&5E}p%g#n^7_ydlJ#7enTEHTe%xa>6__PCsqPJUjoK8XqIFroYx& z{YQ#dv+7A+ZE^UZv(JXkFZ!pR;ys*QAI#oxuWPCDsaz{MD>=!$?fvwVZU9MFgzH&E zkB(+pc*8oj@Byl`d+ft=?5TxK+3Xhi#Whj(n7?Xv=m%oN zh2l1(*Dcb^!q~rGT8kRkX&&h*@vOM%FIM$ zFa5o;bbdB8(Dz0~eYh5TD*taL^Yp8zHhUWV_i}UefTk`BFGR(Dq0=6ta%3e{{|h7H z*<)tqh(J@fzL*>Y>ZEq?pKZ@ge3ca*FC@R=8sqpVcrP$ z@1VaR2=BysF8qwq_K0`yXD|I>7Q)M!{8r3|RETvg_f0lzeT64Cter8_uD!11xBqm5 zz|Kd~+grtzBN}bw!SeD(0lLtdc+#km0jOxxx1dSJ|0=q*y6X)I23*P`wa^6@1H6rXrh_K zp2H{znZJ6EV=x=*j?5O0{YvTBP5)mY``*^I;JgG{aL zWXhD=4}9bGr#l$At*`kxze-~xZcPlEHz+rLxZq9fNFD99zjpPz1s3~WH9*mxrC1jB7o&qnLb`_ z*&sYTFA%YMjNVhUViFV9$*7zepWaNbyVqNyWbM#8S19OkJ&nS(+d1+sJld&LJ(!eR z7Dj$1=r!|P_S*%gWz*nDA1gJ4 zY1+20m#qg56&Y2IDH%n=OQ@%Zj}RL|GHC^aX_}`mJT%DsV`R&G4S_xtuS`s}YxHiP z!VEn<4ZelpBrF+Oc{_IhWWHeKlgXQR1-{n*(m6&W z7-hPlCeNwB0cKA<<5sy!B>K*MvPjdPU_3^)=Tqbd#ZH)_ZQkbFX!Si+`eOPfx{w)! zR4wJUYp4;v(=!2@Uhl$S<9BWay{2+IIE5M({3C1E@`d%u7h*Ku>YEjr2BTSM# zel(b1dMlKx?YS6xJk#v%WW+$|)Yyxs!fZANI7ye|?@wR1O{H{uUm0x-*5Ae+@@>FQ zcJR)FyKXg=mFXPpGMHdu(rr}pILn=@9Z^^1Cw5UT9jcc3Yii^r|Hw{<}wpn z6&^5{%z{Ibex4Bd6PngsO|($WyXJVt zt$qH`IbW4KWAQY8Ni?qOxLp4usd_ps<$>{cK2ZPVQ^$`wt|qrwf;k(i*KGD}I&-1X zb!-xR#xj@NdHae7uB_BlDNl@55DW~8X(>5J+A7Z2xc&cEdgWKmk;KhotH4-RWRXR;Lob=66sc*+wR1x8juZ7u`tb8`5+H&mcnn&Q%UkS(LvXD`@ zVXRnNGLjfb@zg|Tx@4lBGXCJ6Nciwp#v836zdxuF#FO9L5AzrPZ8{cJcK@!Tt?jKl z?Ktc!L=;!S&31vxmj`srAhPsXMDi#N5YUHJIU+_-G@dq4<=Fdi~J+sYjXBSWg9$peW`nd0sprH!J(3LKG7aoBNt+k^4Q zd(Oi4-}$`tJ`^xIVD#?I-i{ZpD_d?Jn4-384VT@wfV-_pRPr3ke&B9bbTIi{^n)@3 zgFWK9uHcxMy%$S8D5Jz4ER9XAHAy5H7!c{DSp!jouRi0)sb4+>?uXem(hvkyz(dTrIxSUOgrxFjJUVK}-tks{8h5ZOofZczd?K3r) zd3*I7WksYfKWcq7()Pm%?9;(CO84Fx(}x#F4}$gAwh_~-S@nZH$(#$ zxKE8+{S6WOV=Bu^GakRQ6`amSw*z0yn^%&ETrD(vDBcO~aIL8ZFP2cefPxDifba0| z+nC>&_Z4gvjb+L|4Ej%*OYQ%{DP8!HtL=h0Z_%?&!cljWF~7Xi$6~WpQ3`j5AJ+&# z4WZ#;AOf5rS{5%2*jgP~rmm?lJ@Q_BAD20fl(Q(wUtIK@0%YD7Ghcw_ZOqFBgR zljI~kj$2|KVn)Z+0Pw7<~Qe+=CwXV zXFW`xzc#M~CfqE;JxAIXu05`r|2^+HfBc~dEU1%)E|u||8`!Pr=^V$0UodMnflml) z%B4F-wtT7}c$($?)bOw>^6rl|Nec7!e_XX%bouvLC>69NK7ain<~!Fh%4+O)jtloX zdD(i`WgN#=Wrp0iWOm+)n*26UIVpN3NVaVxW$Dc#0BoWT4Q4yGAzfRZe>513`x{B?#NY`7Y?(^5<0m-6g~K#hsFPu4$-8RhK=Fq^p4 zvn?v)m+tJf(Z_$akZu!OL7RzTrxdOUvZrhtNie1oZ+d_YOrt5Nc$%x*jf;nqM?mt^ z-)^zCBRNl`&0%9S4=da9Z^?+-2<4oJzI?9Gb$xh(J2r|(8LfJ`?DQCl&dLIKIGGyQ0y4Z4KLXBZK=tD?)a3V>ES}Vw~Z{21jXoyEhcL-41O&vUxJCVH;%DYxTXNQ%-3J7VD z<;124UGJb`^xN-lHXqM6e$Rt+CBfd`my4563C15a4lGVp$(z-udSrW<3s(Jn^05G- z0<}E&Yc3*G(OfxEAI}5OUhL<$Hb1iGxUxyxGo;m~J=IKbL#1^kGKk%TYr0#ZBRo*y z@P1TBGaTea)k_67H;zPd z5w5QbeWMsepIG|_M?&P2hVFT#0rlremQxaV5kh*d9yu_!TKZ+iCRL~Nnt|PVADnu3 z)}xooBTip0n^A~#e0cxw1W%go`d!P8=j+e>eoRH`QLsG+Kj?m0Pu{3++)q~O=!!q% zSZFq^6d%nD ztzfnChELa5;`eACus;4FklT`6tuRP@Z&MprMyE|rbe4_AZ?5s)IQVe!R>rK32e$-UYecp)&J#gw$eA4{; zX0&mD=RpKIS#OENv@9aHMOsY7??rRwao=V~VbEN037Y1lt2S9QcTVT+K3CfE>>`@+ zw%jjV*X{c!>fce!HTTeVJud&imwHn$ln*R%>_iXT8BiUp*l>-FGGq1LlZazw0m-ul z+d46Dnk?H%%>NWC3+;Zq_$-esbH{ z%G+_c+M?%dR5)h5TkC87`l>uC4}W)X`h;p$<3#PWYGkFlN^cP3`@(+ zOJnuWMEHSawO31rcdzXy?qcfWu*rGryXXxBTxNRs(P#H}(Y`epQDz|5=LE&?ZoLuP ziQPXPB(R284&UD^%^oAWL(MxyG?;MVIi?E1lgJ=TO`7mg4vx+rjyhQxEp`>|xBPW$ zu5iC)3c%HB#i;vk4IY8PC35rnjB6SZ5(@7;$t-EC6=uJwSMm!#Rd*VP(72)e^P7E& zijzo!-V&-L;bY6j;#_}nglz}YCO(T6`7 zefrA6I(-*C2aG5h8J@cyM$z$~6Am&0MjM=!7W`UzD;IxGOJS3@-AtE~*`JJ7PTs*z z0?$=OddI~S7bW5t@ta-CD~8w28C(wvb!i~H7_!~XiYgilc7MIx60o$N(V_PB5h+&8 z5q8GAY654Ub~Wu`BVEPX)FsF;RHbyP29+itFy@)R;%q(X`Zy#J=6dDZjh{+}rHu9K zJ;Ykd|99&&HFWQ1*x5~$U%!<^j4LtcVl%|>vtBcKSZgtF+5EzfHm4Z(qJxOrsFFqT z#^j28JEc!I9#7-2`~0a11IuxQ*nuU}hr%fXeyc;Xw^yMAhIG{V?$5WGDUfdyB>}N; z;d2S2xzjXw=>vX~(|3@f}*(KN#@gOm$@J*ji3Bi9x2l4M}xnDeC! zNT^-mSc}qly?!F|3&u}J1tH4;t4q$actvRXeKRgm6c;jg2N%6D6Y70x=n{0mrzeT( zTx?)<5wRMi!(Woe=OFChRnoJ=gWnsRh7W9QjT;;A?Q&a6A4*$cu}MZi_&8K!4Tp-)vac9RdFAb)151EN|Y01%YGBRHev#a)tMLg zs1)M4|gd`bqZIbD%EOt21MhgU${eSayOC&&)7 zi?tRXj(U%(s#Yn_aw7#b*^ zRIKY1!xc{UYSo~F8&x`aVxjKW0Jt$pPzOD6ed#Fw3Et*2>EQ$cVRpbxApaw%(z*VY z_S&%LjkI1dR~>l4)naGQ<-&twz&73Q5GNiBw5Y=!wDbMys9|}aYk24o{+N} zyW8K8evsqr4D)rL>)yfJhCe}C{a;UnC*vRIy7 zm^+Vf4xaPp!N@^!R5DZ`%j)>mxYh1Y34f0w;#i3dI*}>n#qtoNLu!BBkxf8=V0}_M zN(Em=l{x{7<`37{uV)4&uJ|cvx?*`EdQcC#q^?m8X-A$t1bataLF-5WyzY;zXU!ic z5PSKr;S`0JAZ5vSWIFqdyBbJk1okyU*DR|I+^o;^_Tar~xaVi76vzEvEkH<*W5aGv z7ysG<+6&`>VsCip?~Gb~4IBiHJnBUevG;;b$;yVzbn|g?3NPhfo%gl#PAEZ;3# zD}|HXsmK_=6G=ks2j0QVk;RIv_0p+vJD>J{RsuZrx>L^+?uzw8_iX?gmjvGvPa)r2 zCKke9sT67-Ij5v5dLspF2nJW*6rESpk7v8~3*un+^RTY}J`ls@3Ry_3tlgcDA6?8n zrW&7J&G1|R7urv;%xOglZ0ep$oi}iD-cE*p`W>R@tQsN;X)V4y>SycYOzJf)aNvbA z=YSmRfp7iEC5}IYfO*+Cw7rkP<}P1v$QE=2nW44M^Ni^Wz>WSFpF9V4a{h+dg#_-l_hR8pY~pY>0R>x*goezZq#?!_2?t$Sm#n_y zHT8WXA!hU=p{8$~4iz*3-_6SNxXQ{81kd~&P6B+MPHEEHA5DV`B9~izxYdYD;5d~c zuU@*Q4S#ZlBD?Ybc@MvI*vZ~_+2x}1gu5*+2#@}D_`xp|SY}wm(a1o$&N^Sd>P>$R zd9&xN2IrEz8%Yb?NU2)A5@?8HS2+)i{VT9ePP4=nVK1KpvM_w}`V(N{JXMYkk_<7j z$oZzpbXDk$cjT?KgWz+e2-qpdKakNDAR`7ZE2A*1pVT+c`1un4!?@IKm5PYyhxK5mAhWHF+OPA-u|)%4n1|;6 z7Y|gS-sBq&09~Rv5{0e?z{c6#V!Q=QFOxRP*O>aZ=Rn=RYZM^Ds0`<^zB#0yLDaP( z)q|}RG7(Z(d40D`mJZGGYxG$LVulT;Fb>?UQxOHt@=cwc{Q9)ym8;4ggJiJSQ18E5 z+rv+1X)p;Sp~L*ln;^7*B|s|FaXF!oAOVC{!V%kTzJ&_^T%u-Znh67 zYJS7#zdo}rleB(C@mvEgR&?IfymfqSn4-1-FA zt<~t21qXdmMLJjanB*~^S2kfozrU~@LDs1}-Pd%)XABWICml_UnMB(=hSdL;kNIvpntRF+!0brIrHX6=lp(`?nHYbhq8`r{^96!KaxA~p%9`a66$U6n`LC}|z z({X}CMpmgl^4nq7KAFPqpW}_MEMBzYkD}NURs)e$oob#$O(Cb|u_rkmO z<<&Cr1I`@<``lLadeAE@nLcW<`2>anVc$0<6!r2)3tStkp1bPGdX+Rn>p`|r1$%x9|g1h<_Skvek0`(k$ z)ShJbm7i0sgC~Chwsda-dd`)fsds8m=ig?pY*7zLHs`i(mf62LRdVj{uuEDOq=buA zHm==e71prnQU4*NY96^|)o~&~s&@gFWYXcn$ifBn*}Q0|9x88xn-()u#m|aY<_=d^ zPkwU5Mb?^)9yv8(VTaIPvi!LB@kCtuht%d*FMWJ`OYjG1ee5EEDH){7VSGRgo1yYh z<-Qfx!h~}fKFF2u@8Gc{4&(QuAJOHx9->eVDeKmpgK{`;Kdd5e`RlL!dlT}4#;%3G zHPz|4VSd~dALcah$jm-28?I&b&d2jqFmkjD+X86I1{h^_xkiPJog`|3o;wG!_vnyY zQN-apWp_?T084NLsNDCjjwZD`*8b-Dkc5l853{>?Ft_54Z9S0;JV zV@uKpuQ}h^6NgTf`R-1RM(+K6&=Y>^m|h4$t_fnIWeMmhwP`$(`ZfX_t;bZGTnwoX zYQy?w#cTIXo7sW3VGDtnPcA=yC;RH1Ne>akb>;}J=I{Mben#98;Od4|0ty>69pp%eEl^b zfcsP`B&fidXc&I2EI3Yg5b0*-6>aYB*+Zlc8H;4xhD4k-9S9+n=lv|G^t+vJ$4s0C z;8GOW?{?!yzVX!~g)2motT!ya4~V9a4Wj!GxZ?m?Id z!-NEt>ak@!)A!ik17&lV?kl9lN)$PKce{^q|EyA{tFMHR_fr@2r5^*l@zJRn?9q)5 z0yQw5W6$D_|smJ+9A89 zokBs>7XbLw-;E>RkzDDXzQkBUmrxB3x}xZ28ZF?O+Rl3XQYD)uvo zVRF%3$$H|Sb0p4-3o>WN*w)Ht(nncQ$dDPDuXO2yE+f0ptdQC9f)uE7`tFPT%*CPu zkpgOq_12?EBO&baQYS8nH|r5N<`dQq226r_O4H4zM~zG&r|$%#Tcm>^XAp^TFBW_3 ztD|vHCwryucyAgD^W1wwC9h#QHzuj#ymJ}Z%wKZL%m-i+3aK z6VDK6PP0)&(9p#y=$2)}NP+Lg&Nw{oJlAmBJBO z4WH-(C6-Ldo(BKPvkBUMJcH!PyODTseV~`^;{vv z7A9jyR_g3YofeWbsx3F!stMSR0AoWgfZ#SdYB+@x7QqG`|a^{AE!f$bZbl6|_;)G=W zjAZ#D!F?J$#6r&WOfjsC6|-@HxFYkG&;=!`M8HB-=PCO*hd2JufexD0&ZJNc6u>Cm zWP0X=)GhFnLDDeCn&*>+E?vjkw`p0aFy8bek$O7SOk5s{zDb{Wgtk&$4m-?G@zret zkNUSJ1n2OU4&5&{LLac+yLfz0UxTDm*QRLx&Hvd_aRUd1)b7#l%G`L ztmcy%Rb-9Y!Q9bM=H{;R%7)PEcvivN{}dP4;WnoxBKptws-6-A^%l1WX1@bA#CQ~e zbPrXh7-orc<&n|J)}%|i?5f#qCqB4q-eu?Eux_?$rM<0GGMGJ`2k7MX-tQ%WtElsH zr};=MrYVN=zETOcCY$8> zwiV7ohI9EkJ-e^vXJXPlq6l0J4|R-&^z}vGBBl4th_u-RiD@W5ntF9TAt%hkee`hf zp$N@e$%RUc7c}FOW1Nu7Gq#DYDW0^VT1BElpwF6;zNj=R z^F~aLiuc`sh2g%BRBwobwaPPHQG;%CWo2}dHR=O$iU-7tO}u^`1(4;TYUfz!m?(=r zeVXx8#fGFNXrHU6QZ@Ip+cF&t$y)$Dfh=9RpD^+P-}UGR2~x9xHm&OEVMQ{-iIqxb zn?ou1+eQE=2faXPxDX`OuDf;KBkyje2<;7KNOhPp5f{F;@ijjX6t*Aoo-qm1MPXhp zn^2xq^0<%MxK5KOtRvO*I=!+=46L*_b=?v3NrMv2f72N_aQ!|ICceb?1)K#Ity(tr zU49OljJlPuL7$aJgC9tS9wO=00jlYi;S5E|^&G^?3nrZ=^9QtQ{`6~X%|86}O60;M zRK$K)#mXN$)?TGrM%KD&e5=XC;~69Shj>O+`!6{S7R%z9NJsaOak1iBBskii{BS8i zYN}VM_=*FNK=^-*)HG!sh_WJ+)f^_h->J6X4e-rBG(SI>>WYzkC8e zXENlG7}ogX{>=@jN9rSMiX_>`)9r0p8J;#PYG8Cbu`iB7ZrAO*e;&n^`Z|W0 z;YqyL%kwh0YAXdBuGAdu7Bn>;d4|2mOk?FT9M$!^-VFCrhHP>G5F8D7AcQlPPLve9 zX?(eU2$UnQ1Zbe%u1(s2`Q1IZ*4V1sdCsZXA)#(aX}PWKiUmN+N_ws0lkXRB#VrD$ zQ8w^B_(A?od?R-DK)O=dwdMCLTHY3E(IvY5FFZy$JP7?N(za>p-}!=BnB*#qc~9Q) zQD8}kVR+)a!dAd%!2NI!`X(`$L22>oe(js zOY^T`nzu2!!+8AtUGOI+dsftSgzDXEL*TzD`4dB?`l64KH}NrB+N}B5KRef(!bI76 zlIzBw{#yRxQy;{;IP=@^S0~_W2}>vRBpu8(Rcp?#$ynyT%1iKjn4*&Y6v(hxy~C67 zJJ1nnG(Jcs4Ksc)?W@78*yJQ)R<2e{V#jTA9gLh-PTfynyFOUsYJhvfnO^>0du{mP zei__v>fj2r_L}!-EgwP)mJW%6w!Uq-kUf_SoOpGHNEpulwi|^glwd>gXmo1*Z1=G2 zU{gLG(M*lKtbFxb12MT39DoS&XZM9;jvFN>R7({eG>|OrDV(3H`#!k64t4g~|Ef{* zjJnd3Pfp2(-Ih8NbL?pxm0j6u_~~ka8~+;^p?=S4>GGZ7#$A~c`)SnqZln0bgWnx- zSHHuh5-c6_u`9boy&%w-KiL}FGhL=C)ZZAC7l1FkIIQujcA)z9To=>5h>8opJ}?RY zgoYz$H?dl$Y+patMW-c7u>0x2bxSx$?0=bDo*(x5X}TSgn;h!mu;VE=&>%0eHSYT! zVc74;wn`iKF^G|$aoIPlRZPXrK>eW z$_DJu0hNYFe!;6phNii{HrzFY*8lqlkL2K4cxn&$a?TF7~mCQou-r-5))xz zlj_GF-=hB8tE7(A83^kZ9$f2I?4?3W|4-97RiEvqDr=^Yp=WryNhL7nKl&0e1nF-Y z?7@Q-qIWGhqJ+AG0L(KY6}bL6$`sDUr@i2JMA~3elSw9%fjvs-kviTF^_@SPfx~k2 zYhEl}TTAl97f=qG*G>NEqGi1h_3u%)Ae={J))T323bu!Fl+#S~Y|@Oc=DE#*JU$2d2)I?9%!5fy;OP3fS+SSQV_5 z(}3CT2!b|Lf9iy^=FWqM6x`DxHv3kJ0lCjpn$3h90VwD)AjeE~-i@B3N5j{D|Dv+Q zbFcKtF{Gob(R7F|C^cld?B+O|`o6ExVtx>fm&?v>yswL1n*QroN$lp@q#A2ztM&=4 zrI>-g*g6}>-j5Pf5kJdc{p8VAw9Emg_PB0GQ_3Uz>gk8BwYG?{xUI z)E|B(cj`O;4N4}}SI|WSz6( z{$N*Z;H=yG>-4RoI-njb1e_&bz4Q=sm%tZ*%7wE_3Z3gCt30oQ0{*uKuEX{xig>K8 z3c+`{;%EYK+bfvOP95SO{%`&-Kc0%!9{8=oAj1^}UnR@&e&P+g#K5&{lpU4BiQsV~hi4eEs_cMWNEnfEJxF;t&m5W~Jp zXnH2>#?UH(wOq4Iys|8pz<~g6ZWWI|TPL5$F;>%8f`j1gnT5!MjK_Nfa*p_bvTBu; z`qBIIZ_{J&PbDH#Yf_$Gc0{bZR3 z7B=#xXH<*M{s0)z*StfG-G4~`^oi43F-%2bB}#%A+p9Ki9ky9+`p?~MZ`*lua-%5k z6rUcLM0LMl5vro~WfT{%+I}6(;pQ%sFsJkH;=F3T&Kk!87cm=0WF*L95=x33pPp<0 z*rmrjkN;-8K;d_X=a;=S$W@jg8h)eAVu!&QxU(>M-wF`Fa3}cb--{tuZmv1E1IGgz z$j8VI}wA)UtzYTn&vNjG6?Vyh&Ys+O^mtTBvamCr8 zpLtrXu>QY=#}q|NPxPrbp3aN5BH~wZX2{g?D1(U+!8})nklkt|!aX;pUTNMj?`+lL zYZ2|rLfC5e@MZpect3sO{{6Vte4aF|28B0=wH(YzDKUp7x3WJQR&|DFjH+bE?_OGK z@C)OXU{0WosU79J3^{#{>Uk1Qh47l4IO$oVNNhPZ!%Rxf;sf4%rxT|C7*;V{YLzXu zKt@m>68?D)L-5LLcNllssIYG)H^Dg4?}Hwbx)m#dMnN{~(p6GLv}^Q^s0#<4A@${X zl;vr(>+J2ECEo?{Z%K<(Kviz5f{^lC%Jf5+AYd$+yKX%(3vduh!Ukv7nyRh^5KA1g zQos}Oe&es_pHFG?>>74y;I!r>W6o(TJ^I9|AZbGS+QxQ%e+Ai+c;MS~S$b-B0mtNA zyN$7O!Qc2Z2A6x39K_8NI9D`o4oG;W`)TL!#-CZ$c_E=jU4J2lo6hzb z?qymJPzFbzpn4S42nWuk*{zypXql`&U<{8g(WEK>rpEk~EgpRasg`cTqNzjyzDq0A>8*E?;8^?R?Zw^;o%{zlkJpOO6v&eDZ!er+i|mFS>H z`YP0#He|^9N&>$|i^G)r!^@&0tWkx#fJVK^c36EZSZ@RKuo`R;U|CR{ie< zh{=TqB|=*DFPrC`rbmxl6I>(eLyQ`{0fyJly`@pI=>eZ*ZXVETgMrZ@HeXNW1T8wL z!ucb{+N@UX7K@@?ePw{ZUA9dhXIeaMRW_aYG{IrE=dJYz10xZrVMnR2PkE|BSsD7JLK zh$uCEFz`qX#kS?N{=A8mb^7BhoBZUI5>mn1V5ypL_CAUM8_C0t5MSjJpDI=^g$W{_ z#OWE6%wCw9ob2~-=GcEXRhgYa?&dYGDJ=ZroOGn$+>*RnRHzh|mfoEGUGo5Q*D6ul z`9)L&gie+IgP`Yz381Pwt(`PzV22D1f0Ub=$aol8P#qfMmSnyk z>yL3R%nxFn(t$~QH0vSCrx*jm+RsnD@Av(E1`8R_`3leRmPFm?mSt=OH^MjkH%d8D z$e5_zwBtMuOV=bf8VwKmH~rN}+VJ$Nc~E`Yd3Z3OY;e*!O;RIv7Bzo|;=@WW&8XO< z$+t#g>kMU>a(LnMg(3RLFD&1uku>?Tbi?~Wa?bv2?u&lA+Q({aLba7StCzpq8AWvP z^Yt6R{2zD%epgC*s3ZSAeA(MwjAZH4G0`Y^w=a-UmYcbB>ReMqUDEht$L6MO_OGZX zeL>@kCXeot=Wy6ii9%fOQZYl3edIkBp2NPj_u_l>PcIqPE_r|b+`0Y~mf`9?q@6Sp zph$2E$99X%o;O*MHncOBy~exNTc@x%9{{9(emvDpyx0gMqaJ4RqQcZ7#Ibq1mzc&SX_5l>Yu}qH^M1w=ILhmqUYYV}SU@ zlKSm_Ce`gL2GbtR#=A=GGTkC>lI7glDKR@h>=ha+>?z9Jw>WU6Q~31i;T)|5Vv#I9 z?3t>E6|QcJ*TfU!&0?_QlPq< zPSbsGOqwpeY+?sOtoM4KYO+S{C*;-Qr<3`m7kiiw5Y08qZ#X^AH#|t&U*Pn?G^;~$ zIk)m6)1lm$!IdL?SB>*o^W!;_Th&9CT~CYbJ8ERLg1!}}dWg<8#W~iQMX&3`>ou?c z#|3B%u`7tlSIWCH8CxoSemVPo!2SmU&qHMyM7=+*oGG#BFFi?k%+uhu6y|!wW!SK* zz_GB6AGkDsH6%;~V-uc>9x-Mi{<5CWk>}C6#xH2X!FRq}^a7U-U#KX4^PC2~(J_~l zzt7H-$$+jGnHsd&F`Sf}N6H2dY%$lo6Ab-Nco z5a@mx;M`YN(;E+Tawzk74$?D9ueq=mM;!9?XlbF>7YLVclO!GptQsDmKt-zlMjay$ zbDBqDQggf%K0dcl#tE^tkcO>I3Co+PH_G9g5IAS|U^6PFdv$%I+iGTYkVJiZ&tG`y z_p2my;mr!KbP+nheVa6!r!45QErpry#o$jKj*%+WI|)_i#r3Osw=bj!D368St9hwf zpS&wUu@)6u9qavzjeMOE6g+mNQ^uK* z&@EDa`-B-Oz^loHSXN+7xqbV}5?jXzW2afl<8zH+&$e$bZ6BXIw)?kxU9jQ9iA>jT zc7{a0dV7_f`0K>r8ykOzp02zApL`oh%baM@PBh6LrAl4$nmbc>%G2%9o1Eq;E*9DG zYT*^OWGu}|UlT$W{ilfBCxK;q%3U>Bk1Nz0g%=yE$I(KxXKog@+Q0Cz?^%uY=T1GV z=Jf3k%dwRVMQ+P7n1fOVtZT}{_c~UIPpjk3JcL-{GigFGm!`WrvJ*+JfzM}zucINB zC13Le7$z|XFKQ7AcolDadNl;i$5!z8Wg))Tcdxh|7{9#6i_kDoyiuQh4$OT%9m835 z2aK*+UucKdW6>@QCZ>c6TQP!fXP0DBGXDXW;j*6z;1nIJBn(3^G9aN6J`r<_Hgj;S zOY_~ruBmm4JyzoURf4}KgO@7iD?O>+dMV`_>y<(i)LW56@t@2yB5$r7OE<1FNNAf( zHk#7s(5}6Y(P#S(CQlK!(&PG5(+d*S*7Xl6Fej$v@ovXd{s(0X#}Aj6m59KAJ4eNy9DF_GOk`!A|j zG@?WYYaPx??vK8ePF_e_c(v0U_A8pvT!g6ZfyXyL6s~BezB`zLNf23!q#BWWfh1PE z|9I0;qMMUlJ74EN7l^s%-%`KW&F6NhJ>>4s#ii_`w?9iM?R)0y*%b~UG`4Q#Tt>NByhi*%lo*Ol$X_($1ILC>A0wV^ zi($faEA<-S)*$?|{$UYq-X8e)&?UUcC;#UN_8~l??_t$c9HE0jDXg%fq~b;62~9VN zoZmjY8NRU}k1u4I=Ckx&IdD^$#AjCec#G>yzO`QM4f^n-8&>*gVN#bx&$b#`&*wl< zmQTYDK z*oz0ZP&Ut(b*pX3Ol> z(ROCH;A;K~^DiZjL8^LO)ps==`LvOt`ePi)**erucG9lV754u?(nhKfH^po-hU;mx z@Cy)lB|X**J7&a-pL{+FbSgOp1u?lm4;k%4wi!mr=(;}y{de$}{h}6UIn&vl&h2iv zP}-Bc39M1GqBQ*ah59PJFJ@Pst7(@8fbj~h!?FMIH$C;>-(xaUa-UpH-WRy1kq%9- zUNXpTi?_?=(ipLtkkTtLkxi7ppIgXJU?wsf48H!Q9QHT7LC2CfD|oPFgckow=_5d% zBNTGo-oakm$H@*r_2K`!ATk3v4uvkc+UKS#Bg>Do?&ntySHL?%wym(O6>`)f0GNF( z?=#D+u}v0kDpO5UoeQDn~X!F;{Z zn2@iw5pP6i8ZPk1yS^FO=O)1Ykz->h#FQ{QadKVsE+;NF9IFgOkE!_M0s9wKt(r@d z_u)8MNzsX^t*S>vXb7#F=&#Y82?l&lVYSxLQlS=u}QbKVII_gmW@$M7_idH*@W zf(4y^?4rVqlJBfdlu}Fx@j*dkp>Nr^4G?CuwF>gUa>*LDlsco!E}Sqqv61{aCK z={J<^O}4#$zPrcCZN(s;R(vf7~*TI?J2T0Uy?-Foi+QO8$3 zum-JAhtJ)HIeWP5>LQgAmkhL?1H#M zz7r%IuVqBP0b$En+w4bT|CCv7%<@e)nT|`VDE9jM)fDpG4itTz zK$rZnyqyAKsX|sl%-|ND@0i7Li&OWM+?O>u&P6&}4qG@mhRul=&pPQ^v?|WNOb@cJ z0w>C|R4-Qc?jmC?WIE;WH?EJ;c&}0Tjd;iTrhWCz7fo({pD32!ahld^n4sI!5rNn$ z`PLQOLK^$0X^?QHH*Do4L z8ETTFiA06*h`^7|wIZL~bStJdOy^kV?c>Curx`Um(McPnTz11n8L#RG3Xpm@fFf7S zB7c2++TjE=a2f6>k;vm1@>EBWNgw6@GXm$Ylk=IMU;fq4TftAiJDOxs@paVGK(<+{ zd3^L^obDZz?%ONFk_N`&q@oP+U6YI8L~(NUaCMQ(Y6iIsgS&)1lEB%f$z#B6aDCHxw_F!Bz(grcPdMtwJ0?1BOFN;T|I13Pr}BmAGXvF z+1TP<6`eADtK2SuHGV;yUPu==txo4KZaG>y1<(JOqG`EN0XMtWAKm6o|cn1)z?KDmgp%a-) zogP0d`HsUb*%=r=dd@^q9ek!MzbZopNw}FvQforK;0bf9+VuPFi`+;e^Q+*NMYB{Z zeJ=5-a`QqrD~B>?z)k`SB!pv7eP$9%$OLhtTXg_C2NXYk& zTY6}ds;3;o+-Fjn&xk#eI2brvd(pY6R~b=qrTc4BT-BC!bqTK4^wl6xlzl=o5tw6f zMdf|*u?tlnz6u@#;t^EYDNlk;wpIx-Wg3NF+L>>yl*JyaBsaDFa!}YGC2aZWte94r zyv@y+!lQ*-?Xr}f+p&8+wzs(&hUxy(H$*TT3_r}xy}9~H8V9CdZ!Qm<1!ifgZYYU* zr~+LFssLya=0ByW5r-NR^=JqlGjDI*2zL5!)q4nayvaPvOaB^L1 zFgl5xJT8zLa`V7UdH6IiR=(jpNS{qK4zZ4rG~6&A^tqwmvnzV6A>r_`)-(_#h_|-I z4q^qc2e90Wbw3VfnXr7z2=HB)DC}=lXXxbbzxgBsMVaR#jbvSV(5U`-!gH_$^C02z z)BC_*KYu_Lca~#$^M}DT&BRj&Q3e9?J)wiT`e~jY^7I@|z*{@|k~3Joo?ZGhHgY^< zip{A1iiFXG2Mpz&37IA_b29K@?&Yu?_N%%>WekU~vPN;&53e08_J4a`kH4sQ{vjFH(orP5QOYApgE%hak@4bshF5<6^WiCFgp$WaZ2bnvcd9{P-V6mIGm(8*W92n z!lTd#G#PmQ%o#;wMc&}`4d;DUL85qI>ikYoLYQpNrsfn>}Pa#}YwcENh zguSnME!T{=aBbf}r4gIyt(K*`mLj4v{?T!I%RXqNoh?V3%P+n5?GD=ywzWu-(fDPQ z!P*HSdmB;N%~u*P{)CTWy?F|yQsu}gk~zKvZd>DNrH&xn$14KvU}fP??%UP=G%=-U zdh3%lXp1iQlrkAxB^YPOTwXYze8=W)&fv)bfEWD4oWT6@X!-IufV0|yCIMeq(b^^XVCR(vmK+Xlw-}sY(yv=d`9f3balTe9 zTjJJcR6?ic`oBm9cz(~pTN*N2u@G(JR~T#DfD};Uf882Y8Qvm~bLM_j|MSXK(aUuP z)8CRzKL=Tzdy~)Lrcv4Y;^h1t1(p~L%5)Ny8d7irfpHL<)e8^!W_APKu@H<{G-6MFL;JB6?R$iED0+TK= z==XM#9;7xQ9)_T(%z6jY)O)WiU*VP!p2wziHM;;E#SrdG(uos&nqU@y1A$HVJ<0wu z+ddIT3P<4%jr;F#Xo9Qb7`Xpu?tn14hmm=D`q%i{vhuUf{P?y0+dZ|YoxcxoSGVFV zjv_8v`TC}xo1R@nWn!Y1DP-3AYrBJKMS0RwoKGKp(!V}xI!K3PFxwMd(}C$f-zys< zdVeVL-}Z!kqnyXhUoaAowI2ts-3y@bsR-heUg^igZq_yci+>JmoK1h#1D)ojfK%a# zqKgk5Ny5~Ll3g_r@3_MW-tz0mz$cTs=X?NklCYV)htG%txBUs%ET^`)81{g6ql%io zXaJmFtis<&U~%_?NLUxS)R1|)*_j^B~P_H6(oet5--iL)SW)ahvBO1gzh8E7&pWO<+QoY8Mb z7s!_KlX8!;9vYM|J)O4nq_WAc)Y1Q=;32~YGQ0e->Ez0$t;ZIMnP)E#Mk^XKA|qXw zgWg==HiM8D?5J7A_6tp}`*6xx#!KkedQVSRI)r}w44lP~jn5g#ktfGsqDQy}FGAKM zM__j6zwZ=^ez{^r5%fW;@A!H=Ph6fc!ax~bH()ZAyN4?mu!#P$yN2E>UygXacB@i&rHs0KfI+-Jid#`0vWtz{)=-|M~ z8M8jDUl{67+5Y{6p}{-(iY|y{bTR=Xdkg)xw43-#Cn)r;oJkq#l)_n{nCl?f+I_Hu zV)`+h*MMTi84VjhA=^YS9&5n^3+FJ)!UcD(%HW0x-lIJ3AMy^{lL8)QioY%m0IB-& z=~gp;)QIV^e>?sF;$N&V{j~_(RwqeHA5`}pfy(|H{uEWv$y&ZH@zCZ7D% z>G=-P1-03)p0w96x12tN1m9=lNzYm^@% z6HvD}dg7ju$dTpB$RZLcjLlx?X?9I@X53>Iq;OLN@D-^{Z^oZ{pE==gymGiaEy-Eyk6LmL@sqO!R0xES$e7EaB3b8W?Dh4$^OlE2q4VgNhldt5xlU8(tt{JD#If z#by6Y#RL(+i8Fk@tH8jC{FXUqP)UDlhL>{o8BrtHyvRkFnJEh1rrr162S*Vd227zY zHyTQuxPKUO)4e_}9v1dg^LILde99e+)Jcs~VL{+{Z49~YGhn!z0d}fCCTw55fdVcu z5!4bz@rbgfBgNFf2*i=h$is)s)MBe@(2q(xGoL+^z_&l}Gd!N}elwrIjR@ni%-%|( zwwaZ(l@L)jSur*Si;z{We0iJm{YmM2z(vfwbnaZ7?lQ94L;dgi5Nq6$go5r+ch{57 zFgE=8zJtUQK#DY#O?6C^o{`m;4Y+*fvP~P#$fy9k68~WWu%IUR^S$N17rc(m|I{CV zG2I43m$wkLemFRTR{|nxDtGW4(2iuN7OUX&^D^NJ*_zb8 z`*iA65Dv;Uh06|`TNcts9Iv!<`+W)gq+Wdmy!%@>QwBGvhz<-9^=@B=a^`};uo_#` zteAxdXL@55M2s$j4CEd5rV!`V>t#3NboXI(zi&ue6HCx4L0`T2Rd zS5-R?9lv|}aS#`d`Mo=GA;V0?_`9gL4V)}!0lGr)TK|0c!qT_)eh|KX7_DN;;)ptN z%-BE&GQ1pq72VmFV~iF2RA&44)pvHaNt#e_U>REk3Q4;c7zMzOV2HBHAS2?NB)(=y zj-7@!o1@?0RR?SelX#j^+s?ET`+Usq+O)=%OY7%tpoq~iu6EjC@!b!OR)<_!GIBqm z#IRrQ`dxBJEP`?OH%I;>9ONzy$BLHHegJ@sOJ9UKc-C>$}WIH zjmO~1&n0QC+pTQ5X)7?$;n2dIpsTl{kdHQq_E%qc{rmHUINby^pPbWmF<_-n(yGIt z({#||<@+-lL%vJTiY0lYA_l4sf&%bA895w1Id&FauFi93yfMhz!=m6H5LA^ASip)>)p#*LSqx4SKPH&4GKeWn%I}Q`vrN-ak}axQuX#2Xz1J@ zc9^R8dQ#!9t8u!V6-=<8`l1?m{4@Ez6-kPJ52kKwewfx>xPpek zTz!Ts6gJunxLn;n81uWs4hAlp3}@Hh#p!BrE+dB>LQx*oci>m{$jph{+my}qhl~5| zkejDk1X2)*xOldpNeW0E5gKIe@^FVV)qzXXzP(d*J1k}}48Mg0aJ&=PE!iCf67b9o z7FjaT5@8q3cU7+;Y$h?f8By$y?remPtaA0^P!Se=g~6xUzVL(yB{$gIfY_Q3HHJI^ z`38BpVUHmqDsku3eXOC{+0%#iMZw^q3)D@)b-*kXszSSgQ$$aV+ts6zbf6;mB3K_V z2M+4y0gO)(3)%i!ck2-lCd6izNpvAatZQ#&N)H+(2s`|Z;md~J2b!m+$@)Y&(beDf z<4yRw)t{Bk;~$l$gc#+s%}N?gwp^YtXHRpV2h*uRq;;(3_WuQ&r2<(D$$>UxS|#n3ul>_hPhk<%{t z-^w`fC|H(xRu!9Y{XxtQ(9d(eJ%{4;(*iA%(4>{B4g_cTb%|$zV6{n#NhHGej(xS8 z5hDB)lVctNRILLk(5JdsKCHs@>gg}pv-tj}=dTMcqf z<_I%+(d;J4Z-(K%$H5={Q)^&zG}^&YrhWyreFIU%`IyIXh{%FiFbgpdfYYUt3hB4@ z+V!B=iu)4VaQ`2okA%DH2xx#`h+Xi23h2{rd&35zkmNYFq5He}-?e;4)iK{_uN$i) zl4?5U_qA*xtq-etK*Bo8swZ?Cn6Vc|YuyRnA>*&+P3l1U@doagJ_CKYO5=2EF#xqt zo_iZKL9qN%r$MTw?C9>ZaelgHEcys1oH^EC+p_F%ej^uDjN^0zFdqacV6Juxy#5Vd zJhTnFh<80){9Z$tmI1D0Abd~5gQ%S6kGz?Q|M*G1Q)nt#SE38VMAYfts+13C)B$86 z5MS){`V1Jlz89eEV|hD~Wis0WZqPF%{P+_uLMdB79Uiy@l?XXstXFieAnyry@rD1c zQviXN5dqN%5O&SC)WTLShzE_rN}LL(1}@~Lpy{r0F2{?dqCE&BIoe64R@n4B+;M#0mO|i-=E#u4ov3x^X>mWfoiQl^vg( z|F%k^?0p0p$p#U|)LrVsWz91xq|X+s0lstPj`&X(F3g{FG6cnCL9Z?5sS2L+-wyLM zpMVZn#5%kHYhjF3E@LB2+ddS_iW= zTDeeY%PwRri(Pkl13qsva0X_8np>fg{T6^08UM-Y>Jo7O z5!5zBeTUEEpu)?EY@!MWw-rwe4J7I#-w1+Aoq8Mh!YIeC%J>kxUdt0{7WMn90ewuV zV5BGFDVCPJPd|b8AKe(+COf>D^ovWu$FPlJMdERR^MTt?{0C8Bh_58CjOBk|K#*|#x~Gy1iXx({ zI9BvkiScDlHiqHL=Gv<^NGO0%#Gr z=6Kd=v7joXk-0%rbW7ygnL>XzijfFg5p#G6)TP6BH4I7~m$H8~WEI8$n@S_A(Qx3q|49HNa=z}u zo@HUU#~DF9gG1Dqrs0X~@%l1!UyX^FtsyvSMS)G$Y*Cq7n+?7yyjx3cziWDrAu>jYzzFP7 zDLq=U4A}{9AyLV0*RY^LZ2)npG*|n|aI+{l87b*|>M~{c;L=@a{kR;+z1G|nglG_t3q5}3C?-!uL2{&QF1LLyT5^@AL}*#C0PdzGl~W=C;h z=mI7oQP0_4$Gv4<-Xo?#82|zr+&*&dyGOkuQyDM!UdPK4Z)Wyu`95OL@QqWk(?eB( zzsE+tyz|FwAtrk-C*J3%5A4FJA0(Sw9J~W_mLb0EY^Z2xOChSpL5*w5d22@aC&ieUEIroBHmbzc5_eP5#hU9qQ3 zRi69){$ItiP!1t9t08hqIDDF7G!3%-nx{i8{tLrZ6+Ay2|81RC6=_f;J%84tVHkh> zLh^%%KD+s2>Qm&;E8j5j63psBWu(P%>C1igLB>1yVVVQLYS6(w6cw{fE%684 zH*auA%H1|7z8;~sstoe~%AllTq^41fG_3T4mvpgZfIRnVCpxiR^g&+>yswZ+<>wuMiX6Jc*1$k*~_^JCd7*CD!u5CoHrtBfKfbme)C#!P<2B{h{2DX<-}EX=PEvEf^+qkDJe zv2cXgDNLJS-WiqYkgpM8E`c}|JKb*&AV&|q8dES5a2kNa?>j|qIJ>=f9e@L5BTh$N@Dw(W% z@9ciEoZIhB3F3(WL5%As_Apugl91jzk}JOg{>C}5Qo8TXEVR8iyH7hiuWOt0*(IRm#2Gc%>sRjh3as#n=edP`c< zqnjnoZVtRdais?_=QHx#K@BhOodnzUM zcw*JszA2`}!zMb3oN+u{M;o$@nKRO!UR$D*%?kGZ&{U8NuGOC??=*V#7R!4AO$Y@} z6Cm2@c}X_=bKH=&bJi){4(Z%a1xGTo7$iIJod#=;uXiWE{J1xxT(a*A{hN80A|2l7 zgB`svR6fP;c1SowD*3^z`1jbWP4%{N(Dk$)=V|8H-7XF|>(y}qWh1k9opYHO&rBus z*Z5UL4^wZ(FfgV>tX$(Apcrgvevwq#{~PML+tAC6QKZ2NqgL!b!u=v)0?$NC#d3X! zf0XC#kqM@j4Lx@*H?H0m^NQb?N>00<{=}?$7sNrU9(NVlMsh z3O${(Iy;3wAuMjTYWAYQl3^jXH!cE4_yh1wP(9nPyw4?*!$!>)yYEo4qNUsf1DNio zC_YY4a$;vrC^U832Jl6#08L1Eu6&m#m&@ypWUi|4Q3kF#wH7D1dCYa9SsAzQDtl@O z85h6Z71$*Gc|s40F0SfNQ~p#`WpzOi$grUEkgj@9(@^Xk$W>R zmoV*Ott)D!SRR;5|2=IJ>zB2z8INRJ{9a)5slDkF+Yh!nKvANA?PUOto;D`26I35!Z%BAN?6H|!Ax8AWTe7!`QVTN{WyYoxShn_IP@I)V?HqkSiflCDlQ{?0iK*~w_^7QK>vmyle zVE9n-F;T_*>3VSG;aA~jK3`P=eX_v!3ajy4@IxAki$*Wfj@U_PKk;>h_2*~7G9@%B zYR@!TlVzllIOO^kXflN%L%=21p6~fU52ZR zXd6>-y(;63hLIUYvCoW49+@4D@G%eXfrC-`=(p5E zoSs0>I3cNGVzS?AKL5UMy|`F>zH-H9jNUsUrpNs{2349~5n{w2_e8I8UDH--E4JFn zS1aN9O>?Zmkbd_+|I3UIKI-CNXlRO`@)ljSfp$1L(6t@CIO@#Xrp%BDU3tDZK9 zy`l2s`)c_*UmtK%5KxM_>{a)nPmUP%hR)Z6jJHX(uu!cE@ydlkRp$qPorVMQD}C1o zZ5mu}Z0r~#$P{9u#fFCw)M(U@(UAq$;yxS>xA13|<3%yAu$5?dC*r1w(3W&sn%Sz| zM&C@t-*8dXHOi!Y>X3v;jRa)6&C>q#1MOJtTjP9Vud<&_Ue-T#-?%W%#sxbhnY&nQ zzyEXYD0kmk3+cMdnkd5Do!er{ZKblt$C7>#)n)kKTa|{mj2Gs^pPw79{QjaAO!hb7 z=ymCl*MF~dg-Zayii{g`3jItEfi3bO%nw9WWW!);;ok&GRAF73&bG>yggnAKn4hmR zwRRLEu!Z-dtiW#aum=yzP#4Zo0&8!wVZulVn5d-W0{|Od^n^&jN%LWBnp26hFwurp zol80wwq}my##qq(&u5%)!#|pFn;%Osf~>uBd~t8M-8s1@dSC(fLB8ouy@#Q;M*%!YA+n2pX^h**w8O4;yA?pw}TbA zxql~j99)?rl<>ubaolv@u*v~e|S_CDIw(K znX(WbF@CqA?!^~iq*01?D61~Jc<0Vt*u=|?;&ypC?^2ZG>XH={_Hv-qN&85-oS5F% zwOAql?tjoJGjyx&eHTd8{U1gu-hnQN=79|Hz(XsI`AG9(3rTLp@Jx?8sdBPGsFV29 z`K4IzYqf`K{81rhTN$?A0&QJcFuahsnz9}_OM;nkpiy|6WQ!``s%{PfdKAnS@Sw^* z`UNCA7HBqY0ww;Z{O*1edF0A3jlNJ1@vACS?cb)8i2JpFgQ0K(&c?f;!aR?Is}_P} z*Lyuya@SPO)YvE~*AB?wkK@7>1~?%&+XFw>BvQ2$LlF`!A=3Ig4gCvtR1N^K1$8n}h84T*@ z`3)E5AYI7oYvo5|cSuG=Gfpby<5QL)?Ock)Bn5W~Ua<@|;(Na^kE+u?bIU_k39$mOS;)A`Fe?4Q^lcNFjF|CiP1 zoeHk<=$Xst($qk%ruL0L@M`G*`b3z@aK&EVQXMcwtK+AcQ}~O&9n6YWpR7D#ze*Ww z=tM~xXC*1*Zo{`3wiN=Tmf<;>&;Py2;k>YMm3dIkVHfBQ0%mo5i!JACFaNZYb6vMw zX5xX9H26AgkR5hR4veTx4l3?Pl^=;Kp@OL`Lb(X$iB_3fXd9pZyHt~ICCa#7wi~Qe zGN4AP`pa|3VVuD)X*|9QvPz1K^XH<-2-c|nU~bn}y|#85P~QKT za048S7a10V0^Q1C!Am@+>jZV&G7Ltm5t8pwocT{(dZu*I3~OA_oBe{>oi$OF(0&!m z&XL!NxKiTA?K%E|*B}ZcO6|eQS%kY4Ww+%0u^14w{imPYGSI}~T>+7)RkoO{j+eV_ zgMZ|q3P~bh*YI%pmrg9d?a5%)cz9s4MdEyYX!KjQh}Q1=68}TX9y-rCf;G+!lZ*#O zN49`Bt8cKIjC;o6K-k|j87#Sfr^vxpx_Kzax94jz6?05qjD$R4!xguLn;5^V6XaXA zY>gM`J?^mQilK)L@m@LWL|D^2W|nqk614tM`9irGW?=Lm%99|SLZmHT$Q`9h+2O}v zyF+$^)ns>YjhH}$=niEi03N!O%~f)Ttgy={LhEeRP-|WOM%M3Q5L=%{kdr*FwLK>*19W!}|{hA6#??@fSdS0J3t|q=AJ;)DS6aHbAv3qIO9CP?>t|t@m4RUr1cCA!M{_w;-DV~)k!$V@f zgE?gPeZifwicdt9zfV*eNowb4$@5BOot@WCi9#h_SoRZt$KOoyfV)IjYqBVM{0jK+ zrNfkKel%1anfmNr)Q`C&9)XK7qly=?-eS3y{3P9%#fg^LQ76LQmOmf%u`^53BuPlt z;m;#{8J1jIPB_-s`?IuHVM!XxR=8c0@71hKEZ z8w7Id{rDUCV}Qa7r*FYyqYt9bhjrd*jHBlIwbI6%-FRi>qHRU?iJj92fS2W#-B^HU zPUXDv=^tL~d`h4|p+Fb)!IcJNGOGvv`oboj?O|NzQ~K)wsWfcUFB>625wDloNA$fW zLH0mSFBmk9cfRb&8C`2havA=h6+Cb|xPTxc2;9c>h=i4(r%b7{Vn`4&#?MzaTq11)#d<;GjW3tr?L0wn?)r10So z2jY;EPj*uEz!R@u?$0GuK{2~kQ=RP`Tx8ZH^!QmUCpSezNYD(}lh~7n(mvnw&d{Bn( za+r$(0GQr99BxQ$z`&Gs<9M2A{|$RDP`b}uhLK_J$Q4L$QWxBQt^r34`~SJ&PgW5s zPWbuUx=^KCRls;_)UQ{9Ua4amxIHrd><;8aCGI`dbpGh5%`qNX7H<2|CAatmJeqAa z>qJ6~5Tk-zownkfgzX9RY ze9kEaHy7h}{>|H{L#;<0eW3JXUQDrsfN*jG1fzc#(&3_ujvsyN*Umtr0!4`&I8ssQA*X*3ab|lUw%G|J^T^QMdCuXESK*R>yh?!F8%p9wILqUNjNrTG-T@U zIp=%?=XOl6$m5{!W8p<~m~o)b!LecQC(tT+lg9=I%5`K=5OP16fT2YlbE9;pX^ zkM_7k18X#!f>SZo=MsruiN|>0DV%MgFb4)7iNC6>+FHf$OwBw4Lw2}Sp$`6Y9*r$% z8aNW;L3xKV5agnVx#m4#+g6+>Z5#_c@_Ixv&3krjo}y7L`?}}S;&sB^R$2Ttm=DF@ zQFFI<-)QDn0op8gkyu%Cl#Q?T?Q)<=243;ymvnZ;Cx>AUAMP&Q1H+3up9Y3Bx?rrN z@G?%4v8iz8h^jEhd_Cx0)_FLQuoRdshReDfBkK6x9#Y{S_p9>*AEnmdp|z{iyB<5`DxD-S+qym;X&20%uQ zntZ{>PwZwcrBGjGT6f~~)(*l5sP8nEa`>j&&n!e1B&%CRj=+u?pUp@R|wt_gLs)8P`>wBnc}O@!eWdSiA^5eiWyAC%-A2C&_)T zelx6g(Y1A|C*bdxOMOu2%=o@|{P$AB?0DeI6cqof$~;Rjvh?{Z===|#t)?BN>rw=V zmOuEE7!-9Be{w}qFn``Gl1wc{B38;19@hBaNe-ypz=Vqjq4nrV8*F#I@=#n1iUNGY z)yoUDTz_@+VryH7I{{eaFYtQo8o3L1G45hTwN!`yE4WJm}U+4e9pZsev zLxdz|qEMRj4%I2s&S6GIef$W_k9Ab+S^lIaf2T=EB2%d(y-r;w&RU<8z03}K-YcOw zu&i%N_?dNG?2)ZWM|uo|GDD+~AGGC#uS`Z{Ri?%rQZW%IL$!(srm?$H8{<&)wTZli z*E4>dx$)^M%+7wCEaSJ+%oD`esXR2vEkp`q+BTC76a(AsxV&=Ht+}u`lHggLRPt&zz<((JJ0<-aQ%s9&vc_!_oNy`>LT-CP z^Hs%@>X}~A_OqgwVVC}7;`hs~EyaJIoCMN-YT#38Qem;7D#6{U_x@w?5v3zKaLFI* zY61+0rm#m$1rq<>@#DArv%9-e-~4re>W zB;D-a0^+$Sx49{KsO8U<<{26*3K`l@Xo!vI|N4Gv_3PzdC~Z9ocg3R)TqlO2xtR?m zKltKq$^LU*rRx%&9`V`8u7HP2O7Wh_!A_^93poP$PI6UHh`E=GbK)#>V!yr&Sc$hj zbS8k1i$^Pdn$PD@8C~>T{HR97yAHwm;KDB-)2lq7oVUu~cTCu3oWGx|_PnKCiG8fa zGpv2LM@J^$$BKNUV%vU$cdvhRZRGkv89{#_&H*>Jeg~V=CEE|DF8iJwOa*^`agdwK<=h&6^KsyFFY7hs zx_ofC{)@je80W#Z{hFKGO$D-y*Abv1`JOc5iyUTSo6{2h$@B=D@b3;^smeG-K$>)< z``}UUe^l&suGgp)WBr&a4~~mVGb-9}@X>nits%;J;s^0a!~XS=ODRU3HfmU8aU< zjh5!we}PZ%=EZtG0M>JhX1<*sK8w!pvc(Sa!%su@FrToA9B){$@V*O7LB9s?xpy32 z*L;j~t3<|Sxh3FUtG%A&Mi(iNCpeH(;-Z-zYufZ=4gek^GJ5p=Mfb_KuV4%H>$e!fh&$oKipn#--;!zup-A zq^9*KD?xX|#8ijrO-Xx+Qxn`UhJRQ6hP5W21cB3IEqcwD!NKlPXtt#>-HscjBv}|N%1dO4tX&2JiitOTg`JD|- z3U=>4iX^4S?yOr7gz#PeO#`o0(ZKI~mq_i%&3%E+I^XFV4bx3nPJlXztq=)b;|&g3 z<7FSoHsMPMg28EHBdSgpORR#Mix=*L(DLNDNIunC!@jbAcOKQjRDF`rm#``}@;ZtP3wq!BDJ(`Hq z{nq6u*k6h2daX3fI&Uq5(k#lb9lfPL^03->NvBi$^_-!1MZs9Hr;_vCQeb}o+(l)Je}w!3j!XrJ2v4EjNB$^tiLmvAhNA8zWHL??tb5w zw(-hCe>k9TV^`Pe_S$Q9zxUlKdbwspShNG;tqM@32R^LC*B-m;_Oz;owAczgyg~2c z=SVyki|T4-Ru3SfV?2=!MWVO1UD^Pg+^m=5;+wDkWefL2!5W zi2Rrvx_ybk(e>2I4oE)Lwb7Z=_2{jV+I{nUk0)8XUGU-&NaZ>i$xIJYW^6fz<9B^%#^z6OdC>! zZs^Z}O;Kvt@Y3?OUyXmKDn%frzlQb0;I_-#&-GPsSvvO#9Rml@o0gaaU5?JXF6fTC z!}l{~F&fxHG)vQDlnB#>It-~|wQRsGgNA25XE(N8`4-4w zdtI=Q`8NSaMAKCjY?(xy5SU6xHOizC(=qyTrmb+jD_XJBeRIMBrl*Geo=^=FxXRc`cW@-q zL04PN#Oon}?lWJY#UIv=cX#Xhp*#?C<|OXB|-W7Ked6c|K5|Bpe_jjZ7DpJ*q#T zGO7{Wxx9LK;}g*_6%?s*45878W*-Zn7QfYMXJqs-LMLJ+O;Y`ur$pxUH|HMipZBVY z4)JGcQv660h6v7S+Vy)Q)Ec zblj#~p^02T8Y9)T7Uc@mCS)v;ilkvP*$;tt%+&Yd^4?P&I^`)oE@Qvblps&l3@gQ2 zr%pXvbxlusR>t-oU`3Q!7d`X+QD0xpuTn30K-#K{F_>)#_yW`aFd8VYpw)EzPj(J4 z>eD~_(k3)c z*Z2$X$#$=ijo`%N#JNuR(VrAB5_G+OU134HQ(d>try>@E0`&`IkSfW(&XdF^gC31@ z{)3^x`zO5zeSu}WA!IJUflPO*cvtijZorrH-i*0TQ=l;LtR1Tt*)`BXK40UdZP#c# z+EIMGvY%RFF~$Dsp1iq=7bc8;Ug;QXNB7k}uyLO`Mc6`aU(kiUCQs|1=~2QmT))w3 z$jaSyH%OqY>OBpDf>h1*I|3vvXSKj}703Vf)!K59X zQUQ=qE|t&i%eX6spNs^!RrHHZ5U71PUKJ9v>gEKyEAmgoWq-InsQKyIGigVho8AN; zf3|S`U`eA<|1g#F79Tq`W2Z=Mh{_B8(DE_o!B`76~U(S-p1S8P=&f)DadDr|@T zg-{km(emPnG=YQN2F33AfCf&W?&v~rf7*4tR_FVYw#utXh10Llh-76MHO*l56^A?H zQET|FER|11AxXrG$FmQ4A&3Rat7AGy&ftCO?ZDJD8@>fr*yACDe#K~tAb!vT$}^;4 zl%XakIFzN81%w|br)EXbjUTI|h2_}Kw4n*f+Hbfgi3_nw-#z(PyW1b<;XeJ??qxn* z!M#a#X~J6gY`wpCrI=&RYQknOzj4t}z4VXcysYb9Gh6mA38ZKJMWjb+GjzlfTLq-w z*UGvvx3>d*)0SM~kn<)WKZzp+H~IZ0?3Np5OxD!J)l}S9AA7&b`Yf;F@@BPixW>TI zT3ZU^HN#m{u3U+TEUhrP5N{2wua83rMG_Q^=HYe8@;%?97_BkX^-4dNAqFwZ*CN$O zS?;557*7jZ)E&sVGtlTf=a?Vqz-A`)x28-HqdyVR?~?Z+)|k|yd3UOQK@l&tr3 zH~4X<$&g_y1{(MU&uaW;G6HD^`_ZUqb<9%KrP>k;p?yUmU#>Frjb`kaU7FDkJ%5ye1b^0n%T^l4GS1+XQj&24wc`c~l zhU9yl{F8o1Eo+PgZv>#vlr&@%F+mlPw2I5jJZY1D$JpX#t$$td15Bj4=WO$7G-tP8 zSzvwEDzhMVYyCNTqyTGu!}*O6iyABsBzYjL>NbKYmL{hI`IC9-0`M35;&fUB98W-)W2H0>{n~o_eS$Tr8qF2 z!e5KV`P3`phlpUF&QkzKFFuGcH?=SKk$$sr>;7{9iJz4cb#-{X$Hx7XF5iixLhc&a+lz*V&-YTfwMB7Dleu=v{& zf@I7Gv|b%+AL#QuX21C?)44MnYAlXEC^*)#NnUc@x)tQc)ws!|*318Z)CbrMlT_74 zHz`emKJFWq)%v%Ny4^Dk%~J?>HUho1E6NgP%6@zjiBO`F+EGsYt_0~!Akf_!e4l1i zajMZj_nrqi-D}kl8v;Go;haHm2du(T<1f(nc^;i>zEW%uxM&U!0hJH`DGW5?`il4< z@G5P4@74-oHV^Xe1_73h4D{jW$zEbB5u>3{lpuZ#E-%NlD0^8+J?HoQl?nYjW8xDOm#rUDMwfC?3Vza zlnX*`u6LdPQ({>PPDIkJ5~O*?!Q3d5YlcL}yEqI1V;9u&($I zlE~;p%rsp0TY*{cp0d3ibX~WW3^q8d&t+o3v@yG=bjA#hre_S^1 z|F&+Hd^}_Q=w*1y=|H@fNsxFXd}L4TH%EcH$@REHVS({WAd4%yW!j%D+xN&Xu)4dx zbD+AT>ai{}?biD18X2vKD(^#-`#cSt>#2LIg82Kth>>`4DZb6+Pi4GuC3XH?VTO-% zyMKQ)Tv!REAx%%%QS}OWq?Rl3TX-bkZ0|coxy}y{s=oo$YzU3IR`g4QI4@Sx&3s3hID)FFGagjdUiCgk3A|Nd<11%qV70s@jp z2RDtvNkJR>-c9^Ov~}DgMPKE*l)%(?wO8TIUAm-ErHeI>`dG?4(4mlPx^34sbH(C5 ziu?ua@-Qc=llJa+?>BmbLe05g;?&QE0zRU;)^mOo`gLe}V2tQeZ@Er}fPe^Qu}?;C zw0Y&kaRhK|p*f%>mpF72u!{d9A>34mR*(qu0gd}=P;T|dWamU~q?zJQP^N&HsrSo{ z%ZAO+w^EO?q-@% z?PGgdW&tpk{I^P2C5RlSNB>(TP#OJ*Z1Hy5Yqc(n)GBYr!)|doYZA7qHCw^nvVn?vd%zZh7`_JQrS3Vr0TXXaUK?EHLC(o|1)UzKB(N*cV)#0Y9ciIOvrF^r_lD^6t%+#@)%ryrbyg15dPIS>a8@r$nQ%t0nFdG?nEZayKdr=XgFDtM4_1MWZ0!DXZ*z8QR*~A}-3Q=I23P zZS2-mB^S^USUW$-02>i%g5-92CG8>1j=-TI{j~56=d-`f7<%AYto6iP8WXZfq8Z_H zK|>wFO@o7GpgawOvrt|9udHkNAaLFVLRb>i#GwwXg>*UJcO~ECZQG#6XQO=`dd%ub z;fF*o1(qMt^dIDaaj;JDU{JN+N4bCj%#|zGW z7BujJpcg-1K_gN_j8U4gkjM<(2V(>eW}{W>sKq`8r>H#4gW!bh(s*VkvIvL@ z7np;#8_B9%7^@zQ;ci1^9z>uU;@A~J6aqqYGiJmd?imq=X@PGc>O|D^;czn)85uTT zW=5VJ@*jd^M+P2=*Zq%28%*(VE^+myg1tco$Q^pP-M35`F9b+}jX|hkCR@d3a>RM) zM=JhI|12RB@MZ_qr9Vp|&V(>O1$?oU=1_tm;8;v2Vrh;*R|$)s@Idgd03*0+2qhcD zRrkx+m=JHZE~{Yt$7@8VhXiKTk4Lh*AHblL;2&yPWO{f1*mWf4)L@9B)FK8Kx*I$G zl?SQ5`Tg0sTo~76bllsp8$-X})>p$73>QpAcKL_^5ja+{`$i~gAmjaH@xs~UXo=7%2F z@>HZ2i6H&-aM{~&*MaQ~9^l2>l&us%3DfY@x@_Aq*S;85GtfbvpC?iV{PjVGLOh7x z0MBD{$ob<*AaAJ$AxSN6CLd%oLwJy>0>&Lf!Hzp#w3G9$N=X+vRoO1$g2kqG8I9bwfMqS?@WwAgXM&v<^W|eaE{Kx%e+A4_hoO5D@SSDLHY93e9v@u?+Zt z+Z}@M68+!LZYQiOxP6*0;{MI8COXz|tHhi(bb&_3f3HwByT!2!WH~Q`09>d$@vYAt z1CI29&x{Pj=u^Jeg0mAuMoK=0Mc;xXaw3gF>L33k1=XI`&F^OdSRl}=V~;lSa2*y# zIf|~L_H2Z9t0{UR${nb12(_y3vFG4hdkTWRt{~8m#IsN5&n`dtfqUi4)rmQ&zi_jE zNpU8s=PkA*9dl@sz_(j?K`;VEHLDN;K|mst7^~&&qC!uh}#c&U$}ig z4<~H6*1I?{7AQ`m31NFcS=J8v7Cl~q|IXrLq;iRAP~OU^OSTB|&-AsGJ~G`5$WHI; z|IWm0-H#Lj}#YN1H@%5xGd+ieC= z$5erF+m$$3BY$ItnMo8cItE`m)u)h*rHT=pABz^0fFLO)kO|5~3_bx7C-`%hG9=MN zOiaxB!whiu0*gGi?#XZ9qca48?ym^{esfW$^q`tZQ?km00KE$#V7+yKxINw3ub$~m zb`(F;%Pbo(AUZQ-U` zYE~OHso~x$U7;6eM_G8rr5B+14HXM`G0@L z#uBf}!13x&@DWMK0>~fxKEN#Ts7(+lPU-?CN|SPHd>|XKi71^!pn*eM91dXe{!48n zrB+Ss;8aBQycF04TJRV5A`To%^Ri*26@VG1wmsJXbdzj8+jAE${v1E;9{_CO7c1S# z#PY1;#Fq=3K(yx$gHkAXIQuKzb`ifC0*-k7G?n-HuNHw93Grt)rDNOGLRvsW zo-cbClkJhnhn}Q+m@~hyag2H*6QSCL{eI_(z8xd}4-(heI{K6w_mCh&sT`bHo+Be9 ze;1>aV;P!DO`FL?WNg}4>}R6Bj73McaeG z@Ess5iMkh|+hd~YKLDiYO7#cBI_jfwLddJU&vc-oI0+KvV(dN#-aKMU4&anVZsZpH zh$n=7QVxYoes;SqlM2%1ribLE{J@}R0enu{ywPr4@KH|R9ySpVN|cZH-b)R6ZY5ZPlTHp?m14B84G z1;Iq*eyGG*5+XwIq+5ZUgPb%8Sci!@{X@*An_+yv0;7_HMCZW9tFA<_WWjwStgLS?xv?Z6o+n)E$2I001=?sv;!>(d{4G=fO6`P@s1_(5vZrBU(?5RcZ zQ&Z};6*+yKLrhUgJY+RmQVW4VP74lHv|fB9Stu!ewvxo&)#6ql?0-f4r}27?kAVBD z6z6FL7nNLaLZFC3UAtaH?TV&acl#35(SOO8GP8reKy@ffk;0-O5a6%T4k*^Tr_x1Q z*t-v_pl?lJ$Lm}RV-L7|U$Ue%fwy+5b8}~t2T9Z~iep%!h0BUmIt<)86yGLQS?>Wt z&?r!@Y>syp;V@YO8ybNl?Fj74j6oUDAVPS`T^MoFBF$*NbB~No5>x`TyX5ABe%jUB zb}u&h?&E>au%bd>I4~#=sK#7r>~vQec5Vd z5_ymEuYoFKXct$r-mcHau-aU6y*gMU%|&{kVOGY_!4&RN^izR~z8vNIvxnYT!wZnE zYmVjut_~;TS6(0`Q5|LLtT+B-_KODxus)6it_NJtFV822ON~a~J@}Zr5i(&`qSSEJ zP@P@fav!}l`2PiYm&g7 z{hz(W>}A&TyKyN&<_*t)fUs25S13)yDp>VPsa1Cu%EM|K*eqOyfE}9_s8e`v18ub3 zpSW4}&EJhci1i|Xp=jcybBP8%031}^zJrmfrLUBX27UYKA68%}72`VfiJ1dAq=AcK z{ksY(Pn9$B2Aj)du@xHzBo3EDI&uRjP3mQS%_OT{!lH#?kHN%mqYCQKYXkT{&2{Jh zs$HydJZtmih1XH8ysSa3xM;vfhIv-T3wBJSL3N4zauX zj`aGBn%NwtIgT*+-^J6rr6w>A5ax~=i!pCv=Qn3s|G~IEeNTc>fRG=3C7A=5%tiHc zI`r{Bf#zdd@Ggtn2zCKTg(r^~%``1txz{$HCVwhfup%-1Cb=#wUMfVy=-f zFsb+eGT#JBlhhx)R;gB2u9L>&B{JHv&gXLo?t-!m(o7`Cm^2;wXr(mL58}5jg8vxE zzroXjNd)}enk=^=I0dsE2;~cN5p1k5sxPbom2f+Ajg8spAkXgv_&H{X%>xPZ#HE{2L#=5;16-cpOD9*Uw29Z)(NHFRKr0Y~B5 zRArwS@H?-q3~X!lp0*H|<=mAO2FE%lr1BBIlry)y^{Sy#z_`jCr?>yTL<5MO7(?G6 zxwjbOJ%gV_BCFPv?+WT-A_7VEWk+==9ugwb@TA89;npdF2SWpbvg4y$#M5JaIsGT4 zR9{3hB@yAL>+KznLkmjzvG`mdd& zv1Zx$ccv7)dncV(x)H-bFLAZ&s6!2Cx?<~V2%cI?-S3?0Gh~%AOe!Ur!e>Lu(p3vV z%6OW)^7nrBE(1RnDJPEF4fkRpQ;2BX=wKd6@xT{vto!e*Fsg#DSFjr)%%Ccdzk5^Q zpzW6WH^aBJAVzowBW~Fw1RK`gbh6Nd#ThKw4bGHZ)mlHqs@a2!MPeu6EpMtqjL~Q#LM@LsDc&}51k@nB- zmUV*U?Uqt$^_N3Sdp6*tR6lrc^rlD3%3r8+4BTxPPz!zE*(8jZtRYml9PsVeyhU0L z5E7M^uxqsRZ~;*Xw+~OzB^*qFjicH_n?jOjft6&!SkS%$DWpVV9}V21d|@RY8j%PR zUX&Bqn~!&umpg2>Of1w$L)U5HR2(1*>a#n=!7qA&Y$?jC2MQ3pl<8i^TY=yHjQ6Dp z`o>)qooHnvsBQ;Z5~UjWV!(i4H|niYL==wWM2uDd_aiRrI zJ$4{Q?|al&q_Y*E@z4#l5d?gddx=rUH zHD$boU!YDWU7Hv5aORe7$ujH~8Z7UYm&4`{QrmxiJK0|wdUsE-(mf+S#U-(0jco$K zB_$9)vSde{2JLp>GoHbrMM@h;BC2ydl%mN_uuhOQOM6ZN0OQ9Ta?2^9Mrq&gIE4p^l5M zo{XQ)_nXeVnodM6SN?TaV@nwQp;0p!?ci8t6KJ+Vz<9LkjPly5jP%Jjx9@}9&HOpj zl+yn5XPfg)N_D(>27FxeCJ6}$`b}2Qc4Ya3=lZe8Qw=u!ZkzEYED07;dejZQ{~V>+ zOE8W^_vn*8yDGwAyv935h3I$p$Lq*bp-zWd_$eFq8L26UYye}70rfjwsdMd{^n9RQ zL@Q7gkO3{3loYG!TB3l>N%AG1&vRGU9`FW`GR!C?=>E$@^2xmj6e7`bm){eb$d*Yr4O3#z;obioR=PFSZ>N5K`I->qNqkSMzUX#%nVz0sT zs>=X{@n!P<1&Hv>!cxL9jA{YD_-om2tTKxBwWC3a5f3d-8%yHiXM|eF-I5Ud-qzX5 z)BTiYAPv{m)3Az@B8Z~maBpLo2EH9uF*uUuSbfkJ(By)i!HnDLHKH&j|0ObyJ~5pR zmh?xIN5J?^JG=pvsaIpgPG3dh`bfBUrCdt-bR~HNO_SXlu9D1bA zf-G^rPiaWH9k{uSnejK+OgG*`oyH>2q^{$56e)&Vh0R+z?zip+$pW)HwJy-#uu~}< z;8eZ@ojozGybG?UI3X>(21QuDF5CS_3l*JVvvt$429O~EB+ZjJ766UmUDNt+bVrHf zV{re@I6SwQKrf_Rq^lfGlslgzvv|_|T<9T0mxT9!<2sZo^oe5>)h_(b(uyyFr@be; zD@N`uZEomWMwq88{&W0DP< zCz%5deO^Uw_F47MXKK8T!4yz7wgwK>Y)L1Y8xP8`U;otg%Cy%#!HT1U)c^L47PrJl zn1k7o-G2opzth|ll>}xU+x)JMc(zzD0k;VtjJVmvYzcuqhNW?WIDB6%Vr4(EaYzHR zb^dQFe1B0#?*4mr2Y`cNJ+J@ZU-;yPIZic1*_)Y?zQ)!ST7Wi_uE_X}wyzLHnQwy> zd(lZ%z6006knNB1Ee5!>+cesUdBj98#VPfF3)vMiLtwu%nV|HET@t4dP#$0q0Mq1r zrUo20Lf+j|fH%VByXZr`-@(CLC6m%z=ZmL5BXP)ROxJa_^_2;?cm~P)M5*?7t_N2> z<@{v_Q>ezG7pTxCU!Mp8 zxy6gCzWm{5SA4a^8fk_An0M`5#l-5_uY zV{VD*=u*X`U~SQooFlP&QaWC^>Q#OygNWq}>S7Fda~C3hkAJuhoO`Sz>OjX|@N|1_ z;@6;IRldo+rr@AtOJG;Mh1ovBp4zdjfhx^HOiz>nXhZ1{~X06Jd>)9oGS! zfDs`8Uw5ki`~hxM08^cVR_vbioLHaHQ5EZDJ<6YuAu97G{cYd#Qmk6eROArgo6`Gj z-&kGKoE{2rO6(lrtT;HL5sWfP5aiv3Vm=x!~-0U&`^orNyg!ft2i?QL|M67H6p z-`N8X8$Rj=1h*lBAW@+f!A&!|C*{8kuHNc7@6M2h^8RXbo@&ShzFX6eA&RSW3T$1t z!S(72lB{x$v+$AEW}uEhqw%D_3fvHVhuJtUjV=yhiCbP(3;KcK}BHsa|IU`zWJjkr}tr z!(Qft(P*lyT0;zbXf0$H!9L?oA?{&K*gCSKisVKG)aB2 zljy4aFZ4I=c0u2`&i{BY-u=czr)BU*8YoB^Qg`ywkVYWZd=MBAjR=3Vf60B#rhE_Q)mMpeh6S_JpLp6Do@sp4%07u{Bm%4S;HhEHoV%|n`$%F|_F0mK?EPF8*x5$_erTZsW^Tc_{$gSWb|-E~=ux6}p2 zErbiA!^P(5{*R~cj;H#6-{&|ulsKHq%AQ5`$j+WwC7Tek)3C=8*;}%*GcuA`gZ5GMBByPj_$m6*U8D}x#U%zol~^nJI_wDh7}KX?pIz#Xbm;P*E1XRm~Q zeTN@>T-3q;k{yXmCwSM`SX8mNcAW0bMqb8Nj4Cg&x~k|Mwjqz&T+95?vgGe|pZ2#Q zkH9}K`JJj9dP|FV<8{QblGZb%J=sBgwBp_inw)8Sw1`;GqdzdyZAk}CS5 z>AMXI5<^X!QE96>M=Ef_j7E`CX6!$}{cU!&A8-E&^=v+o)e}g^3g_q_^=Udj|6-*$ zd?GLBV=2Vqq4nAo-tRH4N=M1h9M{^)E24YP%4ZJf($0KX8M*3Aq1uMg3f8^xf$ER@ z#MX7u`em&uSjAiql=^d(R;LNQsRSz@?uL_7yvU6r$>&lsi_pAU-0L!1$%^L?ufsHL z!K%_1+`&;EU>zUo{WTO%f`2hh*?2)>mKP63p@YS)mM}*Yo6fJGKzl#15eQp3WqfUu z+KR6pmDkfgn{Elnj#AIWpktBNX_0z7L4X8G?k@QGy|3xx5a?-$^C*OAQyAvE5=gVe z*Y_l?==ac*?8;poM31%ojDFnyf!nJq!~#Uwn5gtvn~0jJ_D|B$##Ln##Z2CxSd+2t zCORG!M|=Y&2%#uw;rOqL=F!$ZQvq!^5^}k`PNQO)MK7%M&G~Sx&0b6oaNhc&5+z(m zk6---JPyg>ADTx?9s;3mK#N@`<-)s%)L?2m7W2BRq23iC6%N4t#nAFom z4qak|&k=xen4vUv7QTELg!%a5rtVjf*03uk>G(9)z6jN-TR(r`0B2E9Fx?gTU^MhdyZ}N z9jMc9a-tS?I(XS^ZE#r!mPGLdn$=>AOr3Dnt2h33D1PuTnl9g*L_)`SVX=V?I8{fzmYA>-qscNhFPQRmq{0=|iWsels@ z|CN0nv>xGPT%>jkdQFx@9qOkM77n_{p*MwL{TU3ykWBctUkz-6zRS*R9JBtYyD>?y zVBUa2+Vxu~xu13L-u1EmNFsO)s$|3!;a85%sALhI_}8AugN=>^agL;U3nQQTu%~U) zMdT@lY3D1G&i-eXh(VY}unwY_QOBOqJTRbOdWO|kQsd)raulb z@uirVlQm{Cg4j+Yj~=flo(^H%J-C%`-mtiSE=4XAMl@mBgshsvq1Bo(+?ec)V@E26 zaLuC{_mkEv3_jTfoDo<%4+SmmL+6I^7mV(RFN_(lxy4`R32{jpBTNftlm6XzKSm;Y zuAwJ+mA%7$jBXD{6vJfpoiyg>juMvGC>B)EK2hI^=g@GM57^q})<3#8MoeH_;yR=C z8$)I_b%!{zhYR;GjadXJc;Zue_2)Ofx|ICkyvI2cG&Z8CJbwV3p?G*oc5Ackd{?V; z_A(PoS2%{#5+sy))!)z(pQfz=&D8R?sNJLIA%BDAc4zOM&mn#(05`vcK5K%O^dy6w z2D8fsH7eHquwDR&_=*s4QC6=|LBCxtBEcb49-Zrp+FcF7FAe=%vS~q9G(;YKTVb*< zg3S?|(urvX;c=re80kk!z-W8s_}(075~2=$yJ=c)vSb>DT4E~KA(Vc`AU43=;CXfp z-J>ZLos_Jg!kC9?j0}Cmu>dt>_2cu30XqUl%T$B%$Mm6db`Nu~m8vnMl}cvXNTd1i z!^L|(zYM1MmBIV#0V;Tx_*3hd#^v)qPf>mlW@&;^@6w6;?kW?*khis8Pg#&`O9@TO zvnDyMF0}Rfilv$;7u|VS&5?9S*r~mKE>6rT!FISz!g=}t8ySEzd&4T`7>9-7L4bcN zjKU_YC8O_m1{#H3mN?KdNr`3EdVp-5G5nd|sF(m~pH;iXC3qUrsf3NMEbJ-VCrk8h zl~A8&ZU|88x%nluL=PtNg+6z;lHT?Jj%<|IQrMjGI+ zVbyKN&gbhguxXr_ElS)eRE;i#rja}Vn~_lXiM>`|&YAOilY?4-K^V-b!4i_deEMMK z$p{sTEb=5_8*%dRkiES1U2--4D2I-^jk0R;MfXrEqOAi22Q`-W*I!-@Ul{(iM6$I= z3@nfXH zL>e)BxGY8P97pZ{3>i0@y%uX+}Ljs8AhU_;XJ;+k~jZ-yI@rON)X zReo(cK+EE%7J1IJ8os%lfSgK-#4Art%7_-;kqelkCrh-?CQC2TLO>^>JcWLnPI^ixq2t0} z20Wm`2qoR)22XIpj>kXN->CQHR)im_vdK^cMo|x-1ig-TClNCg4r%#uqYQOzKQQO} z-|27rT=&Ii3z#v^BTr6Jo)U&8=Vp(`f&J}qCXix%u&hW#n4R@7D8MbK0@kz(yv&`@hc;wg@yFC- zT{wH7TTkme@f_;FT;|t8%`^@jE|-v1@Q2;tF{RgzK>nbLIqlH`+Cz8Q9=C2kw@cav z93izop%Th)cDSMeS7Qlb=DXZ;>!Wx9<0Ot9qGlqrqGw?ofs$G7r3Y3Tq4Qs$Z|5Z0 z&2VU%uY@mS=fcu90=)}@mZy>MMuS1*E8p5A8tL1MG$z%S(Qx}r7i}Dckg|dnxKFOpDV~Gq3Ih zMF9_%Yqli-&zrXusCD?Gf`;?zCVaA*OZYmaL0jv0E(QICqudBGv222GoCckEJ25li zuu-v=ykY`efWZemK`r>@tl4g;k*&j_>I>Fb%fMLm_bYkP1#OBHP**n zpQ=qkYlr@~Yy#5TmzzmoRrKiad6nmRH#+IqDFLOgAwP_79*41P^=%LJCi4D27l7|h z3v#fjqVbOJL!a3LVgcxCZ4^83)v{s|&fqWJ3%xNEI^MwP7$!~wZ;Fp?t(#S8pit?# z8$~HeEb8jlu%qu&;d?XU?mI`Zu94Jo1`O|VYpAk~QwVR%8_#a$DSrMBm}YJq2S&x3 z*TTbqd&N6$$h|lNSx+31-^%0#P6f#ugIs6*G{d)am!X!^+cJi9j$8S@?ci(t$o>f_OW+T`ei=vYE1vC{Vsx#E>Fm+1wbxE#fQWt~~$ zz!?9s$e>S=%strg55r9m0SquT-z1j_eHp}D+}X@UYyh_=1nzBQrbR=)#?_$fYrQ%U zJ?_EiB!rQv9_oH;9sxO6` z@BNcx0w^-KzKvC!UfY?V{7mJhx8wmE)f4smS3n_~8MSvG{j;OO80$reXMo;uS-kwG zdzNeLc}2#|L(*z&+7zaDZ0}Q%j6c_FN(BpgsR3a@^Lhd}(**Jg_Vrg2na~A}t`d^;5`Man%emGufedZ*c z0560OH=d7$q{4U3);PxV4w@g~5*)L~QFX${Bn(JoYe@W(#~AL7@~IIXqv`j0QW)bI ziRpOIC-CJ<2o8^=eR!#FNvB{6AroEIHt^{f*Vjj`+T7{sAz>;3$fJ{*k~)qs4)m>D z{~!Ex(Fo|f(6jD|Q!wUg-TWX6M<0t(>7{u8?H>&7FwC!>$D1EcZz!mg;r)35!Mg}Z ziniKQpcJr$RW$bav}2yd3lE7ln_347g#7{d>9pmlr;N$-JF^7hK$sW76Tc3nIH(ft zZmmo)z4BRA2Ogv@m1;tAvPtCyNW}eNG${(utyYf>7z1<~)QPk}QS5}&$Kl}GR1;uz zMF1g}JOTz7J?s9j)kLH(fuQrpd!x%G?SH=ycnhHug2?QE25XCl060R_-H4oL|GoYE z?3E|Bufr+S4G!R0C?((AS{yKK3vO9T{Ru3(x5e9Xx4!i?ymSa(hyE|~r!c+OQ*e8o zfId-4RTluQq`!~a3~*yAsBb!vQtQuO$Y2S6v#Ze6yK5ES0n^hM{=lgrek04qcaAjG zTJoJDJ5O}g*N#7z#`r?1SQREK>8dLL&z^%WZ#RT?-zif&oA2=vzjPnToP@(%Dme&< zGNSJ1ZCd4~cYOcCV3g}FGlOk%ej8l)+p{k|aVw`V=2(|z}(`=iuTyhRE&Vl3AxQU-q%eU)V%SQ_Q2qT(<~$Q zW!Zg~Pcc=#xG~R5F$u8A7id1!_ZpiNDG}SgOYdQLn5zET{0P*6nPR1x5#V6XbS)fp4ccXW5;#Yekb|4ISUc|l(I*4f zgnPr+e7OwlexAFD@GF52oUN*s4iRtypT--gV^eOu|2@&*>eRs)qlipi?61>Lj-O{D z?Sf=1W4vJN3-H2UgUPOQup&&jH6Rquc50q02`=`P^4oCW4CemE$vH%y{2Rz4Ov%M? zxPJ?Nu9wFbKENkx7+7e7!?Yo^qM)7-9D8q8p}++=HfJ#5U>$x6M(_N!I{mn3KR%vG zs_UIlo7?_AydNqJ?>uP7Hl#hlnOxwZ?3Sxn`g@@ynvOSXKM@iH@z-vTwIB3lNK?;A zQr6)j7^eE(kU}H1^_n%1X2d+VDuCtIlO<7+DK^^qm9dZ&7MDojS$CjeI93@he4C3q zB4=a*t@H~lN6BT;XAL=@X8Q9KJ#$suQV;7CgvL0>o=Ew8Ag9(c;9Ho1H4z6BBC@vC z2O42VI`#pJ>LK>kDxf;URTg6h2|o?#Ltr|)N7>&-`|cB*ckeEKY=5po4+kJnV#PTW zsL2d!(vf6Tsh-Ap?1XK4T7e3F=VwvpIgNdGtmsbtBl+b$+JNpexf~_`=<8>Rzp*I> zexf7IJbT5+Vju`fVc1Z2X-uOc%EGll!{Ce3|0IIm=0|ZPVerPKq4hWL4!xljSMMdp za*%M|r)SULH!hj=p&=GDA}UIHUB*+A_c&vgrw(#v+?j~8F_&LVddEhO!a0zIrRP^R z$|!K|a#mbj6i^>AoGkhXE)&Y!5!~u^hT+$6(?EKP%SRXh*I-_SW-3p7G)*y)MnQ5| z!Sy)A-#cf9gKPEsa(LKqu6#foMzbJEeeMZRl+=6dp6JBr)I;%>t$C>=qIHWAt< zHCR&q`V^}8R)fIn#oY0_9zX^aJH@DWQvI(;izxJwvm{-Hd!oWk7C84(zktTQI=U4% zAuajmz5kR&AYX#nPvb2Iv`DuDMYD;y#lBiWY-C+k{SRYtkOfIf%E_t{d%! z`)Q;Jh|n z-^;?az6OsG&w8|K!e@U$!>wZB3tqEI#rxmiNs~HN2em5D1L=6m$0nQ3wPjGhBHl|s z;|vGa7%{1h=se?`tNPK2F`ydy^;t&BogKH?yjy1n7IKXPlQ9fqx>T$un*YeG%|#Lv z^PC=u7BH5=!U(6aJzE2bEzc!1qhwst#T)ehUbzC@F3M)sPcE^+H1>6)!u6c~_(ddf zO~URT`T$K4|$MK-@#ieigXqs#@>(`rsG}_GZin*0VBg#jpCmPVK3EeR!3#;~tBd1vz3cAYFO6DB0F4q=Fca?pBB%VnMnfA$< zZg{!a^e#Y^40Fj#%1f_a7-oDOcXF5o9d%aukA6V zXxaiMrXp~RQ(eCXqb&-S`Qik{%_)Khw83&s03TUHp--uNc+LY_Ia!S zwRE)5Cbpz+^N-un+)LqO&{7#PRV9p|O{x#B-gc1h2@w^$pGLu1S$X^MB#lq)v*(PR zrzug8Ej5`azVB5a6}<}^!1X_z5}&si)dHQq9C&VMAc;K4|ALe~FAAIw0pBR#wBJB8 zs&98Cpdd_cb!zPECA)xLM4ih4$5q6^@bjCXIE$R`M^$N2+Jx;B3=D`JXvTN~Ziw>a zS%*S8hC7T`WlXHQaeZ;2j*Mm{z1MGZ552F|8_lj)?EyIx51+T;f{#B}af4(Jf%cHr z|9$6+bUKUWK%Se`d@06!t-wp1*X@40)lx~^+hY;)K$rb}l&$)6(UJ2-4mWVD3>W*J z(@$k&m~j+OaKJPETxlkDFY-nt=%zC}43<`rfHA9yGU;j>Z@}LeVqOYMC5PT?!RK?9 z8N6TR29o%VW&Cm_?n3nN!a_aBXVRA%vwisM%}B-mzcd{qiFf~WAH^5Cl#yUwcJjY( zBe@WoXfb^`6vLHEFK@0|gBpfQJf*`TgEEC*hhd+9aWdhQ_7Ehh9R-8h9S*=hRcoBi|72e)WVBxyP|ZeNh;EdN1i_7 z;BvLwpD+4leh4SBFqC99CH%|E=65)%Tum)fmlXMB%negb;?-Bn1{+m1pSKSe;Udg7 zle^6Qkb>2Y=O=JMc_PmL&L?uDurc|I^EVqxHFT_`xDd2|n@-RDA!$m&$P=ttu_l)D ztxXxi0;7c-`SL^@OSAXfjZCcmg*Z^aWoWB>+~>#TTmK38!F&%iq*%<%XEma+Om|9W|6V zXo%65=5T`?f@F4V)2}VC!W>i=LE0M{`3iE*!D8aOKT)DiCxocgZ6SxI4EVLu31DC{ zoce1g*a*|~pF0<2&K0H(sE9((Dg`yp33$q2jCogD9>UYRv(&i4S8VuSAzzn7&sNca zJm+l?>9}^Bw^7v`RjW5LgCva=_!-L3wAFn9XcEqtZZp|18h0r(Wk|biAK<(KkV2^k z+A&^=xq8s6sm4eu%EDqBq(|8lms?yW4ZcLKb{wvfMrqp##~;^py3$|o9S>Xo-0Zih zlz`*={QRW553t1EWVX$;1W1|or_6^~-mqXW>>W?XbqLt2vK1YEVp%pHl%CP$ez&)g zu)nn}!5oFrN{EwVhEc%Lxz!dgsu@m4SgRM+nw(z_=6Rmpt5DF;>N<8Fch01*-fTXP zc_MHc`0GPaYbG)#>Pp@q#TUI>rSHj-qfuL0=B#G2vAUqif-9}6?>=Z5xeAja>2#kh zpW7_9bc)1$2Az?YVBIC*zk9S2S-6?oAmRhGf)ek)opE=9j;gmz)65jgU)|$k#{7Ra zVtE-;Y<&Mw##jNS0&3nQm+Odj4sy(Z;_4C`)nGo$k2#XS+1ppegRx%X_*{AXbPF+A zmD|jTNxxG0l^p4tC|pz{`)XRexyL85T5y|J<2lJodKwhqKuzPn@8v;X0F@>6{Ng}S zK1TW3KulmUpGx}zfG7O zD#(y@?4wUreo!uU!7)KXgmoz(l}9hGtiwMPm&k`RDr+$E5V%>%w1H*G0_JnR*N<@oE=W6IPVoet^{3EYqL*~bz@9{G38YQ2fd^VQcQf$UwX*!`<1lA(zyRvydZ)n|DVA4%%#9NIeI#5jiep4EEu z0B6E4x4F8YlROeL79=oL;`Ssm?kNc_54E_4A!Kt1qgn8KJ*f zicJYb40Mc&em_^x@PV%xYH2o5Ht@VnwmZLS)^r;g^(()VffdQDeqcX0DNOmv|5Pdk zC(8v%byxExs|$Y-+a~wAm9w2%8!>0ryDt~#RCE}zMsDogh{W_Zm4ozMjQ{>i9tR{a z)BHpyFcZIhKmwwrbU_l9K;d!u1k7KMh)GiA1(6B6b^#XDoe*tR)dpEb;{!s(F~Ehu zkR)*Lu?2q*^tk}nJ&*EBK5dqK^4K%sCgxNrMAL9^LeiNgNr<(^Pb^99{+woEZmG%!YNxE(= zrr5OULt%OTcvSIq+$H`~!7#tAq`L5W+=+$p;fA*_ii;5FHY*+s*3Y>*f%K2FAmklKYY#DX;xDC)lzsPfrFk@dD@AA zRH)WI<_cp3Q_K_G9)dA)#P=%1Ue#t+uiRjy42oN$#R;@@vt& zdtcu@lfyM~e-bo(Z4>Ouq7Q^GOu_IHTk$7HgpWxjAYSDgap$X3 zg^ni*EFhY*u-%v6xdsg|}g2Oe4+5%hI1&4-fU>7o%TU@^*l>7CxuD)2^~G{lm7 z5y?Iidn^ASfP*FzJ^q|jJ&q{mH2EL?_oqZiuBV+W3bS@(U&Dx(loWqV;?ZN|Ou7uM z3Y5l;ze%tje)8sHed%nuz5r!3u16g^G{HA4%#nmG!cnvs`|+qIV-s-!Cp|_KoVz?kz6g2*+1rR7Asgd1 z^&>iLfdyy$>?l8nCd54@(8S?%+Zl4APed+6V5Fl66;Dw`8UdI1`}0`+NSr$8ICJO= zI_l$-9pW(dl*%PS4hv?G19RT+#Y&utPQpr@c}{)*sgwF^k&`Z#OL_oO2W)0JZ56*D zO8-RQw-yacx#5#ZD{k6VrZg(+U_QD#_>8RLsit$}L1xwi!&ro(N~L1gAz<7n`o2nW zAP$$#uO#-hN^z6Xjc4u@d&uq_x$)_T$)%Ouy?p-=;Kpd8?OdT&B44sEOQll_exHIK zfH2aVg?Xx`osP>Q$y)N>|$bKdMvVgPfy#_CMMY%rA-s zsZ04@-3pvIa(lRVhw!AOr~VPHIOBP0A$t)6!_A(ihq@C#T${{S+ufm0tg3G;yrsbw z+usgu0%3m-wDOoPn@WmzU2d+l&?Zjdk2NDnS#r+2o8BOw>7B9p#y_W(ai~d@3Yqt* z=Wj172=+qD?%q{mR3b%RGbK&`y>O12fET3-4x^PU?4noBO8K#x*g&T*Ci_@&Y|7(P z^wsB%s1CFl67Nz~a9ny(ZjWa5peqo#}3h*L|to?y)>t zrLJV3Wf9XQ7dV$lcm>Wi#k!e;%zV$pP=i??y@0ng@_zi8Wo+e389>FZJ{3ghN3)ku za=SewNmUjBZ*aoo1)JTbI8A)xd}$>A%7?;ElyXlycI&W zwU-e7j%g$ZU)alx*t2Ex)-)TI=+{cN>vs9}8qoUHr#PPe+AB;%&=!uBfjTGsEjzpy zQyf1fzfxC6M~1mG%z&@EhWqfJ5ywLOrutkJNXdC#ONlH`y?Rle$OlgwlcUtArrGLa z==B#w#{(dMzioV2PT(~Zgy$}uLPUM>1nWv~hf!NAr&ZL}MIF#(-#4j3@k!raIli^J z+W)A@1loU$6miT;7x=|)7JeU&`yYF)3B%lJ=%CDVyxXh(V)ml4i&}t|iwM%@`xa@O*^h+5IPKHW;}6e3 zuC-+2dW#W@!?oM|MeIkZ)vP+|w2;53?Vp1>UO`vp>ycAY+!+dRr4Jobc?dZdfWt=4 zy7kM$3SlS+qA%qT#o&ld9eH_p%$rkK{{bq`C?;bp1}Lk9aVn(HaAE5~@2vh(RSf=f zVQoH^g?OXwFO@g%HRpuw`HT;%fZ3}7;Qsn!QE4ndzl_8wU0W3rrogK~tOA1P20P)G zvUAaRU^l>qLqtO2^D1v%V3@x^$3KGALt5K4hKQbxuktf`4i^zG2AiC0Nn(8kirb4s zd{#|uTen*!`Z4(-%7X{_eGx-9uQjc5o$C*PaN5vAndyP}6*5pxN2q=ONol0aO%qXiM4q&bq zO`ckxfpqUp80j&CXLg+*rAtf@)&_wcZAw?`ZlO=6>-aj2G#;#6iu2t*52kYZz9D0~ zT3uY9AAqE=x}gm*^rU;k#)K5^OFOEdgGZLFW}K2)TIY?NE_FBE|BMb1eS-$-z(~Mry-@kP$O=H{6!3wIDMjUW%KJprO&nOKRSZmYlD71 zXLXtiCx8)m{l;&87FN60Y5bTqiNYWH4B69VMx9oz?<|gX856$5Ic6^-ab_)h!t!Ao z2hDBN#B;ww*1gBM+^Ff!C`FT(&tJdv`ojB$Vof zKp0pAbqHv{!+`+fs*QX?2~8wmiMjj)E$(?Dj**+|A{!f4w45enw>?!Ms$sUCK2_WB zS9Itm;w|9S@6?V`;-<@y3SoSP1omAWTUwq1EDR3VVLP1`Ib#zHH*nr^Eh>>y!@sr9 zIJ7U7x9O#T#q;9;E_EIgY7RB4Lp|kv1xYH%e$aqbwucgvd`wolPE40^;T8{Y2k$xM z`jJVv3}YJQC63^6JZ-*k4__y6*~rE(hyC(_LC?*3#~H;jNUs5q;7CBQ<%@%!+&o$d zwD=b@Wd7Tzu0(Q1sk?(coZgi{OwCO9n39XoW}w>J{erJA4uBn!qcq#iDsPy?t<6U{ zNU`}?A)>+s)CERVeqgR5u%z}y}|Ni3Hy zeqEbQa0wyq^3s67I`|Mrx)lC$kRI9aY^Lb*^MzV(#!p%eoDRA-QaO&rm+=s`w)>dd zQ{TuDMqUVk^N!)q4XO`Tt%0A1!zV$nRNl~8pZ8}R%6HvjYv?f{vww@2j}7;rIBI~3 zBJMdo*{21x0mEl@YS2gI$d|lRhk>5*vAD|Xl#algzNeHfU=}u@+w3j}@^#IJirN*W zL_};vTB;W>pFgvky3_(JK-}P;;YMV+NGB7`jP9*x&p2gZ_0t_7n5D+8YjPUBP8Hb`->HKdQQazFqUsKN;(2eD-6 zHDSUb+$$|EO?%Nv2Omfemg*<6tK6T3OtK3QORuof>Z5}fd{tSaT%unV(%89?jR9D9{S?l<|R zQSKx$D+c1oaV9e8iwft*&2t)`>P=D42mRUN=ekntd(%1?kpz4Y-Xb85HG0jV{s6ne zH6Eb`ff>Svtg=MSz~YKCoTj4YPLeW*b`HS+m56{*YT$b3X)vC_m&^V;ez8&6gwEL9 z`pUMyCk|%*`iZvo9B{xPEM!Sxsf+cVlCj-(Ve2TLxF_L&?5SB!V#-9n4WdV~B!|C$ z`=*{h%25&PxQSbChz|+T5G>cXXM~>d4@M9QX$F5~6MV3+(9nm%tuXHUn7GB-~}c-)PwaGq()1 z`Q`Dlw-*iIIuG-rqtgCy*E;k==k1pUbBV;s3VZ+W+WTl(b>BUSpcg0v&Im^&undW; znus8=2zD5ZVI~K%Fr1S#_)v;TylfoN1zJuL4;`wg&{PVqJnt>%{)elRFXiWpw103b z6hU=Ef@m#=pImu2oDk~{KEaX$e2Cd|1KV{i-Ws>hqOiA_Vd}Sj4OX4x=f@I+9> z%cT^o$1dFZIT6qrS10N4%&y(d%pGp^lU8T|-HjoC?~wlynkKdK1>R<5B{4l4cto_& zuuQRbi{_od+KiQtUx&tMaP!wwV@2x>L_-zNZw!%v99IoM(7qr5omD`0UK8-kLja=5 z*NkN?2p(~64%!n)w--o|>(7A*|7#Y=aXQ|LO@`=Z3IVfPG-6N+c^+CF&5=t){RW&8 zrd1UIJEQ|Vs2y6r9Kn-}`AA&)q&K^9eRipoxWws-xk;O&3P-U`BkfB-GQq$q-xh}6 z_22tkI}T*Nn%IBzIfCvbuw9d&-2Qit+e+a*7VifyMjA^;$QE$W-0hFtr=})Wmp6Y6 zY!;;gWu-?lxgkqKkxs`4Ms=VtK?oaxP}4QuUZO<|^nm$e2fMci+(GJJGD(IsMo)vm zP9=0V2Nd`XMk}uNt3Em^o(b;gUF%eCol^qV&GbN?=mb$3FxXGMxR!L}UXsLx(n%-k zmoIh82!5T4S>mlx6>{R@;^ZjRCARkGA9!~MY*UrO>7Zc^R5e>G&66w%YrTVOM*%4u z?Rf2!OFmh;{RQo!+n4~OAr4zb=vH-aeg}&P`PcSe-|i&7U*eSZ-{M1(($uUw&`Ie@ z<4?u14L#QRetXRAObFzH!fv005d#$HtGg81XG*#=y4<>Uv;+v((H^aPj%%40fZZqu z!$rV@jSCR&@1m66SCO@qa%uLx6rNorEq#PK43gc@ubYo6sr;5`YaFSdnp2o5IR>X4 zM;rm{h7^xxr);;bYs~+;s!1#A@Z|XQQ-(cBe(CHEaea(^w?xy-988?qQbhYRx$Q6C zk8)MhZd(#zjMAH2CaPG0pd)<^tRQ6mD5wFmepemAE+)@QO2>Z z3V&Y!4hK@f8c;wvBo|69%=~76YAS5}g$y0umL`gEJ40f*ZQi~$uziiqdw+4dMHaDc z1G4cP{kb4sv8^KajnU2S`iKJso4z!q-4yz};N3qcpit`a)k64Z3% zG=Pi%r8N72XnZv6bs?HXgO87iI`&0vEe#cZlPC0bfSwbAwm|fD zFyvHzr}y)1k@FyhInIB4+cPZSPPj`M{UrIXp8oOT{cr18tMz zx*9Ggp>5F)34eS2y|Je@Z4o^m3seRwt_m5_61QQ&-AXFWg^z$Hqh^TjKF*TP4NqA86f-{Q633-C9*mA-2xt6!!_DlI!kMj2SW#)_RLP5R_@aOmI-U zQ^vRE&J(qNx5GeP+}W7=9eC4YV0Gwig7Z(dq^I0 z`o*-_?gPH$&F(Lb)Y%fQ_kp;SEe;gxyLUDXEaw8?7;G==0j}z4*ji1UPJjLat&{cy zBSG6fdfTrcPl=Eg8Y6|I^aKYXRX~pIJqF*Gd1fKQ@_%hZ2K-mkgtKK~zt&h73k-V> z47xdJ9uV{uiMtcbYy?D{|GseQ(rRTh_6c=gcC3omOc^TCj^#wL~5FpDgeUbt?s27ChOvVgBB$60x^})C%7ZB?8g0A zA#f9>WCQh%X>YtX2opQYej_1jmIwdxR+XFRaod6uT(Rj$nxjA;_+oBpUd~T|9m!X~ z2VA#2@Cz9*F;>>i5brS9zUXuUf6nWmMrt77d(Ora?v{++)1DpV4pnApJ8wg_`*&|@ zv+ZZzx@?^+kCq*U-_4+34?lGW_dg=}klWB25G*o3Ff>>~T6>)Y?5}BAbkfl)&0=Mm zBcBz~09eIMz4AdOb(CE$9}H3$C}42vN+%P|IQZ(619`=ipBoLF7)?jq6Fe@iDqzCQjJw7f9GN>o5(@WMoT z$$C&YK@{r!QKN&nIQRo`ZB?r-O5dC5$h68Uw1uD+N#Vc9}yaIpC; zAdH-d%}f;dD6_c%m8-cn45Frm_B;QL`cNeNVar{U6m|OGR=6^+{r9Ecrem6b+2C*t zwDE4gmQ9#F^=E%s2=rB?AUS$%{*8U729EPNXfUb)z{r`Abe{!-q)HdBxbJ5ZK-zXM zlEohbA}6)w5J^736tio`Ax}e`hrQlciUnRh*fM6j@flB-8ouOYvwy(BMa|N z1LT=N^M8Cjer^dgopB+Oo8L)ve|~x;CG4On?0*?Su_)LHm~X8?_`DDku8YdjKaTX7 z7!6eEO-Aq|+cso17Lj0%Tx=3~wo)J{x$&xWR`VyXr**z&a!4DW!du8a5!Nb3v!wY| z;9l+6(iH$VuF|!1H$_02r=k61PBf3gAk^}O$C;h~K7VZS=zT!w_Wc7oY&=UD;Z)^D zR5|N%=p*DpjzaGDe|0>1+tA+h-R!1i-;P7h>d?O!kYPSZmvA?SC$4;jqxdgN-6xCM zAz4W`OkXD5|6Ol|lRdS(D>E$spu^8xh4#xEu$`wR(Yagf3Ojt~sQeaY>(Z_HrB)u)c@e zV+f`T@JC-?gf2QvZMG+w6ME>lT;KU<+dJjKsstyLr3F3lOUL(F*}sg!9R#O9dbBs0 z>w#qY#MoUSJijrBpWs#~8Q|$3bPob6d)$=}uu2@yNLuH#%?$xh5D#4mN*s~GEo9+SEr21A0%4wuQ1vJ`2Mr^tH-%dT z@N`HRJST7G12NDRw+FZs17qoM1+wbH*@;(p>*Qu$M<`X9Uz1jviR8i#`Z%t)-77ED zPDj&nqd+)kR2&sz(PRt{F4ZsK+6=+O?Ut1;dW&#rif&} zV0RoK_U7$V!mg)kf?j>4HLmohOib{)d?|{ch*k$0KMZ>*0N6C6lYA_(E2@OxJfG98ZJm6m)C1%%wrCwqFuU^yA^ zm`zX_&S2Js#>72djcNv{0R%1r>huiA#A#=*{NQ=;(Au8@s8H>2mpn!Y5CzVhTm_!`=p*v(d z2EV37u*;&?%LVArx1lNRc zP0+Hs4zCqpK_14=VSo$`DCpU$(0#+mHv#097#zQyi?4{0+9@$Sppf7j}M6CX%%EL$z|C|s-{YNqpz(CrYtp497kIDp_e3QF*WK^Lq zZ*gX&!F$jHB0OS&FyU#zbRKee{71T3^~GELW;bTNzn^GPM4VFLAK^1vq5C`EeY=df zUSF1e*$J~q-|l_-yW=A|4?`W_SN6ZAwDj&l_r^<87~m!wTpxb!1KyTV&KU1j7|?t` z#7*(3{svvHfyX@kO~jKNlLUk#JwER#A(R5#!IGHh6iDFHTbVtuWWzp!4dNFW68$gw^y3 z-G~L_wzYRccK_NTY^Z50U;JR>F`sMLQ+_@w;ntnz?&hop-+P2>QuZ{Jxw`C7=|Um?<7vqX?`ok|Oy8tnx~Q4;ksFo1vM zam(t@ePU?qToaDIrhqQla%5bGbYn9;dAxz+h5Ll#j~_>MHMsxiAVw?QtmL&$=T6sX{_gQ-`?nICxrAvs z2T0^~wMWU((!tCSBj(y-l``^;>G1K!kxUN?O(bRIgy=u zW*CYNaAKv}S{|c@beYm+#$)k6kjl5KP|Jq{t8xD8Lz}zz-ff8VVZhg|qqy#Jy?2J5 zTgLIoWfQRdi6i<9V;C*e8z3lfDuCx94WyNnsaV$|y78<4>P;kxyg$*wbX9g;;IR}b zKx@!4T^^0tHybQ*_b=alWYB+qKhXj8y`QAqnB-|I<O z3Qr$O+&am)Gxj0Vo+1e>sjJM*ge>1~o!l8>xl1Ak_N?^RH6ZyArPrgS3_wml0Kq50 zKeAwPdLZaSo+9h^@|e^Ovb@V4P8$6Wav;IODBz*sEdXl&z@PZ~u|~wE1>5qkY$g6n z*Ld?y%ze4LeKGePE<1#SHT3CpJ26mg~x{$X|pI<_5ASfsuW{V;5LF~&^ zQ~!r=p;UlFi~vbw#TvbFXEIJa8hN6s$=gTH+MIBvisNyWg={&|eoyLbq7NuR>;!NfoH^4WAuy~Szvsz~!{Qg)0(&J?2prJ+S+Jh@9 z0z|NL9ab1)qvAnXsP@|;Oa1lYEeV5@fJh;zuU5h83T>(MN zw5pQ{h^Bzpc}$6V#TD^0;kmv7OxdaL&2lG>K~?p}j`7W1n#${wKqaoT)^I`ub-*rM zpYoZB5G0{G0#tI8Z3#rSAK7fXj^|(3S#9wi{Bv7w#~hS%iX-^8lx=Td9*tJjN!~<` z{dRVs(i4K}K+t*K%H!uPm@)FHHAogQqnHFo^Y)vXExQj8G5^3TAJ5w>lV(hl!Q2&y z=Sv}NRI#(Bz$ANDz&dbUt|R z)R4h`rIDN&j92`Jbir&a+e96WnYbkM55z%r!rW{!%G*|ORRwwXG=lhd538JemdEf_ z7Wh{y8z<6+c1nXLU4hUuB~JeR>}a9=jl{l8{K<1+L#6&u84xKP(3D;6-~VFMyxXR_ zi+@zE)yUpSy(0Px@$(S`k6f#|&yPf}YyUc-nu~yNSxUvKDjRHvFg!%4jp&Sw=|JK- zMVNis=l$(vL|vPCIR?I)Z~F_V$@34cTHpLxP^A#GZ@c&rVr7f0b;#iz4Sh0w<V0q*h zxcOcRIU7|k|I0oJXvcoCEC~|elN54%5iMQO|6MZ%ql>DwPVB7C_>nu0<1&QX$A^<4 z+M#np&qN%I*@RlHti$!H2RgKH29JGnp8d|AB!95+P6#pE83245Xy3d^R^{%HpSCTW^R28xJjKdG zWH4H}W?8>?YhMD6k2fYqNG6_*rg|VL_Ou0R;i`>U`BidivJ|dp#dgRG3!p^VU3){F zEM(J~O?A`CE=y~4GyVhL?av|I0PgF1>3x&w9bU5JmT%P#!-+2kTM4l0zv32MxW^bpto{QjB7Z-L}1uB%(vdox%f5Us5R*|z| zu5v{t#vm3SwJRz6?nJ5og;7^T0GjaM>O!*zU*2rpeHr%usQT`3Ec>v3ZZ~csv+Q}B zY1m5kxXG51S+-=0?2MGXRkn;oB+@W4Lbl8(TUPccWySBj)bqaY?>PGBd5-5f;<~Qy z`906i`59S5$yH;T&GQ*QXcl?}{8s6w8oN6H=OKjNG5bl0Obtg*j`Fc`UU@2Ep6Rt@ zt&A+OoK=6X{?L-YaOrwR{i8GWG}?IGGRFjkg?SeR)PeMiwgi{{JrcURaQ>v(4X~5xufqw<4SezL4fNWa^P+vI-Lf1}wd!M&^t!n8kR(10ymxN); zslc>ne%Vtt+#e0KH)0EulRn-2j|9ktts zDU5Rn=wALft=;gIl@P!QUbEXVpnAWp_;@t{H;w z;|XYXHc}XWvwUGhV%e-Hus_lz78b9b$@|05I5?oFQaoSnVY_=1oxp*^RKtB_quG_( zK*yVZ;0G;Kmn5R z*S=45%kqZ4a?bzZ*8}=d>al7oleMpY5?i9@enUGzG#|fN^Ee*+VpkH3+oGb74L15g z{o@-b?;j}V8p78%H=NmM-|>-wDajXyx895r@|F02sd^@}>A6^1;bFHc_*LR#)4~w` zh1mUN%_@l9$Z?%+wxLPlWRzg9bp6>xqdi(IuQU~(7We)EQv|Hy#Fc0GH+z>cRJikQ zmT_sty#mgK#Y!(r(U$@8~O8Wy0*sak-)Y6HeFlL`U zU%_z!eBrQMn@Z%^%Li+R2i=&*cWA>hQe&CgOqeU}9DaW!bOY=`HBJ0XMen8QLY9aR znM}@il1>rcc=b!vN!V>UYOVk#GBZ}bH{cG#j>2o;X55TCSNy$YwgZ3Bn3f$#dfT*m zH?1NZN*>b&EQ`gQ`LQPRQ4!ZN(p)zJ+J2#6&cm2~udq;iBakRNTE|R!wZE$%N0+nQ{uv@`(<^;XtZ{ONl&Ni_&Rp8*jZU zk!E5&R&U=INnV*EHUkTsOy6%4F{=prk^)c$0oYgX{U!jxlBuoAO+o9l8aoEPV|9Oi zrBMygziAG#T%mYb@z=yfa7{xBcLTz=$O&`Bt!X;M(ZS8#*@MACIYcGEwXjH!98T_Fg$p z$Rs8_;=Fk!yJybk*!?>n%;zl-e2|*z9m~* zoT$53x;HP+@#}VM3$cf<|2KISW3%Y0vtcR4NzmhH+-lllye0?ujMI0=B#FTc~MSpDcH8%%g=(> z5M_`ccRj&1uxAuOag|ekwCQ|b|9Va8^pWW;OxCRUHnY=N-~aXO5^w+51-wse{&|*R z$oK91-pj|nF8~Jkt-3SbKi8#iG^mwPOstFS&jL^@!-kdbz$j(n?TTzeW;{*rRwo~k zQ-zRYc!t72ZA?7MA#}pBD3Uf2uL6WwFm;Y8u`8YEPu73(u6ChUPm+G=l8S!yw#yk#9aE2xOFOdbFlo8frECK^r!D=wL@9MTe^Ug z_K{SGF>daAtNU49!sVMj#bZ$H@qhp9{H>;(`AcfuIPacNPEPEsbic#Ml4vfzWsxcE z*35)?1*EBR+B!j2S>h?Dy3v0TTS&CPv?V1UQHO_o=U`85%AgoGEveDKZD|tRY zoh)Pr3VwB+@=VTy7atjz^KhH57^ zF9;7yYW9i-?>}23P?*>282J=k9iVga#O#L4w)f3iQNVJ z7fbPdsU?xiepWy6v{~|j1B&CdpvGGn$S*!@3X|`CyV5lRdh0*)p37ldK?ZEMfDDWn zjllKhp?>%?y3k~0g3vhRwc-~4sJOL|7Dc&#SpZ!crftA3s?F4egUw0&l+xuns&GPr^b@KlC$oJtPGuaHRqS@Q6?kSnXTFZ~Q z^N&Zalxk~$fO*Mk0DsudKKZ)TElu@m?TgcR{Ypf7Av0g-$sg-XRM-fkK0lUhcM1!! zlD5YU3D2IBFllT{u6+mXe*T?PvRGV#kV0yFU$OdGnjjrYvl^2@u3DEV1-`0l@Yv7b z*9wT((@@;@9)zl5fs=Qe2=*xa2SR?}u21OuTm%d+W63zje@~tV#+%;`+LG5-->8L< ztzu_=ogqPHJ@9Ou$eE?XgLz-3BZo2{l>fPWSE^!vd1w%S9KJgGKC-Iq<9E!UO$CggmKyhOIrrGK#!bm?y|PgAU0lHK zJqu(oRTFjk@`~PdpejjMuc7(pD3>Tp5zA~_)pcF$g-Wlo2Tx7yPw`Oo&FQ`Oa@D(* zAcl3EZWd_yW+;$QSB@3Dx_2pn3SJ2;jX2NdoNnjjzRbwc*Cy`H*Yk`*=M|TrRoIra zj!m6lnSY70=MPaG+L2Oo0;6|M(EyI54o7E(x-LH!8mu?FBHe$_myu$#^Z>hrZBB~$ z{MbYIx$~Vv6YZSAm>8{XvV2V2@-bRV>czAg{qnO`K=^Q;>fV{QjW5WGZA~J6X0f|W zTQJ`?a%ZP<3FuZlYGOda9Uq@dUE&+1XVC#5V6Y$Iu5 zv+^LgYBwqpkAkM`mymL6MU0(!q%`-N$EQV4-JLRBVJhS8(I}8pNXt>+D*l~)Ni}SuN^cpZ{+D$FfV0HJ* zot*PE!CAbRO4yK~Pkgs|Liydsts6gJw#o*2u35X#$;a9$!n0im-fEc(Rm++m;id^U zRsbQx(9)MOEG&r+vc8|hy$8a^pi-@iZuuUl>3Yueo~31E2x@=*N@`~U*cpg}`Xmvv zL`fpoB{%hG%@}Lg!p?=fKc~yGI|M96*#B~u(nsnNhzU{>2;mV>52sJ8)w#DlkA80! zbYiEqJM~h+c1@ZwLnSMb757-L&!B`g|p~2ph@r-;kE}BS64Tm!X~5h zP*%u52$w*>HjX1Q^u;!6chJ~5NQ{;rJyGFGz~=vx%Ah+@;ico9D$kM+wRtY&%Zb07 zm!!Hngfc+rnj$^1cyCrNZr41-7LYeUgVw^RXS^tbvL5bK>hPel5pFr{z-L<%bOq~r z98rH+v-N1>5Zy#?FU+dv|PG_@knb?)?iT zPfd<(|4z5pfE&j7*CqV$bDFdV+nyOi8|7SP+KxlC&8uV(D-XnczNrsSsNc$K};Y~&gH_A7dH$^#YoicoMiVF|E;~Bkz(l; zC9s?WoM0|aQ)7ugW&JifcbrE%(_v6OU>!o zTv_J#oE@6))%l&9pJ$MPQ65=l1ocpwiO#%r)ECXmSmuSE$a!LK*(?=!Unzm9uqjUd zZPD#{X>Tko2nhc~8Mgn(>(+H9M=V#jo7y{v!n>zk)J zzdmBS|~ z*0Yi1Saybb6~r?838#>*9o&k-0ejxxTf|wDrY3Gh81<&iOE!1_@yrevHsjOwwxU_E z?@ZNJgngmy4Va%@sj>xCd+#lYQZymzeP-Hkl8RFuF>}97h`meOe%w|bkg3S`uFl+K z9{~3bS9O{@w>$!N-g>TGFW3L^gldW3?RG*6YYu54ZGd-0Sk?u4?;LLW>E2QxEvpd_{j)8wiuZ3YwdqLIY+2ki*2!y z+U~e#WFq2)F+Kve5E8>3Q7-idW$yH6;O-e|tQgVNqS;AJ06a|6= z{;NAVjfw)g_5z{J*e%8zC|XNHl|B(MN57HH7Ju5O(B9eim5Y!H_eEKVVnYCbDG8&O zEVmInaVA&Rnv;?gfl1{}{hM)th9{ouzqoa|Ool;4Qj8VPvYEiSdS@oxf}l)nV{5^(+7TO7W7nKYjncwh$UKQ7(d> z3R}lIiwkxElB~!SM{{6+uDhQi5_IxR;Kp=N49mTVIv-m6cQljP+XIC`C8j_Se$Pa% z{W$=Z0(^S;QQ{Ks6;Ey!A%T;{*K39c^4%1yaIHbD$hKF7(%_z$7pXR(^cjJVDiLua zHU@9lGpvfcDnPWAr-X^{f>IVU`SquTZH^KqYpVXgU$Qip z1BgWQ7d8ifDb&cabl2!ZrdPmeg?x(213qIE*aL^2IXTD$;PhG8jJyn6EX}Y+c4qZ-C_tH2AS87iQgoWVnL0kLvxiCy zHGfS$d$cE~T0e%5Q!FvIRaSfu^a~4u6m4Y;;|2FtwGN{a=K5h7DW!!_8iFmqy%OSB$Vn)1^~dv1U=2;Tu6{^h4@_X zNnmwqRA2W3&l-OuSsn36Wa^u`8P$5`>T_D4)7x_1hEm`FIzkN~mk5-GWFLb`RtUf3 zJ^~lySisuWa;sU(a<%IX2kWCMMD!UH#%ZRaSi6oAw24{@JxkTsrPoTJsnN3gYXl;Z zoLIyC=pZuP%&z|D!qsbH6$78s{w`T~gSHHuLt26EXP7+ec^(O7xs58kj6ZSr*r@-z ziE5pDoRn@TpupF|#=Lc$U_;4W4{Juz;W7fR z?WxIMEA!)^I%c@plU8KP^ySSlgX&)s3Qy%d6<8tyBQY)k5xN|mg&eBFS0ZSRJkWpnBY}6V2Bry}#c0 zL`N7{N~MZh0PiLnJ&D303$8EG+5~Pgus8UWm8-fL_a+efV5ddw4`)jUeZcdq9v?6vP|_G1n$@r+2RJ{}E?Rur`R95-tH zASB})^FnTaI*2S2sTS_;F7W2rs>KPGgSD(VtP|)3&E%4!H5y$B;3s!Ve%iWG1{)p& za7>}%uq>Ydw_%{uD?L7I+OQd@Hq%*wLtL{zq3Ovh-JYHxPdS%muL3)bH+u6^+j*Dp z`rpU090PI7acm#G61xl9fYf$GJkW0OKNi^}8g-@zB_h-hxv$u1dzj(wA0r?n#q<5u z^bU!9`NUJNT8pp=5yf6FlkgfwP!m)vkw20Y=#79Ie#8a>9N+xBBzfBc!s7FPz}Zm; zk-FbNIxV_jU|9~Pr#V1#0!vb9HIe)OJ#JTc+^V-^Pj}5<26;?h_+IP?_`Le@r99f| zRcW-o!WfF#&XOA}*8jO~?7UOw_%}HPKCumM9sCoej735OB0bb+{GH}H&b|0qL?MM& zAez~|?S2nzJ^oVE>ZtnOI*lz-znrxZ#0ZM5fp@zL7{r;mKa)|KJPFtHmfZPpIba}a zR&7d5e|g~q;~cU~SS0+%B1u;d?2YSqWY`-=cuaDr+dv9_(004X<^`)FER`-Qy+=Gz zgD_aAD>8>tg5IwLh|f{=J?uYuuV2I#b;byffEab^K9!b8QQ3ARSSCNhYs18g+UgU4~TSGKl#r>A); zNMDut%`9k1RC?>g`hcG6^^#*s>^T^zZFZeJjG(QS61nlczs|5OR6&2f#QL>{(yE#_ zwSIvua-c>^pi+1slZ1(=YUL@E4CNDpWO8Nk?oC!{v#Oz&ni|1 zwKz!V^Aitp0k;3}ma4#&ivC_Pk`f$gXQ=n|)uQ6K_p@n}Bt?WtbLW&kj!eS-BsJXt zv_Qx*9pj~JMyUTp_!Jf^{LR;oZAIGl6CUuB>Zs30f3mR`II?zL9h5`qL0NRjCp7_!Rfaw!E5_-Tj^Kq_g2`FX}8n!&aP zJ1mmI4umc`LOR)=3bY+R&knFnf(dGxVk9M(!fM|wx)10pG{V8W6Y`3(2!9p)sbK@03y4Lpk2nmIKQ87=*be0V zyR4+qUi23N?%GqBMZS@qJPC#AQOf3L2pX|9(s#P@!kE~q^Sk{qFac{%o-P)Qy%>eS#4oK0i$=wHT#4D}>KVzwf_{*?mV#+Eci&q}Z$FQf452ATtf zB}71uI1|^(Zn2}ZfZ<9&X4@$ih{aKgg%VP?@Qo4(tT*1GF zwqA!|@dxvf6bvL@9Xty7K(J9E1k5$EtIw~vrr+3b{SLgQ))Wz5gSBE%Z*JHr{0@_Q z55sB{o%q;{Eefbw1X&+}!@;R1S}44I@p?HFEv)`Oit4BexPA*TzS3ebTQwQlhGHtF zcS2jm_b1*13gUb%LZf#vw%967w24+=p}~(?f|I9RcI0Mij}EY06LsqsGm*RdPqFyX9|P!RK{>B`!U_8{Ay@Yw9dvftv7$ zGYNSqZ-NK|g2Y3>Cwx|R)nTG`OiBLvr&lyKYBETnkZXYSMSSpB$p7O4w0@L5eBJko^@7DyYya&jwAiyW<$4eF@|9xhZ>AC+ZU#qB7+f&k+%jCy zuj(4RPemTV&h*NhMw|ni%l{2FU2t$!Pp($+&p9wa*umL;8G@`IGsDN4c1Y3Oj?%t7s?c0;4yl3=&-csy35W zHT;eNVi5rdt(oV#vnX)+RiF9fHVuc%EJMSWlfvZ$5zK|idW(uF2qg1ZXgQJV3()~~ zJcY#2dRR&@Mkjagr z!vnD-UkVL)wa~+FZs$e1sU7{VKrG~TS!a*CC=tg&0Q{rFni=B#K%SeyV_y)#SNoGF z)d(P+y6Cxs2!co21T<%+v%cpgeW#nr%Y*)aGIt8jp(@ar1VX*%IvMgb)AZjcn_lo; z_3#18#uvzd_xZKFFfQME`x;Fth1vRr&Meu(uCmVb3;hE@%#c(}Px3F;3qyelI3!>1 z_J3tn|7#_NEm29eMLV921=e?p9>6BkFG0J_Zdy*?QbRMV2J*`DAz#j0hvV)#Xa8%~ z$j}u|EV9R$rAe*2S^p^8x(;IEm&#b#CJ8{jw?T`4jS_}-GVtz<1VVtVcG>oT4W*eeF#?QsC3zmr z)GK*^i&#Tg{rVJ=Gq1vi|Hl5Jj~Q5tNlW9qIBnf};%5ECLfLGg56}Gxk8-^{^7+_m znYB?9U*JY!z>q)e$5AIv;q7<+`arA?X`joaB~OGHEvZhLgCh+26+LZ=_r`JGPw`h&y$Uln&lZ>55??9jyJ4%Mi><(z)4!$bQ z3^#vofed4nw4Be+nmvvTXTsof5S)zajRUhKzwKFbOH%)<8tlDON>@A2IiEcj<% z)|`BzHBbz0Q*Z-$?0Y@2Y@xiEyZYatt&RdVrtW_6th8C6r^Hx2`DG`>^zc(rSX%ZN3 zuhO}-9IyW{+XLX@Z2$bnCt&%PuYqsS^!gIbIj0_O&PibuIL*@V7!(??dDUBg>M%tP zJq+tyf_F}XwUu0&_~5+g4M#3q4pUV&>XaE-GdsoR_HalET~HtuB11jSDs}U6gOGH3 zXC*qh58)m@xw(w9^jF8Z!j!@YB3##L%9-*G%zJ2~%vNfEid4~gyOQZR8fK^aNJ>MV zrT@|bHN_+D6#EaBt_m3HSm;GDba!$GqzMSt zp*DbtG(6a(#zzdIE1XU2phW~_U&+7{BQOSEGH4Xl@;1}`6)`= z0dMuai1`6)lRQ?bq~R1<1N%?Kx)8B~YGrnOG~&JjJuN7@cRV(Q@VV{<2rNY+tX7y$ zbk;9wo5cb(N&yg=Xv&mC(c?g<~PDFJ>hibgUirl5U~P`bU*FBEX#Hvn-J4mZndb4HdCkGI};#o;_OL2?MG zTD9ud#j_|W7jRwXISodHCPtvlSsr;u5lX>^>&v?|U1eJL*Cq`^fa)xE-{hL?QG?{M z#z}@B9hA2|zv65$V0(2_w@$PWr^L>M=FvnAzat(j2A|kt;l~#L60#w{le50HB~|PN zYV$M~8=s|-K52Z5OD86NrB_DBw9u4FumQZ}he7-khgCVQ>naok4hCsS#o!Xs$l^IV z^*r8vaexFKyGXA*_?}c3`8_UQMQm_Pf1J=7zg~BDY~SBfa&YLnZ&z`(hWr>%YBhQa zmt9hCMJppO-hx}um9r=N-qV#U1(W9up!Q2}bGUsUaelEIx6p4)VgJgC!%b-{LJmc; zKGRZp8!k5z2i13fk4~5z9?AZGxrYIdspQh6#*>xvF-#n8R422sl8i#aBnjv$<2P*P z=wzRV{04T22LO~v&M3KUa!+Wt_;hp7NYKnRFN+3c9R4fFwLg-@FSzGK+I;daQ44XO zNWUN10;m}gMI>UPg)m*?fN{zU8Rkks6X5kSC9Dw*sdRE^CyvrPD@Ih|3X@GFfz~~S z_svGnw@k%j7Ap8jvK7@I8`;$lzac2d>`(&d6p&ug$*v+ZS_Dnb|ac zEf4Zo0`V8ccx!bw6V8IGJ)0S4PP>T>SeLw}ZLT>9UKpy~G|_?KQXN26H;9!;AZkg1 z=<##SfQy8Jt5TKCcL*>_yrhd{L=TY^lmwktfjdV*Z4xFz9Jnq!4_=>}_>QFOz$sEm z;F5GW+1I8!4_6*O2RPG-A>w9s$LgA1pDplO3RDaYYzk))V+@arNj*+{Uc@5gYE#k# zctQj!y2+#c*afXHV8P=u8F-Zru{}6KLAAI9{Uzn762vNff05OO_6w5JVrj5K;4-Dw z&A88xsb=NZvhGU#92IGimlpE8G%X5}iFIF4NdKhF^#5fD-5nNB8eP(c>@!~09W(&> zpI|85=!k4aN#zATOq#=2o!a{oc(t7tS!TLl}YpD)|QKny@Qve7_lYyW9pG zO-p4;b9ruX=H=!$a(r@M#=PI*0nKjD>q5o!1SZZ&!XS%}fl&;AOKg6#F#S&s$iZH( zu+d3sP$5|AV2EMfe%1luQuy?N9}S{#H?5jlms?pSLkG(3NtmU)D3RR5gDh#^lc3(Z zvtlsg)d?D6Hs{L+LSjW}QT$dQz`fZ=GuOwjETNg<2RO`nFt`g^yDs!`FOOEzfMBPZ ziUTAyclBESuCAtVfNd>{wEy7MXft|tT+liq*XHkUApdFLIpOIWPWW&Y55{p{`Orw^jSMQMb(g(c8*iYTM09d+G`XR5gm-Iw6@VL~~(mPj4yU_OX=0c*T1LMfzuG zp4Ng&03l5ig3|l&*Aat;eH0lSeR0OG@$_H5z5Ht2+jew_c!3lW!B8tzPG?QFT}@d*Yg|2B3e zDrWsWPp-6>2M=?ueJ=R-hsp1F2rB_0so)zb$EnLNa$gXsGE1SXZTyVW+x2w*P zoJqV1kzD|__OwYwPm#EL{Lxbk2RO09c4_gd0Jp$zR)bsJ9Ki45pqVm|sJPTTP^{6` z{>&Zi#-dX%3vxUBtP4s z^1rWvn4B>LvUo=|LJwfhPgUfcZGV`EVc@x4Y!2^#R1G>OPi-ZLHch`!ACHxLer0@& zX0iw_ae5a6(ZjhkFfj)QyO_&8jlnO7rr1!Oo*?gpE8)QIZ}>Ix8Of4FF%Z1}ned~p zv{|&7slq%&6^E0FX^EyZB+?&9JN=5}3yKTN#(>WsDTSiV1Tmf?(Om#ExU|y0oSAGMlHQdQJ1%m-EKecN~`|>e#^M`~x^aKv1bso^}>1V&SgTTAE@_ z4&kizi7?-YLiRE*s^ zULCRc5Yml9oYZvVok}4&EgP;cB$+w+6%d>bxZncL68-$>9U8GZ1)*h7z{J1B6_QK> z{$4MYRGm2%CE+i=h8&VH_dlD*Ao@+N`VKJj|Ibqw>sD>`9LJ|;0BNrQx#m4+02o99 z=QF1-IjA48@Q-?@L?m;(GmE1521OFz6j%5AAG4nOP9d#S^g-{HN8-V7oQy@179gSqftLVB5)gxRu0q}|1xeeI8N}%M5bDv-OzZok_0TVT z${3%ZsTTkV0i~0Hxar%|>kH2Yag5qq&>s!}7=lhFjL4q*p94T01a~lmMnXd5-9PCw zDQmT-KT!Wv3Gj<_?mbr1bHX&9epR*c``%5DP+olFK#hl|PJp8L+<8tj%<^~*6D)hg z(ItCHKg0x*3bXlg~%0}HU20^e|F4!ndmbYl` z2wS%&pC;6Jm$;dyyLa~Qd--kR0$ zr(nFOy;dvd*LxHxQlhU&e1T<)PKn8dC{}4k@EXctGIv;v@Tgslg%h6fW%(N)my zaA~H}0xHu2@HX%=zo+a#wJ3ut1p&~2oTUs)!Cs&#z6NcT6}efBmhosV<}0W<1#`p( zIA>rU4~Hd-82~}>R|?2%PZCV?QY^bj!JXBJG(aE>$^|^LtZ&x*&5>bw%4^W^O*ouW z>d$d%MDVvYUiYH{ZT3w`;Ea8kCZ|;xZ~eou!(D;6vn+9vVlJC`0-@~B8bcuXP(Nbw zTpfC~0;@sv6sb?}Cxj4O7J`7?AZ8y3jzSiy62xT;X+q46W%Q97WSK%1RvfgXFXeBE zmJ+HurTzg~E+;3-TpkH6{0QxG5Y+6Dk6xk}n4Md>);mSIVM*Er=5sS$TdAnaFnz%U zJ{kW6uPwC^_!y$`A&6lu7_gOsw;rO51Fdq=^v4QB2#Cc+RebD*ycMQHekCv$WfHOJ z6wL9|z->Gn67oQzr8hv0^6l-2)3Fax1syJkLG-(nu4F1cLuwZ}Zd7<&t!75aTax7o z3drlFJ%wH#=03|w>4zG6X{;Lu8~0)R4{JB1|6a{uavEsBz@J|uPJRe@!}_c!OMf)I zH#KiG<&N-m+^Ia$34E2FRtJ1x_~vcy>G7bZ6wF|)XQTKqZ3`MripS=5%p5#V+>1Ff z12M~)@wfIZX0S{0F$^L^bZ1TEVDW|g=H8R$FF<_!4H>B812db$8URi*hc#Y|)@{ZN zOq;8qFI4-HGVq6a4@s51!w)3*`V8@~jb)?w-~hidBF269)v*W9 zOo^-9@WB`O;=E8MV}Ej#AL0G%6sg}^tM=h@8^4d9>%?aid!^(OG4(&^0TpCFR4iH? z@W=Y8Ir(qZKmF$&Lt1<3qorCcn_5raoC+z7quAhr15wQX@u#^kRahimt_+C9B4GdV z(ZjAapbjG1XF48t=f(NM9i_M$%M1`5!X*gb&Bk!Sj7PH#9eJFTw;OhwjQM=ez&(w} zXIbVxWe89S_pDpqJVYd_02u&C{F{v`K{o+hsXjv4Ur>X<9SMr38{Rr(+erhg2cWHiGc*p@CyWf1YyE{0vSJ7vWe>gvFh0 z6uzS3L36^8@hR4N+gwD;IIuGwOALP7)Z){9awzpcDpn2ocYv|YfbB?W#!mJYa2n}* zlY05pXy%EZ+(MSml<35Ic-1=3uka&6INTQi6hC+Q_(z10&1vk93_-rJ#pPIG&P_=1 z0BQht9L#HJbjxGabkG5baB?YM8Z@xF!m;G|Lyj!KmMH+-LC?PjoM=u`I~UWMbqHU9 z%_l%BuD}1;r;eM+Gf0Lz8?hDi>QrQp0Xu8DCz;_n`A>Jsa)4X)JtF)+yE}JYX1#obS+IRV_0{C@ z*?J~tykm5zw}Q0s?4sYFP<^Rk;xqXYQE$yv^54cTT`q88Q9TI{B-cC|F2O1vew&l# zPkOwMu{{6a>~{-JtO$qRI*V?s3=LAS;#j}{etyqGafTXk1Vwz+`buDJ)VaZqP-Szj zR&W?T(_(4a6ClpehD+ziJYTw0UhBY9bvkT>AE0vp)IT?TS9w=GgltTse9#40N>M!@ zhttz@;mxec9@j0+YgOJ5f^Hlq^;)?V!J|~$0Z#gYfsBLe%2_i05YLsDW`Atk=u`>I93+IjFx!HOkViPqHmAdk!ESHKYMgQR+ohGXh+A>J{@#(MoqNExD zXU9KF2J)U_;_$Yu)yxxRkPEb+e!x2qTUsG=IE@Og)3*pYD6g#rMSc zMSVJitzpV;(!MDYPOAf-kt63te&ONU2q5DyTG6|$8Q-5sldE@dDwx2ynIeoZIuzvpHq^}}LwIZig!}fxcHY)1ZL@mptZB{Vh zM;scZIN5$8@Y(rH|C46z7mr{E=nBpU1)2)@&Zth#KF*lb{qAoN>VbznhHa`o0GTvAa1|0t6t}zIx7A){D zDqqKfN@0I)pbh)Yr;9O;_FD3(1i<1>q{520n;A>RVArjxOnR5L2pmHll*BF)dTBsa z6d^Tv+xoHhOE4D8suIn3|8TGFuzE)Xx2pU4b=S#_oQsrAGAS}iRLL3(9bu{v$QEQLmE5RvqEGO5$Mr`3o^Wkp=_PH+4*15|K>(k9_wV+H z8rR7FqN96%?pDE*F}FSx!nGgf9w(C}@xPB(ZlSOK zMu4Gi+$&>}_u&%Id7yZENMH0&vFPHx8?>h?@1cbHmHEi?o(nCb+Tv$plm=Z3t$Q)u z$0SEBai{Uy*vPbkD8D%P@L@L4z(|iR9m5|Sw;a~Y&$g=4#(DZfv=oj$2W(*P+nBwy zCcT`0;whdtz+pcopk))yXy#HF=44aue3t3cZn6h4f{bOQVBjX9ENGnk6M`OJvtn&i znjbr^i?9vdx`E~3R}jvLM{(&T!f-H=$Dbi&`Jk}y<}-;{_#2ujZYZ_FZZ&N;jn;%= z_L3HJ?z2Gk3BD>EongDt;EZ`U;o*wlEis-*yHBV++QO{@1e;h(F$*7d8Vj6ioc63^ zTZP>Qao8Z=fHtSD<@)5o}?-LP> zAk`b+J|6ZzF%{TEa=TNsM0w;R8@Tn-*ktdHVs1rwSvPTF|0Me)F%aJzhakWg4AO0k z3AD@L`%Ay(UQEkjM_U7`@MHPrw$ja1SezL!1aV<`%Df6bOQG*L^Gq)$W|`jrYM5S@ zaFu)U`>W= z|F{5D!gtXOO^t3sr=QYs0wBS;Za#5lDDxOyAfz9=FEre(U^I)vK=c9xlzqNetcz96 zc+PaxAc0=;J|4w&>4Wp2hFc%^RX9Nx)V^WCrXS38+K0(TZZIfIj6DMB2SXlT zD@F>}r+lIe0=q48^x+Qm7CCd%A$Sl5;3%DDvJ(j9pK9Od_o}~M;0&hb1c&F!@O@Y| zr0urcv9k8FhcB3mV(m3-+i17xFR5m~KGFa1k7aLo-1zR)3rrhhbg|}w;gV2(>ZAS6 zJ5@BiHzyE!8?>2D=o`l0-?TK|^I^W&KZ(26A|k47GV=>`*LQCp z{_L;Ml&%MppXvz;Px#gel*FhA@CP?*TnQ??s8mxfCo8c}p;IM@kF%oP4P>WIe-1{* zs<6NSj3COboz`qg|8vu?``;OhKPYK5DV$cav8rWYNI~)Y+2Mwo@8K=s!$o@>ygE?Y z^Dw|)CP|kKV1ewU>)^SYx7kwxNL;#hpq(hgiIyu#0F5ZamQcg=;s~_=Hplr% zg}M3qedl8?r!B(u56v9`z{tlVY@w@+6k-tosfl^(Ziucun@>!qF;(Bmt!?kvti7AW z6s$^MX`!ih!}*qiaJf7zRpTHMI_<1r*8(g8Y;PrOdRv8XuRsSWZue7`&B);cR@rA8&hvj^db8drD;)$*M+;~RX~cEGb&lSSho z-GWr} zIv(uPsHTd_y!g&aRf=Igj|W2?0IBW^oTvVx@|=`DC@Gx|qd5OvU~zm#aSXps$xlOw;ua%n;ueI@JH9gC^yXX}#`^1+-kdX@*P&_`3ZOy3$#m8nV z<(I4iW`TJvXGO!;Hoz1Zo@BYGt(_ez3){=o`Nork{G2eR4GnxprnC=@XA$csz~BbHD+fe|eq})4?j9~UJYaSrf zQh2R6ca0>z_{z+cGV%!bcVl#~mZbIbg4>(|eu#qZi$@lyzWoj%^BN0(Bg z77{h_zB}WX)DN;!U(eR#TI%pG1{TgblcZlH9=#pwu{9Ck>-)HbCg_kFLa&m=$-mT1 zJpYgNK^de&Q(#E5J;x+KDtz_1j_>s9!9=4kkFcA-+Z;?paw{^buF7BN^v$=Q&QCzA zhH7dgS2fx?LQS-yWqR;`iE`R)Lb_BhlS$Wpp&)h=olWjy%Ye`Al;Exdz*G(7WdvdXtUFhOrvll^nTetSM&4u5jY zGpIRwdI*PFOTeVa1y+q6Lz##eUQC&)CEEiI=}R=2cyG?XTa=4oSy~!HLX?g;D*M{t zyBuiO0E|+p_9xqQxfpxbQ~9Z_t^Qv^`}iC=u}j(4Lv+^>^}MkDh-XL+{T^-|s`_TlW`t&}G2t<7UuoZ&f3W z)`%ClO$?hmU@nu4?kqw~)95;Bmy_kO__^kcr}{iVm@V07!1 zT;yn6bP}>Qpn3aSXR^81mtI0Fx!hbQcvEF>aWnfK(gZMaB*e$7xYAzL{TvqmQ1=3J zDAT%-KMejhBI+osdflRXd%xD7F&VW=z;NJi@4T+|E zi0^?8IE}fOzPwuWh>AV!hf;dzrI09MgV0d~El7r0J^E*H-OcKjo9g+O9sBd6FSYF+ zE@u#XT~VfcAj{tu+2^aWu-})b$k!Ktiaktpft>}Pa3PGH<%&|(m4zC`@9e5{XcASD z8g$+d*@@GhUr(o5?TuIa9@owcnfcV2;_URwb3WsCjKK`4pig{!EYTHR5|jI4UQQkDW9OReL3n zVpTa3b(&4sF5#RsNqX72$>0mZ!ekJaH+M7g?ejZ%22G@;TE~}0F@Z_dO^-(!vP5+|e&SeRP5d%_8i0GgX!{-rTS5AXg`Z>`Akk)9EUWo_A;Y>{v zC&0h%8vnI-4qt=8^`WrpL9w@LShG)vm zgsb(Y0}PjVw3rr;LA8!!H+>0oweeuo_>lSqAnLpBo1dGVp$Vjf&qofK<}qc=v61HS~k ze2nd>!Gk~K({Cp(_|S)LEENU(c4hO>z4k%1kipJq5%lc^jJhcHKdXZh%OMr!pER*G z#zp!suB;Tm^)L+-o`LG>Z&@+O_nG@~-SS$FN^HsEP}#{DFeum6A|e#3n1?xRiMUEs}Vg1 z19WoeODORe3M2wMN4N>rJ0yzWA!Lw(*TTu-`DPz~_$OZ4o}6|=5f`w@ zJLPB#vdVFKHTFE-fyXk+@W#)<2kCy7n^gvFfcmUL{2ZQkoqJy&3n>{Znctr`{KG5V zvSYouKc~)-j@H;$oqMkTFxB|rRlYFA(bp1H41vaY|BtEf4y5}3{&z1|+>$M1Tzi+9 ztZZE&dlO|7$tc;ED?+;VsF0OCii*sXmC6<+3JE29kKeiP&-?TFef#r04tXOWMh%rc{E-gljVuERz=N?r0>G)e!8@y0!J6zGBMroj$lld8XP^*= zH@xA+6eT?vN0T~qyc&5xUje@}SC;h6=SbKmS6CsmlSsG#B09^D7Dp!ezhvfn?`kRW zZ}l>4O-GAUiFoeavJ2#LxLDN6qbPY%YpMMLgNCZKx)h4nf#-!?oGip~)Ow6wCMmG1 zdR8NFd+nzlFkqQrTlNm{AwLBcs-N^3x8?^lUxvmyz)MGCfnNXf#k}xplg}&~4t6x` z*~S@EFpl;UrzEWnF@5kB&5y^rbdjV8wXd>QZcJ-<;0Tvv`1KTXTVHq<*&)X#!$>Wk z1=!Qf4;Y|RL@9YMk(JxH3BG)1`R^~TY@(vT+#a$f@4xRI5qiE*E+apDhX1aY&w@5_7fYMlKbR@|-kVc93({^?fh59FNu7WA>IG&=ctU^8r=KVE+vcx-rZ|r4`DgjJ!9KRNCE<=IJ}Ve}D59lc`P5Tvx;J zF;aiF#_9C&*A7PSYix$&!F?F}U|m=^sXuXlobx)cYlN+IND7q8i;g~hhpneD>oaJZ zx51{vU*S7|^HZ>zeg`J?@czQqUw9dW?UDj(5u z6euv_Z|dQb96hsZ44?(0KZsMtY&N(60QpAk@^IsUY@&SSJ12=ipe zjuEZOv2PfHI9>oGdKJo*FyAWF@s)2uf5+HXU~cWHf`}5H?1FvYFQssL^m?8-;pRSt zBu!|;7o{UmF;PL1Gj=C;@eL|mXvs22TXdOWd);{Imm%aEv_5>@Yw^!TYN%p|4&JLM z2~ZfUmb_%wn}NRm&Ww>oj$W$G6-%Whd1;_{6Fxf;q(oxwH-sY=WR1}fP00{_l6~OM z-37Qd402TvM3FB1o>YCQNp1>xP(d#aC3&!$VnjtxP}1?XTHk1jB0^QbETO%{MKfUN z&(jjRwKRd=B}Rxr3a$5zxm)X6eKM|n7+`N3zpTop{0b+11$C#w1xCNRUQ zD@u%+r!wK7e_E9s@Px%4nxhHk`=xo4z?B%JRyYBoUQS&&+V=%C-z@h<+-;l+c9e`w zlI+(gb-+Gz%#323N91QOF`5DT(n~o@rc<4q5GF*zq(8f6*5J4F$1ZU20Wx0;p_p3Z zE3hp5B_{L{z5c)b67mu>p%-rTGN6QlsBtyxz7po&yJRdP%e&m~CR!3SPa!G7hu%rX z&?5>+jEif|IRY9*wH~WoW*Ovzg;+D6ft|7 zA>jbQNero0=?5U!p@tt~=%2Lp=L?Z%R%WtiwJ`c`b+fnaf+qW-RS@B1bHEDZ0(-W< zx;b49+8}T-@0QCQ9=oz`qgZO zMXfVdwb=U~>ib+OZ$f`l1IUVuz7_P|sTZU-S9oL#5gTj<;2*Y8=Ok~o`R)#za;VMl z$yr6X9VWc#zP5yMf(rB^P{sSfm*?SD%HnM=`*jS>K%Kwyz0A!&xIP2S9iP!%pXxdl z>@igG`;dZGNNYLRRe5n8^zPw~>dXCV0p6caoz*oY*i65RQ#w!Z6N5YRpHimrq;+)` z5>1PWgNve19T!Etu#c0Im*l^eb=8qFWjT`ui3#CvI`R7|3KpjkP?GKhFwDJnspXdq zgX#YszwRdsU)eywwA-w7Dfpe2Z2DHRd+-0S1Ne((-euzxBxY= z+I?6URYlQaRqOf$!`UWf7eo|XIsIu%KWp~`$kWCSlAg*4-m7*{1R38>XW&c7!pM^M z!{BaIJ--RI=_N1l0qYXHykx*AH4rBp30UxD@EJUo@kom(engLB+Y8uU<^p*Zl`~b} zZuJ#Zg8Fv1eC#80sKtrrZ(ei!lxs@Ll|S}|QWfp)M*j{jPH zHL{0J?J)=e+?SF)xsVnE{nY8;DIX^)uUVq`*Mwm-~&Z;@>_HEKsR(Bjhxha}o{*MXM*R5@q?Ymla8 zz)&IG+q`!PR}OJ%M&dq9&fk$|a>?BVF_zRDjlyvx*s30}$UBDru&W@`!ChTaS)XU2 z&!YWaKLNNlZLpj4|Mlb*FT6sB|bV%Cm&-95|>{3Sdu1Hv~H%mPB%n5LXJX}=rGrH?LH*C z2RE)kRsHyO<6jvHmPC%<$u#L9tGA;zr`kvv-*sV)D)g_MQVtE?2w{D~&tpvKPRYg6 zRC=HrNl06CrQ+HNzTi17UDsh1M)qiZbfl@>AHbQ$G0xGyL#@A6q1Re$z9nW*FInwE zZBP*75hC{)8q>&#?%4}wQ+-_Y#qzr7Rt8yh)=DM#8{QiUgB9Pv~7l$FJl~2=rr#j5DYvh zu_wtRF^0auV$})GgBZ5aE><}8$HG+(?w{rT7c%Tz*rNz!%_Gxv?sN>f$7bCy+Eq~XpNdtAF2g@hrBrv8qUxIIZ#bf>Z|bZWm086r7~(HE0YX3mZRKDD)e~QK-2m z7Qjx4%A9oI8y0I#V`NRQluqL(WBvd#L}Pe?55L?W!1$RY@{A z*Q`o%{%yVOMU+}YQO>QYtTx-7)%ub2NaDaLm|;^%k6N0P#dT@M=?Yo39C36JR0TfX zJAG0_h2+i;ywIEBJlGZ=U`hWsdNQK6Z49e8S{c4WYS<7e(SI?`R-FQ0 zt5bwM8!Jd>6ltQ{?auB$r$e#xtDnboYZ(L?r9ZDi^LPEDzK+y;*7%XSGj&5X( z2<4I3+~PuqI`fSfOhFMR7w`8X1#Ygo3oOI#a&{xLj#egGVWIGCFVsEGs;5_z6cgjQ zT*uHjbdj6uPm>OJ%Vjuw@*lIQs^9KpO0|~#epl)58U_>XrU#$-f+4Og5-}nedK6+m zBnZkWr9hzznnf_?k{H*VWF=c)6tMdLyES8?BW%l2_>}$R4u8hN}C6?nucsPqC49IKrZ^6cE~qe9B;-!j#|k;^y?*lk^mB z(O5&9ytW1a*GlB0vucXCbNV6GWmk*!vYi@s_v!HIf=__ap=H~N3S4MNwqb2;*c9mR zPq1`m#AuR2Bv+H&EaU`qrmcKVl4ZjkZQ7r+1kLBs!OMa41Iwq4d|&x9Y(Rlu z`dH}aBP5dR@t~f^yAycNagy}2q$NiG_uW!QnN=WxpPj%?3P~e@n?p~Me;DD>;(4jx zr{W`0T+QkY|GTg&BnH~H-)$|o1Tk6js#=FkDe}Q`*9o4NS5Nz3j=ATbTgW|m7=1LR zB!(c|(&0O`n~2o9cXy`f2lR+TKYal`Ja9!h3Rl9YG+>GF^oex6_~MOtN)_F5A0V-Y|?iv#z1nRb4I47{xqiDlCDN z`6dEWi5YFEkWqob^G3h7j}%Y589iV&e+62)tCy=N+!Y3@aFQk z&OIpr+tn{@IinJfh4+9b5GBv7F@01qSmR?eVyNW5kP;iHn<37{JZlL$H7QKU{?daeGQ{W;MoV((?!!c+DJIs=)<;)X5mYg&+vJZOv#Dvl6##$+5WzLwZ2HAmgO zTWV4a{BULa}R4^RHr^m7E)7&k?QUJ)8@Ey z2?xK&q)?p{x#pENB`O)W#0KM_t2W+96gCz17aNRycFqwt!VK4^Euce$jNAh}$hk`7 zaun|vA-ch}<=WR*H;Fmf4R^)80Lv`Z;{F4BLbUV%HM0H$6D_GOb?>5pUX~+A+!_@n zrQrpd@Nchg>kkL<_Z6B!f~wJh`^GuzI`=3p^}865u6%C1^L)SsjHG_9$f#glFH#ZH zqk%6-q&D>Ej|7w(KTRkd)(v5y>|uQXD z|IYR~NT4d`Anq!^fs4<<9_goSM1TJ4|8slzqB`Ow+OW;dv>HC@hPo~2<#p7k+vJ5@ z1FnNzq3nNakgxJM=RV44sskvoWH4p7U#7x~a}aKU=ac`qI6i zWumL3jg?rqpGY9PiYKsM9~`HBv|LBrC|iKdX1xMZCjW@E2B^KIepztD{eh; zdN?&T?@w1VU(S_MCPhj|g%8W5M3#W_V}NdxF;`RKeKO z{-#6ZLqWLR1#|6Curw|*YE2chHuJ>)@5wEhO~D*TbZ9YQIFTLx}fVa6T*_>Ac% z^hHd3ym39(hw<^HdYD7Syez_DCF;p0_|up&l&8HJot*n!vIA=oJxgcq8IJw?r~l99 z`9!XYMFyqD>CXT`&4kEsgq|itUNq?zz%ja$YuC?>+Ex2UTgnN!thSi@WyI3y74BMP| zqs#uP7_}~tUzEg{YT3Hi$^S9dseD#QY*?4#J}Dmy_$kBtwl4IMD-1}K{RQ`M3>or_ zza~!GH%uTXyW{`wr8FJr}!hY(K{nkJ^v+-76(o3|p_DD7G@36KJD>3|ad!)4Ymk z8)53%1)f^PS$5a*NWSmD8pYI80>B-1G?@O|4kLKU946$0^e_cYm&R_h=Z|LGN-j}y z00WJy`EYvjVJ};HA=m7vznK;}CtRdgctO{$XE!sLedD%+mDR`}#~#~?Gf!JSjSa5B zMkwpe#sWg%GD+uy*Z+SNCy{{++rJtc`?Y0~fp#n}s*Qgtdg*Xiq_0s<+#{`oJU!#T z1M1XqR6zBkPbkrQMz3F-RU}A|nj+q_63SkdoB8vwu-Bh>pTY} z!HG6o;ab^7=~S#n!xbZVoH4-5B%n)r>v$q*7&0Qd%SkUIio_f=GPCo!sM+NU+|}U% zgtb{Y#VeU4$~gFJa|{_uLFb?a$RiI}ocjr-u<$c0p__N`q%Yx$;23pY+7m}O z+0A!~_`%wUVAOuZ!4_w$lo%;F$-&L)Vr*WX{53`oH1l;G!Jq6XRvAf6 z6%Ki_w-5e4mT+SD-#}x8OFxTKiwZX>A)&NS3~IMVpGRWELgXW*oSE;?99uc}O-nB> zY=w*38hp5y;CVWuN|Bp zGr|-kztNUb1}L8fLOt)%W!gJNl81^5J=Vuftwd7)M?UAbRQ^ifKWnL zNCE^+{E>FLCU4YgN#dpy1v}hXiv&gsoX#t}G&b_VN{w0)qk-y0DJF9b#3%!%SNpNN zOsPpp1Q?>#k7ORR-U1mEn1>nCCIZEObqYIBmkrlQ$=t9++KuukYtSdmN>e+m-xjyg z#1zzwST{1ld(=sM8W~s8%%ymEBcCzTy5%=ktg(L?g%1)U-)(wW+B*B5pQd{#7f-+^ zCglzLmQB=&z|jV}pr_TR`#eg-NBYkhrxjYBxd;E)*BN|h`n4IB8<9&$LR$7+E?pe< z59iU5^8Tk2ylY%Ja{~N4F-Q(GdrL-akCSj^s%tgr4WgDc>}4BW-5{A#@p3dYyEGYE2>?Efp;~ZPFye!k zr*Q2j0j{!;Y;lE<&dV~?%}jU3uQUeWAWY95I#q0%D9i5VpT&8u?{N}J7lc^g_Jz;M zcN)gW)ft3Y6}hnatxD=s*3b+Xs<4n;|!2j8RK*m7r#C308q28-ZU zOz&VQis%vy*?-dj#?`eXrdQci+aoUQ%+LdZK{{FUE5Skq4zFZx+82jpKo`o83UH&o zCE}Doyiia~Q^7{_NokO3b%SWlYJwg#xA_rawE%-&gL~rhtD8J(YHC9sPGDIzd=Y#& zheBq&_F#&y0l>nvsum98LhIwF9}*=p`J2EYQrJ{J>}lS`bkczAE1Wkr&%(O5Ziix` zQOpLT}oDVP24$GLtO^kc6R?=4F3Gd)bCUprZLT|$F zyQ4PzQ=2Ag=^Is`-)Je?xF1c<`za?9shn(9BNDRpbY;n6#`iq>5e=wW>YvL5sB zry!h0pObTk`O>tPdGrWA<1a`}2n@+o4!ZzYw37I44R{w4wMcaQx-l@Jm6$Yx_R?T^ z1%yi~fcz^;wmp=+@dJE?O%v0``V+4u2pQCH69j3iy`MPznQ{N$ zO<;=_7mq4z*q*X2O?e%d8mfU?MlYuXLa3}C3L~a;LOnxHK1pR2!6C?8Qg~f2{_V4Z zyznIkisQ%Cp@jB9CWmg8wD#>ox0A4|(>qv_z448W7&zp0z|cwj-owzYVagUdS<2d;Ao6PYNP9qg)+R;0xeAQV-FbO|NmrnqSC@ z-F6S;w8Ez0j3VLg!)%^nqyMY6l_K72MMCIjj@pnAJGz(5p@FbQi?cJy1~)=XN@^-7 zJ5_mkcv*yiBHpX=Oj3AS?3HpA?5)|r$vro;alW?m3i}K&T>4`zJrH!5E zS7ESMQh(D`X0B%lR~Mqh_*mD><44X-fw~V#u7CUOcx*uT->n6Mw;_0?g8)7Ju>#nW z*Z>VH4tb7YirfICWmKe?il?nviB<>LktD~1u1icudFl)EUHAW5qu}vG0#sY};m#Xu z6YF5B1d5HC2kclis=Q+Dpf2Z1p&%4E9)4Ne>EF6Hx?AqV-|`)TPg|OCv(lw@8m^`f z^ZJ=y{;(WCUzr06*@QBlkhb~b-Ektt1;+7qSS$5`wG66ZCsEA$oaqIyvsdl_c+WI& z80tXDPvU)WR_jVyfT{64f2KNysn50j$7+@~9U(Mn`CRewr$<*dz1)FUp{I697E$oe zWi1!lNU0LK64lxjlNPpjE7#A>eq1`&@;OO^wqxnP*It8R__1haRQJ$S61%?a`yb{B zy4i{>P!6R;!)vd^H+_z)vnb2s+3|OFJb8@QfxF1AB1gC5JX(BMB5acAUiG+QAUIENc4VHI%GPTWy<@^bm9Ew2XL)>hX;GYd8@EE zA-WY3nXpKmB1M-RR{T&0@Y$)13a~5Wc*oLpXb?*G(%tOG1Q5INEK&xb%ux(Gv?)xS zl_9P|6CaA&(kKP`p^TLz_(QHh7VR_V52fxdu{-HdfY_}+9UV%grcX}`THd9GiHZ7M z`V*>3m;qW-gj%aw(DCuELdr*Aa71G79K$SeqIpW*_Xuv7cYtvE{Y-tugWj$}Rxt0L zamJ#W5163OoLW40wID-q>N1LG<-P3q%Fw745T8%6{z)x6KTk6V8mQcVU%LR4 z2}v9OhY1IHde!TnPh&{fPl1PAUa}?VF4+_*f|qd)o)f`RYWZFow(Cjee?2(H$*Eq{BgfSl-F~FeZC+jGpI_(s2+s$nSKHy2JeX z7)?wu1|!qLNhH>zq8#TaUvT^w?=&VsVKx;&A9az|T0g50EQblr+6`zlcDHr|18*tT zssMT5^tH}}3L|H*)%#p>6@U`HhfhvRWO+l}(Kd)mh7>a%JM`tM27m|b@R1Bfri6o* zl*Y^!OKKO0r2c|$W>p?JJ1Ro=PEU;12j-owqpB-SRvXPlGQ<&|TR6LNCa2rG zN#JM$pwbT)b~u7Cq64(XL5$vc3=8!N@|PE(Bo_IC(H_4Jeh96?`fdd+4oKd};79jY*x|V=KcUKG9=@j3fT{7(L7)(9NICacJls-XxBc7aq?D8@8Gf*AS(- zf5)X9HX83hZ){T^JQp4R+Ya6PSm9Jo=xzx~7e(4IE4D}_)>}oAmTqU1itG8xJ>=Ko zPv9y|Y(hZ$yYu!~&@rb##Uei!Y2HQudpl2|&>i^NHc5zxF^U{%K@dEP?rg7g=0~8q zyQE5)DU7&%ZM-7|p){pzqZnQude9>ka=T@Yq*tjXs$!e((wWg|flJ`Hm=y~lw;R?Vy4>xeUkNjU-LPR zW@vY#QE5w>h}5JM@ua8JNG`p_sN?V-8NRAegS_0l6Mk}OG2=!7$$%qRqOe$1YcG@Q~yy;|wf`v^t# zm;A60kMb*_uVAV9+;G{{$R zg+Yd`<*heb5Xl0h3b(dpz9=zSb_9+tXO_kIux%+9yhq_Sr{AXGI(nssFtWW6fHD^ zevJXrUy%2Zf{lXW?Y=$^KFSYZr3%ZN>oQcEBi@^o>*i}`yd`A{uKHUJW1g9uLmdy^ z(Nim80O~MY3ODpK+!TAU0sAx;(I4&m!?-Qv&Z)FU~;=5utBHqFYxnce z4~XZ+kq?-!DjvOaI1sA#n>VVvX$0W~fGuf;on-Ch@xZVguVILpX;~F~(Aecs&2sN` zvr#Ve#t^I`2yImPxpN!tM2rlsC)>Nn10U!7!{YcTWS<$k0fiPw_dkek3-u=v{(U(6 zXc@P6`{uCpvMa4EBMSt+n@O&?Y6O{}c_mxGav}6fF-&4vbSjYq35O1{??0eT7_Niw z+c+02lv13ZeEthf<}z^Hroia#*Kk>Stkuj>GM^66(2e7y#t8?K<4FfA1gcJmyr_tc z;5{+iu>?9$uvaQL>E5@ktLL3{A5Rwkx^sQfG(FRhxOtg82L89xout8EtcrApMuXI>kSnOyZe{qJFK%yiPjE|zGR(GN@wGHsC>z;BUwR$k{#q8P{zyxdjYVexUIb<#ZZ z*++)YFQ`hrW`Kd`D%h%yweoYkMN&N*KQR0ofGgFFXPv&m|2(y3yTO zEf*+Y&wE&2PqarC#SHJH2EK6260MUf`` z{jS7$N1%N{8>HDMF+imJ8E6)``eFRkpPk3mIHAS2`xl9OSfgRt*S>QJN4l4se;A@f zjca@`$S$H{MxC)TLj`L-wD#!*7Z;cCeRl{}kbnu5sHQ!XGt4wq5royw4=1ld^6iz2 z_7n2pl07kT63ONNlJ^HekOXsnTZYgWJXV`ns(Fz~tW^IVno&~INAkmK!@=$aW6LjB zDDgwkf*w#FuYACvG+wwa*ZhdlLt>e#2U@SzEMC}ec$YTQ9q-?Q+Z$^9JD{+c^at9p zdRUg*)YE}E^V|PW^%Fd;j^o#77v#=u78|N;Ewxr(Rr&iZp)R#d6QP5$uzm{C0wl)Y z&)TBsx)NT!=ed!fQzeh(iFbZ86|cC_8s)?=^42-x09jUyl{g~OFvH68Upilf*oJB7 zUm%a8`oRX7jW|(0Hy5op*P9thlzu$4^!65yJ#}^|`gy7lDgvsOXO-mpycP2%^Rr+= zZ2OH8zKwd(A1Q*%mk=BUj#*|}*h;$_yFbB&fINwk?w5M$&Ki!Kiud5Lta&>-P0|e? z3%^Hw_a1WD8-2U*UoODb-$`>+FOek{`#?Z@ReqKw>;?Eb={}Y>W#kmd$dvQthxAUy z`PwmM{fQbSPjDwFwrjaST*K|}%;kI^Cwf~Gb@{eaak*tW>1VbRJA!(RZU4c$3 z5sXzHoTb{BzIRLQjJbP2z}J2(`K#a^$?dz2FzDolrg^LY;GZfVFR&%+IbNXhjp%X( zNM6K-PDZK0Yr9wHpy@M=S_q-y0?uAMQOXwN4-DN5<*;TItlc+94z|4oQ-DoZXTS)r zK}YFFTc*zFl9@da94XLfIGbKqCq7Sx{+7L{?bXIK?0aSgeTom-?XTza{G7;8YU=7l zmr`-1vg|)yi98E;UW0UHq28)jnYd5qT>MpGY4P;h>?`Q#&Hvi%T$p481T8jjzzh}{ z>y>aB$(sNA@ow48VtRhflc0iaI`X*}mKRjVQIwT~d+C?3)XR+k}ivyph>0)w~(Z2Jg?nLog&`{si5c@JlC zelvOJwu&W;8R^bFbEed{uu}8T-}U^lJq`Zpg(e?#3D25F3l>SPwH@rZB_yA&{@@XAg)jA;Xq8<IgtHf1#GZ9G6jQ5xg z^$mmW9jkBa z@bw@#XeScVk5iP)ch|cw`U4@PPW2r40i|a54ZQIDQdG&K0sZVf1&!U>i#Uf)pn<1~ zJiNjQL>w0e8j|^V_g!~is?lEYB!gAE{kUH-UgSx$h8&zKlZHOKMne|gmRn6gj5GX1 zh=afHwL}@kbFJk&a=0r4Uw+w2v+oJe7|)L zGKIVH`|N*u&Rm^S_Uo=MFa25i2(yc|;k-V>auHJW6l^-cIv(t-w9c6QmLaTbWo@O2 z;p{>YM4yZ7gRX}<(!HUe`|Pa(p6;;`wNx{Fz7` z*d3AS_X=6FaNS|+OdSLq-hj!87LVDGJM&{9O!CJQTl6x^U7>C0{K+mn|209OvvXpi z%>1l>tA6ii;+wd+duK4ny2QeAH4j=_`!r7H%$x7vtI5l*CE{*PA{d(04YV6clC}(! zXy0BB@QIhwv1|;e-zN6&nV^Lq?8K24Y1R9Z&c1KCn17{jnnD%qME;>lC^< zUM@WKy<+I|$GIp|zznRMn}%hKNw)IO2if;oargw7Aq+z4*(zau;h81v+D8IGZHE3w z<@rLHFZ`k16!u?)S^B3jMYlO}F4%7#f9&d+2|Oe*RYHVg8S4oXj z=(ha~*0w?L^1KZKL6En@$kxB4S1?VPF}wcm-1T;yMiVz{F`T2BqyM1m!2K!)d*^!q ziVz+DyFSRO$;%?Ke^@?J^gonOAAGt56rGa&yR2WK&wMNp?nn;26aV3V=J~pqj(xLxx%lN2vpfTa zWR|}=V~fF?NsaC&&2KP7qyenYzu=_DD5PI&;3eZB^0NW!uHykLVNonwtMgoS#CK_yQ`@1OdX>?_GmjK zo50u0EAITbqd)&**?3m4@1-#2?n@XfNfwa%>&}(ece8Q>iKsrp9|kxL5DpEcP#RkD zBzyG8KWfZg^MGOF(#!X?bwqXFwD)5O>;IP#^T7SYKE)?Z*!WRT_y z2JyGcD++xvDsSi%`fJ^cWiA-c8U_8~;BNie6!fw|S?>0Tu#>b%=j>Ms7f`a4{Hz#e z<1;Cogp@7AwHYhR$z&u~)7H!GFFeB~4y6|xJx&oM3twJLUx}{_C&A`d<@z2*V>EEs zL!K1HXy4L&Xw4D`Go#l!jHf`n1Q7N7i90m9e>+a_DJphEnkx?R@e`@{72y>o<&Pw& zxt5!#CQsD^aAs?2Fir$hh&a3(mZaMnb|3#fd3H2d9Y-WurSMXZ@?BbI#Y!3ha^88d zA>=f`)Pe>i7SGr-|ia{>t~V+MfrKCiH5hdHAV zNfPv(gnQ4qfDgfm5DfcR+f0@{VpvW4A#RI(Fn^`_2RYaM(_ZkZna~&xYOl$F^wa$$ zK2EywSQXbYpXkpH_U}SmPM|y;lF7PEmi8#x8NS`Up#0GhUAfh60Z@`Cs#cnxeRsA= z7(-%IB{Ch-5~29LjB*;@j5M_P9W^pHhMz zRzP>l3qKOJ7hx1}c^`ka_gnkcb|q}Z%o$TQiRh3E3dyd_*xP!MU#{mtb3}5LiV-_R*dex zfIN73JXK-O|7pQPu#<{%b?i@Af+Ol(D;-e*oU9VT79xvyFO!@uGhsMQA}fI;t}lKn zjuY=CO+}DUy8&%h47K&`^0G8Fnz#wBnF2zzCIrRA^RZUAqy82L!r zIz%yW9b3@}Kydr;+|UwYcXim@E^06X^I6hrG_4~ols<{hY6*B#ni_y&&e^dYY;639 zDj}DYx^&}Px$@Clo)8gu5R;43I)Bf6Px@yFgr=?`F-;}OpYPpz8Hw=}wBy!=w_suU zAe6msIi7{z!i8vVd3R-u=1pvJUie3b>eSc`km@b8ic)W^VhYPTw!Vv2v~A@QH|7}h z_CsWE(YvOnwz^SJne9osQ|Umazf}e@eQ}ZHU;T?I74b=qAs4L@xr-jCMd@-@eSUws zXT_zrqqs1L(XFYB_+&T$z|8s}`OaM>gkpC+FGTRr!2+t#sLIU#q=Sm) zNjk3@ts-*7PKb4Qym&(51F~Cq|6pV7u-Yu}ihjJQlx;t&$o;I#o@+E#d32=LjMIvY zdsP47>8d!intMnM6AzcDhry~Is3zR6Y7HG5?4zR_j}<+Di|~X0MVUSiYW$G9o#YRk z#~TXmB6J!S`}a_3^_}Zv7`1nf^E-5|m5f~g#(~uot~M=OxykLO)34hLy+ZI8G5A`1 z5&S%O{Yd;aW3yw7xr{$h;MZ7nscBEDgF>H)ij6!3%g_T?474pf`-%+5Mw zS_d`cyo0ald{*$nJijwOrfk6Kpx4!l$ui{|$O23*S!f9o)g|a}HJkd5G)eYnC1aQw z@s24jj*Df5<8=wlwZmse)9RQj{Al>_CMr^480e79x%}Mq{h^GlQK* zr@zTcgLrE2i;>OF)ls*n_TrM)2} z;JKx3#z*MSBZ}PW$o{kMIiF8LeXH)qf`P8yEDk{I$Ip-Gwq6O{Z<6uHc9Zg-kqf^6(spvB1XnGz%9nfF0Ihz7C6~ z+wl=MA>TVi z1pqy{OpgY~nQ6QC@bhjmU2H5EJ`(UV&MLj5?eL)=Zfg<2vdktBU0u{_bnky;L@z0R zXmjg#7w`_HsvCtzS()k6EgK5p+E1TJ?l{Nr`N6?=qnCHNP81rTRVj?@lkDPlE+a1J z)Hq8&SB7?~>vqCR9q8ZLkdib-2xf2kh2%15xYB&Cmd>XE{kTBSN;8Y+vfC zxvMp3YRzlF(C=5Of*Hm;PEmhK-ruX5Uz=)^w`JJ-N=M`0}Z~$i@VLRF<|A5+Y`-mPp-t_XB=zgs>%8DFVy`~Ka9^!6em11 zCc6ek>ZXU1bpng$pM}z>a;i>%zqTp*3nXx81h#yRAmANzX-hS?C9)s~C0n>c%y>j{ zJOz`OLrG;hm-yoPnB=S!f_*UEy}y*KU6=O#UwX4=e_;PO856(@`7B?-sNo?G+1OtY zelUvv9G|TBy;#B0;=&^4ejMZTA=4;Ld?Zj^H*&Z!T{?q>7GGcoxf7;Y?sd|h_uS9o zhot8YY)Vty^37jQQe+hJ7d$z7tNCmHg{MlUWUK5XiLN#`Xq5Be`30FIdDs|Ek$Ytf zzIc{4L(7K9=dKgfMs^Qj|MbudjHsfvzqa{p_cphZI%!c!c$Qc31&#|_BfdwK%{As1Y+R}T)2u(HlB5v^3ds6C8bmbntdmv#er0>1TLw|!r zMOEp_rxYVFfuS0`t8D$;nTqw?_2Rq@i?aqEb1}_F`)dy_9eaPDzbLW-47SJYij4Wz z9RkZh=8JPXP4P2>+=R3S_)td5Kv~L(-Q9EDn zK0i&NK3k+vAcZl@u=aMR@$-G%&)u~O zv~jLjXfJ<7s`LA4=Yf6`y8_vA} zpAOT<{v5m0Ql%LZ#Mdj{e>F9o_&o+TK3T(`M2Gn|PYj-kH$8~fVzJdEuEk0PZyfi_wn9HfqG4%L* z(+jes@zJV)RF0xKf6gn7Bzc;?UKZwa$E%?aiUcKXW8 z_4x@cIi0ZN8v^0u$VOv=Co_w7vD4V8u#Oia{yaQJ7vo;=>_3x!qwxldlwmb4raK84 zJemhN)S_f}|QaK0dgiL1~b=n&P2W0qCmB z8gFz~o8X z3N9q~SAy`_l$Bnb9_cY};#r}vh-W%`#YR;}OVEdB8D^iKK?#R6fzRwdR*|)rid_fc z6q>@iQYPdOvLlDAeDV`$v-Wjgb+1?Ix@b`7aO;z7 zeEQ#0E=`nbURqrX5@#=>^R-2AV6SOK0+}j{8dv|V%q6IAN{G6Bg^-$Y2*Y#9k<4mp zbYkH(C-PGqWV3Ci&2!$-05V6%4n)J<`O6d$_WziA>!_;xW__5Hje%@Hk?uyiq(s;> z(jg5}(jC$$N=k}^B3;rTNP{Q{0wUd^fYRONJNr53Ilp%;m)`%}=(j#IbIlc@arZB9 zwio6fKm(+;Z*jQpYm8ZN0c-M)9)s#=-!7*)p`~o6al$*i?KR!i+=ea*b7P#YkAw9o z`K<*4YR}W=_QG8D@ri?Ds2=jGW>AA=5^-Ga4~v7eK0Dcwnhc1?xzs~ucD4dJ zyB#z^fq<=~i~#GP{tIi-7_>LMdoF@yvIRT+YzZ35t#2XGs^oCaTO2(Z z5Q=^Sq>vh^#?zpmoyp4Hr-O#kSEnt5HkZkt)98-bNwse2{)eWXK)8+i(kozpM~Dl4 z*uIAXvJZUiuv3r;{@rs%B|NQf$8O3QwZ$O zKAT{5htsRh+@M?OSojvJ(kwE97Dg5WU| zXR8S-q?`G7tY+j!ZAidL@%{4OP8zk-UH+l=DpjT}{(N#Vw2LA?wM>pD4Eq7CwEQ+$ z58q<>Qw1T)g=NKLvr}@{Nn{k``ZBGMh?3nL#$ENU_ zny%p^iVlA4rvSpCNkI*ZeVjGUNyFlSEZLEhj*=H$uZyQEvZ+gw^+EcII{-zC9vMea zLNioZMX(4RM4P~;5~^;6DX5%4^t5J|EjD@Z2`po7PhuyVv|NA94dzSaLE(}iU2cJ&P zzkUfp58Y;*xb(^$-%~3{lzEBg*LbG_3J=1M>_WE9WrTycKJ7{bp8VB2?To1 zc;My0&blERBBgG2>7V%k+w8Au<|E#KAIGDm!kA3I7LzzIZr+}4!k=!YsN9M!iN3CB zN67DF6dXKs%HZV?y!{h-cIlTXAKPX4H5?QCBrAgMitgsbX08ee0YMv9zzY3FWr1eV zeCxnWSCY7uwDZ{lS^>>iUiPfTzg%d@)e7HuHPcwk?9>A+w1e4{zM?{aq=vzEBuC5Y za{XKTgYKxh!c}<#>2A(0B7`PRFC~SbT`mUheV~Vu^Xv&tqL`?P2XuSIF6G`tCQ*Nl zr7=y)F=Hd~PL)#dW@EcRk73lec*sMi8%ZBE-hNcsuDw^O$t3p~+jDJI!#MVok#I0) zSLttda0YAJ6LGn#TqX|d_#i4GSFkfn$hh0eT=MbU#BzR6^VO39j2r3(LCh74M+hQ8 zpYHOTG(wIgQ}zQn*!>yUwu2Z?_ozG41Tz>IEhFZn6#P8n)=-$vXg11QyD%F2ZlX*t zN3$-%Of{Oh6FP=9QyBbDO&NB6UR-VZ+T&7W_#7F{6PksH41J!U829z!ImJhL>w2>j z%zP2SNO12n%CjmpX%@}j(~e2ux^)Z;%#l-|-O49lMrgHY&{k=eKzxYy)&l6DLt*#S z(D&f~|CyNKAc{i13EE=>rt|z-SX(je=8!5^o2H9c>S@Y4jI8s^zst^UU~(WM+Vb~D8V&CR?W zLPHhIN;un|3g8{809WVc9FE0|>-5{Yj^`7`iu$NPOUiW?Hw zGGZ!6io0JfwfCoOWk|}U;xa%mEet|x=KL*M$D(Wfcd!)RQ+6f(WfXE;4UUU5Wg;33 z#9vanLo`Zh3nAYRAnrw?ks7Mwt3fi5D4o4xtv`B!DYW^s=Fd_vfjM_Yoq!2&kvc-DoG$1bi#&+xjdG7@R8cg zDz3CiE5Z5{9yq8!L4LV&V)tJzKiK zf3gAhE|2-Lp@YVN4w{JjAO{Fn=8I12LNbbSN_J8S>Q&dj7cMIX3FcdX$I`V1uZ>8^ z<0ZFCi{525tmOpsiU*>EWlpFOKdy#e57qH@9A6k5^~kVOq>~O3^~*m3ZV-O7`jCvl`-Hp!GyvCWBq^h%fgw)| ziBsVKz2pEtW_1#XKAFaiUgNDnt@>YJ%d`N}AN8XP$oJy~>BC5D&Hd>2oEq7o^;B8J zm<$)Ef55;aW}?~8`#OctbtvB&0Z;yHl6(tvCqC{*HR005Qu12i47cTYnJ{|VX;s7= z?zH~H)UQ5`sC%Cd0?qzaj^-$=PM!JA8?>g9nGY%2WWwG=bHuzA-E)naHbZ_xD^JWg{@1w9qD4&3!RwC$ykE+4b$l!^I_1O?0=C> zVq1|884`I#HI5`u>XdVE&jo*K&G>}#_wi_h33T4%B!WqVFD(GJ7-o0xyz74x|ouzLMW{0(&GUk|DJQ(Wkq)SY9}xCHKESU!N9Md?&&S zn5O)}k#jx{b#WcytV&jXHik3SH3A8h(~J{j!cjS&iN`1)YAWB%_-y(qb9mHr-0WM{mMb zJsV*%FEpy>%dRv*W@0c^Q}8GU3m=M{FV^y`3mCnKJKDrd=9a(MIpzh;mQ>fH%(k`I z^@$rC>E&qsz}l_29a+p~_U$h>F@|1Tp0LF6=9n}K)S5;MQ1P~ttmK4zBNtqMn@CN! zh>lbxo)o|P4Nu;gf+pdfklNzYhVA-KfB&rdz}m0_HW)kT$-jTrN6Onn1k%&Z9kH2(8+aT?iRuU@9DuHYc zm+@rFv1vo1U|N7kxFUw;ewm$&-P;tW)yajKccPw3j-B8FGrob;ruLqV#RI<2x2UzR z!zqCYL55yivyRmVX!_m9abVPtsJj+Ge_fE)xfK=m4FB3wg?GqT&dmq6(b9G)1_rPC z@~>YO(DE4IFJ)c!`zi2awE&CD0yLG@bzNJP7ockCMMeS1SPsnR;w1dMYH0Q#EaJ=U zQ2)#G`p9>jIv+^D4fd#01ZF4Q`2;zi$qI8B%OCH^Aa77(AoU|!^zro3DJ$XN@zIB7 zeh9TEr55)I3Bi{C-TE(6l3G$AV6^4Wzf}E*jGCJ_#9zL6LBnRNNh|Ymn`RojKOUQK z{>j#danE!qg+|MSC{zfBHdsXlKkiUDpzRRPk&2~eex?6+Kx2p^)ROV7?saiI)6x!) zqF`=Se6SjvYXa4Re7f&&PXM|R__TX^Ahq-zZ5FgXF-xW;$NL5gyk%=lewY4ZBYZ}P z%k;^jkxZ!*rGm=@*qwCuo$#!)Zg&Q_wD*rbK0!izo9h=;N_7sF&TSvPqE%Kt3zMMF z%uEVg1a;Icj(mE`vx7C8A#OP^?)i*2pM~Wu?*x>-zS7KV@;(@;>aknh45G`*JY5PM zAncSePKNBX>MbDD>TbaO{UBwTjf!xPqu!O`%>kG0?>gYuwHDidP#Ybr8I=YQ5fhpP zj+P=*wE+4XjrAcq<)eW7A%#aJ>u>PLw(JwV24N$`KQ%X5>2Ua#(W8%XjX# zC~qoQoS_%Nt-5Y`tb`(0(N4uq*ViYoN!W-)_Jjsi4shsBT)IxN{C$?57c3PCFxZkK zT26ms&J6I@^L7!(ftP`-^dFYPN}w8?V^wtdC9z{DyO$aRO?~qOPDKkgT8zO*YfQ6O zUSj?GZ3_4BN%w+C83tn(qdDW6;;y?u%3xjux)9}8)RGPj2OR$j+uShnMQd&gZqZ8p z`elSg)f3LwLx2t$0HyA$N{YcGkF2K0 zAQpDOZO|&l)5%;(rd@>MnMW|-@-Mt-AcybnL(Zcsb@FY)<)eR=17)-=zV{!LO8sh| z**V^EJU^V`zAEH)^TC-zN5O$aeA^y4*3FmJgGF(;L5NZk#^we0Bf^6kw-?SNKZ!#Z zpEJ&(c0R`yWqsW*4(6u*Nkz2>UkiJZGSqYRw;dV*4nWdw#ZZxHHh+#U^@eNXWXJOV zcU#J^^jt@-Gm+g@WL3n_$71R&GQ?-@n9jklx8vmtO=TG6PY*^LRxE>k(OV{kI1D5> z7AfXe839lTY>O?g4Cob%HD$aNj=T2rU{|TdrtX;fM(F@8fE1{b%e6KLWmprkyI*~9 zISX!Yn^cvxyh8=x&qb%?nCfZ|;z9OX_V8`%2v~zE>r0KhM=Ra;2TNGS9P@S$6^zw> zw59_tIJd@8O^i#aXSN_0+>h0hj6G5;Hfv(wBabQZKp}r>9$!rIeCPAeNuR1sVC-RP z$@5;w0pnJx;>+U&fZ6prdY@Ls+h>ll}})1@z@SY^}O~- zDxGEf(ckA9nVjpA_M@B?%*DQ%hm!l z^1V(gkb8z%%?24W9S!?qn3^fnppWh}0>$cMnM%U!>3|08Pm z*1sv_FrN9I=49O#Wg$^^`>sLZse!?%D8r90H2!bE+omG2tlu1jrmGjGfUxWTnow`s!%fB%(n*^`ZHS+;Z8YN_wM7T|<|FTZr!F zLcE6H zHz#uCk8em^gZ@=l6v@vBG$KMrCxyc{>G?aaE{ha2@tbHM^qGTeD&FUIps5bjIvQ%1 z8BJU-JGPE$i@KQ+YK`OMKh9{jh|QCw2FaT`&6tuYyB@+?lZ52EBy&I%{R!kR&)v6i z>|pr{LWM$KGwTmX<>lK0>FxA?K_oAXtt@%noj7cdwrOGIzF`Zo0kcB2OlL%hQ@Y(y>(B&=bldH(8E**1+7YlsAG~41G!GnYa4J=dnsp&F^WE+xCJJiTNFgK}cw&RgK+tg&YCa0|KYG zaLm4g3NDTmx%?cV6Et)Kc!0Bl=*V|8< zIFj~1Qg~&kf-Nj_Q=HKRUy7LnA@&FTK)4w3V{7S;>_S`xB~Q_;bN$qR*pC)R-&o~0 z-FYN_c|LV!J}%2=T~0KEAvE zceUpW;KHg$wf`r}aWno&SR+{}tglr(G19`a@nvnNhcYWA8BME8k2IEV9*NxMd=w1A z{JHUK%(L=Ez$<2D8eGH0qC05dgE#~5+=-#Y-2ICecuDqTpq-SuE9Hi(>Y z5o#^Je9tyM^=bX2=6TxCxBEaBJDJnR$@t?t+q6qdl_fQ+h1!oqmcRFc$j=rhcW|0VS;{StevS`ovbR;ZQ3%^LRBo|_fn8?a ztAX>%qoa1>F{qHCAKL!(<%`BKDW?rq7*Kvc=nWn$&O*vX})VKH*`s(Uz;a zfq(8Bkmtgazm^%Sbul#*p2`C@);U$?+b8|uozLxie}1;nd#2#HFdpvCTh$MWiYDL9 zJqd`c1g#)0%rvC71>$weh#aeA*9<&$PgX$93JKEC9$LXJTad4VU#F{e_HXNYJR6B7 zxj<(9SX}Dwr3~o^R*Q(<>fS{rExxAs-uuV!{(2lI*UuH57(*rbZnyn{>(h=iIxP1W{i_K;1BZ0og_DsPoCsJq6gJ~DF*x4*bn z3azx$mK7)>y*1*2T<5M|CgKpo+P%e((j>U%s!qwEMU>4n#`m&cRaO@}TcW!~)-?Jr z|AQ3*1!@RLsx;O@|0a5m3k#PPJXJ z&wVcIxdV@iMOQ>SJF&IP3vQca|E%JN=BN#kHgMD%Ck>a!+=*IX+1Jy*4pXG6o4 z{`B1WM(tM;MPhXWnNWoN;Pm!rA)!S+->&@%+26CL-3864F8}2`=d%t{>$44;TFY)F z%qq{d`ETm6J502gd@c4Y{j#*CSSHc??Tpe(leLHJ*^EU-V>R=dHG7=$);9(R9UE5i zPgJv%CKDx|->}ZE5GiE7mJy8V+D?^sMEyGl8zg90P0IW%U;heN1^Jc7GsU0GNWLf8 zJ6o~X9f&|gG$Jflta&**%4px;PM4V=UhBh4zmzrP^@w1Q9yU(h-1ft0S-)n34=!`O#RW96Nyy6%8k_V`kO*QSpIJGUUL@$pQjMH>lN$1bh^xR%wKSr%@n{?lzY<%=N?3a>XMH{@r(RH&!m{)qQ+*#LMTdy1 z64XgK?`(1Xa^7=U6Un1LcUkl|y_Cij%;cshnI7Ix<@jx9c|?0PH0}562XQZyrRXi| znsP+Q4-Q47y6FsNi@x(Ky{d>%jX-`)&V;c0pQw=xi0ylgfCSG$JIkdgR9A`1%44Jg zPsm#*zO(+IUWM+-%m>d{(&CC_WkX98N;uR|#dgTSf>Xx3__mfqscP8DqJ*ZcZKi*7 z_#@;N{XjBbs2=(bJjj(-8ZJ-QY&?&WzV%0WlRS~1W=wJrMGBB2`D#qCfAHNdGDI2{ zDJte-*lIo_p;M0Su8R!qUDb^k>0rrl5OPQ%V{*B2Jv?d6t+ow^QR?=ciU!gU9Kz!+ zNp>U?lI4DN|8xoYqvtxPZm&_U;t8Uq9aus&Jn3@C7^@;L3?^L=)42OufcBNK(O(TI z6z+xrz2$?Q&g?y~9J{v@??!ZM0*pSUL&jl^)k3?MfY2u_S=Git(bD5EO3PW&Re3|? z?_uw-G){t|Sr}FC+@@=8 zQ~1uVT9PlvS`{MG_xzR6WY-7Ja4b|XdSxG@&NIyMeS?vaLw-J?uC|`#0YrAYnbob2({bDS`d{g{qnO5 zr1ly&*E!wMVYGBPMpBj6J+}IIp`(X8R_+^l9}_=r$5f_I3g^Q!4Eo&I*Ne_5rD%`R z#tEllM56tK!BT@lg9t(X4rdSM$2#(&WuHJ~)wm9BS^V-9o7e85`AT=v^Lc3 zi>%r|hSAc~{g=RI2p;vLL7RrOxMmBZAt9f;WfO2{K69807_uGl+o`3GgOx98p%sJf7eDHa{$Ryzbe7Ag~8r6g$ ztc0}2#pNs!tcs#~&Qnu|#o-B_rJL+rrf%I#qvfWpZa2eZ%>z@9rS7`DZ-kKMrB$Eq zb~+vius;LP!AQbWe+N0gjg=urQ0!FMar+ilCN&K>9y{nG5)t}{535@6(z2spS}Ufi zLwIRNyN0E3h!o~CpZ8uKe}RM_996C?t;k3OzKKblPlR+Az1vR;+@FfVU%Ka^g%$aQ z+=)z!40oq+ZgP!4D5ihOi4pw{1ezrj*JZv0_dcp!BQdT}_G&i6ZF;O(@40}Nk2<0# zJCFBWd+vU!YyT7e6fJ3+Qcn~0{7~#V4$MLCyX}yk^Vkdq>37?QgUZ}w6v8kjc#Lrx zeC$fML{oj%5*6e^bt0=7%64VxyzTG@Vp@@c$UgrN@2|3|Bh_>dn&~>TJL&gWI&7gN z&pgV#C$aHyXnGo{aN!>#zN@eXtFMJ{S`o0S|4Te}y7MbErAH9q?YB{rtZZ|-lx!+` zh^~JJD?{JlJHhhVC;Jkwo2P$oh0!lTRxjVxv6s zzUZO-wtsZv8SiBqf3iUBgP=tw=|5^7UlIIR2L0lR4MitM1=I;L@Oa%uHTjVttVGA% zfo|~$MeVsq?#fex5ebrytCDIWf0I-lM*P)#KjuTge3t`n%@XnuUof?a8H0Y%5$9%e z(j9s$5bMnN8PciHThbNE6{rPaq)McGzh3$B$oEj!l0J?E@+K`B6aKGe(Qp3{vliR1 zJY3GP4zlOQJScIxsz|Fu&)81+cmgss9mX`XK8CxXs*M834ZA?^+_` z>!zF#txTPR;r?Oa!GzMb`>AnP$FN|k!}o@XT8G;+jy zL`M(08S#Zsl`@N=&THXD@^-p|MMMX6phj97E=nXOd0M|9nh_{4ax%DLBY~aGuJ~Dr zCR)}bR~Sb#R5%+cAwz@zbf<%qqR3J4*2|3WOhlsON`URkRlUMCT>d9`6y4{oD8w8rXl>)cgst8{2)9=Zn|UJCBOJ{r#$#%8 zY95WYUp8O1I5erp@s?PH_Z*dbqqfqW+xO0R5Gik zEZ)qv^s}dVYnveWT!kX<=C=-OEM9l*l}8q}W|$2Nn3E-phfK6lIgs(!_#zxLg=S@>xZ|H}xdV-l@ z`ggAWl`|qb_x5}__}F;qXpwx(*K|f7{skisBz!!5BY}*@4u5~7>nRdbd^)lG zU9M)RY%reQg``3zB2uTMwTrDgXTR&2E{&R$CMcqh|1q6vq7X*pJkKy3NKTNE=6X<9 zX)Dw>Tl+~F)qQj0O9Gp--PC z!A2YQO%Kl_0yt@vjPuT~Fo`Pk7_h?m&sw#r2j~A)^!aao%Wd}oy`}2-umTQ|bTA@m z##@+zkCBd;J=+$g5sLE-qWyBW%^@_R3g!#tkY_ferCDQ@c7SpsbQk+_yC{H0aR@?G_r%|L(KD zH8*$VCiQyDk9&XLvF|agU@M2JoL()+pz+kp@cE68&ck;2aznU;L>elI0~ll;24dR( zQV1>aAoB=;zBL*j`qqu#5caw;*zJn!N^INy1qN!V%@?&3F=BrvQq#gzX+O|gF4GER zB1lr8S?R?zb$u}rjA=dPU~xDgpZaMishefH_1{ImkNIni)bpCr>$0@?u!h}q1kpQB zmAAvk0XedVD_UnCqj^pWE>0^O0AP4?pksH$VRXL$H5w_gz^$B9&N3kO-3E@nL%8)i11ag4E~# zUO)(5T4_te#PYyXuiQU6($K&snT=)2D!_kON6pq(PmEVu<55|{kdRt4pwsbSzW(p~ zYEZx_1arnLjdIG;B5@>-=dmpqfTj%vF=eG~;YDbxRj9^3dN5ktM6eE^eJL17c#Ro*PrxCf$76;v zRDCN{YIadeJ}}K{{}Tig1?3^J?~wfP3$gNAI&*??GKoj$8<*Vg#caC5YVDqm}E<` z3C?grEfJyJNLi83X(r^0QOYgOTgk^C;~ll>mFU%-oTm(_iWB!fXb|sqQaF2<+N68x z{IZymy=3X+ky0x7{+IRoZ-qG4yjEuT^P`?v6VWX+dhLpv zz@d_FTFy}}(74W5{qja1d=d6@k|t~H&exR9K-4~(BYzV=?nOt*tn7a}PQ9}lm5+<0 zhqB!&Yx)u_a=YKICBA)Ry`uB)c;TiVjT;!qay_#zZ$4C_eeh5b=c?K~_NJxuSr`WU@%NQj=Brsze9o_@c-Wz1Fq}c(n+3L^p+0EsxeVgF*vOE zU4|Z7gNK}Bt$s{;p?(rEyjDxfw0M!|>7?q~!z)F8o4iwgTS=ZT#!OokoUT0NXTXAG z(Uxf|dz3ZdAkCOlQ-G{V6gktow_3;6Rt~g3j^~5f8f03FO$AHg5i`>n? zeJ|LvzL?l&;y+MgdcRt1Q{nixy{|rTrq^V=JT)68pS_zMEfzhYEEe$js(lYu^#QQo zC@Od#`8w*FL&(zygV$b1IcP-0zAAN%;91FGwl{cq6ksQP2<>sejNevsd|L85WJn<~ zn*U_XKFSay((VLW)aV(B?KW&jAeW(?C8DPm-LgIuF^HK{HX7^+s0tM=5k5#aNW#!<4ZP?&W|Bvr6Tmun414y*W-xX|r;KtUUd8>zPlt}(2P2YY*8gU= z=SH7a|6uZDwtw_$ys!EL)fI8o!78yqyTrbvQmzxbyk^wE>pNS)_$%Sr z6xX*#T(1$S*92>j@Pb`KzhL@Be1ZS>f+e&Sm#29yn;i!Ivl(sle)G!n=^{Lv-S%tT zA8!ax^SE7h(;*eEVycRb!Qa6ut3XeUqzyWA%scKHOS5OTvJ#BVL>z|)!@M}oQQkzP z{b^Mm9cNE36D<0vU*hN;3>)2k^a=^zlkVH6QDdp5`ISjp)a^lN zf)dJ3Z~x~|CZa3$#dV`LrMLXCJgkoMSZ+R)Sa)>ibX%sHTy&bedW2)G%uc#95MMAP zg^;x~EsndjNz;FE>p6h|o8)GNjLK~lrCAsd-hy#-LJWUCe|pYvK+SoU~sKC?4NoVrT=t3EQLGu`vH`2@lm!{$^RYas%Uw< z%i!F#F3525IvCLx7|x4lf|j*Pnc*9eTxJTY%c@5=G8QEzygqgEPztAJFyfgC6bQ9T5u+2xM?>tkfy$)C5z0RnkuujVGZq2Pv0Bbv6`uN{sW zI!{<78^1BcLpmMwaJSxh>+9TlQG2l!^p78BY}esUA3Kt&eV6E+$5Fe~9p7xGyCSz?qI`n_h%#6IZqqyRKTcZ+K$OgNEz zhL0Oe;JK^9zqHe~Mt4W&zvbj5PT`U)iDj{_b?p83<_yNSpTc>-(28>7p~Fewk`6qa zP}D=t6@{P5G!@DK2(2ikG(JovrxWM5mQlc3sc}hO6CV7(U zxiKkN`~%jl=7}t7wLrwP9N|iif*UVg>Og^GK|dGqcm`Uwb-+Cd@)sz5BNDjL48B*u z^#{M^`LD-716|_DnNMqi0TYd;HNv0OO7TXicu}O>UMpkZQ|*L(<$49AE9;G-=59tn z!Hko_yC03}nos>8j|{&Za<<98He{2B@wAI>VE5tdqAI+_o9n}xI8}6U+Q{7*?>_2) z;q`d=UPzE(libyr|1vR=IaY&YbeZuSo4_SCf?dKhdxqryG>N8Il2(ki3|nAa)zok{ z*y54E_$-%{#b)Y08|PbtA-;A?$Kv#{6rBkl2qrp&-k@$SzRHqFO2L1xPZ-J)xuBh; zV7KF^nNfUw=x_XWH{9wU(OYs2f3Kz6Oez>nRq!mj~rf%AYqC z`(o*t2Goe*mXVa`wBFuDzYD7fO4qMQT`=Z6gLm1`QhR~ zNTz0~ljMsfIa{+E-w}zPrB1=rg&fGPR~Q4PxsN3l<75Ea*y?K_rjI(AaGi4eWHlo+ z1uKneCf&;eh){#YgR%EajgqW_cyt1{p2^cZWXK&{BwzT*dtvAIKp^OyjFVRV@9VsD zj}^&RtIYCEmKGa}yV>$^D+s>GgYO7ZeK#oUDnAVDm{BW75Lk=m_Hp%jm!61WwSbpKA*xEE}MSBxT7p#zz= zDTtF$4CQ2;d3JagS(WKCQjgH43&FkCnZgroT=@ihbzm%es z?HYbv9R5mj6^Ybj#+o49##%&|CGL2W2h3P-MfCGHqO1SzLN_w{$l?`>sD2?vZ2c>- z+DBqlk*Dpdzx)mRM>!Z&YO8d!P6Ga<+Drm8Z!;J4FW`xVU8V~n zEvw>|^*ILPNycHFg;yv3>*mfXoW9j>om(a(XoznGEyl}FlG(ib zWfzoBUW2<;|Cjn`F9dN4#d1QH)YuZ7xZRU4z$xtz+R(i#s(O->_42IvxOIX;}AlBA4K zK%PO*1?x~G8L$!ricS2lo3}E2=wWHyrJcv^g2y#B9vla_On5M>6`A3ML-qypY_4 zk1C9o34O*b-&AR z3+Q*4eyfb8TMoe2cDsVTULbut>`CaIK2lrpw*t10A@{}u%jgxkU^F&m?pz1Zi55e< zH)k3f%fWZQVGV7CcXWmwkN>L_j1E+{Ct>#301B)3fzJx*XUEc-QMZ642I&O1*JmzK zcWW!qi+;k(ZL0X2pOFl>N58^oHU|mLg3ch&Va78S_5ftaUBIbaq?rRXS;!vj0?6Wx zMPVCO48?vWWj~hZ`>z{cA7pPTdItj1Jq7X}+orJAv(3h`D|>(5I&XfxcPgu3bsg0O zeod43g~ZG%E?Csk-2Nx2;0f%`vRLapH#_2=n*pqO(L*2*d+z1eGTD9$@VmV6D-mIh zqmQH5&yZLXhKongWZH{u{t@U~LXg-b1~+PBIVaXDoADgnEH`nw?91vq$%UO9AUotE z_&|zsne5-#j8T$!elg*Uqc`PQQGs-BbVaqm z;!G%18>~vubXKN`7Zo5<6{ElX2@$CCI&D3ApCNumOEBH-#)f(`QkSrHkLpO@X^{M z3Wg&N7QP&TKacxwMGV>J9lThS5Zop=sP-n8rjkJv)H5Xt5%g0KgEQfW~!$p1NJ3@{tbh zod4cK7F3n3@Jvs4 zuB1d!`OJqL0_#E)lkqw<#FR@O?UeB`h=`&UMY8xK`%wPXE5!H0k@^bSG)GcaFON|; z)Ea>(Y@($wDV?<~t-O=)xOIL)TLmR8%>sHtBB~Q0^)(25c~nc!NN@NdX#ar+BbhcK zi(-MnKuYW7X|Zxv$>GCD6 zqt;f$ZjVyRicY?v`N1W@_{A81j?oDH;$k<)kR5~QY1bk1!(KoiX@0q09Pq!5DkBQ{ zj_|?U&3sN!#lp(P4v-6AdJ4+H`>r%W=at2#NgfQ37mgQVy$9HGE0q)Cf863Favi*u zcz)!4nEuu}pg2SK9V{etKf~vz=-qMOoo><|%?^sUXUXt)Q%#%(I<#@ach`l^rD4e_ zx&Lj#@?PBIey5RG@evUb-sLW^A{>G9Rph69%QHf{lXRbP^RW8zYurs0?YxQ)m4{jJasnEL zJUEcK2*rPw81ZVYX+?7lJMW_a0Vrw;CxXW~?A$&(7*oDAx5-LyJWbfr$d3iJO7>_(-)qIxX&6~cY9Af(jZv9!B2M;Dfjq)rg>jYe2(|7TJ>Kkkp!Lcv05DBRcZG6a~=NNe#! zDf7Mm?Q9kYw|y4AlG|Q&Zrl(`mQM1&2={yU$1wRk#rhDYlDafRiSpCrOTfY=*{ z_-Z=2+?Acbx1%uN={!uZQzWB6(f)<6fPL=iUn;!{>L5|C_2tMi_dyrnQ!$w< z*u;0M{SzM&VQ6WEb7FE!X|lW!W#mIYIl_=$#J2ypJ$=yT^4SwE6pQ4xciwGfIS$Zp z(A6Kdtf48M__4NO#O&tAFjY9N&Sc$^OE(LMt&yccnOyEf2dSw8h@g6FqDm$eLwm34 zy&x?h{^QR$18f!@=00{fP-u_~;c@5hQ0naIa<2oh>}WPW4yih+1tS!)9moEOH9!0* zNT;lpaPb0Ww>fl6PFkb5XhKNOIPex-i6^v`XneRNm^1FKGSH9aMX~2~GOrU_MNEF( zefUj@X3WU_l}1!TGt#cfnqB&I2l-?`_EwvhGPP9|bu{v zjYSmia&r68{fqrX<$_45?@?dg`)#h+iETet-avfSQq{Z!)r+djA_?_lMhlB2iR+{< zt@(WKs)ZU=wy%Gq;rM6J;-A;GoI?rt1`XF*sZA&5Wa%faGw*}d?)d_JR7NlaQ{)6?_Vo-D(B9ejv8oWW|QqVXVFznC-K$y|hhrMH=i+_JZ z^>NDG%4McM6B>TH4sPqp0ZNwhg&H|V>BfUuRbx`!Bs4dchZ?S=#w0zBrV<;al000| z1L?(I|Hu8oX-R=)Xre;Y*IZ`0mU*#%TOCS&(o`9(2-ctXzPmT%YJNYviWkXoQ}Wo% zoAzz(CC?Ek>z<&(+b86ut8ON+51;B37cyId!G&H#)j9Czr!TMBf1BiypL^e>F1akXj!MT8+Q2R$pGc zVC{zQ|4M5^cobkJE>zWQv2o!VKJW2NvadwE%=PhsxnlYnF89+}k%!-yC2vNV811h} zDwI~j_0%grJ!U%S(lvC{acd|QM<%c;t70Y`Muu7Tjv34^=H9=dK!u;pb5Azn(f4ax z5P*|@yz=*fVMN@-oN#ztBJ<3XR}`OkHS_bY#-<*QWG}z)#_56yG?SgS0c!K3S?3m}r)UTsa$&DUp0aC4yMdx+Bzc(vaNLv|e;SpwNa zx!0T;snPXd!YIr>@=u_?f39f0!BWi06vUY-TN?x#GY6Xez}uN&zBM0i`W0qgrMhI7}3xP6MtVe&Dfpo@dz+&hYT zW3=fYy8DfJKYeFAX%(CMI!P*vK_YR=@roMp=^=C>t;)AwX4IsK8IiS6w%$a(>CQxz3X=)_ZT(LaD(&Zou}PQ$t9ZJgr*bM zK9gpjvq1>LJs`<>BmCeoc?2>%+T99&+MDq)|6EdP871ZouqGKi8b6Cq-R3weHHmF(F6o8g*KPxCuQpdeu|Vrf7`H+5SM2Tx~V0uyv7XB z%@)IAfFYkuXndfpbwAEciKx#@#Hai_IHj46#Bovl(^ZGC#yj1bq~Kw zQC{^nXmNfTCl(`CI+RQppJtZzYN}c75@w`1b$m)f=#zC+&E0HZwmhURe1X7GYr7VA z?m*X<04ogi3f>z_+`F>A%YBrqaXrCLp4YDXB|F8Mp0Q`rlmNFE!)e$nUsQp^-NeG~ zJ_mjlmD=;O*neAT`Pu;!yFV6vL$UbgY1>`O|JsFL6St=mP&ed5j}TX^ULmcpE`x=U z?^jk83eH`z{~>rpy#GMs+4g4 zws5^b6c7SYIPd$){ZP4}!C3p|Ckmws|C(u03aXf=4cBk=rD^%+(vk5#4&Cc0I970k zTX=RR_aF8x{UlBkM)%8m_qYCctUW=_(~`&E%AHyut9TTx?TN-;@Q%aR*{m7dULZ6E zH*l>`4^^veg>r^7tZGXv!%ubRx)btnzmw}SunI?3(P&ygiLK|Nf3;k0)OX)K{?|)^ zcyquycv$VDS<#c-(n$B5a75e*e@QkqqqHv4=LQE>2r+HmIY)U)^S{7(KHiTd>!fCw>__EISSmwQ=NY?JRA$>Z4bvuJzO+Sr7c+S=}Peyh3v%oa(mAn@tO1pM}+?7gj`cU+7C+vtgb2X+4ZEVBP+y z+=$*uk_0^F3H~UBYY}lseMCJS)>Gv1iB0wGyS=CTyp8KsO%0k0Dd;uzx%A27^$I2l zx`IYF9M#!>8aZKY?Rq#_7)|BI6L@P)1qV zq%NTqtH*nCnuj4?bDc-1Zu@x+iNrF5rsgMxHPN|y*qO9;{+BBi8ADj;3bf`H)n?CZVn%=^dt%`kVE(d*e~ z@BMpXJ!`EemNnBgzSw8RZ;yd#dOC2xS~njOu~vjUWqT0RH-%Mg1dsoXWR7_9Z);%< z^BA=D4{osQKJR=k7}O>2jW+iU6&)Lr+twB`}o!?#@!b$z&#+0uG z^38Q5H9omQeSmtDCuWYDO(mG&xr9l6{9>Px)dHW8%51Hyq3rl(#21a*K}S4x1N1fs zj#cI;l70htA8!?>Wuq0;8M$;T+bLw17Ltc=!6e6nyLFfMl z8ZxU0%Qa{&9ZARf&W5w<)qjA_<10ZNggdvD%B|GbFmh`5413S5>kZfHX2}!)H}}x1 zE#U0mo9mClll70fLX-C5;Sr1)DDJ(jSYLc>i>3pJjpEfRILT zKrV*%2Ls*sJ&D@g!JsImVI~{^s*eqQmNGpujO6jmfP8~Mj2sHRX-DzW!dVEq{3UZQ z=}3JG{3t{)m0$&rB#Qf07QJ818+o?*qDaEK6zEXtpu~R*(}po3k#(MQSQ|=4cJfhu zC7HBCE>F*;m){x{Z0{$AwRo`_b>tFmeOkx1<_a+rl zz2i*&7{=`^?m)hIDf}7W>MeD6pwEghIJ7uC*i?#qyx!^yzj&9z$ z^6_ml>N2^)PsV?k9;BETwH%iZnb3TUO7-%13`#QzceP%cEDXRdAoCB%wArbo%0l-i za#l{Lx&prv=mFte#dALI26g+tJzg6r{el?(Oa$)_{=rxoS?Ac-fcpiXxl%DT$0n5& z8oO7z(ylPnWU@ASWWA>R@L~FGJIzXuC5Y-Sg*tV~LUw7duF zR68|-Sz#HTw7PxawQFeBSCf13f3h5Qza`r0md1A}tSUV`Imi~2Rf(^u1U)^M9|t<> za12ymFiwQ0Js!@Qm2y{GxB3|>m4ZwED%@Elc>!(qPc7%aNqoiu2jJG4Z|)Y-q30BM z(eTPC6_?g&F++gVR4_DMx-)}xlh36?>xVzWs7j^mTS4aE$|?y@e*A9l2CbNP?Zos4 z3lQ5oOPPUI5U9ObEr(+yGy*%OQ2u5G2~0RyOaC_Kn&}I9bEqSm^UqriY4#2IR;@5UmK;nXML;<7^YPcMy2Nk4`|0_CE#ud3! zPmZT807Tkx(A`GPil}XAs@65+!ao|mu)OO}_y&?;XIM{8U&+5!gdPq+B1w^tj^ISt z2NDXPJho6#0=~Z-*Pxe+Jbe;aB1rJtq~(&yyi&UE&f7nm)9W|!&7pS;Pso?;2^ryW zwL*|Ve*1}GKq;)C1%5m=2h+e^*z?Ki1Bc5F#x>myElMJ>s8n`#eO9>Tx8au0)!Ot~ z{zufcaPPQm;m~5g-zU+l zHmz5l7)*J%j$XoSfj2w)D^PUa>8~(U-eJ0KJj;KN~lvH(aRZh1{<)17&Bth ze@H1GeA(g)O=r1~Un1?^nTmdsCK74~u-lwiY%lf-Op1B4!u9^S_FrU12^V;sp=?GX zFk#xLBz`xOww+vz4gT0KEu26?+iF1DQG)t@2q&fny%#9QEFb|3n9Q zDr70u5Q@PQhVKai)p`B58O(;Xb#@iG0<;bJ*9P9LFC+u+UTH&=ziJPj!fGGF`G8{` zS|!&VgT;Cv^zIgDoJ3%Zw!5ZOim)Oi@OD^uEIwUY12b4~o$DiEiX0>{EFi8kdWWNJ z$=!YVHayIIBEyFtKSw0wffVD^Iq*opmq64vqf#h63vVnIua0MVVl1~H>F`)TWGgg)Gq?jDLnJwOjruSxD zna!c%;Dc+HvtXZ>Z-ZE*^b3d8$ouPy#wfAfPuE9aScUgVUgIAi%#1|va6aJ&0LC|m z7%vth78@#IGMBtI>Xz)Pzi25korB}_wuEl7)A~%0`F_kV?a|ej6l~NFOqYJaR#N?I zU4KpwTHJxfjn8+vQXSda#Z}3tq#-=QV{LmC-q3Oawkx({?YPu;8O)5>zQmz|l#DvB z^uk)=hPkJ)_#=*S^nlZnexzrO@P|1sgU3)VsZJY`qOl zeZEY7tf?%ulb+;xt+1_EWAfqLLB_?G3PBeVYC3=(iAskLE)T~S$dc)5RV`vfqvBeR zH`DDKO2;M6e-d38g{~H^J2=qX$ zfRQ&JlKTY}e*0z%q z&s1t*x>xf>>%lnLT~W1_YDojQJ@RR*iqHhvAP?1EmTwf2qsb)-}f0G~e}k&s2$EOFCV=uC0y2cKWveG8=Eara4kN;U3EI3{f3%IELs6OodQQDsgQ^VfiRm5Qi3b#Y7L}T zVK8&N`XvDsbbDs{k3g~RXS?Bot&U;&L53OGF4&VfL1kNlzP2<1-q#Z6u;s8bB~~F*VpfIt!YmhQ%YZH?;gTgc)f3{kl<#o&#EGD zQdKA>zU8zwRo{^5HlVALQDXU13ZxEvr@-z@sGe&o`R-nYHRDkA`44K1HC3JE^?es85G zdU?F+RTJb2p!SLa73)i-d)7n(-9%_{Si<$w6yx(+hUIq*-AYsx_L$-lqD#~i_7D!z z&)Nlkc(|ADxFMWSNeI-8wQQ+%@cpi<)Zf9&mG-xz4T~|`8~0vY{>6N^jXB4)wLRZz$J7%m-tdNBVnTYtbfTH)TFVcB`{N54HO z(F$U7OWBXbM;{KWK%Cr~bZF6qwJ~-eBB;Tq^`zfC^~KNoIBgty#cp|5x^$!2&Awil zJ3N;uKEA8xo^+xsI&s96!in@bLMP*FL68_l%1F>-M8Vljxi)rd<1ezgoy$DX)G+>b zI;{z;pBV<)dzBdS9^#@=2*b%y&^9rGfMoj=dLZ~Kk8G)nFTHt4iHrooD6ofOAA;!H zeLxa_9C!tkoYUtQ)}e^Dx=rWz=2$B4S-6BI3H=#PoOx&v%mJ0rGvcBz^H?43Hdj}m zymAcurd-yO?3ncz@$x;>KMqK5ja2>25FBq$D`8NHpP~qGzV@Ivs-F~t`#|phxbu=m zgA7$Km3xm4ZbA=g^^1wSCHQ})e!t#tqAsNv*UYBS35#P1{(4eM#PWfe%Z4kI)N=#(Nd{}d8c)c`b9 zWtrv0GP27iu=Hm)`_CAn<;nKl3Fm*Ys4M|olbFla28E9&fCpaUebW8tzHE+6K_2ab zZ+gp}Tj`UFBV$y_Xx6*m{@k0i=`BTueY(-bkw`YACxT$rVf<|9=wCKgWIXVoQh^2a zS3Y|`5p`pw1(MTnDLu}2q}3*}j8;#A#q6i6HWm;Admq7AGGmoIy!dZOy@B$D?vU#T zqY3qsJUiw92wvk5Gc0a?bqvge(x>8sGXQV(Z2y!CH7;y&o#9XPVCf1XKnqa$14bnO zP=J1Yg_U8q%9~q2W`Rl!OPro8I?#U`SPyd?f8kImuv9Y!qC`0qyj1zbJR6~~&tL+G zUsjnS9(_5lJoVb1cYt}v7}&4br`uJA>-%nh(A@Y1wjszu#C;Hz=z?wmXP1@8_7^hz z3gm>&s#YJ8L5&;Us=ay74>$z^>c!I#iQV6wp{(6oHBN=>Babis6tYiTku*S<0j5uR z({FU!9qr)|<(8Qu4ae0a1r-(~LE>FCx$sJ2Ra3oO3sfuebF6>yldxL>tXZCI!mi6X zZzl4Sc0f|~2BCe}OVL5iRiS4U9=rXZ2B~?jT$oX9h1D-tmhsA3PQ8JWzI!3g_~hp( z@te&Z;p4VuM;!C%^yB--+LMYwB|*Z>L{okT`VBy9{q~F)&>s$lc?H(Y`Jm@a;jxG| zziDqsQ2<=RSt~&=mH+%}ItAeqERTg}+VyEAl991$2GXm8&5*^pC~iC^6T3ozuH<`2 zlXwE^-waP-Ai%NC!pH2ysMFBEI}oZFAH#qZkp1XBY|D+6{uFWnonQhgfy%K>tlnE! zAyy%9jwrT339K1eQGXr(MDs7}iylXTMdHmLXklm6P1F^+^$D8_`hiP5tX)v@Sf=#~ z=wy*4d)h6$@{Dck5S3k0ueJ$%3Hp>FXihBOeGH?h*9=k?Q_{c7WPBIO@pIM4WxD85 zj}Sktrb3v8OS)3p(1lIY+z*R@(e%8b&kz1dXzG}yEO1L}Uju&mb?x}(p0n5s35fi|mh5Ysib6}=eoqh)y+QVXA(?YcqpF7KaXWTh+` zR%Ly_DI-_kTUpc{Pets@`gUjU;wRn*4ozcq+@ZKYhvqZNSyh3kPLEc9E2o18Lq#*U z)nTW?oMw0*%0s>&4Ke&+NIil5rbpfbE`^Br2=kQYMr!q?r^IXbnN*$>t$y$S!IEiG;ffo?oT}XgK-V{T0~1dcD+ZchMb@ z3Im0Yymoh3Xkq-}&U|;kfxd32+C>a>gSLqLTK}Bhs^cT*o!p_cXqZR^Bi0(1J|W9z z1@~5S8Hc`lEoDNxw>bvY;*XJH;LsD{s+GW;FXx&;bXhn*~z4DLy!Yh%ym%`MTbuvcP!z zNmLu_BLl>~L;$S9Caqs(YU!qdg~0G3AJCm1RGM{jOd}miMRwJo9JOXm2J>|1Z5yGd zG(tmZ;9tuy0P-I0N%-7v?=GtAnu>Gu-Y(pBV9juRvRe&p9GCFuD^szBM2+WAf! z#lPLJv0E9zsmZ$h=y>zGL+%$C*xL?Y*gM;aG~ZBAiofXND2&!+TosAm5O9kwNa)#Y zg4%9;dx44wTlGQgQF>Td3BIi|6Ypi*0(~za$&W)cErkt>?jI<$YXdnzW8`S7q}&fR z-?Lxue*@oklFxRTJLeB<#ID^gjOkAKv{XCyw90K%e^kHYBxRNI0B^1tdI#vUEo+b4 z4AZx9l3a|7P)H;8_N>`i!R>akZ%Y9sScSF@p;`XA zfl0x_JL!JdwxW2h`_+5>Bgvuc_&LeQP~#z5SO{Orb>^OV(vc%jfbSlVa4T{_rQWSS zS@0=JIpW&euR}FsCg!$HZTu7@cP-#9-3DVz9U+~TviU1Sj|T(#YW>*wYa5L%_fCLP}s+83AB zI1k#P)O`2RAxKd~QP~LlabpR`gmRQI4Wp&zlTfg8#pCNBm~$8-Qb@n@ z+Y;G&p%{ssss3Z}$DnhYK(bvO?>`LX)tP>j9vY28TWycDMs$Llc1>xmk*5j9&T^#@MD>B>* zrSER~Xn==<&ZS}x(Kv%Cn_FTFrBRHGMfo=R&}UV?-kJV$IttoppU$L5hzzeY+cpK) zCFl<@yA0G7<4@5GVMa@lVidpgnz?6r7&up|SJJnkCz!)ik-1wYJrG2#_P&{gVN({$ z(5!R_$NCvvACCrDPmE9%@NPF9Zw|!;{mOhuSa%VdRP7nceDN$Lo_NQsxHSEO%g2+I zlUbjyF{p5Wei=rL|ZlY^g5)Q zs&5`Kna9qxSa=coLGzLsq1R}!yi!UELU4&c6%xl6%C>mbeb1w1#kr2gDBjB0o@GE+ zV%_u%st4NN^AGYloB;efr*i{+wGx6FvtvkF{NKvT8b`b+fUt=%MpWH@h=g8>02?d- z1SZWHNSLsRa7ez$_>D+inms3_sVTE7rx~=Dq3}4Owaw>78&OAqaeEe}f#*8{e+WpK zku}~wsz);}g>3~N7H|h$-^b=@zsj&rVi7j-evEYtK>cr*WbzquNj`L8FW##lF;29S zkf|L$339F8@WsRQ{|J*qNni3g|7+%CaXM_^7@qFZQ3)8#G(4^QP9{Y=YH9k3`g>xS zqKuXuST1sv-khaN>a*Mz{;iWQ+cmT+A@~DuJOmA^Fo`*XrZ_FZm&>Ewl^L5qKDE65 zB@r=E z9sl?ksf54pk#&`9q>0EGAzGdQ6H1I&pPh{$UaG_Ntqedcesw%G^7yA?BX9~&_ETxt zsq9}d_;*6IO=9(>=vibvP_vSur>gpEBrPPJBsFM8^aHf2!sN>5 zRtrw4q%8c<(o{-zdtK@c;|_*z9MoAqYmaS-8O1}nrlV>pifEk z>Kw!Zhke4T;cyUyx`nl|PTVl$>?Op`?lKw4OdBy+w#;xn&}*Kv95Ud?Tz^j94c1h0 z&bsr7s6++{j**V&-i|0V6f(!nfx87B!WVTm%sjJX|Af5GIO zT2!oX3@QU^;&LW^BT(qu)eI}Xtf6hWiGKLP=1wQomuKv2l-4fjRp)T|kFH5HJoHyy z#f*G>qfavWK{JTy%o0LYU){}wM5&@@#+BE5t-psX_)cW3!GI*q)o+Fa3{1_Wsd8_a z7;g3-ryLk>&Ag+Ca9`+sc6^aHVmQBCGEs>lbB6+RnNsq?sSFLn!+7z7cttL!6-kBe zo?1{e);?+q)44tH$vyh_&+)L>;UgJ4M*c#|it7{@1qwwx=2?4dG^tv`o65!n%o{W; zrvf{rMp;jmGaM^{Xmy4Dp06jr!xJ;WY+o@tjiYSos48#IZ~jH_N(^cg`pcF)TZmTb zTodl_`ns?1Z;z3rh)n|Bs44)rm#bM&;NizX9GE)Sk(SGJ;Y?etPC<>vf=a_;brkZO zu6MJ2i^2R&c5LD};NAP;OQA-mY`b1ba-*{Y7T+1w#}OzB8>^!?QECmQV^}Y>uJC^` z8)WhS6?REe-k6#49VVx}bWozle;P5WlbBgMgizbPwm}nkrDFw{OCZ%hV8*g)D_3G70DCf*m$NyK>MxCY50wadILq%frlnh&m#M%F>DfO6?eAM0?%EIxg{j7b z-e4@Oz9RUu^F8e=N*L9wu42Wy=fPO4@9nT_2{7VrcUOyf?>QbGYka=9HKT%dIajDL z`Q!$V-Mv_YzzKrD@*1Q6xB$NtA3jz=6TxIsY~Z>F?M7({D-KiV%f4#$cIRX|R( zYXCI(+scE8I*nUxuWX*vEk@qTYY33E&h{js1Lt~9$GgHb20U!8Drhft(|4KGTb~MF zx2{O4upFfkM!lC7CocXaHRx=EQVmSllab6A=A5}*g1mFas$5yTze={eCZUV|Mqu(^ z_#@4s)hAi`9Iq0)WX6ye79=AWkqfN1*`mCIaG!A0ywsQ3Q=s){EVujUYtrz90TpFU zFuuqQG`_Bz&qQzTHs9eGxHos7h?V4uR{bJo^x4xO@Opizxbn%TYD z2WYW*N@a`WJj*eYB)l|Vt_^yLb8y4EdRvVM3~-+vWq#t#jM2O%rM^kl{B=4n;%5i# z#RHyWaWjn^T8?8*$twfwesqUygUEDT>6|$nzDG|YYcl_B;RNss@D&Pit`tS}#s|+@ zWyr|WlA?c-U?F-Yq~b3Qkd}0yHA7F6V1$@!NABASp`RY%6drD}xA!XCqOF9wiri~+ z;CWziT-mCVgdaC6yUq95I*m+!fN*NRZKdkN-bBi^t?-QISj9q<}Aq0K|RBhgDe&w5@% zwrS@fSCEX&BE7)|fN_1SL7(|Y^*(3D&gFjx(=tbD{ZBEUogD+%rLKu@Z$+p!z9$l? zJtF-j!9k;Pe~4}u5U~EtR>Y`)k@A)wBAZt+3+8v(`S8^%<<+$n-K}tZosPLgL0g%} zPQbMWQv%Ol%a0$v0oBXNdfZ>l5OjoQa{jKaqRGxV(egP30L2uP${(JR1b2wgN-1KZ zJZPt;Jv;LrJ{Y@*kB&e1Gi)WoT|#2*0dRkv^qag?vs+l(L`mX=Oe?8EV;@@>ubP8@ z-hm;}K++@PYeA^)M`w>OqJmNRhg7+%Q0A^qwKQSQRovVLMtA)M&Qr0#dqs`erg`+T z1t#3Bqr!Xmjf%iD9ry)WpG|S)0~;$mlpDg66S2ZOC)zve`6RxTTMW2GjS_Rp{rMG0utm>l(lO z7;L1x<5HT6c7Ai*Rb{Ti_PJGvKU0^~lmkHWYqQ?5&$9;e1_pp8_gv|WxqIL6kqXc* z9G*SsaxroUIia4q)|5{j$Zvf2X|`e^{@2fknNO)7Io?g2G6bKXP1c6x3B{nR^~|F| zrnmivD1Y~PogR+WafP0jr&nRf>ukk6EjNCjF(Z2q)4?u8i-VpKRO`fb^&;+Ap;cWW z!;TUU*J*DI>ngOKwiF zDP?)-HudA4*t+eRkD{JAi?UJNe;m`gOXrVezbZ$s%Dh=v_*CUDq?Q|&7#63q@;P^* zH}3IL5YqwO$xeLaA=UXto};ugqVq0*G;2NP>yMGXXR)GDkou{D1MF;cDTWhnvZQm+ zB+Udr27j^c^c)L-%>ng@CBqiL9+#OHQq|(cwyBHL4~%v`eHst(X2>RS^L(g4c!+dZ z5nHgCc-43PNVW>8k&KeA7QwLCM!FrLMG|M2dFn;qBDx$~*hzP9Av4RvdFm~@u_Lrd z^#`Uz(>u*|;}+?4|}lnms} z>&?d-8(Y^l7g0H2>=&8oyVJdqnW3bDvPap5S%-~>iG;me$LDFLTrZgHJQh5lnj^U! zxqWjmphQhz^RQ9cWh~XhdtWVu@qiM)(a&3(TZ#YS*D(SQRE$g%=`{smO@>R|a_!%( z7CWZSy4+Th$!W9PzdqC2e8%TI4Ht_KS=$vH>NXA&me7cBm0*JEyWL$uo(gY-vw0W0 z-kI-XkwkxgKkd6w5Vs<$jCVcgn)-aD$LBg1%LB0%O9^jV9haQcld~ZI6>mOjqS%k? zng~*@f$Sl&O}?=*61$yp-NlUi$#lbS>d=L5@`dAT{oFFQDm_b~PJN2Y{^juIqa?>) zlXOS>$Jf>|m|Dgz6B-`N&B&V5837*-8BynKC)LbjDkowV8lF&d>)l+jRO~x+_wU|3 zdu;x-;djt6$Z^;;(QQ>RwWs9McsEsPVWRO$dj z;&Smqe3k6&nMm$WtD`p?emhrT<3>C@N^?AeH_IXA%)!MUAIB~ZAcH$J=*cKY;Dd?! zCidOkq?2nZ=oCzSIhLr(h%P40K+Gvwb>a#~{hjDk7i>Eri`*u>vf zuJTvgd0ER;9+D(>mgbV#G+J%(bSolyGK0#qQRxq#raI4`iNv?W`{>#cXu87x(W1=Q z0ESXZ6Wuf)U&Wbf1V>~2$8Yk)k*SEi7P!PK5C%*+Bit-27J=At)#wO#VSDb}TgRWp zr9J_7u=0AhwTtc6Q{7!wf&L4`z8B4MoQ0zUQQ=0ny@wIR1$B!d1JS2zSJGFT;cpg& z`J&>&WY#ZlJw?Q)q|a?Yw!zHgd5|sQ@le5wvN^!Bt^Yg&Df)+ef{6E?)lC)#;#)r5 zvF&cdlJm#SqEQYpul2HRWN0eizB_KdX{d5GAmos~5hH_%@?t#qRGJ)hHC z*%W*?jX_5DC=Im9vq#`{eJ6!s;AK+g_Ax=>?%whBQ!EeRM+QMMK$$mBT=v9*3os)GQ*0O^IuN2}Zf(O`o;WZ0~AErf8r$*}xz{W+} zS#t_zsL!|qXh;Iip+t`gE?=h6BvyZ`V2z_diYbhgvnQfu^I|(M1zx{p8C~_zkX>n3 zl9ex8kfb&giKeVFv>oKj=VMDIyiE(6XvkLQIRt5(%&a=-Rc@M8; zItyra^(HcozKc#aqV=4!0}4x{x8`O;jPnLqBPv=m{jJ+c0`B3+=#_^ny%D7@t?VHv z-&PH;H=5#_uFL@QyqKzZeP+eR|V7 zK^O2|2%`gV(1I&WAQZn+|(eM*NG# z3xmSLi)l`Ek4|kUyz|>7kp-!iuV(8~TN7TI2B-=ksQ2pT%s&=?|jCzJj{ryWh zKdsWyK`MO)v+kc^0o8Gzms22-y>HemI}(d8xfIU^Zr$RmsZeTqr$eNn%5AUI)1xAPbZ#9``*gP}864aqt>Iv^CONs9XF|8&fc!8SN)!N|BD^g=W#F8*sifI*? zK&zbO%6|$Rq{s#0KKP#fm$}TKN{bzIBkNf~b^G^gx(j#(kL7+`A8NtK^~mJ#;WQ@4 zdON|4tn88Q^C;Jx#GhDB8HW&KJEF+RGOTmjtG`Ju$BY-#VW4T&B?) zuFr9oAz9H$B?DXEtehDUepbI9XKhRyVV1Tr&3Q*H{d}O*8>l`|Mco@@+h}xr8q=`v ze>JOwIiBDpxh6h!A$43uV5|>SR1U^m60+>e=%HSY$YpT^pP_mxt1t=BT$;brfl7dN zqnw$6n&IBqMNRY&owsu7_hnnQklupWxe5o#EAks}foAbdw!|qcHF0v-iAi?Nrnpo~ zp3>x-$4Y%r^FBj%p$Y%~+uH0gjpq+pv(rub(qJ@Hla2S6(w60k^Wt{8+h&<}Y&d*7 z)=S#xc%1KcpA6l;XaW!Tnl>uy$*RnGpcG|2JbtK%Cy%9{f79p7YagppNv*%zwz33BGwUFUQK_7rYx$G-v)PC!? z(fdUp4c?TIG>9MXGM)-+$tZup#X?-iV-cOg*vycGcn9yp)b)~^=1dpCBhOa43QrLE zJIc=L-d0(ue)w(TOI8r`nF$4vF4DfBy@FIV{g^HG$NX^f=?B zAOq;P)MVB(TXVQq_NrN^#ihY@Wj1Tu964uqT%&+p_H3LjPt76zK$~dV`4Yd~d5xgo z;4Se@Tt-i@GN<)42PotR+jH z*O)Y*5-D34g3wMkfxSj)9~LINccsuteRo`gGvM(n7SsMLv2WJgLGlL3CZ?sb+Xd3( zbJJeinEI!~U|qG_^Kx8BuS;SGCk!Og`k7GehTqSt$&sts_8 z^D{-((UNF$Sc|jXZW=VhHoVcjw-h1MrKGSTOhmFZK0AON%J^UGiY3I(q83{JP!)RB z1!wrfEEa7jsnD1<1&kXtCB+(eyW2m*aN|kj7n*q)6mpvMg}ckIDWUn+>#Ri)@(7fK zlRhw{M_l_@vp_SH(wk{3;O9O2s)%4wf*t}+E-)#?v`C+)ydVA|gC~VZlka`4xDq9A zs4mOOTYArqQuZmZS)d&yC&XU;*aC?gF^AC>;k1Kcq`>xi$6U?=Ox%`bPKN`N#(&0- ze@Wb)@n?;zlUWXdvG049vTdN>v>~PnN)rK3ng68);xG-oDFjA>1>^0rV}diVPTfE6AH0H^D*p995Mw4FV@{gO5_|?Smx9P~ z1xW$A2l|$r1Fw<2|CJbHYjk;U|$aH#b2NVUU1mGy}SmO&P$#h9L6)wO4Nud-{e!J3A*cZa>L__~o>Q)f%v{z<-A z>5k=4s~Vlwe-r*g5>JS1dJ(=oge46d^@pySiS}U2F}vEOaV~%l>o1RDNuWU2FH0=F4H*Lf;cAgRc}NM1VV%DO6OdKL<&Wauy9 zXuK?mdg8mMR+S|dxT4X-6e*D*(}j>YlzzzOUsW18Ntqu9O6AV#;?1`}+?s6k+KtNY z9L|0AFQOpP4B4+4T#LpLLk?hf`!;{0F!zyp3C3f6Uy@#(`d)%8dZDK-M$-NtDhU*& z&YMi{lMp+wA3&gdE~Ed_MS;OAh z;Kue(zpeTe5BzlPU>nxke}$Zp)N)U&UXiy?*uMU8AA;1R{O9}fU>hu7fA|wtx%k=+ z{Eg!jB)}e_(_>;PY=&p+UeOcRnkyUm&xQd0miOHzs%(tW8{o)q1ao}J z=OL;sLZtKz+p*F_yp^BUD?f4x?Z2{T{3ALqW;_9ovY@sr5BLVtX7~MZOG@9yAzWYpFL&|h zfEqIlFYzhA%-B032v9m%tIBv!Fs)VFUQ4O^er`M`g~{^}OH&*9zeMFCZ~cu?W~J8! ztknqchk@z*?CS6T-r1a3JQkIVh^Jk2C0j*#xKiPn)C#5hD7~NOu&XPmmii3MYVvH}6DAQ%+Rdf^G zm5s%&^LA=tJplhxQBIJ=DVZwqbA+dM&VrBuhXq|(>wq&EhVd7V( z^MHPmjl?p~{r|4%Uw)B*bv$r+7pAklPa(E*l-9fo+XBoi5x6Y;SXPchz-3mZQRS3zx>){veEIcG>t`^5Xt$zIH z)N4Pu|4P8D&xm78TDyP0>OA+2 z;}zB_D*iSaUF4;s#Dov%g7RW^zTTH2KnI<3It_M+_HaAAOMWL+9ir(^^Z`52V}%L4 zTeaVRd0CYLPY_iFL?i7F1L4%WK#MJh6EHaO*1;jqny?2Xr?Pxwk2+%L9P&(o0BBhX zCPDAq4I~{1sctx?-azWjfsQ>~$W8y}BW~sGOljIr8*lVFJjkbwS8R=p1v|MnK+R?K z$W2Q{-Q&epcZAK@S`20succGog9YJF_bIQXabOrcZ27$tdHmqNL!&7<1A(X-{J4f- zm#7thG>5mVFyA?h`>uaFnIo-g98~DB{KFLzV%0qrf`Wdp)@_4|I`WxCJCKD#>QH9TGuYm`dY-BvaC;_aIlYKZa7cKmqy}vzd_)!7?v;eqps&<+Koc^3~ z6p5G^L@mm&ZWIcE=bylTNM`l9!>+jWlibr!E!;n2^&kx-G}NT&zJVe%3NCAiTA)af z*AV=Sv~j_~?Qf`5qnB7603pq1=*XJP1Jic)VW-QmW8(k5PgDXojt^RTi*kG=PWy^O2jDs`5LTb%aE2?3 zoI5Kx8^#D8kF-c*d5PWA{O<)ZkWkLV^T&zO~u zPa6<#&bqdmNyss!@alFnxTFBjF!Zw8Cs-GTa?!a7MbJQ;tpvy*NDxUF+Pz#F-o~U? z-edv43G8a0k5_c2ee*Ou^(zdWM{>#6>Mx&ik;L<6w-#t@+cn86|9PL52f>}teQuOL_$YI1}yL4VqAOxUg7YK%*C-oCP%Mb4U7 z*BHL{)vMDu`&{Tsf5$J?sCk*3`}|cOxo=YQ(7#%=xyJ-i>teT*ZJH*cS9r!PDS2fK zxNYmexh?;XIr!vhe&1h(jSRguj@_0x2%!+8eFq)}4^5X93 zz{BjikDP)3tPXEKxo33ZeO(ko=iLQ_)^pBbRQJ-zNrIFTVvFR?wW~>xR5~ViArk{p zy1POPfVZjEWd>! zwm;utGprZ2hT7b)Ce7^!VrZgr>%=u32m$=Ag@f&T~n5e~$0w*xiR(c$g{?(%ciW z|1qtX0aeFNWBWW=>PalZ$=|&%zSG6HJCvYG!q<>3AlbFPn%OaehxyF*vM3&hos-8j z1PLgxpAQVMlAYa(a{MVsg09YVe;JUzVDY`e_)M_+afhWCI`F^gZ^-Rnp{qWB+sM8FB;dq1Sj zc{coE$z`h1Yh%;UYk{KJu%-F@_wHSB8qR*Knyg1h*7!kC)jTRzeg4D`v;+diZFtmT z-fw)eYgRVFN$<+lmnTMj`cY^D-)-5o>6R917qjQRh_CwhLs^ljcPP^SeWc#787=$q z#^~y@6b7G1h>jhgvL-PA1UC*m&ynsV%wm|Pn&;c|R606$K_lQkm!CNDvY)xmX->`u zw1wZmb*=ygsBeqQ>U)IUR^J3aMEtXwz@<^;En?}rQe!vH_s<3=(VxqM@2g>Fp$uc!jUPk3SYySS>U2(u<%L#376o!D3a-n(Zfy^@ zc$H-nQep5yPL?|qk4+X^va998ccXW5)sRB0m4ghD&Rkk+)kvz}QxQZ?Q>SR&#Cf7e zr##}oU-l?`{y#x%ntaANHBynwlD9;yI|>K!32unZ_k}`Gjy!lMg5Jzx5%cUmv?e~t zJ}t!Szwn;MqDR0eQXVGnj$eiM6!Faa=oZdv2pNrLzmrQb7f12YpuZlWF|1NwMV$l4EN=O+&g}?)x=qR~21MtTWQ&D|NtRF){djMcIWh-Itsp9*+R?m;Xb-gS0Gw~Q3g`>h+OK0vO%h!+{ zI6M<;V-+u``T9RE-uiQRH~rS*W?YTaEA(WsvHi4ZumP@vL%YllDF5s$j3+O|ZbU6A zT(T!R(Iv_usKvV)&zQQOLfjE>7SXVOCUtN>`f%N9_>Hv&oXsD4V+L5)ZL$56Y_?Bc zm4Ro)KIK9vI!vARdzk!j+1VhX96UmRjEFXt({lEm3pfp{;n9AQbVbp{h zi#-d^#d$YcYq{Ixl>1Vp2f&GC z@ihsPRTk!R*}5aF{+XM>X7Dob*#xiZN_MF#hYD-#ofADS8HcX(=T#mnq zhyKitYCv}aD>bE~9@Wvu9Z?!N1J}#7?+%|l=_EJ4Z%QHA<*3Z=C5GK8fyLG1qPC@F z(DKM{c#5*UhpkESJJ!5qYRX2@qJ0tmP9>c98998Uwt##ac zI0F93h=*{N-6ay7B7Y&@X#_0l^C6MHJ=HmLK<5ZMH11A)s*38rniD8RC)Vl>|J*t> z#I8c$trKu)at$QToh*uDJL3F$|Kfb0<+<|n^0+eCEI5Yo>`~Nn=xJ^VR$7Zz5qh%{ zaUVYhF^rh!hqYv>H2RS>4ngAiS%**@WM? zXE0aM7B?i&8tviVL@v5k+hE-1OJ~|dr%X(|_DlS%iMNBu2!YE_@PkTjl{MtvU2QU6 z!JQgho}avHLG(h5y7-C_yG!KTV#D{RoBnHi?|d$puD4CRcOjL?yrbY6UG)g-hjb{B z8*Nvjl`(jcLGSgEXj%RDk_%`MH>$9F^RXTW6uipvE{Z!c1FVDyj}H8XnN{PL7)CYt z<|u-c zH&zLOX9+VtL9iWm8$BiHxjLVV)m=N!dcjygQ2>)i{B5}t|C8xge|mb{0TQ-uTG9L4 z5}Z_KbBFTuQkktxxoLRsnS9tHLaF`Z)v1E;{Bd$uM@p%8$33RJIs=sHVUgcKczLB~ zD6>x)y(^nU$o@9zdy!r64EA`={SgNeR*6bb?fvhYkNED7L=z_HvWFzezD~g7Aq%>&$pNu`^J`+h<&#)* zwQDq+SM_QKh`}RQOG@FMf(;lEn9$Ln6$Cc|zKSAR3@Lp5LVU z^lJH7v7LI4iH6M}q++%AVo;vpa);nH>AnzKpo39 zUo8SB#T0!k-+Fo`(+>$LG#OK$1)f!Gm(iOQom*V@lkCb+cpZ{2L4IbVWqN%v{S2mB zaF&xEb=mNRo)`wY(}nAw;qO|w_PUnRWIYu>vZ9QLRK%k|ZX?nO1m|M?d5u0Qu^lbj z*imKPJ*NalB*6(UNJ6;yC^P8I7MJK#FV=1~gC@Q;l1C;5 zx3&+vAU+`W6M?aF_sJz1y1Bizu0IcS=*{vD$__$&!G0j~_O+GZt*!Y#aXM4`-6hpB z7^dgO+)aDxlqO?K&#zvivDFpDoaoKTDu%7Pl1p~E7NjHy<6&GF8mOM(@RED}cB%^yYsZjF%)RQ7g7Wp8KY2=M~9sU=b+)5Pfws%;Rnroq)$vH$kR>DN&@C^3SZnUYLYP|5x3qK^w<$?5&fEBw89L3`OQeO(!>zoN*bp7jfQ zpbH;u;s^=(;C|<-UuMA9`HYPTc=OeTWa{%{L$A!->hWT2ZhV;lqy}U3f(IY zH&vp+!iv_BcGh9Z#y_JdX0#4y_Wad(wy5+0VbRcymGZIkYxo8vd?nY(nhYy8$$J@P$Z$DbcZkO1Nld{X!x4As- zq1q&lW73mR8q~WA&WXQR_b7+IDq)|Rx;V>XH6HQ3GpE;85%$ISVIJRQY`XbJNse;J z@bzuByT_V*Pfng*u+jcwF1Y`owOxgX3=hY**V0xaM;)XY&N}c_CH7v5mNSWm=GhiJm+(xIE`7Pe zM|v|^j55vmg(#_I=2S|M0<}Ob{{gIt^v>=IyY)wW;ws$^lNAii_Q^QLzY~-u=WVGe zR-Y_1K*?Q>h`WFfraQ-rdKhNY8=wV6+Ijq#Q%B=2y4LJXGkCl1X%4I~L@qSR*{1TC zh%5~i`*PdUlj6fguGZC(CPPK-F}f3${>91AG}riQ_H<|BJj94=d7ZqMPime8%Jg`R z(ciXTk4SB8JueYOOlP_tii|q5wM+wrQZ@yqJfgUt~xxogvPo(&cVUSt%xc zT?wm=Ejrx20SV1})!LGdb>>&ZNze2)_otfYfAE&j3=0MxcTZ$4zIb|SO!shbV<*kz z{Z-ipeJHHQGm;H6k8e|^R)p%&Pv4v?3p&`lq3B1v@VT~$b3If|0=H$$Pq))}_9=Qn zP)OJ%7kZKNr^TXNoX&XA`%iGEOq<^~nbFU!FQRLl-wVjuqG^aYKlZRhJb1Q<fA%>JPt z6gsc1?kcx9k_|sRb}ic_RoE7#k!}CcadiF)=01)6v(*N70q1ppwG>b#tj1U`uKRYKM+{0q$=w`!t_(YF~bB35I(Z0?bw^f7;gw)bR0?1+I z8zi$`8_B?%_rVoifW6!E*RjDzvQM}iBjmnC!+X$NoD~9C5W)u-UcNI)4QKGBgr9TztyV7j*E?T(DpAbc)d~#D zB&ifMd~y30r(`v%Etj^*-3MXMZQkBPNe>eb&+E0e+#z3MT^NOhC&$xt znS#$AZ2wlf`+8D`b=gqB&49y~6eXg-{}C?>`q1awt*Aae39Y#`k$w30E3APszpy7w z=5=7PL?2e3cz@2CW6D1y>b=v2u>#3?)D%NT_Jv3%g9?2#iMQ%aO_j60;tevb?T#c1?8$1w zF6S=u&#}3Gd;fCvw!n9f)#fB~?I^07nv;RqE<9nLE5mu0(!Mo_dQXwJE9fz_lI~mC z-x;GT9SqITZM{gMa^8X_*UVNiQ+c#BA*BCGy?q@wIrg!>m{AWk?%s8|f#ht{$tH%b z>qAEevY@GE`?s5ZK#mh2iC~w(&)C>VHMc%p%dcw=z3<9D;zg-;&-%!{Ep~Pvvt512 z^-5<1*nMkzW=Xk)=^4yE>O+8GS=23LjO!Ax`)XSB=fO)1?%v&2i`Pz5jr4ZcKB#J) zL*~86sVNl>K10GM-#%v~%6{jR>?Lt)2GB4ZBKv57V)u*4pSeOZNx|{UPhz$VWnDGa z<1jqqiqm9x;ZblaZ?v_49~2b4Grns|$kZyW=QZVsjp)TCf4j-KwAEYC8=cTmsF?m@ zVxg|cn|1njD8XNT3HgWjH$PR;wXGqC8BspThUL2-`Di>+4;g)JvYvdN-B%Mxx$xzduahSS57&_MPaCRQ`m| z-Y=%EOM|=TbZUT2#F|?s2@%P%@=YEOctIA6E@cyz!7M)E->0VhaAv}<$^0nuD?xVk z8Q%2i;59&et3@#ks@-^N&_Tw|AU?I;OM~Lo@>6$&lRK%n7;r~NGmM~YH^KOZX)H2n z@RW{ZlPxg+6igD#=~b!>B}}F1Hx5qTQZeJm5R|EXXWa8IoS{OUdzHi^ktHpR$6)4+ zVS62V=B+@pP`KVb{5hlcG<5C?3iEhAD$uT494~f6M+B>0u3tuiZLim;Q;*^&T5*bv z*~_%1M9KudQWQ898y3qGmK%|E9BjqH*^hJ{oiZ}c77IR!ve9Xa=AK`16If+>pnpao zo9dwB57SuI+JSm^yS3S~3mXe6A^O@vt`zfv`A>5Ty5vh+k3 z!gu$g$e+iIF_AI&k|SgB+o)^HJZtT|s;`2}nm2k9dn)U?& z_!j%`w8CD4M8N}u%5El#rS;wrt=11dSc5U7)ig3(s~#}&$Y}sqw^`atl(d|awNV~c zYk7jl>?QABKKd)(8De?U$9X*=N^2}zRK~83-Lhu4X?InmIjLuOGFi(sln$>3c zxOe>;dl*@JHNS^I!}`cc;5L(Zjoarp53Kd>wX@@ohdE6lC<4!B<`vD5dbVNTt3YQt z&3#I}P%~s0xjf4-r0pOFB;HdHPo8C_MXS4WP9dvAsWp_A#-2Y}_uIv6cMqJ5b6+!5 z-OG)o20Lu`i6qe_#vdoQ=y(_>B6uW|FPjFGPP@Q&g6*EMpY z+tu>Ck))I6H_W0H;~Z*q3$Olz2a3Z)xBr>_ z;1UzQvu5VH9$=zisVbu=>Gm`?4vAIl81q5t;5MO#P)U*4tV1N%{kWOC0cyQ@VnHwa z+9%!BgO`Asoi!m{MoSZ{7)J-LW9az8nZhq#c2F>#nT zYv8cQZJ@3%`;sMagQ<%_VNJz%5Si1fWi=x^-+lKLpc3a=eZ+6ydc=eje)xD7=mPfe8Qg}U&^*5yv|3`m)TizGy zli@$wHUF5wuPt^ilm7Zi6=RPRm$>{|cw}g+_TLbo84_xWn#5fWEwyWd83D#2Mf13l zgiz}vm6K1Fg;mISvZonG@&FkhaXx)XZ24MbnVJwohJcVEFAKgi9!ycGHA5tY;n>|X z7dAXhhV2kaxe|xwGO`{!TmHtaD*;S4tmMP!3cl5v0Pg%_G3D&7><$*KVZERuuEKmq zGtPm)+;nYuz$R|_2{f7rLrW@YJ+*+ECJ$A;W=Gsb9ovI|S$mTmcee7K!P4K!Is|xO zs}O+kI}1&VSNJYhxo5?`u!2Dqp|TFDs&26gXta}WN`|oK0X^(z86rYE-><{2O4KQQ zQS&UAl~@6PNp*V2sY(fqxx?a*Y*r!x4JDvS&ONSJxzWlVJ;6emRRkuzLrvB8fbDoz zY@Tk$4g4(jxB=*8SYFb?y}kh&d;azGr-M6Tw3h52ZCBB7jV@6p&>@1BEADMf{1e7(e;CVW?XydD4z;{afIma^<3O4@4J20(y7jUhF$vABY@QAsd zAG=}h0*ZVfEe}Kq|44;G$Ff{FunG7Wr#wU~(Q{5Gv2qJ0CLb;y8z}sH5EKj%6y?p( zmD{qzS#gTw@bBfg<-GEtQT4Sry$5^!iFo227;MpM=EljAOR6YBCPL&k&c7NciI3rx z9|gv%>&jR)*Y`Mn`}4ELv&i{1L(Z?R%18;(!cgx%1y6!S#lT3 z)+0Y^b=PopQv?3nmgo^v)zkO5BSJu4*pH)Go@(tUk$%vg!x5B3^Pw- zv?S^dep|`&4`492R{DYz+Dpw)CTLle(5IWxBM=l3{7s^=;M2V71gQnbm zK`OAg9scPyahKXQ!2uEhItGu@VqqvtfZw#<(p|v8)7aVHCjKq?07Ugc*M0 zZ?REYMGufen}rTcka-j-lucN?#c_JkuU-sfZ(_Udo@}Pq)Q;xmIYroZ5_1a_5Ffb+6}N>PO^gNy!cX~Wt4)R#|cr3Kd;sz%Hsm+wL|cfm8p+=yfO%LVvbB#W(mul&c1>qox>-T|7uSU9xTFKUJ?LmWx=PlNG}8%W1w z@dhkpiK~A?d>wYre+vD3Owq=fAl`m{p$!p5`vByx%pBUG66SEik3)KvSvc}Ds0|MI zH@DxAX_H5)H@{qiO2!*&X8iYb zYK9E3`XS2e5#z`{bL^uFb8MOvxIS)=pNJ~#D?3EL7U7O1uiD4HUIWfRwO%d&QV|GU zD~o#z(UpW~+r=5oj;9@uf1w5sma7jBcKSi`cp=bEUQ}LwjE)p@Z((x~Gexv4zpgH{ ze?>?=esh-vyIvxpv;S^GFbSyna=iWeKnzhcOLoze*8Zn6g0Ojt9B?BS&=z@)R4(Ua zHpXbrn8P&!_Lnu_voDv{s%}j$gMmTE#d(^NPoR+Z{#EV9g?T!zH{g8yMfN5UoKw5c zf(;U2pBDO`jzM5bLIC-GSD{ak!gFW(nhf|KQb+MP`*h1Xc+Ms9-co1hHZk+h8>p!Q~BMG;=_$Bw%)%uC> zD`_%rPwDs+hA&s%NUQr`{P;iD2Ko3KW+V#RAR+I9ST!@1U3s=l%>#GLq}<`+b4N3p z0?ezLZ=&-|{-Ao1`!WUI(PINPb z&*m{)mrjK{e9!aBz>7xY=@mU|?Aw{&0u)QfNEPe~TJ-^-9 zg>(OT(QA4kMvbKuZ@oco(gGO2%SGkgWst|Om9&LhN$cx~8s%HVt*6^kk@sC${@H?% z-a$22^28kga34k$szV4TAk}YQWaO6Gc`i&P>63-TC+zM=r{@{@KRpBXCnkixG? z`tY}lQ^@t*8}lH+Q_g^#;HvoLpK!7V#Ej|w_lyP9`;hX)i=}1f8<&|(F#Udrw>L<* zS>0$e(*E=NAbJmo$7c~PkKxN#!e5jjoFD{_H&A$l2kmptA?XX$=4gPwWboktp3@v> zjLatPL%yS3pNXH4RwdR#F<9%wTD5(poKLZHuIG&W3?ZBA4aFfyg_#}#N(i+7K+c*WcsBle>*6c#T!D&;u%C|Xr}ODt3h}~eUgm?O zgUB=^Hy$!~x^a=&$!dDG-TtCoxM%Vu96!DPbe;J!3`mO&Y-YUyQs{F9&u|JXq9O~n z%?TYxzGR=HLAxNHrOdVGLDXi@DkYtW~ZoH!!Y znRK%05)cwU12-|wUwRtGNDh`?b)?~2iCi--X4OnY&xE=5HY^WXbgk5gSydFK2b#iZ z`{Jl~(8B>Qszb@}H+rF!`{rwbX!@`uXA#Z?4 z9eVK|;q_UlhhRV-Y5dA^1niGVVbA3Je#`>Z^9C^Yc7@%EGN_5Vo<9C^bS6B=V{WHS z`L_+Y{OJ@_!i!3Ty#{0-mhqm#)A?|I-H!_&bG`%1Q6}m{2*GCA&Yg(_TMXe7rs%&s z=&{O(74WzZbbPXzfnpqKOyPH7AO6+D+;V_R@_zUe=MzH+kWr(7=q9$r$UH7d_(wrA ze?juxDQ0}Wy9RAgg32E_sh1V}5kxM;t4$46Unp zZLlA8}Fl7(q*4^zhUV9Ag=6 z_9B}I!J8aPkRltk@*3~1Je~G{&FhkQBo4Y83_J@pf|I%KjPMJ2gZDv%h9`I?_`ef6 zD2z=&%yzHcU(%ZM2ax*b-bj&;1{}o-#T`IE5Dpn(NiVpiO6LBR+DAn)n zJ!%V@O@dQrz?9IF-vdgbZutUC*M<8gQItu(jiSd48p*K0@ciyE0&X3D-jLFtZ9sHJ zJ-h~AnD&I5rUBz@^Cwx+&`XPwSC7rVhCt_5?x|5EL-Mwc z;KI-=?X{q1@z&>Mh117ISUOwzHd1vf2T@T?58TjdN=f*=4>H!Lar+zej=Xic?KE03 z=k_jY$iuuPn+b^9q(p+BfW`hb`>Cq)+itl|totq9b%Oy2sq z{Q@OygoN(?g$uS=%YXS^U7);27Znzyo`6_(`X8nE^2IUZ&V?V!ASFBYc0qmJCTI68 z_;|D&Sm{|@y?Yu{4FFP{(&L++V4kUEU;TV58Q7?G_BRk`_}kEIjmynM-G)T?w%WWd zu$o3!?mr}0i^DS(ub_ayEp;gWfF1qnt?p`n(2eYFN|W|$q&hYXPKy;Sa?4HkA;f>|}|(JCC`i@Vj}nA!J5C1l_%7^}Qp$bJYq){7}t zWApuMeEu^`Z}+~vuu23!CVONeGS1+RHKC%xgF%G5nxlvMa>mwXW| z5yrTaB%4Wf^`e-c4J$RDT zt?!?Q%p5g%ZsEg{8#>_6m7Bb9IBeCko7D2;89z=I88*$8_pEnFbbc>g{ZmFGUe&Nj z(LgRo@s2x3l?e7Eh&?6mK<7C*hCxAp-}Pqui`k^JKnAS<$@x#vge~w(NIqI;vO>KK zX#=8T)fO;BXG@|g>l8STz7|p8WY~s!b)<__FEuc!=q=)T<@Ib|utH@3hv6DHcHmmEs7mR?q+nh}@{+2YX;b?q7e5u}VUFj0^Dz|vU?z;~O)RWgD94+c@ zM~hq441klk9io2MOPVxkV-Mi=8%{q!)+L!x=b^#?}L9w-b_MjE>*{XNW9v(Rs$EC zo4@sT@VO=5>^semV}7okBD<^~c)LMklA%}ZBkn57FY2)5?393Y=j}3oiE4hl&>w+J z#$v5i{{uF4`cW89P8B9>!MD_lh?9vH)g-cRwTKZh@~&MA&lhL3eV zLkwqObMQg+Uhheu3wLH{8SDP{V`ZT&3q2NVfdKuYphV8U9$mFi4+h_3AnHB)UT1>g zcr+<00mW?gD_k#_AgB@Z8p^BcwM;+Nb+x2xK`jlag%7JF8r8>D#G_b4@_-QImHk`-qU=F#X#}VF#}~(ntQd%j8ph3C+=CR z#Z|r^=&fuvRLYRlpxh6>=YB3%%ZG968Xt2x5m6V$jHva2&M`J|6Ob7R8GZzEPr>ulYz&=3q*%dUni!+n zZ+%a;8CNg0Hu=h-C@>dxK3fwfoET$!EAV@>>1e-mJC~?!!%or0 z2=9BudIjXDeT_HXsT??6eaaMATe0$sV^KBvVfDJ3t$hg7`J%GxpF|Tk<8YkTwQ3*V zzLp%U=Fw%UfKi$HgEb+rJKZzWBzM$n~9kjoC=as$6FKB?xPW?a(1!v{m2J&NnVO?KdFhNR#!m;Z* z$l%IDt?p0V2#BJ4FXffm8b9HHgWZ~bREE2mcx(urBH@88sYaBe%7f6<%n!oX=&lCs zKKtzTSTi-18DEUOp>&tQdaB_=`TNGar)u<(U#8iL1{P?hL`Q^o8>hm?_=M!PTO#<@ zxebdLsoHTC_@Ram(HD=f=bBO3es6D$)H?)&mCOZ zEx+7UIl65Mjf03cZ-A~zhCukw>W=lv;RwFD^!u+x-tUt2d2Xw}BKoX@Qi@@Qhq0toF`+#oBcW4(i4qKOJ&ABT%cJoy3Qhu{(Z*_>Czq7-9d`EMG zPGM$kG)IGhQu?aj6uGHJ*^$xKaf?G9!`A&>As;zp9tZb#r^&xvI}|mKxY|HnI0B9M zN@ERD@kNI)D>V1AW6g*8S>ht;#5n|o5-8s=iycnFAN!0*%p5;gnksmcY|6t(28IfK zJSy9}heLjXlV5#8U$lMd)8Zip`G^A9n`=}(SR-=FbFu5Qsj-;#PX zI2K3Se#kAT2>^Wo6e>7GBK3W{VcXt}EA`rx<)I(qcD&P1C^I)1Pq5=>Rtp%aA|vc- zWw=i}P0|vowWpSKtFEk&z}nkF_ipMRl3RS8lhSNm7AKG+(FTRh&@8*ca!FI_ncOqq zgrY>YJd|{gy3S}zyt9u2f_o(ZIP^6r^We3QD*}?8t@-i42;fnjxMv&-2jhiiu@UaA z#}K0g&x@XFKQIqDPiOcbOU74GwMT|uRD~+XWh2BON&B^sgsu6;%z2B)12j%EG56oH zDO}P$JB5#{2)o5_#Rt`*KFD$J>&!-rUaDsWLwLvNu_DpCJ>xnGDho@pP@<1pQVgMd z6~yq*gv92Wc3MqjEu#fFOWuZwy1J=SBAh- zK%coWHL$SZ?utSn=U3P0=l4gM@W->;2lZ(5LQ-zZOpEW-EOqh)&juyw$?iPWwVQ{e%yuVE@s%(oSj3f1y5M0dk^73;90ip^TANT=+(fC&8Vf z7M}^Z!722i!>+&9BX2si+6-5Aj|%6J)w6vO_WF5=sPjzpPwy-H1?&>yg4JucCHq=> zeTGYHx*0h$!%SBpjig0zwZ2y0#KsF$Q-mBxogGD;z2y)ybhP@^Zj?2qb0mEm=st@I z{E<9l`y>XaNXb!hR*EdL$%me2w#mV^$bHwWTCIWfWUSJLl3fFLOn`aHj0f2z1BuEsblzi6S(x1prS+(DLALzjm*2djS7ky`VLNkrTm($HtxA6}5 z_GwiD6`qvYF0*448^^k|3x%>6$!KJeMBQ`q&kd@RM^=A1SryS`d`_$p@TUHmENgFB zWTQMdS^ulfJ^guo=O(bLtdgz_%Grszz5G>kAtl9r@On-9MK;{|B}&hRfM=6l4fABW z`cGaX(~f^8@Wc=>18r#?Ei#pm%FMlR3qiNPW%d_8m_hWcxTAE) zF4!(|zjWW3`!e!_*@OLs{_&qBqV|SeB>LAp$scgxME~R{{dW{itxFO$UiG^9cG#G! zXn`0bR00~IZS;JSej_ET5_65@a(v?I@gnyKMK+-Xz>d82?@R6OWXBPgQvZcpN_i;Z^+G#(5<=?Z5Np2>e~Gi*ozO0ecYm09JRO5# zY@JV(I;Gb-Uq=(yEhRuPO>n@t;dxo z=zSckK-X43n*K!=TpY&^L*{;g9MM>`tdaHfd8yQ7B7>|g9>|TeB~sVrT#(`>;n4kv z3XYU3GFmS!Dq-YOQyuLrz!=BKX-O>6->mi+9w?7(!%=H@*lQohXeqk>9^s!Z(B#Iy zoN5g2I$;tLZ^p<>qhBPvo^QX|jeSJtTPw-sdfq=Kj3WZws=h;?p~gS5&bG1HLXCa$ zr<7n?(R%dX!EVbd6oor}%24YO+9r$;^*{>kNF7X{wfCUfed4{#OHK$n1fJYA)V*jwVMYNdraS0)UK@@D>Gj66FPQ;?|$+cZhC^8;nIqi5wj`ktd7#T70M6H zUuD)4m~WplWIQ!2=NszRVw+zN9Un*Ql_S>>h$2CcO*4d1IJlpMe`7wQD?waZelnQR z>w*^?My>=9?wJV;~V$rd27yXtf?QZ zISsc6x4<>pP)NVS*{R4ygX@z?a8uE25S)@OF`&5@7yU`Ou?Il^&nq6GU2MH9H18!{ zkF$I{ZPCNZjW_z;=KAt@h2VdO-K-DLcw3=bw_eX9w06_So1Q79o9w4c2DX^3-5|-M zJ#;#MvR@a2W1pthz0uil4ma(w8gk4&7kkQAbVmOOk65*Ax%pZ=Sq!>%E#{)>d%>r@ z#dwKmwiszEH#P%BKT7oU8hqltx~%RBR#A$fB@WT(1IvuwAY}>pDVbNU@iw9;sp&afu1f z;wi8NJ@ZZcMN}M|ui0K-dPI%|tr=56|F>U^NKdWr3rPq~IfqhGm zI8FxKb4JQ9^O46p&eE)>*@hDE60KqhYl4(6u|P)iX&TwBQ|cWX4;clQYhE8FuXQmA7o|nGL@Zif=Pe50KW>pvF<9hZs1jp zUeisYH3MpI*i(019A?%UGw0=UWpaxO$G$`6;&(2up&`TpCe-(AT5qqijZ8jtt%CD( zY^+I+*^N{{qOSC9^24@ zl07yuNp@yG$P#e-@y^RkJsNROJWGSUB{E~j$W<=J)juYr2do7MMN!BK5Q`h$htA*O zuH&10-uT#6Ngha=>pT=rED4n$nbLYL`oVweLcJ<#Mn${j;ZkviKG^m#ts?zIObt0g z@c{9ePt5nzV7I{53OR~wJhdq?&p*dlrspX0Zu;x*5XKhu00BAXkM3sjGndGJKl!vH zXZ3D|o-)jRMT&T}AkK=s%Jiwyotl1SKhuQqE9y5-m@+aq-Cf}d*?w=CXVWXB3ouIZ zF_vdHE+9Cd704wyoGqc{OI>pbkn90KC`!p@rjkUdOqIVGGZ=_Bm~DtA=NJt1Hbx|x}g=A@i^UR7^=tE0N2UPFV-uy_jAhb$FNyXeyuKM)M&GfK`DDB_r zVdMwc?Q7xGY?kO7GKSaa&ZIaV&d9B?SYX@$RL*@Zma+Bw=gLZenlxn@;x1zYfRghs zkvm9K61W_d%6y>D@R_49-YO)7l(HrsT-72fCJ*pa0$KEtb)oBm6R|Buk~(Q8?e1-s zi4LUZ1BUS~`=I(R5dLpb3Op(TI%Ejih#w57wA;tC>u(~W6PqQ*TADEI!rS*jgVMvw z-?IVU;Wm>Pf{};u!l3BCV~-5;ot{OkhZKKBU;{EVr{Tl8|p$+;$L z$>s2J+VtRK8G&W;8H_%qW*>kum8vQ-y$UFrD!m0`8UJ(RusAeAP@Xx2>!bT!eC!&_ zw(uCQM`AX!DZH$Id8N;(ErY7Th&ZX@hMP=KU^+c+Jf;8w+8jHj%`wa$k|de{QRY4` z05QAmqDr1EQh)lOSw$vrnwbDCf$o^Cd#MM`;S%|$Wj0|W%q~n&xRnGAlRrlT7)S7Pz9Wa`X{&&;S>3;n{r()oirKKob+ zIhN+e1!;b$#nDLR-N(B^skQwBWJ$OS+&p5HrF+=#@!O|gOsWwhk29EDeBPz`P{Y3M z%!K4;@1fi)Lrqv9DV~ygTpqaVktjhf%<^6D0S7iq8#o84UYdhMzH;aHOL6YSmir1I z8qrNtcHxPr1??sHUpCV;Uxs6_?aChl1eHZx-q|$Wi`2|={0o(7hM*0D^A7_)bob*N zmClgY95>#6OkJHsojE=JH2X}h#Jw_~@0aK4ve-ozsZ)if!DJ1~Sw>Jj7b@I33;(2wYzd}jgqbNe!8!vxVosE?l zZ&_v^xfzst+BuGN5rypRvVU~Fp8r33L@s(pASV9DuK>T%&=XP$8VF za#Fa&=jDjGWAeL$HzS@s$!T|dPDa&~v;jG$diMal$kU9EuaCDUn^s&m<`CFQ_3SPM zUBNs$6zn?mi`VaaynvBDO<4H38?PDZUF}0p&Vh=O9;r3E;qQdbE}#9UG~~D#KE+WI zA}FuOPj7RP_Y~}1E1oJ7n{$1m@t-E=NXV9KkfnACY*riqr&vT9GW|~ug#I?Y^W-?$tiR(u-%Dk+Z=(8e566WQyg!Oi(lsfWG?M=;6G?+VXyws64&71u#mpogSx z3rbr3FJlwX!fPM{QL{gji_sHFLGRLIxwfQw6s8-?S3vdw{Pg~WZZbxtj=;jlp~Ml+ zRB^MCOjnk}jg|k9c)rC!&T=;7FJg=%iMv^S2h0>q_NFMeAQ^k%@#aO86Q7Wg`f{= zP2dSz{2d4;KV`Ch zuIDr+uELtd-1dIK_HK?!9gaBF6!A8C6=5;(^~2RuzN>EfU(`Y~q(}_qCm`Jb_+I+f zn@`q$tUJ(7@ZJ|XAT1EY^jv;rS-s{Z*`>G$XzHzkJ0H(+a3!|wUP1PyN0L`Jvwj1g zju1qyd5zTs)9!RqM<5$DRY&!)@GC;Xz!A_bg`nw~(pVNJxRL59^PU*SAZ{YPadQk3 z(;3Haw}M0oHyJkosw;sGVFVoZzSiRSj> zslW_wjrSc~NIf;pdx5}%`3!l$78WQ=07aDU5}mo`4IE8bw{NdmHFMBS5jR6)fjB^= z{(CdSxyaJ^nhu2jD6JO{o;5g7&#>SF5lg@AX>fMs^&?Xe-7jQ+{oi_sa38Jm9D+~} zn3g)e{r<*6pm-q}Z8`~#S7m_TRnZvL%8kBpvnUaC=&ALXy^z@d0yEF=GW=c44s zp9AG~b_Y1bO$zegEU+R33C1$u7|^TS08p1+X#%uI!%x#4dicNRv>`7UEC%sgnyE{| zzE7IjgyT~QAJ6Xthp1|;2$1C06Yp++zIbLlzDm;nr_kB~;47zs_raF+vE#ch16IJ` zN|o`x4D2&9HX;WmdD8vC;z?Da?NhgCW9nwZV4{2j@y~u+k#^!m$++5B(J6!-7wDPI z$Cih-i9jxq_u4JsJq?034(a)g7ymyT#Ticmm$?LCi6k61k6V6m?jR5n{!yQ;Z=dMZ zV?gRVTl&j6m{z~(5Pyp=aQXI- zRalrj;ODaQ6EV{_i~Y|dZdf)&F!-W8K*h9slZio70Tj#sve8IH^w`NU)l_;2dkkc~ zs*W48&dP_=V-IpCVC2|(?K-gMdF~6%8)Mn6#j+f?fvI_Wy@dmD2lkiJfft%A>TLus z^pr4iLxA}44>jajd-6%U^IYdGC5s_Bb{bvhM~-u6`a3Fk6OJZte;#FQ2gZDEHP+bl zD7gaucz;KL7W^r>tPSOoI*c2D=vIJz@h606P?=1w6h~_C|6^)_@EU-#X7FaM=yRa% zJ^iHc!MAbS5Q2{A61rG(kg8WMWAj+T8_ji!Iz+M)Sne`Tz5EEjcEk1}M4gt?1&<*) z#_NX!h7o94iUU?$5D#(=kJ2ltko(TgTjeAGZFlY43kS7(YtNibo_+WtS!UDJywv-6 z5$L5vfYryrOg-T@g;5S1&r2aN(;avNPCvaW#E&@|Z+WB-2d;&DCZhRCV*h`n)r>$R z;x_+`RtMf*u>EJchsbgPGqo!;)fLx+7Tg|jJpA@s;fv+N ze|9vSJkL?%*k_mrGU3?mWFU!}gn;ZpV!KA9SZ!cn+^97~c&2iJx--q?=YU~K@XXEn zpQeE`&&mmiVnBN4WCKQ{G#6 z^UrS_Qe~-6E8oe_18SO4e^xh030C6?9SJ8q*KRf6XY%P)rIg+Ai#e`D?N{OK^tUc+ z%xQqVfrZ8hc(hAXi$fVO+E~^0M+Rg{1GXWFOWVr%C@-0I7fAh)2;#wf}1{ZE)R~h_A5gEXhaua*FMZ}|) zO;6Cyrjyf;&V&%>)1`i`HC_BP%}W*K+TU6fu=V;(0dJ*V$S;9LD3(-5akEn@3l=smy@Y!lMo{TP zXrl+eL9pACuh~Yl;dpl{qN>-8h0}Q80L5WBR4AVzGPyygxX;cQCp#}S4DOed0S_zS zrTpGolGs+nc(qv{8cuJI>tSTJl3bJ9TgU-M>hdXzcIjfxCgc<~w^Q{$+Sj8-}>55uvK;fgrvp^BlsqC*}Lc@qv|+9Es=u(n9&0 zsoe{-`M$w^u3+;!qoKw;mDP!NyirK2W92sp^=$adhtA&_df6B^G9afR{?EtK{j#M& ztnQGEYto<(^UESLZ0-=H;H5bMTET~k=&hI+2uf0LQ=tFVqGZhjsMk+Wu+c!CP@BT4u zAnobvg(V1~*H1y7po|;~j8qqdU>H#V%ddnOM?|wKOK{z*NsR_W#Y56)YnJp< z03(7)2AhItA6r!-(#?=^{m%HhToiYk{Qe|fV+RSaP{nGt${7hW#{J6p*1{$SI-GVH z)W*kw?H!4ZRoVFS>yJ$Mb+@tM<%OIsQPTvob_8uGvJJRG9e*)IM~w(tRA<*P!838I zUmr@mK|(al+e*s3&2Ij`D8x@k4VD0{FvYfkL-$<4=j($1e>myi;r3{UZG`K$K*C&6 z5Qw1To>Q<}a}cFSIskrmRWBZtJ8MYeAf&&BU;O!;j4ZMpu|R~4I8E4zdsXZ@#7l=` z9()4>D{&4N;L4SaAF1E~iYGR5LEX$m;j0vR1PuwU4pv6G&xY$Y;T=xI31G~HSYFy( z2fEo&F=BIwh!xCGX2p0e)+QC~5{~4*$qZ zcQfM77X1BGNP$XAjk=_?w;*T%s-c`UETc*YS>O=u_q7K_KzXL=xj^i*6@{d5O5xhE zi%;$M>ny81Zq#3`yfNMt)HloYSPP?--;c~fE`EWMb~cJ7&`-Z%2^)l{0l=T^iwtmmrnEluSWKgdKU1 zZi-CTC#|cmK${$Kn=zh5i(X2>$LGR!!^dE9#O#;!L+3|?gn{DRB5U&l+8<}N7uPhK zspV8_)qk`+ku(iV|9~pFuqm_kL;sM`|Eg~K6JoEP=KSCRr*VbLYabdD%L#q2HWi@} zH2?PZkH`2ip2(2s5NZ*^Z7GDFQPo`dP4((xqf@JAD`PlMHY#!)N2H%=?!JWyUVQB% zK9~WN_5T47yAqmL$SQ8yt?cH9z1I{G4Zs@-hLVT=Q6ck&Mdz2vIss!XeTm+sh(>6& zBJkqIeR*6G6+Q&MX?NE8k^z26+trR2Sh zYOt9K=is2F!IvAvb^muZFQsA$Ukv?OM3gMW}CvK|9IL*{Xo|CvG}wQZI` zFwG(qCndv0TaVL8Vd?hBbZ7Gs#e2RDbU|06$T4J5LXK07;WXor!-JM`hv84EL_H3+ z=+0piGtn`7rGwLyBXN=kk=O5`G~&YR1PTG9B2T~b)0`5EkZ)69TuOIXY3z=#wNs=i z>%5Li8_r(L^YnHufKVP^j90^4&Yj?H}(8H;m&#^(@1FeAzWQi3b&6nIZm z@!bQhMWHJxDzY1Q(5CAvXq7&R+JKN?R5OFpPQw)-P7GZEt)p=>zjT>9XKg1R-Ho`r z%~%F0rCaT1eoo9Og1BvWNHnlv2jl(va`w^s3<6^*X2mc#Y7xBy1sti15%fWiHv5=fx_=zl}h$ zO$%xeXUMDao!swG=%pN;n!wjo4>{=&U;lZciP8GJPzo~2l@1=aZj#`yT`U_+dVx^G z2aB(+u7vL>mqVLy$z>%1*%SGN$dR92PuSk%zIlg)E1A1ate39XWA66PX*^aut(0h?VeK6VD$-Z+)}2nuYT}PgxP!NjYwzPiOR9BgCv{3VEo!< zxik~{gMvKpD5^cM+e|81I2=UA$jv%@c{0*Ke!~%0Sn^2(!}W$s|1ONI#3XOO8F}pt z+~}L2y!w<*pK6_8FL7SjbVHl{HYgnap+^1gN|PTV&c82?ZSM&?QFhC2`d6Q}glvb- zP1U&!n;c?Ze3&Ufgwe~O|C}}}q$gUnDB+fC#)zmocL$tIhUGK4k!Fuf8?_IuCP&^e z#y#XH!j|550~-^0f?e#3zbaoKcMX-~8mtb~jQLpNSt?YI)ByUnZc0%S{m`rXvfqZg zY8?zV(vro2FjlCt+bP6>CV7I>-J1{-gkv(!!ZuA}appB1*E6-0?NARIUA8f}>Z@>SA zSvi-qlsTUjaS^Jx>+K4A+ace_^!-$j@?*IDSjO^cIjDzIDMcKu2gwc@B7y!gs534j z>`}Sa%cemGDDjVxTNw|(&NEeY`yRUDHpWCkPcnA%-Bv>XQ)S9FO0V-4wcOJ$C03sA zbkDpxwqQ&go&CikOurB%eG?z*a4}19>C<-jSTsss<=DYhP;evtP^7`YawiC9Jf@)#j9rhfedqoSjSVo;SFAM1sG7IWzs3TCrrL! zLZTw17ngD7%jwT0|Hs#R$7B8P|KrG&Rk<<~;S!Y*vdZQn$;iCy8KsQK-m8lg<%$rp z3US%lGc=G@vXY(1mXVNrAFs}Nzt8#n-ksk+=hpju&WYFS^&F4KeLbu{XnPL7KhPZ* zcvS4i&ZggDT&0p`&F4_UMfLa|CW$Y{6kvBy6J7w;iGqhjk6 z3-E?L7h~BtCh^?}<2l>IQ?QX;aLc&x)Ui}TK5af!C9yOVKU%d!3_6Y3E0X@oP5<5e zs3Q3TwwC z!EHzv63l9a8sFdea_uhR>6H+|Pa8A~#X%dH3t&3u2K5 zE0Z=Fqv};<8($QK8bwULjZ4QbjqZ4?PPKLARf52?FbO=|=Wd~BE6-pzIi;SbSVeqM zUTUio%pdbkOR*K-?6xrrHgvIV+F>zb#m8Q8I&QjLa{t@p{uO3L=sQC%_M@{Dnoc$T za(MsbMG%vq*v@qFi`y3j+f;?y(qbcYADlITTk8gq?xWdOKd41Z3b}3fv#RGy-SRo! zlX0Nm&(WTW=H>qKN9ufNx?>^Hj@u=k^*<&fQ#SJR8zOzqUtjpE)yq`KK&;)vQLf=! zy&S=)mltHhLmN+353P$)d#h4SHSRm8m9Oy-ZZ=Np)aWCFlV9*>*{lTvQmbu;)+I5= zF_{$B-k%_7r<1hQ2+{T8-$&W8Jr<;FGt*(Va8@|p+(XwDBN|k*%0AiFHgkybysE*{ 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 context_1 [label="control instruments"] - context_1 -> context_3 [dir="back" label="control instruments"] - context_2 -> context_3 [dir="back" label="control task"] - - context_2 -> signals [label="signals:\nsettings, status" color="blue" style="dashed"] - signals -> context_3 [dir="back" label="status" color="green" style="dashed"] - signals -> database [label="all data" color="blue" style="dashed"] -} diff --git a/documentation/sphinx/source/images/example_contexts.drawio.svg b/documentation/sphinx/source/images/example_contexts.drawio.svg new file mode 100644 index 00000000..09c87a5f --- /dev/null +++ b/documentation/sphinx/source/images/example_contexts.drawio.svg @@ -0,0 +1,4 @@ + + + +
Context_1:
qmi.core.context::QMI_Context
Context_1:...
Instrument_1:
qmi.core.instrument::QMI_Instrument
Instrument_1:...
Instrument_2:
qmi.core.instrument::QMI_Instrument
Instrument_2:...
Context_2:
qmi.core.context::QMI_Context
Context_2:...
Task_1:
qmi.core.task::QMI_LoopTask
Task_1:...
Context_3:
qmi.core.context::QMI_Context
Context_3:...
Task_2:
qmi.core.task::QMI_LoopTask
Task_2:...
«flow»
«flow»
Control instruments
Control instruments
«flow»
«flow»
Control instruments
Control instruments
«flow»
«flow»
Instrument status
Instrument status
Database
Database
«flow»
«flow»
Control
task
Control...
«flow»
«flow»
settings, status:
qmi.core.pubsub::QMI_Signal
settings, status:...
«flow»
«flow»
status:
qmi.core.pubsub::QMI_Signal
status:...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/documentation/sphinx/source/images/example_contexts.png b/documentation/sphinx/source/images/example_contexts.png deleted file mode 100644 index cd735e7b1b53ecf79664fd0aba8e2e1acb7c66b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64148 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 WZ*QoL7zBH04qHn{i%PQ3#s2{b5XWZ# From bc8795c9f4099a7b6ee89c4fd0398c5dd6055af9 Mon Sep 17 00:00:00 2001 From: Henri Ervasti Date: Mon, 11 May 2026 10:22:06 +0200 Subject: [PATCH 24/25] [200-qmi-dataset-reformulation] Adding background color to doc images and trying to set canvas size better. --- .../sphinx/source/images/class_diagram_main.drawio.svg | 2 +- .../sphinx/source/images/class_diagram_messaging.drawio.svg | 2 +- .../sphinx/source/images/class_diagram_signalling.drawio.svg | 2 +- documentation/sphinx/source/images/example_contexts.drawio.svg | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/documentation/sphinx/source/images/class_diagram_main.drawio.svg b/documentation/sphinx/source/images/class_diagram_main.drawio.svg index 6ed9358c..252c75f4 100644 --- a/documentation/sphinx/source/images/class_diagram_main.drawio.svg +++ b/documentation/sphinx/source/images/class_diagram_main.drawio.svg @@ -1,4 +1,4 @@ -
core
core
qmi
qmi
+ context_singleton: core.context::QMI_Context [0..1]
- _object_registry: core.object_registry::ObjectRegistry
+ context_singleton: core.context::QMI_Context [0..1]...
context
context
config_defs
config_defs
rpc
rpc
pubsub
pubsub
messaging
messaging
task
task
«use»
«use»
QMI_RpcObject
QMI_RpcObject
instrument::QMI_Instrument
instrument::QMI_Instrument
QMI_RpcProxy
QMI_RpcProxy
+ rpc_nonblocking:
     QMI_RpcNonBlockingProxy
+ rpc_nonblocking:...
QMI_RpcNonBlockingProxy
QMI_RpcNonBlockingProxy
QMI_TaskRunner
QMI_TaskRunner
- _thread: _TaskThread
- _thread: _TaskThread
_TaskThread
_TaskThread
+ task: QMI_Task
+ task: QMI_Task
thread::QMI_Thread
thread::QMI_Thread
threading::Thread
threading::Thread
SignalManager
SignalManager
- _local_subscriptions:
    dict<String, set<QMI_SignalReceiver>>
- _local_subscriptions:...
QMI_SignalReceiver
QMI_SignalReceiver
MessageRouter
MessageRouter
- _thread: _EventDrivenThread [0..1]
- _socket_manager: _SocketManager [0..1]
- _thread: _EventDrivenThread [0..1]...
+ start_tcp_server(tcp_server_port: Integer)
+ start_udp_responder(udp_server_port: Integer)
+ connect_to_peer(peer_context_name: String,
                  peer_address: String)
+ disconnect_from_peer(peer_context_name: String)
+ start_tcp_server(tcp_server_port: Integer)...
_SocketManager
_SocketManager
- _socket_wrappers: list[_SocketWrapper]
- _peer_context_map:
    dict<String, _PeerTcpConnection>
- _socket_wrappers: list[_SocketWrapper]...
_SocketWrapper
_SocketWrapper
_UdpResponder
_UdpResponder
_TcpServer
_TcpServer
_PeerTcpConnection
_PeerTcpConnection
QMI_MessageHandler
QMI_MessageHandler
+ address: QMI_MessageHandlerAddress
+ address: QMI_MessageHandlerAddress
QMI_MessageHandlerAddress
QMI_MessageHandlerAddress
+ context_id: String
+ object_id: String
+ context_id: String...
QMI_RpcFuture
QMI_RpcFuture
CfgQmi
CfgQmi
+ config_file: String [0..1]
+ workgroup: String
+ qmi_home: String [0..1]
+ log_dir: String [0..1]
+ datastore: String [0..1]
+ logging: CfgLogging
+ contexts: dict<String, CfgContext>
+ process_management: CfgProcessManagement
+ config_file: String [0..1]...
CfgContext
CfgContext
+ host: String [0..1]
+ tcp_server_port: Integer [0..1]
+ connect_to_peers: list<String>
+ enabled: Boolean
+ program_module: String [0..1] 
+ program_args: list<String>
+ python_path: String [0..1]
+ virtualenv_path: String [0..1]
+ host: String [0..1]...
«use»
«use»
QMI_Context
QMI_Context
- _config: config_defs::CfgQmi
- _rpc_object_map: 
    dict<String, rpc::RpcObjectManager [0..1]>
- _signal_manager: pubsub::SignalManager
- _message_router: messaging::MessageRouter
- _config: config_defs::CfgQmi...
qmi.core.context::_ContextRpcObject
qmi.core.context::_ContextRpcObject
RpcObjectManager
RpcObjectManager
- _rpc_thread: _RpcThread [0..1]
- _rpc_object_maker: Callable<(): QMI_RpcObject>
- _rpc_thread: _RpcThread [0..1]...
+ make_proxy(): QMI_RpcProxy
+ make_proxy(): QMI_RpcProxy
«use»
«use»
«use»
«use»
_RpcThread
_RpcThread
- _rpc_object: QMI_RpcObject [0..1]
- _rpc_object: QMI_RpcObject [0..1]
Create
Create
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
_EventDrivenThread
_EventDrivenThread
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
QMI_Task
QMI_Task
+ settings: Any [0..1]
+ status: Any [0..1]
# _task_runner:
    QMI_TaskRunner
+ settings: Any [0..1]...
QMI_LoopTask
QMI_LoopTask
«use»
«use»
Text is not SVG - cannot display
\ No newline at end of file +
core
core
qmi
qmi
+ context_singleton: core.context::QMI_Context [0..1]
- _object_registry: core.object_registry::ObjectRegistry
+ context_singleton: core.context::QMI_Context [0..1]...
context
context
config_defs
config_defs
rpc
rpc
pubsub
pubsub
messaging
messaging
task
task
«use»
«use»
QMI_RpcObject
QMI_RpcObject
instrument::QMI_Instrument
instrument::QMI_Instrument
QMI_RpcProxy
QMI_RpcProxy
+ rpc_nonblocking:
     QMI_RpcNonBlockingProxy
+ rpc_nonblocking:...
QMI_RpcNonBlockingProxy
QMI_RpcNonBlockingProxy
QMI_TaskRunner
QMI_TaskRunner
- _thread: _TaskThread
- _thread: _TaskThread
_TaskThread
_TaskThread
+ task: QMI_Task
+ task: QMI_Task
thread::QMI_Thread
thread::QMI_Thread
threading::Thread
threading::Thread
SignalManager
SignalManager
- _local_subscriptions:
    dict<String, set<QMI_SignalReceiver>>
- _local_subscriptions:...
QMI_SignalReceiver
QMI_SignalReceiver
MessageRouter
MessageRouter
- _thread: _EventDrivenThread [0..1]
- _socket_manager: _SocketManager [0..1]
- _thread: _EventDrivenThread [0..1]...
+ start_tcp_server(tcp_server_port: Integer)
+ start_udp_responder(udp_server_port: Integer)
+ connect_to_peer(peer_context_name: String,
                  peer_address: String)
+ disconnect_from_peer(peer_context_name: String)
+ start_tcp_server(tcp_server_port: Integer)...
_SocketManager
_SocketManager
- _socket_wrappers: list[_SocketWrapper]
- _peer_context_map:
    dict<String, _PeerTcpConnection>
- _socket_wrappers: list[_SocketWrapper]...
_SocketWrapper
_SocketWrapper
_UdpResponder
_UdpResponder
_TcpServer
_TcpServer
_PeerTcpConnection
_PeerTcpConnection
QMI_MessageHandler
QMI_MessageHandler
+ address: QMI_MessageHandlerAddress
+ address: QMI_MessageHandlerAddress
QMI_MessageHandlerAddress
QMI_MessageHandlerAddress
+ context_id: String
+ object_id: String
+ context_id: String...
QMI_RpcFuture
QMI_RpcFuture
CfgQmi
CfgQmi
+ config_file: String [0..1]
+ workgroup: String
+ qmi_home: String [0..1]
+ log_dir: String [0..1]
+ datastore: String [0..1]
+ logging: CfgLogging
+ contexts: dict<String, CfgContext>
+ process_management: CfgProcessManagement
+ config_file: String [0..1]...
CfgContext
CfgContext
+ host: String [0..1]
+ tcp_server_port: Integer [0..1]
+ connect_to_peers: list<String>
+ enabled: Boolean
+ program_module: String [0..1] 
+ program_args: list<String>
+ python_path: String [0..1]
+ virtualenv_path: String [0..1]
+ host: String [0..1]...
«use»
«use»
QMI_Context
QMI_Context
- _config: config_defs::CfgQmi
- _rpc_object_map: 
    dict<String, rpc::RpcObjectManager [0..1]>
- _signal_manager: pubsub::SignalManager
- _message_router: messaging::MessageRouter
- _config: config_defs::CfgQmi...
qmi.core.context::_ContextRpcObject
qmi.core.context::_ContextRpcObject
RpcObjectManager
RpcObjectManager
- _rpc_thread: _RpcThread [0..1]
- _rpc_object_maker: Callable<(): QMI_RpcObject>
- _rpc_thread: _RpcThread [0..1]...
+ make_proxy(): QMI_RpcProxy
+ make_proxy(): QMI_RpcProxy
«use»
«use»
«use»
«use»
_RpcThread
_RpcThread
- _rpc_object: QMI_RpcObject [0..1]
- _rpc_object: QMI_RpcObject [0..1]
Create
Create
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
_EventDrivenThread
_EventDrivenThread
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
«use»
QMI_Task
QMI_Task
+ settings: Any [0..1]
+ status: Any [0..1]
# _task_runner:
    QMI_TaskRunner
+ settings: Any [0..1]...
QMI_LoopTask
QMI_LoopTask
«use»
«use»
Text is not SVG - cannot display
\ No newline at end of file diff --git a/documentation/sphinx/source/images/class_diagram_messaging.drawio.svg b/documentation/sphinx/source/images/class_diagram_messaging.drawio.svg index 9c5e59a5..802f41fc 100644 --- a/documentation/sphinx/source/images/class_diagram_messaging.drawio.svg +++ b/documentation/sphinx/source/images/class_diagram_messaging.drawio.svg @@ -1,4 +1,4 @@ -
qmi.core
qmi.core
rpc
rpc
messaging
messaging
pubsub
pubsub
MessageRouter
MessageRouter
+ send_message(message: QMI_Message)
+ deliver_message(message: QMI_Message)
+ register_message_handler(
    message_handler: QMI_MessageHandler)
+ unregister_message_handler(
    message_handler: QMI_MessageHandler)
+ send_message(message: QMI_Message)...
QMI_MessageHandler
QMI_MessageHandler
+ address: QMI_MessageHandlerAddress
+ address: QMI_MessageHandlerAddress
+ handle_message(message: QMI_Message)
+ handle_message(message: QMI_Message)
QMI_RpcFuture
QMI_RpcFuture
RpcObjectManager
RpcObjectManager
- _rpc_thread: _RpcThread [0..1]
- _rpc_object_maker:
    Callable<(): QMI_RpcObject>
- _rpc_thread: _RpcThread [0..1]...
context::QMI_Context
context::QMI_Context
- _message_router: messaging::MessageRouter
- _message_router: messaging::MessageRouter
+ send_message(message: QMI_Message)
+ send_message(message: QMI_Message)
«use»
«use»
«call»
«call»
QMI_Message
QMI_Message
+ source_address: QMI_MessageHandlerAddress
+ destination_address: QMI_MessageHandlerAddress
+ source_address: QMI_MessageHandlerAddress...
QMI_InitialHandshakeMessage
QMI_InitialHandshakeMessage
+ version: String
+ is_server_handshake: Boolean
+ version: String...
QMI_RequestMessage
QMI_RequestMessage
+ request_id: String
+ request_id: String
QMI_ReplyMessage
QMI_ReplyMessage
+ request_id: String
+ request_id: String
QMI_ErrorReplyMessage
QMI_ErrorReplyMessage
+ error_msg: String
+ error_msg: String
QMI_SignalSubscriptionRequest
QMI_SignalSubscriptionRequest
+ publisher_name: String
+ signal_name: String
+ subscribe: Boolean
+ publisher_name: String...
QMI_SignalSubscriptionReply
QMI_SignalSubscriptionReply
+ success: Boolean
+ error_msg: String
+ success: Boolean...
«use»
«use»
«use»
«use»
«use»
«use»
Text is not SVG - cannot display
\ No newline at end of file +
qmi.core
qmi.core
rpc
rpc
messaging
messaging
pubsub
pubsub
MessageRouter
MessageRouter
+ send_message(message: QMI_Message)
+ deliver_message(message: QMI_Message)
+ register_message_handler(
    message_handler: QMI_MessageHandler)
+ unregister_message_handler(
    message_handler: QMI_MessageHandler)
+ send_message(message: QMI_Message)...
QMI_MessageHandler
QMI_MessageHandler
+ address: QMI_MessageHandlerAddress
+ address: QMI_MessageHandlerAddress
+ handle_message(message: QMI_Message)
+ handle_message(message: QMI_Message)
QMI_RpcFuture
QMI_RpcFuture
RpcObjectManager
RpcObjectManager
- _rpc_thread: _RpcThread [0..1]
- _rpc_object_maker:
    Callable<(): QMI_RpcObject>
- _rpc_thread: _RpcThread [0..1]...
context::QMI_Context
context::QMI_Context
- _message_router: messaging::MessageRouter
- _message_router: messaging::MessageRouter
+ send_message(message: QMI_Message)
+ send_message(message: QMI_Message)
«use»
«use»
«call»
«call»
QMI_Message
QMI_Message
+ source_address: QMI_MessageHandlerAddress
+ destination_address: QMI_MessageHandlerAddress
+ source_address: QMI_MessageHandlerAddress...
QMI_InitialHandshakeMessage
QMI_InitialHandshakeMessage
+ version: String
+ is_server_handshake: Boolean
+ version: String...
QMI_RequestMessage
QMI_RequestMessage
+ request_id: String
+ request_id: String
QMI_ReplyMessage
QMI_ReplyMessage
+ request_id: String
+ request_id: String
QMI_ErrorReplyMessage
QMI_ErrorReplyMessage
+ error_msg: String
+ error_msg: String
QMI_SignalSubscriptionRequest
QMI_SignalSubscriptionRequest
+ publisher_name: String
+ signal_name: String
+ subscribe: Boolean
+ publisher_name: String...
QMI_SignalSubscriptionReply
QMI_SignalSubscriptionReply
+ success: Boolean
+ error_msg: String
+ success: Boolean...
«use»
«use»
«use»
«use»
«use»
«use»
Text is not SVG - cannot display
\ No newline at end of file diff --git a/documentation/sphinx/source/images/class_diagram_signalling.drawio.svg b/documentation/sphinx/source/images/class_diagram_signalling.drawio.svg index 6203acc6..0a9238ec 100644 --- a/documentation/sphinx/source/images/class_diagram_signalling.drawio.svg +++ b/documentation/sphinx/source/images/class_diagram_signalling.drawio.svg @@ -1,4 +1,4 @@ -
messaging
messaging
pubsub
pubsub
task
task
QMI_MessageHandler
QMI_MessageHandler
+ address: QMI_MessageHandlerAddress
+ address: QMI_MessageHandlerAddress
+ handle_message(message: QMI_Message)
+ handle_message(message: QMI_Message)
context::QMI_Context
context::QMI_Context
+ publish_signal(
    publisher_name: String,
    signal_name: String,
    args: tuple<Any>)
+ publish_signal(...
+ subscribe_signal(
    publisher_context: String,
    publisher_name: String,
    signal_name: String,
    receiver: messaging::QMI_SignalReceiver)
+ subscribe_signal(...
unsubscribe_signal(
    publisher_context: String,
    publisher_name: String,
    signal_name: String,
    receiver: messaging::QMI_SignalReceiver)
+ unsubscribe_signal(...
+ send_message(
    message: messaging::QMI_Message)
+ send_message(...
QMI_Message
QMI_Message
+ source_address:
    QMI_MessageHandlerAddress
+ destination_address:
    QMI_MessageHandlerAddress
+ source_address:...
QMI_SignalRemovedMessage
QMI_SignalRemovedMessage
+ publisher_name: String
+ signal_name: String
+ publisher_name: String...
QMI_SignalMessage
QMI_SignalMessage
+ signal_name: String
+ args: tuple<Any>
+ signal_name: String...
QMI_Task
QMI_Task
+ sig_settings_updated: 
    messaging::QMI_Signal
# _qmi_signals:
    tuple<messaging::SignalDescription>
+ sig_settings_updated:...
+ update_settings(): Boolean
+ update_settings(): Boolean
QMI_LoopTask
QMI_LoopTask
+ sig_status_updated:
    messaging::QMI_Signal
+ sig_status_updated:...
+ run()
+ run()
QMI_RegisteredSignal
QMI_RegisteredSignal
+ publisher_name: String
+ signal_name: String
+ arg_types: tuple<Type>
- _context: 
    context::QMI_Context
+ publisher_name: String...
+ publish(args: Any [*]) 
+ publish(args: Any [*]) 
0..1
0..1
*
*
QMI_SignalSubscriber
QMI_SignalSubscriber
+ context: context::QMI_Context
+ published_context: String
+ publisher_name: String
+ signal_name: String
+ signal_arg_types: String
+ context: context::QMI_Context...
+ subscribe(
    receiver: QMI_SignalReceiver)
+ subscribe(...
+ unsubscribe(
    receiver: QMI_SignalReceiver)
+ unsubscribe(...
SignalManager
SignalManager
- _context: context::QMI_Context
- _local_subscriptions:
    dict<String, set<QMI_SignalReceiver>>
- _pending_subscription_request_by_request_id:
    dict<String, _PendingSubscriptionRequest>
- _pending_subscription_request_by_signal_name:
    dict<String, _PendingSubscriptionRequest>
- _context: context::QMI_Context...
+ publish_signal(
    publisher_name: String,
    signal_name: String,
    args: tuple<Any>)
+ publish_signal(...
+ unsubscribe_signal(
    publisher_context: String,
    publisher_name: String,
    signal_name: String,
    receiver: QMI_SignalReceiver)
+ unsubscribe_signal(...
+ subscribe_signal(
    publisher_context: String,
    publisher_name: String,
    signal_name: String,
    receiver: QMI_SignalReceiver)
+ subscribe_signal(...
+ handle_message(message:
    messaging::QMI_Message)
+ handle_message(message:...
QMI_SignalReceiver
QMI_SignalReceiver
- _queue: deque<ReceivedSignal>
- _queue: deque<ReceivedSignal>
- _receive_signal(
    message: QMI_SignalMessage)
- _receive_signal(...
QMI_Signal
QMI_Signal
+ arg_types: tuple<Type>
+ arg_types: tuple<Type>
+ publish(args: Any [*])
+ publish(args: Any [*])
«call»
«call»
«call»
«call»
«call»
«call»
«call»
«call»
«call»
«call»
«call»
«call»
«call»
«call»
Text is not SVG - cannot display
\ No newline at end of file +
messaging
messaging
pubsub
pubsub
task
task
QMI_MessageHandler
QMI_MessageHandler
+ address: QMI_MessageHandlerAddress
+ address: QMI_MessageHandlerAddress
+ handle_message(message: QMI_Message)
+ handle_message(message: QMI_Message)
context::QMI_Context
context::QMI_Context
+ publish_signal(
    publisher_name: String,
    signal_name: String,
    args: tuple<Any>)
+ publish_signal(...
+ subscribe_signal(
    publisher_context: String,
    publisher_name: String,
    signal_name: String,
    receiver: messaging::QMI_SignalReceiver)
+ subscribe_signal(...
unsubscribe_signal(
    publisher_context: String,
    publisher_name: String,
    signal_name: String,
    receiver: messaging::QMI_SignalReceiver)
+ unsubscribe_signal(...
+ send_message(
    message: messaging::QMI_Message)
+ send_message(...
QMI_Message
QMI_Message
+ source_address:
    QMI_MessageHandlerAddress
+ destination_address:
    QMI_MessageHandlerAddress
+ source_address:...
QMI_SignalRemovedMessage
QMI_SignalRemovedMessage
+ publisher_name: String
+ signal_name: String
+ publisher_name: String...
QMI_SignalMessage
QMI_SignalMessage
+ signal_name: String
+ args: tuple<Any>
+ signal_name: String...
QMI_Task
QMI_Task
+ sig_settings_updated: 
    messaging::QMI_Signal
# _qmi_signals:
    tuple<messaging::SignalDescription>
+ sig_settings_updated:...
+ update_settings(): Boolean
+ update_settings(): Boolean
QMI_LoopTask
QMI_LoopTask
+ sig_status_updated:
    messaging::QMI_Signal
+ sig_status_updated:...
+ run()
+ run()
QMI_RegisteredSignal
QMI_RegisteredSignal
+ publisher_name: String
+ signal_name: String
+ arg_types: tuple<Type>
- _context: 
    context::QMI_Context
+ publisher_name: String...
+ publish(args: Any [*]) 
+ publish(args: Any [*]) 
0..1
0..1
*
*
QMI_SignalSubscriber
QMI_SignalSubscriber
+ context: context::QMI_Context
+ published_context: String
+ publisher_name: String
+ signal_name: String
+ signal_arg_types: String
+ context: context::QMI_Context...
+ subscribe(
    receiver: QMI_SignalReceiver)
+ subscribe(...
+ unsubscribe(
    receiver: QMI_SignalReceiver)
+ unsubscribe(...
SignalManager
SignalManager
- _context: context::QMI_Context
- _local_subscriptions:
    dict<String, set<QMI_SignalReceiver>>
- _pending_subscription_request_by_request_id:
    dict<String, _PendingSubscriptionRequest>
- _pending_subscription_request_by_signal_name:
    dict<String, _PendingSubscriptionRequest>
- _context: context::QMI_Context...
+ publish_signal(
    publisher_name: String,
    signal_name: String,
    args: tuple<Any>)
+ publish_signal(...
+ unsubscribe_signal(
    publisher_context: String,
    publisher_name: String,
    signal_name: String,
    receiver: QMI_SignalReceiver)
+ unsubscribe_signal(...
+ subscribe_signal(
    publisher_context: String,
    publisher_name: String,
    signal_name: String,
    receiver: QMI_SignalReceiver)
+ subscribe_signal(...
+ handle_message(message:
    messaging::QMI_Message)
+ handle_message(message:...
QMI_SignalReceiver
QMI_SignalReceiver
- _queue: deque<ReceivedSignal>
- _queue: deque<ReceivedSignal>
- _receive_signal(
    message: QMI_SignalMessage)
- _receive_signal(...
QMI_Signal
QMI_Signal
+ arg_types: tuple<Type>
+ arg_types: tuple<Type>
+ publish(args: Any [*])
+ publish(args: Any [*])
«call»
«call»
«call»
«call»
«call»
«call»
«call»
«call»
«call»
«call»
«call»
«call»
«call»
«call»
Text is not SVG - cannot display
\ No newline at end of file diff --git a/documentation/sphinx/source/images/example_contexts.drawio.svg b/documentation/sphinx/source/images/example_contexts.drawio.svg index 09c87a5f..143c33cb 100644 --- a/documentation/sphinx/source/images/example_contexts.drawio.svg +++ b/documentation/sphinx/source/images/example_contexts.drawio.svg @@ -1,4 +1,4 @@ -
Context_1:
qmi.core.context::QMI_Context
Context_1:...
Instrument_1:
qmi.core.instrument::QMI_Instrument
Instrument_1:...
Instrument_2:
qmi.core.instrument::QMI_Instrument
Instrument_2:...
Context_2:
qmi.core.context::QMI_Context
Context_2:...
Task_1:
qmi.core.task::QMI_LoopTask
Task_1:...
Context_3:
qmi.core.context::QMI_Context
Context_3:...
Task_2:
qmi.core.task::QMI_LoopTask
Task_2:...
«flow»
«flow»
Control instruments
Control instruments
«flow»
«flow»
Control instruments
Control instruments
«flow»
«flow»
Instrument status
Instrument status
Database
Database
«flow»
«flow»
Control
task
Control...
«flow»
«flow»
settings, status:
qmi.core.pubsub::QMI_Signal
settings, status:...
«flow»
«flow»
status:
qmi.core.pubsub::QMI_Signal
status:...
Text is not SVG - cannot display
\ No newline at end of file +
Context_1:
qmi.core.context::QMI_Context
Context_1:...
Instrument_1:
qmi.core.instrument::QMI_Instrument
Instrument_1:...
Instrument_2:
qmi.core.instrument::QMI_Instrument
Instrument_2:...
Context_2:
qmi.core.context::QMI_Context
Context_2:...
Task_1:
qmi.core.task::QMI_LoopTask
Task_1:...
Context_3:
qmi.core.context::QMI_Context
Context_3:...
Task_2:
qmi.core.task::QMI_LoopTask
Task_2:...
«flow»
«flow»
Control instruments
Control instruments
«flow»
«flow»
Control instruments
Control instruments
«flow»
«flow»
Instrument status
Instrument status
Database
Database
«flow»
«flow»
Control
task
Control...
«flow»
«flow»
settings, status:
qmi.core.pubsub::QMI_Signal
settings, status:...
«flow»
«flow»
status:
qmi.core.pubsub::QMI_Signal
status:...
Text is not SVG - cannot display
\ No newline at end of file From f4f44aa24c08c9e8066373ce1b05ceb63185777f Mon Sep 17 00:00:00 2001 From: Henri Ervasti Date: Mon, 11 May 2026 11:32:54 +0200 Subject: [PATCH 25/25] [200-qmi-dataset-reformulation] CHANGELOG edits. --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9eaef1c2..5694dbf5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,12 +9,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Functions to `qmi.instruments.yokogawa.dlm4308` for obtaining trace data from the instrument waveform channels via Ethernet. All data formats are enabled. - Due to possibility of obtaining data in various data formats with Yokogawa device, and the fact that the returned data string decoding varies depending on the data format, an option for setting the `decoder` for `ScpiProtocol.ask` method was added. This enabled the trace adat acquisition in all data formats for Yokogawa. +- Added a HDF5 file-to-QMI `DataSet` conversion function in `qmi.data.dataset`. +- Added a possibility to add QMI `DataSet` into an existing HDF5 file. ### Changed - Replace `pylint` linter with `ruff`. - DeprecationWarning warning on the `start_stop` context manager, as `Context` objects are now their own context managers. Usages of `with start_stop(qmi, ...)` can be replaced with `with qmi.start(...)` and `with start_stop()` can be replaced with `with `. +- Refactoring of QMI `DataSet` class so that it allows also raw (single) dataset column(s) without axis | axes definition. +- QMI datasets has now clear `QMI_Dataset: 1` attribute in dataset root. +- `qmi.data.datastore` module to work with changes in `QMI_DataSet` class. ## [0.52.0] - 2026-04-01