From d760ef8dab66981a322371696f03c4d0315c9c2b Mon Sep 17 00:00:00 2001 From: Alexander Kapitanov Date: Thu, 20 Aug 2020 01:48:11 +0300 Subject: [PATCH 1/3] Coordinates now is property. Add KDE. --- src/dynamic_system.py | 15 ++++---- src/utils/calculator.py | 77 +++++++++++++++++++++++++++++------------ src/utils/drawer.py | 68 ++++++++++++++++++++++++------------ 3 files changed, 107 insertions(+), 53 deletions(-) diff --git a/src/dynamic_system.py b/src/dynamic_system.py index 2e52513..a3bcc96 100644 --- a/src/dynamic_system.py +++ b/src/dynamic_system.py @@ -40,7 +40,6 @@ from typing import Optional -import numpy as np import pandas as pd from src.utils.calculator import Calculator from src.utils.drawer import PlotDrawer @@ -61,7 +60,6 @@ class DynamicSystem: calculator: Calculator() settings: Settings() - Examples -------- # TODO: Add examples @@ -102,10 +100,10 @@ def initialize(self, input_args: Optional[tuple] = None, show_logs: bool = False # Update main calculator self.calculator = Calculator() - def collect_statistics(self, points: np.ndarray): + def collect_statistics(self): math_dict = {} - _min_max = self.calculator.check_min_max(points) - _moments = self.calculator.check_moments(points) + _min_max = self.calculator.check_min_max() + _moments = self.calculator.check_moments() math_dict.update({"Min": _min_max[0]}) math_dict.update({"Max": _min_max[1]}) math_dict.update(_moments) @@ -115,14 +113,15 @@ def collect_statistics(self, points: np.ndarray): def run(self): # Get vector of coordinates _points = self.model.get_coordinates() + self.calculator.coordinates = _points # Calculate - stats = self.collect_statistics(_points) + stats = self.collect_statistics() if self.settings.show_logs: print(f"[INFO]: Show statistics:\n{stats}\n") - self.calculator.check_probability(_points) - self.calculator.calculate_fft(_points) + self.calculator.check_probability() + self.calculator.calculate_fft() # Draw results if self.settings.show_plots or self.settings.save_plots: diff --git a/src/utils/calculator.py b/src/utils/calculator.py index 0fdd01c..7a70927 100644 --- a/src/utils/calculator.py +++ b/src/utils/calculator.py @@ -42,7 +42,7 @@ from typing import Tuple import numpy as np -from scipy.stats import kurtosis, skew +from scipy.stats import gaussian_kde, kurtosis, skew class Calculator: @@ -53,29 +53,39 @@ class Calculator: """ - def __init__(self): - pass + def __init__(self, kde_dots: int = 1000): + self.kde_dots = kde_dots + self._coordinates = None - @staticmethod - def check_min_max(coordinates: np.ndarray) -> Tuple[np.ndarray, np.ndarray]: - """Calculate minimum and maximum for X, Y, Z coordinates. + def __len__(self): + return len(self.coordinates) + + @property + def coordinates(self) -> np.ndarray: + return self._coordinates + + @coordinates.setter + def coordinates(self, value: np.ndarray): + """3D coordinates. Parameters ---------- - coordinates: np.array + value : np.ndarray Numpy 3D array of dynamic system coordinates. + + """ + self._coordinates = value + + def check_min_max(self) -> Tuple[np.ndarray, np.ndarray]: + """Calculate minimum and maximum for X, Y, Z coordinates. """ - return np.min(coordinates, axis=0), np.max(coordinates, axis=0) + return np.min(self.coordinates, axis=0), np.max(self.coordinates, axis=0) - @staticmethod - def check_moments(coordinates: np.ndarray, is_common: bool = False) -> dict: + def check_moments(self, is_common: bool = False) -> dict: """Calculate stochastic parameters: mean, variance, skewness, kurtosis etc. Parameters ---------- - coordinates: np.array - Numpy 3D array of dynamic system coordinates. - is_common : bool If False - method returns moments for each coordinate. Otherwise returns moments over all ndarray. Similar for axis or axes along @@ -84,21 +94,42 @@ def check_moments(coordinates: np.ndarray, is_common: bool = False) -> dict: """ axis = None if is_common else 0 return { - "Mean": np.mean(coordinates, axis=axis), - "Variance": np.var(coordinates, axis=axis), - "Skewness": skew(coordinates, axis=axis), - "Kurtosis": kurtosis(coordinates, axis=axis), - "Median": np.median(coordinates, axis=axis), + "Mean": np.mean(self.coordinates, axis=axis), + "Variance": np.var(self.coordinates, axis=axis), + "Skewness": skew(self.coordinates, axis=axis), + "Kurtosis": kurtosis(self.coordinates, axis=axis), + "Median": np.median(self.coordinates, axis=axis), } - def check_probability(self, coordinates: np.ndarray): - pass - # TODO: Implement this method! + def check_probability(self): + p_axi = np.zeros([3, self.kde_dots]) + d_kde = np.zeros([3, self.kde_dots]) + for ii in range(3): + p_axi[ii] = np.linspace(self.coordinates[ii, :].min(), self.coordinates[ii, :].max(), self.kde_dots) + d_kde[ii] = gaussian_kde(self.coordinates[ii, :]).evaluate(p_axi[ii, :]) + d_kde[ii] /= d_kde[ii].max() + return d_kde - def calculate_fft(self, coordinates: np.ndarray): + def calculate_fft(self): pass # TODO: Implement this method! if __name__ == "__main__": - pass + calc = Calculator() + + num_dots = 10000 + np.random.seed(42) + calc.coordinates = np.random.randn(num_dots, 3) + + dd_kde = calc.check_probability() + import matplotlib.pyplot as plt + + print(dd_kde.shape) + plt.figure("Probability density function") + for ii in range(dd_kde.shape[0]): + plt.plot(dd_kde[ii], ".") + # plt.xlim([0, dd_kde.shape[1] - 1]) + plt.grid() + plt.tight_layout() + plt.show() diff --git a/src/utils/drawer.py b/src/utils/drawer.py index 1a84532..e6d9af7 100644 --- a/src/utils/drawer.py +++ b/src/utils/drawer.py @@ -56,7 +56,7 @@ class PlotDrawer: """ - _plot_axis = ((1, 0), (1, 2), (2, 0)) + _plot_axis = ((0, 1), (2, 1), (0, 2)) _plot_labels = {0: "X", 1: "Y", 2: "Z"} def __init__( @@ -101,7 +101,7 @@ def min_max_axis(self): def show_time_plots(self): """Plot 3D coordinates as time series.""" _ = plt.figure("Coordinates evolution in time", figsize=(8, 6), dpi=100) - for ii, axis in enumerate(["X", "Y", "Z"]): + for ii, axis in enumerate(self._plot_labels.values()): plt.subplot(3, 1, ii + 1) plt.plot(self.coordinates[:, ii], linewidth=0.75) plt.grid(True) @@ -116,7 +116,7 @@ def show_time_plots(self): plt.show() def _axis_defaults_3d(self, plots): - plots.set_title(f"{self.model_name} attractor") + plots.set_title(f"{self.model_name} model") plots.set_xlabel("X") plots.set_ylabel("Y") plots.set_zlabel("Z") @@ -151,12 +151,11 @@ def show_3d_plots(self): plt.grid() plt.xlabel(self._plot_labels[xx]) plt.ylabel(self._plot_labels[yy]) - # TODO: 2020/07/26: Set limits! plt.xlim(self.min_max_axis[xx]) plt.ylim(self.min_max_axis[yy]) ax = fig.add_subplot(2, 2, 4, projection="3d") - ax.plot(self.coordinates[:, 0], self.coordinates[:, 1], self.coordinates[:, 2], linewidth=0.7) + ax.plot(self.coordinates[:, 0], self.coordinates[:, 1], self.coordinates[:, 2], linewidth=0.75) self._axis_defaults_3d(ax) plt.tight_layout() @@ -189,7 +188,7 @@ def make_3d_plot_gif(self, step_size: int = 10): self._color_map = plt.cm.get_cmap("hsv", step_dots) ani = animation.FuncAnimation( - fig, self.update_coordinates, step_dots, fargs=(step_size,), interval=100, blit=False, repeat=True + fig, self._update_coordinates, step_dots, fargs=(step_size,), interval=100, blit=False, repeat=True ) if self.save_plots: @@ -197,7 +196,8 @@ def make_3d_plot_gif(self, step_size: int = 10): if self.show_plots: plt.show() - def update_coordinates(self, num, step): + def _update_coordinates(self, num, step): + """Update plots for making gif""" self._plot_list[0].set_data(self.coordinates[0 : 1 + num * step, 0], self.coordinates[0 : 1 + num * step, 1]) self._plot_list[0].set_3d_properties(self.coordinates[0 : 1 + num * step, 2]) self._plot_list[0].set_color(self._color_map(num)) @@ -208,31 +208,55 @@ def update_coordinates(self, num, step): ) self._plot_list[ii + 1].set_color(self._color_map(num)) - def show_all_plots(self): - """Cannot show all plots while 'show_plots' is True. - Note: After closing plots you cannot reopen them! - """ - if not self.show_plots: - plt.show() + # def show_all_plots(self): + # """Cannot show all plots while 'show_plots' is True. + # Note: After closing plots you cannot reopen them! + # """ + # if not self.show_plots: + # plt.show() + # + # @staticmethod + # def close_all_plots(): + # plt.clf() + # plt.cla() + # plt.close() + + +def random_circle(num_points: int = 100) -> np.ndarray: + r"""Create random circle for 3D plots. + + Parameters + ---------- + num_points : int + Number of points to draw + + Returns + ------- + + arr: np.ndarray + Numpy 3D array with shapes [3, num_points] + """ - @staticmethod - def close_all_plots(): - plt.clf() - plt.cla() - plt.close() + angle = 3 + ratio = 0.020 + + theta = np.linspace(0, angle * np.pi, num_points) + xyz = np.vstack([np.cos(theta), np.sin(theta), np.sin(np.linspace(0, 2.05 * np.pi, num_points))]).T + xyz += ratio * np.cumsum(np.random.randn(num_points, 3), axis=1) + return xyz if __name__ == "__main__": np.random.seed(42) - points = np.cumsum(np.random.randn(50, 3), axis=1) + + circle_points = random_circle(num_points=200) drawer = PlotDrawer(show_plots=True, add_2d_gif=True) - drawer.coordinates = points + drawer.coordinates = circle_points drawer.model_name = "Chaotic" # print(drawer.min_max_axis) - drawer.make_3d_plot_gif() - # drawer.make_3d_plot_gif(show_2d_plots=True) + drawer.make_3d_plot_gif(step_size=20) # drawer.show_time_plots() # drawer.show_3d_plots() # drawer.show_all_plots() From 8ca1efc29b2a679631292312ebc4ec54bc05bf2b Mon Sep 17 00:00:00 2001 From: Alexander Kapitanov Date: Sun, 13 Sep 2020 21:36:50 +0300 Subject: [PATCH 2/3] Add FFT / Auto-Correlation support. --- src/_attractors.py | 468 ---------------------------------------- src/dynamic_system.py | 11 +- src/utils/calculator.py | 36 +++- src/utils/drawer.py | 43 ++++ 4 files changed, 78 insertions(+), 480 deletions(-) delete mode 100644 src/_attractors.py diff --git a/src/_attractors.py b/src/_attractors.py deleted file mode 100644 index e01c747..0000000 --- a/src/_attractors.py +++ /dev/null @@ -1,468 +0,0 @@ -"""Chaotic attractors. - -Description : This is the main module which collects attractors - together. You can choose: Lorenz, Rossler, Rikitake, - Nose-Hoover, Chua, Lottki, Duffing, Wang etc. - - Attention! - You should set correct initial values of coordinates [Xo, Yo, Zo] - because of some attractors has an overflow effect. - - ---------- - Lorenz: - ---------- - Lorenz attractor is ordinary differential equation (ODE) of - 3rd order system. - In 1963, E. Lorenz developed a simplified mathematical model for - atmospheric convection. - - Lorenz equations are: - dx/dt = sigma * (y - x) - dy/dt = rho * x - y - x * z - dz/dt = x * y - beta * z - - where beta, rho and sigma - are Lorenz system parameters. Default - values are: beta = 8/3, rho = 28 and sigma = 10. - - Wiki: If rho < 1 then there is only one equilibrium point. - - ---------- - Rikitake: - ---------- - Rikitake system is ordinary differential equation (ODE) of - 3rd order system. - Rikitake system attempts to explain the reversal of the Earth’s - magnetic field. - - Rikitake equations are: - dx/dt = -mu * x + z * y - dy/dt = -mu * y + x * (z - a) - dz/dt = 1 - x * y - - where a, mu - are Rikitake system parameters. Default values are - a = 5, mu = 2 or a = mu = 1. - - ---------- - Rossler: - ---------- - Rossler attractor is the attractor for the Rössler system. Rossler - attractor is a system of three non-linear ordinary differential - equations. - - Rossler equations are: - dx/dt = -(y + z) - dy/dt = x + a * y - dz/dt = b + z * (x - c) - - where a, b and sigma - are Rossler system parameters. Default - values are: a = 0.2, b = 0.2 and c = 5.7. - - 1) a = 0.2, b = 0.2 and c = 5.7 (Standard model) - 2) a = 0.1, b = 0.1 and c = 14 (another useful parameters) - 3) a = 0.5, b = 1.0 and c = 3 (J. C. Sprott) - - Wiki (Varying parameters); - - Varying a: - b = 0.2 and c = 5.7 are fixed. Change a: - - a <= 0 : Converges to the centrally located fixed point - a = 0.1 : Unit cycle of period 1 - a = 0.2 : Standard parameter value selected by Rössler, chaotic - a = 0.3 : Chaotic attractor, significantly more Möbius strip-like - (folding over itself). - a = 0.35 : Similar to .3, but increasingly chaotic - a = 0.38 : Similar to .35, but increasingly chaotic - - Varying b: - a = 0.2 and c = 5.7 are fixed. Change b: - - If b approaches 0 the attractor approaches infinity, but if b would - be more than a and c, system becomes not a chaotic. - - Varying c: - a = b = 0.1 are fixed. Change c: - - c = 4 : period-1 orbit, - c = 6 : period-2 orbit, - c = 8.5 : period-4 orbit, - c = 8.7 : period-8 orbit, - c = 9 : sparse chaotic attractor, - c = 12 : period-3 orbit, - c = 12.6 : period-6 orbit, - c = 13 : sparse chaotic attractor, - c = 18 : filled-in chaotic attractor. - - ---------- - Nose–Hoover: - ---------- - Nose–Hoover oscillator is ordinary differential equation (ODE) of - 3rd order system. - Nose–Hoover system has only five terms and two quadratic - nonlinearities. - - Nose–Hoover equations are: - dx/dt = y - dy/dt = y * z - x - dz/dt = 1 - y * y - - Nose–Hoover system doesn't have any system parameters. - - ---------- - Wang attractor: - ---------- - Wang system (improved Lorenz model) as classic chaotic attractor - - Wang equations are: - dx/dt = x - y*z - dy/dt = x - y + x*z - dz/dt = -3*z + x*y - - ---------- - Duffing map: - ---------- - It is a discrete-time dynamical system (2nd order) - The map depends on the two constants: a and b. - Z coordinate is a linear function. - - Duffing equations are: - Eq. 1: - dx/dt = y - dy/dt = -a*y - x**3 + b * cos(z) - dz/dt = 1 - where a = 0.1 and b = 11 (default parameters) - - Eq. 2: - dx/dt = y - dy/dt = a*y - y**3 - b*x - dz/dt = 1 - where a = 2.75 and b = 0.2 (default parameters) - - ---------- - Chua circuit: - ---------- - Chua circuit. This is a simple electronic circuit that exhibits - classic chaotic behavior. - - Chua equations are: - Eq. 1: - dx/dt = alpha * (y - x - ht) - dy/dt = x - y + z - dz/dt = -beta * y - - where ht = mu1*x + 0.5*(mu0 - mu1)*(np.abs(x + 1) - np.abs(x - 1)) - and alpha, beta, mu0 and mu1 - are Chua system parameters. - - Default values are: - alpha = 15.6 - beta = 28 - mu0 = -1.143 - mu1 = -0.714 - - Eq. 2: - dx/dt = 0.3*y + x - x**3 - dy/dt = x + z - dz/dt = y - - ---------- - Lotka–Volterra: - ---------- - The Lotka–Volterra equations, also known as the predator–prey - equations. - - Chaotic Lotka-Volterra model require a careful tuning of - parameters and are even less likely to exhibit chaos as the number - of species increases. - - Lotka–Volterra equations are: - Eq. 1: - dx/dt = x * (1 - x - 9*y) - dy/dt = -y * (1 - 6*x - y + 9*z) - dz/dt = z * (1 - 3*x - z) - - Be careful! Init parameters of x, y, z should be set right. - For example, [x, y, z] = [0.6; 0.2; 0.01]. - ------------------------------------------------------------------------- - -GNU GENERAL PUBLIC LICENSE -Version 3, 29 June 2007 - -Copyright (c) 2019 Kapitanov Alexander - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - -THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT -WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT -NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE -DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR -OR CORRECTION. - ------------------------------------------------------------------------- -""" - - -# Authors : Alexander Kapitanov -# ... -# Contacts : -# ... -# Release Date : 2019/05/31 -# License : GNU GENERAL PUBLIC LICENSE - - -import matplotlib.pyplot as plt -import numpy as np -from mpl_toolkits.mplot3d import axes3d # noqa # pylint: disable=unused-import -from scipy.fftpack import fft, fftshift -from scipy.stats import gaussian_kde, kurtosis, skew -from src.attractors.chua import chua -from src.attractors.duffing import duffing -from src.attractors.lorenz import lorenz -from src.attractors.lotka_volterra import lotka_volterra -from src.attractors.nose_hoover import nose_hoover -from src.attractors.rikitake import rikitake -from src.attractors.rossler import rossler -from src.attractors.wang import wang - -# ##################################################################### -# Functions -# ##################################################################### - -# TODO: Reimplement this file! 2020/07/14 - - -def sel_chaos(chtype=None, xt=0, yt=0, zt=0, **kwargs): - """ - Select chaotic system function by name - - Parameters - ---------- - chtype : str - Select function - xt, yt, zt : float - Input coordinates Z, Y, Z respectively - kwargs : float - Chaotic system parameters - - """ - ch_case = chtype.casefold() - if ch_case == "wang": - return wang(xt, yt, zt) - elif ch_case == "nose-hoover": - return nose_hoover(xt, yt, zt) - elif ch_case == "lotka": - return lotka_volterra(xt, yt, zt) - elif ch_case == "chua": - return chua(xt, yt, zt, **kwargs) - elif ch_case == "lorenz": - return lorenz(xt, yt, zt, **kwargs) - elif ch_case == "rossler": - return rossler(xt, yt, zt, **kwargs) - elif ch_case == "duffing": - return duffing(xt, yt, zt, **kwargs) - elif ch_case == "rikitake": - return rikitake(xt, yt, zt, **kwargs) - else: - raise Exception("Error: you should set the correct chaotic system") - - -def sel_args(chtype=None, args=None): - """ - Select arguments for chaotic system - - Parameters - ---------- - chtype : str - Select function - args : dict - Chaotic system arguments (as a dict) - """ - ch_case = chtype.casefold() - if ch_case in ("lorenz", "rossler", "duffing", "chua", "rikitake"): - return args[ch_case] - return {} - - -# ##################################################################### -# Input parameters -# ##################################################################### - -CHTYPE = "Wang" # Chaotic system name -CHARGS = { - "rikitake": {"a": 1, "mu": 1}, - "duffing": {"a": 0.1, "b": 11}, - "rossler": {"a": 0.2, "b": 0.2, "c": 5.7}, - "lorenz": {"sigma": 10, "beta": 8 / 3, "rho": 28}, - "chua": {"alpha": 0.1, "beta": 28, "mu0": -1.143, "mu1": -0.714}, -} # Set arguments - -NW = 5000 # Number of ODE's dots -DT = 100 # Step for equations -NFFT = 2 ** 12 # Number of FFT dots - - -# ##################################################################### -# Calculate attractor -# ##################################################################### -def calc_chaos(): - print("Start analyzing the next chaotic system: [%s]\n" % CHTYPE) - - # Create zero arrays for coordinates - xt, yt, zt = np.zeros(NW), np.zeros(NW), np.zeros(NW) - # Set initial values for [X, Y, Z] - xt[0], yt[0], zt[0] = 1.0, 0.5, 1.0 - - for ii in range(NW - 1): - x_nt, y_nt, z_nt = sel_chaos(chtype=CHTYPE, xt=xt[ii], yt=yt[ii], zt=zt[ii], **sel_args(CHTYPE, CHARGS),) - xt[ii + 1] = xt[ii] + (x_nt / DT) - yt[ii + 1] = yt[ii] + (y_nt / DT) - zt[ii + 1] = zt[ii] + (z_nt / DT) - - # ##################################################################### - # Calculate standardized moments - # ##################################################################### - - ds_3d = ("X", "Y", "Z") - ch_3d = np.stack((xt, yt, zt)) - - nn, mm = ch_3d.shape[0], ch_3d.shape[1] - print("Calculate mean, variance, skewness, kurtosis and median for each " "coordinate of chaotic system:") - - m15 = np.zeros([nn, mm]) - for ii in range(nn): - m15[ii, 0] = np.mean(ch_3d[ii, :]) # Mean - m15[ii, 1] = np.var(ch_3d[ii, :]) # Variance - m15[ii, 2] = skew(ch_3d[ii, :]) # Skewness - m15[ii, 3] = kurtosis(ch_3d[ii, :]) # Kurtosis - m15[ii, 4] = np.median(ch_3d[ii, :]) # Median - - print("%s axis: " % ds_3d[ii], end="") - print("M[t]: {:+.4f}, ".format(m15[ii, 0]), end="") - print("D[t]: {:+.4f}, ".format(m15[ii, 1]), end="") - print("A[t]: {:+.4f}, ".format(m15[ii, 2]), end="") - print("E[t]: {:+.4f}, ".format(m15[ii, 3]), end="") - print("Md[t]: {:+.4f}. ".format(m15[ii, 4])) - - # Find Probability density function - n_pdf = 3000 - p_axi = np.zeros([nn, n_pdf]) - d_kde = np.zeros([nn, n_pdf]) - for ii in range(nn): - p_axi[ii] = np.linspace(ch_3d[ii, :].min(), ch_3d[ii, :].max(), n_pdf) - d_kde[ii] = gaussian_kde(ch_3d[ii, :]).evaluate(p_axi[ii, :]) - d_kde[ii] /= d_kde[ii].max() - - # ##################################################################### - # Calculate Autocorrelation (Cross-correlation) and FFT - # ##################################################################### - - # TODO implement FFT and autocorrelation - d_acf = np.zeros([nn, mm]) - d_fft = np.zeros([nn, NFFT], dtype=np.complex) - for ii in range(nn): - d_acf[ii] = np.correlate(ch_3d[ii, :], ch_3d[ii, :], "same") - d_acf[ii] /= d_acf[ii].max() - d_fft[ii] = fft(ch_3d[ii, 1:NFFT], NFFT) - - d_fft = np.abs(fftshift(d_fft, axes=1)) - d_fft /= np.max(d_fft) - d_fft = 20 * np.log10(d_fft) - - plt.rc("font", size=8) # controls default text sizes - plt.rc("axes", titlesize=10) # fontsize of the axes title - plt.rc("axes", labelsize=10) # fontsize of the x and y labels - plt.rc("legend", fontsize=8) # legend fontsize - - lim_xyz = [(np.min(ch_3d[ii]), np.max(ch_3d[ii])) for ii in range(3)] - - # Plot 3D model - # fig1 = plt.figure('3D model of chaotic system') - # ax = fig1.gca(projection='3d') - # ax.plot(xt, yt, zt, 'o-', linewidth=0.1, markersize=0.3) - # ax.set_xlabel("X") - # ax.set_ylabel("Y") - # ax.set_zlabel("Z") - # ax.set_xlim(lim_xyz[0]) - # ax.set_ylim(lim_xyz[1]) - # ax.set_zlim(lim_xyz[2]) - # ax.set_title("3D Chaotic Attractor") - # plt.tight_layout() - - # Plot 2D coordinates of 3D model - fig2 = plt.figure("3D Coordinates") - plt.subplot(2, 2, 1) - plt.plot(yt, xt, linewidth=0.75) - plt.grid() - plt.xlabel("X") - plt.ylabel("Y") - plt.xlim(lim_xyz[1]) - plt.ylim(lim_xyz[0]) - - plt.subplot(2, 2, 2) - plt.plot(yt, zt, linewidth=0.75) - plt.grid() - plt.xlabel("Z") - plt.ylabel("Y") - plt.xlim(lim_xyz[1]) - plt.ylim(lim_xyz[2]) - - plt.subplot(2, 2, 3) - plt.plot(zt, xt, linewidth=0.75) - plt.grid() - plt.xlabel("X") - plt.ylabel("Z") - plt.xlim(lim_xyz[2]) - plt.ylim(lim_xyz[0]) - - ax = fig2.add_subplot(2, 2, 4, projection="3d") - ax.plot(xt, yt, zt, linewidth=0.7) - ax.set_xlabel("X") - ax.set_ylabel("Y") - ax.set_zlabel("Z") - plt.tight_layout() - - # Plot 2D data in timex - plt.figure("Coordinates evolution in time") - for ii in range(nn): - plt.subplot(2, 2, ii + 1) - plt.plot(ch_3d[ii], linewidth=0.75) - plt.grid() - plt.ylabel(ds_3d[ii]) - plt.xlim([0, NW - 1]) - plt.ylim(lim_xyz[ii]) - plt.tight_layout() - - # Plot Probability density function - plt.figure("Probability density function") - for ii in range(nn): - plt.plot(d_kde[ii], ".") - plt.xlim([0, n_pdf - 1]) - plt.grid() - plt.tight_layout() - - # Plot Autocorrelation and Spectrum - plt.figure("Autocorrelation and Spectrum") - for ii in range(nn): - plt.subplot(2, 3, ii + 1) - plt.plot(d_acf[ii], linewidth=0.75) - plt.grid() - plt.subplot(2, 3, ii + 1 + 3) - plt.plot(d_fft[ii], linewidth=0.75) - plt.grid() - plt.tight_layout() - - plt.show() - - -# Execute main function: Chaotic system -calc_chaos() diff --git a/src/dynamic_system.py b/src/dynamic_system.py index a3bcc96..c5a2a65 100644 --- a/src/dynamic_system.py +++ b/src/dynamic_system.py @@ -121,15 +121,16 @@ def run(self): print(f"[INFO]: Show statistics:\n{stats}\n") self.calculator.check_probability() - self.calculator.calculate_fft() + spectrums = self.calculator.calculate_spectrum() + correlations = self.calculator.calculate_correlation() # Draw results if self.settings.show_plots or self.settings.save_plots: self.drawer.coordinates = _points - + self.drawer.show_spectrum_and_correlation(spectrums, correlations) # self.drawer.show_time_plots() # self.drawer.show_3d_plots() - self.drawer.make_3d_plot_gif(50) + # self.drawer.make_3d_plot_gif(50) # self.drawer.show_all_plots() @@ -138,13 +139,13 @@ def run(self): "--init_point", "1 -1 2", "--points", - "2000", + "3000", "--step", "50", "--save_plots", # "--show_plots", "--add_2d_gif", - "rossler", + "lorenz", ) dynamic_system = DynamicSystem(input_args=command_line, show_log=True) diff --git a/src/utils/calculator.py b/src/utils/calculator.py index 7a70927..5e079de 100644 --- a/src/utils/calculator.py +++ b/src/utils/calculator.py @@ -42,19 +42,21 @@ from typing import Tuple import numpy as np +from scipy.fftpack import fft, fftshift from scipy.stats import gaussian_kde, kurtosis, skew class Calculator: - """Main class for calculate math parameters. + """Main class for calculate math parameters: FFTs, Auto-Correlation, KDE (Prob) etc. See Also: ----- """ - def __init__(self, kde_dots: int = 1000): + def __init__(self, kde_dots: int = 1000, fft_dots: int = 4096): self.kde_dots = kde_dots + self.fft_dots = fft_dots self._coordinates = None def __len__(self): @@ -102,6 +104,9 @@ def check_moments(self, is_common: bool = False) -> dict: } def check_probability(self): + """Check probability for each chaotic coordinates. + + """ p_axi = np.zeros([3, self.kde_dots]) d_kde = np.zeros([3, self.kde_dots]) for ii in range(3): @@ -110,9 +115,26 @@ def check_probability(self): d_kde[ii] /= d_kde[ii].max() return d_kde - def calculate_fft(self): - pass - # TODO: Implement this method! + def calculate_spectrum(self): + """Calculate FFT (in dB) for input 3D coordinates. You can set number of FFT points into the object instance. + + """ + spectrum = fft(self.coordinates, self.fft_dots, axis=0) + spectrum = np.abs(fftshift(spectrum, axes=0)) + # spectrum = np.abs(spectrum) + spectrum /= np.max(spectrum) + spec_log = 20 * np.log10(spectrum + np.finfo(np.float32).eps) + return spec_log + + def calculate_correlation(self): + """Calculate auto correlation function for chaotic coordinates. + + """ + nn, mm = 3, len(self.coordinates) + auto_corr = np.zeros([mm, nn]) + for ii in range(nn): + auto_corr[:, ii] = np.correlate(self.coordinates[:, ii], self.coordinates[:, ii], "same") + return auto_corr if __name__ == "__main__": @@ -127,8 +149,8 @@ def calculate_fft(self): print(dd_kde.shape) plt.figure("Probability density function") - for ii in range(dd_kde.shape[0]): - plt.plot(dd_kde[ii], ".") + for idx in range(dd_kde.shape[0]): + plt.plot(dd_kde[idx], ".") # plt.xlim([0, dd_kde.shape[1] - 1]) plt.grid() plt.tight_layout() diff --git a/src/utils/drawer.py b/src/utils/drawer.py index e6d9af7..ed7f03c 100644 --- a/src/utils/drawer.py +++ b/src/utils/drawer.py @@ -98,6 +98,49 @@ def coordinates(self, value: np.ndarray): def min_max_axis(self): return np.vstack([np.min(self.coordinates, axis=0), np.max(self.coordinates, axis=0)]).T + # TODO: Add plots for KDE + # # Plot Probability density function + # plt.figure("Probability density function") + # for ii in range(nn): + # plt.plot(d_kde[ii], ".") + # plt.xlim([0, n_pdf - 1]) + # plt.grid() + # plt.tight_layout() + + def show_spectrum_and_correlation(self, spectrums: np.ndarray, correlations: np.ndarray): + """Plot 3D coordinates as time series.""" + _ = plt.figure("Autocorrelation and Spectrum", figsize=(8, 6), dpi=100) + + x_corr = np.linspace(-len(self.coordinates) // 2, len(self.coordinates) // 2, len(self.coordinates)) + x_ffts = np.linspace(-0.5, 0.5, len(spectrums)) + + plt.suptitle(f"{self.model_name} attractor", x=0.1) + for ii, axis in enumerate(self._plot_labels.values()): + plt.subplot(3, 3, ii + 1) + plt.title("Time plots", y=1.0) if ii % 2 == 1 else None + plt.plot(self.coordinates[:, ii], linewidth=0.75) + plt.grid(True) + plt.ylabel(axis) + plt.xlim([0, len(self.coordinates) - 1]) + plt.subplot(3, 3, ii + 4) + plt.title("Spectrum plots", y=1.0) if ii % 2 == 1 else None + plt.plot(x_ffts, spectrums[:, ii], linewidth=0.75) + plt.grid(True) + plt.ylabel(axis) + plt.xlim([np.min(x_ffts), np.max(x_ffts)]) + plt.subplot(3, 3, ii + 7) + plt.title("Correlation plots", y=1.0) if ii % 2 == 1 else None + plt.plot(x_corr, correlations[:, ii], linewidth=0.75) + plt.grid(True) + plt.ylabel(axis) + plt.xlim([np.min(x_corr), np.max(x_corr)]) + plt.tight_layout() + + if self.save_plots: + plt.savefig(f"{self.model_name}_spectrum_correlations.png") + if self.show_plots: + plt.show() + def show_time_plots(self): """Plot 3D coordinates as time series.""" _ = plt.figure("Coordinates evolution in time", figsize=(8, 6), dpi=100) From 954f1043533d76a5cce7fd834da3ca7e14744874 Mon Sep 17 00:00:00 2001 From: Alexander Kapitanov Date: Sun, 13 Sep 2020 21:37:13 +0300 Subject: [PATCH 3/3] Modify readme. Add Spectrum and auto-correlations. --- README.rst | 4 ++++ img/Lorenz_Spectrum.png | Bin 0 -> 104438 bytes 2 files changed, 4 insertions(+) create mode 100644 img/Lorenz_Spectrum.png diff --git a/README.rst b/README.rst index 531d61c..ccfbde0 100644 --- a/README.rst +++ b/README.rst @@ -59,6 +59,10 @@ where a = 0.2, b = 0.2 and c = 5.7. .. image:: https://raw.githubusercontent.com/capitanov/chaospy/master/img/Rossler_3D.png?sanitize=true +Spectrum and auto-correlations:: + +.. image:: https://raw.githubusercontent.com/capitanov/chaospy/master/img/Lorenz_Spectrum.png?sanitize=true + Source code ~~~~~~~~~~~ diff --git a/img/Lorenz_Spectrum.png b/img/Lorenz_Spectrum.png new file mode 100644 index 0000000000000000000000000000000000000000..8249c8a0ee79c34f0e11952f7f7e812c9896da62 GIT binary patch literal 104438 zcmcG#bx@p9^EEg)L4pPkPJrMLG`IzKcb5bU?(Pmjg9U=SySqcs;4Xn+!F@09`~CLY zs;%0s{bQ+0hGFKJxliBj)8};e4O5W&go;Ff1c5+MB_%|aAP^W*2n1RK5gz>IyR*L? zcz|^fmQ+CmKc0vtq2T!|I|)q(2n5aWW-fvf?BO4aaz}`+J=23x!Hj z=qvMm9m4%Fj3@@pJZ_Fq2(nB?-&SoQ{*B{qdUyCVXBf>)a z36i3N2O);_(nF;G^SS>yLbmV!ex@ZtL;64O^!qV~juiUetH8yD?19kaFQ4$A5BiMy z|Mz9@%X~c_&Iatbh<;a_N;}OJ2r(P?qj;W=aV8xRa#(dbOz?%|jF0n9?C<;5y8>8TPuKtR3VOQBOe1u)^%BRj>sFM6w6utn6jFJ| zle^V&V;pyIqeGc)3r-C0KSZs1tFWu1rNeulhqF&8c+8NYp&tWrv%kwI_IpguMLxwW+!J;a(Jp z0CASj6E|bqg;MXpfbpNHJPiG0X4_R>9fvV?2`MSzZ|`K8?bZe9_1lRclT8lhe^=WG zzs#4-5ZhoF)4zjaym%a=_fr=@*0ujj$weY1g(|G@rbu5-g~J%Xvdb6Q>?%K2!K z47^T7MMZX!0n8`x`!a6#d9GAbd0w>)Yj|YjY}sKVqu~e_5!SzWvwW!Af{|(b=R2jkPd0nbH9xc8>6L?^T ztQQqzcEh0YcIvpSwz_H5Tj7HZ!ms9gzMJo`1J1OS>2d70b~1pg@9FpPxDh4-m#H6Y zRqp(?9|CbF`@Bv-2(ddNWU}syIwdu=@$=K;&4kZWz`VZC+p#oG1PItWVJ4s1V%3`y zpXZ3Pt%09z=ezDp({TYn_<-J=eOv%xVZmTU%~p{^_XXQ^*=maOv}f`#ThPmpY`Extvx?oyO~2VFfk3( zT24a*H55Pu|6rv_G&x>wLV}o{?~c_EL=vz|g+)XtzkbV;YdbPDq^P892xgVDne+c3*^nC+cv}L5`d2`%$F! zx*Vs+XJ(c=9xrP$Ib0shB0=(`lNpoTfjxqU8ozEOyhp)h8Tla;(D-P`g@l9zF07g0 z*FJK>1TJ~*N8r#EPx)#jnQ5R<@#kcoG_IEi*rU?{fhUZ^`HF_dqnG=&Ytp$piHtwb1fY(_>DpT`yRKny-xa8a@#DVG4tfUk+Uc@GH7 zM0LHcCEJcDM%`vo5SBf`s6D_VvuThreV*KEZP$py!onJNlC%{xG%RR2G3T|3d-GgY znw@Ueo*(r;e3?VBw6wfA&w7rmF`o$L6A%y}xnA=T(5m|!6c`BmaO~3Yf;ru_F&gCs zvT6A(KluRgKxV$~wBH|#++Q7GkdVZ1STC+8Y1{l-v4#VgLLq=r0}c+326$f(uAaq$ z3vfx1BvT>*Z=z&9_o8+_KE4d@<4!*qh%cE)uw6x5Qd0keoP>md&UeTU$#3tLg{bjR zHeXCgDXGzDN4B}O)l+YIw%O;p5rkXmb?*o^!At2ZTUts|ggo5bW0H56(OD0ljHb(HUMe^L) z6@YNIn`R3_E3@+xiC1nGVbo#S+pU3^Ph0&_FKA}C*6x+UX8t;wn6G%C>a4J^uoL8o zuczxmkpOc4{Q09%X#n+-MRIb;WzxAY7_@3T)43f^PkYd|fIs(HH>|)z_7`fXAqE%w zzkauQaK4jC@dYV|0+<^gAD;^VdK>E83t}GRiyI5(^zr_bdk7b}|I1cuv$AO4x-_Pi zRi7ESW$SZK$jZi6Wz>iCZha*>%lqyX=b9%Q{A;36msK|e>&05Xfvv9PCI=Rur-#rA zLZnQwY>skm{J={QQuM&h?V)d6cIyxV_Rp|_b>S1~+*ohkyaA~;V$}y18~epl17O+c zU`wZ_lz8vba7cjiz*2HN4;&oqBoTz!nt5@nGiF3$C9% zUaxHdGwx=dgDbWg*1UUK-OlX*8bTDx4g%m&yI-*;35z9kbr|d-}fb9N=i!pZm`WVU0ZGQ*l^_e zl`RqyYx)BFkV(K7P~P&?E*@O<;p!V){ar}m^WXr`f&GhH-{+AX6BD!2YJs(1i`C^= zXQaxx=1XE#f~fmSxo(SalIh=t8iZth?aH^DK>Oldv-AYLg*M zuzv(DYhDfQV_RqIzdn)lt+=d3)qR;a+8&InpO=x55!KNl0?9Mr{-lFM_WOsh!g3Hp zcI}GBEToLd$S>gxEID%1zPqzy`1EkQ55T!EXm}LlKM**<_-tmtKpIzI`$TmsbX%M^ zUQ!q^XhawmwYX>I$c}%{hJn(ZnYpq7gjKjaz@M336$M5a(@4mxkX zmu^|DxA^6MYkT`|XK-R7X8#V*9dqx3+}t0sX&hw6EFfaSk5^i>H}@^nXA}S_*~&}S z>juOvRINnSuVE9+#3j}Py^ zK?=K;6<4qkAOSLenJcX{Ey&9=98c%Ina+9&q^oGfbXjr2)vC4d1B=`M&L!C4{dfxE zPfT^~{P-m<{NDF-x*}?=BL?of2n8-eo2@&00}}L9z0tgua@@b$_Sm0 zmxqX!O4ON3HL9R1+O7x|>#ZX$E*vk8R|wnOFQI?rL$@E6x2yv;6C&^+q%Kozzhbk} zyz#<4Kp@2c#9yypvJvt0uBepYRmGjb&sAO$n} z@r*Aez9{&tuq56$WO|-wVlv-9yaFib`X?_L@1ajl^dY{{x`n>3%Sd0tvDM zV9P9;;tL{!My2n9jh=FGW21(ow6rpSpxm2B?~%)Y=jS4Gi3#(-qjn!a7NUhD*tXw_ zubJr~m;kr}v753ldPK3>jmy`;HzulrN*_`~PJ00QH_e@7BT<>=Usmp%ozv+0k_C^(%j`|IZ?G}r*4 z$M4BH_OF(0IB^)X0$W>om!0NyXPskSm}NT!Hu{S~?8TnlaK8ruxABrmW{Q+C5Mk}E zS6sHDI9Cz>@FxO21GL2Y5Or2B;1vGx@t8Uwr>A^$VFbBzgy_BtfyAIY@RjS|s)6djKI@I5W7|OJ5ruk3+4a-8uxP|PC>xp{`?eEKFk2V!XG|JM6nQC@;@qd#+d)< z#&{V(?(bGNw({nK;^y+`mtEruoe}@9j(u73|D(*sfcd|QUPCDG9sldfx?lyt|M?wS zsElk5s>s+xQ(R8&HDJ#oy9Kz2pP|JR?T(kZYps`X*v157OQBxzl<#8-L{ERs65KSTw4df%xpW`3FyF=l?yIsJ$(UE7w{`+or_BRl_ z?LmwWAj3z0QRah%hI-L(AUgyMY!w|Is347mm-#^Lz;cOYYCNRm|ksSQ{ z-Pz+jA8HkvMd%vRB=eGLvX`%d-~pbIy{xRPn3k5-+xdKVaDy)a2c8AoN)Q^QSp@#+ zumKnR&qw&*JRL>{|3>&QW1E*FUaME^govH|G$+GBqGscx0}oTfjp$3)byi| zU^j&G*VqF5qw#vx<5#IB8|Axqo7E$XJpj5c9>a4CK!jUN=c8g`VX-*wD-dznkschv zQsNuwT6En8DhL_{elaT->f+YdRR>IF2CAW>;T4)^Gu4CN%Vu(UT+!cM9wNjH1d#YV zV0c{p?E=av{GIIg{ejW%?8vsQXYi|D*Sc1VwXc9Q$K&_pYSptUt z&Pz{@$QR7Dhx$Y8v*&-mg>}JvIBt(mcYYRx7WRu0<#F8iZF1N$Vx(J1_+{r+`N z2-?7l;0A0U2LP?>cHF1a^#C+z1?9cn-Cd*o$?QAsC<1ojlhwAk)YKtWK~H`XPyU{z z?A%<@XYC|PV15EC#UsJRN%TeGX>_o&))@aO-t=?A3jqm0B}511TYe!y3>PAOov<8#>$x6+=u+OlF+k zd=3nrDgXEHA5TmDe*%CM-Y&cj57s{gkS86dS=AI4V|d7VI9+)sAXKM7FBy%duq3{B z7*3!~;dQHiN~4EGfatb3^@L`x6ziSwyhBGMrJ#V}T(%Pl&|>;YRv%H{Im;mo^{Q($ zm95HdL-_AX3oZ~YFS=OI{SVa(PTaBRRp7p0bNkIEGSC1o)q#`N^Jr6XO3Xl*U{WpT z40`d_rLg0&Ua9^|;%py8SQarL?Cgf9l9`tn+i#3K0V+a#=gPEUAmCmm^JNJiQvj0b zc;D_Uvu3pQMy}kXC`AcRldr=BWwZz+-h&kJu+RIDG3gOc? z&v8X172>PR^u2Y}e|Ak(=nMQ^YKU2=_j&eyVbZXmW-a1OrzP6_WXV;MnD{}hq%PVAh20Ejg5FOxp;RXD+XvP2n3|)2vD!VBjmK{ zt((^)oV^TuAVW{@;1We64UKm~Ksrs1X&}AtOFL+Oj~YKf?12JmPJO^B?DjHTHUSmx z0{0UGgdhoI-Hwada*DF`v>SPUwe2Ht{IgNEi64L{;IV&Jc{{I18fqN~jS1J+*9Y+h zwIgUqb#*m}mlPB{TwO;D9_PQIfJ>G`W4?zGXU4NaUwA`cpC77Wt!#SursRm51Or|{ zsCLlkagku>proQdM=XNbbQoJEi~lWP6fY$HxM`30F{R`A@#LidCW6Kn2vpWfEeP;$ zF=1ihw{tqApQ@N7+^A#lS7yD3tw=ynC_Y8k zuABfvc-=XIm9-7eV=R)7sqXrkzp;ugesn6}=+vZK7imlNr@{ zT`&@aK@qHe@X$Q!OJ;zK4%kMY|$*^M)@dUhiahUWXoet-+!S>x< z0nhF^x&B#L7+U4Oy|eRYfn_vs)OW*K{XIq3$1krpXLs(uTJ(n&PLxTGrjncFxwA6r z@Ho-#@=X$|J6b92ROj?&X}scAMhJqn-7j3 z`bkE5fhJTd(G6E3lpU&*;!l%Wwaw{S`6SU62~*2B|-WBnDLU3_+O;R4C1_ zt`BCBiDN>Be5-8N_=!F`m&W5Wzn{Og;&aDQg3%SbT}9*A2o<)_*Wt@)A5Ry1?u1B8&$HN5SoR z;*J$wRlHNn=k!DSN}Mr63D0{Iqsw;Bn}9f3+Wz=bJZUEkmCRySg>kKB+?^+bOV#}E znl%-W7CE(;7JWHIxO(D`+6<R8sbzy>54s?^r52o_NHgiNXN=G6p)yVx^fK zhfznP=up*}rie*I!BpVe;$7=;S_{6wG0&S{RoMp#PPOQ!?Sp|`2Pv00II+P(s;faR zb41SU)-O>Jhhg_b zhTY?P)YA$ge4b@4?RQ25OAODkdnN>X<}D*E487`oZ;g$ElT%uXf{e>p8}*Fn)AqU8 zHBu?V-d?t;MDz|tSl9a^U8XguN}$@FyhSG}nXJ&G_>Ra}6RoVYWHNm1AIts@`)Iwv zTLgX;bphSC$I8H!49SQKd`X9pTAfCFvG zOMi@d)P4Cp_dI^h%JOgQ)N-yzS62}mmb`LGCFGxi{<|#LII_%qQp|l}<#n+*?8@kPUCx3!h}eq+ z{5(VRk^{K=4=;_D8^2o2mEtQYDKWcWSb!*2J#bg`d1G`fR#-Zvkj5w;rziRPCwFVx z9ci<`rSXk@AaYWtD5cQA9?YkSgpEh1kb`CdmJurDWW$i8R|%XpjR#>0fN|pGlvf*+ zEhNWmR8*8`kzt_It@YNd9hKXoe{sTpTRZ?qCvIZ}V|=t&hsS9{#9^}>3W}eAW}*;s zpqQG9D_j`I@CBcAJQE}1(04A@eTn<_Envx}rA%qQ#EJup9DQK;y6Vb1ac3%HXf!~-UM(~LsUg2B@_&*)q#K@)fUyPQ?SVm!1;P_Fp+F6Sl| z?-RY~Z%E;RZ>yO;)YVP~vfC)d_{_ zH2}{=x1n;N-(DXca#GHR!j+z4=XK3fB2p+XP=Au?_u@^>1k&WUbJSif0WLl{U3(=Y z?VJ9SgVp|{J?4{4y)8=fqQ*sNxD#pz$lY7^q^n28MrH2@O6XLiZvBw@CjY7x(mJ%#%4`KiV;LbIGecMl4Hn?YDEthEPRrCYmo* zjY&X>K$R2*5(}UkP}L7MqwfpKwCaRyY#1BTQ`yXo7Hch+z4UD1lIS%tomSraL)QE6 zfP_6uD3nL|F}^t8>yZ!_2L<6uID%b|Z1(ziP6W{zb<4|RghWfN&~@K?WZXEo;J-?E z*gO|gJ040`Mx0GrZXH}Cc*<<7I@lZIYFKOU*j&l7&`8u(EINm+>g(?@x0^sni+$Xb zb<%yKorB-s6Lrg%sT;hJT;J{C(_9>0SFGLdd4W9c7QlYGd=T=VkQ0VlM;msvJ<2Zp za9Di6z?(er2j-u2{QRR;RQA)_Bb7 z-|M&1Y$#PK$-%>*r&0N3p0QM)gkM^TCSNAif9MkA) zt0t1)t?=_#eM^^WfBf7O(aY^=_(#-~b?hlE^f4Bs5?EuG$=uKa29o(Ng7tR{^@u}{#7^CCE<}Rz((M5kcok?|$h}ctpN)KU-EOwQ zFlP;=^iWfX$4GcX>00_ux;@Kjwv1)hU6o@nNsWUtHRUbEK!qhy?`8Pj;oF3xu~f)9 ztJls(xqgdg<-u1p6}101lC;1mP5|oNH#e@w`~}lcF#}jmk3@2pea=lfi9A_$2k9j0 zzti<~FgmjYmIG}Eu49U2Vg`QB4Qa7sW>&JA`f9yM<^Xat*qksvhWM_){Tz#P*`$gHI(emO0%1QVg(lS zF*487>5bSuG0bV^qkFzaBX{^`&v6$S*hf2BYLU4S$KslJTf)aEDI(-S^V9{6ssa8> z+CPO7Hctvj$+|uU&SOY>MsJF$RTn(E^?>Wqg!_XAlJTz`F^#&-W<)2JisMsJ2!BgWuAgh`BKN8uTcsyW6XqL* z$vOwxle6wh(I(P6>jvz6`N&%LI3nC_oe{#=Sf`6pwczfDkxas;p!GziLZ3jw7$dSi zpARgg7dN*LXdcWL>|c_`gJXTO^I0|Ka8m_oNLd1N@L-@*>wGN#=#6SMGtF2gq5UF^ zJsqq6Hd;Tn5LAeGs=l|2swa9@I1Gwvi0|*Ke(n7+ey=*iwszbvfcyB_gI|$XLfcgq zX_)(`;u7 zF^)T)y=5|a@k`Vz#MRVrfZFB1_%ls?fTAI|lSQFeS<+0Cp-C!W-;APHHW6CCzlZZ2 zJn@=fZq6boNJ$?ZN^%$JJ~0)0Aze3=qG0x7Xj_|8oBinE=Crj;X7Sk0I;^(r#XuH` zS++dEzZ^I$ObeG>#cnAkB?!Cet4SYRmDfz1n)wFC6C7fSY^^sH6MqSq;FP-O_yMYx zuW+GRBB3_LK5jI`>nJ{7vh8Pii z3fn`MM-*_-C9BotAf2Ygo?IiAx%sMhg`8@{o#zqPb}=5?=k%V9Plz2TA>WHiPDT@# zAG5i1<<(@$kYDQAo0~=`#JqT*IQ8rK9+ZwRjrDvUonDj^DAM(VR^KlmY3X$uE0yLc zPHxAs#AxUv9-7d}+KRWTxX(wODoVSaA5RHu7?h|6N`HI;#pUmH1X#PaTi!8=saQ>0 zD>9K8_s9^DeGarKXVr`E?`(>{?6Rj*^&R6iFXl3~#*-^D20~9UBXTazm>aIxR9Cz! z<#B0kA=|8zDh?>7L2^eyWI|Tst9r3eaO@jUL82$^I`w}}oG>?d$~VS%1(yvkn^|s* zc$D}&__K;2mg5wb$vs~Qw?1cI5#}8({c4fuuj&?gHC*~bmJ7C;FQ1zPLdWHweoSmm z)vVf<^B9zv(BHD-M!4*r9`4$$7d*lZ($>GX-6#zAUzk+H4!U3aU1fY}4BAkqS4*}( zD=X1WO-(^}Gu!&%6W8GN*K=)wEn8$~QBPvUVLCdKSli*gGX!2`aV7Xq<{0eA^8nJ+gK1{Pd9SBpS9q3Lh4`mqhY8D?(R%l-b zIrKQQk7>~A*E+2-F7M;dV>+Aps)YO51(nU$pKuTJVLKl%neN&e!?lC)Lns~&MtMy% zi{{ykQBm)rXfKPtc-;77CY|gSTu=>S(CoyQ8k~-lGzrr#;2bPbtO({NX*zT$;y2KC zP&%y1pK}t#nh?FGLDi==nx*neDye<>FlNBSsKR*z?76aS8w=9vVD%k7$ z0e!}$yBw{s*u%`}n^!aaHYMH4n}sk`_Su|+%F+k#D|x)DW_FuCnM8V0so9ajFF-*G1c(`hd^N=mVog%~v$kR-No&~toG%ljJ*7J9!1YBkar zU~;)yBQ4T!z)G)Jf446lEO|SzCeO3ND%+Vml9#pJ^`MkaZ{%Q#>qeDbMusa; zgS}=Yfd3Cq=t#H&dHW>mDyv^4%QT2r-p56RNEstG)+?W=@680E%s zJxonrE-O;C0L`ab%)6Kt`>&5B8^)=j{(XnWQ1>TvTBh%nkR>Ru16>%j6lZiRxx~c& zmF9fCeACOgomeQ#2V98UfeAvg>QeCj^B!t$|aJ(nQq z(`qaI-IvHEv!`}Lb&*-6WXl;7?i+|2GXDD*cZPqoH0#QR5}JI%eg1Zc;&Y0!?zbVMU}I^hFO~!#7G&evZ4E+R9QBg@KQ&H(SBNC>1dIv3uajrrsrbt zBewn9A!0Itu?dS;QaK(dZu^`s&=7HqHtX|-=6Aa8U@dL@t}4|?HmNhIZJ>3e2`cZd zqV02J%X1q`INR^DlJ)e7U9M@(dJ*ff)|NU;hTvSj87|@`;u}lWGTQm<=-v_^tI?mh3qg%7!Ns+-d7^*Be|Z%Hv(PflqVs|V z9Qd7*KI#y~mC~pVi!c`IUF~M}46mt>O&hwexvJby5seC%A0{=*Iv_lpf9e3$C7$2s zx|M&;e+{{at>#IS1S#0rFQ@>BN;2D~(2o;>CFV@(L~306YFL z`%HyKQaG;(%jT7`Q(J@vE1Xc&G-xxO=u+a2A2X6T<8VJ=TBC$!R@Y;)nK);}>$1ru-(CDh#Kc|z&TuiFgcE<{ zKPmER%DlGI*|;rmP`7dvrZxjEP=oN|o~R#M_`qn7C;xs`*@>zg_u8i#?pneBd(XDN zSVB`JQfR4${~?^yh_Tic&!#{6!MTU&EkBBvbp}SD&7ypJnA1ISrLuMpg$fGdJakSX z#!+A(J0f58xo5tM+O7h@Ml8v>6wD6*-4Bx1L6H4_uz%(&BZWDxQE(+71^c zZoh_b-IwV#R=09WT4-hU@uuwcyxTXu?DWHLg%p&}Q>|w`b7Y6Mj4L zV4Vy%GTd!VUAf75&)!8&*57Sv6_)?Ks@d#6E;b8otZ}7ih*B`28ABS zs1k!rXKJ)B4yD3j&DPnDoc20PXph>bFo{QuO~{h?kMPwil{Hgas12DEl>lkwT1E}C zh9Qf>Vd36>sr`*5qLQp8bO9s8MYss!z|jTEOpQvI3C|kol|4rdo$$~OXVPA)-wjLh z-6Tfum>20as%79N)BM|_5^ApYz8Taj)KvO3?If#pY{(w2-XYRNw`HQV#bHzpz+kjo}S+|u9O zgA#d9ukDSx5nrEwG~x+V6dcy1Bi%T7*7oyi`rItB`cXPTuLhIkwKTnIU_kTA!FD8a zQc;@9?fBKAnXDAy?MF|iRYrujejDEUL(I+ zU#}jQ>J4Qg?NU-9J?T5cAly&!%716)*Gc_-R|EyGu#(H{-sayC&9pw>c^JH3+%O2j z3F1!PDH7{Am?MDL%_lqJ@4dQvzhX8|ow@YGGQN`+L&&G1SIfwo3e-|B8lhHQ4C{M? zu5Q82Z{@puL@yo6 zZyYws><$?lnU)z`Mt6nm*f>9pUp`$vdc3aQhNMC6Zj!J3jD9+zZ~ zCrAQkWx;u}ur0qa9fC=R`jv!9ucyi#NW&4neya&cU{Xw?ni4*~x?@@nM}(lsM>Vdy=+0W6gU>u4nzjFo_C+i`$e(zLM1zc5iq~fZ6-MgC$nB3Z zdf_2Fmyx}O#i}SYfQ>GJFOKeRBK&c|nx8R2!Mk}TB!fD>7*l+p4Xl4BrUENs3iqIJiQ3W3=P@SFddp~f zP*oKMcnr$s>n<(9nE}z!T|KE#l)-RQXO#wDiE4i4Uq}*)L7#6)-5Tj0h;U00=}8gJ zrK|o7;#=`3g?c6E7sUx7%iv#pa&Mj)7+u6ogZ?~w_eB`p7;3|%R`e{Z;}2fuqYY=x zgca1r!e4wBWcxOlH@#+N$HD~j ziJ!aVLqOBiZ;|*QQ~ibtC>EM+Z8mBKh>Gc^e}PY}Nede_$&a90*60Yiq9G&6jvBK= zV`kw7DuIG_Uv{UXki(dLC%3DmmB!n$tl7iVfJq9wE+o^1ZPOT}lsjsI)gL5`KiWre zdlw(!l6XS8k81mUWBL8e`_}VR(1yd?JGy5+L9(};P=cteRN)Ai+Hc6g$Uc}b$hAFp zZ+oeke`o&^3aBwWNhCDYG;%5}{A6Br8`mzyQ%(Zo(F>R4-qC5oNumWNjk z7sUa9AWdBEUT~LWWm9T0ka~YMOGsXfy9vNbrscEo!+DZCWxw40zC|D0UXNqEXH!2j zl&&;S#HF{9Y&VNcXV*HZ@u#Ji&|n-2MJPNIn|GwdMbNZ@g%;pW}PslX!rRzZ?-aRe(sdNw;GzlD2 zadg61+cA>b_L>4|uTuombXqFEoxi@lkMJ@$v0_Vd`*Ug{LIrQo=k5k;LT&h*lWx8K z$~0l<8-}GB_y}~k#77CQ)T*Eg9m~;nAP}=wf7$W^4#w+0(w{x>r zFmv)UeOvQbH9*`0y4o>t$T$X|)iF3U)CFd9)$+b9yy}dD&-VGA8b#v6XSyh#I7AzQ zSel(+zIrLr#z*qk$!KwN&FVS?^THB}2kDVwlhl!KjC-Q*o5RD5t;MHnIS6jH$5!O?pyF z_Msxop~4*Nms2$1l;Lj?K`~Tg{LCJQobu8LWKQXz+mz|Nxmi`| zw!bn=>QHgNc@CCj!}0JdB}0t$tXs*^0q2>SuS}@CUupgr`SoqQGiRsbAf)c+R1KA6 zf2oCnQmnE`+q}E(qfo@hWKs@h1es~J_3eAU5;%T>6SjM~sWqF_U2@6Qt%3GsKg+cf zs7@bq)V@!TV>RfjSL5*XtEn)8Zz&PlTeb8PmyMt{8sXzUR92De}&7v)+QW8=x&rz=0#iyR3+U7M5|Cni> zrKTK=8Bv2Mj3#esN&C|Cf4E`fVkQHd z37Zkz1jCil$gi4&ogNdY4V{5j298-Y07Ufh^vcJ$2OTDpKNKH*t>IZgfvxcA(#15i&Po#k;b!;OiZ+%mNIggvUQBLkA8Y!0#@!`K@ouRO zT#|pvGHO6Ka6_eaWYUYz`!E_Viwxac$ceoD>{+nV{#0*(z&|qDpY6{ISf8)Eoixp8dOKfH-vUJPTk3#nEpD{gljH!6N2KIMG*C+yD= zHQ|YqJ#041T+5ErvY^35Q^Q9`hwLZlyWssx3^yB0>JE;MmR?+1Bo7YY{+;~R7wFhE zHKF>qLK9B2_7eN?vWy zM-y-LRz=DcDKuAu2a3E>s@f?}M^lYn*a42(;oI7WX|&44k4^m(@~^wDKiZ#0;Iwqt z`@LDb>{7z&#^Pff`Af!k6QAl6v@p@ksG8!>G&c9v*I9C_<@4m;Qj39Qhpd0fZK?{a zzt$stGDI+MgMEzW+x_3KRXFIX7^aUcmp=@Th?1wfU=t6(3VtjzZESK_x;jd5mM*8o z1l;C{>po&)@^(XGM#P#Q7E~KV-OS5##p;Li70kf#NQatEQ05-uKn>kIT}ncY`+o6! z?&t526sp(8-FG#Fdpg~9ceKew=}hTjqvK(vP$}`Ln87aEGLH&s9fTa&^N>o1lSzpE z0GZt%PLsNl^bppjB`0Ht>)*=h^5Vsz`aAeu+lzv)jOG$>ffrt_PJ*sdfrggs30U^u zDG70GG6^%Fw=%du&EJFncc9}DH%1^F>-<Y6OPpoH8(cny#ZqlfC|ISp=K0p&n_;0j>mi9U)q~L> za@J3<(~kSY+Y%Zi(h_Uhl2fwPEq}~SVyMouZdTCMhV{>F^KN`wiYK#HV(+7HV*aL& zCfN~d+l3Sl#f=1U_uSw!n5V5w|E8TQm+$K3-Rq%~aG&cgyQ1yioVDwLlR&xTVbsvZ zfsP~*iD^PldN87*gCVGt9+AqD`{?^h^arBCuKQ0NRT|kS7iCL_SuaQKiyZ%5E@VNc z8mWuM$?~t{mpUT#9JM5)YRq=H(zMU(i>?9t*du z<4I#65|Z42&pxj<7z)qnz@mizyN^G|N~tE?uy=E|mBRIv9L)X4#>OgG?|=z^EYKyd zS$W=?G9A1bL;WPl2%%Oh)d|W!>pa_%gUHcqR`=SEKN%rFaMddGU^-DH;|sTzX(|dQ zeNJc;Vjed_sG3#DD}?!M`oa?}h|q5QZAzEjuzg|Ds_VA~P(RjIr^_^f8J9zmtC8x` zlL{IaC_9Uel|d$&O1|sPS9Q_SN%TT`#1$(xuvD+Wxfj^={`kBR^b=^gjOvb0zJvpE z>Amq(17BNJ9@`uj>?xZTj9dA$yq{WODLY?PHt{H>h=}y!ElV?@4uf8kln@!Mc2y5DmNQEAG!2ULRr4O(+1pvxy|h} z@A$31gtQ$YTTv}C&W?jsFEL(#1887uyE;`>mGE%(_50|>fNn;oPQ>VHY9hS8pt%21 zpR5qBfstTocgOmz&=~aQS8hksP(-C*Ba7t_2$ceu=~WUGQfj?Rjp-;S1mkZX zBVD(sAHOpeglNkPt>kD6(rnx=dpe-0g*-D|Qadz7DP9a}{$@4}Kpwi2bUo?n_Lj=3j}e7gXg zcO{zWv0({c94h;cj;F7($FM-O@cAEodM#Wp;WjN(|E)$!v(w?rDH6klYSYvEN1FHVjY>(unN2W}RcGC#oGL{Yt}5 zrjkjPHe@?i!g*bnw~Op@y}`CF6l~9wpx16lTXUAp=ISAj1OJ);*6JSrbpaNII0^y; z%>6}!BX^N_EQkf+ZL!gredY*0eJ8f9iau*-+sV*NoCdMZWnrl!aq00$3CZNY8!3`( z`NBdF@?fZA_UE%wnuw5ymhS+%kvg!~JkNRwY(!Q-zntd*9eRtoR&Mdg#&D0A=yJYD zl4z3NPz;Jw30V;bwL%U8jsjcI|6F zufRu)OW^tFs;|$>;@Lkce2|Scjy~({GwcmLgh2GY;^ERc)VMn~g2DV?98|+nkf7k) z($rS<2=iv~)!o-`9E=Fq8V4*M&+gc+BbP_EB#XYw;Yw}kbQOPtvT++e3_~W*U6NrC zy!$2zgUQ&tP;CXfvC`Bwt26mnHiw-x9L?yiurtKx%XL|dG+ZE^9j{A2wKouzd0fD; z`Un+_XRsLciYWov| zK+6#eZ)P?;$2Rs8UL=q=_t_ltPP(O}{I2$Kx6Y4oBqci${X|i}?H28#zx0>58Aezb zR2==~W}hz?QE*;2ZbIDpM#r34GIKNE?j=8BGqX8n@1Ww&6Y2MY;_JzcP*Oy`K`lXg z%MY^Mxw(D5xxFo@$e|-dG9^efVZ_Ne*F9Q-@rQXXpZ{kTfcL;bO7?U;zTVPZ*QAf& zf-V$w@S~JAxmF(4`fzj31WR~TJ1Gvr~g@6_a=n(HMth(BFqC@^Zod7{arf2VyVMl`E`K6ye{7fM?Vng|VQ?L9kFF<+Z!sx#yoykEOTU~SE8tuS8Q!RmQkJiay- zNLBf9XyQ^H(Tt->Kd)0ST<4N`?o)zvJ$$l^20}f}&B`;~27whc?Jr1&% zY{oB3bEV60zdmp^Ynkq{a^YF<*v!ogBQ}xS+^qH5ezfD(9ew=T9LW=VcQnE@efY(t z;*YuJ5+brhB>B*1oYDkW&Mo+DM=tae4p<*|b{&6C8nRzoQ)Yq-UX+YK+=`1YIit;XD6?_F}GC zcn5I?TS4*9t=j4+DtTj#0=V^3v-32+%6Jl(cLG&Y3Je!FYmr3Te?;a>9v~2%I3Elw zRbY`5Ya7(nbD&JXjoduVu0e%89uHm~|5?EZBgW;| z@S!yEh-7#DEs0Tc`0h43j2OMLN@nUN)g$+Z@wDiJ^Ds||xgK>8?i0EsfxK3i9S@O& ztQ`f_YLs%HUSo#bjlU=7hfWDCA@ds6cWl2+@EtS$(EF9biLTgWc0y)6@@bHG84(z5 zz6H;?a(WM$8D9p%^=8h@sDM$gfQ6*=^hj{H>(3IHF#OMK1sHn=XHy7Xj>+o*5T5n^mCm@r#rOa znD$h{Q>)2IM?KM7VvXObg-KnN2%K7bXHa#yW8Lp(;7P0iATr>t*NS5YkO6O>Fe}P3S zj;w12(-ev&?Rt!4ItB}2eY!)(m^Ow}gz$tzuPv9$I9M+S)}jY)q%oKqOH@p7D&d2O z0R>L%%5?Bnm!EDSPYnrcnsbT(T`@8o#~FS5k5c3t$*(r9k7^~TQJka{+~cNSnMzKj z@6NNA=!cLzq3~(Xh}$Ua)67EXpo=5a0LtBjN-wr_InY_=(8<2&g%tC?F!lf%(y)Zh zLb|raZ%mi?bI4z0zBMzjcconZvtNcEJ5v`YF-QOs_}%NHXj%$Jcu1{nyu}hRISp3! z?+wV)(>*ear~@Z+G@G`d#v!ercitZjZcW9>qErHlm2wts5?!cQ_<_WJ&_-Hceo874 zaoVMaWcv=r%04R4)=g+EXnmnbG)tBnlTIjd&^r_^ug zO53lE?`+$)n{3;*IT@2}+xARNZn9mIn`~pUoA^EN!T<0(-F2{WKkHt&*6(7P`ZWR9 ztx`(r^ZzJCBNADo@yTG;Ym zS5SwOXJ)GdtJjT1#z7105b)V;u>>y0+u~ z;h{qHtC&=C4_h}1rBZMa@|p84UHWKh65IW!h9CvL|4r}|1-RwL5}o-rC>{hf9|(3e zjEyz>?1q^O*B@-80dU&i97DD%J_}SKPcnaPu-L|0(v1W;;BQQlybe3eJByxafPzB* z5{6KpiK%GeYQuw;yY-{GO7+bPj2zCYpBICup=Ep^ea^$z2EUT zbs={@BG+x8uZg9(AC=Ep*YA?o0djo*qIy znzcM)R3+UnI|;hxv65;KPP5W*;AbmJPWceqan|PA3HxcBD~EtQ^-p^dc`?x*?d;AL zP+hIn@{-$vP-A@BgnTLEcnoo=)`0g>qm_dz&%(|JS3Ek}vFl!=NBq6{38GQRb+v92 zGyo)63Z$W=+yQpQrA$r9fc4XQ=iPy%8XEy`fBQy)maX9C8?4Gh zVD2ec9SV>5>57MIKnt+`VnsJrWBOI0HopNKm_E;{e?VJgH{`wjD>bhF*s*>0yBi{9 zsZFCcxy3KK>Yw{^sMqd3ymH$i+(Z~DA2-!_%8wMOYsHRk(H%t02M;m*SX>KT~bEx343DC?Eck+Y$sxg(s>zw=WMeuizQqZ-gvvIwPii5v-tl zl9!2b!^>|GdX>Fw{yL@mu_6+8x;~EX>@-4<1{@@*cCPEx>`iz@Hnz@?@kVS2v33)* z!+6yW0p1QmiC832x{l%$jFj?V1>u0=T%R&EI?QXYRH1dWEkZ1RnZKJ3 zNJ^}JLn4X}IQA>)xzH`L&p~lgO&z-HEK!$C91S<2GQbOxi90>1F#O65_xnEB4~ts7 zwB&VgSMwDwWdL$lzA*$4U3|TF>p(R<)j*Y5T=ih$J z`06F*>lls0@N{(Q@P0gCi2V~xm3ZNHl`jHecbIh2 zg2oa(1t0`v3=etL3QDj#2jSd1_*LI4h`8n?y)Q&wjIY^-FCmLN^+P7u!Yfy&e{RiU6xVH|C4Czn+~4bLnnRV`2c&H-k|JU`N0}r^@yKD*A(pV#$Tf_z z!rZ|vK{m(G51u1>DCB)P)_zdml=I}L%F@2wGrGofckIX_EDy1x9((*{BfKa0@99pB zzyaaY_>kJ_&X4gg&`;@X2NA!z<0!0p34>_?kOcp}&1LtYvf|D7;Jgkl!Kk$dqOU|c zqGGKp6vS_Mg;P)IaO<>XIhff zW@C_2KNbc+&X%JixbC6|kd-|$szI*Cs2BJ&CF*}HG-Veiw37(0#Lj*}4s{wTeByHG z>eqJGQ{{@vHzeSJ+~qanep4O`9&|4Vl8EVu1n_HuJBe70Xc5Pl#bpQ3TmAM^d=W&+ z5r7`+9YvT>)o@gFBSKd5NAEWns_Xa{wbj0ZOZU@a*sgId-l$r2r+1Q{EQ zsVEDZdXpIjJmm(BK86oO56_WFq)B$V#SYc+v~6RhnNzj+89(hu!&! zGA8W|b7)Gnzf=1lq86)`M5@YVD&j}+`{3!CpO~XyrIqNq3IIil?9WUWft@0wLS)5M zR@)P(G**lAQk<=_&5+5g1k6vdVTuk zFbxX|#K*1N$Smhi6cWQ(yI>*YzK!x#lSjG`ZzfS4K`BK0+;haDV&@x+3B_$JS1iBi}xK(sZFe zjwNCChBd=0Nw1HxN2+gjhry_#CsuZp`o;z6<8NJ)(!XrWI@JH*VL()b19B-Npd%mv z7oH?!76+7|Yn-wR<{~Ma#Twd#v}DWsu74XKgI-d+-`O{mQqW|vj#zB+V^p<&{V{Yu zc}DVwa?DJPrXpj5OF`WHPxiDJJY@tC?S@a%>Me*Oxm(9`?!w1phco*#?#}~NB&z2Z zNmYIvw+6bLUbj09%`EzdN@gadNZzx|umhe}%cHUZ5eV0Asm%EBc{$-)7IR zy$ChofEMzWf|xi_JRKl!UqN672DSpy^jSQGY(*fR8jxgmfX#iZbp@8`A7v8UPPKl6 zZRQSMxaw5v`gd|lf47o#<|XtYWxE*Yj|G#JzsC(8citITs?>ny#-T6?>^a4SpLl!m z)zLt!xAJZDZnf!OYgAPA3~LHX3YaE@DCv~5E$_@%LhPvzcie1t{9aGH)MQ+Ly&*`B==i9_dB!awyIqu67F?U$n1X&GaV~@2n&Ig|bD4Z4Z#1 z#j5PF)3MoQ>ekXR1$iOvX2sQ<2ZZl|Z~K#uTSt;UQ;-T7awABJubGZCR~ZZok0EYC zAbTr;f_de71ThrnG_lg@^LOqihVdKbGFt>pa7wN?O*8M-{eI=votNdMYX&`eAWIn0 zd3YwZics*ZVQV)5{f#u(LsAPZ<_kUX;Jpuy!$yyaMRp+oAqKAW(6IQWMm%%-Z-`MBF#gz0Bq$TIw{_1o3 zC!fj1c5UeBg@kH*PDpw{rUsd|74%Q+%A2<1WG3-4+&a{rpY(%W z!*X)P*i_C^A*;cHB|U~<_G5u5YG`ksoe7MHlR<{I6-HNeA(~XyG>u(X-6BtE30|R7 zwcSt&(t=M&!OEaVrchZ0GyJ9-XGjQ4R#6IstBXt#-AyXJ@$ez_5g@0-%~H$%ub02x zSf3%bA;>0>K=e$?yVz>lUo;vo7xdsu(}I{e@$7NFCbs4BeXzKl6X4x;fB|ycN+BqX}uJY+5Z9V5WIn;KPJp zct&njcNUa;7qF%L1w!rN+^{5zhjoS<=$)W78ip7>C!EvQ>~B(WJQ%GNc}d8m zv~+Pr$F6t{v=)Is0`OrAIb~FQla?)4FAYEoA??)BsW{svI2H=Z;6RO(zB_F%3M(V^ z7PMO{!5Gw7Zb1B}cRQ59NXK%Ocy^k`-2KE0>%mFW#dPNTzY9#&JmAo%ZqH_%i}{{1Qw*=w^4cNqZlQ4N8Vrrs{V5NS=e3CAN~2Qa)9(Qf*A%h9 zTlTOW$rx>4Y`DHa0K!TU6f$Q|P}|a2MmX##$W;V5wU!}>TJVU)k~kK$XTwvycCnpx zryv?mf;v5j4ZZ7fzLV5n`S*-qGx6|2fAPWT!>v{34FrlZ`{Th}QgrprbN{|r+SA@u z)~baSm34@;=OaH;jX#!>e~Gmmf|?j_2y(`Zgzv?N5MwFHlKFnPhzZk&Dw48a6N1=| z!u(y_IF~X!=NmOPYU`hI9X3kcrDet9bU6`2KSo*KM@l3XA}@tT(whPd7DuY3w)=Vc z|Il_FwNf>1@z^4@Js1{ZVn-c90V5GBv2*+l=5h4;hVqXW97C`7s+4R||CC z8~W4#J4G+?KqLOYdR(DH_txph_&2q}l$fB8>D1MLTBrrn$sON~k-mbQow;q>#qjyT z0B&R$1Eud7P!kP$_DZKz_t8}PbC^#p z;)@p`$x`>{hEXx=gj@do;>JffBIr`(&k?;zI*LIRIrKKy;BGO6)AtpOOjcG*kmA+= z@>?SK&ZE(Vi!MLsa0?YQrG%e2Z8%5;>wJJ+bL>GKK4Nw1>wM-qoAc6FP(+_HqzT`y z=#Pnu*+zqGwo#|G<<*rr4qhdvR?}~6j|8!|jau4kc(DCV^GKz*5GNn-Q8xu?&5!wGP{nPqtYVe$P+U=&*hj+pr z-}YCimIy3aun56V5iv$$vrxq@1Da(pmS}Tlbc}UjH**611PcC}oGhM%eNJS!29^XI z3$Ey?prqLlRGA>uHBLRNLf$XO_a2`=UaG2ocFy3L62#x~Z{MBF<+*kI{Mpf2)pPj1 zrCg0wJGi%STC!OUK4E37lo9t8;y}Id1=CNsQ)M3DSUEo|YWD^UzHGwjj$|A`-ANdU zOhQx%vPt_D?Bd$b<^OEM=TvtG;*S|O%_nR>uL5;6sYtIixF|NBPBEo&D_p#S3~Lhu(?+iy_RvzJ3`@p)vn6dK#=J(8~tJrCUU zTWvr58vdOuY{uxQlKC#&KP5)lw2>5yf0+BZx0M(HD+nsijFq#$xM+uC5+TN-p`_{X zew(;a4aIye37=1#WZE@Ikcq_vmDPMnaM%^sE(n&NCM@*nl?wF(Sb?L3Z{vkK7fylv z9UUEC3$KMmdhVoST{hpw*-qlAc0x9?O>jwD!u#cd*d!eSB$HSRVF{6w+!%|?q#H^s zc#BUG?IuStCd2oL!qDDSrr1&k_$E4q{0-33{AUgK{!zr;bbpDNpZT-?y*XYwC_S>( zX)HEA{is)uKZW2d9^v~QN`_)4+QFR?2}W!QcppnE(TI+NAzAUGH?v+Cu%R5A7MyfX z*}~-vL5cK;Dz#D10O;8gFX3t^tdOH({MdH$R7PZ1QOeB*uL_ePQe1@H{}oyV{YM4T zWJo3fsGmR|F95>V-Av8hK?D4796F6mq`rVdMhoc`0#q-Jx%LMMj9p5G>$AzG6Cr@^cQ+3byVEcvkQHO-w)&bImp=3yI(yW4TFqebex1Nu^y)LIe_H?9q1 zI&LhjMXwRhLTqLtqJ>z!j9PqCn(3S%+ZB>w6Y0tIH?2BY!YMN~=*Z-%?Sp8}t>$VS zWZ2|ImEQTw`*Chzsdlj2P?9$gFy`+EKwKET{%88z1Hks@E|1dh?C%8!hL%Aq19v~- z;CgOO?%RXb1V%X8=J_jq=c9Qew>a4CCp|!i-VjB#3|xbvf=*%)d_MgTjh)%*(jek%Ro;E5&PW0_UVXu!-5Nr zLVDE{7T3@f!uL}a%gE)Bmq=?+a~<=ZC0p57;Gq>qHU5^#dakjnNB`+n6c-2jJc*ybHpD11za0q|3!IO7vv;)Z*wzVxOsb%qK=mqwPrgoO#6y z_1n9863S`LnLl^}V*hXa|p9Ncm*lIR_lY*X-c2~1XuDXHDx4@~oFe@V-B82l~N z6_`@+yTDe7)-i?>2qqvseJ_Sp?xj5+`9*n88{_O(6e7zMJ|yuVjvQL*@`UKU0YM*t z@~c6?<~N1)T}fDFTK)iTQ3u%zj|O^2dX(9$@6H;wfU%@>!ee?ln5jNE1o4Qj>sQGt zsm}j^Yyb**kVg2QY}bW@)1dcpek1}*7whAd#RNbX4h3k&L;%f}=09vE01_nmk3xCe6~GuYE+WWg zq~S|w8;C)R6r^9)@Yy66aCqm9M_vQ2tFIrMfQW3khlc&JnYKjEc4%(AOv-g}kj-qPC{Mpsjn5F7CM<3auH z7cE3&P)Y!96UvEJQ zd>ak)YwUd1R}}&kX?jh;x}u?Ue?i)=)}MX5ipZnjUSMTUo&DD3$(M^=#AOrI`<8H| zxj;ec6IGuBu4#$k*KF_LsAmOB1WWrmeHkYt1eh)^+w%v%K-c%;zf4{Y_gHilItsAZgM^m|xfgi_#QsUweJ+GTr32pIsA)?W2 zP&jE@{uKgdM+Kteu|Do%4JK%iv9WR0HgdM|{lgc_c}$q56yW55jlpEHJ1XBVy=g3v zd&~z@KChC5NYY=>?)#sv(!EYPCa7ITmFNnRj@wBIbRT^6EasM=RA|#5CJqN!NIX*y zD-j0ZRYk3V8Y+%G<~OHo;*9-W+!d&u(hZN~huwLcJ)*JjqWHOlj-!%C=h3h>Mg2`4 z#Fv@yh($}D=z5<`6`v!$df_vhJi_mz>N>zjgswL3CH{}N%iM874mbn6T6o$@pi7Eu zHBcGIP!)^6DYt_J8eY!qj8%_Aj^$Ha?n{U%Ke*m>-OoB+a=sF2kzc-O!B5IU zO<8Wy7_o8C%_bTIq?G>w=dc-df&e%j8KSt~ZEE2Vz_e5HXa&7_q@e`)vIcu0!+M|D z)AM9Cx)cgl;w`gekz=6>FYxS(5C20+g5gl8x1Ia;5JoR}D<*qd)(48orjo}cP5+UZ zcyE50W(CobBw(#DC%K&z35$mB#uaeiW7&2-d2`!k4q*V6HJb)AMa!N6%aD!rak!5# zCw%S#n^ECRL~@V}nM)-IwUIj+MuWSutU0innq!Vy|I0TU`<9Zzd56? zh@l`=R8m-S4L=eEdoHY*<1%zn(9GR|Fo+gji`MuJI|9u<>^cWzf2OdbZ5PzdW@AcCZ+nHw_VTj#DE6p&Z2HjIl>PS-ty;gaiseitONBBJ3xjok@A z2BQcgs@6W&;|0-%(IgPmdXeAmP+%@+eujWxA#~!3HEK=1iic@hC#o;wJVhip*-h^5 zt(u#%6&c8G;Rwg=unUQPZ^i~eYy9$Hl%Vw$qR0BMeTnMWy@XHJMaabTm|cC5FJYm68*fZHT*s3ipYYg&sIcB(x5Xoc{8s zNJ28(r{Tmb!q~0p`b?qBfcA@|km`y!&MTdHkop`Q7MQF^eOQy&(ZA^Z-+Dp{&9GzY zbslEJnZ$}0X9P^8Lcx2&AN#`2>kh4^y940>f&!-JF8}I3gMt1?p?k7wqi+0gv0@L3 zUJA0q{RIBYq-{-gp(@!>8G5t0JBzad7VW{uT)9sO5?y3a+ubqC4?!`1>BRb#&d>>#iPki<`S08b4E;@94BTjvsuIW1h~OK= zc3dLcoY6%&Hj8@~WqW3m8JyZt3jW03XUPq`J#>lt?}s`T5>&+u*wse@+#1uu`Clql zum@Kn1c21T61PW>Y(QPKw)2wDex)94`+0=>y5Onn*us-W^FQn^DJ%fDEL(X3_Dlu< z9zVut9q^SDzMorTY(IINL(IkjxKA^Cp@E&G_~XLugh2=a@Q_Q`d_(O22x%YM_ns5| zzo1EA9;pU~prM(n^;?m9tj(u#I9I+U75|)MJ%O0XL@v1*<68Y) z3xP;gXgZanJ6M_y1@U;j*CJM^X?*T`{jrFbVBhsFNQXkiczm^c-|*-~xz z@!ef3iPZ`1P5ZmSCz$(_&dT+qk2_xL$1Eu;kB#|$Q||2Ic)j%rk1JQb)d>|L2{icj z$UZ=bb>-cvqmX8@-*m+cb~62w;ZUCyK1%G3X*!nZ+Y?*d89VMKkObH`#SDaVAFAnVi$hyrW_)0$ClUyzyx0`Dkih%}wT|5A)8#6+Kb4aJ zj`$8>JTdqmHuv$-!|x{6c&Kyx{W5j4rV4m0PZyWnID>eYSn#NPij`uRS!pA=={AP* zn2-q6a$p$10vc@t&pSDawfP@MH^l^Fhfy}+-Md8?fi2a}b4NA_LM%_;nsM!#!9dJ7GP~pIqa+NAD!Bn6wbjfTg9_Pmp9TgJ z4{N-RyWt}33Nzb{7293>*>^|i)iWblVsvZyC=k#?BDJ!-n)qiF8x@*tG!Gu7;6f+b zE!Pz>9|B85;IJ9V?+|O#%^svairLnhA49+}&d-a6VT7Tcd z@X;#O3?c0U*!s=@db#kt_HF3^h+=(!V2D}x>EXc?AjRo)Tobfp+^9NMybzg(_ z+*SbG$J;5)O&?eU12&7ueh=_ckAR2LD#G;*lAX))PjgnQxcJ58ss2XYedj0b!oKoM zrlESAot{z_v&E|6=d+r`((ZRX!T?v4+k7fW(=guDoa?=7G6TOG1IBD#uBAr?X_#v# zU+(?4aJPEjGqOCk1~}ePu~$uNv!@2pw~3!KX2UV%&!d@3rQQDF0$0L`0-}k@6 z81-#9L7 z@Asj==U$<)Q6v^aortL?O~Qr12$2Gjv~!mWcF?=cSI2%`Yeg~b%8)`~Puxu^6rg@X z+-cT!(X#{Ne%o^OyU&I()y1ARWF=X70OxxB4sjBcI$?S<52YjAMsRT^6pnzi_kI;94A5{rQ+&AC$2(gTsx$sUNok$|eY^;ImvBz8ur9k&^f0!; zAVMAQQMq3Tv}4M=gT5%V;xa5gmGB$%h88lvw)xXG)W;YKn=~OQW4w|#3mtgVG$xBN z?H%oPXw&x@m3h}=8v5p(-ab+5hzZ7s)vI=kJ}TgkZQI!bhLGTh!DJH&4+#l^SkCT~ zipz{MgJs2I12R?PNWsaW#+SlLb-2{Mdo)slM~Ef!@P4M?JD4>H{Sr{4Zx5~Qiz;h{YNyP*?EpdGdi`zJ!z_cT?BkzoVyZD|BS?63j(#fU<{n3 z$pl-3c|PNxCMz&pT*lpEngUTBGXS}dkpLLy^mdGjZ6(xKyt$s|kwQk$a|PT4-L4Tc zyVUIhThjGCp{7NJrlYaa^?^aaE$GkVIyB&>pJ?JWHqfNsQX-Idd9fZ4x2uBlM9qy% zI5e9SK3eDn-boP5G>RATifiOojPd%4yHvevR7?vVGTYx$qd&W7Ufc@`D<>9sGT=sz zZ6Fb_*bOfhw-LC_>sq=qR7lXw3=QqOPP(nXJU2Z#-+SL|9u=EQV6|2VBk3{QkD((2 z5wKjYM4Jm@b2$k`M8FRQ3O_RPbuz6W<@0>!97t8}0q^VI609>-Fpi4vv{!gQ2CHwl z+7Z2P6KNtaRixV_C7vRl1$@I!EIf-V{<8&Yao7i}AsVg{33>m+HPR%^9N&!{-$h^L z-ukh3B!v1YEwr0p8>~xBH=wc!of<9&pV60lym)=II_TFk64aiNBT{f+da1qi3N+xv zv9;AAEW4meB7#EChSpsO^@(wUoD_xytaD>=L+#d`FJLG43Z5w5v2+j{xD-r5CEug|1Mg-hhGHf+%A4Z%Twq>l}@SeCyX3N}{528F{S^6nFZsXQ$- z?yPv&ch%eTWP}?e{4qN_hDH-!Zovh2eylb~_zc)OUfOfo?f|vq6C#)+w&b5n<4TSl z8sxDR%Mu;)n8ZDuc4tlxh)@kNNPFM9V}ecYnRhwA=u~fdWAgJuU$-DA4`v2@`oVqv z!manhjx>Kj{`vJL!}9LLcEqjf@l8o`+|1f%xpONVfb8#$5IFgT0)68FQ%RS7vH6{t z&${=ueH~_jzh$6EGVM!wEMY6$A9^A!ainG57s{9+SY+7{^E6xh?C$PlFHS_*n87&c zZ_l5b5nS={s!J`iq*74JBSkiuKdkR+(^*m7+tiwWBq-&|qe~I)&MswTVlDkib2lZR zB-QEQz#$|gp)D0x!A~u=Xax2bXWgzPk+=n0#S17<$=Ri$s|qmUiS`V>fZv|TOV80D zN;K)ck0+@*1PR;>Vbsr8$$`;g$36pwa|yY?RgZL;o`Rt%6l9Nb0{BqXn_r>UIt609 z9V3^zjjDQyMj_1PhA@?Px0&2z_r>PA_`l|=xv>bfTN2e8xIiI4A@6IC8V%)Y=SP0N zhAL*cJ-QQK5=r^K@_IR&5KIf269zPT($u#5NXCUc@V_pbkIy$bkK;Lb-7YGt*!4+k4~(#9I004ia8z!n?Sb za5+EihUI@@3;c=@0?}>bWE|w1AP`FxTd`lcWthe9gdec^->sKPv-VKPAD3`JJc!*(;g64ZpeWhS4>E%;d$=XxH+bkS;>rAP z_{==!0?3YMBEGLs&z3V7YN^f+hG~;MI0Aygg!n}H3)S%|3LZt=1j1*&H@4Y zb^dqgCD;&nQxS?!7ZUpB$bmk?jDCR+6gC9{P%E7zO*46+3EKP(_NVrf=M3hX)1|lw zC=(e4!4uQ=gVPBCZ|^PNU6$~ycitIh`h@)hh^z|Tn6Kw!ZET1V@%9PWD$9c&51Z7s zM?YNmLi#l>B*Q*A}{X z9w)2{uMxI7qwh=GlRI+7Q4`xxcfy&cXNkrQ#i?`*oSf^Vn7v1pye2IDnH5+4+e5WM+GwaU5tTZ~QP)X0h6I~bs!^=ND?ci# z+09<}_(G zfA{r!ZYXPoo#dw2PSN4nfij%pRb37*Hq6Afo#3X2A!43Ca9UnQWqWGhlHWq+s~szz zslSxOI0^+=zuDiOuh6hmmz~J+eb0^`TT+ZUY+45VcaL4B>{UofjQir5hZC900!N-y zb<+RFZiD74vL_Cc+<{d@@!tOyC_rXyiigl8;+iKK!_yrWXE z(~T)J?Jg)kEc+WBrheLx9rHy+KtPhIj2(IzMR~-XuEsq@_U;@8X|sC}!Jq-nj&ff* zFq6wP>@L@8Nb0Vi2M+FrIB1LqgwhFrz8QvroF*D}qz!cC?J~F3Ng>6Bj{6!JS=lmB z5r^|2mK!WPL8vdkF$kpu?$`46&4aJ$E4&R1N43lshgx{k+58LLH2L2G3EB;in`k&p zm2p@)G_ZL|c$fR%{=_~n8(;NjL2LU&8ZM(btlH2Yxm+$_+Y8P{hS(K5RLtxE$uhA<7xMXWqa=*?{4ap&!NLNm_}v=b-*wfRXUQy0)7SR9ObAA`-v8a zcpHMW9qmq=5oIhZ&Q1uX2}f6;i5+&{%Y4P=WE=&8ZWKMnk4Z*Im~+8m*#tg*vz-fZ zMFF{P)$BFA7)&l)6z%5}3OP>;RV?^lbcrhDC>#m&9$D9VYuay&8!~FQTUSmJmFOmZ z>dYQ~s8Y{6iCnvZ#vI};{IzV6`ytMuGzat)B{g)B4lq7_vw3aH?vBc`bc~-LlUu6& z9(PjXSlR}v4^J&EEvmW7(4-kU4pLO^uxW7LQ~qHE;QDT9#I^0{agviZlj&G31R>sR zjzV8=1RHhv#7SQ$=wKH8C@uMy!DsFkzZ^IIgwuEu!GH))38uSPoPPZ`Ro6(`uDBI7Ls&Dsz2w9)xJSA} z5{{jVV%v*5Ca@Bp?r$3*M0Q6hmYuy;oySI*TDIy>F%plDpTLnlRh1*Sd4vpA@3ReN z8d0f&d_K*9(4_O5$(s$UdG$Sr__?nuxLdhECq9_8+-oz*dqQx_{wg7Rg6-|rEaB44 zB~p!>+eX5>jvj++eY69gJfKyvoA9RybZ@`l;*to1m2PJ@xi7*UDTS2b4>@4R*Iph( z;Xi0Y*AerwT=bN?xD*9U2yE;oOYQ1i2Ie!doV^5hz0?pFk5$bcN3t`)%N-E ziqUSmD52dF9l;Iz?=F8$Phz{iP|s~Z;8VBZR1aJG=$m-4)5_plzI21%beKlL3oCf- z``>*XXCDUp5fj}32HK-IBkK~+v7i5pbmN>d66Q`R{8!OXM{sixn4y37XjJhQNi0$n zyCptky0m51IRTyIkU)c0hA(nMqXWl9IcEn%2mZe}5Dt1<35QS$w=nb(Ec3}~-Y@&% z@m8J6T)iB5gC%)+l2cp zBhO0^-*7=t+H#@X-ePo1>5u7dG-m6;TSE;mUS2{FSD!^HN71SbS30;{+BSXj}2AxcrKuAGG(f%@=kdvquNIou2 zncYWaA5dw*##{6H~{~OD4>)nsJ{gp zYWP{k_~&TZz!>sZ1@k@_P^I=&_hyK5w2>02&LYPQ zanLA;xA09CCO!{Np59_M?OueAG)6Gyi*Y<% z#|a%3x0S!2DDLlp@D4PLuwo5%@<9+87b~)%>3mkn*?0Ds1`A2cZozMf_d+&C(<6il zDA&F!^f2hq>_8ysm+Qlky!ZgYFU_gB&k3HG`l%xumcxHHtz9SSb!)$9S+57?L}?S2 z0(X;NfEL5*+1JQmcvpJpCjPZ!@SWM{uN;4ZLJ)zDHQkJD_G$WSX!#cqNcuGbBLcDe z6{vR4j4#40;l4|hk(0);ou(f`%Um>g(V-=MnD+i%n@c;Mh35-9(kIY zn3Crowxr4A3x>BEhBVrEh_4-TjWZzYFZ2XPj`$>f=`C*%Us?Ct;KL!3%X%E<)p7UP=DYt; z6xjK&3<;>J63H>nE+oPR!lEr@n_*?#MB^DQbXACwy3DPm5(c8qjK!hlGaYAXtyuX* zcjcoGB)Xj*)gw&+)ABDOv}}gf{V@-{zukOF%N>K>un$^`{Z6jJjOqqko+YmEs(O-9 z4`j7n^<$JK)mQU8XSvVe;JXk0@rCCP6~H9-$+#gt2RkAo`CNGMJ?bU|({+fb+wv@Y z$+J~x#w5H)ten!}hVM#J=8zASg9K-0uQ(~`j7gS~#Qc^>T_cJKHb+M7PGVni;`9!S z&alO+Gos8zlr%%@!lJGvj8UjGqhK_lCMWS(A8A!AQpHD#eVc%#zGIPYhZf@C;5=to zRaAabvKNV4rJ?=!mt8I_&B63U`wi7!oY+2=>}rL!4cjO3Ek~|*a@zzke(#;^$50kD zPSXhY-m?gAI$zFo4P zeI5DU879o*ydjvKF&0S8gV-E#%fHEElVh4Ug<+TTlY?mici z^D@F5<(lOVM8_z=%NDBK!Wu8vZv7SFgW~!?(KzG>b0N)vx0%Fgq;zToFO1YW6}_S4naf4%#qyyT@*}uo$aN`oa5h0VV#A15 z0~hyY{(p3;o|6^CGSfQoA?1}7>LAH(6T*8d)tv7ytskvE9y>ESz}V#^w6zU$t4!~v zs@h2rqpOr-qbaMr()W!V%M|Oq%T&6?umB;2b+Oa2O(B4YBoJk z59H^h^?QixD380P!U0O`YA0$xQHwjI^+?E}`sq71n&u6h*>rBqjW#O;xRuht2G&d5 z#?LO+uybyaJLH-L7r*iTBgd!(!*qS4(rvx_;pYKd=iQolsBnpG!<6@GfgkbS`ndJu z`}<0$j%6h0%ZsH>d=|Uc$h}Q#oaZw!IHwxytN+92Jd^YVpS`WRIiA13B$|;hSz^1;`*6 zoVHTX+waLla_f7Slv|t4h>rU`G7TbXQ&~3f%3xw~l;`FL&o{~|i(@Q}ST&6|koQf3 z_nHK?vQNL}l?ML4CMR|^$F4U%MdXv(jfghE_Nh4mh|(_iAG_&hMlweCXPR<~XX*(4 zX6foa!OusU3!{{V3Tct~5?aC#EY0#=q*7RnoK()g?xDjtaF4e8*AgYsc1;pPVn;zb zF%jI*{qUL^Lm1FwBt{$*?@~e9F2cHM+#*uZL*16ha_J(WCN7Mg-(ayZCt~X(auJw) z?qOy6)1PN41c#E{Np$)}hoGwx)@=A(?X{F-$H)lmrr_*b?ef!Ja5yn<4(sTG$>38{6m8}lG zH2I_3p-Z|Wcq7RTGK|LeL!H3=qoUgoJ?4jbfgK%5T={WO7@brnb6L{!dg>s3qdT5Tuz;foU{qiTvYScYCgB_sSwki z{nyl)-$VZKzPeKZ3@JfC9v&E&8MI7}3c8O_C=|lZlb4uVioHx^-JEj;{Lxm0!_Iqm}0Hw*|*}2RAh0f1$@{(;^6u&#AqVimvQ)(qEqHDwN8|?W zS#1iAdgdI3-0D$aGgsRQA?<``2-kYGbY-C8F)C+ifKn+d{X8LRv1w4=lHO4GAAQS$ zaOD2IV-1o&MKkqvKhyYVe&$!b5D9-RI;V-t{%EW_QXE+UVQH>0%%H%CLwu|`Weam&#FwNhx{_zSt)ql}}#~EVicziBSTEyoks{okX_)15wzT;v|O5X{!4V~L9r@OPT33FwaGI~sVtt6;nDI7UgTwt}f>oaX>Wv;%5 zmD!-7#xuJCzvae<@yz&1kerzERidMWic$<5@1OK~?L?#<8Il=Ix+4in886HGsUChP z2uFH1%1GbHec6*W+d-qGYXj~hNlFETZwxa~smtJAWPI-*x^b;vG{%*l>n2Xnpt$$c z+}n#~uOyU&mhY{BpFXftX&z)N6KpwWZRk>b7U%T4R9fPa5e=*y$%nE%?n%Ix^&3VF zGz}G0&NR7`WhFW+yy2qJFbc+8a5d-7=0rv88^&)iRfwH!m#oD}?=OmR|E&s~x>C%H3R6@5({tMUst;YEdM~jGI<@wa`F~4zXktcxk}m zu`^4ZYti~LL<5@*1VwMA3JnSOr(ar^r^>O|mT(QeY6qx9Ah^2(C%C)21$PS)B)Ge~yGw8g4#C|a1b27a z=J)NlRr^(K)lTsTH8s=IeY@X#_r7!PITL_vNhEk|FkoQ6kf}|M}(;EFH07ccuBJJ zS!&TNUR|-ykf!LUoJlZv^=yMQ&jQ4JB0^qK?k1D&FKkTf+}8hD^T_`7afaW5u|Hu7 ztm*3^H>;n21};(3Ksb07cSBBzFpQPyTm`IYQkV#u##NaEAk& z&TU|~Y(SxzFcDgkVeO%OR=9^G>BNPjXo>xoshEYJ?2aF3Dj(u74g+1jcWbn1Y|LZ2 zlblzK2;?_ewOW%+_LOMD#SfQ-BSXF|Rnlcj<`I0wUu&GB7ZKTTLXEiIoeB00n6zFFvxDAa<$IxpeI9>xL)bK41eHd6vE>w@PgU=JE{27r7{KVT z>9f|W;~{DL>|SdgDj`lknDj`32PW0$Vm=QxJv8uK{&q%ux9gk-xipyBS3zYxa$F6j zkauUZop$YItWm^QJ$it#TNO^1y{9W5de_9%k(P*%yPb8|&W_TChXzWF7g22lm3)V^ z3OQT73cvY0y^e-U;u4Ciz^qjZA~&?sI`>N8#2(bFJmMA;lXMB_F_!g2o?ZBR(_8zS zDVvvE3!=(xB*0C!EnNYCjI`WhU-{!^ZQ=^FE6o=~W*4jtzhr z8|6?5aqe30`=K@fwGI^*P1EOV6a4GT7kEARbg&tI&7b3{S4~VUFU}vG3Fz0UlmN59 z`49tLsil9YBcL0$AR}Kk8F3oN`~@3Q|Pv+kfY&( z&MRZR)MYjc-)_Q?xgk{x{rAG~9;GvDI%OKM6*C+m$k!Fm8P#g{9+4l@HmH4a!(S zlD~QycwT&ad4B2)JFid*N|3~@0;5xbE#-3Q7t-CmuwZO) zdPC1h9?>=5OD-jhbs-B7sfd5opw~>!=UO;}sB{Ft2jPbn+WDG3dSpU1Y&9tq&8P)CyJnFYgLoxEaitRGWV7PVZ8;YTXhLBFh=%9{FiKjpDX6)>lV6-{G5<*UH zGpW-54reXhf4XFHo$ECSp7B&^$e+4Lv(~HjWZ1kL_Ti)hg^C`JV2ArPL|y^ju|K+=0?e zN(}N}stn{(w@}M)3g(=sEQn&)P{cf5kug{Ay`1b{j z1u{1W;_0c7&|>4IB%;FjkP%dQ2*&=2j}pF|Ilo_uhch3o(5zKd!odKN>CLP*fs_05 zKTD_g>!_CyY1F~b;$P#JBl<^R#riYz=I5+Qj&7FInzco74du+FrIU+#!)o|osp%9&JT=js#Zfdu{Dax~N` zq13b%>5^8w2x!z8KWfv=)4mR}iEmoJyw|+}3 z!g#TXK}~~vdtN@&TI@!bwCEa&K9ydC9x|X_q@URoRGhC@lm-A0Uw} zL@W`5^EvOJ(Y#O5C{*rF_X^F}S|g=cRkgV#zX`{lUJTlcW5RUShLJ5z2|wzOa<)>o zf9A)T{5^k7Igm-BrKG74(ZP3DN9Q<^hz+{bP4Kt=y5tfDYeElSb?YG;w;2&8u7}D7 z6PT@+AS7^bt5Z4|#Vvu46&|edwRV{LYyTpzv4qT;b#b&{+JEX)(NKF$B<>7nFCF+r zEr!DkC!qsEp|2jYC`RevN)EO+i7k#wH0L{mSR8XcL=!2=ukkXGakueV(+OA; zZAj@?{Rr35#C)Cg&$%MCrh3Fj4SCF}GQtY@Rku)oZ~uJQ#p>91VjVBm3;~|qkdxOA z;~a~I4i1W+uH#~UKz2V2FkNgDzvIU6-{B$?@dP$^p4xUN9nZ4aI3!%>Y(y3NljU)m zA;az}PPJ>xTAG&|Mgmp+GDf=cra8u0;;o&Y;{xQ%RbNWc9a%W3(%KgyXht%UpZO0( zqE@dwtl*>zqHXHqSQ`8#-|ou zb^6wpW;$d7K&yv^b)<&)zKxodZOLsg0STda5%uGvJwPHn4>4i0tc;tjCkf|5kI;-& zdPpQJoG0P&KWR!PWK5{&Th+;C>*s z+es=$vabzGmRw${8sWF*d2hCM5k;jEBPY~~uIYvy@Eb%UoxF8Bo#R2|?|KBsPpi^e zEmp6{03NT7%2Y*^U~M3%?`toS-Y5wjI^i$24J%t&K-oxDjKqO7QIs1ozX%GCFQzEI zvO2mvzbU-+Pf)cRqgG3vT2U>HOUP^9#+}SM3rjE(I?5UUUM%ox(7opS{@U`mm*EHq zwf}p$o*cUGe)k4Ej8QT;ZNWh|cX$7IHy@F^u99jDcmE`5Hd>%{-FKdEm6c@oKHVNG zoEX#8QhN>|&`7iK?+<2%`=!Dc(eLa7;;{0v7Y7nG{Z!Q%1lH{fE1*(IEBtzZ7GQ#& z?aGSpgx5;usgpf?`B!R3Dj>+pG*-p$ZIYGV?}plj;R{_=4-^BKfVmDUOuue|9z$>W z;--TQ0+#^~9bOjvHa7`Uyid+CjS(b+QxPJX|My+?WM(JH9X%PL_WW|M!6NhMp^QC+ zY6241E#rDhEcORkhRJN2Ml=~}l!*77J#Ts|G*ljqAxdrR7{LGBt2|W;2_Z1GB-9mp z3NbdaPBFuUSGEPKWGXVpWT@kH*?R`V3L!cwJKne$sGNsj{yh9f$%*ntDc#?)V(&1+ z6ps2z6ZqUNjZ0l35j8WIXOQr@j5!@X)Y82L|3`(LUnY;SfI`_r#QD6gykNJsXb*i$ ziGc)8mSu1x;w%VST)*W{oODC6=IWo(GzwPmcyy}yC_F5szd7?uGpih2rt7G6^jOP@ zQUy@sAjj=V2+8;#rf^@G;PJv^4ynOoNzjdGtOFP=kENT^(Oo^fXI57cK)77dIFqZ5 zmKXpRq+G3HhsAk+VgN9=1Q=loIf|=KY(<@ZS7?b&RnbbKP_!`pW1G2zV4l7a;=F7_ zTz}edEL#!DT{ecQ`3VHw&u7Mr^T;h*sXgmmRxIKD#iZ6mDG2(*%zM8eV2g!>&$LMY zs^YaD_cDYhqCKo^^1u{F126zTEkd_PEsQB;hZdvQc&|9=IKpyMH~%V*T_V-UVXRkm z7u!}&mAtPcGm(@!xSaEgPg>gqm*axEsv(B+K@qJ)$CdIk?Sj3U-G?L0o89cN>LT)D zLVjOPDdB3c&?N~i89I|GV=C~F%t+OfOJOBnNHb@+T7Sln(~3m2kYU1S;j_`fC7re2 z=xa-}Sp6v?P=S(A zMNq%sXBZgNzeal=h}=K|!DBAu=jX2M&XKob{=_2;Evg=!=u;IZE+mU$%1|_1nFew3 ztYD6o(;dFRI_|D`I)7D&E;AiyCcl-TwyP~HVSFDp@I+s+N)T7a&T=l%bfBpx&S-@D zkLm3nlfz+Ait*cz3E0Ky>7TlcAqxu&OLYK`U06awLYs{`W%S_qIN}xJ;d$TV2TJk& zCVeVlI3_nDxO+Ctx3p{t=iIWJT(2hy#Kv}L+_bRH^Zhd-x+syihnOss1WMVbTsjK6{kLe$S(c3c1}`D1WpH3-TPN$IiD^w z+jA%tZ((8KXsD$q)`c+#ut>7@nrR_rjulKc!gd?J&;%oO>#t!PIv@l#r)*2z?O6hR zvAQ=_yLK<8VmTqoSPq^ zB_W=IyVzyHl!Fe&Z3L?h-&pF24Eru z<&SIh)uvy|P&GE>ai!F_`{S@5yAXUZjHVG`n&>dc;crYtsMW=w-93F$6>tyazG6N0|C+?#Gv4<9v={*&MzDBS`Gfm8a>FD z*=R<@M?|kqMi*qTC!Lj9L6G0p$j~RKzq!wvFdziL+y;EX#TEv1LI486c-@`!q;s@S zZ`ucJFo%d;kOfPJH8#G9sNUAN}37v>Bs4m}gq>cdeHO$`gO^cHi%XDhbe%MYQx6mzF@F zYhjeP4QvUQkWhBbI=(AAfgqstV?#?eB)7n}+*Bzh(R*;sPu#eL9k&vTr!j<+c_r|0 zNt>Id@oW1pe+CZq9?K(P9(nCV5?G`n0g9VUN)I_B7LPxtn8l1d*r9aBqNJ%o+(nM> zPODpxZtC~C=_xXbr>yH3p9BQ~z^RI&jECyt<(QQxFuNknYYP{?lqON7NAuP-Kb@^0 zcUtZbtfVxMF)7U}+YoJM%?~M^u31SPw3!6%8Pp>W50jEm9^+(jYE9W6K}WN4s&*ql zLyjfF$$9)ZPo{7$D`a2{M67LEiTGe^T&kZ2_M4>BDsivFL=W63ufe z=QnV-TcV-Hk?lHj4XR{%ZSsn!gtgUHIHJyPnJn!{({*1@4!EN;n6i-vacfRh7`LAQ z?sf@hRo@BT?8V7tfF`rAz)Ffd1nA`CU??TW7vDUKh2V5?qDQd%jvYDa2@Dhk0Bj-x z#qxw9-Zic!hw)-9R%fCw7k{Boh);T47xfdSh(Le0-aU~sqKSK$-dt!rM?b$^4NVrb z9{l_F&3xOy%}!V#N5tzne2E)JpEFXK`*+j(1v#Z`y8mOt(AMGEBEWvpY%>+mE81xZ8ZO?zlxY_mv{;FHzoeJ<0sKp%T z4!{<*v7_(-w8ox#g#{4Wp=pfi%!+z#LnOBkFpt5@s(oE7yK1fBTosPVa9sOfso z!$;DzJqS)#i

@F?R0g{;++9md*SE*8Olm`qI~?N38~aLQgb6F}nB9i^;xc9%rJb z89OU@^34fm5L54l@T{-(n$pB~5mob?nNjx(mhWRVocqnL$-~HAKqxd_i^ZkQ%X9Vq z)XW;d1(i|R9LOPD4NQqXRd_v(iv2)q`vb`j!l~*=p~xDA;#(ofLj88OGYZxUZ4pF1 zqnyWq=L~YjQ9cby6Ih5~Wfn6kK|_w#F(e|PRNAtQOOAF)w4oW{lc-*A+!tQRVm&LglH{Eyo-+uayGx`05x zfoeC<`}uC`Uj&o9EnChcS5IfEn=NZU2iJi7+zF_kGFBiQ=Uw$zx zhE1;3g1n+p{&hEh0tc~UJ>KG9z346~onl_U;Cn0vAGg(UtGf{0AU|4Q?qfMI>Mkao ze-lUv$S~GSz%V+SQ+K)X%Krs3rAb0bos2uw$oZDW(v{sB%@BU*;Xnk_T%8$^Mdba^ zt%LkI+|P`qxGw7DeI&oF`M4$Q*S1&g()WSRj(4VHGFY;XT>=Gg*tpTwOb(Sb9F15F zdO&?AFh$K@F?yiBa_RP9V`t4>F#O*qYy@uhQ0G@>;pptv7OJ4kh&NXAVJq6u1IvjX z%kA`7XPbx5-Q6CGVz@}oElu0GMRk6{6G6mRuH{nL%8lsv0puylL9bDXp2)-0SXqzZ z*ntj#)%2}e^OCyrMbm#_N}O-y5)fnj3kxf;z?8U2WW|x<`F1ShlOXM)pXLl_^(M$Cip6QnlrSG()L#LTB?yE2uv~5)1;~Yx=58ktLJD(xKU` z(40lNbmLL!9rXvR&G1#uJ8iHxoZeKYC3fdXhA}BXtFpU&hi8FS1D^%o7akw_BFsRg zwzz4*nD!WTEEJ@f;wmf;$(P%bTOQa&mVmzk2}nxxtE#KipQ`4KaN^ekiI(TH_Gw_p zBsv=TgY{-%0SjU_8^i55_df3f+Ml8&K6yX_#aJ&x^O}DIQx`7K8a*ARC+lTHvDK2k zlsUxp{#O_;NyaNAv>coMjgjYu|3Nnsc%NG(eb*eliHUMkWyGzBoBWZZf>-qBoJc8# zG%_D;mtvO)p-+Ff;DM7#w^T(2V-(}GVRn%7?^}0^Zoqe{)w%utd^{7e?uW+@#RV^6 z75~N|*|n5yqs;Kkz3!2N6pqb9uf=*}4*3ISZD(iWF{MHmL>{hvP3mW`8ZB}W zzB*HM!KxUw>r?r9=XyK8NOYFXxW*{oezaJ$UQU;|F{Z~a9nv8*Q-QLp%(LWFo%hMA zv2yso>GN(!GKs6@4|Nn1yKeNFMvAE%IPoHqOjsHV$%j=0ukn8bbkUhbQrOze;D+w{ zUA$*-{33ew4K6e?8Zn2z^ws@3%@wB|w0y++6lh7nz9tZ8@1 z+?-1DgJG(=dBfl@-YXXx6%Gr9W{(+s6M5em-nutXR4i+D*Jd`qF78P?LN*Diu?fNZ z^UoTWFJ)6iffMw7ia}O1@Tcxw8)1-UlG4g36Ipi8Q4FZ}~G@T5;b7%aIWFTQ} z0}Y$?{8@P^mlBR6>fsenkoDY-`T;5AK_~&=qa3zM3r?DJhyR)aK*JUyHf1xMCVi5z&M**PG%$5 zIl`<0FUe!HSQUw}`+!7nsL_gSLpf=mDx@NO$m92RJ4R05qobwoe=ef!v8d|p0UXk} zp^8;$w$yCIeJUy~AJ8yLFp;rO;Y+r>AI9+RxE{Z*{V@UgvAth5bclxPG(6}3r3us0 z$DAVX+VMcv%%#*4G;_blQ8Decm@s9~Evl6GbiS8ipFD&K54GmHsCRI5)cf}@$yw+9 z#@I`Ym2k`jn|*c&? z+P?s?lHZ_3e@|61+*c|oi!s^AFIFO_tGXC-UkuDtUz0_kq!kREBz!Jg()lMLxTQDg zzsO{NIwFK(Fr$fk=aOH4tG^qhmLADB%j<9AhF50Vxrk!Ps@*FB%V2{WQTSEqv)q&7 zMji9cC2Xh(i`HMIuiw)mQKucsr;B3}wQj#txI&mFhNiU(Vd&nwtBu-E?cUZJ9wu=< zwmL$=DiVC_3NQJJlXhcC2P@KK{I$(=x4-3=G^|{JP!#!E>Av5T@s1`oCHwy6dInAf zl&G~rO}?xzm#Ptj*M0qA>Ri4Nd@EVT91NsQ@bF`9YYbqJAW+26oydpxp(-9j(=@gwZXc|B0_U!Iy`Qpu z?)%R7iPlL4j6b(cSymicQ+YA>hm-(i|6qQ?Myk_kYl7p} zjXDc9l^c`fSO@LUFNaqTl|nX2AN!L|N;*UBCXbE#2YwgZ;QCTS6p%=ExUPFWHvD^3 zBu2QO;vtx;t)s85J~&C_&6`>nXVwm3tS9;tHQF_nl!~Ur(eR)0KzZMiCKF1F741g9 z!q`xND<7?l{`x8EH^@j9U$;#oktG-)2*XiC zDcD@u4R1G!b+M4aWr=Pg&S1h|+!aS6g*sAT$+MLg`9#whpphOr@{hy&qYRUkQaa21T`i@0f>5l@DyJ9xSS# zs+EhBbM1kbN4ioXWh9HN6^$v6%?$eWcyB;*9dRmjrU1DLO{ECn)yJ|KO(oDJj7~}o ztM0T--|~xGspV{KM6qOGDAfLm!b_`B33%QC^Br#vagy74TAC73`viBhQA$Y(I~fIrP#Jwz0YoH)0#Ts!gtl$iU+{ z5--!a(xRtx@+$4D#IqVpgFRy8esoxdQbSQ3;sHoEmZxyBhJtXt)tn37oj7a{&)0%E z7ulD6VrR1)neG-lQzR1P4ANagQ*M%%>m;B7t36q^FQJ{sB>cPjnJNQ7?AxZQ`X#l( zKZ61YIA-GV=Fv1(AHC*VXH2KkTdi9`$$w0+BC;iZ*$Lmy(AtLmQ$gzE8G&lolwgtu z_m*$R&qSRnMbfcfvJ16hf1%2@CPQo&BghB1I%L>%|6QV1^GECHxsHw^OJb!@4)hv2 zwgB7DsxFODgDiX!leA~vw_R9yx*I6jW&oPHCNaTA!uK$p4hR4BT2_6L5L$KjO>(^L zAJQ1k#LysLkst-Xx*?)tk*dwb()A%8;<$1|_kh0b_$q7$dqte$m(p)K86U|^nUCKRb zvhR+C$+_?Uvn*SzDMlSy0yXdySC|WF1hcwl!-JA1Vpq!OSKLF^7 z4chYH_tk2hva&bdv#Dt-Ja*;Cj-H$82VAd9K%q518KAv%tBecT6(q`IOK7y7(rCe1 z>+kB33fLh6Hv&w_c}~+Wf$0EpM>Ww(rCA%@v&uiU4K6-)#RCuaGGG=?l^%BWxQ!WbQwOvH=)P&$deFSO>Pt2~ z=G4qyEI{j@bj%2N{5tX zKhkcDeTVSJ<^80LntwSy3C$vV9^*@ksUXk=Fo4&H@AONSaa?&2KxQ?0tO-Fu(_Az43jS{!xoEAqGTisc-xz6`YaRx#LB4u8>OG-LrKH=JmloZSpq+oRkOnlBcvbONgzL5HcRc)@oaWHkgjtj&vfz4H$w*Ae z7gz)9r%1$lz_G=Zj5ly}2?D<5kg-4_)nq&9yVxQ=f2D^hTzL^(?i%^1u*vCQL{qe% z34=5e=CY1bwV5(a=)`iGi+og|hle9!2k<6h8yJ4vq;tocyo)AG(csAq*%o^^R;-g< zr{j!&q7tciGR|w3`4f&zMc2Zq|8jiX7*u;lUwm1JCs~cLiRnV${)kUbN`glqj4M{= zQtXPC6(2ZvDR|(WciynkbiUq!`R;vO1eeq4(IQolwt;ioZ0y?*X(E0nzut9JiF@LQ zc@(!}mA2^q6kSoP%RI_|d5NXTNjEWO5_RFt#pHbtle|R?MO4FR#^&p_-I}^wDNs?T z+L@WysPp!nD=P#=-w_%_2GdVY#yr6r2P=uyo7WaeS_W-h4$Y+8DmQYiyIn-Kl#eI% zxaF1dkF>zkeZDLEZ+1Q@Y~|5PUyPc=Y-2|iy>N7#a4qO>!eUN91(a%(X`x8|-l2z_ zEknN#@d!SG#pL)yS84yBB;ykYUt#f=(U)k~SCfP08kieB z-g6L9ui@t}j&FHLN{Usz)4lfvcZUD;-_uF>q{=FRQy#&}Iy`0#Z<}cYh#4&gz-CB^4Q+ayj zF*zQitsuX&oE8OIobYxXfZc=*#%(T*U>0TnJAI#bhKvN-OqEs3QV9`#wsb7qPgF>5 zNnTGpuK!e;=B6z*u7+L;pX71{D;lh>askJ$+dyn_@S*q%|M{_Z(I6aW%2BH}nU{T0 z9;4u5*W1LT9!{UL28J<-bVADep49uJW**4nxmYXv zAxo2pR9|fwtE%$+F>lFVv3KkE3@BT-f5Ie$sCkTf>Tt^)5715$zSbEYD%R5z1$R7- z(?A7DkdlQMI{MHK8K<(9abG@5k}?aq=_{}dAt9XkMdl@4QR`(AsyA0kUsg>myOGuXylbcVU9X+X+vc8EC z%i-(By(eqcyT5o+nhn7!oY@*!h9@RdF(Mg-0&-u4DlvM@yg3N1Mtv=oIw0rKN%g42 z`^F+Tq*<%@y4DscUv~G#`676C#>ZIh`A+;`?Ux3YsD>(v=Fqo>mBPFz>{vEtqolKz z&uZKHRB@vn?mEgbT9M>&u2HpWw%+DypZ_!bTUdH~%ir)+SpV=`YQ(Yqdzgt~=4WO$ zb2E2-ViaOlbAf$l0rS-Bt&T}^m50A2I7l$a=^0)kzI}*Mcy%E{boN&q$8rzuqgHPl zX{nAfT69%;KX(U@syXEdwy$ZtBY(xFnjG51rMvemInwiY)eTT^m_6wqv16u44x z2TX#ateVaOqzziRr2nYJj+h=05m-4*OO!bxhE|kbbM^ieGut~4)u=d`JuABdo9@Q0FRN5wKZMYG*&1_N5_lnYY{-2^Ft(7RbBn4 zkk{n^_38c`#lXNoR6@e!^54KMkKO6!_fbXP8w)(}-&a)8>DBo7uJ^1>=xu|)-L`O- zi_%86msqPyMO1U|Vj9Z4jP2=;Li3178};%|UODcs;`1#1F4a+^o+81@##J?z+lES4 zgR0y%T+g}jd|F_1y1R=PU|HC$lleOYI{4pSf8-AwdRtdDW33j(iCKDgn6A*+S~t_; z@=~SA2K(3|2{PA;k`;aXnzX0Qb~iOMtqCUH`rwz}LvF{65Gen&m$EN~ z#`~fQtDDN)1R*q{)&{lh+op{iPhW#!+Q$6^-)ozP#SSB3S+ijrOK|pzRY`DDpNhwE z$=19=4f_mYd7g)-#ldy$x7g-9?DVz-=(+4;1AElAIBZ~#J5d`pqCGUOYkMe0q)L4| zK|$avu=N(3l@*nkh`H9{2qBZg2n9+^PBsP{VkM=edjV+O;o-taHk%Kxr>DpLZrQww zM}OVb67+X*5!%}K*NxNTeqeUXk5~EFLY&_#mb$TI-O8>*+-dbshuJGRMNio}E4`?0 zUf{?gpHA?DB)oo2bya)Q-ha0YW}N=oHdML#ZLuF0mD8^Uj-b0sIzg|Na2}jgVsc3_ zVs_DIrQ1%KX-!pY2K=9E2}1HuG4Ipy#opxxb_p(QKg2`SpKJdJ%&uAHp(>;qNOBh{ zW*bc`JFMCa)zr(Bv>03jFiz(NYCAZ@X%U5V#n!(DLC0%870P)v*yPd$6up*ntm7jV zEv_x4)5YZN8R)=>6SOTMHT&UC_Br5Gt}>9ArI#b^T93Bk{ux?&g6dU8kj%1|Ob~DL zz6oL`^o#!%j6@J@)OY5>Z#7?z1(*U{Tn-UiL&Sc7l1WKPnhj=1z_tpH+es({46-5M z$-4kUlKvj`QceF#Bo6s>6scF*p5eA~=qXMT{UVQ-&ew;Id}M2!Tx3F@eTWkh;>FJO zu(5eO)~ojHRqONvrSs-V&+Yt0_a1tD21a8i`>YZ7zyMS|^ZLsTr&7p(+h4BmcClKO zk!`6><-3)UR~UkIpq_b6s$9vVXq5LaIF`?n?zBBN0_oSK1mu4@t##hEc889y~S0tMFQ1U(am#8$^xy-M@Qh$8=|B=kL*c zh59bT?0eHu?d@KhozF^cYqkNrgip~KJ-x-c&jK|4o$+D7XJUJ%h&C6n zE(p|n!{be}@fGc0?aS9n-0K}lX|nYw#A!s*`@48cnB+yf^*YzsR&M)^O|b4xfh8NB zRyU&9r+KbHY`l5d7qElH*(O1PG+AihR<3Fd)x*LDm#^X)zp+tql&z`yiO70i;a(RB4c{UjJ~dN{PJDKseUQ0t$$lnp#L#H&ebX zG!*vK>+|Q&o{y@ks=4|9CJ32}ii$vfN2}}j6%`e^%6RS%ih9>w(na;vf14X-PBirN z*jjW|HF{PmUEmUSr){{@^b5|z(!r3Aj;tysG^&1Gven1dIa{F>Homh29ZqUgRX;Do zo?5$Rc?W5yzVgT2*i;pX*fskQSb;evf%-Rx{j5dURgj*6(~ndB4rU_co0-wcuKc9Q zj@-W}Ph3{Ei}=GH2HUlL-f}{(VP0V?U?zh$E2JWwJsSVrL;)Cpfg68KAvTF*p79rL zNh@DXr><&D<^G`h22ErB;?r=xX@OMvI^D;wotrQ1D;`=qIQVRq@vq1m-S|-e+BZZv zA!e6>WG^6`moBeeM5VIfL!23ar&!bW0I^7m&92V7TR=~X*=C8E@9CgGQc9|9@e&76 zSbe;9?zIIM;TvIq2mwOsjJlej=>ZrxU3HxU=YX5yZmgO0jP zv*U}Yk&%cHI@a=2OI`batY&OBY#thz_YCW7bK;t;a%Oq?!QTHQNXqb9E}CHCcz|87 zIxz}7Tu&kZZ`F8v7qw_+a56RDbqTa6`OF@eE9>jqEjlHf+Sn$|jY)p9=nNV16w~1| zn~iJa8c=Wa8}9sefQuD+UVJzIXjAxU(XhB7Z~z}q3y!Fi|Frw8)e5{-r`fmU4c;Ep zpl0fkfcT)~@ns2I7<F?qv<9pw%JL{B&iRfA$}&m6_T@O+n< zHZpZ7=gJj|WF5Fnc2@u8eb=P@^I(4@(cqw6sCk<)Eb4olic;3paxPddGqUKtFVV}ouG8kx97Gryr4 zaxRr`|hf-2Jz4D_sjevaZ55t1cVW$4cW8?sYGA3l%`0Oe#Pb@&PlhH z%~KR&TZ=cX*$*9p~sCG;=)7 zTXq;AigC4z)^W%G{2Oc&+gud@zyB3eE7NL&wrii05&34@=Sb~Z+H=pY*Asc`GS%pY z2QT!Jl>GgB0zL#V%Q~BQ?#tY0PFnCyaY$1|Q8dSGKR5PY$a6S9Eb33mXM{kdX|8-5 zN`|UFStdHD%bs>8|Ez7E!3LwN-S$P-w&}Uvsu7W6?N2`TZ$G!KC9ksyKQlRm&{mQ1 zfhX0;*vdV76#CZ3W0d=x#kYNGA`s>k-_43F{R>EZb#UL*JCf*r`Bl6`$rX10oP zs>bYnWs}Gk!n&k|7Mg@H-|n7v`83Gv$c}A)efqmuIBTN*QB5HwZL`afw2CQfn!a-> z8wBbpX%P0t&g+e_U?c41?CM6brAdH--MsMMo@yocT6Geu!xjuBFCx^%x7D3^R#sMr zqdA&P9#?n7Z$ zIel~lD&mZNZ=%zUzxjs^SC$=Zrb{os$CYL$veM57#}$6;B3ta8i0+u)^`mDFM9R zQMi6Bp&NCdmvj^@S)=&v@12TRu1YwQQd2uY%9`bvN&|8{*Xn5?t-?O&qmzqIe*WTU`Xto!OOHf+_tuU%QVy z+aOG-$>>UP!2;I6{wg{L)n?J^2pM3zIF;A-YPfT?8(9k`8+@W8_SKfDG1{@U5BdphT+?2lP_41 zP1nvgE!@{h#^&XnVc~5zoRh(8BEwNhdGGam&_|rggM)~L{*4AUJQW>` zqumh5ws&+78Qf;5_2i;*9mu}aFMYS;x#UY6ig-0(!e3;-Cnvqv1#7lZ1;4N2OTytFA8L%gf7Do2&I$1{X?FQd+^j` zO$}3iK|!7SrE!?F4Pj1Y3zdjtK@nRK^PUTnT62NiM4$*Lmy<=VRhE*?WA@UpnL4r| z_x(#N_FGnQa4-XjI3eItW7UM8^WzE*7_9*(CpLwJg@8E%fo7Wv4Jfy<5mO`tSxi|O z{lkW%F9hWSf`>&$u3j`Yy<@j__d+~8&SQl?JWk*SF1>uf;lMVk`9xF2k4Q8G(%R{-3FK zFnBB!;9mRo^60tB#>TdFey)Fgn~@L~XEf^*@B{1t+|u&#jvC2zdV=ei57?Fw%j5x1{i$0V((-Cw`Ow3$BbXv2{ z7|Qeh%vSA_j~!1EZCn+;E{N57fu3Hwao9B7WGFfhpjxdg;xOv|1{`lL4hmvODJY8c zhjRW$vIV38ODEC?XTn9wpUKD|M1m22>e{UyomLMn@83A7^Juf%M+3Rnap!$#nzzDp zmbmb!;f<~B+jF7iPclmu&}S!wkKPx+f1uWCo)+NH!w~TEVKA>t)z7qB%?~yspFSt{XRF+K-m#QTvYSej%et znE-_{kiGX5N+p0mz>o9-RW>01iVx)bqyK)y^V@vZBXtHMh5qSN^o7Hy`bF2rLXPq& zGB6PGL%C32zb&929Rq{Ke1fo4mG(4BS6m$W-}W|=TQ_O_+zHxuDLqK1d=g)7b^at0 zSC-IWc%W8aYX8n;Hknf-ew&Ow7QW8yDFOP9z}NgGE5-TWfXJGlSPBB_(wt0>0kGclqC6|47-1=)ggGZ7v`7 zP(%hKA0NUqGBUcjyW{+VowzN;f1L@MmcJe0Z3OG$sd*iE)R>KW zA#YBWF*?2O2Z86!kATb0!hC==#1+&EPICl;CPAOAtjtbH*=O+uv3qMz<_O08{w-7% zVSsE#Dk>%>rI!dj@_(J?{lj)lL1`&0&<`T^^($DL>v6DL2InD?EY~2$ zF-W099W=?uM05O~UywZ|z{K2PF|ddNjty|6FA@bk&xRBJ_f_+LTs4>XlS@Rq?)>hE zt6zy89e%c(zVbYn{$2tq+Q(}d1_BibF%V?@^SQY>)iQ+XDGx6%ld0UV7nhfrpB(w9 zNJrg|?*Cv+j$%xP74C;^(gET8?K~+1&)V~NANuhcmRf>}_|Jct!CptzlHFu2Aw`n=w1d?>VshKKvhQud(;zT{qa zp@M%zpuueX@BV%W@JMI!c_>qjC(&tK^kXQHFf*e9`+2FX-{7kax~miRrt(A%HoFCX zczdG}5k(C|;P9Sge)yB}(}D1}TC-N5&?Ns$`U7;q!_2Z#~_GoBbE3`_)2Y?eh(2BMNO zFvyLiu}S=Rf4v9ydzkcnE4Y3G^gG2A6=NTO;Pm$dzzhVS2vGm~_pg6EgR99Bm_8`m z+)ioT&emvvjFAyoHpzhXvc&rxSZ;tDC;TCUOUlcu^8;}0>z$lb_;EEth0I+7Y(Uky zoodHrWicQVejyQ$#Qm%d2(y2LOYRzIB#Qvb+`4b0*mdTUpB(SkzefPZe^#3{<>lyE zJg(?~>4fq7+v~^a1_lL%EjO53&jPiX_`~ya1Rk4NXn{mbI2N5cti8SchxBMjCQd8W z0@y?qg!^kkh2t*I@7ZeK&zdkT_`pCoTyJj%oITR-TwPt8fP0LNfK4A;s~S9C^<&Pe z379f40XMj5J31N~H0dJckIN8-{S4Sp(Skw+-yTFV%m8N)VakLs1RO@#&w&rXIwC45 z8CqIeI#ulPdb=q0<3~q`bbyQYs_b&V(2#822Eg+zP zG)lLCfS`nQmy!a~9SS0dfQX8;fJnD=ODP~-(%mWW&~WD3`~7|AJ>wf^jPIY%vG*7T z&$HIL*Su$3*EQ$O869e0cd8kOpeq;rf3~%eNcF3?85$a93Aff>iT?dMdNi+D@?CNp^}r6QU2gkAQUdgYaOH4dy1Ya zChV+?RosPF?cAmh@C2h=xMg2|r*u>cjc?i9^&HHv`N*n&7^@)I3S6Z#rn$ifi_XHy zDGSTpNlt-+PpYV>+)&MAPrsd-`Ij7`w^iRa;mzZNgB!fO>daxuqSkbcs{Ph{h92{z zV@_RSOZ}Nq=+AhsF2El1d|LFaqoo%x^%*#ai9m?Xkqa*Q&x`JdOFrL6E;)r){z;Ti zzVF*3X;)W%-{W6f8Ht{69|LvMlpohaVCWg1j#v zVZikIZ~H;aa9tlsu#RAAPdTqCVHM?8eTFfJ!6`R$Z|lk+#9odM3TfJ9b_s%> zyBP>+asT=Ag3b=S$6$U}kM}ppk^fOmaFk%v+39gJjPMR5;#1qY2#$u%??e@{b@{hc zd~H+LyvM8D$ie7H>Q2#dmZPP)o!7i!{r+(qd;MzvxDD7sKPD$9P1Lp?B?xO^UA!0q zhdPCXl5<&~e~gZ{=@UIa*-3fY{>c>hD$}k+F$NwU)tgLA){{dI8w8w}R2-)2F%Ta> zOiOF`9IsZ($VcP4i0eadaA)x^BX;3M*wNIlCh3Q<4Phj@o?dPct{>n=MRtS#kZJ$K z@k%P02rQmV#BJk4rMzxTObm3g*Il~GgiCMzZQ5(+x4?ZFnLriRk27!_$yFgCAz=^w zT5p}V)B;N2y|uvx-aLq63W0E%z>7mjd+qdS?<%+vUi%4scKz~hlf@@X-l$;MUDkbL z)gEfqTR$!{+`K7+II^Bpxlnk{mAR<6IJO`{I!-8iWVE$Ee-?83rjn^HY<1`E-TM$N z0^t^ObxV4Mup_ZoQHulM7=DpfSkp{d4b>6lVCsiG#HGJJ+9LH&oKp`lll(U-T2c7_ z6J#U%xKZ@5{B|9b^nx{$uhh^Yioaj~+F{`5#|7-?aaMa14imH+e*;@RRW(%>%Hfs_)zs%}!#wN9nVFgH5HK-N;Lb+6n4p43y^D-| z;d^>SFDOU>M=HsBdyAgIaC}|oXABHl&1A@%M)Llg9QG#`7O7A|n)jXmZRgUi^A$7n zT)xHfQNbJ9XDIleQ9yQEe%lM5i5fZjS;(;KGNHF-QWr%@N*V38=XtDJZ zhaR`^^`q4p|f%4zldXDth!Jj4IUSGmkjLQmXBv8=&*sMFZ>$8xS znY)8UOk7a|HO=(;I!AR)&3#kT6eN#m>XJBT2N%89dw~em1abfSD4cY~3`r^S{3WAM zSTTU1F}(>5bwSgKxaQ#E;gP`3f^=svM~4v=3|@AbMlo0OGJPNmD=P`AsoG;_xA);^ z?t3UA$b@^nxR{t^kw4lW*T2AQhW|_Qp}xO}>d91NPH>_Xu!{#-gXzK6wD2)A6Vn^O zhC#SMgX8bMS+oCrl$DiL2Hcqpgz1u2VJ~zJ>c(K6LH48c2Tq57pRSj}#>Io(inO5H zlyT@3$)JcJs~HeNA8*!ip@LIV7>eg_GB`4?y}U0ohY^HN`4X&1^k6DL(0%I$GNBx@ zC-A%1&*4y*yT|N)`p==DF&2sUWMr^f!f8Um_JbO5i7UjyG3Xio zazo};A-fO(kGMLor>_3>)T84w4;W`l+eg^VR&8Hn z2HHlN(Yj@JVc>=!3w>O*o}T3U1IXFjwsi5VtgNkH%t@9;TAG?Oh$zL~y}VN}b_9tk zcH@=PeaaF8LW>C42`oiZF!6|OtmM}X3#a)u(i-n7msM;O*(3UgGILqLiNek@^xnSz zAv)S@cc}-6VKJoUFl!}1&I~OqEF5v5rh*Dh%F(f?leb#(w=fMA6h<=U=1h<;2Y?L5 zd8r#iD^DMBas}W5*RTAA%ZGJ|ALHLO@2KAxuj;Au^Fy>UaRT-&$bps+QySncLw;Hh zBSU(?Vql-7Adw**-*+L#Vhj2%s1fuOnKT2DcXp>sLJpF_^^;3fbZ}FX z%=GFi8$4$d*q2K$Wo(cZE%+~Uh7ef5xh*4@Ly zDt&Ie=xHeU(+@}`jrU3lK%@|G41k;|eP+K)9GM+;Y5E7_7N9a4kmCXTXy^5x0P(}ueyT`UiVDa`5^X=`UXxdfO`}ZGQP?$s^^NWj&!os>MrYe|jXD1%t zEqkQ?H<%Vpu!?fL__!YfiZwDKA{0u{3(YPiEq#kK>=+u}<&~9N0o$REZcpP3AFY7H z&;S_uJ}K?U3D{O6$ZFkB6(d|EPYVb#=>7wW@m64CVL`#AGSgd5_fg@ZpPwHT2}OSk zUnrzqK=Gd{1`he1ZXM;*8J?rJ0dg_@_5K#3R2j-MC^T)x+uax+P4Use=_g$EKZ-0O zFiuxSR)HGXe#i!bkc>ns=k*cNU%!5pJ1@WQzt8Ash5t{||E%EIpF6;4825gC017lr zU@?&E!x@9JD=EYkyx^3|)N{!)#*H(wGy`(;Wv<9+lu*UGIA>=KY;6;-Daa^k=;(w% zJ!Fbr`!iw-UJg`jQkt5d8hjvnL+<#GL;>&1H@3ImMDTSs%S43tu>*tLqMlCS%JA1pWfF7=Db&%7s&OkEdsqBPUmY|1fN@5Zk;$c)24Ra}-+ z(BrmN0n<x!aCr0g1#r^4L%5d_K*6ctD_^ZuC7kHZTXk^#;&ZX8khUiC-Mf@ z%G3=FIsX(=`o9|$(S6((wKe|T?BLG4U5KKzOgMTyQ33-c^lGT5Lu=*-k&X#G&}SaA zAhZh<+(05BdJJBxUYQ^7E7GHjdn3JQ5ZMGy^5_&mukUH%FmNkMuD*Jjp*eKoy;0;G zDM~C95ux=+i;dEswdDKLbtu5 zAN!hL4^*D-TEc$Bm=Ze)%r|+WTfj5{Rvs^a z90~`!^pc|N+>!gDENx@xq&Y)`mQGqrvP3=xigPlf-^0HC{lnXDWUdSY8oUK3#$zV= z9^Hm59+at;J_8BqXI?8X4I6I3y+AKha&||N^Ucu!NDAs4uMV|o;QqC^%O1%r>~@Ha zo;To&Suhgmn*Jru0n?L(nxO;=hn%7#L4^F`#fwXWxzvC>eih(O2zCa#qikoh#*fNp z({%X}>`Yqg1p%DG#rS2^+;6%fo?16W_q%5|m}A6!guf{#aRNgyh9{EyPVP`^P$)B0 zQpWY0=H+mWc!m!7}o95+Bqit%`)SO5o{l2+@q|BVP_T4DGWnqc&xnr*`gXaFOec?=AnK}GH zEV`19TI!<}H{oXl$J)iI;j8Rf{(;`>ZHmQnEpYU)R7C&pb z&fxfH)RA*KU7Fl>!mp!M=U`j1mPQdSg|3Hf@#7(5C}HgTa^q}F1u2=%A9){SWD-LV zsJh~&1|L%WDmNhox&C{;tI9;gk;iZe85zz8X_|@#SV+~0c)+>$SqRMilMx;!Iz4Ma zO(iABQm5ro)m-uOS%<1QX}DMeDo}r-byNxYn4?*?uL%vra|H_jcZzXE8-&kholgBj|f{m1}P5a?g5K%@}E$?-j zS1pt+%fB$#LEJa8n$caPJt0)ptE3u_$zKEq+nJ$E5nj=Gb@0la7)jrk|1VHn zQC)$-5zFu#S(j#1(}nyRG*wDU%5G`&zlvEX{Tn7~ybzA>>$h*Fkk68QcprTI#gGJX z3*BK@65<6fDJZn4YZiJk zjBXvd`ApY-GMHS<{~%I+6D;jEUFPMfHoVK1Bj3M&31>ZHK&I%qY4P-_NxeS?g!2(w zaIMHJvpmC^H}BpN)%@%H94uU;|BE)Q*Ksd3zo(#IZSGkbKdD5zUCj3~Db%6*Y#avI zW^J$7?fA8cPkIn=U9p=FB&i_uT@027CGA@xDWsNnKRaCPDYj6aTUc00yZx_Hv9t6a zrDBks~xOaD_1sJ==1V~yeEBXhF&s)hC|)rjOKk$MVSBB( zOTmD*%x%py(_qJIJNwl2cSP_|-RZiR+rWy?vk;xU@wqi+nT@3ozl|SXOZ-q7G3;OS z>TCsrxLgyQTnm3tp(^IN8l2kUYFLhp8Ic{}cbcRA1HxH_nS7}@w>tpK3oM&7uxEQEU z;`Q<>AN!~>8BoIvjwYc3^Ok;zZOpMcu)UvE-Np2mf?AjW@6qk4z{G#U_q)MtoZA zc^xC-r{cdZRj%)#i?4iu*NA-TuH^%!yia=k%5{7O1*R6Z^_hxKOUXim*VZ7HaG!nM zc;Ic3c(e7~(~TDXwL9j~>tKE57S&a~2ZV_hZ0T(9IGpqI`TLCfjunl6m37fkr15ir?6h!I#Wvn67tWAT<3#ZeD!DD7(lwOmZ%! z-`a3I?+penpWr~wyWpE?nwPKtsx#m7y%S>=6rY{dFX&p>Pw#Oxa?egvQ(7Yz8x`#N zUBy~gpq(vS#YIHI@e1<2Cia&ZtkUQ>>VMXqo2!llOQr=VVtQAI5H{N6W<8YYUE#LB zYVPYqB!$cVNW#QPoSMKW=a>CP*XMns&b(zLy0jO}EjO_}uzgf3QR(GW>;duJ&LJlF z=UEQrYf_q-{L@1tHBYmnDSqM2A=|4lUVb>=@ob)Gc;roH>8Qr!rpn~q!=0+b*(qdi zL{DL&49|{GMO^*gOMMF!D=%@$(_s=hQciBx8T0>Ud$9hn*3T_lr75Q3(EV@~Q}ZLd zESrspPZA+(V+``gPOTX?c5TP8P~Dsh%y(y5!Xe)40BFTb2N^L zBh7M$J+me}#_E0)4Qe`aV&9m%1FNK06Oqh0y|>JzAd}bJ+Fs;9ho+!?tZjY#G8h7f z5b{%+=CQuL4xpT>u?;c}(`g)y6C=Y(C9Wu|91>3wf!d!C`KdP@yO+;}=j}rOQVwRu z{NdGVtDvBdyq0)AWSHG6V!gm7eO7qNu4FJn!NYJ{$Wc~U&r|oE8IqWouh#rJ-n%|5 zD^vQ%`D=aFt_zogoPaazCg&~U;GfszI^_jsslzc`fMELR(_eY@L1lJkr=G9lYHgd* zy10D=32`JTdeNZ7!ze9cgU@cc@wLTKvyMyr{v9RDA-Wq3U5@MD6jm6zZIRC}i5`8J zu0=m09@GwL)zdKRX-xRaN=mFVl`efqaoR(WjaKc)6GqnvVbv!r5-qfNvwP*Rp{52* zwl!&XrVdH)_2WbSwy|cT85u?ms$H)>EmIFpC}~J;{o`ED^$+``W*1A6Cdb>iKR-Ehe#J^`Y{Ctr!o@LHoP3vP) z5|<0{&+uoL_G(smP&Kt(WPy!xaYU-NqmFOb6^2ru7WC{(T^YMeQGEKOu-WR@8M1$~ z#W2I`iWVN2OFd-yK?Pt9LAZU^{`X>+z824AYqjEwO;26chKY@Q57YXaZ-}Ul7PPsq zZnbEZSdT=-HcAHT_ohdAQTuGZ;9Rh1xH&Y{i}4e1`;aWwS)bj%fB$kn`AGz!AwCz4 zsZv3jOs`D`D4v{sIev=2SXmyivg?ZuD>`d8R(10lUl8(v-nT=i#ryEN$e487L* z5Ud|`G9M~Gs}qVS8S%%N8&^Hg-U+*6gN1V6o+vf%+YoI`U(I9Xx9fwqNg%<{tuY!6M#Z7~1a;hL&c}RP7EXVOi=Q2s zd2cn~P>6W~M_5kp;_x&4PK1#Z`jw4#^=-MLJEFTin+MA(;+@wVL^FyjoKYkc6u}5Y zhG3gee*!Z|=)5sT38^%)hQ(dtY%au^v~6}VNfCNMv1f@@XP!wK9{ChQG&qX{_p3wh zEm7H@JNIW*|Ed7U|20qrw9xN@z%&yQaw7#Mm;laUN=Qfq1_mPPqh1dQE-pe~@}aJl zh~>9^0~Ex-ld_(mrRb~o4;-~QP(=I zrcd4+`ioS@kV?sb9l%)ems`(Q^%|e;jk`_K15XGjE+-7^F+{{R&N#VXVW68Kh6W89 z5!b1i=1}*e<#fP*wl}Iag>&Qc^4jjr=4eU`T-C~(ltFje9&A*I;})8tsU5ixm>dD! zfEy+N{2Lj73>?(l2eZ1pK|Rpq_0$sJmhY%!|KC)m3z&~D8?Y2kIuCJ8jJ7QJq{XbH zm^dwy5upxNvh!gPa6mH#+%`U7qs{Qg?dZCbi$JJ24m;EVdMpZzIu!jR1hk^TlYZxL zI(x)WZGOdJMovx>6h~X2Wk3k5&mwMljcs#Q3uo?4&!}v^^=A`u3NLsf&3K6F4m?Q{ zkWZWaQ>j^5cwBWScRsP}yj)E3qXmE!#IZD6up6!V07;$&Qt1GcJUzL30tnFsdKZ52 zlPzg=Or5Ra<_n6cNdz;A^0p;%`OR`A`2gi_?{%h;;h)NQjk7*9`sQ0=i1my zg$39;cVHMAKwdY1Oohp(_keFisGyFHhtQ#v3^GyB-V_}>cI-v1eKsVovKr8P9g4Hu5?*mQgHlkXU_^T`BM?mQy9k2TeKQz4Hh;C6a)v5u{Z;p!0IxoS;EO zM$4u#A3wgrz{HkJF5mgWE+j+=#6r2}URGnfY~_*j$nn6SfF200&|PtcVQB=q9g2>!l#~mkq;BR0w>da2qCg*-p}x>6Q<0j}_lbj3 zGx}B%$V(U{pckM`7?@)Kcp4&1l7+q5!bc)wLirU+cWoV zFU!Gm0!;dU5c51+ucUR1IwP?6K)(0!~iSL@lBTBteQs zz{S-V#_Q|ri>O3f-cp+F&kCeV-I{bZqNXa}Sb=u*}gs#L8GE@no7GTRs{LwYe z_jU6+>i?*HRVEEz*>%PXjR>2Ag(HZ6?I~JMbbri=pT-Yj2uM|L_F(kW-*tUN%Q1CSK$}1z90fs(n2HK=4`5#qLVdWvBtXMM zR~P5I{Un0ocH6B&0|s=r0vjyEu3dmqNV7HYp)#d0j-MY&9aEG{`*bhEW+ljGs9Lpb z+;p?HMr9t)wib`;g+j?wTk2>|QeBNjcRWCxVJY5Tq${~XVSK1&lW8xG(iErSimSNo zA(D(2X1{QQ<9E^WVaK>X`^J^(($QU>^U4j2G3tSWg)_H3Y9g<=|JEZvhnInpgf0Gk z^rONp$Om45BoPJs^Cm*Y7bD~aT1*MHK=!SC z%ZiiE!A_9f&~oCXOY)EjqlNd;Xl%R5t{A6{Zx;!9VC(OSic73fU+wlUQ#Ajm!s9MU8t_0V-di`3D_p=xj z<3Pj1Ze1G6r}K~9)U~tAbH%O&khXfKQv_gm5(uMsUzmsp@bUXIMXc3WKVm1vx6M0- z+I<;+a9@M(ui~?KmL^5>fyL>iuKe<9yx%WZCTaQy+(+CxNj?o?1YH+=jsm=WWL1oZ zhuCSM1L%TY-%tO$56x2B#h>SJ$S%2k^b@p2eOY$6CH>nXjgropo$nI0fbEaB3F4qq z&fB5X6)#F%(yy2CuC>d#z>DkaL|ztez`!TxD5knAqri9gcG@! za*v&V$VL#!S=)<)0Ad>$Mw6BPO!=-n@AeQ3^sjGEa4bfXLBnx`#_`gFjZb zkM-|FssYc=Xu#4Cf5+{ojHBEro|gi2;c5UvDKn)vF=qancSKT5KqmQOnV6Wq-6PO{ z7Cdo6PfaHg15){)4?xEI0{Gk5M?-0ffvuOZU4u0 zdxpMMx1T(ey4-Ps{_?x^z_rT*`c|9z@8#Nd26O<@ie)dpri}aIbWxGp;kVsR$SudE zE)uMRHe&L@pWdbncPtkvyQuZP^Nb#>1<5=yZ0V7@{+p{r(8oE0uG5I8`tgyR@^1ad zzaom<-ch~OVzY0{+;cpOa1zhGlkT_r>`lH#`C|kJ@Z|`}J$QWlS7B>QPDI7C{X}&9 z@$dV4Q*Dzx?#uik;YxF7iAQw?6jdW9QD$z}L~JmX$YYYE;)C(4R7?fGaL@e`=aHSf zZ1q(V3Z9XnaXswD_ICHlkTYA`ICuZ+fVc~V-7?7MeVZe3Uxw4}_?KyB=#Ftow$BT4Ga^tO4m$JPqKwCD-^8la(28NMq8JJ zUb8coLHD{%YkJq6zkGBY#HTp}EJn{)+CHN??u;u+wRguBPLmE=m3BSdihmzRIY4E8 zThmS~B-2QnAM+wAF3EMceW+@uVDd`h0!anlM^dxuw}<=vwXQ57R(B{@YBG#fV@L_r zf~m?mTJdZrv^ET!;;2S`9^v4``tY6GX!lW{OeGDe=xCf*hV24=|GJ&4A|!2@`739T zhPjU)MXJPz$w0kFN|1s^uI#7~bsA?-U&q0MagAM8u;}W>HO=)h~}&p(cSAB#*y zYvJg``_8tXx|sjU%9r;0#7$Iq7eJ5aKIC>ED{=YtYEIt*tmx=rwAmR|iAz>Iq)(wH zK5mu-Z>+m!)3!0{ysX{s@Q}@$sITeoUd4trnPr(7CZF1F{?Yt*gPmtf? z8SrBL2Qj5H^X73CZ?=~2DY=Ddf7|4W9y>z>$$5~4Yb!fT&8u_TIo>h!4^-fF*5e<1 znV~9Na(@*aii?0+CaQ?PB|#@wR(1zg6i|+F$+es-ELHQB%HARI^8vq^RpuM|)ay?6 zFrF1PekKE`lfd;HZ!{4O4c;r+AJbqTbAR~Hx6q-h&Z8u~T+>);G@h1K2aok6X|-=R zEJQsfZ_GI|-0$+M9jbhK@#hU#ZtkQ_QDzt7wV6KlE?(5Xu~+@pf8QZCu+Fw+A@vo$41%r-HI+D$P8`sWE}X7= zm>CoLopzZ3Q+BhWjg>E){DW!Zbm(L9=39?+_i+^3*wQ$$Bl|K2E)eFO&^Y;tf&w#s zBc=;|W7=N-YqusCF8#`}v-<7*Qnd$bv+V{RoaEPth580(Us>+A$l@OxSHbnI#wXh9 z!4PJtr222@J2d)N+2Q0=?7L-X`Bo3wf;e?;qv2znNz>%2ThvUj6^EACpH#!+*568v z6HZ!d>QoH-h5KWq4-H#gxY%93En(OG*-4jkR%5)guo9-QyX#NpKlo_1%-AGOh}vN< z==h@PhvE<0+6gd~hRz*m3m;J>KQK$9QIMHCB1q(F_#9CTFL1QS zd9=eo@bS!hqCZ`=)!D;QUKcmN(Ub`hR+Qmqt;Et^1aHtf^GFEIns|R@0&my;>bFy! z>Gf9%)VjQtbqOyxIbJ?@%VzrQYfp`J)V8YkFrt-=s3HasdZzuPa2D6jk9 z{5grPpYBc?DmWUtyYxOb{0*zpq&)#9eElrB;%WkHhF3HSGwwP1KcgOMD5mVMGmB`0x7f3=3RB+cKq`#TIsLhXXfzfpkyQy=;A475NZuM{jKsIQhxKrDuzyuLmgBF;nbYlv1i=*X-!$7?-tbFwV)0!p;} zuN!i0Q>F0-ob2%A{njsrb*Q&`wT{;l{j|+)osjZf{rx?6@!+za<%Mv=!err5%ny!Z zqvAg}Tf4t|8dj)=;AowNrw^?KW$A`_hhOfSp&-gCyL*4gB%c;L{Mp-*#S}9*7Bpa8 zu*x`aeCL+qr&A9to}*M6C6S4y+Cn9fPq`^CPj^dQ!U$R#cFGqgEild%2|=4QoEG9vh9(6 zZGK{^fu&CTE6+xEWJ!KdZMi?jzVYNPJyz{l!fT=PLZ6z5%CU7raXVM4(mH;Mp5(K~ zR3w2TR*=BXo9nR*_d%d_)Rlb?dR89w8p zGUxXseOzoP-;P^sc05_me}^U;?#4G2)5SKkY?XJmq74+!jjbPT|84gs2MFw((%Z)j z{7=b^!4r(cu&>>po;@&pA#Qj_{f~o+<#}@qE;`z5fYN`5fYq zA}u0o3U`n4ulqrr+qgc-x4NC!Gx8_1W-7`Zd>{ax1oJxHGR)Ogs>2 zvD2AT(HO9fzg_zRjDqo0p59kPW9{9n=vb-{bpBFq+dp%ZKQklIm8bQ`I+!@Tsx5NR ztzSF9kN?i+I9bWPxHC*~<3}XmIyT|SryLZx%M-1n&2DImopx?^+vivb*3;ZDa>_F*`8 zY5(ij%#G_}%d%r@yeIaa5_1N(Tm4;4aHqVdo&;SJpd)k+`*BXNfSFNY<-4*G+b}J_ zmQ5c8;I6&xh}>1(snHt06g_8df?;m5ne$t%W`M^AY(71!yGK#&9Jj}8j3X@~^FxuT zk-X|m!fT&~thwUs%1Kq#8mG%WnOKIGq*(U~b8Bv7EGefHrUmo0VA7JBDT)q85hN`$4T{*0y7-$3=@HI-{bMB2lPrvYnA3VOq}V@azsZ$x(1I>e+G zOg3WDS?U~~zyCZtPRn5w)~yzykecmv6;=OXBDdhU!>4>ilYqnbe1~X`H2U`5-aFY_ zGY-C&L}_wRhVxiKSGF5pb+Fn$Qcv!RBTS(yC6hYYO}_TY^sYAU#e)3#u$r(6qBHwy z(s;fveCAgyb3dqLOLbCs$BnL}En7$nY76AtYV7eiE%)0w6dl$J`Ovxj+$fsW-e}G- zDCZ@~mb+w26vOO==KlZD0#p~TdN;o0zw^QW9hDdttMuZ)CE@XOCZ@|dA)Iu0;bV@m z$8PV+uDU9%WK|_x{fq6zM%?1&B<&<}8OuYYVLSiOm0x*HKP~5#{FhxJk6$;+hjon= z>Omh+Vr z*NcehGSt^x8WGmD@%b@EXTICil&`T`Zb)yT%~QnqDahT1kLgi)p=U-f=I2VdU;6Vj z{KdQKe%Xh@;z_Mne5XxqRBd;-E8?eB&lJbnd|x>2Cz>o~dR-ZbrccHSeEx*gu_L_V zW%(|9O>@C~LZ>eEw>+aN^Wif?@{_yhO3hNEr~{in3d*6r@wd}T$7H9V8wCN80SF3! zULFKYLr$v%$hqPUh6e)@lsX%hBy{Va9U$w~(}-R!MHa4MQD?JQnM z>=-iGKIQiQM0Zie<8E^2-gtHire{fBd<+ax$(Oxg`ZoE?*XzezVj$U;{m$iJNGB*H zEO~RP@oiUtf7jiEZ_b^i3*`q7ZsatZyBq3juF5pM)i9(^sT0Mpnot>S~S1Bnkj~kzm;DBD!5%oQxfO#J;RalxVl6<}u3hMHe1SZANc)Ihx zN{Ztci_>k;&8f@M+eTxdq)y|^%JVM|DL2(`M)TS=pS#G^xe^e?WuATip6o74`-~&- z^Tg2AzGF{Ky>C*T@ATB)hzPwZcRm;56mt*%aNMP$E_*edN*MOZ(7h3g>cbDU$I*(6_Zo8i0z)~^0&Cyz9_Lj#z2WLEoM5aouBT~x({KEa_3RbhTf7m&*NQu zkWTh--OT>XiDiTp_>g=rxLAkF@%sf^GDfI@++3y7pwQGMAlP5}V{a7Yh3 z5E(!|Wu3AqC@QMz9@DTwQjf%_)N+~%2GCl+8g$>@ zt`YmtPTi1HIIdRd^gBI_-q1|?l02U?=$tehg{19NDSPSW84nFPeFc+3UcPq>+r&X} zdf%Z4=U;Fk$Kw9tbN8lxdr(}>E#EUedz7Sd*Ej4qf8G+3>4?RTrw={Ltlr#pQ{Pmf z9;pyQ)ldE=ASmIDo7r~%+&dbO?aVfZuPT>kHnjW}yV-lqlOWt6-@|*~cRkj`QqBUa zT;QIfS34_B$b-`@cTt340^q-(un;4u>oqJL0AHEx&-7eeborB}q@?5+Q$QYuvQ!(ygmvs-{I!d3jf}fOaDVYlsMR(0 z6v`698*1YLmnu{3*H|zzgGv*9FYrlV4D3@(F)!}V%bKXD>@9!xy6SXdVXc++m-O$5 zh0dw@V{(1Zt?Q95YSHh(kd zvoHBn;d?4PQf40ky<399!ZVt zYz$#>QlGs{<7O73MNO@&yzIC5qcKQGCtlrFv`9{C>esSoJ(Q`y6a`E!1~QdIWw-#n zqx_z3s{S-?pv6I=3^(apVuPfSo44D>0C(A-rlz~@oTX|G+8DEP6KGji%^tPz}Wx=<4uIw4Bv;k*SvCV!mEwSfa$Zl8W_}YQ*#CQvV5- zdbI8+clGGE3+NfGd{VV8TDdIj{m5MyTR!I`s;-Az#=LnRjr9_SuIY4F(8x!%G>ZZ#PG-`>k$XBG+?DAXtue z-6bQT8<)!;L<@TD4-5~Vt?SOTG)r(>ZW#-n4Fp;#If_2ZvE}x5&-dJvOJM%u^nR9p zeIPW>68RS_Z(3Gs%htTkC|!*cI{&BnKAaylrux_QW!4_O3O`CEUOVN$yOrAud($yZ}zZr{Qe zrB%*Ncevtn!5S@lJ?9fOo`D1hj2)oZ7`ncH63fP6@fJK6m%~w~+FI2?!M(d`Q6mqa zZ`!IC3wo@yOP^7)v$JpQ4H+@QOdfjrj{#SpHM{}(r9j&t4sC;>KrJ9>`}FiQRZUCS zuhp_;xM}g`NB2u}s?JipWN6*xB|I_E;nx_f# z^N3{H@!F?PjAaG*jx8!%Mc28Wl0GkCc};kwQRh`a04BmJKrfatOfW%4JP#K#f*t}( zqOOhl@e4_RWTX^`mES3(6%-Xo!K66o&`4Wc+H37*R_gmcLaR;G`JId0`vPq{V! zxTX4~;H=&4-C~%o3ysDyeXpffjI%z@uR`katm9Py54mQ{T%>UFU=9%7(5!En`*du4 zoNq$lr~1RCyh$M*-dw*bbHT$FNy2{K_wN+mSP*{me!%jcNZPN!n*CvRWMU9YqAwX4 znJL`v(ntv#bQc?}_bI=SL}jYKfupAgA^EcISC;r#yJswS)j z>BG#?)V9C5U)b|svltj0>$?;m%@0Zn?yuG@;5yuy77(qJy@cDtTG_z-b$eFY!%1u~Tn!{z=P9iiBqj>{ADPc)#R|$ zeO4Qno-a#Tf=DXZDp}}Ga25*&J@yM)79uHp>RXzD{b@WW9QF_Gy}rX^^=9w|wY?`Y zu*Ua`qi&!l>AkVb{4wLr5qz;Vz5rt&QGJ6h7WGccHuJna=E&5(#LgZKHa+(1BRL`s zzVJG-rZ1N+iaI+FbiMuYC@0YK4;THnh2CCz6jkf!3myy(Zl*7j!m|gCM`p!wu(n>#@Zn^wOE7U%UCaHXBe73zuL3D81icQ7J5BC zhj?i|W0M<~NBeY?59;1Nx?WFRI>Pdi-nUCDDOiD)q!F!+e&6;pO5Ro!EX>KoSu2X8 zjP(TsXzoh|FT?U&PFg5EB9NYitu{;CN?&n zG_SAF7@Ri|b?@a%sN)bxe~A$GCm|9mE-S-9K@(~(oj*1xH~iz`sAxKgsPq}WjoCJRQ-UGcgi>hRoL4g*o^ck(x#&-%X{ z{QL8<_lD{`myU+$vM_lAR#1COsRUniUxO?do;~F*Y^;Bu-C4H46oxh&5u_Ae#l@n4 zVKW^a8Ta+2yARa}6C_SkcJgV3{Z^89(*1TtRN!y+mR3);DZ=XH{#~ygV(XXp|MT1b zUc^iPSxy-XFiKc#_~R1(ts9pb;HJ|K+#5|@9sd0 z-3p88=}4su8%P>1IypH(Un?ezAj>E@0ht;?aDR@AL)2=Z*zZyO8k8=+$SEvb*>-NW zu&^Nfw$$MZ^!Xt#X8;`th7NgpT!|zHzo-E&?(<@B*?2oNa)WrQ68ChYimJP`}KLQIC zQ^%p8&B9!H4R%1`NF({Ez!_09xw^U{QKXC==FNDE(?O?m{$3Sm(ZsG_zdkiPi)ahJ zl$UFdPOm_lA?4%8kBKNKesaw29OB~R%RuH*GWkGBNt2Zj1%rS1J_%@C5pqMp>%?_) zb1Sc?FzL@wg-(^B`{iNS2IpC+|K0{u7N)wKi@zs+4Z#;HMi+JvAcTj9E3|iXbQs&) zN95$>P}S{&RMBS! zRoC5MntB$8(P#zVeYgwgmuQ7I911NT^b!(uAk&nC?slY81HNmC;aQa2P~FOZY$Rj_ zHK0oKg;qKr*-!8OyGrm3C_8V!p?iLghAK2P^fJ;~Q{}dq;sR|`6P)yTki$LB{BS&$ zt;Ge+wk9waO1s9hgqHEHxAW;$HAxrAMpYWghc7r+Q3{g0Phh?x^dURuJ{1)cn_gRc z3)98YV4TCeJ9>>05@wAFBT%iPP;MJzJb&6+8yYY!yg9DaIye9mZPSRy;ga~7x9m2ebH0Lv7|*zYggF+$lp>Pra*uwC%XW*%w-@0|9(feD_#xC5rs^UvSFpLu{~gI$fM2utpOWk)m&VF)j;D1E@E z5&i%}31Si?{1OwyePTl-N%uB7e=(G7S2PVK{YR7^b&qgZv0N*kWgQ z_X&*U=^LV7>VWpL7;ScQ5T>rdUR#4vXU1T(V+GHVv{DZ$jsL~kS4UO7cIz%eK&7Na z8U#s^5b2PXZjg``36T(KK}9+x1eNXvTy z_hPN}d*3;q`OIfNQ}+z~(ctWa78=(l8Pz{eylGrlGl1WyJL6p8w4m^8XIcH({+dx7 zeC!)a@eMs+zux!o_)>@8$T+ZDEcE5x84Q0)r3A|jS9 zAwj{CAI$-uVMOaUz0Hs;3?IXH40jh7;@K{|Sr6PY{8{d{_{Ew0e?@S4?P2VHBJ6*P z>;6Rl`tSc;p8Ib?^uJyz5opkmWx_S;oPlT6Vdju<0_a=#kfajPQ*vvxq8gdnYRLYH{(!i+B zj*bSui^Q{QYvJHsQCV5(@EZo$9G7~jTiV+4YH8cZ!7a?h)KuNl=-$1Ha32r6PHW|t zHr?Rkj82|ir1!gx%h$-@M|k}+`0#=0*-scOP*)HmL5yz&ofjRFySuwfJa%nL?Y~n% zEe$?3P3^Qkp)lc?xn5@T4P<b4XoXw$vqVUU&9owJ+L*27jR@i1{%ScFa$Vn7B*p@8j@^6(Hs^xKG4)VDls!jRTV=cRCkd$ja^cS9*v8t*n zx1$}_Br)$`n6O9WvtaG?(vY*5yL_}__h;*65$_`sI72cpkpnm+b#SwG4ZbAA{0v;B zOrJdIySYA`OAM;oro@m@Z!o!2NQN^U0v!CB$Y@(n4=xNk%!`FcGa$hY^s30*fnMkn zji>VBV3t?7^cIRaQYMIAX3~sA7k#@ZpJ|J@ZJ+?H0eV%}U;Fb17p@)rD+%kWfB?C$ zNe}1mfPT=lZrp&UuXzOU^eRy0QOU{1b9)fuHeo=cab$!HxF-1T&7SME*r>AS#W#Y@ z-D}6=U%q{N^(|Fx5qK~uB)`9Hjh^z!UE9de$Ox`?W-0g$KSQa_c`@S!Z7RdKf*hP& zZm=~J5EL|pp^gK%n5@^hoe=XYP_+M8S-C_L5dZ;W#FH|V8!^N{+|%?pWWnQP6Q&z% z==CLsq1u8&7%0z3RQcr#_=grgn3>yjV~fqVZ^?f*!fNj}T4;dn<8y9Puc_%11_I}u z^%+`t^I(-M38pfp_V(e(RT)T=5voog!@>NFH$c0Tdg64b5V+erQV84Von}G$_Ce$e+o_k8oQABBC zNO9QGfw+f(?H~YOo(v7^Ld);pzr&!3a$_tZ^H zOls>qf3{qNv2g^x%GN(Wty}<+uy$A8I}z6K1&Bu4Bj3SY2Ol3_ds;7N4k9>sd1*{6 zf?5`pqF}Y}-=a6^xP9n_oIUt1+aTBlA)`mgR2Q^3AFR(@;Ku#Oti0LA&=_>ys$z$j z;wKvzkpB=6&u2Sg0>K;Q3nLpGYwJMD%ZoGc46PD31ac6Oy?F~r4L zdt?TBdjM(BQOKMKDzAs}Y~igjI!aPfl7dQ3LIQ;t8}0rcO^4v!b;PWiG<;yxs(Caz za~sL0`Neg48Y5j@3YjQS?C-b3cvs9r0#!vtDH!)~<-DB<)_&0EnH75*8;hXk zM`pER7(Q~z%f?q_&Zny zr-Be3c_Cyz9dg~t@yvNq`7cfQf{?QYtpmhf0U|%R6j_u_2BxdO__r3osKTBa@&XpH zcF+NHl$x5Dm_Vv7*Dpf5I z8Wv^{)&*QvNZ{!p-~*}(#1r?g71GYH^Z|25e|lbCVklc=!So5PG8&53d*=%9o*zB; z?Y+P)w9<8*hDOBA7a;0f^?IEYq0tLd(}f3|(?MW#(=rRPeWl;Z!09CVFuF z;^i65?%cUk;JQ9-2RB-wd92HVryMZ%;*TGVevREkPU^Icl}xa$eLR(g=c6QC{Q?BZexj#U;= z;zDkMM^NPiu1$XuU8hX}6X2rw8K1aFP4TorZf)0tQ-b_I(ejLT(A7dp1_eu!=8ZbR zn8z-TI@ypn3ShwH50vXlY_UA>4j0$fdcnOVO-m(_{F=EPSXdMQObYE=a&~08apMzs zH*o_N0<0dNpU?gta0A$H=@fDk&!PEJ3pn^5dw~lkmM=8gSWn{<5=y{XiMx&bJ-0a) zMguqqc6#4pVtS2c!f!v-f5=U!K}lndH8m6tu$o%}0}HnS+_8R(lB4MJW;fjg9A;5q zWQ2x7=9%CzfM41U+bdka7|rA3*C58VLq{E&oNa}khg(dLPOs3?M$k+7FYl1!|KhCtfe`)oKmH$O4)asd=^dcVIpU={+OcDBwE7m6y`eBI)UQpzR8NkjTIdB-S5`i~fMJ zorw2Y5q}KGO;Rv`2DY4ts~QZHB^nefaJZ!YPF{{qH98Nw@(oQoc}E|6*%6P{dE467_6cTNO8_T+0x%hW@wH@JTwEKu`5&09w6M3g z=iug!f`Qi{@ZpGt(;IU9+}&Mpdvnti?5h8OUDzMU#669TFTkJCkKK8FTJ)i{btl91 z>wjr0xaJ8GbS7X1YM1~fQan-eEyyrcTvAdmthZ|X^XHEq4Cv}+73pc+9Th(%Z;D7Y z{QK5-%yGnzaxij;za)WOS95PKKJ-ETq!|WQ>cB+|83h8r!c?`KZ{EKyQAc~gB+4v& zJ&?V}CMIlLjPWdi=>eep1GqI=;3yD>Q6$`;9Kf;=k|{lKQ{a5o0*VO!9o^r33IX(db;cj^NvpZr~habv~93R;pD&&B0ZSiAeRx0 z_Xh8fSi*{-%P7R`6y_;mHm0d?>EA3G4=RTwgbm232v!>6l;b&`mf!UyDL`62ReG2D zmnN1BynA@MKSLj@02aFFplL#8kEW-m0cF0HXMCBMn5f~-%*+g19MDh*4Yt#$=2euh z1cly%IJ)LI&@fliU(eM@)9>+qeq z5J^c&zEs&uSIlx#^4*Kb2l6m~lG!iv9Wd>o?+PUGS6VIf;o$*}$3TH8Tm!IeND+@D zYS_#G!{3@7+pwP#&&tXQ<@@u1S8{3q6BqAJqB;80{c4Sx7uQ?#Vs$&{ zvprGi(id^KZKm17O>3A5=#TLI9)%flB0C`fiqMfWl<0$%M$U?I62TT9$@nHF9SLZA4)412=;(NJkRVM4%HASp49DkMVF$(Ez zb4$*=i1bLu^dqnBkzA3mWB<1Dh;8aKfHyer$f*|Ra z;K47&7VDH)2L|)-4#N<~TIf2;Kv0U~Gztdo!&=)p1d$dvz8@WaNGc@?kwUshK>QU- z%I;QVq#B+yVq6DB8e-*(SeHT-4{K;j2v7Kx0FMZEIh*0Z`O6|oFg9of-U7QG$ z>EIisr?1~MFmMH&g(bk;Q6m9*11XThpk{tFl!XVZRDR26NdKikwm_=^3U0aBy@k9M z$a!FK=?+-*#>C=;kp05koBrvb3O2{D<>?0XGx2N`Vt`O{3q zeG3zCx$e6Q)F^0y_`*0hvegJMRUyx1Arv@o!DJpbyk;v5;=vCj$lQe=h(j;ky?mpA z<(eV7)7Jbwzkq-_NaAqj!DJB`jtdSBuH*qs)(pw?B?9XJ_99sk3Z1Wo5X%t7URPI_ z11R=@E5k;{{-J@dd*g5Go}OI5fe!4txn0)`k%|C-*Fx8y$qE9vVR|sS%V}JP3)Td% zrs6s?v)qDS;NCwSwG78J0~CDo${$I1udu^f;%4|RSy@?;2}}sS$oE5c;|A6%EIf1+ zVv`HNT)=gW3b6nO+a|;6XLwKvyaGNS=m3Q0;?OU}Vb>|}m1k@MI1LEn1+r-th0J*a zZZe0QZKxRvACL$dH?tGoPiE?<;nW;}qh{53>@z(~NYjamCbDaOx9bRg%<@p`d99MSl@zSqfG>DL>WM^XbYm@=d!iv{ zJAAtX)viwt4h~RikFm_8lJF89N{)zN4GG;aI!jXeRdYoW$J%RIG{=!=8Iw^&gbEzK z1iX(*>!b$A-(9>v#CCr5PN8{TMu>S@LL^XqglV>*21A}MP&x>B2e048o4S_&@zMo? zotq}U_o$;eeN=A~^Kd`hnU4k%Bf61^E|j|m9KVp!axn3n{qZBUbb8E6Dk~wf%r{|{ z`!0XGh0PL}mf_I*_stST!aZ+kX_MTDS6zf!+h@|Ej%+3TuwAowjQ?Z_!n*fYWU*Rd;AS4TkSf^Ags;4GvvEX zmS*&?ZX!9stK@%E(Pl#bZv4s0#FFv0IH)7d))tn{Gm3z>_R{cmS&%;cPRaYX@k-9u zB_8+%vQ$5q6O4_GHNeq9P$594#F@!@A92XDD1hq+M@J*$`!SEg3nZbd8%Xi@N0<%I z$GjlqOB8V@f>VN=DG0+LvL}R1LhzCl_0Dk45zY+md^51ONU7J~uLgbtzqq#A6r+6m zLkQvArklV+q|a09@#D;0Vi%46U0iZ90qSE#MRAD|PzT`E8jDb7*98Ud z=a)n&1dGuP6Lkv=P$G{^_FmMpe)!?{08;~UmVtWa$K0Hzc@?N-zv4p{Zqi())%< zk?`8JPH)bC`rF``Mi(VNe7O!E+)`k}6H+&TTdvN2=H*eEs}fG@mp&QCm^qlxwJ=20 zNe$w_{UUiXyYu2N%$NP8JwwnX5$Hi~9uI55fYJ4ZAPrn`dha^qXJ}oStxZ);eFD;0 zK68+w{yJF*Jy}RT$JI-(g%mG6t-AHN3Uuu}f&@BdXdCEm>TPOt>;d_Suj{0S$c;{t zb`HH z8(=6r3uzK*J#ZR*0e?swZz{=jbu|X5*|*Fk`%O}TUomH2n2!4tr|-XG^bU|+fe&R? z`e>d~l7fE)zD!GCXAqF(i-s}#^Jmj31lrj9Y(aI6AUTSsh#L?Cx-8 z7e*m`XhZNP2+!r!1ppA}3>!z-e;HEV0jV9i+e32JT z)R_P24kd$Z{!1Q0NeaGJC-rh}`g)f@gndb&i=JmrssY34ffoK_ugx=O z!me+-o!URg|8J#$D~Gh_ywYL4AK_5! zW+@J~CT;2y18fc&VCL!W9tJ$=v!JW^SQ=h<#T&s{H@n1@`oNJK zj0eNv0zw6f2FDckOhESj*@Y}PtUuYhjF@~xGpqiDgp7CwRn&pa2K-fk_sx*#krhdh z{*cXXh6%9Y3@kECW*c50oG|1OgfIob7Q_A-Y=OZs(F__4m0pKD$N~qb8~|Cyn$u6T zo>80z=b=j~jV8O_ay(eMj%(<{^e4A>|ixyaB-@h8_e21PDQZ zLctb*4`5!8*u^+FaG_>_A!|XFp26-1R0D)Y0F=mjB{GoI=&(Y%a9Z(G3G6&Ro5JvN z`N@fzU4J#1R+V_c&8Lv~@*&Gx-7^C-dTD+FPfQQNpGR|7<-bH>2w$d0uT9LG;Tm9v zxDy)pGwYSTsFLpU=dc7|dYT3WeQopvC4cZoC{hATjDG090&R$ag1r%7o_(1)Ti565 z%U7?|p+f^=jv^==)MC`_(hCZ30iq~a9(ajCV6Ni%i{=KTa3q!Vg9^}9AJo{WkP2o{ zqf&w_7cyRt4HgXi7wcUI1BAXL`MsT&3QMSp#YABMmtm?3W~<3 z+}b^o?9rW&%vJ=huc+G@PaY32-FLU#4(6f$AZ|4HZM`d|_ZqjT;031Tv-=D%UxAK# zr&ssxcAq383KbLEz4`DuyJx;GZ`u>#=T~j#?0=pu(d$RN9VTF+YkB1O_0|q0*1#LU z2#^esM(7c~j5(yt|CA1*$swIS{X}b2xfzcw;j5YbTuRf~TQ1#w;>?Kj>Q!5pW53&4 zcY|tEmG7*K@KjNB--0b!qdOE zO^~mi>ptQj?RCHf9je!W^&PsQo>d2na46|B`3ZoJc6jz|v8zT5@K$Ws;0Mp zHMC)FW({qBJ;gOyY~$(h+TjqB(PqXRnx z&CP(pBal_#yp}}L6GS(ZFR(cbz{zS@FVK&=6w4Cei;pmbT6Zo2Q3~MEudAfy9tW8e2bu1DPLfM5aU{!5#uIIG zy3fo>fQ{_=kAkx0fK|5W%ZG#jg5!!s|0(aGF<&zBtFxD?e~Qnp{?@fbM&0Ure}%Z# zi3LDGT1LT}E3P0BIFKfYQc{Hsh}4I9x#dv-8*)Z<#;GAlLl1g0zy3gZ2>^2 zLIK$b4&!RjF`1n;K{#{6`~QvPw>5TiV?)BujsxMvVRt|(>@XOE#u`87E!6*1k{S); zMiUOb(KYm62pHu4;_Q6lwV+!1tW?MIeNlNVb<0tyV}m$;=8yBQE17$Df{u_=ln?wV zk6@li=N*3jc9?Q20iKMayAoQa)@Hj|;6*hHtX^5%{|4Wp!M)i#WHE$uaqx4(+U?V2 zh%aNhJZ(BEdA>X}f(EKb7oRHpXpb^UIb8#J1Adu^J|aiKZ9#maL*j0^XPC)-`JNck z?2l+5e36H}l#x%*lGn3lkdzFad>v{PDCS8ko_X>DZI!BVX`Abd;$@uMk#zDsugS+6 zuPjQU$sSdi{7}^`VLn7#6JZ^en9oT4dl%jr6Ao6Eu$|NSk-z`!n#8c$*LBb8iAAl1 zME(u^N!|4ke3&pyaQjeqN&;!EwEUKaFbD}lbuNrz`#ne{8YHi!2t=SpsJf}O;Pki) z4XXcpGfiJ`m(8kMQ4vj&vZ*b-bcN2Ip34CRYIfSHIhQq#=5Gjoz*pbz3|*kwNKI;q zK=tbQ&CuihH>T7M9G}G9L{^zF_H-Cdp12dr9@bOvg}gKSg|3(~x+nvv{y&)QU!I%P@11OTW+9|PQ z$6mu(GQ^5XYu_%_>I>7YTV4}8+Vq+F;=J$lE%|f(Esf_jp`-E&Gv0GRD&NlhaT!n zO5Tn@@F@UD`mpyu2eYBIMqc;fYUbFpEl#l$)k_n?YXW(85IffrL(R2c9?4*UBt7_UJA^cxZOw#!;EIm zKdDi^Y7!M46Vg_1$!~r+q|0zjkJ`ZD_JSeC`Ov#|ZSA}57Xoo@u=za|y#usmMs@b$ zVJi2{`a+XoM|_t64d5-{eO>e*DCw)C~PM1-ly!T(nk7zvqIMT6v~=pEvIEGrhBPxG1l#eg)|$ zKuE9|Er#vC=dh~lqxbPMMCGERqXQh7?7hx>CB!RH2817wxE-KDg{;^`b{tpK0pSZ+ z*1^?P4k}s*E&;IO%4DfG(J%oVtj)mY9N`d)469xOHixY)fBW%3_T`%3KJ=pDtEbC| zdNTxtDz1)~2bsQ)7v^Q3FPE@wxu<{s3b(voyGyN;SYCV8mws9Wx}swEI-0mF7x~C@zd=Xv^)ELdMVZSu=o~w ze%|Gp+urDWahpoHPnJ@ynWCzD49A-`-x%x@CZNm?z_qRD3t7BwOQZzafh3}Up?L<?4x+e<*{}FHZpALuHS9jR#XQ^+&j5DqFXK>c?|ap)SkJ8_r6;_CBh?{0?{n(A7g) zaO*YO;aJxhq+JksWV5=VPWV`Ugd=k{Vf77{*Pfcqlr|Oge>h|gOl4IKJq>-oTk&kn zoQpPfsBl6MIKuy$lN;-MGDmyf01mIF4|Pr-B5gqM919cegibsb3f4b0x3<1ENP>O^ zFwsRyDk|ZF`>^8+(T=PggI>3zw^xTP{lHK+VRUqqRM7>5hb?A~u?v!;6+eystp!L` zv*PdnGWGV(<{>)H1(A*}rKR`>*&*f{R>#PI7$Q`|z{W@Pd;qjYO)UI|!)k3_$xtM~ zb-4~yBka~KdUgtwD6+O_s@hexJ&Nza43l`nQvI~AZ=Y03h30o-E{4GoWtje=)}gKQ zuRnLV0CopEPezqyOt0~k$u>@WwjzMl(OI{7Vw!-t2HA+Fxzivah${em%L4AKD1gub zoumLQwhJg=TILrPz>M`Zdvr_;W|blA9rAFn1OT5oe1=%>L8nd*CXp(6ir3}TWlLza z&FCkz>8-ekH>_z0MGq%u&ip}F$N*cQpo?_?+L9e=B5RAvD&J*1`E=)#14qP?6%O(LJHxJe`lg&DCfhB&@gwaR)z7N~ zwk`>Be)sXuetp~2R4OOd7iybE7#D!HwhZ*EK-rAgJ%WKRn1-5x&iDXC_rJ@&LL(fO zSTKOpLc-DtmRoDVSjNltIaA=14q$C-(D~VZ{Q-30kPVE8R0&Km|8mg?8whTem9Ul_ zF(Uxh2R81#uq{3V4Z8#*ktwvgkgY_>dM#*lWoD^^SKwWcBh?-Jyo{{X0*bo<`o^&O z6AgvLD8*hBeX`v3+2yE!0Bq19eth~%Ba}w;?-DO)y2m`n86aE17_5Y?a(JMbXfb$F z`x>Na-T^}_VN+fd>)y^Z*u^IouL?W&EdLI&FI3upd>}8bd*bb2AkyU-blv*Co2Mtw z9h&OQ^^c)%^oyCHl0wF>pP)HTU`*&^uodx0;r)1K5cVP$) zIw2*{F(M%){Q-h(i3bm8kX>THm&U)Zr?5mUs=?(S6U6ekprwHh%dGMF(bbA+Xa|A5 z3TeK8LI(7S$l8z0DoMnr8h9-v8^AVN?uqipA)s?=YHtr^l)w8f1&j@TJH2w=+*@GUU&mCB8YN zI!_vriWpcPftvGVPE80k`{T2J#EtRzTv6g9Sa^8rcmihl*CLI(u!h8?>xMr4+w*UjAw{0G;1bb*V5Bse%iaOtG~D{0;9cOy zP4~~a1TfPDZx0^=DAH^~1V>=S&)w#5TlBIjV7Jy@bg*yuCCpgsR-7$NZa((rDRxP{ zxa{@~vgN@~L3PbM6gIVJon2kXF6hd6sZ`JuBX|Ju!mRi4DMM$>xZ%{sW+j>JNl*(N zvVMgv$Nx9l+c^L1I_>BbvpeVWWZl)Xmbt1_ah=i6uV15sNkKZ7?Gnz*ElteETbDFi zg6UWuX}!ad*St&T_f!Mt;;+*|=h~ULNug@tdhv%=&{A=F8|mcQSz}!6$s{byd))I! ztk3Hx0Af1h>d@3w&uIOb3yjt{2qjK={4OjlFTb(+8TR*a)*YDjJmdxE%ab+N`rlk} zaMa#I@7MIs`)j~Cf-!{9uacY(f?5O}huxc!WuTStfTz$6sID zD>nK)t2>o{jp@vKNv02Q(G9hoACKx3oo#1}lw}lT2Mk*YFkP?!$r&WpjG=uFvdeuU z+qj^h5RQ#dQy1jaz=_lM-#2WA)-4=zu)wWSnK}Qy{=A*`{6G$*gB{S<{Wxw1`blQi z`E3}76M{1P;jh6=#8VwiEQE49{2-8m4g<8C$*=@(yMiE&=a?xjh;Rkck0(vY7eyflzn4(Ei~c z2i}FR&qvOr*~ntd#43)Scwa%^G>m5wf7iHe8!>zF(s!y<^z0npM`hn>#o*X#9^#P3 z&ZYU8?CwZtsjvgdy8tckC3fROg@Aqd(tuZAgqffDy!;}Btf|@RVuv-P>`8AxAoIy> z(=5s7%pDmC0k-ULDEX`fT<7n)xbV?wcU=x>M)r_GA@SySaeWf)$?RV%)-EeiFqbxT zUx=Lo2X?q{AB<0aUPY1w2)g$C+S8mKs^^*HhBUahGrct&v}~;fplSc*S5~x;mFx8A zUV(nur7+o{AI0V6dl_OCw`TEiV#GfCmtj-JYkW{KeHZI)zSUdh|H|0U_6FJ3Y6uqB z?e@E-?_O8%Ydf9JjO_1x^bpPd;8&D3sF_2rw?qqLbE)O!cXGRwLFcTQrDS^QVclp9 zs#lflXb?2A9wSQRLY;1SsxjUm19~y=NNW!SdH5jEC@n2zIW8^EfBeQV+b$_dNfQJx{W#hDLy*d&ZWDv zQ++zWuyB#%QU>4S0_H!F&lC@e{H)TO*G-}zTkB0i{cx`C5dJ*otW$p@9CYvk(dsRg~4 zeZ{FV1%^hN(|^_C_I_eNpV6H&?P>_6p;BI#)t1mY;uxsJ#vEqUimhub_Bpi$``rQj zNyIPWn~f;DxgKl+zJK`P^WDdVWc{Da+f_pOggrb2vJ-hvjSf$3&R-5SRyxiBAqdkF z!E!Y2exL!RcAcqv=qI2z6ReVNY8)1j-?q3py+`5y(7-cnYhn_Yz1f*@!EP_mZcnS4 z>ygZ*4`hRn+w8;b=IkD5s!sE3qpAP;ES=7cE5sVChSw+{-tjed>eR)>1%MjsnoTq0H*MO3=Y@d`MTrIY23~Jsg4fybe2TD;h|>1#~%vU708}z*O9xs zyTdB=NH|MZF1<$fW>xJBDvrZU0+dS2JMncEej9#2QonlaP((2Z_pk+SR(CQOj24>w zzD6_GIcR{(o`zHZ9yj0C_TZ7!&4}kIOzjL#=kY8@(Mlcyl%vDZvN->IS{bfoZ3uqS zAiW2fJ_jrfzp^DtLjdV)7O)ql2{;T_8gjy(%$}AYVl~Eb7QrAco(usL z#pQM2P*k&}U|+p@2f}n99nO@?sF9)1=`M_XU^vW$@oz1sM>zd1tk{Z9KJf#5yxGIs z$LOMV_JhEu17cAV*g$u}0!uget7E0s(HeQW=>t!N$zpjGwUi}we_1Lei6p@IE6x5X zJXC?P*(GLOd~?;Xfc*;HA@QMsR5XhxsTJ3BWXTl#3ut?&6z&%W)Vhdq(ngJbRqy-| zX1mhqnZ-uO<{kG47gq?6LRuRo7yv(r_^r{igf0DYvgf}IW`06>un6OZ?NC<3OwXKC zRXpq}gicbM-5vJ!n!O3zzn{vnmGn`We%;Zx;;nY^Gj(@yKE7BeA~#^3BpI59ZxRwZ z;gM`-JfOd7^z;fOOCbWW13K~3U#i!j0gWt`04hRbPw;Qb8J6{9s|^E$&Gg!0&vNgZ zM}nY8K(PwT?3a5owK|8(Ve{GV+!v1=d#)vP`&8(ZEJ{eJ66B7i{_|Nl{B_drzGCzJ zplImvE7M4aZ|Ko&k-af<}d*9s1IM)21z6jXii+s9wd<=NrtPwx}UZ}cdCi~Z>j5p{m!DIvw08(~-P zY|QhSAFi}CCDG_ar2qYr&$3W4GVLv!qF}dFQ63ZM9xW<31}t;(`y_()2_L zJ~JEsXEuf;PMy;O9;%0;#m}FGwu?`_YRyT1x>FU!z9XaVW5ni7R&^y6tL#!7@(yp` zaF_VbQDg zNkyt}I#4D5humj>9%r{Z`CSxx8&g6nwT;M!O!@mEbI1uACGi?H)CFmS*aShVL_``} z*V$hEThFI5$Vhu_dxFBJ{F-h|Tm7B5&xK8`+1T$P&4|9t^Uc}0pLS1>E)O#;&8hAR zajP3Chs#-hj@K2NsW-dc#)WUM99oqVS1VAOhiK&5T||A%@A?kO?%Lm=lLkMWZHd1` zPXtpj@r;d)S&5FSm68NCmPmJ!r9VtVY88?yh>vp8?Dy%>)};cGoR&HuFE}ijVMQavp7N4}QJ+af6cB(?f5G6e}?pJT)y<304bIbs9Awr)d$u(Q#Mi$XfKx$@##NI8%!q7eWl2# zGU@62sBVQ%o*s{um@1TR$&$#3G~)2rp9rGx3h8a88n?}qHAU%`==s*@j(^vPiiT>+ z+Dp4}GNy*4b!1~xdV0WP^1dW^(MapJNp8;5ZqfBW^HrikDPCUk=gAC-}ar1nvrxA-*&WE=+JHSan+U%mG z+i@k9#?nQ{xoyg^vkkj~l>#ln<^#zqc3E}jQXxU|_m-C=a2_(U8TmcPp17dhi#y3a zRf$ef5JjiBUgh^R|4NAZ=uorJ`r#bj+~K!x>4zBwFGl%kFdD9ZIKCA4WiT%_|WTqg#cDT{5b^F-UgC$$(50#Dd!9jp$)qyKJ@`;z| z2I2z=!%V~2DO2S`Ye+uldF?R#xgmNwSXdy=7(0(Am%0AS5aL6xROpfOoNa`(`EnV> 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 U7R^aD1rEGmk_r-4V*3970|0=15&!@I literal 0 HcmV?d00001